# v2 git bundle d72db79af640fe8390d210933bf72a35e4180392 refs/heads/bundle d72db79af640fe8390d210933bf72a35e4180392 HEAD PACKyKxItree cbe0110b7910d5b4b63a561189e0f96bba826de7 parent c1d8e5755fe68a4ccbe83c801a7400d475ad2204 author ddidderr 1787497908 +0200 committer ddidderr 1787497908 +0200 fix(physics): replace fitted flipper transfer Remove the live-fitted upward and downward flipper polynomials. Port the reconstructed 1000:7ed9 path with delta-specific pivots and record edges, integer cross-product and radius gates, penetration, response-record gain, wrapping velocity updates, and the final position delta. Use resting records on press and the already-raised records on release, correct the original delta direction, and apply each edge to both live ball slots. Keep render-facing Vec2 projections, but adjust their float representation by ULPs so every gameplay millipixel round-trips exactly instead of losing reconstructed integer results. Test Plan: - `bash original/tools/test_reconstructed_c.sh` -- passed during raised-record reference capture - `cargo test --all-targets` -- passed, 62 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed .Bx tree 7012b7acbd210c0640fbeef5e1ff8380f340bde3 parent 2f7e29b6a4b45591ca74f8462cfef85b2ff04a38 author ddidderr 1787497415 +0200 committer ddidderr 1787497415 +0200 fix(input): restore launcher press and release impulses The rewrite used a 375-millipixel impulse for both charging and release. The reconstructed key handlers use the setup scalar 15: every repeated Down keydown subtracts 15*50, and release subtracts a further 15*100 before clamping. Use 750-millipixel press increments and the 1,500-millipixel release impulse, then reproduce the randomized -3800 lower clamp and weak -2280 upper branch. Derive the ten launcher decoration frames from the original strict multiples of 750 and keep integration/gravity assertions separate from the immediate release state. Test Plan: - `cargo test --all-targets` -- passed, 60 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed af=x)tree f38f62aa9e020cdebd26a8cd2e1bdbb0184f87dc parent 3fa3e29ad3655f69a9a326eb5941e3e95c0a7851 author ddidderr 1787497304 +0200 committer ddidderr 1787497304 +0200 fix(physics): restore type-four trigger response The rewrite scored type-four targets but left ball velocity unchanged. The reconstructed collision loop consumes two Borland random values after each entered radius-bearing trigger and scales X and Y independently by 1.03 - Random * 0.08. Apply that response to targets 140 through 152 and effect record 149 after their ordered rule handling. This restores both the immediate trajectory and the shared random-stream position used by later launcher, claw, nudge, and mechanism choices. Test Plan: - `cargo test --all-targets` -- passed, 60 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed LךGxztree ee4d344e8c21587cab281965dbdbd6ffe2e62f6b parent 64d41eb6058301c652fc8af8a3ef2fe4cea975f7 author ddidderr 1787497212 +0200 committer ddidderr 1787497212 +0200 fix(scores): restore per-player high-score flow The rewrite waited for the whole game to finish, selected only the maximum player score, and sorted entries as ordinary unsigned integers. The original checks each player immediately when their own last ball is lost and compares scores by signed high word then unsigned low word. Emit a candidate at each player elimination, prompt qualifying players with the original `TDK Pinball Player` value, show the table, and then either resume the next player or return to attract mode. Preserve source table order on import and insert only strictly qualifying scores with the original word-wise comparator; keep JSON as the host persistence representation. Test Plan: - `cargo test --all-targets` -- passed, 60 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed h@xtree 764bd83b4a7a97468de6a4f4be8eefc299dae718 parent 0c52100a7e196a1b42d187b00f2cd2cd6993047b author ddidderr 1787497090 +0200 committer ddidderr 1787497090 +0200 fix(game): preserve rule state across player turns The rewrite reset wheel holes, top targets, collision latches, active records, selected effects, and multiball readiness on every drain. The reconstructed turn-state code instead saves all 175 live record states for the outgoing player and restores the incoming player's mirror. Add a per-player rule snapshot and save/load it at normal turn transitions. Keep transient ball, claw, tilt, and presentation state global while retaining each player's mechanism progress and contact/activation state across later turns and extra balls. Test Plan: - `cargo test --all-targets` -- passed, 58 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed xJbDxMtree ac5874c01a23e13939d39db060e382363014fcb1 parent aae4671586c8d9b7652970830f80583471ceab56 author ddidderr 1787497019 +0200 committer ddidderr 1787497019 +0200 fix(game): restore per-player secondary scoring Replace the global bonus approximation with the original per-player secondary score and multiplier. Lock holes now accumulate 10k, 20k, 40k, 80k, and 160k; the fifth transfer applies the current multiplier, clears the secondary score, increments that multiplier, and grants the recovered extra-ball count. Route effects 1 through 5 into the same secondary score and make effect 6 transfer its displayed multiplied value before clearing it. Render that value on the table and stop adding an unrelated global bonus during drain, preserving secondary progress across balls as the original player state does. Test Plan: - `cargo test --all-targets` -- passed, 57 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed ȬwJxWtree fe88414eab71e44633198841658b9317a862b865 parent c25287186ae0d043687bbc4ec876350847a08d30 author ddidderr 1787496902 +0200 committer ddidderr 1787496902 +0200 fix(input): restore original nudge and tilt behavior Replace the float nudge direction, cooldown, and decaying meter with the scan-code-specific Win16 behavior. Left Shift and keypad 3 now use the original random directional impulse, while Space uses the reconstructed random horizontal and vertical formulas with scalar 15 and wrapping millipixel velocities. Track the original 16-bit tilt counter: each nudge adds 25, compares against 30 + Random(10), and the selected detail timer decrements a nonzero counter once per callback. Allow the same input while a ball waits in the launcher, retain bonus state when tilt latches, clear flippers immediately, and keep Right Shift only as a documented modern alias for keypad 3. Test Plan: - `cargo test --all-targets` -- passed, 57 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/README.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed Gxztree beaf04eccebdfaf651a85a1193926c8f48563fcf parent 9de3dcc755dc8338be1053ae2f49727be790a86f author ddidderr 1787496737 +0200 committer ddidderr 1787496737 +0200 fix(game): use the original Borland random stream Replace the Xorshift state with the reconstructed Borland Win16 generator, including its wrapping linear update and high-word Random(n) mapping. Route launcher clamp variation, effect selection, and claw terminal choices through one shared stream so seeded event order follows the executable. Use the same stream for the recovered magnetic-field response. Fields now scale horizontal speed by 0.9 and choose the upward impulse from -3800 * (1 - Random * 0.3) instead of assigning a fixed -3000 velocity. Adjust deterministic scenario expectations where the original stream permits a second natural claw capture or does not force one during a particular autoplay seed. Test Plan: - `cargo test --all-targets` -- passed, 56 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check CHANGELOG.md RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed ԝHxrtree 84686f8e9ea91000d6c150593e8258ecac525d98 parent 8b99e9607c4799d6b58a1a74c404ae50b5b391e2 author ddidderr 1787496521 +0200 committer ddidderr 1787496521 +0200 fix(game): restore original scoring and sound dispatch The rewrite assigned one WAV resource to each logical event, which could not represent the original call-site behavior. It played reserved WAV 2022 for media awards, omitted multi-sound bank sequences, and used the wrong cues for captures, bumpers, targets, nudges, and tilt. Emit explicit sound-resource events at the reconstructed C control-flow sites so logical rendering events no longer imply audio. Move media threshold advancement into score addition, retain one threshold transition per call, and use wrapping 32-bit score arithmetic. Restore the ninth-diamond 24,464-point completion, the subsequent double-score activation, and later 100,000-point secondary-score awards. Test Plan: - `cargo test --all-targets` -- passed, 53 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check CHANGELOG.md RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed Ncx4tree 857bd3122fd975febbc7a4f6bf1ca0a954c234ab parent aef404c8344cb71d7e888c3930a5d5e7d7e86ac4 author ddidderr 1787496077 +0200 committer ddidderr 1787496077 +0200 feat(reconstruction): complete binary-backed C recovery Replace the partial mechanics transcriptions with a separate, readable C11 reconstruction of the complete Win16 image while preserving the original raw Ghidra export as immutable evidence. Cover all ordinary and overlapping entry points, Borland runtime behavior, Win16 imports, segmented data, callbacks, resources, indirect control flow, physics, rendering, persistence, and startup/shutdown lifecycles. Add deterministic extraction and audit tooling plus address-linked ledgers for functions, imports, DGROUP ranges and objects, relocations, resources, and callbacks. The final gate records zero raw, partial, restored, unknown, blocked, or unclassified required units. Keep the semantic-fidelity boundary explicit: the portable C is not claimed to reproduce a byte-identical Borland NE build. Add strict focused harnesses for every reconstructed C unit, exact resource round-trip checks, and a 16-bit Borland Real48 reference probe. No Rust source or Cargo metadata is changed in this phase. Test Plan: - `bash original/tools/test_reconstructed_c.sh` -- passed - `bash original/tools/probe_real48_reference.sh` -- passed bit-for-bit - `python3 original/tools/audit_reconstruction.py --require-complete` -- passed - `git diff --cached --check` -- passed - `git diff HEAD -- '*.rs' Cargo.toml Cargo.lock` -- empty V/~Nxtree 18ab0f5e573197f7789629b992422d4c85e62012 parent a70331fb8c0ca41c03d880e71a25b9b1ce1b695b author ddidderr 1787458091 +0200 committer ddidderr 1787458091 +0200 fix(ui): restore original presentation scale The recovered client enlarged the 640x460 canvas to 960x690 and shrank the score glyphs, so artwork and numeric displays no longer matched the original pixel presentation. Restore the native window dimensions and title, render score digits at their recovered 16x28 size, and align the score fields to the original layout. Update the user and reconstruction documentation accordingly. Test Plan: - `cargo test --workspace --all-targets --all-features` -- passed, 52 tests - `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed - `rumdl check --flavor commonmark CHANGELOG.md README.md RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed - `cargo +nightly fmt --all -- --check` -- baseline fails on existing import formatting in touched and untouched Rust files - `prettier --check CHANGELOG.md README.md RECONSTRUCTION.md --prose-wrap always --print-width 80` -- baseline fails on existing whole-file formatting in README.md and RECONSTRUCTION.md Gxrtree d4fb816508ad066b4e19be13cfcb40436ed6ff68 parent f2560ee2f75f4e4099524f2a5dd48df65d700048 author ddidderr 1787429086 +0200 committer ddidderr 1787429086 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaooA3gAKCRA4QfHCfm8O FA+bAP9gHZD7L3AsQbf1BglB0OMqmll4hdjhGGXOryEUF3ZKfQEA+FI1jn85LgjQ kr/fBPY2vopdTzGDoYZCrxMtrGhcVQI= =jaAf -----END PGP SIGNATURE----- docs(reconstruction): close gameplay fidelity ledger Update the evidence boundary after fixed-point contacts, complete rule/scoring routes, magnetic fields, all claw terminals, and effect-seven multiball were restored. Distinguish covered gameplay behavior from the remaining intentional source/platform differences: live-fitted flipper arithmetic and Win16 repaint batching. Test Plan: - final 52-test, strict Clippy, production, and cross-target suite -- passed - 63/63 raw resources and every decoded derivative -- verified - restored physics C strict C11 syntax -- passed - two-minute autoplay and real-window keyboard smoke run -- passed - `git diff --cached --check` -- passed D{Lx8tree 2f0ac849de20eadc20b7aa3e4d4cdf44f6376d57 parent 25e32b2c06f55d3ac9d6aad3254e7ee9547edfc2 author ddidderr 1787428970 +0200 committer ddidderr 1787428970 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaooAagAKCRA4QfHCfm8O FOMhAQDzEhvBTtBNUJXE4XwovqVBXlNlohSwl1YlIFinOZ66iAD/Z2KrEZu4304Z EME3LopZ6melU6sA2ILuwBytPbZD+Qc= =FnbR -----END PGP SIGNATURE----- fix(game): restore effect-seven multiball Arm effect 7 after the wheel-reset target, select it on the next effect line, and spawn a second visible live ball when record 149 is consumed. Advance the second ball through recovered line, circle, ball-ball, magnetic, and scoring collisions independently. During multiball, draining one ball leaves the other active without consuming a remaining player ball. Include secondary state in deterministic traces and finite-state validation. Test Plan: - `cargo test --all-targets` -- 52 passed - `cargo clippy --all-targets -- -D warnings` -- passed - production build plus Windows GNU and macOS checks -- passed - effect-seven spawn, movement, and single-drain lifecycle test -- passed - `git diff --cached --check` -- passed Fxdtree 8fe2edda2f5443e7a8f654c16c6d2a4ad0da507f parent 77c93ec36b347332fcaa07e3e72fc00a7068e97f author ddidderr 1787428521 +0200 committer ddidderr 1787428521 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHQEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon+qQAKCRA4QfHCfm8O FGMOAP0bWDzd6tuDY0ddsYAEAEqq3NdtnCqj1qeWNwnBahAb0wD49F6Aov2j5ncC H97sf9/IQ+2V744rW+3BuyRRPFq+Dw== =d+Y6 -----END PGP SIGNATURE----- fix(game): honor original mechanism timer choices Map detail levels 1-5 to the recovered 50, 40, 30, 20, and 10 ms callback periods for claw animation while retaining the invariant 10 ms physics step. This removes the hard-coded default cadence from non-default configurations. Keep repaint batching documented separately because Rust exposes intermediate physics states instead of reproducing Win16 GDI callback batching. Test Plan: - `cargo test --all-targets` -- 51 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - all five claw cadence boundary tests -- passed - `git diff --cached --check` -- passed 1\n?xtree 7461e1b5f674aac82665963bc058db26ee9ef1ba parent b786a75544de3bdc9d0ef115050b3e2be9d91033 author ddidderr 1787428391 +0200 committer ddidderr 1787428391 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon+JwAKCRA4QfHCfm8O FB0rAP9HQTzL7gE9ww8J1tLphbaBRSylXxt9g2O6Ivg4Yc/mNQEA1jFwIy3cbwZF ZBwJwXABe8a/XQcUXGRti5xgBExY2gI= =eB9+ -----END PGP SIGNATURE----- fix(game): restore exact media thresholds Replace the inferred exponential media progression with the four initialized 32-bit thresholds used by the original score-addition path: 140,000, 650,000, 1,300,000, and 4,000,000. Award exactly one media level and extra ball at each, with no nonexistent fifth tier. Test Plan: - `cargo test --all-targets` -- 50 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - threshold boundary and four-extra-ball test -- passed - `git diff --cached --check` -- passed oDKxGtree a5bbe0fa5d20b110f6266b2840e480167d62199c parent 27749cb5f85cd81a5292230207f387ed4772e541 author ddidderr 1787428250 +0200 committer ddidderr 1787428250 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon9mgAKCRA4QfHCfm8O FCm2AP4wN93sVHRhLVKg6A3lchDsIv2o5xJLYJEKlZGWLadmfQEA0KoVzZhQdT/I jWCqjvGFRy2RfbjReLzsNT1bqClDeQA= =d8pY -----END PGP SIGNATURE----- fix(game): restore the six-way effect target Implement the flagged object-84 selector and initially inactive type-4 object 149. Choose a different effect from 1-6, render the enabled target from its original active-table rectangle, award its static 500 points, then apply the recovered bonus or cashout action and disable it until reselected. This replaces the final unimplemented help-screen target effect with its original dispatcher values. Test Plan: - `cargo test --all-targets` -- 49 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - live object-84 probe activated record 149 and selected effect 3 - effect selection/consumption test -- passed - `git diff --cached --check` -- passed wHxwtree d621eb6d9e63cbe09a9f836559784b736b69d830 parent 4b56a23fb48ed57bc338387b6373bba394a646c2 author ddidderr 1787427967 +0200 committer ddidderr 1787427967 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon8fwAKCRA4QfHCfm8O FFRTAQDLLJDxaOG7zOUl2gi8Zm1rn8huR1zqYuy7oh9f2PzpygD+L/oh2x0JHZjj MYh/CJW/9bB4faJ+Grk8NJ9eJCCAyQ8= =bzJB -----END PGP SIGNATURE----- fix(game): correct every claw release velocity Interpret the claw's 3800-unit release scalar per 10 ms physics substep rather than per 30 ms animation frame. This removes a factor-of-three slowdown from all four random terminals and restores terminal 18 to raw `(0,1000)`. Add exact assertions for positions and raw velocities of terminals 1, 6, 7, and 18, backed by repeated live original captures through release and the first three gravity substeps. Test Plan: - `cargo test --all-targets` -- 48 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - all four live original terminal trajectories matched - `git diff --cached --check` -- passed SzKxLtree ac7f680c33b190d25f644081c6ace7553ad9094e parent b86810ebedec3dcbb0aceda293e150093a880740 author ddidderr 1787427793 +0200 committer ddidderr 1787427793 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon70QAKCRA4QfHCfm8O FNO3AQDICOczXEx0Z1PoOv3ECDf7bhdtxRYcEF7gQOgfD+bF1wEAr6GpFHjW7HPp iI6QKq7Mz/Xls4w7cqUzYxjvr6fw6As= =AXo8 -----END PGP SIGNATURE----- fix(game): restore one-shot magnetic fields Replace the global timed magnet and drain teleport with the three recovered field records. Map top targets 150-152 to center field 6 and outlane fields 153-154, apply upward pull only inside each registered rectangle, and deactivate the field after it pulls the ball through its upper boundary. Render each active field from its exact original active-table rectangle instead of drawing invented yellow triangles. Test Plan: - `cargo test --all-targets` -- 48 passed - `cargo clippy --all-targets -- -D warnings` -- passed - production build plus Windows GNU and macOS checks -- passed - live field-153 entry direction matched and Rust field lifecycle test passed - `git diff --cached --check` -- passed I|Gxttree 41389e1430c7be3799bd5e463e5d2f92d552ee6d parent 7d28818e2345ae790e127fcb94bdc8edd4c00b55 author ddidderr 1787427384 +0200 committer ddidderr 1787427384 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon6OAAKCRA4QfHCfm8O FM19AQDoVcdezkQ0v6qxhX+A835GsdA9RqJQONQCrZkmJmxhAQD/QKC82eVuMpp8 FhhFAIYKfqImpLafi69+UeEPwIogCw4= =J4ob -----END PGP SIGNATURE----- fix(physics): restore the flipper downstroke Represent press and release as distinct deferred flipper edges. Keep upward position/velocity transfer unchanged, and apply the position-preserving return-stroke velocity recovered from a live ball at `(125,390)`, mirrored for the right flipper. The downstroke now assigns raw `(3519,6302)` before the next physics clamp, matching the original instead of moving geometry silently. Test Plan: - `cargo test --all-targets` -- 48 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - live downstroke transfer test -- passed within one raw unit - `git diff --cached --check` -- passed طwKxLtree 540749445a188ad90e9559ff0b855f1558a77ec7 parent cd27fc8404e15985739c0f307afd6113428005d1 author ddidderr 1787427209 +0200 committer ddidderr 1787427209 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon5iQAKCRA4QfHCfm8O FEmLAPkBtXJF3UX9t/IAmBjFfkHcwJ7ApIuh4PWocpEq7QxFgwEA4Kr7pE/e5Lnr wMaxqu/gHzhd9JcSdbEwnZ0Gs0oIKAo= =n2LY -----END PGP SIGNATURE----- test(game): exercise two minutes of autoplay Add a seeded autoplay scenario that performs a deliberate full-strength charge for every launcher ball and operates both flippers from live ball position. Turn the two-minute run into an end-to-end test covering repeated launches, flipper edges, bumpers, targets, lock holes, claw capture/release, and drains while rejecting non-finite state. Document autoplay as the long-run validation entry point and record the expanded runtime coverage boundary. Test Plan: - `cargo test --all-targets` -- 48 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - Windows GNU and macOS x86_64 `cargo check` -- passed - `git diff --cached --check` -- passed >Cx?tree 7519240d0600a91fce740a1f4a43e94068bd54e0 parent 5e63772967821e0f37e854101d368cec2ea86e14 author ddidderr 1787426981 +0200 committer ddidderr 1787426981 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon4pQAKCRA4QfHCfm8O FO9gAP4lNXYlqrkCke+d5UPfZfxAvq1z31UdZQ/VainztkkdhAD/WS1zQejSnqRG u2/ZSrqGUSpDINMb8ubqUa1yBMhw6gE= =Z0xl -----END PGP SIGNATURE----- docs(reverse): transcribe the fixed-point physics core Add a standalone, syntax-checked C transcription of the recovered ball state, 10 ms substep, launcher repeat/release arithmetic, one-sided type-2 response, swept type-1 response, and previous-position contact application. Link the source to the authoritative raw function addresses and initialized object ledger. Keep unresolved persistent-contact and special-rule branches in the raw Ghidra artifact rather than filling the readable reference with guesses. Test Plan: - strict C11 `clang -Wall -Wextra -Werror -fsyntax-only` -- passed - `git diff --cached --check` -- passed #jQxtree 5f3b5d020013b8994290573ae7450dd7c75cd191 parent 1ca85970801323c127194cb939c8dda7aae092aa author ddidderr 1787426780 +0200 committer ddidderr 1787426780 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon33AAKCRA4QfHCfm8O FJ/zAP47nwKilNbpX5ecRYFLoJQYuE/GV5dx5K2EKEZjSpkXoAEAxuRf83qKImw8 voQfWHS5EpHVRoA/HD3fT/ZS599C8Qo= =02pb -----END PGP SIGNATURE----- fix(game): restore wheel locks and reset target Replace the inferred eight-sector wheel and central lock rectangle with the six recovered type-3 records. Fill the five lock holes at their exact centers, double each successive bonus from 10,000 through 160,000, transfer the complete 310,000 on the fifth, and return a launcher ball without consuming one. Restore object 148 as the wheel-reset target and clear all filled-hole state on contact. Keep these sensors on the same swept path and contact-latch machinery as the claw and type-4 targets. Test Plan: - `cargo test --all-targets` -- 47 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - live five-hole bonus/score sequence matched exactly - live object-148 reset cleared all five contact states - `git diff --cached --check` -- passed SKxItree 8c165bd67032c29ba2137487258562dd96c123d2 parent 20e751de80e2b783c0bf19fc3ddc29e8b432b1b1 author ddidderr 1787426415 +0200 committer ddidderr 1787426415 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon2bwAKCRA4QfHCfm8O FKakAP438dSaMeM8e6+9pSJtjC1gJHzJ4oIiTPnnf4qwQ9WpqwD/bAm8r/ZpZg2t b6NDdFmbCH/1YoamtX8JDt3U+XNUngM= =i9J9 -----END PGP SIGNATURE----- fix(game): restore physical target-bank rules Attach recovered score and rule flags to type-2 collision records. Deactivate complete three-line groups through their contact owner, rearm all five bumper-value groups after completion, and rearm all four central groups after advancing the TDK diamond. Remove the broad side and colored-target coordinate checks those physical records replace. Preserve exact 5,000, 100,000, bank, and wheel-trigger scores from the initialized object ledger. Test Plan: - `cargo test --all-targets` -- 46 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - target-bank deactivation, completion, and rearm test -- passed - `git diff --cached --check` -- passed N:.Gxtree 26eca1ede327926ec243207f55b6e855fd8c434e parent bf5b855f44a2e0d7dbe091065c7785d0beef802b author ddidderr 1787426145 +0200 committer ddidderr 1787426145 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon1YQAKCRA4QfHCfm8O FEzGAQDKUd8F7CWAs3Q0Y9iAxwNPWYYarwQ5EHK7/ABQnxm3WQEAtiiKB/ulEZ59 jf7krsQtvb8tuAYoMvzBlTE/dZpESw8= =j0lY -----END PGP SIGNATURE----- fix(physics): resolve the earliest substep contact Return exact path progress with each fixed-point line and circle candidate. Evaluate the complete recovered physical object set and apply the nearest contact, matching the selection logic in the original collision dispatcher instead of stopping at the lowest matching object id. This prevents dense assemblies from choosing a later wall or circle merely because its record appears earlier in the table. Test Plan: - `cargo test --all-targets` -- 45 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - collision-progress ordering test -- passed - `git diff --cached --check` -- passed  Nxtree 6331c45e419a7bb3ac9a7e2f779c19fa52f408e9 parent 9d91cc51c7bbb35ab9fa98c03b0d56a665789bb4 author ddidderr 1787425961 +0200 committer ddidderr 1787425961 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaon0qQAKCRA4QfHCfm8O FM1fAP0ec2Rgs3fCWnvni6ZDg1b6lLyZKdAa1N19ok5z6IIJRQEAoVl6bucKROl5 QKEceFjjoBfMqFqAKISa5EGE5oDfQQA= =yZGd -----END PGP SIGNATURE----- fix(game): restore swept target sensors Move claw contact and all eleven initially active type-4 circle records onto a swept millipixel sensor test with per-object enter latching. Preserve the exact left-bank and top-gate coordinates, radii, and scores from the initialized object ledger. Remove the inferred top-bank completion rule. Each original top target now scores 500 and independently starts recovered magnetic-gate timing instead of requiring all three for an invented bonus. Test Plan: - `cargo test --all-targets` -- 44 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - top sensor contact-latch and re-entry test -- passed - 20-second deterministic launch remained in active table motion - `git diff --cached --check` -- passed q7Ixmtree 6cad4ffc0fc68c695970343fc46ce959f5b69355 parent d813b5b9da1aafe2524a9c58a723c58e9b11a292 author ddidderr 1787425638 +0200 committer ddidderr 1787425638 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonzZgAKCRA4QfHCfm8O FKdWAP4po64IRSMlFlr6OQkPNQFeJsXQ8nZAlPHbdkb3Uvji3gEAw6JSJQI37szJ 59MrNdweIcmxH2Hv2xbxXK+LjIFawQk= =tuaK -----END PGP SIGNATURE----- feat(reverse): ledger every initialized game object Add a reproducible dump of all 175 initialized collision and rule records from the unmodified traceable Wine process. Preserve geometry, bounds, activation, all four decoded Borland Real48 response values, flags, contact state, score, layer mask, and render rectangle in a reviewable TSV. This extends the static function ledger with the runtime-built data table needed to replace inferred target, lock, gate, and mechanism logic in Rust. Test Plan: - generated `OBJECTS.tsv` contains one header plus 175 records - repeat dump compared byte-for-byte equal with `cmp` - `ruff check` on all original tracing tools -- passed - `git diff --cached --check` -- passed )ȅPxtree 2ca148667a0642bb68ccea56d442381bbea46dc7 parent e07a91527748ebd134b40dc804eaf0887b5bf09d author ddidderr 1787425502 +0200 committer ddidderr 1787425502 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaony3gAKCRA4QfHCfm8O FPT0AQDCZ+wL/JSHJ6SaZV8/i5d43tUO3gc5aYAjYFL+1AzceAEAvJLp+gUoznGb A5egoud/tqPnpQR4hGR/kGq/OjcqeQA= =Am4N -----END PGP SIGNATURE----- fix(physics): restore upward flipper transfer Apply flipper movement after the physics substep, matching the original timer order. Replace the weak generic tangent kick with the recovered swept-body position transfer and pre-clamp velocity curve fitted from three live left-edge probes, then mirror that local transform for the right flipper. The x=125 probe now reaches `(138.182,355)` with raw velocity within two units of `(2217,-5889)`. Keep downstroke interaction listed as pending rather than claiming the upward fit is the complete raw routine. Test Plan: - `cargo test --all-targets` -- 43 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - three live left-flipper transfer probes matched within documented tolerance - `git diff --cached --check` -- passed ) JxYtree fe632cb5c1f13a0294b6a2d6f07147c1f67888b3 parent c886a937886ab8a7e4a8ac2145239da23e703077 author ddidderr 1787425222 +0200 committer ddidderr 1787425222 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonxxgAKCRA4QfHCfm8O FHx+AQCOxEIjimtF1g2ccvbgDIx5PbWIKABghLtPGVKHo+7tawD/TvLF28SXOEm2 R5pqBBKmRMOHERP/fT+FacskrmbUywE= =+oNq -----END PGP SIGNATURE----- fix(physics): restore live flipper geometry Replace each invented centerline capsule with the original pair of moving line records and moving tip circle. Use the exact asymmetric raised coordinates read from live objects 66-68 and 81-83, while preserving their recovered type-1 and type-2 fixed-point response coefficients in normal object traversal. Remove the last generic segment overlap solver. Edge-time ball transfer remains separate because the original applies it after physics while moving the records. Test Plan: - `cargo test --all-targets` -- 43 passed - `cargo clippy --all-targets -- -D warnings` -- passed - live left and right key-edge record dumps matched the Rust coordinates - `git diff --cached --check` -- passed bꋌWxwtree cf694dbab3b2c22114b2428110d3f85eb1c8f4c5 parent 5c2a80cfa5dcb7ea6dc6786ae72abea666b4d9d0 author ddidderr 1787424778 +0200 committer ddidderr 1787424778 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonwCgAKCRA4QfHCfm8O FPb2AP9PIdFlwxLR3O50iGblBiL4fKCV8hR1E0wXW9ROhKVtKwD/ZBlJPCYnNI3c 4YzrIC6Qc83eCuZkuaK9lWVIW47bpQE= =jYcG -----END PGP SIGNATURE----- fix(physics): restore fixed-point circle responses Replace the overlap-and-separate circle approximation with the original swept ball-center entry test and radial/tangent fixed-point response. Preserve every type-1 record's Real48 rebound and tangent coefficients, plus the bumper normal kick derived from the 3800-unit speed scalar. Unify line and circle traversal in original object-id order and remove the old floating passive-circle and bumper impulses. Add exact tests for live object 155 and bumper 51 transitions, and keep moving flippers as the explicit remaining collision approximation. Test Plan: - `cargo test --all-targets` -- 44 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - 20-second deterministic launch traversed bumpers and drained without rescue - live object 155 and bumper 51 fixed-point transitions matched exactly - `git diff --cached --check` -- passed tĚAxtree 05de3047b46e9a8928010f0a64a0896d05240221 parent 7caf460022084225e02fe3b32ce7c908f155ca75 author ddidderr 1787424723 +0200 committer ddidderr 1787424723 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonv0wAKCRA4QfHCfm8O FOS9AQD2J5wwOp7uPyzVE0yY+jaDsRnqovrvF6GwuFUY0c6qgwD/aew+iUIFbpVc L5wYfFndoVWLnhrG6E8npB337xVU0AI= =oNDc -----END PGP SIGNATURE----- fix(reverse): avoid stopping Wine during probes Repeated SIGSTOP-based injection can suspend Wine while its Win16 mutex is held and eventually strand the timer callback. Make the short process-memory write sequence the default between 30 ms callbacks, while retaining whole-process stopping as an explicit single-probe diagnostic option. Test Plan: - `ruff check original/tools/trace_original_state.py original/tools/inject_original_state.py` -- passed - live no-stop ball-state injection -- passed - subsequent original timer updates remained observable - `git diff --cached --check` -- passed T]_xtree ef579decb5d80bf468ba988f31b5be877c94e36f parent c50ed39a35b27a153ae5cc843fb3ea7903a5226b author ddidderr 1787424167 +0200 committer ddidderr 1787424167 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaontpwAKCRA4QfHCfm8O FP3zAQDl1BqVfY10PH9yB27JkE4Ts8cn1gG1fEzWOBidk1Z5rAD/RvM6P2w85mqE hnuS0+9P8agGz4/RUFsIw+LZaH0qWQU= =o6mj -----END PGP SIGNATURE----- fix(physics): restore fixed-point rail movement Replace the guessed variable-rate floating integration with the original 10 ms millipixel step, 15-unit gravity, and 3800-unit speed limit. Restore every registered type-2 Real48 response pair, one-sided start-to-end orientation, and the original normal/tangent velocity transform validated against live shooter wall traces. Restore repeat-driven plunger charging and its release-time randomized clamp. The shooter route now follows table orientation instead of coordinate-specific gate exceptions. Remove the synthetic ball-search impulse so future stuck balls remain visible reconstruction failures, and include collision ids in deterministic traces for differential work on circles and triggers. Test Plan: - `cargo test --all-targets` -- 42 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - charged launcher scenario cleared the shooter lane -- passed - all recovered rails accepted front-side and rejected back-side probes - `git diff --cached --check` -- passed L JRx*tree ec0b0860942f48e99a292ffb997273a58f5dd7c0 parent 65ee3c535588bbfaeff21312801b5b3451621ebd author ddidderr 1787423276 +0200 committer ddidderr 1787423276 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonqLAAKCRA4QfHCfm8O FNb4AP9+4vpsWcPmD/CmnNjkQza4OO4wVg/hxwkVonALHt6VWgD/WToefYyPmyPA +q/2XdvaU+yZNDTFjjGmBMSuyuClMwE= =PPWN -----END PGP SIGNATURE----- feat(reverse): isolate original physics substeps Expose the original detail-derived integration count, active-ball count, gravity, maximum speed, and movement flags in live traces. Allow probes to force one physics substep so a single collision response can be observed without the default three-step timer batch obscuring intermediate state. Record the dynamically verified type-2 rail response: resolve velocity in the registered line's normal/tangent basis, apply the two original Real48 coefficients, then advance from the previous position using that response. Test Plan: - `ruff check original/tools/trace_original_state.py original/tools/inject_original_state.py` -- passed - one-substep probes against both vertical shooter walls -- passed - ordinary rail responses matched 0.6 normal rebound and 0.1 tangent coupling - `git diff --cached --check` -- passed U-@xtree 76ca71abec1048277617bc5e549fdba612ef1a4e parent d24ef6612f6007c2d5381b8a77e109cf9639cde4 author ddidderr 1787422986 +0200 committer ddidderr 1787422986 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonpCgAKCRA4QfHCfm8O FD6oAP43upBl4nEsdoc0TsMxaagY92bKF26VszYGZT8oXhVTRAEAlohr/amKztNT 0nQs6Srplu5QE9gM6HdqzE+R7Ov7xQM= =Qmh5 -----END PGP SIGNATURE----- fix(reverse): trace active injected ball states The tracer could only rediscover the game object while all original position copies agreed, which is normally true at the waiting launcher but not during an active controlled probe. Accept the injector-reported object base explicitly so one process can be sampled through an entire sequence of collision tests. Test Plan: - `ruff check original/tools/trace_original_state.py original/tools/inject_original_state.py` -- passed - active live trace with `--object-base 0xadc2b0` -- passed - `git diff --cached --check` -- passed WXxwtree 060acd0bb891e94214e10a3771e8512386cd029c parent dcc664346ccddddb54ff45989cbffc2c0e01a5f8 author ddidderr 1787422826 +0200 committer ddidderr 1787422826 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonoagAKCRA4QfHCfm8O FKtdAQCORiOl66V2AufjbSqAINGEdLheZ1wAszpYKP8Cqd55eQD/dGCH9cfT2NyW 0OwyVUcAFFh9UURJ6jpT4i1Akum6JAE= =P3XD -----END PGP SIGNATURE----- feat(reverse): inject controlled original ball states Add an atomic live-state injector for the traceable Wine process. It updates all recovered global and object copies of ball position and velocity while the process is stopped, clears pending impulses, and re-enables normal collision processing before resuming the unmodified executable. This makes individual walls, circles, gates, and mechanisms reachable without relying on random gameplay. Document the first controlled claw probe, including its original terminal-18 animation, exact release state, and three-substep gravity behavior. Test Plan: - `ruff check original/tools/trace_original_state.py original/tools/inject_original_state.py` -- passed - controlled `(289,94)` injection and one-second live claw trace -- passed - terminal-18 release matched `(325000,92000)` and `(0,1000)` -- passed - `shellcheck original/tools/run_traceable_original.sh` -- passed - `git diff --cached --check` -- passed a)Zx[tree a900ecb9cdd0f63b1e62f241fc01fff77351ed5f parent 9e74745fdec4c97e38617c562d9d6217a6b8f708 author ddidderr 1787422574 +0200 committer ddidderr 1787422574 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonnbgAKCRA4QfHCfm8O FHwQAQDY3hcYjlujibRsAtyk/BQJJ303SIQC4v2jR7E/w8NXeQD/d3pDI3vfSWRY e4rXZwZKitqRaEZkLBVqdkZq6JEDmQI= =jidD -----END PGP SIGNATURE----- feat(reverse): trace the live original physics state WineDbg changes the Win16 exception path and cannot capture continuous game state reliably. Add a Linux-only launcher that opts the normally running Wine process into same-user tracing without modifying TDKPIN.EXE, plus a sampler that locates the loaded DGROUP and game object from recovered signatures. The CSV trace exposes original millipixel positions, predicted positions, velocities, flipper state, and claw state whenever they change. This provides an external oracle for reconstructing and differentially testing the fixed- point mechanics instead of tuning the Rust approximation against screenshots. Test Plan: - `shellcheck original/tools/run_traceable_original.sh` -- passed - `ruff check original/tools/trace_original_state.py` -- passed - strict shared-library compile with `cc` warnings as errors -- passed - live Wine smoke trace and four-second charged launch capture -- passed - `git diff --cached --check` -- passed :xYtree 8c244b34f940f9149fb2e0073e8beb6aac79bdbf parent 744e9e4fc112294d63998681c9c59bd83a533784 author ddidderr 1787417741 +0200 committer ddidderr 1787417741 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonUjQAKCRA4QfHCfm8O FPvJAP4vM4Hrz/GH3pOqDjfWied0xBjiwGV5ii3KBgLEfucp1gEA+8FB5aLUm/uk SaPFIeCk6ABDJWjnVf7wxgbPw8+M+gI= =DuZR -----END PGP SIGNATURE----- docs(testing): record live original comparison Document the Wine-backed original start and charged-launch captures, the matching deterministic Rust states, and the remaining boundary that a chosen claw terminal was not forced in the live original. Test Plan: - Launch original/TDKPIN.EXE with Wine 11.15 staging - Send keypad plus, hold Down for 1.1 seconds, release, and inspect captures - Compare original started state with Rust launcher step zero - git diff --cached --check vk/3x<tree ada756433f7237c857aff5f2b45bf817d8e0cf82 parent d020de613cdcc1954b0c9c8d7b36b8b68b6347a2 author ddidderr 1787417704 +0200 committer ddidderr 1787417704 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonUaAAKCRA4QfHCfm8O FGmlAQDa51BC9YrCh6cYLXEp5COoubxXhoD9PV+xD9lilBAozQEA5nqgV4zlOICb gxoED/0zckNc2ef5b2AR1V2Smu1KVQ8= =IklN -----END PGP SIGNATURE----- test(physics): exercise every recovered collider Probe both contact sides of all 109 recovered wall segments and every passive/scored circle. Verify each primitive detects overlap, separates the ball, and rejects inward maximum-speed motion. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --cached --check  &;xLtree 56b40955f6e23658e4a9a8323c772fd22310c3a9 parent b7326f7a1391ca57e42a143868b0e78739abdba6 author ddidderr 1787417583 +0200 committer ddidderr 1787417583 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonT7wAKCRA4QfHCfm8O FFBrAP9USfvl8FJCsYWASbaimOI1gzOQ0ORjHsRiWxbpDW5NrAEArf2fjkZqsBT1 L759YFDDbzHWIsOcR33hbOHC6fRqOA8= =WH2t -----END PGP SIGNATURE----- fix(physics): kick only on flipper movement edges Model the recovered move_flipper call boundary: raising sweeps the occupied region once and applies one tangential impulse, while a held flipper remains solid without accumulating another boost on every collision substep. Returning still updates geometry and emits its movement sound but cannot kick the ball. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --cached --check $t61xtree 7eca8e32a6cebf5f00b1cf653d9da1bda0ff5baf parent 16c055eec6c8e6f57f96b605cc26bdb044e64891 author ddidderr 1787417455 +0200 committer ddidderr 1787417455 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonTbwAKCRA4QfHCfm8O FPpjAQCjvkm1ldoEZ3MawATqi8VJ3Z4Sa3nvhFw9h6yoAQ/TnQD/SXOZpxkMSzAy rujT0sZefpm5Gonj5cShMHrvq6Wc8g0= =KZnv -----END PGP SIGNATURE----- fix(input): require plus to start players Remove the Enter shortcut so the start flow matches the original plus-key handler. Use the recovered player-add sound resource for both the first and subsequent players. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --cached --check KxBtree e7aeb96bef9c5f797996940128d2d575f3757310 parent 75c2464e72cf046445d7ce6ebc028e3cd3d1fdf4 author ddidderr 1787417425 +0200 committer ddidderr 1787417425 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonTUQAKCRA4QfHCfm8O FIyvAP9U0ff3tkATQJhlcyCucy6NaTh3ygzWffiTq/b8t+UDTAD7BRnn6QSkmE8t 6Zl79w1xoEYJUPsrKhTGWFhRBprSlw4= =hJPh -----END PGP SIGNATURE----- feat(testing): add deterministic mechanics capture Add named launcher, flipper, and claw scenarios that advance at exact 120 Hz steps with stable seeds. Emit per-step JSON state/event traces and optionally capture the logical 640x460 framebuffer at any requested time or step. Cover parser behavior, deterministic replay, launcher timing, flipper edges, and complete capture/release/idle cycles for all claw terminals. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - cargo run -- --simulate claw-6 --at 0.15 --screenshot /tmp/tdkpin-sim-validation/claw-6-after-flush.png --trace /tmp/tdkpin-sim-validation/claw-6.json - Inspect both generated 640x460 PNGs and JSON traces - git diff --cached --check T}5xWtree c4ffd6e76ed0d206863ae305452fa8664509c3e7 parent 99a6082b2ae3d47444874bec7f617aa0ce76f907 author ddidderr 1787417090 +0200 committer ddidderr 1787417090 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonSAgAKCRA4QfHCfm8O FDghAQCdspInnw9zEMH0OMmLG/s4rhj0eswAhTOcR+e+w+A30gEA7IZz+I0xtkth rskxo2uOnTgvpGC0yHrmRPi71yUZHQA= =p6f2 -----END PGP SIGNATURE----- docs(reverse): decode claw release arithmetic Correct the coordinate model from guessed 16.16 values to the millipixel arithmetic shown by the 16-bit division routine. Decode the Borland Real48 direction constants and record the exact position and velocity tables used by every claw terminal. Test Plan: - git diff --cached --check - Compare constants against segment 1 disassembly at 9bca and eab1 }.Bx+tree 107cb43ed4b5f45bbca978f12a4c363b5b8c322c parent 445bb22fb42a26b9d3873be72c444389c04aeae5 author ddidderr 1787417049 +0200 committer ddidderr 1787417049 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonR2QAKCRA4QfHCfm8O FO1qAQD2G0LfOgjo1eE/uLrQkbNFsuW7vMF8y+QNuYJCrqEyVAEA/OanAMI4Q9am Lyb5c8OZtKpvHq+wP6Jm2wDRM2iTpAQ= =S6rq -----END PGP SIGNATURE----- fix(game): restore the original claw sequence Replace the broad robot bounce rectangle with the recovered object-89 capture state machine. Suspend the live ball, advance the exact sprite rows, release from decoded original coordinates and directions, and keep the surrounding collision records disabled until the arm returns home. Render the 900x296 sheet as 100x74 frames at the original destination and suppress the duplicate ball while it is embedded in the capture animation. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --cached --check gY_:xZtree 14693ff1cbd27ef6c424d2dac8218d0315c428d8 parent e1dc644c76770bbc57af55453fabe069ad9f74d3 author ddidderr 1787416769 +0200 committer ddidderr 1787416769 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonQwQAKCRA4QfHCfm8O FC1FAQD3B/8c2aTMvOQ7Og4LZkLWNUYEDBpEBByC05QwA5LYvgD8CYsaAXqUC7iH fSE1SysvEpL9BnK7jaRhbVJfNIzxWQw= =Afzf -----END PGP SIGNATURE----- fix(audio): restore recovered mechanism sounds Play the original WAVE resource for both movement edges of each flipper and centralize gameplay event sound selection. Replace guessed control and mechanism mappings with the resource numbers recovered from the Win16 call sites. Keep synthetic ball search silent because it has no original trigger. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --cached --check 0R6xktree 7fd5037bc7185c166b2326a1c35316321e005227 parent 95760b9940b6462c80ed4e146bf6f1a55d959add author ddidderr 1787416687 +0200 committer ddidderr 1787416687 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonQbwAKCRA4QfHCfm8O FJM8AP43+Guj2T3k0LNW+QBtxK9Au1O1x6JW9BRlaE/UCOWrFwD7BNBniMBATl30 xCA7V3U8swJIpeH9MpTyimi3/pxoKgU= =2x4v -----END PGP SIGNATURE----- docs(reverse): restore named mechanism state machines Transcribe the claw and flipper control flow into an address-mapped readable companion while preserving unresolved fixed-point projection as an explicit boundary. Correct the reconstruction ledger so the current Rust claw is not described as proven parity. Test Plan: - git diff --cached --check - Review restored constants and branches against TDKPIN_GHIDRA_RAW.c .>xtree 1a93661b6c1fa29ddaa3af505da5c20aacef0b51 parent 8d76e9539fb0b56d9a59a3c58b51fdd738e7d927 author ddidderr 1787415869 +0200 committer ddidderr 1787415869 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonNPQAKCRA4QfHCfm8O FDCfAP4iIMb3GFn5JV1cW35J31W2duUmgA2fvcm1GgETT6BOLQD/ZhlYBpRXL/oF QXlVzrsXpQ9GdVUA2ZaYZwtE7WuT9AM= =BZp6 -----END PGP SIGNATURE----- fix(input): start games with the plus key Match the recovered Win16 registration flow: the first plus press creates Player 1 and additional presses add Players 2 through 4 until the initial launch. Down now belongs only to charging and releasing the plunger. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - live: verify Down cannot leave attract mode - live: start with plus, add Player 2, hold Down through partial/full plunger frames, and release onto the table - git diff --check ޯD45xRtree 931b57964a78ddaf3e7db5bb192bfca6b7ea33e9 parent 4ef563361b01e7991fef35c82d446667d69c074e author ddidderr 1787415744 +0200 committer ddidderr 1787415744 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonMwAAKCRA4QfHCfm8O FC1sAP9wm6GBYhTbNcqq8/HCTHAsIBoQrkAPnyyNTnXMM2x+bQD/Rby9sdbl9JwR YyTGJ1l6ra6yyYceaCwwG/333gOf1Qw= =kXaX -----END PGP SIGNATURE----- fix(game): restore deliberate plunger charging Advance the recovered eleven-frame plunger over a full one-second hold and use that same frame selection for rendering. This makes a short tap visibly and physically weaker while a complete pull still clears the shooter lane. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --check /?8xqtree 40acdcca2aa8f69d2732a3ea2a21ac06e8e38171 parent bb53f88fb37d91b9cd2bf99499205226443da05e author ddidderr 1787415338 +0200 committer ddidderr 1787415338 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonLKgAKCRA4QfHCfm8O FHv9AP0RYu5cNe8jMV9xVuAyNTQb4gtvl+BgwFjvUtoA+o0QUQEA6lLCJxD/aRbx Nifvqvp16avRv/NM4E9tD8Sj2rBmpAs= =P7fd -----END PGP SIGNATURE----- fix(physics): restore recovered flipper states Replace the reversed oversized flipper vectors with the original binary rest and raised geometry. Render the exact resource 997 flipper rectangles while pressed and keep the live collision capsules aligned with those sprites. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - compare forced raised-state rendering with the extracted resource rectangles u,C7x|tree 3c32cd3f72f328593d08cc41ca50d9ce6bffe598 parent aeae63aabe54622c345a1813afca00ee7f66ea09 author ddidderr 1787415055 +0200 committer ddidderr 1787415055 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonKDwAKCRA4QfHCfm8O FHYMAP4v0YZ3H5PRhFT8FJady74MdcdvBB25EWPy/40S+RaPTAEA6z0IyZGbaTQ6 ceNl0yrqkUhBSbSbz13ZSwPByNVxCgE= =+7Ao -----END PGP SIGNATURE----- fix(physics): restore the one-way shooter exit Use the recovered rail rebound coefficient and let a launched ball cross object 22 in the exit direction after the upper curve. Strengthen the launch regression so a momentary lane crossing cannot hide a later rebound. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - verify the charged launch trajectory at detail levels 1 through 5 v!t:x]tree 5dd1cbc4fcb506e17b68f1204bf92fbf45d78834 parent 91ae8cdfd88c27b152ac12c1c49aa019cc20f478 author ddidderr 1787414832 +0200 committer ddidderr 1787414832 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonJMAAKCRA4QfHCfm8O FHMIAPsG0UvCflgq+SnQ8gar3e7QWrMH+qlwPZQOh6j9C3he5wEAjLsjRFiC0yAe 4/ASBw8FLA3QFKntRSz5WDY12i0NMwA= =dVlz -----END PGP SIGNATURE----- fix(render): restore original game presentation Compose the running table from the recovered resting bitmap and exact active UI regions. Remove the procedural replacements that distorted lamps, flippers, player rows, and display values, and place the plunger strip at its recovered destination. Test Plan: - cargo fmt --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - launch the game and compare the initial frame and charged plunger visually 51<>xtree 72e8f10dc9b081d2265f37310eb5a58749b9a38c parent f904977ae49d5bb3202cb6eefe648e6fdbf35d98 author ddidderr 1787413048 +0200 committer ddidderr 1787413048 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaonCOAAKCRA4QfHCfm8O FP0PAQCXEeASjFFR94hgWAjqropW3VI/fPFY3FUwjSLXYmh9UAEAmT4RT7VWwBpy WCjhzjGsS9qY68jSqea+yNmPsO3ugAQ= =ueFp -----END PGP SIGNATURE----- fix(game): restore the original plunger launch Start each ball at the recovered right-lane coordinates and charge the plunger while Down is held, firing only on release. Render all eleven frames of resource 901, preserve object 25 as the returning-ball catch, and use the object table's center-contact extents without adding the art radius twice. Test Plan: - cargo fmt --all -- --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - runtime smoke: start, hold Down, release, and inspect the right shooter lane HAD8xttree 15f7c00a3b6d4d2d392d08b142a571c47088b61a parent 4bc370be121d0286c87297189a90b1166376de41 author ddidderr 1787412454 +0200 committer ddidderr 1787412454 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom/5gAKCRA4QfHCfm8O FAvwAQD33YXuAZVnNvG6wMb6Cx5L/UPtP2NofHm9DPAX8+g9GwEA265bvK3QrRBd 722iXuyiFL+mnQswFPkERYrXkv5UXAw= =eY+f -----END PGP SIGNATURE----- fix(game): restore the recovered collision table Replace the mirrored, partial wall transcription with all active static line and circle objects from the Win16 registration table. Preserve the original object IDs for drain and shooter-stop handling, and use bounded physics substeps so fast balls cannot skip thin rails. Test Plan: - cargo fmt --all -- --check - cargo test - cargo clippy --all-targets --all-features -- -D warnings - git diff --check v#DxEtree 6c4507d4ec6f769c068fd15f6b2e8cb9be3d95c5 parent e815391980ddc595154823565103d73acac0039a author ddidderr 1787411161 +0200 committer ddidderr 1787411161 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom62QAKCRA4QfHCfm8O FHZwAQCm8c/fd04iKD4Pku9WaeVTUsGdU1f9bt/WDY6ZoUdpYgD+MSPXXMmUuY+T Utz1wmguuGps/Hr+xZMbhdAJhKUjsQ4= =w9Zc -----END PGP SIGNATURE----- fix(game): ignore nudges while waiting to launch A cabinet nudge could still raise the tilt meter after a drain while the next ball was parked in the launcher. If that latched TILT, launching was correctly disabled but no active ball remained to drain and clear it, creating a new softlock. Only accept nudges for an active ball. This keeps the latched tilt rules intact while guaranteeing every waiting ball can be launched. Test Plan: - `cargo fmt -- --check` -- passed - `cargo test --all-targets` -- passed, including the waiting-ball regression - `cargo clippy --all-targets -- -D warnings` -- passed - `git diff --check` -- passed te)\x8tree 1f3d9b10ec10cc5661e34c46fd2ad191304d4a3b parent cf2c839f83ec7133177c29a36dd9cb35668a5074 author ddidderr 1787411026 +0200 committer ddidderr 1787411026 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom6UgAKCRA4QfHCfm8O FA3AAP9Gi16Rs7whu+MBSlAi/1S+O6h8qUjLM32onf5a23yOIAEAzpsxERkiOXRS t++N758y7eWWZYp1JUUYWnS3ix/e0wE= =Wxmr -----END PGP SIGNATURE----- fix(ui): preserve the original canvas and display styling High-DPI sizing and a resizable client allowed the 640x460 canvas to be placed inside a much taller window, producing the large internal black band captured in the gameplay recording. Open an aspect-correct fixed 960x690 client with high-DPI framebuffer scaling disabled, giving every platform a predictable 1.5x canvas. Use exact active-table patches for the cyan score fields and derive transparent numeral glyphs from the recovered Win16 bitmap font. Fill the complete display slots, move the KBytes readout clear of its border, and place shortcuts on a readable footer so no dynamic text is clipped or left over an inactive panel. Test Plan: - `cargo fmt -- --check` -- passed - `cargo test --all-targets` -- passed - `cargo clippy --all-targets -- -D warnings` -- passed - launched the Linux window and confirmed a 960x690 client with no letterbox, full-width cyan fields, recovered score digits, and readable footer -- passed - `git diff --check` -- passed J]x'tree 559814229990172578d30c0b53b07d751d6134dc parent 7da0f4d171101ff2cb5dd74fa7ff91947e9349a9 author ddidderr 1787410712 +0200 committer ddidderr 1787410712 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom5GAAKCRA4QfHCfm8O FEaQAP4ycN6qrYIbPDpm+pZjJXg+3WrrkVggRIU9+/WPOGEx2wD/fl9nUvrutWrk 5+BkWF1cEneHZjcL6oaMJe1TJWLGTAM= =gF0E -----END PGP SIGNATURE----- fix(render): restore animated playfield artwork The gameplay renderer drew the inactive table and then placed thin line flippers and procedural circles over baked resting artwork. This left two flipper poses visible at once, made the ball difficult to see, and ignored recovered animation resources already embedded with the reconstruction. Build an alpha-masked texture from the original ball bitmap and mask, erase the baked flipper pose before drawing collision-aligned moving flippers, and animate the recovered wheel, robot, and magnet sheets from their gameplay events. Add bumper flashes, exact lit-table pixels for TILT, and a short visual table shake for nudges so contacts and machine state have immediate feedback. Test Plan: - `cargo fmt -- --check` -- passed - `cargo test --all-targets` -- passed - `cargo clippy --all-targets -- -D warnings` -- passed - launched the Linux window and inspected attract, gameplay, resting flippers, raised flipper cleanup, and the masked ball sprite -- passed - `git diff --check` -- passed b>Rx-tree 366ca67c76344847984f9dc4e1d73c90e2ab1b10 parent e19162d54d71ee42e49a1773771e6ebe558a9a0d author ddidderr 1787410452 +0200 committer ddidderr 1787410452 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom4FAAKCRA4QfHCfm8O FNFJAP4vDyHLFR+JGZguDjS6h8EziourG2ppJ04UqGp459VAvAD/a+vfx4KWktTz +3vrtZl+lXMM8dABGYe1CPcMIy1juAU= =W1AS -----END PGP SIGNATURE----- fix(game): launch immediately and enforce tilt Starting from the attract screen previously created an idle ball and required a second Down press to launch it. Launch the first ball as part of the start action while retaining the normal launch action for later balls. Replace the decaying visual-only tilt value with a latched game state. A tilt now forfeits the current bonus, suppresses scoring and further nudges, returns both flippers to rest, and remains active until the ball drains. Keep the warning on the playfield and use the recovered tilt sound instead of treating the state as a temporary decorative overlay. Test Plan: - `cargo fmt -- --check` -- passed - `cargo test --all-targets` -- passed, including tilt latch, scoring, flipper, drain-reset, and launch coverage - `cargo clippy --all-targets -- -D warnings` -- passed - `git diff --check` -- passed ]Nxtree 42065cdd9509f4d4526d005d5266561dc0286c8f parent fe33ef902f483fb73690e52c7ad7ab4a04fdab9b author ddidderr 1787410362 +0200 committer ddidderr 1787410362 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaom3ugAKCRA4QfHCfm8O FAx2AQCq6IbTMya+83y757IAo0Oo+l+b9FyO8OgAmuUbHVZwQwEA49o0yDwJY6HX XPkOQuJB/ZnC25hmRoinP6lnwi0/mAY= =BtXZ -----END PGP SIGNATURE----- fix(game): reopen the drain and recover stalled balls The recovered bottom apron had been represented as one solid collision segment, which prevented the ball from reaching the drain threshold. Split that apron around the visible center drain so a lost ball decrements the ball count and allows player and game-over progression to continue. Add a conservative ball-search impulse after three seconds below the movement threshold. This protects long-running games from other low-energy rests without changing active trajectories, and reuses the original nudge sound as feedback. Test Plan: - `cargo fmt -- --check` -- passed - `cargo test --all-targets` -- passed, including drain and ball-search regressions - `cargo clippy --all-targets -- -D warnings` -- passed - `git diff --check` -- passed =՘5xXtree ef8bb508d3cf0b171b1d512bb9cffd92e90dcd32 parent f817b636831f9c93b8ddec26fce9998c72b4752f author ddidderr 1787407954 +0200 committer ddidderr 1787407954 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaomuUgAKCRA4QfHCfm8O FPZ4AP96DpNWkC/uEVXMV8bfrBh+P40l3tPUU9U5iY+fzvCeNgD/R92U8t9GeIs1 FeP4AUOVRtlAreqkRMrh+ZkHtHIQIAA= =AAXC -----END PGP SIGNATURE----- fix(assets): mark legacy data files non-executable The source copy preserved executable permission bits from the evidence archive on HISCORES.DAT and TDKPIN.INI. Keep their exact bytes while recording them as ordinary embedded data files in the reconstruction repository. Test Plan: - `git diff --cached --check` -- passed - verified the staged changes are mode-only transitions from 100755 to 100644 ”x[tree a7629dc93b010ab29fd39e7365c740a45d8d4cf9 parent 54061f1eb7fbcb4239272001bb74ab513677737a author ddidderr 1787407931 +0200 committer ddidderr 1787407931 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaomuOwAKCRA4QfHCfm8O FMpuAP96wzJpYL3kbAx+haQXE5VTFI2kKsChFO0vRUnmx0PQVAEA1bcNhpknCQwE NuHBKF0yCtCz7rbafNFsHgS88Qz0dQ8= =LoYV -----END PGP SIGNATURE----- feat: rebuild TDK Pinball Machine in Rust Replace the empty Rust scaffold with a playable native reconstruction of the 1995 Win16 game. Embed the complete decoded asset set, retain the original 640x460 presentation and localized help, and implement a resizable letterboxed Macroquad frontend for Linux, macOS, and Windows. Recreate the multiplayer ball flow, flippers, nudging, target banks, wheel, robot, lock, magnets, bumper progression, TDK diamond multiplier, media extra balls, sound dispatch, settings, and high-score entry. The physics engine uses a fixed time step and 101 static collision segments transcribed from the original 175-object table. Portable JSON persistence imports and decodes the original XOR-obfuscated high-score file on first run. Document the evidence boundary explicitly: artwork and PCM samples are exact, static geometry is recovered, and several numeric scoring/impulse values remain best-evidence behavioral tuning rather than bit-identical Win16 arithmetic. Add a native three-OS CI matrix and retain every decoded resource for future fidelity work. Test Plan: - `diff -qr original/assets/decoded tdkpin-rs/assets/original` with the two intentionally added legacy root files excluded -- passed - `cargo fmt --all -- --check` -- passed - `cargo check --all-targets` -- passed - `cargo test --all-targets` -- passed, 8 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - `cargo check --all-targets --target x86_64-pc-windows-gnu` -- passed - `cargo check --all-targets --target x86_64-apple-darwin` -- passed - `cargo run` graphical start, launch, collision, and score smoke test -- passed; audible output was unavailable because the host has no ALSA device Hxetree 3640748cb6872c7b91e4429df70419ac56d12f68 author ddidderr 1787406772 +0200 committer ddidderr 1787406772 +0200 gpgsig -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSGvfJ3d/B5oCcBowc4QfHCfm8OFAUCaomptAAKCRA4QfHCfm8O FLCwAP9ictKqyCUSCkjLm5G9DPUyai7XsO6+23Xz/iwknOYtmAD/Ragc/sZpiMsi ilnID0lkEpld0ZWXlXoPyp8nz5X4nQs= =Y0r5 -----END PGP SIGNATURE----- init {kx31000PK,(Mb>.ե>_jV3/ u140031+L/Je0-R_\ pRPKݹ=--x(name: Build TDK Pinball on: push: pull_request: jobs: build: strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} defaults: run: working-directory: tdkpin-rs steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - name: Install Linux development libraries if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y libasound2-dev libgl1-mesa-dev libxi-dev - run: cargo check --all-targets - run: cargo test --all-targets - run: cargo clippy --all-targets -- -D warnings hxtarget/ __pycache__/ USoxmyPwQDEk6P/t$WQ/Ɇ= sG`EZ2xoڊ"VZzRZdC~ޛD,^#b$Lk8DX"!>'ᦥްxe(Q-RhP$jgֲ ] :r?7Q(P9Jkyq gwjuα$5`򏞜X!Ta90 Gg;/bԧʔmG11a@CCưʁR_љn V 9yr#r2qV+/n{=?>Y6 Kҕ;p-eul:Thiz~ޤ&sQVP1o==ʾj h٪a8l""LgM%Nކ!3M;XFԼ1s]㎄p`VVoMEx,TFmO'>+MPry^9gmw"=9$ Ap5FUlkTs4^"/^P#Ball|dgTGF<_UN ?$7hb%eCMUJw+6-0!c!Ykkr,iۭhPj-uQ~{k%SAr^c0 P(~X<îQKq7R3VFMNIJ8tũ |&Dž"0R?hڱ˧ům) ]۪T^Qښ5 ӟb-SrUt+.@n|1 J~FëDЛbOa0#IlnG'GM?} ճmѦΟ?;k0,ETɿ(3vnj/|cfTPG)[!&N=HX.$TbMwUwwL{G,xJ'1e$Q& JqxC\B!2 ɛ}Ɋ~`,jp^ӷ}zc՟j TFLIPPK export ordinal 119 (1008:2219); WNDCLASS16 begins at 1028:0562; class name pointer 1028:0578 -> TPWinCrt. The 10-byte far callback has the exact WNDPROC16 stack shape and dispatches known window messages before DefWindowProc16. 1008:297b FUN_1008_295c SYSTEMTIMERMAKE verified companion-timer-callback MMTIMER.DLL 1000:0002 mmtimer_post_message_callback Installed by each SystemTimerMake call and removed through timeKillEvent16 using the returned timer id. MMTIMER.DLL export 1 at 1000:0039 and callback disassembly at 1000:0002; TDK wrapper 1008:295c. SystemTimerMake receives HWND, delay, resolution, and one-shot flag; its internal timeSetEvent16 callback posts message 0x0580 to that HWND. 1008:2ab1 FUN_1008_2a45 CREATEDIALOGPARAM verified dynamic-object-thunk dynamic thunk -> 1018:0133 object_dispatch_window_or_dialog_proc A 7-byte bound-object thunk is allocated from the verified 256-byte pool by 1018:01dc and returned by 1018:02fa during 1018:03ff destruction. CreateDialogParam16 push sequence at 1008:2a8f-2ab1; object callback fields +12/+14; verified dispatcher 1018:0133; reconstructed/tests/test_bound_thunks.c and test_message_dispatch.c. The callback argument is the bound thunk, not template fields +1d/+1f. Exact HWND/message/WPARAM/LPARAM record construction, dynamic VMT dispatch, and returned LRESULT are verified. 1008:2b64 FUN_1008_2ae3 DIALOGBOXPARAM verified dynamic-object-thunk dynamic thunk -> 1018:0133 object_dispatch_window_or_dialog_proc A 7-byte bound-object thunk is allocated from the verified 256-byte pool by 1018:01dc and returned by 1018:02fa during 1018:03ff destruction. DialogBoxParam16 push sequence at 1008:2b42-2b64; object callback fields +12/+14; verified dispatcher 1018:0133; reconstructed/tests/test_bound_thunks.c and test_message_dispatch.c. The modal and modeless dialog paths use the same object-bound dispatcher with exact message-record and LRESULT semantics; owner preservation remains accounted in the enclosing function ledger. 1018:0e86 FUN_1018_0e46 REGISTERCLASS verified class-bootstrap-wndproc 1018:018b object_window_bootstrap_proc Verified class-registration function 1018:0e46 first checks GetClassInfo, builds exact WNDCLASS16 only when absent, and registers bootstrap 1018:018b. Four VMT occurrences place 1018:0e46 at slot +0x1c; relocations 1018:12e1/12e4 select NE entry 211; class-registration and bootstrap-transition tests cover both sides. All concrete paths transition from verified bootstrap WNDPROC16 1018:018b to verified object-bound dispatcher 1018:0133; the abstract variant terminates through verified Runtime Error 211. 1018:1ac7 FUN_1018_1a61 MAKEPROCINSTANCE verified shared-dispatch-proc-instance 1018:0133 object_dispatch_window_or_dialog_proc Created once into verified DGROUP 0672:0674 by 1018:1a61 and released by FreeProcInstance16 in verified 1018:1b08. MAKEPROCINSTANCE relocation resolves FFFF:FFFF to NE entry 210 (1018:0133); verified application lifecycle, thunk pool, and message-dispatch tests. This process-wide proc instance is copied into each generated bound-object thunk; its complete stack record, hook, dynamic-handler, and LRESULT behavior are now address-linked readable C. mơƾx>start end bytes status object_id object_name c_type initialization readers evidence notes 1000:0000 1000:0001 2 verified code_segment_1_tag code_segment_1_tag uint16_t Static word 0001. NE loader/segment inventory Binary bytes and NE_SEGMENTS.tsv segment 1 mapping. Compiler-emitted ordinal tag at the start of Code1; explicitly data, never executed. 1000:026e 1000:026f 2 verified code1_dot_short_string code1_dot_short_string const uint8_t[2] Static bytes 01 2e. Verified executable-segment pointer and sole Position consumer in 1000:0270; generated setup tests Exact Turbo Pascal ShortString "." used to locate and replace the executable extension with INI. 1008:0000 1008:0001 2 verified code_segment_2_tag code_segment_2_tag uint16_t Static word 0002. NE loader/segment inventory Binary bytes and NE_SEGMENTS.tsv segment 2 mapping. Compiler-emitted ordinal tag at the start of Code2; explicitly data, never executed. 1008:0f2c 1008:0f2d 2 verified sound_extension_dot_short_string sound_extension_dot_short_string uint8_t[2] Static bytes 01 2e. tdkpin_initialize_sounds 1008:0f2e Disassembly 1008:0f68-1080; verified ShortString Position and DOSBox/host sound tests. Turbo Pascal ShortString "." used to locate the first executable-extension dot while constructing the INI path. 1008:11bd 1008:11c4 8 verified uint16_allocation_range g_uint16_range BorlandInt32Range Static int32 minimum 0 and maximum 65535. tdkpin_create_palette_from_rgb_table 1008:11c5 Binary bytes; DI=11bd before verified range check 1008:1305-1313; reconstructed/tests/test_palette.c. Compiler range descriptor proves the 32-bit LOGPALETTE allocation byte count fits the uint16 Borland FreeMem size argument. 1008:131e 1008:1325 8 verified palette_byte_index_range g_palette_byte_range BorlandInt32Range Static int32 minimum 0 and maximum 767. tdkpin_load_palette_resource 1008:1326 Binary bytes; both DI=131e range calls inside the inclusive 0..02ff loop; reconstructed/tests/test_palette.c. Compiler range descriptor is applied separately to every source and destination byte index. 1010:0000 1010:0001 2 verified code_segment_3_tag code_segment_3_tag uint16_t Static word 0003. NE loader/segment inventory Binary bytes and NE_SEGMENTS.tsv segment 3 mapping. Compiler-emitted ordinal tag at the start of Code3; explicitly data, never executed. 1010:0470 1010:0471 2 verified multimedia_path_separator_short_string multimedia_path_separator_short_string uint8_t[2] Static bytes 01 5c. multimedia_initialize_runtime_unit Binary bytes; disassembly 1010:0486-04bd and 04c2-04f9; reconstructed/tests/test_multimedia_startup.c Exact Turbo Pascal ShortString "\\" concatenated between the system directory and each CTL3D DLL basename. 1018:0000 1018:0001 2 verified code_segment_4_tag code_segment_4_tag uint16_t Static word 0004. NE loader/segment inventory Binary bytes and NE_SEGMENTS.tsv segment 4 mapping. Compiler-emitted ordinal tag at the start of Code4; explicitly data, never executed. 1020:0000 1020:0001 2 verified code_segment_5_tag code_segment_5_tag uint16_t Static word 0005. NE loader/segment inventory Binary bytes and NE_SEGMENTS.tsv segment 5 mapping. Compiler-emitted ordinal tag at the start of Code5; explicitly data, never executed. 1020:0107 1020:012c 38 verified borland_runtime_copyright borland_runtime_copyright char[38] Static bytes "Portions Copyright (c) 1983,90 Borland" without NUL. No in-image reader Binary bytes and complete reference inventory. Compiler runtime identification string retained as immutable evidence; unreachable as instructions and explicitly classified data. 1020:1191 1020:11ba 42 verified real48_sin_coefficients g_sin_coefficients BorlandReal48[7] Static -1/15!,+1/13!,-1/11!,+1/9!,-1/7!,+1/5!,-1/3! approximants. borland_real48_sin/cos Exact bytes; disassembly 111d-1190; C table; original-offset DOSBox Sin/Cos vectors. Order and rounding at every Horner operation are verified against the original routine. 1020:1240 1020:1263 36 verified real48_ln_coefficients g_ln_coefficients BorlandReal48[6] Static 1/13,1/11,1/9,1/7,1/5,1/3 approximants. borland_real48_ln Exact bytes; disassembly 11bb-123f; C table; original-offset DOSBox Ln vectors. Ordered atanh-series coefficients are represented byte-for-byte. 1020:12d7 1020:1306 48 verified real48_exp_coefficients g_exp_coefficients BorlandReal48[8] Static eight-entry Exp polynomial ending in ln(2). borland_real48_exp Exact bytes; disassembly 1264-12d6; C table; original-offset DOSBox Exp vectors. Exact Horner order, intermediate Real48 rounding, and table extent are verified. 1020:13e8 1020:1435 78 verified real48_arctan_tables g_arctan_reduction_and_coefficients BorlandReal48[13] Static direct threshold, tan/angle reduction pairs, one, pi/4, and five odd-series coefficients. borland_real48_arctan and series Exact bytes; all indexed reads 1353-13bf; C constants/tables; original-offset DOSBox ArcTan vectors. All 13 entries, paired strides, thresholds, angle selection, and coefficient order are verified. 1020:14fb 1020:14fe 4 verified random_unsigned_bias random_unsigned_bias float Static IEEE-754 single 2147483648.0 (bytes 0000004f). borland_random_unit_interval 1020:14de FADD operand at 14ed; reconstructed/tests/test_random.c. Converts signed FILD of the 32-bit seed to its exact unsigned magnitude before scaling. 1020:14ff 1020:1500 2 verified random_scale_exponent random_scale_exponent int16_t Static signed word -32 (ffe0). borland_random_unit_interval 1020:14de FILD operand at 14e2 followed by FSCALE; reconstructed/tests/test_random.c. Exact binary exponent used to divide the unsigned seed by 2^32. 1020:1537 1020:1538 2 verified random_multiplier_low_word random_multiplier_low_word uint16_t Static word 8405. borland_next_random 1020:1501 MUL operand at 150a; full derived multiplier 08088405; reconstructed/tests/test_random.c. Low word embedded by the Borland LCG implementation; higher multiplier contribution is instruction-encoded. x}record name_or_start end bytes detail block Code1 1000:fe39 65082 r=true,w=false,x=true,initialized=true block Code2 1008:30c4 12485 r=true,w=false,x=true,initialized=true block Code3 1010:05eb 1516 r=true,w=false,x=true,initialized=true block Code4 1018:1f79 8058 r=true,w=false,x=true,initialized=true block Code5 1020:1722 5923 r=true,w=false,x=true,initialized=true block Data6 1028:4d39 19770 r=true,w=true,x=false,initialized=true block Rsrc0 1030:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc1 1038:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc2 1040:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc3 1048:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc4 1050:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc5 1058:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc6 1060:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc7 1068:15ff 5632 r=true,w=false,x=false,initialized=true block Rsrc8 1071:7eff 98048 r=true,w=false,x=false,initialized=true block Rsrc9 1078:52ff 21248 r=true,w=false,x=false,initialized=true block Rsrc10 1080:52ff 21248 r=true,w=false,x=false,initialized=true block Rsrc11 1088:52ff 21248 r=true,w=false,x=false,initialized=true block Rsrc12 1090:52ff 21248 r=true,w=false,x=false,initialized=true block Rsrc13 1098:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc14 10a0:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc15 10a8:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc16 10b0:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc17 10b8:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc18 10c0:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc19 10c8:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc20 10d0:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc21 10d8:10ff 4352 r=true,w=false,x=false,initialized=true block Rsrc22 10e4:10ff 266496 r=true,w=false,x=false,initialized=true block Rsrc23 10e8:0fff 4096 r=true,w=false,x=false,initialized=true block Rsrc24 10f1:a6ff 108288 r=true,w=false,x=false,initialized=true block Rsrc25 10f8:0cff 3328 r=true,w=false,x=false,initialized=true block Rsrc26 1104:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc27 110c:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc28 1114:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc29 111c:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc30 1124:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc31 112c:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc32 1134:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc33 113c:7eff 294656 r=true,w=false,x=false,initialized=true block Rsrc34 1140:02ff 768 r=true,w=false,x=false,initialized=true block Rsrc35 1148:18ff 6400 r=true,w=false,x=false,initialized=true block Rsrc36 1150:11ff 4608 r=true,w=false,x=false,initialized=true block Rsrc37 1158:1dff 7680 r=true,w=false,x=false,initialized=true block Rsrc38 1160:0bff 3072 r=true,w=false,x=false,initialized=true block Rsrc39 1168:76ff 30464 r=true,w=false,x=false,initialized=true block Rsrc40 1170:98ff 39168 r=true,w=false,x=false,initialized=true block Rsrc41 1178:1aff 6912 r=true,w=false,x=false,initialized=true block Rsrc42 1180:01ff 512 r=true,w=false,x=false,initialized=true block Rsrc43 1188:b5ff 46592 r=true,w=false,x=false,initialized=true block Rsrc44 1190:1fff 8192 r=true,w=false,x=false,initialized=true block Rsrc45 1198:0dff 3584 r=true,w=false,x=false,initialized=true block Rsrc46 11a0:88ff 35072 r=true,w=false,x=false,initialized=true block Rsrc47 11a8:14ff 5376 r=true,w=false,x=false,initialized=true block Rsrc48 11b0:75ff 30208 r=true,w=false,x=false,initialized=true block Rsrc49 11b8:0cff 3328 r=true,w=false,x=false,initialized=true block Rsrc50 11c0:56ff 22272 r=true,w=false,x=false,initialized=true block Rsrc51 11c8:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc52 11d0:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc53 11d8:34ff 13568 r=true,w=false,x=false,initialized=true block Rsrc54 11e0:02ff 768 r=true,w=false,x=false,initialized=true block Rsrc55 11e8:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc56 11f0:01ff 512 r=true,w=false,x=false,initialized=true block Rsrc57 11f8:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc58 1200:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc59 1208:00ff 256 r=true,w=false,x=false,initialized=true block Rsrc60 1210:01ff 512 r=true,w=false,x=false,initialized=true block Rsrc61 1218:01ff 512 r=true,w=false,x=false,initialized=true block Rsrc62 1220:00ff 256 r=true,w=false,x=false,initialized=true block EXTERNAL 1228:048f 1168 r=true,w=false,x=false,initialized=false summary executable-bytes 93064 n/a summary disassembled-bytes 92780 99.69% of executable summary defined-data-bytes 282 0.30% of executable summary explained-code-or-data-bytes 93062 100.00% of executable summary function-body-bytes 92745 99.66% of executable summary internal-functions 391 n/a summary undefined-executable-bytes 2 n/a undefined-range 1020:0666 1020:0666 1 not-in-listing undefined-range 1020:0dea 1020:0dea 1 not-in-listing xx zaddress name kind status message 1000:0002 FUN_1000_0002 internal ok decompiled 1000:0100 FUN_1000_0100 internal ok decompiled 1000:0121 FUN_1000_0121 internal ok decompiled 1000:016c FUN_1000_016c internal ok decompiled 1000:01d3 FUN_1000_01d3 internal ok decompiled 1000:0270 FUN_1000_0270 internal ok decompiled 1000:51f5 FUN_1000_51f5 internal ok decompiled 1000:531e FUN_1000_531e internal ok decompiled 1000:5390 FUN_1000_5390 internal ok decompiled 1000:58e7 FUN_1000_58e7 internal ok decompiled 1000:5956 FUN_1000_5956 internal ok decompiled 1000:59a0 FUN_1000_59a0 internal ok decompiled 1000:5a37 FUN_1000_5a37 internal ok decompiled 1000:5ab7 FUN_1000_5ab7 internal ok decompiled 1000:5aea FUN_1000_5aea internal ok decompiled 1000:5ba6 FUN_1000_5ba6 internal ok decompiled 1000:5be5 FUN_1000_5be5 internal ok decompiled 1000:5c13 FUN_1000_5c13 internal ok decompiled 1000:5ee6 FUN_1000_5ee6 internal ok decompiled 1000:5efc FUN_1000_5efc internal ok decompiled 1000:5f29 FUN_1000_5f29 internal ok decompiled 1000:5fc0 FUN_1000_5fc0 internal ok decompiled 1000:6040 FUN_1000_6040 internal ok decompiled 1000:6073 FUN_1000_6073 internal ok decompiled 1000:60e7 FUN_1000_60e7 internal ok decompiled 1000:6129 FUN_1000_6129 internal ok decompiled 1000:616e FUN_1000_616e internal ok decompiled 1000:6202 FUN_1000_6202 internal ok decompiled 1000:6218 FUN_1000_6218 internal ok decompiled 1000:6245 FUN_1000_6245 internal ok decompiled 1000:62dc FUN_1000_62dc internal ok decompiled 1000:635c FUN_1000_635c internal ok decompiled 1000:638e FUN_1000_638e internal ok decompiled 1000:6b37 FUN_1000_6b37 internal ok decompiled 1000:6bf8 FUN_1000_6bf8 internal ok decompiled 1000:6f27 FUN_1000_6f27 internal ok decompiled 1000:7440 FUN_1000_7440 internal ok decompiled 1000:7e12 FUN_1000_7e12 internal ok decompiled 1000:7e92 FUN_1000_7e92 internal ok decompiled 1000:7ed9 FUN_1000_7ed9 internal ok decompiled 1000:8b0d FUN_1000_8b0d internal ok decompiled 1000:99f0 FUN_1000_99f0 internal ok decompiled 1000:9ae0 FUN_1000_9ae0 internal ok decompiled 1000:9b69 FUN_1000_9b69 internal ok decompiled 1000:9bca FUN_1000_9bca internal ok decompiled 1000:9e85 FUN_1000_9e85 internal ok decompiled 1000:9f73 FUN_1000_9f73 internal ok decompiled 1000:a38e FUN_1000_a38e internal ok decompiled 1000:a604 FUN_1000_a604 internal ok decompiled 1000:a70e FUN_1000_a70e internal ok decompiled 1000:a72c FUN_1000_a72c internal ok decompiled 1000:a8ea FUN_1000_a8ea internal ok decompiled 1000:a99c FUN_1000_a99c internal ok decompiled 1000:ab3c FUN_1000_ab3c internal ok decompiled 1000:abe5 FUN_1000_abe5 internal ok decompiled 1000:acc2 FUN_1000_acc2 internal ok decompiled 1000:ae6e FUN_1000_ae6e internal ok decompiled 1000:b2c8 FUN_1000_b2c8 internal ok decompiled 1000:b30b FUN_1000_b30b internal ok decompiled 1000:b3b0 FUN_1000_b3b0 internal ok decompiled 1000:b3f3 FUN_1000_b3f3 internal ok decompiled 1000:b476 FUN_1000_b476 internal ok decompiled 1000:bc36 FUN_1000_bc36 internal ok decompiled 1000:bda2 FUN_1000_bda2 internal ok decompiled 1000:bdde FUN_1000_bdde internal ok decompiled 1000:beff FUN_1000_beff internal ok decompiled 1000:c36b FUN_1000_c36b internal ok decompiled 1000:c426 FUN_1000_c426 internal ok decompiled 1000:c4e1 FUN_1000_c4e1 internal ok decompiled 1000:c79c FUN_1000_c79c internal ok decompiled 1000:eab1 exported_ordinal_10 internal ok decompiled 1000:fd85 ne_program_entry internal ok decompiled 1008:0002 FUN_1008_0002 internal ok decompiled 1008:0023 FUN_1008_0023 internal ok decompiled 1008:00e2 FUN_1008_00e2 internal ok decompiled 1008:0138 FUN_1008_0138 internal ok decompiled 1008:0787 FUN_1008_0787 internal ok decompiled 1008:07b6 FUN_1008_07b6 internal ok decompiled 1008:0837 FUN_1008_0837 internal ok decompiled 1008:08bb FUN_1008_08bb internal ok decompiled 1008:093f FUN_1008_093f internal ok decompiled 1008:0996 FUN_1008_0996 internal ok decompiled 1008:0b9e FUN_1008_0b9e internal ok decompiled 1008:0dbd FUN_1008_0dbd internal ok decompiled 1008:0e08 FUN_1008_0e08 internal ok decompiled 1008:0f27 FUN_1008_0f27 internal ok decompiled 1008:0f2e FUN_1008_0f2e internal ok decompiled 1008:10e3 FUN_1008_10e3 internal ok decompiled 1008:1131 FUN_1008_1131 internal ok decompiled 1008:118f FUN_1008_118f internal ok decompiled 1008:11b8 FUN_1008_11b8 internal ok decompiled 1008:11c5 FUN_1008_11c5 internal ok decompiled 1008:1326 FUN_1008_1326 internal ok decompiled 1008:13a8 FUN_1008_13a8 internal ok decompiled 1008:149d FUN_1008_149d internal ok decompiled 1008:15c2 FUN_1008_15c2 internal ok decompiled 1008:15c7 FUN_1008_15c7 internal ok decompiled 1008:15e7 FUN_1008_15e7 internal ok decompiled 1008:1607 FUN_1008_1607 internal ok decompiled 1008:168e FUN_1008_168e internal ok decompiled 1008:16be FUN_1008_16be internal ok decompiled 1008:172f FUN_1008_172f internal ok decompiled 1008:1754 FUN_1008_1754 internal ok decompiled 1008:1779 FUN_1008_1779 internal ok decompiled 1008:17e2 FUN_1008_17e2 internal ok decompiled 1008:1818 FUN_1008_1818 internal ok decompiled 1008:185b FUN_1008_185b internal ok decompiled 1008:1865 FUN_1008_1865 internal ok decompiled 1008:18d0 FUN_1008_18d0 internal ok decompiled 1008:18ee FUN_1008_18ee internal ok decompiled 1008:19b7 FUN_1008_19b7 internal ok decompiled 1008:19f8 FUN_1008_19f8 internal ok decompiled 1008:1a39 FUN_1008_1a39 internal ok decompiled 1008:1a82 FUN_1008_1a82 internal ok decompiled 1008:1b11 FUN_1008_1b11 internal ok decompiled 1008:1be9 FUN_1008_1be9 internal ok decompiled 1008:1c03 FUN_1008_1c03 internal ok decompiled 1008:1c5f FUN_1008_1c5f internal ok decompiled 1008:1cc6 FUN_1008_1cc6 internal ok decompiled 1008:1d77 FUN_1008_1d77 internal ok decompiled 1008:1dcc FUN_1008_1dcc internal ok decompiled 1008:1e8a FUN_1008_1e8a internal ok decompiled 1008:1f0c FUN_1008_1f0c internal ok decompiled 1008:1f68 FUN_1008_1f68 internal ok decompiled 1008:1fe8 FUN_1008_1fe8 internal ok decompiled 1008:211a FUN_1008_211a internal ok decompiled 1008:2147 FUN_1008_2147 internal ok decompiled 1008:21ba FUN_1008_21ba internal ok decompiled 1008:21ce FUN_1008_21ce internal ok decompiled 1008:21e2 FUN_1008_21e2 internal ok decompiled 1008:2219 FUN_1008_2219 internal ok decompiled 1008:22fc FUN_1008_22fc internal ok decompiled 1008:233c FUN_1008_233c internal ok decompiled 1008:2374 FUN_1008_2374 internal ok decompiled 1008:238b FUN_1008_238b internal ok decompiled 1008:23fd FUN_1008_23fd internal ok decompiled 1008:2442 FUN_1008_2442 internal ok decompiled 1008:24a5 FUN_1008_24a5 internal ok decompiled 1008:2554 FUN_1008_2554 internal ok decompiled 1008:2608 FUN_1008_2608 internal ok decompiled 1008:2643 FUN_1008_2643 internal ok decompiled 1008:26b0 FUN_1008_26b0 internal ok decompiled 1008:2819 FUN_1008_2819 internal ok decompiled 1008:28a3 FUN_1008_28a3 internal ok decompiled 1008:2906 FUN_1008_2906 internal ok decompiled 1008:2932 FUN_1008_2932 internal ok decompiled 1008:295c FUN_1008_295c internal ok decompiled 1008:298a FUN_1008_298a internal ok decompiled 1008:2996 FUN_1008_2996 internal ok decompiled 1008:2a0e FUN_1008_2a0e internal ok decompiled 1008:2a45 FUN_1008_2a45 internal ok decompiled 1008:2ae3 FUN_1008_2ae3 internal ok decompiled 1008:2bb1 FUN_1008_2bb1 internal ok decompiled 1008:2bd1 FUN_1008_2bd1 internal ok decompiled 1008:2c08 FUN_1008_2c08 internal ok decompiled 1008:2c1f FUN_1008_2c1f internal ok decompiled 1008:2c83 FUN_1008_2c83 internal ok decompiled 1008:2cd9 FUN_1008_2cd9 internal ok decompiled 1008:2cf2 FUN_1008_2cf2 internal ok decompiled 1008:2d3a FUN_1008_2d3a internal ok decompiled 1008:2d66 FUN_1008_2d66 internal ok decompiled 1008:2d87 FUN_1008_2d87 internal ok decompiled 1008:2d99 FUN_1008_2d99 internal ok decompiled 1008:2db3 FUN_1008_2db3 internal ok decompiled 1008:2dcd FUN_1008_2dcd internal ok decompiled 1008:2de0 FUN_1008_2de0 internal ok decompiled 1008:2dff FUN_1008_2dff internal ok decompiled 1008:2e22 FUN_1008_2e22 internal ok decompiled 1008:2e76 FUN_1008_2e76 internal ok decompiled 1008:2e92 FUN_1008_2e92 internal ok decompiled 1008:2ea9 FUN_1008_2ea9 internal ok decompiled 1008:2ec0 FUN_1008_2ec0 internal ok decompiled 1008:2ee5 FUN_1008_2ee5 internal ok decompiled 1008:2f07 FUN_1008_2f07 internal ok decompiled 1008:2f2f FUN_1008_2f2f internal ok decompiled 1008:2f4d FUN_1008_2f4d internal ok decompiled 1008:2f70 FUN_1008_2f70 internal ok decompiled 1008:2fbb FUN_1008_2fbb internal ok decompiled 1008:2fe3 FUN_1008_2fe3 internal ok decompiled 1008:300a FUN_1008_300a internal ok decompiled 1008:302c FUN_1008_302c internal ok decompiled 1008:3099 FUN_1008_3099 internal ok decompiled 1010:0002 FUN_1010_0002 internal ok decompiled 1010:0079 FUN_1010_0079 internal ok decompiled 1010:00a2 FUN_1010_00a2 internal ok decompiled 1010:01c2 FUN_1010_01c2 internal ok decompiled 1010:03af FUN_1010_03af internal ok decompiled 1010:03e0 FUN_1010_03e0 internal ok decompiled 1010:0405 FUN_1010_0405 internal ok decompiled 1010:0472 FUN_1010_0472 internal ok decompiled 1018:0002 FUN_1018_0002 internal ok decompiled 1018:0045 FUN_1018_0045 internal ok decompiled 1018:0071 FUN_1018_0071 internal ok decompiled 1018:0097 FUN_1018_0097 internal ok decompiled 1018:0103 FUN_1018_0103 internal ok decompiled 1018:0133 FUN_1018_0133 internal ok decompiled 1018:018b FUN_1018_018b internal ok decompiled 1018:01dc FUN_1018_01dc internal ok decompiled 1018:02fa FUN_1018_02fa internal ok decompiled 1018:0341 FUN_1018_0341 internal ok decompiled 1018:03e9 FUN_1018_03e9 internal ok decompiled 1018:03ff FUN_1018_03ff internal ok decompiled 1018:0466 FUN_1018_0466 internal ok decompiled 1018:049e FUN_1018_049e internal ok decompiled 1018:0524 FUN_1018_0524 internal ok decompiled 1018:055c FUN_1018_055c internal ok decompiled 1018:05dc FUN_1018_05dc internal ok decompiled 1018:05f3 FUN_1018_05f3 internal ok decompiled 1018:060d FUN_1018_060d internal ok decompiled 1018:0627 FUN_1018_0627 internal ok decompiled 1018:0641 FUN_1018_0641 internal ok decompiled 1018:0673 FUN_1018_0673 internal ok decompiled 1018:069a FUN_1018_069a internal ok decompiled 1018:071c FUN_1018_071c internal ok decompiled 1018:080d FUN_1018_080d internal ok decompiled 1018:085a FUN_1018_085a internal ok decompiled 1018:08ac FUN_1018_08ac internal ok decompiled 1018:08c3 FUN_1018_08c3 internal ok decompiled 1018:08f0 FUN_1018_08f0 internal ok decompiled 1018:0a85 FUN_1018_0a85 internal ok decompiled 1018:0b25 FUN_1018_0b25 internal ok decompiled 1018:0b6c FUN_1018_0b6c internal ok decompiled 1018:0bb3 FUN_1018_0bb3 internal ok decompiled 1018:0c3d FUN_1018_0c3d internal ok decompiled 1018:0c59 FUN_1018_0c59 internal ok decompiled 1018:0cc7 FUN_1018_0cc7 internal ok decompiled 1018:0ce7 FUN_1018_0ce7 internal ok decompiled 1018:0d6a FUN_1018_0d6a internal ok decompiled 1018:0d8a FUN_1018_0d8a internal ok decompiled 1018:0d9b FUN_1018_0d9b internal ok decompiled 1018:0dcd FUN_1018_0dcd internal ok decompiled 1018:0e0a FUN_1018_0e0a internal ok decompiled 1018:0e46 FUN_1018_0e46 internal ok decompiled 1018:0e9e FUN_1018_0e9e internal ok decompiled 1018:0ec0 FUN_1018_0ec0 internal ok decompiled 1018:0ef4 FUN_1018_0ef4 internal ok decompiled 1018:0f22 FUN_1018_0f22 internal ok decompiled 1018:0f38 FUN_1018_0f38 internal ok decompiled 1018:0f8d FUN_1018_0f8d internal ok decompiled 1018:0fcc FUN_1018_0fcc internal ok decompiled 1018:0ffd FUN_1018_0ffd internal ok decompiled 1018:1054 FUN_1018_1054 internal ok decompiled 1018:10aa FUN_1018_10aa internal ok decompiled 1018:10e9 FUN_1018_10e9 internal ok decompiled 1018:1106 FUN_1018_1106 internal ok decompiled 1018:121b FUN_1018_121b internal ok decompiled 1018:1274 FUN_1018_1274 internal ok decompiled 1018:12f5 FUN_1018_12f5 internal ok decompiled 1018:1311 FUN_1018_1311 internal ok decompiled 1018:134f FUN_1018_134f internal ok decompiled 1018:1547 FUN_1018_1547 internal ok decompiled 1018:1586 FUN_1018_1586 internal ok decompiled 1018:15c0 FUN_1018_15c0 internal ok decompiled 1018:169d FUN_1018_169d internal ok decompiled 1018:16eb FUN_1018_16eb internal ok decompiled 1018:170c FUN_1018_170c internal ok decompiled 1018:1761 FUN_1018_1761 internal ok decompiled 1018:1788 FUN_1018_1788 internal ok decompiled 1018:17f8 FUN_1018_17f8 internal ok decompiled 1018:1868 FUN_1018_1868 internal ok decompiled 1018:18e9 FUN_1018_18e9 internal ok decompiled 1018:1960 FUN_1018_1960 internal ok decompiled 1018:1986 FUN_1018_1986 internal ok decompiled 1018:1a0e FUN_1018_1a0e internal ok decompiled 1018:1a61 FUN_1018_1a61 internal ok decompiled 1018:1b08 FUN_1018_1b08 internal ok decompiled 1018:1b35 FUN_1018_1b35 internal ok decompiled 1018:1b4b FUN_1018_1b4b internal ok decompiled 1018:1b57 FUN_1018_1b57 internal ok decompiled 1018:1bb0 FUN_1018_1bb0 internal ok decompiled 1018:1bdf FUN_1018_1bdf internal ok decompiled 1018:1bfc FUN_1018_1bfc internal ok decompiled 1018:1c7f FUN_1018_1c7f internal ok decompiled 1018:1cd6 FUN_1018_1cd6 internal ok decompiled 1018:1d22 FUN_1018_1d22 internal ok decompiled 1018:1d64 FUN_1018_1d64 internal ok decompiled 1018:1db1 FUN_1018_1db1 internal ok decompiled 1018:1e39 FUN_1018_1e39 internal ok decompiled 1018:1eb0 FUN_1018_1eb0 internal ok decompiled 1018:1f14 FUN_1018_1f14 internal ok decompiled 1018:1f56 FUN_1018_1f56 internal ok decompiled 1020:0002 FUN_1020_0002 internal ok decompiled 1020:005d FUN_1020_005d internal ok decompiled 1020:0061 FUN_1020_0061 internal ok decompiled 1020:00d2 FUN_1020_00d2 internal ok decompiled 1020:00f0 FUN_1020_00f0 internal ok decompiled 1020:012d FUN_1020_012d internal ok decompiled 1020:0147 FUN_1020_0147 internal ok decompiled 1020:0167 FUN_1020_0167 internal ok decompiled 1020:0195 runtime_1020_0195 internal ok decompiled 1020:01ca FUN_1020_01ca internal ok decompiled 1020:0222 FUN_1020_0222 internal ok decompiled 1020:023c FUN_1020_023c internal ok decompiled 1020:026a FUN_1020_026a internal ok decompiled 1020:02a6 FUN_1020_02a6 internal ok decompiled 1020:02d7 FUN_1020_02d7 internal ok decompiled 1020:0327 FUN_1020_0327 internal ok decompiled 1020:0388 FUN_1020_0388 internal ok decompiled 1020:038f FUN_1020_038f internal ok decompiled 1020:039d FUN_1020_039d internal ok decompiled 1020:03c5 runtime_1020_03c5 internal ok decompiled 1020:03cb FUN_1020_03cb internal ok decompiled 1020:03ef FUN_1020_03ef internal ok decompiled 1020:0439 FUN_1020_0439 internal ok decompiled 1020:046c runtime_1020_046c internal ok decompiled 1020:048f runtime_1020_048f internal ok decompiled 1020:049f runtime_1020_049f internal ok decompiled 1020:04fc runtime_1020_04fc internal ok decompiled 1020:0527 FUN_1020_0527 internal ok decompiled 1020:052c FUN_1020_052c internal ok decompiled 1020:0534 FUN_1020_0534 internal ok decompiled 1020:0586 FUN_1020_0586 internal ok decompiled 1020:05c7 FUN_1020_05c7 internal ok decompiled 1020:05d8 FUN_1020_05d8 internal ok decompiled 1020:0608 FUN_1020_0608 internal ok decompiled 1020:062d FUN_1020_062d internal ok decompiled 1020:064d FUN_1020_064d internal ok decompiled 1020:0667 FUN_1020_0667 internal ok decompiled 1020:06ab FUN_1020_06ab internal ok decompiled 1020:0710 runtime_1020_0710 internal ok decompiled 1020:072c FUN_1020_072c internal ok decompiled 1020:0751 FUN_1020_0751 internal ok decompiled 1020:0760 runtime_1020_0760 internal ok decompiled 1020:0796 runtime_1020_0796 internal ok decompiled 1020:07fe FUN_1020_07fe internal ok decompiled 1020:082e FUN_1020_082e internal ok decompiled 1020:0866 runtime_1020_0866 internal ok decompiled 1020:0871 FUN_1020_0871 internal ok decompiled 1020:0891 FUN_1020_0891 internal ok decompiled 1020:08a9 FUN_1020_08a9 internal ok decompiled 1020:08e6 FUN_1020_08e6 internal ok decompiled 1020:098c runtime_1020_098c internal ok decompiled 1020:09af runtime_1020_09af internal ok decompiled 1020:09d2 runtime_1020_09d2 internal ok decompiled 1020:09ec FUN_1020_09ec internal ok decompiled 1020:0a10 FUN_1020_0a10 internal ok decompiled 1020:0a51 FUN_1020_0a51 internal ok decompiled 1020:0a7d FUN_1020_0a7d internal ok decompiled 1020:0ac3 FUN_1020_0ac3 internal ok decompiled 1020:0aee runtime_1020_0aee internal ok decompiled 1020:0b00 FUN_1020_0b00 internal ok decompiled 1020:0b1b FUN_1020_0b1b internal ok decompiled 1020:0b7a FUN_1020_0b7a internal ok decompiled 1020:0be9 FUN_1020_0be9 internal ok decompiled 1020:0c76 FUN_1020_0c76 internal ok decompiled 1020:0cd0 FUN_1020_0cd0 internal ok decompiled 1020:0cd4 FUN_1020_0cd4 internal ok decompiled 1020:0d97 FUN_1020_0d97 internal ok decompiled 1020:0e93 FUN_1020_0e93 internal ok decompiled 1020:0e9a FUN_1020_0e9a internal ok decompiled 1020:0f11 FUN_1020_0f11 internal ok decompiled 1020:0f28 FUN_1020_0f28 internal ok decompiled 1020:0f3b FUN_1020_0f3b internal ok decompiled 1020:0f77 FUN_1020_0f77 internal ok decompiled 1020:0fe5 FUN_1020_0fe5 internal ok decompiled 1020:0feb FUN_1020_0feb internal ok decompiled 1020:0ff1 FUN_1020_0ff1 internal ok decompiled 1020:0ff7 FUN_1020_0ff7 internal ok decompiled 1020:0ffd FUN_1020_0ffd internal ok decompiled 1020:1007 FUN_1020_1007 internal ok decompiled 1020:100b FUN_1020_100b internal ok decompiled 1020:1017 FUN_1020_1017 internal ok decompiled 1020:1031 FUN_1020_1031 internal ok decompiled 1020:103b runtime_1020_103b internal ok decompiled 1020:1045 runtime_1020_1045 internal ok decompiled 1020:104f FUN_1020_104f internal ok decompiled 1020:1059 runtime_1020_1059 internal ok decompiled 1020:10aa runtime_1020_10aa internal ok decompiled 1020:10be FUN_1020_10be internal ok decompiled 1020:111d runtime_1020_111d internal ok decompiled 1020:11bb runtime_1020_11bb internal ok decompiled 1020:1264 runtime_1020_1264 internal ok decompiled 1020:1307 runtime_1020_1307 internal ok decompiled 1020:1436 runtime_1020_1436 internal ok decompiled 1020:143c FUN_1020_143c internal ok decompiled 1020:1455 FUN_1020_1455 internal ok decompiled 1020:14a4 FUN_1020_14a4 internal ok decompiled 1020:14c1 FUN_1020_14c1 internal ok decompiled 1020:14de runtime_1020_14de internal ok decompiled 1020:1501 FUN_1020_1501 internal ok decompiled 1020:1539 runtime_1020_1539 internal ok decompiled 1020:1546 FUN_1020_1546 internal ok decompiled 1020:1562 FUN_1020_1562 internal ok decompiled 1020:1582 FUN_1020_1582 internal ok decompiled 1020:1629 FUN_1020_1629 internal ok decompiled 1020:1674 FUN_1020_1674 internal ok decompiled 1020:16a5 FUN_1020_16a5 internal ok decompiled 1020:16c9 FUN_1020_16c9 internal ok decompiled 1020:16dd runtime_1020_16dd internal ok decompiled 1020:16e1 FUN_1020_16e1 internal ok decompiled 1020:16e6 FUN_1020_16e6 internal ok decompiled 1228:0000 GETVERSION external n/a imported function 1228:0004 GLOBALALLOC external n/a imported function 1228:0008 GLOBALFREE external n/a imported function 1228:000c GLOBALLOCK external n/a imported function 1228:0010 GLOBALUNLOCK external n/a imported function 1228:0014 GLOBALHANDLE external n/a imported function 1228:0018 GLOBALCOMPACT external n/a imported function 1228:001c WAITEVENT external n/a imported function 1228:0020 GETCURRENTTASK external n/a imported function 1228:0024 GETMODULEHANDLE external n/a imported function 1228:0028 GETMODULEFILENAME external n/a imported function 1228:002c GETPROCADDRESS external n/a imported function 1228:0030 MAKEPROCINSTANCE external n/a imported function 1228:0034 FREEPROCINSTANCE external n/a imported function 1228:0038 FINDRESOURCE external n/a imported function 1228:003c LOADRESOURCE external n/a imported function 1228:0040 LOCKRESOURCE external n/a imported function 1228:0044 FREERESOURCE external n/a imported function 1228:0048 _LCLOSE external n/a imported function 1228:004c _LREAD external n/a imported function 1228:0050 _LCREAT external n/a imported function 1228:0054 _LOPEN external n/a imported function 1228:0058 _LWRITE external n/a imported function 1228:005c INITTASK external n/a imported function 1228:0060 LOADLIBRARY external n/a imported function 1228:0064 FREELIBRARY external n/a imported function 1228:0068 SETERRORMODE external n/a imported function 1228:006c __AHINCR external n/a imported function 1228:0070 GETPRIVATEPROFILEINT external n/a imported function 1228:0074 GETDOSENVIRONMENT external n/a imported function 1228:0078 GETWINFLAGS external n/a imported function 1228:007c GETWINDOWSDIRECTORY external n/a imported function 1228:0080 GETSYSTEMDIRECTORY external n/a imported function 1228:0084 GETFREESPACE external n/a imported function 1228:0088 ALLOCCSTODSALIAS external n/a imported function 1228:008c FREESELECTOR external n/a imported function 1228:0090 PRESTOCHANGOSELECTOR external n/a imported function 1228:0094 SYSTEMTIMERMAKE external n/a imported function 1228:0098 SNDPLAYSOUND external n/a imported function 1228:009c WAVEOUTGETNUMDEVS external n/a imported function 1228:00a0 WAVEOUTGETDEVCAPS external n/a imported function 1228:00a4 WAVEOUTGETVOLUME external n/a imported function 1228:00a8 TIMEKILLEVENT external n/a imported function 1228:00ac GETVERSION external n/a imported function 1228:00b0 GLOBALALLOC external n/a imported function 1228:00b4 GLOBALFREE external n/a imported function 1228:00b8 GLOBALLOCK external n/a imported function 1228:00bc GLOBALUNLOCK external n/a imported function 1228:00c0 GLOBALHANDLE external n/a imported function 1228:00c4 GLOBALCOMPACT external n/a imported function 1228:00c8 WAITEVENT external n/a imported function 1228:00cc GETCURRENTTASK external n/a imported function 1228:00d0 GETMODULEHANDLE external n/a imported function 1228:00d4 GETMODULEFILENAME external n/a imported function 1228:00d8 GETPROCADDRESS external n/a imported function 1228:00dc MAKEPROCINSTANCE external n/a imported function 1228:00e0 FREEPROCINSTANCE external n/a imported function 1228:00e4 FINDRESOURCE external n/a imported function 1228:00e8 LOADRESOURCE external n/a imported function 1228:00ec LOCKRESOURCE external n/a imported function 1228:00f0 FREERESOURCE external n/a imported function 1228:00f4 _LCLOSE external n/a imported function 1228:00f8 _LREAD external n/a imported function 1228:00fc _LCREAT external n/a imported function 1228:0100 _LOPEN external n/a imported function 1228:0104 _LWRITE external n/a imported function 1228:0108 INITTASK external n/a imported function 1228:010c LOADLIBRARY external n/a imported function 1228:0110 FREELIBRARY external n/a imported function 1228:0114 SETERRORMODE external n/a imported function 1228:0118 __AHINCR external n/a imported function 1228:011c GETPRIVATEPROFILEINT external n/a imported function 1228:0120 GETDOSENVIRONMENT external n/a imported function 1228:0124 GETWINFLAGS external n/a imported function 1228:0128 GETWINDOWSDIRECTORY external n/a imported function 1228:012c GETSYSTEMDIRECTORY external n/a imported function 1228:0130 GETFREESPACE external n/a imported function 1228:0134 ALLOCCSTODSALIAS external n/a imported function 1228:0138 FREESELECTOR external n/a imported function 1228:013c PRESTOCHANGOSELECTOR external n/a imported function 1228:0140 SETBKCOLOR external n/a imported function 1228:0144 SETBKMODE external n/a imported function 1228:0148 SETTEXTCOLOR external n/a imported function 1228:014c TEXTOUT external n/a imported function 1228:0150 BITBLT external n/a imported function 1228:0154 SELECTOBJECT external n/a imported function 1228:0158 CREATECOMPATIBLEBITMAP external n/a imported function 1228:015c CREATECOMPATIBLEDC external n/a imported function 1228:0160 CREATEDC external n/a imported function 1228:0164 DELETEDC external n/a imported function 1228:0168 DELETEOBJECT external n/a imported function 1228:016c GETSTOCKOBJECT external n/a imported function 1228:0170 GETTEXTCOLOR external n/a imported function 1228:0174 GETTEXTMETRICS external n/a imported function 1228:0178 UNREALIZEOBJECT external n/a imported function 1228:017c SETTEXTALIGN external n/a imported function 1228:0180 CREATEPALETTE external n/a imported function 1228:0184 UPDATECOLORS external n/a imported function 1228:0188 CREATEDIBITMAP external n/a imported function 1228:018c MESSAGEBOX external n/a imported function 1228:0190 INITAPP external n/a imported function 1228:0194 POSTQUITMESSAGE external n/a imported function 1228:0198 GETTICKCOUNT external n/a imported function 1228:019c SETCAPTURE external n/a imported function 1228:01a0 RELEASECAPTURE external n/a imported function 1228:01a4 SETFOCUS external n/a imported function 1228:01a8 GETFOCUS external n/a imported function 1228:01ac REMOVEPROP external n/a imported function 1228:01b0 GETPROP external n/a imported function 1228:01b4 SETPROP external n/a imported function 1228:01b8 SCREENTOCLIENT external n/a imported function 1228:01bc ISICONIC external n/a imported function 1228:01c0 GETWINDOWRECT external n/a imported function 1228:01c4 GETCLIENTRECT external n/a imported function 1228:01c8 GETWINDOWTEXT external n/a imported function 1228:01cc SETWINDOWTEXT external n/a imported function 1228:01d0 BEGINPAINT external n/a imported function 1228:01d4 ENDPAINT external n/a imported function 1228:01d8 CREATEWINDOW external n/a imported function 1228:01dc SHOWWINDOW external n/a imported function 1228:01e0 GETPARENT external n/a imported function 1228:01e4 ISWINDOW external n/a imported function 1228:01e8 ISCHILD external n/a imported function 1228:01ec DESTROYWINDOW external n/a imported function 1228:01f0 REGISTERCLASS external n/a imported function 1228:01f4 SCROLLWINDOW external n/a imported function 1228:01f8 SETSCROLLPOS external n/a imported function 1228:01fc SETSCROLLRANGE external n/a imported function 1228:0200 GETDC external n/a imported function 1228:0204 RELEASEDC external n/a imported function 1228:0208 SETCURSOR external n/a imported function 1228:020c ENDDIALOG external n/a imported function 1228:0210 ISDIALOGMESSAGE external n/a imported function 1228:0214 GETDLGITEM external n/a imported function 1228:0218 SETDLGITEMTEXT external n/a imported function 1228:021c GETDLGITEMTEXT external n/a imported function 1228:0220 SENDDLGITEMMESSAGE external n/a imported function 1228:0224 MESSAGEBEEP external n/a imported function 1228:0228 GETKEYSTATE external n/a imported function 1228:022c DEFWINDOWPROC external n/a imported function 1228:0230 GETMESSAGE external n/a imported function 1228:0234 PEEKMESSAGE external n/a imported function 1228:0238 SENDMESSAGE external n/a imported function 1228:023c WAITMESSAGE external n/a imported function 1228:0240 TRANSLATEMESSAGE external n/a imported function 1228:0244 DISPATCHMESSAGE external n/a imported function 1228:0248 CALLWINDOWPROC external n/a imported function 1228:024c UPDATEWINDOW external n/a imported function 1228:0250 INVALIDATERECT external n/a imported function 1228:0254 GETWINDOWWORD external n/a imported function 1228:0258 GETWINDOWLONG external n/a imported function 1228:025c SETWINDOWLONG external n/a imported function 1228:0260 ENABLEMENUITEM external n/a imported function 1228:0264 GETSYSTEMMENU external n/a imported function 1228:0268 CREATECARET external n/a imported function 1228:026c DESTROYCARET external n/a imported function 1228:0270 SETCARETPOS external n/a imported function 1228:0274 SHOWCARET external n/a imported function 1228:0278 LOADCURSOR external n/a imported function 1228:027c LOADICON external n/a imported function 1228:0280 LOADBITMAP external n/a imported function 1228:0284 TRANSLATEACCELERATOR external n/a imported function 1228:0288 GETSYSTEMMETRICS external n/a imported function 1228:028c GETSYSCOLOR external n/a imported function 1228:0290 DIALOGBOXPARAM external n/a imported function 1228:0294 CREATEDIALOGPARAM external n/a imported function 1228:0298 ISZOOMED external n/a imported function 1228:029c SELECTPALETTE external n/a imported function 1228:02a0 REALIZEPALETTE external n/a imported function 1228:02a4 DEFDLGPROC external n/a imported function 1228:02a8 GETCLASSINFO external n/a imported function 1228:02ac WVSPRINTF external n/a imported function 1228:02b0 DEFMDICHILDPROC external n/a imported function 1228:02b4 TRANSLATEMDISYSACCEL external n/a imported function 1228:02b8 CREATEWINDOWEX external n/a imported function 1228:02bc Ordinal_5 external n/a imported function 1228:02c0 Ordinal_6 external n/a imported function 1228:02c4 GETVERSION external n/a imported function 1228:02c8 GLOBALALLOC external n/a imported function 1228:02cc GLOBALFREE external n/a imported function 1228:02d0 GLOBALLOCK external n/a imported function 1228:02d4 GLOBALUNLOCK external n/a imported function 1228:02d8 GLOBALHANDLE external n/a imported function 1228:02dc GLOBALCOMPACT external n/a imported function 1228:02e0 WAITEVENT external n/a imported function 1228:02e4 GETCURRENTTASK external n/a imported function 1228:02e8 GETMODULEHANDLE external n/a imported function 1228:02ec GETMODULEFILENAME external n/a imported function 1228:02f0 GETPROCADDRESS external n/a imported function 1228:02f4 MAKEPROCINSTANCE external n/a imported function 1228:02f8 FREEPROCINSTANCE external n/a imported function 1228:02fc FINDRESOURCE external n/a imported function 1228:0300 LOADRESOURCE external n/a imported function 1228:0304 LOCKRESOURCE external n/a imported function 1228:0308 FREERESOURCE external n/a imported function 1228:030c _LCLOSE external n/a imported function 1228:0310 _LREAD external n/a imported function 1228:0314 _LCREAT external n/a imported function 1228:0318 _LOPEN external n/a imported function 1228:031c _LWRITE external n/a imported function 1228:0320 INITTASK external n/a imported function 1228:0324 LOADLIBRARY external n/a imported function 1228:0328 FREELIBRARY external n/a imported function 1228:032c SETERRORMODE external n/a imported function 1228:0330 __AHINCR external n/a imported function 1228:0334 GETPRIVATEPROFILEINT external n/a imported function 1228:0338 GETDOSENVIRONMENT external n/a imported function 1228:033c GETWINFLAGS external n/a imported function 1228:0340 GETWINDOWSDIRECTORY external n/a imported function 1228:0344 GETSYSTEMDIRECTORY external n/a imported function 1228:0348 GETFREESPACE external n/a imported function 1228:034c ALLOCCSTODSALIAS external n/a imported function 1228:0350 FREESELECTOR external n/a imported function 1228:0354 PRESTOCHANGOSELECTOR external n/a imported function 1228:0358 MESSAGEBOX external n/a imported function 1228:035c INITAPP external n/a imported function 1228:0360 POSTQUITMESSAGE external n/a imported function 1228:0364 GETTICKCOUNT external n/a imported function 1228:0368 SETCAPTURE external n/a imported function 1228:036c RELEASECAPTURE external n/a imported function 1228:0370 SETFOCUS external n/a imported function 1228:0374 GETFOCUS external n/a imported function 1228:0378 REMOVEPROP external n/a imported function 1228:037c GETPROP external n/a imported function 1228:0380 SETPROP external n/a imported function 1228:0384 SCREENTOCLIENT external n/a imported function 1228:0388 ISICONIC external n/a imported function 1228:038c GETWINDOWRECT external n/a imported function 1228:0390 GETCLIENTRECT external n/a imported function 1228:0394 GETWINDOWTEXT external n/a imported function 1228:0398 SETWINDOWTEXT external n/a imported function 1228:039c BEGINPAINT external n/a imported function 1228:03a0 ENDPAINT external n/a imported function 1228:03a4 CREATEWINDOW external n/a imported function 1228:03a8 SHOWWINDOW external n/a imported function 1228:03ac GETPARENT external n/a imported function 1228:03b0 ISWINDOW external n/a imported function 1228:03b4 ISCHILD external n/a imported function 1228:03b8 DESTROYWINDOW external n/a imported function 1228:03bc REGISTERCLASS external n/a imported function 1228:03c0 SCROLLWINDOW external n/a imported function 1228:03c4 SETSCROLLPOS external n/a imported function 1228:03c8 SETSCROLLRANGE external n/a imported function 1228:03cc GETDC external n/a imported function 1228:03d0 RELEASEDC external n/a imported function 1228:03d4 SETCURSOR external n/a imported function 1228:03d8 ENDDIALOG external n/a imported function 1228:03dc ISDIALOGMESSAGE external n/a imported function 1228:03e0 GETDLGITEM external n/a imported function 1228:03e4 SETDLGITEMTEXT external n/a imported function 1228:03e8 GETDLGITEMTEXT external n/a imported function 1228:03ec SENDDLGITEMMESSAGE external n/a imported function 1228:03f0 MESSAGEBEEP external n/a imported function 1228:03f4 GETKEYSTATE external n/a imported function 1228:03f8 DEFWINDOWPROC external n/a imported function 1228:03fc GETMESSAGE external n/a imported function 1228:0400 PEEKMESSAGE external n/a imported function 1228:0404 SENDMESSAGE external n/a imported function 1228:0408 WAITMESSAGE external n/a imported function 1228:040c TRANSLATEMESSAGE external n/a imported function 1228:0410 DISPATCHMESSAGE external n/a imported function 1228:0414 CALLWINDOWPROC external n/a imported function 1228:0418 UPDATEWINDOW external n/a imported function 1228:041c INVALIDATERECT external n/a imported function 1228:0420 GETWINDOWWORD external n/a imported function 1228:0424 GETWINDOWLONG external n/a imported function 1228:0428 SETWINDOWLONG external n/a imported function 1228:042c ENABLEMENUITEM external n/a imported function 1228:0430 GETSYSTEMMENU external n/a imported function 1228:0434 CREATECARET external n/a imported function 1228:0438 DESTROYCARET external n/a imported function 1228:043c SETCARETPOS external n/a imported function 1228:0440 SHOWCARET external n/a imported function 1228:0444 LOADCURSOR external n/a imported function 1228:0448 LOADICON external n/a imported function 1228:044c LOADBITMAP external n/a imported function 1228:0450 TRANSLATEACCELERATOR external n/a imported function 1228:0454 GETSYSTEMMETRICS external n/a imported function 1228:0458 GETSYSCOLOR external n/a imported function 1228:045c DIALOGBOXPARAM external n/a imported function 1228:0460 CREATEDIALOGPARAM external n/a imported function 1228:0464 ISZOOMED external n/a imported function 1228:0468 SELECTPALETTE external n/a imported function 1228:046c REALIZEPALETTE external n/a imported function 1228:0470 DEFDLGPROC external n/a imported function 1228:0474 GETCLASSINFO external n/a imported function 1228:0478 WVSPRINTF external n/a imported function 1228:047c DEFMDICHILDPROC external n/a imported function 1228:0480 TRANSLATEMDISYSACCEL external n/a imported function 1228:0484 CREATEWINDOWEX external n/a imported function 1228:0488 Ordinal_5 external n/a imported function 1228:048c Ordinal_6 external n/a imported function TSx}?N0 F_P'i1[ۤ  E\,܀pB~ۊᬽ˛{pWmٶ~^]{w\"[ϲ~/[[!ϳs>ڲ!߳s0[8\-;)Pq*$IM ZZkdȱ+VPpa"j]H1͊BGM圖f4]$)O>)By$YMdH4q"Qi_,rNԄ³^!iPotLMSD1Ǹ\V &yIfaL)h+lO4-f(DF!* '~H4YmD y UX$T.HsVpTo[4.l_ x}XMsFWtUu o'ERUdENnbc f= H3?_3Dg{h==~wop Vxi4Rl G+<G~v:f9hb1M\b+p.WsDfb,4[/\d0nָX/7b;+qv (fe1˧lt l=l`/?|wz] Nu4z c xD0WŸG*[oY*% #, K΍EA3pTRv8PQdgO.B:t\@RI (cPJ&?PSGil2O-`[eM@GYp<hUO^ T`)o*$}5ߟ%LHE6vVZIY ouC]ӿ,yځ*tU:HEOdEis ?#Y@i\'vDY(O,,0Moj] >K5JOLBeѢRg/BaWw7w= 5\7&Lq4Ϧjun+yN.)w՗7s~luu|h 8xRl'BKyˮ#p>#}}Hk`/(°RC OS<,Bcd]yA(B6 dq.=d+79Yl"WǤdcit셸Xj,9ҬtR8\3jIUS'JkRw^iU_a RԞ=TlsA>` OZl@}$ѡhjR$+h3:oQ;AAAM]YBCT4!kcJzI >LxGTַU/ICOf%5c"OojpRfܛZzD]saoclSiåsqjɨdgvU_ˤp,KF|]{͸Ω`vo,oЭ*[/ T)ɽVQpO#K³\6E5yX#hcc[ t^R9ϱ C4aF78= *Ȧ3 ՟'R;l,3Zn>X v ̒|qa%P3q U$FÈ\brI}$i`HVs3V6ѳƎ(\ rW#7R GǸ >l( B+QnI3r]'hL8$$"J؏@>6'O\%OusD(ٿBOœܘ/3:oǢ=qh] ^}t6cV *&(< C,(c[h)tM+Y5b#.G/ 8>̊-f*y9!ni-򙘋boff%lW3,Ӽܬjb68p[|g{YMpseH&x] iML鞍o-3>h/R[~PШyMNP,B6zLש[M Nh;(7W^D;lmBŲghckAyОS3sd]%-mbl_ {"&Tg'K.*Pit#~22NxmxB¾&0!RU}mbyKXC.}T=S1eg. lWoX_{ up9X entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:056e verified semantic-object-field tpwincrt_window_class WNDCLASS16 1028:0562 1028:057b 0 1 FUN_1008_2554 Static style/zero fields plus runtime hInstance/icon/cursor stores in 1008:2554. Wine 11.15 WNDCLASS16 layout; DGROUP relocation 0564 -> entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:0570 verified semantic-object-field tpwincrt_window_class WNDCLASS16 1028:0562 1028:057b 0 1 FUN_1008_2554 Static style/zero fields plus runtime hInstance/icon/cursor stores in 1008:2554. Wine 11.15 WNDCLASS16 layout; DGROUP relocation 0564 -> entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:0572 verified semantic-object-field tpwincrt_window_class WNDCLASS16 1028:0562 1028:057b 0 1 FUN_1008_2554 Static style/zero fields plus runtime hInstance/icon/cursor stores in 1008:2554. Wine 11.15 WNDCLASS16 layout; DGROUP relocation 0564 -> entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:0578 verified semantic-object-field tpwincrt_window_class WNDCLASS16 1028:0562 1028:057b 1 0 FUN_1008_2442 Static style/zero fields plus runtime hInstance/icon/cursor stores in 1008:2554. Wine 11.15 WNDCLASS16 layout; DGROUP relocation 0564 -> entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:057a verified semantic-object-field tpwincrt_window_class WNDCLASS16 1028:0562 1028:057b 1 0 FUN_1008_2442 Static style/zero fields plus runtime hInstance/icon/cursor stores in 1008:2554. Wine 11.15 WNDCLASS16 layout; DGROUP relocation 0564 -> entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:0586 verified semantic-object-field g_tpwincrt_window HWND16 1028:0586 1028:0587 21 1 FUN_1008_1779,FUN_1008_17e2,FUN_1008_1818,FUN_1008_1865,FUN_1008_18ee,FUN_1008_1a82,FUN_1008_1d77,FUN_1008_2442,FUN_1008_24a5 Static zero; assigned from every 1008:2219 callback entry. Store at 1008:2230-2233 and all TPWinCrt USER call sites.; complete verified referring-function closure Process-wide TPWinCrt HWND used by painting, caret, scrolling, focus, and teardown paths. 1028:0588 verified semantic-object-field g_tpwincrt_ring_row_origin uint16_t 1028:0588 1028:0589 3 2 FUN_1008_19f8,FUN_1008_1a82 Static zero; advanced/wrapped at bottom-row line advance. Verified circular addressing and scrolling tests.; complete verified referring-function closure Exact circular physical-row origin. 1028:058a verified semantic-object-field g_tpwincrt_input_count uint16_t 1028:058a 1028:058b 6 2 FUN_1008_1c03,FUN_1008_1c5f,FUN_1008_211a Static zero; incremented by WM_CHAR and decremented by blocking dequeue. Verified enqueue, poll, wait, dequeue, shift, and overflow paths.; complete verified referring-function closure Exact signed-compared count for the 64-byte queue. 1028:058c verified semantic-object-field g_tpwincrt_window_created uint8_t 1028:058c 1028:058c 3 2 FUN_1008_18ee,FUN_1008_1d77,FUN_1008_21e2,FUN_1008_2442,FUN_1008_24a5 Static zero; set on create and cleared after destroy. Verified create/destroy and all lazy-window/scroll/shutdown gates.; complete verified referring-function closure Exact process-wide live-window Boolean. 1028:058d verified semantic-object-field g_tpwincrt_has_focus uint8_t 1028:058d 1028:058d 5 2 FUN_1008_18d0,FUN_1008_1c5f,FUN_1008_1f68,FUN_1008_21ba,FUN_1008_21ce Static zero; set/cleared only by verified 1008:21ba/21ce. Reads in verified caret and size paths; exact focus handlers at 1008:21ba and 21ce.; complete verified referring-function closure Boolean focus state with proven caret ordering. 1028:058e verified semantic-object-field g_tpwincrt_caret_enabled uint8_t 1028:058e 1028:058e 5 2 FUN_1008_18d0,FUN_1008_1c5f,FUN_1008_1f68,FUN_1008_21ba,FUN_1008_21ce Static zero; set only across a blocking input wait. Verified read/wait/focus/resize caret lifecycle.; complete verified referring-function closure Exact Boolean controlling focus-owned caret lifetime. 1028:058f verified semantic-object-field g_tpwincrt_paint_message_active uint8_t 1028:058f 1028:058f 2 2 FUN_1008_1779,FUN_1008_17e2,FUN_1008_1dcc Static zero; set only around WM_PAINT drawing. Branch in verified 1008:1779/17e2; stores in 1008:1dcc.; complete verified referring-function closure Selects matched BeginPaint16/EndPaint16 instead of GetDC16/ReleaseDC16. 1028:0590 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0591 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0592 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0593 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0594 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0595 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0596 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:0597 verified semantic-object-field g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] 1028:0590 1028:05bf 1 0 FUN_1008_2147 Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:064e verified semantic-object-field g_object_windows_application Win16FarPtr 1028:064e 1028:0651 15 1 FUN_1000_6bf8,FUN_1000_ab3c,FUN_1008_2ae3,FUN_1008_2c1f,FUN_1018_0f38,FUN_1018_0f8d,FUN_1018_0ffd,FUN_1018_1054,FUN_1018_10aa,FUN_1018_1a61 Static null; published by verified 1018:1a61 after root construction. Write at 1018:1a93-1a99; reads in application/window routing across Code1, Code2, and Code4; constructor lifecycle tested.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0650 verified semantic-object-field g_object_windows_application Win16FarPtr 1028:064e 1028:0651 0 1 FUN_1018_1a61 Static null; published by verified 1018:1a61 after root construction. Write at 1018:1a93-1a99; reads in application/window routing across Code1, Code2, and Code4; constructor lifecycle tested.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0652 verified semantic-object-field g_win16_create_dialog_param Win16FarPtr 1028:0652 1028:0655 1 0 FUN_1008_2a45 NE loader relocation to USER ordinal 241. Verified sole modeless call, bound-thunk callback ledger, and dialog tests.; complete verified referring-function closure Exact far import pointer for CreateDialogParam16. 1028:0654 verified semantic-object-field g_win16_create_dialog_param Win16FarPtr 1028:0652 1028:0655 1 0 FUN_1008_2a45 NE loader relocation to USER ordinal 241. Verified sole modeless call, bound-thunk callback ledger, and dialog tests.; complete verified referring-function closure Exact far import pointer for CreateDialogParam16. 1028:0656 verified semantic-object-field g_win16_dialog_box_param Win16FarPtr 1028:0656 1028:0659 1 0 FUN_1008_2ae3 NE loader relocation to USER ordinal 239. Verified sole modal call, bound-thunk callback ledger, and dialog tests.; complete verified referring-function closure Exact far import pointer for DialogBoxParam16. 1028:0658 verified semantic-object-field g_win16_dialog_box_param Win16FarPtr 1028:0656 1028:0659 1 0 FUN_1008_2ae3 NE loader relocation to USER ordinal 239. Verified sole modal call, bound-thunk callback ledger, and dialog tests.; complete verified referring-function closure Exact far import pointer for DialogBoxParam16. 1028:0666 verified semantic-object-field g_win16_message_box Win16FarPtr 1028:0666 1028:0669 5 0 FUN_1000_0121,FUN_1000_0270,FUN_1018_1f14,ne_program_entry NE loader relocation binds USER ordinal 1 at startup. Relocation record 139; all indirect readers inventoried; verified application-error call 1018:1f14 and focused test.; complete verified referring-function closure Process-wide far import pointer for MessageBox16; argument semantics at the reconstructed ObjectWindows call site are exact. 1028:0668 verified semantic-object-field g_win16_message_box Win16FarPtr 1028:0666 1028:0669 5 0 FUN_1000_0121,FUN_1000_0270,FUN_1018_1f14,ne_program_entry NE loader relocation binds USER ordinal 1 at startup. Relocation record 139; all indirect readers inventoried; verified application-error call 1018:1f14 and focused test.; complete verified referring-function closure Process-wide far import pointer for MessageBox16; argument semantics at the reconstructed ObjectWindows call site are exact. 1028:066a verified semantic-object-field g_dialog_alternate_template uint8_t 1028:066a 1028:066a 1 0 FUN_1008_1607 Static zero with no in-image writer. Verified sole reader and both synthetic branch cases.; complete verified referring-function closure Selects integer dialog template 7f02 normally or 7f05 when externally nonzero. 1028:066c verified semantic-object-field g_object_windows_thunk_code_selector uint16_t 1028:066c 1028:066d 1 1 FUN_1018_01dc Static zero; updated to each newly allocated thunk pool's executable selector. Disassembly 1018:01dc-02f9; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure Stored in the next pool's header before replacement and used as the current pool selector lifecycle marker. 1028:066e verified semantic-object-field g_object_windows_free_thunk Win16FarPtr 1028:066e 1028:0671 5 3 FUN_1018_01dc,FUN_1018_02fa Static null; populated with 35 generated thunks per 256-byte pool. Disassembly 1018:01dc-0340; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure Exact LIFO head across pool construction, allocation, release, and reallocation; each free thunk stores the previous far head at +3. 1028:0670 verified semantic-object-field g_object_windows_free_thunk Win16FarPtr 1028:066e 1028:0671 5 3 FUN_1018_01dc,FUN_1018_02fa Static null; populated with 35 generated thunks per 256-byte pool. Disassembly 1018:01dc-0340; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure Exact LIFO head across pool construction, allocation, release, and reallocation; each free thunk stores the previous far head at +3. 1028:0672 verified semantic-object-field g_object_windows_dispatch_proc Win16FarPtr 1028:0672 1028:0675 2 1 FUN_1018_01dc,FUN_1018_1a61,FUN_1018_1b08 Static null; assigned the MakeProcInstance16 result by 1018:1a61 and consumed by new thunk pools. Verified constructor write, thunk-pool copy/use, destructor FreeProcInstance, and focused application/thunk tests.; complete verified referring-function closure Shared procedure reached by every generated bound thunk; exact MakeProcInstance/FreeProcInstance ownership lifecycle is represented. 1028:0674 verified semantic-object-field g_object_windows_dispatch_proc Win16FarPtr 1028:0672 1028:0675 2 1 FUN_1018_01dc,FUN_1018_1a61,FUN_1018_1b08 Static null; assigned the MakeProcInstance16 result by 1018:1a61 and consumed by new thunk pools. Verified constructor write, thunk-pool copy/use, destructor FreeProcInstance, and focused application/thunk tests.; complete verified referring-function closure Shared procedure reached by every generated bound thunk; exact MakeProcInstance/FreeProcInstance ownership lifecycle is represented. 1028:0676 verified semantic-object-field g_object_windows_creating_object Win16FarPtr 1028:0676 1028:0679 0 1 FUN_1018_134f Published immediately before native creation and consumed by bootstrap WNDPROC 1018:018b. Verified writer 1018:134f, bootstrap reader/transition, exact extent, and creation tests.; complete verified referring-function closure Exact temporary object handoff until HWND-to-object thunk binding completes. 1028:0678 verified semantic-object-field g_object_windows_creating_object Win16FarPtr 1028:0676 1028:0679 0 1 FUN_1018_134f Published immediately before native creation and consumed by bootstrap WNDPROC 1018:018b. Verified writer 1018:134f, bootstrap reader/transition, exact extent, and creation tests.; complete verified referring-function closure Exact temporary object handoff until HWND-to-object thunk binding completes. 1028:0682 verified semantic-object-field g_object_windows_message_hook Win16FarPtr 1028:0682 1028:0685 1 0 FUN_1018_0103 Static null far pointer; the target image contains no writer. Complete Ghidra reference inventory: reads only at 1018:0127, 015f, and 08de; binary zero bytes; reconstructed/tests/test_message_dispatch.c; complete verified referring-function closure Optional generic ObjectWindows instrumentation hook. Normal TDKPIN execution always skips it because the selector word at 0684 remains zero; nonnull semantics are nevertheless reconstructed and branch-tested. 1028:0684 verified semantic-object-field g_object_windows_message_hook Win16FarPtr 1028:0682 1028:0685 2 0 FUN_1018_0103,FUN_1018_08c3 Static null far pointer; the target image contains no writer. Complete Ghidra reference inventory: reads only at 1018:0127, 015f, and 08de; binary zero bytes; reconstructed/tests/test_message_dispatch.c; complete verified referring-function closure Optional generic ObjectWindows instrumentation hook. Normal TDKPIN execution always skips it because the selector word at 0684 remains zero; nonnull semantics are nevertheless reconstructed and branch-tested. 1028:06f2 verified semantic-object-field g_object_windows_focus_event_marker uint8_t 1028:06f2 1028:06f2 0 1 FUN_1008_2c83 Static value 1 and redundantly set to 1 by 1008:2c83. Complete reference inventory proves one writer and no readers; focused handler tests.; complete verified referring-function closure Exact write-only marker with no inferred role beyond its observed store. 1028:06f4 verified semantic-object-field g_borland_heap_reserve_bytes uint16_t 1028:06f4 1028:06f5 2 0 FUN_1008_2dff,FUN_1008_2e22 Static value 0x2000. Binary bytes and reads in 1008:2dff/2e22.; complete verified referring-function closure Configured 8-KiB emergency heap reserve size. 1028:06f6 verified semantic-object-field g_borland_heap_reserve Win16FarPtr 1028:06f6 1028:06f9 2 2 FUN_1008_2de0,FUN_1008_2dff,FUN_1008_2e22 Static null; allocated by 2dff and cleared by 2e22. Verified null/allocation/free/clear lifecycle tests for 1008:2de0, 2dff, and 2e22.; complete verified referring-function closure Emergency allocation released on OOM so the allocator can retry; underlying allocator is tracked separately. 1028:06f8 verified semantic-object-field g_borland_heap_reserve Win16FarPtr 1028:06f6 1028:06f9 2 2 FUN_1008_2de0,FUN_1008_2dff,FUN_1008_2e22 Static null; allocated by 2dff and cleared by 2e22. Verified null/allocation/free/clear lifecycle tests for 1008:2de0, 2dff, and 2e22.; complete verified referring-function closure Emergency allocation released on OOM so the allocator can retry; underlying allocator is tracked separately. 1028:06fa verified semantic-object-field g_borland_heap_reserve_disabled uint8_t 1028:06fa 1028:06fa 1 0 FUN_1008_2e22 Static zero. Branch in 1008:2e22 and writers in runtime setup/teardown.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:06fc verified semantic-object-field g_win16_previous_instance HINSTANCE16 1028:06fc 1028:06fd 3 1 FUN_1000_0121,FUN_1008_2554,FUN_1018_1a61,FUN_1020_0002 Initialized from the hPrevInstance startup word by 1020:0002. Startup write in 1020:0002; first-instance branch in verified 1018:1a61; reconstructed/tests/test_application.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:06fe verified semantic-object-field g_win16_instance HINSTANCE16 1028:06fe 1028:06ff 34 1 FUN_1000_016c,FUN_1000_0270,FUN_1000_5390,FUN_1000_5be5,FUN_1000_6129,FUN_1008_0f2e,FUN_1008_2442,FUN_1008_2554,FUN_1008_2a45,FUN_1008_2ae3,FUN_1010_01c2,FUN_1018_0e46,FUN_1018_1274,FUN_1018_134f,FUN_1018_1a61,FUN_1020_0002,FUN_1020_082e Initialized from the current Win16 task instance by 1020:0002. 34 readers across resource/window/module paths; verified MakeProcInstance argument in 1018:1a61.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0700 verified semantic-object-field g_win16_show_command uint16_t 1028:0700 1028:0701 2 1 FUN_1008_2442,FUN_1018_1b57,FUN_1020_0002 Initialized from DX by Win16 startup 1020:0002. Startup write at 1020:0015; read by verified application initialization 1018:1b57; reconstructed/tests/test_application.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0702 verified semantic-object-field g_borland_command_line Win16FarPtr 1028:0702 1028:0705 1 1 FUN_1020_0002,FUN_1020_0871 Initialized exactly from startup ES:BX by verified 1020:0002. Verified startup capture and command-token scanner 1020:0871; reconstructed/tests/test_borland_startup.c; complete verified referring-function closure Exact far pointer to the NUL-terminated DOS command tail, including independent selector and wrapping offset semantics. 1028:0704 verified semantic-object-field g_borland_command_line Win16FarPtr 1028:0702 1028:0705 0 1 FUN_1020_0002 Initialized exactly from startup ES:BX by verified 1020:0002. Verified startup capture and command-token scanner 1020:0871; reconstructed/tests/test_borland_startup.c; complete verified referring-function closure Exact far pointer to the NUL-terminated DOS command tail, including independent selector and wrapping offset semantics. 1028:0706 verified semantic-object-field g_borland_heap_segment_head uint16_t 1028:0706 1028:0707 8 2 FUN_1020_0167,FUN_1020_023c,FUN_1020_026a,FUN_1020_02d7,runtime_1020_0195 Static zero; points to current selector in the circular local-heap segment ring. Reads/writes in 1020:0167, 0195, 023c, 026a, 02d7; reconstructed/tests/test_heap_core.c; reconstructed/tests/test_heap_paths.c; complete verified referring-function closure Circular insertion, successful-segment rotation, predecessor unlink, and final zeroing are represented and verified across one- and two-segment lifecycles. 1028:0708 verified semantic-object-field g_borland_local_heap_limit uint16_t 1028:0708 1028:0709 2 0 FUN_1020_01ca Static value 0x0400. Threshold branches in 1020:01ca; reconstructed/tests/test_heap_paths.c; complete verified referring-function closure Below-threshold local-first and above-threshold global-first paths, including fallback, are represented and branch-tested. 1028:070a verified semantic-object-field g_borland_heap_segment_bytes uint16_t 1028:070a 1028:070b 4 0 FUN_1020_01ca,FUN_1020_026a,FUN_1020_02d7 Static value 0x2000. Header/free-size construction and full-segment release tests.; complete verified referring-function closure Exact 8-KiB local heap segment allocation size. 1028:070c verified semantic-object-field g_borland_global_alloc_flags uint16_t 1028:070c 1028:070d 1 0 FUN_1020_0222 Static value 2. Push at 1020:0222 and verified GlobalAlloc16 argument test.; complete verified referring-function closure Exact flags passed for Borland global heap blocks. 1028:070e verified semantic-object-field g_borland_heap_error_handler Win16FarPtr 1028:070e 1028:0711 2 1 FUN_1008_2e76,FUN_1020_01ca Set by 1008:2e76 relocation to 1008:2e22. Verified NE-segment binding to selector:2e22; indirect call at 1020:020c-0210.; complete verified referring-function closure Allocator callback returns 0 stop, 1 no retry, or 2 retry after emergency-reserve release. 1028:0710 verified semantic-object-field g_borland_heap_error_handler Win16FarPtr 1028:070e 1028:0711 2 1 FUN_1008_2e76,FUN_1020_01ca Set by 1008:2e76 relocation to 1008:2e22. Verified NE-segment binding to selector:2e22; indirect call at 1020:020c-0210.; complete verified referring-function closure Allocator callback returns 0 stop, 1 no retry, or 2 retry after emergency-reserve release. 1028:0712 verified semantic-object-field g_borland_exit_proc Win16FarPtr 1028:0712 1028:0715 2 3 FUN_1008_24a5,FUN_1008_2554,FUN_1020_00d2 Static zero; mutable ExitProc head. Reads/clears in 1020:00d2; writers throughout shutdown setup.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0714 verified semantic-object-field g_borland_exit_proc Win16FarPtr 1028:0712 1028:0715 1 3 FUN_1008_24a5,FUN_1008_2554,FUN_1020_00d2 Static zero; mutable ExitProc head. Reads/clears in 1020:00d2; writers throughout shutdown setup.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0716 verified semantic-object-field g_borland_exit_code_word uint16_t 1028:0716 1028:0717 2 1 FUN_1020_0061 Static zero; AX store on runtime-exit entry. Stores/reads in 1020:0061 and related runtime entries.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0718 verified semantic-object-field g_borland_error_location struct BorlandErrorLocation 1028:0718 1028:071b 3 1 FUN_1008_24a5,FUN_1020_0061 Static zero; cleared by Halt and populated by run-error paths. Reads/writes in 1020:0002, 005d, 0061, and runtime error helpers.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:071a verified semantic-object-field g_borland_error_location struct BorlandErrorLocation 1028:0718 1028:071b 3 1 FUN_1008_24a5,FUN_1020_0061 Static zero; cleared by Halt and populated by run-error paths. Reads/writes in 1020:0002, 005d, 0061, and runtime error helpers.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:071c verified semantic-object-field g_borland_windows_mode uint16_t 1028:071c 1028:071d 1 1 FUN_1020_0002,FUN_1020_0061 Initialized from startup ES by verified 1020:0002. Verified startup capture, termination consumer 1020:0061, and focused tests.; complete verified referring-function closure Exact Win16 selector-valued mode word; nonzero selects ExitProc execution and GUI error reporting. 1028:071e verified semantic-object-field g_borland_io_result _Atomic uint16_t 1028:071e 1028:071f 3 10 FUN_1020_00d2,FUN_1020_0388,FUN_1020_038f,FUN_1020_0534,FUN_1020_0586,FUN_1020_05c7,FUN_1020_06ab,FUN_1020_072c,FUN_1020_0751,FUN_1020_07fe,runtime_1020_0710 Static zero; 1020:0388 uses one locked-equivalent XCHG read-and-clear. Atomic exchange in verified 1020:0388; reads/writes in runtime I/O and ExitProc paths.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0720 verified semantic-object-field g_borland_random_seed uint32_t 1028:0720 1028:0723 2 3 FUN_1000_0270,FUN_1020_1501,runtime_1020_14de,runtime_1020_1539 Static zero; seeded from DOS time and advanced by the verified LCG. Reads/writes in 1020:14a4, 14c1, 14de, 1501, and 1539; multiplier 0x08088405 proved from assembly.; complete verified referring-function closure Exact modulo-2^32 Borland RandSeed state, stored low word then high word. 1028:0722 verified semantic-object-field g_borland_random_seed uint32_t 1028:0720 1028:0723 1 3 FUN_1000_0270,FUN_1020_1501,runtime_1020_1539 Static zero; seeded from DOS time and advanced by the verified LCG. Reads/writes in 1020:14a4, 14c1, 14de, 1501, and 1539; multiplier 0x08088405 proved from assembly.; complete verified referring-function closure Exact modulo-2^32 Borland RandSeed state, stored low word then high word. 1028:0724 verified semantic-object-field g_borland_huge_pointer_increment uint16_t 1028:0724 1028:0725 0 1 FUN_1020_0002 Assigned the relocated KERNEL ordinal 114 equate __AHINCR by verified startup. Relocation 5:4 at 1020:0051; Wine 11.15 __AHINCR=8; reconstructed/tests/test_borland_startup.c; complete verified referring-function closure Exact selector increment used by Borland huge-pointer normalization; this import is runtime data, not a callable function. 1028:0726 verified semantic-object-field g_borland_cpu_level uint8_t 1028:0726 1028:0726 4 1 FUN_1020_0002,FUN_1020_08a9,FUN_1020_08e6,runtime_1020_098c,runtime_1020_09af Set by verified startup from returned GetWinFlags AL. Verified startup branches and consumers 1020:08a9, 08e6, 098c, and 09af; arithmetic and startup tests.; complete verified referring-function closure Exact levels 0 for 086/186, 1 for 286, and 2 for 386-plus instruction selection. 1028:0727 verified semantic-object-field g_borland_file_mode uint8_t 1028:0727 1028:0727 1 0 FUN_1020_06ab Static value 2. Binary byte; sole read by verified generic open entry 1020:06ab; focused DOS-open test.; complete verified referring-function closure Exact DOS AH=3d access mode passed for nonempty generic-file names. 1028:0748 verified semantic-object-field g_tdkpin_application_object uint8_t[36] 1028:0748 1028:076b 2 0 ne_program_entry Zero-fill static storage constructed in-place with VMT offset 0x0024. Verified application constructor, VMT Run/destructor calls, static dispose mode zero, and program-entry tests.; complete verified referring-function closure Exact process-lifetime ObjectWindows application instance. 1028:07bf verified semantic-object-field g_tdkpin_windows_version uint32_t 1028:07bf 1028:07c2 3 1 ne_program_entry Full DX:AX return from GetVersion16. Verified 2.x, 3.9, 3.10, and 4.x branches and full-dword publication.; complete verified referring-function closure Low-byte major, next-byte minor; upper word retained but not used by threshold. 1028:07c1 verified semantic-object-field g_tdkpin_windows_version uint32_t 1028:07bf 1028:07c2 3 1 ne_program_entry Full DX:AX return from GetVersion16. Verified 2.x, 3.9, 3.10, and 4.x branches and full-dword publication.; complete verified referring-function closure Low-byte major, next-byte minor; upper word retained but not used by threshold. 1028:07c4 verified semantic-object-field g_palette_update_active uint8_t 1028:07c4 1028:07c4 3 3 FUN_1000_58e7,FUN_1000_5956,exported_ordinal_10 Zero-filled; reset by variant A wParam zero and set before synchronous invalidate/update in both verified handlers. All palette-message readers/writers 1000:58e7,5956,59a0,5a37 are verified; palette message tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07c5 verified semantic-object-field g_collision_refresh_pending uint8_t 1028:07c5 1028:07c5 1 3 FUN_1000_0270,FUN_1000_638e,exported_ordinal_10 Zero-fill; setup clears it, adding a player sets it, and the next timer pass refreshes all 175 collision records before clearing it. Writes at 1000:03e0/6959/eb2c and timer read at 1000:eb0b; exact add-player branch in reconstructed/tdkpin_key_input.c and reconstructed/tests/test_key_release.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07c6 verified semantic-object-field game_tilted uint8_t 1028:07c6 1028:07c6 9 2 FUN_1000_638e,FUN_1000_6bf8,FUN_1000_9e85,FUN_1000_b476,FUN_1000_bc36,FUN_1000_c79c,FUN_1008_0002,exported_ordinal_10 Zero-filled; reset during game/ball setup and set after the nudge threshold is exceeded. Verified sound-dispatch gate 1008:0002; complete reference inventory identifies readers in key, collision, timer, and gameplay paths plus writers 1000:638e and 1000:9e85.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07c7 verified semantic-object-field g_target_rotation_armed uint8_t 1028:07c7 1028:07c7 3 4 FUN_1000_0270,FUN_1000_638e,FUN_1000_b476,FUN_1000_c79c,exported_ordinal_10 Zero-fill; event flag 0400 clears the rotation state and sets this byte only while both rotation bytes are zero. Verified gate/writer in 1000:b476 and complete reference inventory; reconstructed/tests/test_collision_events.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07c8 verified semantic-object-field g_target_set_complete uint8_t 1028:07c8 1028:07c8 3 4 FUN_1000_0270,FUN_1000_9e85,FUN_1000_b476,FUN_1000_c79c,exported_ordinal_10 Zero-fill; set when all five target record words are nonzero and suppresses rearming while set. Verified writer 1000:9e85, gate 1000:b476, and complete reference inventory; ball-render/collision-event tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07c9 verified semantic-object-field g_gameplay_transition_pending uint8_t 1028:07c9 1028:07c9 1 3 FUN_1000_0270,FUN_1000_638e,FUN_1000_a70e,exported_ordinal_10 Zero-fill; set by verified 1000:a70e and setup/input paths. Verified writer plus complete reference inventory.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07ca verified semantic-object-field g_claw_animation_active uint8_t 1028:07ca 1028:07ca 1 3 FUN_1000_0270,FUN_1000_c79c,exported_ordinal_10 Zero-fill; setup clears it, collision logic arms it, and the timer clears it after the claw returns to frame ten with the primary bank selected. Complete references; full timer state machine in reconstructed/tdkpin_timer_tick.c and test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cb verified semantic-object-field g_scene_ready uint8_t 1028:07cb 1028:07cb 0 2 FUN_1000_0270,FUN_1000_5390 Zero-filled; set to one after verified scene redraw, score/status update, and DC release in 1000:5390. Verified writer 1000:5390; asset-initializer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cc verified semantic-object-field g_assets_pending uint8_t 1028:07cc 1028:07cc 2 2 FUN_1000_0270,FUN_1000_5390,exported_ordinal_10 Set during game initialization; nonzero selects the verified one-time asset-loading phase and is cleared at loading stage 34. Verified reader/clear in 1000:5390; asset-initializer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cd verified semantic-object-field g_board_index uint16_t 1028:07cd 1028:07ce 3 2 FUN_1000_0270,FUN_1000_6129 Zero-filled; selects DAT resource 1000+value in verified 1000:6129. Verified setup reader; reconstructed/tests/test_board_overlay.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cf verified semantic-object-field g_debug_keys_enabled uint8_t 1028:07cf 1028:07cf 2 1 FUN_1000_0270,FUN_1000_638e Zero-fill and explicitly cleared on setup entry; no in-image writer enables it. Complete reference inventory: verified setup 1000:0270 and both debug branches in verified 1000:638e; reconstructed/tests/test_game_setup.c and test_key_release.c; complete verified referring-function closure Nonzero, possible only through external mutation, enables F2 target-rotation reset and F7 ball-position restore; normal execution leaves both paths dormant. 1028:07d0 verified semantic-object-field g_player_count uint8_t 1028:07d0 1028:07d0 9 3 FUN_1000_0270,FUN_1000_638e,FUN_1000_6bf8,FUN_1000_a70e,FUN_1000_a72c,FUN_1000_acc2,FUN_1000_ae6e,exported_ordinal_10 Zero-fill; configured during setup and cleared by verified 1000:a70e. Verified clear and complete loop/reference evidence.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d1 verified semantic-object-field g_current_player uint8_t 1028:07d1 1028:07d1 112 8 FUN_1000_0270,FUN_1000_5390,FUN_1000_638e,FUN_1000_6f27,FUN_1000_7e92,FUN_1000_a604,FUN_1000_a72c,FUN_1000_abe5,FUN_1000_acc2,FUN_1000_ae6e,FUN_1000_b476,FUN_1000_bc36,FUN_1000_c4e1,FUN_1000_c79c,FUN_1008_0b9e,exported_ordinal_10 Zero-filled; values 1..4 identify the active player and zero disables the status display. Verified gating/index use in 1008:0b9e; status tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d2 verified semantic-object-field g_highscore_insert_index uint8_t 1028:07d2 1028:07d2 4 2 FUN_1000_a72c,FUN_1000_ab3c,FUN_1000_abe5,FUN_1000_ae6e Zero-fill; set to the one-based inserted slot by 1000:abe5 and consumed by 1000:ab3c. Verified insert/show lifecycle and complete reference inventory; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d3 verified semantic-object-field g_ball_position_milli int32_t[2] 1028:07d3 1028:07da 35 18 FUN_1000_0270,FUN_1000_638e,FUN_1000_7ed9,FUN_1000_9bca,FUN_1000_9e85,FUN_1000_9f73,FUN_1000_ae6e,FUN_1000_bdde,FUN_1000_beff,FUN_1000_c36b,FUN_1000_c426,FUN_1000_c79c,exported_ordinal_10 Zero-fill; reset to 325000/413000 by verified 1000:9e85 and updated throughout physics/gameplay. Verified reset, pixel projection 1000:9bca, bounds/dynamic-record and ball-slot helpers; complete reference inventory; reconstructed/tests/test_ball_render.c and test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d5 verified semantic-object-field g_ball_position_milli int32_t[2] 1028:07d3 1028:07da 35 18 FUN_1000_0270,FUN_1000_638e,FUN_1000_7ed9,FUN_1000_9bca,FUN_1000_9e85,FUN_1000_9f73,FUN_1000_ae6e,FUN_1000_bdde,FUN_1000_beff,FUN_1000_c36b,FUN_1000_c426,FUN_1000_c79c,exported_ordinal_10 Zero-fill; reset to 325000/413000 by verified 1000:9e85 and updated throughout physics/gameplay. Verified reset, pixel projection 1000:9bca, bounds/dynamic-record and ball-slot helpers; complete reference inventory; reconstructed/tests/test_ball_render.c and test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d7 verified semantic-object-field g_ball_position_milli int32_t[2] 1028:07d3 1028:07da 36 18 FUN_1000_0270,FUN_1000_638e,FUN_1000_7ed9,FUN_1000_9bca,FUN_1000_9e85,FUN_1000_9f73,FUN_1000_ae6e,FUN_1000_bdde,FUN_1000_beff,FUN_1000_c36b,FUN_1000_c426,FUN_1000_c79c,exported_ordinal_10 Zero-fill; reset to 325000/413000 by verified 1000:9e85 and updated throughout physics/gameplay. Verified reset, pixel projection 1000:9bca, bounds/dynamic-record and ball-slot helpers; complete reference inventory; reconstructed/tests/test_ball_render.c and test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d9 verified semantic-object-field g_ball_position_milli int32_t[2] 1028:07d3 1028:07da 36 18 FUN_1000_0270,FUN_1000_638e,FUN_1000_7ed9,FUN_1000_9bca,FUN_1000_9e85,FUN_1000_9f73,FUN_1000_ae6e,FUN_1000_bdde,FUN_1000_beff,FUN_1000_c36b,FUN_1000_c426,FUN_1000_c79c,exported_ordinal_10 Zero-fill; reset to 325000/413000 by verified 1000:9e85 and updated throughout physics/gameplay. Verified reset, pixel projection 1000:9bca, bounds/dynamic-record and ball-slot helpers; complete reference inventory; reconstructed/tests/test_ball_render.c and test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07db verified semantic-object-field g_predicted_ball_position_milli int32_t[2] 1028:07db 1028:07e2 7 2 FUN_1000_9b69,FUN_1000_c79c Zero-fill; each physics substep publishes current position plus velocity as predicted X/Y before broadphase. Complete verified readers/writers 1000:c79c and 1000:9b69; reconstructed/tdkpin_physics.c and focused physics tests; complete verified referring-function closure Exact X then Y signed dword extent, write order, trigger rewrite, and bounds use are fully represented. 1028:07dd verified semantic-object-field g_predicted_ball_position_milli int32_t[2] 1028:07db 1028:07e2 7 2 FUN_1000_9b69,FUN_1000_c79c Zero-fill; each physics substep publishes current position plus velocity as predicted X/Y before broadphase. Complete verified readers/writers 1000:c79c and 1000:9b69; reconstructed/tdkpin_physics.c and focused physics tests; complete verified referring-function closure Exact X then Y signed dword extent, write order, trigger rewrite, and bounds use are fully represented. 1028:07df verified semantic-object-field g_predicted_ball_position_milli int32_t[2] 1028:07db 1028:07e2 7 2 FUN_1000_9b69,FUN_1000_c79c Zero-fill; each physics substep publishes current position plus velocity as predicted X/Y before broadphase. Complete verified readers/writers 1000:c79c and 1000:9b69; reconstructed/tdkpin_physics.c and focused physics tests; complete verified referring-function closure Exact X then Y signed dword extent, write order, trigger rewrite, and bounds use are fully represented. 1028:07e1 verified semantic-object-field g_predicted_ball_position_milli int32_t[2] 1028:07db 1028:07e2 7 2 FUN_1000_9b69,FUN_1000_c79c Zero-fill; each physics substep publishes current position plus velocity as predicted X/Y before broadphase. Complete verified readers/writers 1000:c79c and 1000:9b69; reconstructed/tdkpin_physics.c and focused physics tests; complete verified referring-function closure Exact X then Y signed dword extent, write order, trigger rewrite, and bounds use are fully represented. 1028:07e3 verified semantic-object-field g_ball_slot_x_positions_milli int32_t[2] 1028:07e3 1028:07ea 1 1 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball X for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; gameplay-helper and timer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07e5 verified semantic-object-field g_ball_slot_x_positions_milli int32_t[2] 1028:07e3 1028:07ea 1 1 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball X for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; gameplay-helper and timer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07e7 verified semantic-object-field g_ball_slot_x_positions_milli int32_t[2] 1028:07e3 1028:07ea 3 0 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball X for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; gameplay-helper and timer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07e9 verified semantic-object-field g_ball_slot_x_positions_milli int32_t[2] 1028:07e3 1028:07ea 3 0 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball X for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; gameplay-helper and timer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07eb verified semantic-object-field g_ball_slot_y_positions_milli int32_t[2] 1028:07eb 1028:07f2 1 1 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball Y for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07ed verified semantic-object-field g_ball_slot_y_positions_milli int32_t[2] 1028:07eb 1028:07f2 1 1 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball Y for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07ef verified semantic-object-field g_ball_slot_y_positions_milli int32_t[2] 1028:07eb 1028:07f2 3 0 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball Y for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07f1 verified semantic-object-field g_ball_slot_y_positions_milli int32_t[2] 1028:07eb 1028:07f2 3 0 exported_ordinal_10 Zero-fill; indexed save/load transfers active ball Y for slots zero and one. Verified 1000:c36b/c426 stride plus full timer promotion/copy paths; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07f3 verified semantic-object-field g_ball_slot_velocity_x_milli int32_t[2] 1028:07f3 1028:07fa 3 4 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores horizontal velocity for slots zero and one. Verified 1000:c36b/c426 slot stride and verified 1000:638e nudge updates; timer slot-one-to-zero transfer at 1000:f24d; gameplay-helper and key-release tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07f5 verified semantic-object-field g_ball_slot_velocity_x_milli int32_t[2] 1028:07f3 1028:07fa 3 4 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores horizontal velocity for slots zero and one. Verified 1000:c36b/c426 slot stride and verified 1000:638e nudge updates; timer slot-one-to-zero transfer at 1000:f24d; gameplay-helper and key-release tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07f7 verified semantic-object-field g_ball_slot_velocity_x_milli int32_t[2] 1028:07f3 1028:07fa 4 3 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores horizontal velocity for slots zero and one. Verified 1000:c36b/c426 slot stride and verified 1000:638e nudge updates; timer slot-one-to-zero transfer at 1000:f24d; gameplay-helper and key-release tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07f9 verified semantic-object-field g_ball_slot_velocity_x_milli int32_t[2] 1028:07f3 1028:07fa 4 3 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores horizontal velocity for slots zero and one. Verified 1000:c36b/c426 slot stride and verified 1000:638e nudge updates; timer slot-one-to-zero transfer at 1000:f24d; gameplay-helper and key-release tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07fb verified semantic-object-field g_ball_slot_velocity_y_milli int32_t[2] 1028:07fb 1028:0802 1 3 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores vertical velocity for slots zero and one. Verified 1000:c36b/c426 slot stride, verified 1000:638e launch publication and space-nudge updates, timer slot-one-to-zero transfer at 1000:f25b; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07fd verified semantic-object-field g_ball_slot_velocity_y_milli int32_t[2] 1028:07fb 1028:0802 1 3 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores vertical velocity for slots zero and one. Verified 1000:c36b/c426 slot stride, verified 1000:638e launch publication and space-nudge updates, timer slot-one-to-zero transfer at 1000:f25b; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07ff verified semantic-object-field g_ball_slot_velocity_y_milli int32_t[2] 1028:07fb 1028:0802 2 1 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores vertical velocity for slots zero and one. Verified 1000:c36b/c426 slot stride, verified 1000:638e launch publication and space-nudge updates, timer slot-one-to-zero transfer at 1000:f25b; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0801 verified semantic-object-field g_ball_slot_velocity_y_milli int32_t[2] 1028:07fb 1028:0802 2 1 FUN_1000_638e,exported_ordinal_10 Zero-fill; indexed ball-slot save/load stores vertical velocity for slots zero and one. Verified 1000:c36b/c426 slot stride, verified 1000:638e launch publication and space-nudge updates, timer slot-one-to-zero transfer at 1000:f25b; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0803 verified semantic-object-field g_ball_slot_auxiliary_state int32_t[2] 1028:0803 1028:080a 0 1 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bca for slots zero and one. Verified 1000:c36b/c426 and full timer slot promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0805 verified semantic-object-field g_ball_slot_auxiliary_state int32_t[2] 1028:0803 1028:080a 0 1 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bca for slots zero and one. Verified 1000:c36b/c426 and full timer slot promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0807 verified semantic-object-field g_ball_slot_auxiliary_state int32_t[2] 1028:0803 1028:080a 1 0 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bca for slots zero and one. Verified 1000:c36b/c426 and full timer slot promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0809 verified semantic-object-field g_ball_slot_auxiliary_state int32_t[2] 1028:0803 1028:080a 1 0 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bca for slots zero and one. Verified 1000:c36b/c426 and full timer slot promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:080b verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 0 1 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:080d verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 0 1 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:080f verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 0 1 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0811 verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 1 0 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0813 verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 1 0 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0815 verified semantic-object-field g_ball_slot_real48_state BorlandReal48[2] 1028:080b 1028:0816 1 0 exported_ordinal_10 Zero-fill; indexed save/load mirrors receiver +0bce..0bd3 for slots zero and one. Verified six-byte stride in 1000:c36b/c426 and full timer promotion; focused tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0817 verified semantic-object-field g_player_ready_flags uint8_t[4] 1028:0817 1028:081a 0 1 FUN_1000_0270 Zero-fill; each configured one-based player slot is set to one by 1000:a72c. Verified initialization and exact extent in 1000:a72c; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0818 verified semantic-object-field g_player_ready_flags uint8_t[4] 1028:0817 1028:081a 0 1 FUN_1000_a72c Zero-fill; each configured one-based player slot is set to one by 1000:a72c. Verified initialization and exact extent in 1000:a72c; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:081b verified semantic-object-field g_player_item_group_flags uint8_t[4] 1028:081b 1028:081e 0 1 FUN_1000_0270 Zero-fill; each configured one-based player slot is set to one after marker initialization. Verified initialization and exact extent in 1000:a72c; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:081c verified semantic-object-field g_player_item_group_flags uint8_t[4] 1028:081b 1028:081e 0 1 FUN_1000_a72c Zero-fill; each configured one-based player slot is set to one after marker initialization. Verified initialization and exact extent in 1000:a72c; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0821 verified semantic-object-field g_player_marker_counts int16_t[5] 1028:081f 1028:0828 0 2 FUN_1000_0270,FUN_1000_638e Zero-fill; indexed one-based by active player and initialized/updated by game-state paths. Verified six-marker projection in 1000:a604; complete indexed reference inventory; reconstructed/tests/test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0823 verified semantic-object-field g_player_marker_counts int16_t[5] 1028:081f 1028:0828 0 3 FUN_1000_638e,FUN_1000_a72c Zero-fill; indexed one-based by active player and initialized/updated by game-state paths. Verified six-marker projection in 1000:a604; complete indexed reference inventory; reconstructed/tests/test_gameplay_helpers.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0829 verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:082b verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:082d verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:082f verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0831 verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0833 verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0835 verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0837 verified semantic-object-field g_player_marker_score_thresholds int32_t[4] 1028:0829 1028:0838 0 1 FUN_1000_0270 Zero-fill then initialized by startup/game setup; read one-based by score-award level. Verified indexed comparison in 1000:bc36 and exact boundary against marker counts/levels; reconstructed/tests/test_scoring.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0839 verified semantic-object-field g_player_marker_levels int32_t[4] 1028:0839 1028:0848 0 1 FUN_1000_0270 Zero-fill; initialized to one for configured players and incremented when score thresholds are crossed. Verified initialization 1000:a72c and increment/limit logic 1000:bc36; player-state/scoring tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:083b verified semantic-object-field g_player_marker_levels int32_t[4] 1028:0839 1028:0848 0 1 FUN_1000_0270 Zero-fill; initialized to one for configured players and incremented when score thresholds are crossed. Verified initialization 1000:a72c and increment/limit logic 1000:bc36; player-state/scoring tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:083d verified semantic-object-field g_player_marker_levels int32_t[4] 1028:0839 1028:0848 0 1 FUN_1000_a72c Zero-fill; initialized to one for configured players and incremented when score thresholds are crossed. Verified initialization 1000:a72c and increment/limit logic 1000:bc36; player-state/scoring tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:083f verified semantic-object-field g_player_marker_levels int32_t[4] 1028:0839 1028:0848 0 1 FUN_1000_a72c Zero-fill; initialized to one for configured players and incremented when score thresholds are crossed. Verified initialization 1000:a72c and increment/limit logic 1000:bc36; player-state/scoring tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0849 verified semantic-object-field g_collision_path_continuation int32_t[2] 1028:0849 1028:0850 1 2 FUN_1008_0138 Zero-fill; updated after every accepted circle/segment and consumed by relative-mode records. Complete sole-function read/write inventory, exact 32-bit wrap, and branch tests.; complete verified referring-function closure X then Y continuation; circles retain point1 center, segments retain point2 endpoint. 1028:084b verified semantic-object-field g_collision_path_continuation int32_t[2] 1028:0849 1028:0850 1 2 FUN_1008_0138 Zero-fill; updated after every accepted circle/segment and consumed by relative-mode records. Complete sole-function read/write inventory, exact 32-bit wrap, and branch tests.; complete verified referring-function closure X then Y continuation; circles retain point1 center, segments retain point2 endpoint. 1028:084d verified semantic-object-field g_collision_path_continuation int32_t[2] 1028:0849 1028:0850 1 2 FUN_1008_0138 Zero-fill; updated after every accepted circle/segment and consumed by relative-mode records. Complete sole-function read/write inventory, exact 32-bit wrap, and branch tests.; complete verified referring-function closure X then Y continuation; circles retain point1 center, segments retain point2 endpoint. 1028:084f verified semantic-object-field g_collision_path_continuation int32_t[2] 1028:0849 1028:0850 1 2 FUN_1008_0138 Zero-fill; updated after every accepted circle/segment and consumed by relative-mode records. Complete sole-function read/write inventory, exact 32-bit wrap, and branch tests.; complete verified referring-function closure X then Y continuation; circles retain point1 center, segments retain point2 endpoint. 1028:0851 verified semantic-object-field g_panel_animation_frame int32_t 1028:0851 1028:0854 47 4 FUN_1000_7440,FUN_1000_9e85,FUN_1000_c79c,exported_ordinal_10 Zero-fill; drives the nine-phase 1..281 panel animation and entry-frame sound events. Verified complete render consumer 1000:7440 and reset writer 1000:9e85; full reference inventory; reconstructed/tests/test_panel_animation.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0853 verified semantic-object-field g_panel_animation_frame int32_t 1028:0851 1028:0854 46 4 FUN_1000_7440,FUN_1000_9e85,FUN_1000_c79c,exported_ordinal_10 Zero-fill; drives the nine-phase 1..281 panel animation and entry-frame sound events. Verified complete render consumer 1000:7440 and reset writer 1000:9e85; full reference inventory; reconstructed/tests/test_panel_animation.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0855 verified semantic-object-field g_target_rotation_state int32_t 1028:0855 1028:0858 5 3 FUN_1000_638e,FUN_1000_6f27,FUN_1000_b476,exported_ordinal_10 Zero-fill; selects DAT600 frames 1..5 and the rotation/composite branch at values 6 and above. Verified full render/rotation consumer 1000:6f27 and complete reference inventory; reconstructed/tests/test_mechanism_render.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0857 verified semantic-object-field g_target_rotation_state int32_t 1028:0855 1028:0858 4 3 FUN_1000_638e,FUN_1000_6f27,FUN_1000_b476,exported_ordinal_10 Zero-fill; selects DAT600 frames 1..5 and the rotation/composite branch at values 6 and above. Verified full render/rotation consumer 1000:6f27 and complete reference inventory; reconstructed/tests/test_mechanism_render.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0859 verified semantic-object-field g_dat600_bitmap HBITMAP16 1028:0859 1028:085a 4 1 FUN_1000_51f5,FUN_1000_5390,FUN_1000_6f27,FUN_1000_7440 Zero-filled; assigned DAT resource 600 at loading stage 33 by verified asset initialization. Complete verified load/render/delete lifecycle 1000:5390,6f27,7440,51f5; mechanism and panel-animation tests; complete verified referring-function closure Exact DAT600 atlas provenance, 91-pixel target frames, panel-animation mask/image regions, publication, and ownership lifecycle are fully proven. 1028:085b verified semantic-object-field g_background_bitmap HBITMAP16 1028:085b 1028:085c 16 1 FUN_1000_0002,FUN_1000_51f5,FUN_1000_5390,FUN_1000_6b37,FUN_1000_7440,FUN_1000_9bca,FUN_1000_9f73,FUN_1000_a38e,FUN_1000_beff,FUN_1008_07b6,FUN_1008_0837,FUN_1008_08bb,FUN_1008_093f,FUN_1008_0996,FUN_1008_0e08 Zero-filled; assigned DAT 998 by verified asset initialization and selected by all verified low-level background blits. Verified writer and readers 1008:07b6,0837,08bb,093f,0996/1000:5390; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:085d verified semantic-object-field g_background_overlay_b HBITMAP16 1028:085d 1028:085e 4 1 FUN_1000_51f5,FUN_1000_5390,FUN_1000_6f27,FUN_1000_7440,FUN_1008_08bb Zero-filled; assigned DAT 998 by verified asset initialization and consumed only by verified restore variant B. Complete writer/reader inventory 1000:5390 and 1008:08bb; asset/render tests.; complete verified referring-function closure Exact overlay-B resource, publication, restore role, and DGROUP extent are fully proven. 1028:085f verified semantic-object-field g_background_overlay_a HBITMAP16 1028:085f 1028:0860 4 1 FUN_1000_51f5,FUN_1000_5390,FUN_1000_7440,FUN_1008_0837,exported_ordinal_10 Zero-filled; assigned DAT 997 by verified asset initialization and consumed only by verified restore variant A. Complete writer/reader inventory 1000:5390 and 1008:0837; asset/render tests.; complete verified referring-function closure Exact overlay-A resource, publication, restore role, and DGROUP extent are fully proven. 1028:0861 verified semantic-object-field g_digit_sprite_bitmap HBITMAP16 1028:0861 1028:0862 3 1 FUN_1000_51f5,FUN_1000_5390,FUN_1008_0996,exported_ordinal_10 Zero-filled; assigned BITMAP resource 500 by verified asset initialization and consumed by verified score renderer. Complete writer/reader inventory 1000:5390 and 1008:0996; asset/score tests.; complete verified referring-function closure Exact HBITMAP slot, resource ID, 16-pixel horizontal digit stride, and 28x16 SRCAND use are fully proven. 1028:0863 verified semantic-object-field g_claw_sprite_bitmap HBITMAP16 1028:0863 1028:0864 2 1 FUN_1000_51f5,FUN_1000_5390,FUN_1008_0e08 Zero-filled; assigned DAT resource 900 at loading stage 29 and deleted at asset shutdown. Complete writer/reader/deletion inventory 1000:5390,1008:0e08,1000:51f5; asset/claw/cleanup tests; complete verified referring-function closure Exact resource, atlas geometry, frame mapping, publication, rendering, and ownership lifecycle are fully proven. 1028:0865 verified semantic-object-field g_board_decoration_bitmap HBITMAP16 1028:0865 1028:0866 3 1 FUN_1000_51f5,FUN_1000_5390,FUN_1000_638e,FUN_1000_6b37 Zero-filled; assigned DAT resource 901 at loading stage 32 and deleted during asset shutdown without clearing the slot. Complete verified lifecycle 1000:5390,638e,6b37,51f5; asset, key-release, gameplay-helper, and cleanup tests; complete verified referring-function closure Exact DAT901 provenance, launch-decoration and velocity-row atlas geometry, presentation, and ownership endpoint are fully proven. 1028:0867 verified semantic-object-field g_overlay_bitmap HBITMAP16 1028:0867 1028:0868 4 2 FUN_1000_5ba6,FUN_1000_5be5,FUN_1000_5c13,FUN_1000_60e7,FUN_1000_6129,FUN_1000_616e Zero-filled; assigned by verified DAT loaders 1000:5be5/6129 and deleted by verified destructors 5ba6/60e7 without clearing the slot. Complete verified setup/destructor, 616e 640x460 drawing, and 5c13 high-score source-region lifecycle; overlay and high-score tests; complete verified referring-function closure Exact global HBITMAP provenance, replacement, 32/204 high-score source, whole-overlay drawing, and ownership endpoints are fully proven. 1028:0869 verified semantic-object-field g_unused_setup_word_0869 uint16_t 1028:0869 1028:086a 0 1 FUN_1000_0270 Zero-fill and explicitly written zero by game setup; never read anywhere in the complete reference inventory. Sole write 1000:03ff in verified setup and zero-reader proof; complete verified referring-function closure Explicit retained word is initialized state, not silently omitted padding; it has no in-image consumer. 1028:086b verified semantic-object-field g_displayed_status_level uint16_t 1028:086b 1028:086c 2 4 FUN_1000_0270,FUN_1000_5390,FUN_1008_0b9e Zero-filled; initialized/reset to 99 and assigned computed levels 0..4 by verified status renderer. All renderer reads/writes in 1008:0b9e verified; status tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:086d verified semantic-object-field g_claw_current_frame uint16_t 1028:086d 1028:086e 8 3 FUN_1000_0270,exported_ordinal_10 Setup initializes ten; timer steps it toward the target and selects release state 1..9/18 or rest state ten. Complete setup/timer references, exact claw table and test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:086f verified semantic-object-field g_claw_target_frame uint16_t 1028:086f 1028:0870 2 6 FUN_1000_0270,FUN_1000_c79c,exported_ordinal_10 Setup initializes ten; collision logic selects a target and timer resets it to ten after releasing a ball. Complete references and full timer claw state machine; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0871 verified semantic-object-field g_physics_substeps_per_tick uint16_t 1028:0871 1028:0872 1 6 FUN_1000_0270,FUN_1000_c79c Configured from the clamped speed setting and snapshotted by physics before the one-based substep loop. Verified setup speed table and 1000:c79c loop; game-setup and physics tests; complete verified referring-function closure Exact unsigned zero-through-configured substep semantics and zero-substep rendering behavior are fully represented. 1028:0873 verified semantic-object-field g_claw_alternate_bank uint8_t 1028:0873 1028:0873 2 3 FUN_1000_0270,FUN_1000_c79c,exported_ordinal_10 Zero-fill; passed as the claw atlas bank while moving and cleared on release completion. Complete references, verified claw renderer and full timer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0874 verified semantic-object-field g_score_double_active uint8_t 1028:0874 1028:0874 6 11 FUN_1000_0270,FUN_1000_638e,FUN_1000_a72c,FUN_1000_ae6e,FUN_1000_bc36,FUN_1000_c4e1,FUN_1000_c79c,exported_ordinal_10 Zero-fill; cleared by player initialization, set by sprite effect 7, and doubles score deltas while nonzero. Verified lifecycle in 1000:a72c/bc36/c4e1; complete reference inventory; player-state/scoring tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0875 verified semantic-object-field g_special_respawn_active uint8_t 1028:0875 1028:0875 1 4 FUN_1000_0270,FUN_1000_ae6e,FUN_1000_c79c Zero-fill; set only on the special collision-position respawn branch and cleared on normal ball end. Verified both writes in 1000:ae6e and complete reference inventory; reconstructed/tests/test_turn_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0876 verified semantic-object-field g_timer_tick_counter uint32_t 1028:0876 1028:0879 13 3 FUN_1000_0270,exported_ordinal_10 Zero-fill; incremented after timer guards, drives intro quotient/remainder schedules, and resets when a new game is initialized. Setup and full 1000:eab1 disassembly/source; test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0878 verified semantic-object-field g_timer_tick_counter uint32_t 1028:0876 1028:0879 13 3 FUN_1000_0270,exported_ordinal_10 Zero-fill; incremented after timer guards, drives intro quotient/remainder schedules, and resets when a new game is initialized. Setup and full 1000:eab1 disassembly/source; test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:087a verified semantic-object-field g_intro_marquee_counter uint32_t 1028:087a 1028:087d 8 2 FUN_1000_0270,exported_ordinal_10 Zero-fill; increments on each six-tick intro marquee redraw and selects phase modulo 49. Setup and full timer GDI path; test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:087c verified semantic-object-field g_intro_marquee_counter uint32_t 1028:087a 1028:087d 8 2 FUN_1000_0270,exported_ordinal_10 Zero-fill; increments on each six-tick intro marquee redraw and selects phase modulo 49. Setup and full timer GDI path; test_timer_tick.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:087e verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 2 2 FUN_1000_5c13,FUN_1000_a8ea,FUN_1000_a99c Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:0880 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 3 2 FUN_1000_5c13,FUN_1000_a8ea,FUN_1000_a99c,FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:0882 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 2 2 FUN_1000_a8ea,FUN_1000_a99c,FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:0884 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 2 2 FUN_1000_a8ea,FUN_1000_a99c,FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:089a verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 1 0 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:089c verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 1 0 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:089e verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 1 1 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:08a0 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 1 1 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:08a2 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 0 1 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:08a4 verified semantic-object-field g_highscore_scores int32_t[10] 1028:087e 1028:08a5 0 1 FUN_1000_abe5 Zero-fill; loaded/defaulted by 1000:a99c, reordered by 1000:abe5, rendered by 1000:5c13, and XOR-serialized by 1000:a8ea. Complete verified reader/writer inventory across 1000:5c13/a8ea/a99c/abe5; reconstructed/tests/test_highscores.c; complete verified referring-function closure Exact ten signed dwords, one-based addressing, persistence, ordering, comparison, and decimal rendering are fully proven. 1028:0982 verified semantic-object-field g_player_scores int32_t[4] 1028:0982 1028:0991 1 2 FUN_1000_0270,FUN_1000_5390,FUN_1000_638e Zero-filled; initialized/reset by game setup and updated by scoring paths. Verified one-based reader 1008:0996; score-render tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0984 verified semantic-object-field g_player_scores int32_t[4] 1028:0982 1028:0991 1 2 FUN_1000_0270,FUN_1000_5390,FUN_1000_638e Zero-filled; initialized/reset by game setup and updated by scoring paths. Verified one-based reader 1008:0996; score-render tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0986 verified semantic-object-field g_player_scores int32_t[4] 1028:0982 1028:0991 1 2 FUN_1000_0270,FUN_1000_5390,FUN_1000_a72c Zero-filled; initialized/reset by game setup and updated by scoring paths. Verified one-based reader 1008:0996; score-render tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0988 verified semantic-object-field g_player_scores int32_t[4] 1028:0982 1028:0991 1 2 FUN_1000_0270,FUN_1000_5390,FUN_1000_a72c Zero-filled; initialized/reset by game setup and updated by scoring paths. Verified one-based reader 1008:0996; score-render tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0992 verified semantic-object-field g_player_secondary_scores int32_t[4] 1028:0992 1028:09a1 1 1 FUN_1000_0270,FUN_1000_acc2 Zero-fill; reset for configured players and multiplied for active-player display. Verified reset 1000:a72c and active redraw 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0994 verified semantic-object-field g_player_secondary_scores int32_t[4] 1028:0992 1028:09a1 1 1 FUN_1000_0270,FUN_1000_acc2 Zero-fill; reset for configured players and multiplied for active-player display. Verified reset 1000:a72c and active redraw 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0996 verified semantic-object-field g_player_secondary_scores int32_t[4] 1028:0992 1028:09a1 0 2 FUN_1000_0270,FUN_1000_a72c Zero-fill; reset for configured players and multiplied for active-player display. Verified reset 1000:a72c and active redraw 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0998 verified semantic-object-field g_player_secondary_scores int32_t[4] 1028:0992 1028:09a1 0 2 FUN_1000_0270,FUN_1000_a72c Zero-fill; reset for configured players and multiplied for active-player display. Verified reset 1000:a72c and active redraw 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09a2 verified semantic-object-field g_player_score_multipliers uint8_t[4] 1028:09a2 1028:09a5 1 1 FUN_1000_0270,FUN_1000_acc2 Zero-fill; initialized to one and used as unsigned byte factors for secondary-score display. Verified reset 1000:a72c and multiply 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09a3 verified semantic-object-field g_player_score_multipliers uint8_t[4] 1028:09a2 1028:09a5 0 2 FUN_1000_0270,FUN_1000_a72c Zero-fill; initialized to one and used as unsigned byte factors for secondary-score display. Verified reset 1000:a72c and multiply 1000:acc2; reconstructed/tests/test_player_state.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09a6 verified semantic-object-field g_player_sprite_indices uint16_t[4] 1028:09a6 1028:09ad 1 1 FUN_1000_0270,FUN_1000_acc2 Zero-fill; reset to zero and consumed as indices into the 400-series sprite bitmap array. Verified reset 1000:a72c and active-player composite 1000:acc2/0002; player-state/player-sprite tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09a8 verified semantic-object-field g_player_sprite_indices uint16_t[4] 1028:09a6 1028:09ad 0 2 FUN_1000_0270,FUN_1000_a72c Zero-fill; reset to zero and consumed as indices into the 400-series sprite bitmap array. Verified reset 1000:a72c and active-player composite 1000:acc2/0002; player-state/player-sprite tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09e2 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 2 FUN_1000_0270,FUN_1000_638e,FUN_1000_ae6e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09f1 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 3 2 FUN_1000_0270,FUN_1000_638e,FUN_1000_a72c,FUN_1000_ae6e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:09f7 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a01 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a02 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a03 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a05 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a07 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a09 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a0b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a0d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a0f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a11 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a13 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 15 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a15 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 15 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a17 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 15 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a19 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 15 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a1b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a1d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a1f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a21 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a23 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a25 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a27 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a29 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a2b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a2d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a2f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a31 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a33 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a35 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 3 4 FUN_1000_0270,FUN_1000_638e,FUN_1000_ae6e,FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a36 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a38 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a3a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a3c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a3e verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a40 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a42 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 2 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a44 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 6 5 FUN_1000_0270,FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a46 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a48 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0a4a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_c79c Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0b81 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0b98 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0b9a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0b9c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0b9e verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0d73 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_c79c,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0dc6 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_c79c,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e80 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e82 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e84 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e86 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e90 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e92 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1e94 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ec3 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ec5 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ec7 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ec9 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ecb verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ecd verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ecf verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ed1 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ed3 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ed5 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ed7 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ed9 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1edb verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1edd verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1edf verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1ee1 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f16 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f18 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f1a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f1c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f1e verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f20 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f22 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f24 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f26 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f28 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f2a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f2c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f69 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f6b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f6d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f6f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f71 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f73 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f75 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f77 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f79 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f7b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f7d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f7f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f81 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f83 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f85 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:1f87 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:235d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:235f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2361 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2363 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:236d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:236f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2371 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_7ed9 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23a0 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23a2 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23a4 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23a6 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23a8 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23aa verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23ac verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23ae verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23b0 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23b2 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23b4 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23b6 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23b8 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23ba verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23bc verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23be verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23f3 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23f5 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23f7 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23f9 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23fb verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23fd verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:23ff verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2401 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2403 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2405 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2407 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2409 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2446 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2448 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:244a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:244c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:244e verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2450 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2452 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2454 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2456 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 6 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2458 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 6 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:245a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:245c verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 5 1 FUN_1000_7ed9,FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:245e verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2460 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2462 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2464 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 1 FUN_1000_8b0d Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:2679 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 1 exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3340 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_638e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3342 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_638e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3344 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_638e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3346 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 0 FUN_1000_638e Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3371 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 2 FUN_1000_6f27,FUN_1000_9e85,FUN_1000_c79c,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:33c4 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 2 FUN_1000_6f27,FUN_1000_9e85,FUN_1000_c79c,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3417 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 3 1 FUN_1000_6f27,FUN_1000_9e85 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:346a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 3 1 FUN_1000_6f27,FUN_1000_9e85 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:34bd verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 3 1 FUN_1000_6f27,FUN_1000_9e85 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3969 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_ae6e,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:396b verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_ae6e,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:396d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_ae6e,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:396f verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_ae6e,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:399a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 2 FUN_1000_ae6e,FUN_1000_b476,FUN_1000_c4e1,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:39de verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 1 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b2a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b41 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b43 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b45 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b47 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b7d verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 0 2 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b94 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b96 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 4 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b98 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:3b9a verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 2 0 FUN_1000_b476 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:41f9 verified semantic-object-field g_collision_records_1_174 TdkpinCollisionRecord[174] 1028:09ae 1028:4217 1 3 FUN_1000_ae6e,exported_ordinal_10 Zero-fill; initialized by 174 indexed calls in the large setup routine. Verified 83-byte writer 1008:0138; OBJECTS.tsv live dump for IDs 1..174; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:424c verified semantic-object-field g_collision_record_175_prefix uint8_t[75] 1028:4218 1028:4262 2 5 FUN_1000_c79c,exported_ordinal_10 Zero-fill; initialized as collision record 175. Verified writer 1008:0138 and OBJECTS.tsv row 175; final eight bytes are separately shared with word-quad storage at 4263..426a.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:431b verified semantic-object-field g_status_level_bitmaps HBITMAP16[4] 1028:431b 1028:4322 1 1 FUN_1000_51f5,FUN_1000_5390 Zero-filled; DAT resources 701..704 are loaded one-based by verified asset initialization. Complete writer/reader/deletion inventory in 1000:5390,1008:0b9e,1000:51f5; asset/status/cleanup tests; complete verified referring-function closure Exact four HBITMAP slots, resource mapping, threshold-level mapping, primary 146x142 blit use, and ownership lifecycle are fully proven. 1028:431d verified semantic-object-field g_status_level_bitmaps HBITMAP16[4] 1028:431b 1028:4322 1 0 FUN_1000_51f5 Zero-filled; DAT resources 701..704 are loaded one-based by verified asset initialization. Complete writer/reader/deletion inventory in 1000:5390,1008:0b9e,1000:51f5; asset/status/cleanup tests; complete verified referring-function closure Exact four HBITMAP slots, resource mapping, threshold-level mapping, primary 146x142 blit use, and ownership lifecycle are fully proven. 1028:4321 verified semantic-object-field g_status_level_bitmaps HBITMAP16[4] 1028:431b 1028:4322 1 0 FUN_1008_0b9e Zero-filled; DAT resources 701..704 are loaded one-based by verified asset initialization. Complete writer/reader/deletion inventory in 1000:5390,1008:0b9e,1000:51f5; asset/status/cleanup tests; complete verified referring-function closure Exact four HBITMAP slots, resource mapping, threshold-level mapping, primary 146x142 blit use, and ownership lifecycle are fully proven. 1028:4323 verified semantic-object-field g_item_bitmaps_801_809 HBITMAP16[9] 1028:4323 1028:4334 1 1 FUN_1000_51f5,FUN_1000_5390 Zero-filled; DAT resources 801..809 are loaded and deleted one-based. Verified writer/deletion and ID order; asset initializer/cleanup tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4325 verified semantic-object-field g_item_bitmaps_801_809 HBITMAP16[9] 1028:4323 1028:4334 1 0 FUN_1000_51f5 Zero-filled; DAT resources 801..809 are loaded and deleted one-based. Verified writer/deletion and ID order; asset initializer/cleanup tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:43ea verified semantic-object-field wave_output_capabilities WAVEOUTCAPS16 1028:43be 1028:43ed 1 0 FUN_1008_0f2e Zero-filled 48-byte buffer populated by waveOutGetDevCaps for device zero. Windows 3.1 packed field offsets; call 1008:0fca-0fda; dwSupport read at 1008:0fe6-0ffe; strict size assertion and reconstructed/tests/test_sound.c; complete verified referring-function closure Exact Win16 layout is wMid, wPid, 16-bit driver version, 32-byte name, formats, channels, and support; WAVECAPS_VOLUME is bit 4 at offset 44. 1028:43ec verified semantic-object-field wave_output_capabilities WAVEOUTCAPS16 1028:43be 1028:43ed 1 0 FUN_1008_0f2e Zero-filled 48-byte buffer populated by waveOutGetDevCaps for device zero. Windows 3.1 packed field offsets; call 1008:0fca-0fda; dwSupport read at 1008:0fe6-0ffe; strict size assertion and reconstructed/tests/test_sound.c; complete verified referring-function closure Exact Win16 layout is wMid, wPid, 16-bit driver version, 32-byte name, formats, channels, and support; WAVECAPS_VOLUME is bit 4 at offset 44. 1028:43ee verified semantic-object-field wave_output_device_count uint16_t 1028:43ee 1028:43ef 5 3 FUN_1000_638e,FUN_1008_0f2e,FUN_1008_10e3,FUN_1008_1131,FUN_1008_118f Zero-filled; assigned from waveOutGetNumDevs and reset on entry or capability-query failure. Complete verified lifecycle in 1008:0f2e,10e3,1131,118f and sound-toggle reader 1000:638e; reconstructed/tests/test_sound.c and test_key_release.c; complete verified referring-function closure The word is the actual device count, not a Boolean initialized flag; nonzero permits keyboard re-enabling after sound has been disabled. 1028:43f0 verified semantic-object-field wave_output_device_id uint16_t 1028:43f0 1028:43f1 2 0 FUN_1008_0f2e Static zero and never written in the image. Reads before the sole waveOutGetDevCaps and waveOutGetVolume calls at 1008:0fca and 1008:1008; reconstructed/tests/test_sound.c; complete verified referring-function closure Selects wave-output device zero for both capability and volume queries. 1028:43f2 verified semantic-object-field sound_enabled uint8_t 1028:43f2 1028:43f2 3 4 FUN_1000_638e,FUN_1008_0002,FUN_1008_0f2e,FUN_1008_1131 Zero-filled; cleared on every sound initialization entry, set after successful capability/resource setup, and toggled by F12 only when a device exists. Complete verified readers/writers 1008:0002,0f2e,1131 and 1000:638e; sound and key-release tests; complete verified referring-function closure Exact Boolean enable lifecycle, playback gates, disable behavior, and device-gated re-enable behavior are fully proven. 1028:43f3 verified semantic-object-field sound_playing uint8_t 1028:43f3 1028:43f3 3 3 FUN_1008_0f2e,FUN_1008_10e3,FUN_1008_1131,FUN_1008_118f Zero-filled; cleared by initialization/unload and assigned from sndPlaySound's BOOL16 result. All reads/writes in verified 1008:0f2e, 10e3, 1131, and 118f; reconstructed/tests/test_sound.c; complete verified referring-function closure Exact current-playing flag, including stop-without-clear behavior in 118f and failure-to-play clear in 1131. 1028:43f4 verified semantic-object-field sound_volume_step uint8_t 1028:43f4 1028:43f4 0 2 FUN_1008_0f2e Zero-filled; set to ff when volume control is unsupported, otherwise the left-channel high byte rounded down to a multiple of ten. Disassembly 1008:0fe6-102e; exact byte extraction/divide/multiply path; reconstructed/tests/test_sound.c; complete verified referring-function closure Written during successful initialization and otherwise retained; no in-image reader exists. 1028:43f6 verified semantic-object-field sound_buffers Win16FarPtr[22] 1028:43f6 1028:444d 1 0 FUN_1008_10e3 Zero-filled; sound setup stores locked global-memory blocks for resource numbers 2001..2022. All indexed accesses in verified 1008:0f2e, 10e3, and 1131; exact one-based addressing and focused lifecycle tests in reconstructed/tests/test_sound.c; complete verified referring-function closure Exact 22 far-pointer slots, load overwrite behavior, inclusive release order, lack of pointer clearing, and play selection are represented. 1028:43f8 verified semantic-object-field sound_buffers Win16FarPtr[22] 1028:43f6 1028:444d 1 0 FUN_1008_10e3 Zero-filled; sound setup stores locked global-memory blocks for resource numbers 2001..2022. All indexed accesses in verified 1008:0f2e, 10e3, and 1131; exact one-based addressing and focused lifecycle tests in reconstructed/tests/test_sound.c; complete verified referring-function closure Exact 22 far-pointer slots, load overwrite behavior, inclusive release order, lack of pointer clearing, and play selection are represented. 1028:43fa verified semantic-object-field sound_buffers Win16FarPtr[22] 1028:43f6 1028:444d 2 1 FUN_1008_0f2e,FUN_1008_10e3 Zero-filled; sound setup stores locked global-memory blocks for resource numbers 2001..2022. All indexed accesses in verified 1008:0f2e, 10e3, and 1131; exact one-based addressing and focused lifecycle tests in reconstructed/tests/test_sound.c; complete verified referring-function closure Exact 22 far-pointer slots, load overwrite behavior, inclusive release order, lack of pointer clearing, and play selection are represented. 1028:43fc verified semantic-object-field sound_buffers Win16FarPtr[22] 1028:43f6 1028:444d 1 1 FUN_1008_0f2e,FUN_1008_10e3 Zero-filled; sound setup stores locked global-memory blocks for resource numbers 2001..2022. All indexed accesses in verified 1008:0f2e, 10e3, and 1131; exact one-based addressing and focused lifecycle tests in reconstructed/tests/test_sound.c; complete verified referring-function closure Exact 22 far-pointer slots, load overwrite behavior, inclusive release order, lack of pointer clearing, and play selection are represented. 1028:444e verified semantic-object-field tdkpin_palette_handle HPALETTE16 1028:444e 1028:444f 14 1 FUN_1000_5390,FUN_1000_59a0,FUN_1000_5a37,FUN_1000_5c13,FUN_1000_5f29,FUN_1000_5fc0,FUN_1000_616e,FUN_1000_6245,FUN_1000_62dc,FUN_1008_11c5,FUN_1008_149d Zero-filled; assigned the CreatePalette16 result by verified 1008:11c5. Complete reader inventory spans rendering/window functions; verified writer and bitmap loader 1008:149d; reconstructed/tests/test_palette.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4750 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4752 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4754 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4756 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4758 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:475a verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:475c verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:475e verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4760 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4762 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4764 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4766 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4768 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:476a verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 1 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:476c verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:476e verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4770 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 4 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4772 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 4 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4774 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4776 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 0 3 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:4778 verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 2 3 FUN_1010_0002,FUN_1010_0079,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:477a verified semantic-object-field g_multimedia_procedures Win16FarPtr[11] 1028:4750 1028:477b 2 3 FUN_1010_0002,FUN_1010_0079,FUN_1010_01c2,FUN_1010_0472 Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:477c verified semantic-object-field g_multimedia_version uint16_t 1028:477c 1028:477d 1 1 FUN_1010_01c2 Static zero; assigned from CTL3DGETVER after successful registration. Verified loader version >=9 gate and version-8 cleanup test.; complete verified referring-function closure Exact CTL3D compatibility version word. 1028:477e verified semantic-object-field g_multimedia_auto_subclassed uint8_t 1028:477e 1028:477e 0 3 FUN_1010_01c2,FUN_1010_0472 Static zero; set from CTL3DAUTOSUBCLASS only on modern/nonzero-request path. Verified modern success and legacy/disabled zero branches.; complete verified referring-function closure Boolean records whether process auto-subclassing succeeded. 1028:477f verified semantic-object-field g_multimedia_argument_2 uint8_t 1028:477f 1028:477f 0 2 FUN_1010_01c2,FUN_1010_0472 Stored from loader second byte argument after full initialization. Disassembly 1010:0373; focused export/loader test.; complete verified referring-function closure Exact parameter publication order is second argument first. 1028:4780 verified semantic-object-field g_multimedia_argument_1 uint8_t 1028:4780 1028:4780 0 2 FUN_1010_01c2,FUN_1010_0472 Stored from loader first byte argument after full initialization. Disassembly 1010:0376; focused export/loader test.; complete verified referring-function closure Exact parameter publication order is second argument then first. 1028:4781 verified semantic-object-field g_multimedia_module HINSTANCE16 1028:4781 1028:4782 14 4 FUN_1010_0002,FUN_1010_01c2,FUN_1010_0472 Static zero; assigned by LoadLibrary16 and retained after FreeLibrary16. Verified <32 error, modern/legacy load, failure unload, and explicit cleanup tests.; complete verified referring-function closure Unaligned module handle; values below 32 are Win16 load errors rather than unloadable handles. 1028:4783 verified semantic-object-field g_multimedia_pending uint8_t 1028:4783 1028:4783 0 2 FUN_1010_03af,FUN_1010_0472 Static zero; cleared by unit startup and every exported initialization return. Verified stores in 1010:03af/0472 and multimedia tests.; complete verified referring-function closure Exact transient pending byte; no reader exists in this image. 1028:4784 verified semantic-object-field g_multimedia_initialized uint8_t 1028:4784 1028:4784 5 4 FUN_1010_0002,FUN_1010_0079,FUN_1010_01c2,FUN_1010_0472 Static zero; set only after Register, GetVer >=9, and Enabled all succeed; cleared by cleanup. Complete verified loader/finalizer/unload lifecycle and branch tests.; complete verified referring-function closure Gates every dynamic helper use with exact boolean semantics. 1028:478a verified semantic-object-field g_multimedia_windows_version uint16_t 1028:478a 1028:478b 1 1 FUN_1010_0472 Low word returned by GetVersion16 during unit startup. Verified 3.0/3.10/4.0 major-minor branches and startup tests.; complete verified referring-function closure Low-byte major, high-byte minor; upper GetVersion word is discarded. 1028:478b verified semantic-object-field g_multimedia_windows_version uint16_t 1028:478a 1028:478b 1 0 FUN_1010_0472 Low word returned by GetVersion16 during unit startup. Verified 3.0/3.10/4.0 major-minor branches and startup tests.; complete verified referring-function closure Low-byte major, high-byte minor; upper GetVersion word is discarded. 1028:478c verified semantic-object-field g_multimedia_legacy_windows uint8_t 1028:478c 1028:478c 3 1 FUN_1010_01c2,FUN_1010_0472 Set exactly for Windows 3.0 through 3.9. Verified writer and all loader branch consumers.; complete verified r eferring-function closure Selects path probing, legacy procedure policy, and AutoSubclass suppression. 1028:47a2 verified semantic-object-field g_multimedia_system_directory_length uint16_t 1028:47a2 1028:47a3 1 1 FUN_1010_0472 Return from GetSystemDirectory16 with maximum 200. Verified zero/nonzero path-probe gate and tests.; complete verified referring-function closure Exact length for adjacent system-directory buffer. 1028:4abe verified semantic-object-field g_tpwincrt_saved_exit_proc Win16FarPtr 1028:4abe 1028:4ac1 1 1 FUN_1008_24a5,FUN_1008_2554 Zero-fill; receives the prior Borland ExitProc. Verified predecessor save/restore ordering and lifecycle tests.; complete verified referring-function closure Exact mutable ExitProc chain link. 1028:4ac0 verified semantic-object-field g_tpwincrt_saved_exit_proc Win16FarPtr 1028:4abe 1028:4ac1 1 1 FUN_1008_24a5,FUN_1008_2554 Zero-fill; receives the prior Borland ExitProc. Verified predecessor save/restore ordering and lifecycle tests.; complete verified referring-function closure Exact mutable ExitProc chain link. 1028:4ac2 verified semantic-object-field g_tpwincrt_screen_buffer Win16FarPtr 1028:4ac2 1028:4ac5 3 1 FUN_1008_19f8,FUN_1008_1d77,FUN_1008_21e2 Static zero; allocated on WM_CREATE and released on WM_DESTROY. Verified allocation/fill, circular readers, free/clear lifecycle, and tests.; complete verified referring-function closure Exact far pointer to columns*rows character cells. 1028:4ac4 verified semantic-object-field g_tpwincrt_screen_buffer Win16FarPtr 1028:4ac2 1028:4ac5 1 1 FUN_1008_1d77,FUN_1008_21e2 Static zero; allocated on WM_CREATE and released on WM_DESTROY. Verified allocation/fill, circular readers, free/clear lifecycle, and tests.; complete verified referring-function closure Exact far pointer to columns*rows character cells. 1028:4ac6 verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 3 1 FUN_1008_19b7,FUN_1008_1f0c,FUN_1008_1f68 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ac8 verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 3 1 FUN_1008_19b7,FUN_1008_1f0c,FUN_1008_1f68 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4aca verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 4 1 FUN_1008_1865,FUN_1008_18ee,FUN_1008_1f0c,FUN_1008_1f68 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4acc verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 4 1 FUN_1008_1865,FUN_1008_18ee,FUN_1008_1f0c,FUN_1008_1f68 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ace verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 11 1 FUN_1008_1818,FUN_1008_18ee,FUN_1008_1a39,FUN_1008_1dcc,FUN_1008_1f68,FUN_1008_1fe8 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ad0 verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 11 1 FUN_1008_1818,FUN_1008_18ee,FUN_1008_1a39,FUN_1008_1a82,FUN_1008_1dcc,FUN_1008_1f68,FUN_1008_1fe8 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ad2 verified semantic-object-field g_tpwincrt_view_metrics struct TpWinCrtViewMetrics 1028:4ac6 1028:4ad3 1 1 FUN_1008_1818,FUN_1008_1fe8 Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ad4 verified semantic-object-field g_tpwincrt_paint_dc HDC16 1028:4ad4 1028:4ad5 8 2 FUN_1008_1779,FUN_1008_17e2,FUN_1008_1a39,FUN_1008_1dcc,FUN_1008_1fe8 Static zero; assigned by GetDC16 or BeginPaint16. Verified 1008:1779/17e2 and paint/render consumers.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4ada verified semantic-object-field g_tpwincrt_paint PAINTSTRUCT16 1028:4ad6 1028:4af5 1 0 FUN_1008_1dcc Zero-filled persistent structure populated by BeginPaint16. Wine 11.15 PAINTSTRUCT16 layout; fixed pointer in 1008:1779/17e2; rcPaint reads in verified 1008:1dcc.; complete verified referring-function closure Exact HDC, erase flag, RECT16, restore/update flags, and 16 reserved bytes; extent ends immediately before saved font at 4af6. 1028:4adc verified semantic-object-field g_tpwincrt_paint PAINTSTRUCT16 1028:4ad6 1028:4af5 1 0 FUN_1008_1dcc Zero-filled persistent structure populated by BeginPaint16. Wine 11.15 PAINTSTRUCT16 layout; fixed pointer in 1008:1779/17e2; rcPaint reads in verified 1008:1dcc.; complete verified referring-function closure Exact HDC, erase flag, RECT16, restore/update flags, and 16 reserved bytes; extent ends immediately before saved font at 4af6. 1028:4ade verified semantic-object-field g_tpwincrt_paint PAINTSTRUCT16 1028:4ad6 1028:4af5 1 0 FUN_1008_1dcc Zero-filled persistent structure populated by BeginPaint16. Wine 11.15 PAINTSTRUCT16 layout; fixed pointer in 1008:1779/17e2; rcPaint reads in verified 1008:1dcc.; complete verified referring-function closure Exact HDC, erase flag, RECT16, restore/update flags, and 16 reserved bytes; extent ends immediately before saved font at 4af6. 1028:4ae0 verified semantic-object-field g_tpwincrt_paint PAINTSTRUCT16 1028:4ad6 1028:4af5 1 0 FUN_1008_1dcc Zero-filled persistent structure populated by BeginPaint16. Wine 11.15 PAINTSTRUCT16 layout; fixed pointer in 1008:1779/17e2; rcPaint reads in verified 1008:1dcc.; complete verified referring-function closure Exact HDC, erase flag, RECT16, restore/update flags, and 16 reserved bytes; extent ends immediately before saved font at 4af6. 1028:4af6 verified semantic-object-field g_tpwincrt_previous_font HGDIOBJ16 1028:4af6 1028:4af7 1 1 FUN_1008_1779,FUN_1008_17e2 Static zero; receives SelectObject16 result. Verified paired stores/reads in 1008:1779 and 17e2.; complete verified referring-function closure Stock-font replacement is restored exactly before releasing the drawing context. 1028:4af8 verified semantic-object-field g_tpwincrt_input_buffer uint8_t[64] 1028:4af8 1028:4b37 1 0 FUN_1008_1c5f Zero-filled DGROUP storage. Verified append, signed-capacity suppression, blocking dequeue, overlapping shift, line editing, and focused tests.; complete verified referring-function closure Exact fixed 64-byte FIFO input queue. 1028:4d38 verified semantic-object-field g_borland_heap_request_bytes uint16_t 1028:4d38 1028:4d39 4 1 FUN_1020_01ca Zero-fill; 1020:01ca stores the current allocation request before local/global attempts and reuses it across HeapError retries. Complete sole-function references; verified borland_try_get_mem source and heap core/path tests; complete verified referring-function closure Exact retry-stable uint16 request size, local/global threshold comparisons, and HeapError callback argument are fully represented. ?x kstart end bytes storage status stage object_id object_name c_type initial_value readers writers relocationsm00 1028:000f 16 initialize!@ compiler_data_prefix g_compiler_data_prefix const uint8_t[16] 00000000050000000000000000000000 Binary bytes plus complete z ero-reader/zero-writer inventory!1plicit compiler/module data prefix retained byte-for-byte; no semantic consumer exists in the image. 1028:0010 1028:0011 2 initialize!@ highscore_xor_key$4957 ?1028:0010:string[20]!5R1028:0013 2 initialize!@ highscore_xor_key$494b ?4 1028:0023 16 initialize!@d highscore_file_header g_highscore_file_header const uint8_t[16] 54444b204869676873636f7265730000 ?-save/write and load/ShortString-compare pathsg \K16-byte authentication header; both NUL bytes participate in comparison and serialization. 1028:0024 1028:002b 8 initialized ve%@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt 1200eeff00000000 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abb80385a33e79d28ebe71E7; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:002c 1028:002f 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:002c->entry-ordinal:99 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abbX80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0030 1028:0033 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0030->entry-ordinal:192 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0034 1028:0037 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0034->entry-ordinal:193 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0038 1028:003b 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0038->entry-ordinal:1 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abb8W0385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:003c 1028:003f 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:003c->entry-ordinal:2 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abb8W0385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0040 1028:0043 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0040->entry-ordinal:195 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0044 1028:0047 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0044->entry-ordinal:197 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0048 1028:004b 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0048->entry-ordinal:198 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:004c 1028:004f 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:004c->entry-ordinal:199 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0050 1028:0053 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0050->entry-ordinal:200 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0054 1028:0057 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0054->entry-ordinal:201 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0058 1028:005b 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0058->entry-ordinal:202 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:005c 1028:005f 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:005c->entry-ordinal:203 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0060 1028:0063 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0060->entry-ordinal:204 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0064 1028:0067 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0064->entry-ordinal:205 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow >+3c, Error +40, CanClose +44. 1028:0068 1028:006b 4 initialize!@ tdkpin_application_vmtvmt struct TdkpinApplicationVmt ffff0000 1028:0068->entry-ordinal:206 Binary hash b6da1047d807ee6b4c7ba9aac27c80fa2c968c483abYb80385a33e79d28ebe717; relocations 6:3-16; all method targets and program-entry VMT callsa:ize 0x12, negative size 0xffee, reserved zero dword, destructor +08, Idle +0c, InitApplication +10, InitInstance +14, Setup +18, Run +1c, MessageLoop +20, PreProcess +24, dialog/accelerator/MDI +28/+2c/+30, MakeWindow +34, ExecDialog +38, ValidateWindow ?+3c, Error +40, CanClose +44. 1028:006c 1028:0081 22 initialize!@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] 0a060000000007000001010180051c00050011030f03 fExact bytes and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:0082 1028:0085 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:0082->entry-ordinal:8 Exact byte\s and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:0086 1028:0089 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:0086->entry-ordinal:9 Exact byte\s and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:008a 1028:008d 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:008a->entry-ordinal:10 Exact byt]es and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:008e 1028:0091 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:008e->entry-ordinal:11 Exact byt]es and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:0092 1028:0095 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:0092->entry-ordinal:12 Exact byt]es and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:0096 1028:0099 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:0096->entry-ordinal:13 Exact byt]es and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:009a 1028:009d 4 initialized #@ main_window_dynamic_dispatch g_main_window_dynamic_dispatch const uint8_t[50] ffff0000 1028:009a->entry-ordinal:14 Exact byt]es and relocations at 0082..009a to entry ordinals 8..14; all targets and dispatcher verified!/Complete main-window dynamic dispatch descriptor, preserved separately from the VMT at 009e. 1028:009e 1028:00a5 8 initialized #@ main_window_vmt g_main_window_vmt const uint8_t[80] e50b1bf46c000000 Constructor uses VMT 009e; exact relocations 00a6..00e+a; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00a6 1028:00a9 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00a6->entry-ordinal:5 Constructor uses VMT 009e; exact rel=ocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00aa 1028:00ad 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00aa->entry-ordinal:177 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00ae 1028:00b1 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00ae->entry-ordinal:135 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00b2 1028:00b5 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00b2->entry-ordinal:136 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00b6 1028:00b9 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00b6->entry-ordinal:137 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00ba 1028:00bd 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00ba->entry-ordinal:145 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00be 1028:00c1 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00be->entry-ordinal:176 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00c2 1028:00c5 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00c2->entry-ordinal:146 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00c6 1028:00c9 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00c6->entry-ordinal:175 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00ca 1028:00cd 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00ca->entry-ordinal:148 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00ce 1028:00d1 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00ce->entry-ordinal:149 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00d2 1028:00d5 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00d2->entry-ordinal:4 Constructor uses VMT 009e; exact rel=ocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00d6 1028:00d9 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00d6->entry-ordinal:6 Constructor uses VMT 009e; exact rel=ocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00da 1028:00dd 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00da->entry-ordinal:153 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00de 1028:00e1 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00de->entry-ordinal:154 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00e2 1028:00e5 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00e2->entry-ordinal:155 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00e6 1028:00e9 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00e6->entry-ordinal:156 Constructor uses VMT 009e; exact r?elocations 00a6..00ea; all method targets/window paths verified!5imain game-window VMT extent from size/header through final virtual slot. 1028:00ea 1028:00ed 4 initialize!@ main_window_vmt g_main_window_vmt const uint8_t[80] ffff0000 1028:00ea->entry-ordinal:7 Constructor uses VMT 009e; exact rel=ocations 00a6..00ea; all method targets/window paths verified!5jmain game-window VMT extent from size/header through final virtual slot. 1028:00ee 1028:00fd 16 initialize!@ highscore_dynamic_dispatch g_highscore_dynamic_dispatch const uint8_t[32] 0a060000000004000102010111030f03 Exact bytes and Trelocations 00fe..010a to entry ordinals 20..23; high-score window behavior verified!/Complete dynamic dispatch descriptor paired with the verified high-score VMT at 010e. 1028:00fe 1028:0101 4 initialized verifie*@ highscore_dynamic_dispatch g_highscore_dynamic_dispatch const uint8_t[32] ffff0000 1028:00fe->entry-ordinal:20 Exact bytes aWnd relocations 00fe..010a to entry ordinals 20..23; high-score window behavior verified!/Complete dynamic dispatch descriptor paired with the verified high-score VMT at 010e. 1028:0102 1028:0105 4 initialized verifie*@ highscore_dynamic_dispatch g_highscore_dynamic_dispatch const uint8_t[32] ffff0000 1028:0102->entry-ordinal:21 Exact bytes aWnd relocations 00fe..010a to entry ordinals 20..23; high-score window behavior verified!/Complete dynamic dispatch descriptor paired with the verified high-score VMT at 010e. 1028:0106 1028:0109 4 initialized verifie*@ highscore_dynamic_dispatch g_highscore_dynamic_dispatch const uint8_t[32] ffff0000 1028:0106->entry-ordinal:22 Exact bytes aWnd relocations 00fe..010a to entry ordinals 20..23; high-score window behavior verified!/Complete dynamic dispatch descriptor paired with the verified high-score VMT at 010e. 1028:010a 1028:010d 4 initialized verifie*@ highscore_dynamic_dispatch g_highscore_dynamic_dispatch const uint8_t[32] ffff0000 1028:010a->entry-ordinal:23 Exact bytes aWnd relocations 00fe..010a to entry ordinals 20..23; high-score window behavior verified!/Complete dynamic dispatch descriptor paired with the verified high-score VMT at 010e. 1028:010e 1028:0115 8 initialized verifie*@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt 4500bbffee000000 Binary bytes; relocations 6:46-63; al3l method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0116 1028:0119 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0116->entry-ordinal:17 Binary bytes; reloFcations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:011a 1028:011d 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:011a->entry-ordinal:177 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:011e 1028:0121 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:011e->entry-ordinal:135 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0122 1028:0125 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0122->entry-ordinal:136 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0126 1028:0129 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0126->entry-ordinal:137 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:012a 1028:012d 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:012a->entry-ordinal:145 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:012e 1028:0131 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:012e->entry-ordinal:176 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0132 1028:0135 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0132->entry-ordinal:146 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0136 1028:0139 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0136->entry-ordinal:175 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:013a 1028:013d 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:013a->entry-ordinal:148 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:013e 1028:0141 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:013e->entry-ordinal:149 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0142 1028:0145 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0142->entry-ordinal:16 Binary bytes; reloFcations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0146 1028:0149 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0146->entry-ordinal:18 Binary bytes; reloFcations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:014a 1028:014d 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:014a->entry-ordinal:153 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:014e 1028:0151 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:014e->entry-ordinal:154 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0152 1028:0155 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0152->entry-ordinal:155 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:0156 1028:0159 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:0156->entry-ordinal:156 Binary bytes; relGocations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:015a 1028:015d 4 initialize!@ highscore_window_vmt g_highscore_window_vmt TdkpinHighscoreWindowVmt ffff0000 1028:015a->entry-ordinal:19 Binary bytes; reloFcations 6:46-63; all method targets including paint 1000:5c13 verified hq\80-byte TWindow-derived VMT from destructor +08 through paint +4c, with every slot named and address-backed. 1028:015e 1028:016d 16 initialize!@ full_child_dynamic_dispatch g_full_child_dynamic_dispatch const uint8_t[32] 0a060000000004000102010111030f03 Exact bytes anOd relocations 016e..017a to entry ordinals 29..32; full-child handlers verified!/Complete dynamic dispatch descriptor for the full-size child/help window class. 1028:016e 1028:0171 4 initialized verified sema0@  full_child_dynamic_dispatch g_full_child_dynamic_dispatch const uint8_t[32] ffff0000 1028:016e->entry-ordinal:29 Exact bytesR and relocations 016e..017a to entry ordinals 29..32; full-child handlers verified!/Complete dynamic dispatch descriptor for the full-size child/help window class. 1028:0172 1028:0175 4 initialized verified sema0@  full_child_dynamic_dispatch g_full_child_dynamic_dispatch const uint8_t[32] ffff0000 1028:0172->entry-ordinal:30 Exact bytesR and relocations 016e..017a to entry ordinals 29..32; full-child handlers verified!/Complete dynamic dispatch descriptor for the full-size child/help window class. 1028:0176 1028:0179 4 initialized verified sema0@  full_child_dynamic_dispatch g_full_child_dynamic_dispatch const uint8_t[32] ffff0000 1028:0176->entry-ordinal:31 Exact bytesR and relocations 016e..017a to entry ordinals 29..32; full-child handlers verified!/Complete dynamic dispatch descriptor for the full-size child/help window class. 1028:017a 1028:017d 4 initialized verified sema0@  full_child_dynamic_dispatch g_full_child_dynamic_dispatch const uint8_t[32] ffff0000 1028:017a->entry-ordinal:32 Exact bytesR and relocations 016e..017a to entry ordinals 29..32; full-child handlers verified!/Complete dynamic dispatch descriptor for the full-size child/help window class. 1028:017e 1028:0185 8 initialized verified sema0@  full_child_window_vmt g_full_child_window_vmt const uint8_t[80] 4500bbff5e010000 Constructors use VMT 017e; exact relocatio*ns 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:0186 1028:0189 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:0186->entry-ordinal:26 Constructors use VMT 01=7e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:018a 1028:018d 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:018a->entry-ordinal:177 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:018e 1028:0191 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:018e->entry-ordinal:135 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:0192 1028:0195 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:0192->entry-ordinal:136 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:0196 1028:0199 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:0196->entry-ordinal:137 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:019a 1028:019d 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:019a->entry-ordinal:145 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:019e 1028:01a1 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:019e->entry-ordinal:176 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01a2 1028:01a5 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01a2->entry-ordinal:146 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01a6 1028:01a9 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01a6->entry-ordinal:175 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01aa 1028:01ad 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01aa->entry-ordinal:148 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01ae 1028:01b1 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01ae->entry-ordinal:149 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01b2 1028:01b5 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01b2->entry-ordinal:25 Constructors use VMT 01=7e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01b6 1028:01b9 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01b6->entry-ordinal:27 Constructors use VMT 01=7e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01ba 1028:01bd 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01ba->entry-ordinal:153 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01be 1028:01c1 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01be->entry-ordinal:154 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01c2 1028:01c5 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01c2->entry-ordinal:155 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01c6 1028:01c9 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01c6->entry-ordinal:156 Constructors use VMT 0>17e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01ca 1028:01cd 4 initialized verified ,@ full_child_window_vmt g_full_child_window_vmt const uint8_t[80] ffff0000 1028:01ca->entry-ordinal:28 Constructors use VMT 01=7e; exact relocations 0186..01ca; all window targets verified6ull-child/help window VMT from object size/header through final paint/message slot. 1028:01ce 1028:01d5 8 initialized verified ,@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] 3400ccffc6060000 High-score editor constructs VMT 01ce; exact relocatio(ns 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01d6 1028:01d9 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01d6->entry-ordinal:223 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01da 1028:01dd 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01da->entry-ordinal:233 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01de 1028:01e1 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01de->entry-ordinal:135 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01e2 1028:01e5 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01e2->entry-ordinal:136 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01e6 1028:01e9 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01e6->entry-ordinal:137 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01ea 1028:01ed 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01ea->entry-ordinal:145 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01ee 1028:01f1 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01ee->entry-ordinal:224 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01f2 1028:01f5 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01f2->entry-ordinal:146 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01f6 1028:01f9 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01f6->entry-ordinal:147 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01fa 1028:01fd 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01fa->entry-ordinal:148 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:01fe 1028:0201 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:01fe->entry-ordinal:149 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:0202 1028:0205 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:0202->entry-ordinal:150 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:0206 1028:0209 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:0206->entry-ordinal:108 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:020a 1028:020d 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:020a->entry-ordinal:107 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:020e 1028:0211 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:020e->entry-ordinal:154 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:0212 1028:0215 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:0212->entry-ordinal:155 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:0216 1028:0219 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:0216->entry-ordinal:156 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:021a 1028:021d 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:021a->entry-ordinal:225 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5lmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:021e 1028:0221 4 initialize!@ text_dialog_vmt g_text_dialog_vmt const uint8_t[84] ffff0000 1028:021e->entry-ordinal:226 High-score editor constructs VMT 0<1ce; exact relocations 01d6..021e; dialog lifecycle verified!5mmodal text-dialog VMT including dialog-specific terminal slots 225 and 226. 1028:0222 1028:022b 10 initialize!@ tdkpin_module_name tdkpin_module_name char[10] 464c4950504552334400 Binary bytes; verified multimedia initialization call 19000:0100; path locator input tests.; 1028:0222:string[10]!5module-name far argument used while locating CTL3D relative to the executable. 1028:022c 1028:0244 25 initialized verified sema0@  tdkpin_application_title tdkpin_application_title char[25] 54444b2050696e62616c6c204d616368696e6520312e303000 Binary bytes;] verified MainWindow constructor and second-instance MessageBox frames.; 1028:022c:string[25]!5Vapplication/window title and refusal-dialog caption. 1028:0245 1028:0252 14 initialize!@ tdkpin_already_running_text tdkpin_already_running_text char[27] 44657220466c6970706572206ce4 Binary bytes; verified second)-instance MessageBox frame 1000:0144-015fq66FGerman already-running refusal text. 1028:0253 1028:025f 13 initialize!@ tdkpin_already_running_text tdkpin_already_running_text char[27] 75667420626572656974732100 Binary bytes; verified second-i>nstance MessageBox frame 1000:0144-015f.; 1028:0253:string[13]!5FGerman already-running refusal text. 1028:0260 1028:0269 10 initialize!@ setup_low_memory_text g_setup_low_memory_text const char[74] 4e696368742067656efc Binary bytes and sole verified MessageBox path in 1000:0270_setupw8iwner-zero low-memory text shown before window Close and RuntimeExit(0). 1028:026a 1028:02a9 64 initialize!@ setup_low_memory_text g_setup_low_memory_text const char[74] sha256:90ed45a0ccad3ef579c0532626a1a657f0cef8ec60814ea8a4400312e7Ef42762 Binary bytes and sole verified MessageBox path in 1000:0270_setup.c; 1028:026a:string[64]A6iwner-zero low-memory text shown before window Close and RuntimeExit(0). 1028:02aa 1028:02c2 25 initialize!@ setup_dialog_caption g_setup_dialog_caption const char[25] 54444b2050696e62616c6c204d616368696e6520312e303000 Binary bytes 'and both verified setup MessageBox path1 _setup.c; 1028:02aa:string[25]!5segment:6:offset:0550 ;1028:054c:undefined2[2]6z 51028:054f 2 initialize!@ ! /0000 FUN_1008_24a5 ;1028:054e:undefined2[2]6z 250 1028:055d 14 initialize!@   const char[14] 28496e6163746976652025732900 Binary bytes and verified ExitProc formatting tests.; 1028:0550:string[14]; com&0Aclean-shutdown caption template. 1028:055e 1028:055e 1 initialize!@ tpwincrt_auto_scroll" 01 FUN_1008_1b11 Y"<1028:055e:undefined1[1]!/"A1028:055f 1 initialize!@ tpwincrt_ctrl_z_is_eof!#"00 FUN_1008_1cc6 x#=1028:055f:undefined1[1]!/#>1028:0560 1 initialize!@ A$?$'0|$+ FUN_1008_24a5 $B1028:0560:undefined1[1]!5b%.1 1028:0561 1 initialize!@m alignment_0561 g_alignment_0561 const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2Dplicit one-byte WNDCLASS alignment. 1028:0562 1028:0563 2 initialize!@ wndclass_tpwincrt%"0300 H&h4 1028:0567 4 initialize!@ wndclass_tpwincrt%"'ffff0000 1028:0564->entry-ordinal:119H&h8 1028:056b 4 initialize!@ wndclass_tpwincrt%" 00000000 H&hc 1028:056d 2 initialize!@ wndclass_tpwincrt%"0000 FUN_1008_2554 H&1028:056c:undefined2[2]!/&1028:056f 2 initialize!@ wndclass_tpwincrt%"0000 FUN_1008_2554 H&1028:056e:undefined2[2]!/)1028:0571 2 initialize!@ wndclass_tpwincrt%"0000 FUN_1008_2554 H&1028:0570:undefined2[2]!/9+1028:0573 2 initialize!@ wndclass_tpwincrt%"0000 FUN_1008_2554 H&1028:0572:undefined2[2]!/)4 1028:0577 4 initialize!@ wndclass_tpwincrt%" 00000000 ,j1028:0579 2 initialize!@ wndclass_tpwincrt%"4ffff FUN_1008_2442 1028:0578->segment:6:offset:057cH&1028:0578:undefined2[2]!/y/1028:057b 2 initialize!@ wndclass_tpwincrt%"0000 FUN_1008_2442 H&1028:057a:undefined2[2]!/)c 1028:0584 9 initialize!@ tpwincrt_class_name tpwincrt_class_name char[9] 545057696e43727400 Relocation 1028:0578 -> 1028:057c; RegisterClass16 path 1008:2554.; 1028:057c:string[9]!/kNUL-terminated TPWinCrt class name used by the verified WNDCLASS16 object. 1028:0585 1028:0585 1 initialize!@m alignment_0585 g_alignment_0585 const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2Iplicit one-byte runtime-state alignment. 1028:0586 1028:0587 2 initialize!@ tpwincrt_window_handlep20000'i$3FUN_1008_2442 [3<1028:0586:undefined2[2]!/W 3W1028:0589 2 initialize!@ tpwincrt_ring_row_originF4%000 FUN_1008_1a82 441028:0588:undefined2[2]!5?5(1028:058b 2 initialize!@ tpwincrt_input_count5!00005+506D1028:058a:undefined2[2]!5671028:058c 1 initialize!@ 66"00 j7~$e2 7E1028:058c:undefined1[1]!5<28$1028:058d 1 initialize!@3 tpwincrt_has_focus g_tpwincrt_has_focus uint8_t 00=:* h:)9V1028:058d:undefined1[1]!/921028:058e 1 initialize!@ tpwincrt_caret_enable:#00=:; 8FUN_1008_1c5f :31028:058e:undefined1[1]!5;:1028:058f 1 initialize!@ x;v;(-00 FUN_1008_1779,FUN_1008_17e2 FUN_1008_1dcc <:1028:058f:undefined1[1] 1wentry-ordinal:129 Setup constructs VMT 05c0; reloc;ation to entry ordinal 129; verified SystemTimer lifecycle/1:six-byte timer object size, negative size/header fields, and destructor virtual slot. 1028:05cc 1028:05e5 26 initialized verifi)@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 00000000000009001501140111011000020082000600110014ff Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scroll testsT662-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05e6 1028:05e9 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05e6->entry-oirdinal:161 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05ea 1028:05ed 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05ea->entry-oirdinal:162 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05ee 1028:05f1 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05ee->entry-oirdinal:163 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05f2 1028:05f5 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05f2->entry-oirdinal:164 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05f6 1028:05f9 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05f6->entry-oirdinal:165 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05fa 1028:05fd 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05fa->entry-oirdinal:166 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:05fe 1028:0601 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:05fe->entry-oirdinal:167 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:0602 1028:0605 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:0602->entry-oirdinal:168 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie#d. 1028:0606 1028:0609 4 initialize!@ object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 ffff0000 1028:0606->entry-oirdinal:169 Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scrollT<62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verifie$d. 1028:060a 1028:0625 28 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] cc05000000000a00060022020100140115010f000500030001021201 Exact bytes and relocations 0626..064a Gto entry ordinals 178,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:0626 1028:0629 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:0626->entry-ordinal:178 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:062a 1028:062d 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:062a->entry-ordinal:179 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:062e 1028:0631 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:062e->entry-ordinal:181 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:0632 1028:0635 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:0632->entry-ordinal:182 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:0636 1028:0639 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:0636->entry-ordinal:183 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:063a 1028:063d 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:063a->entry-ordinal:184 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:063e 1028:0641 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:063e->entry-ordinal:185 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:0642 1028:0645 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:0642->entry-ordinal:186 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:0646 1028:0649 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:0646->entry-ordinal:187 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:064a 1028:064d 4 initialize!@$ object_windows_application_dispatchM_dispatch const uint8_t[68] ffff0000 1028:064a->entry-ordinal:188 Exact bytes and relocations 0626..064a to entry ordinals 1738,179,181..188; application dispatch/tests verified!/CompletKYdynamic table retained with every target address-backed. 1028:064e 1028:064f 2 initialize!@ object_windows_applicationM*0000K~ FUN_1018_1a61 iL; 1028:064e:undefined4[4]wl650 1028:0651 2 initialize!@ object_windows_applicationM*0000 FUN_1018_1a61 iL2 1028:0653 2 initialize!@ oOmO(/ffff FUN_1008_2a45 1028:0652->USER.ordinal:2411QN1028:0652:undefined2[2]6>T|P1028:0655 2 initialize!@ oOmO(0000 FUN_1008_2a45 1QN1028:0654:undefined2[2]6>T|P6 1028:0657 2 initialize!@ MSKS%/ffff FUN_1008_2ae3 1028:0656->USER.ordinal:239SK1028:0656:undefined2[2]6>T/58 1028:0659 2 initialize!@ MSKS%0000 FUN_1008_2ae3 SK1028:0658:undefined2[2]6>T/5a 1028:065d 4 initialize!@ object_windows_default_procedures g_object_windows_default_procedures const Win16FarPtr[3] ffff0000 1028:065a->USER.ordinal:^107 NE relocations 136..138 and verified ObjectWindows default window/MDI procedure forwarding!5gthree far import slots used as framework default procedure identities. 1028:065e 1028:0661 4 initialize!@ object_windows_default_procedures g_object_windows_default_procedures const Win16FarPtr[3] ffff0000 1028:065e->USER.ordinal:^447 NE relocations 136..138 and verified ObjectWindows default window/MDI procedure forwarding!5gthree far import slots used as framework default procedure identities. 1028:0662 1028:0665 4 initialize!@ object_windows_default_procedures g_object_windows_default_procedures const Win16FarPtr[3] ffff0000 1028:0662->USER.ordinal:^308 NE relocations 136..138 and verified ObjectWindows default window/MDI procedure forwarding!5gthree far import slots used as framework default procedure identities. 1028:0666 1028:0667 2 initialize!@ win16_message_boxV!ffffV< 1028:0666->USER.ordinal:1)Ww1028:0666:undefined2[2]!/W8 1028:0669 2 initialize!@ win16_message_boxV!000V= )Ww1028:0668:undefined2[2]!/W1028:066a 1 initialize!@ dialog_alternate_templaterX%00 FUN_1008_1607 X81028:066a:undefined1[1] 1HYUb 1028:066b 1 initialize!@m alignment_066b g_alignment_066b const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2Iplicit one-byte ObjectWindows alignment. 1028:066c 1028:066d 2 initialize!@ Y#Y.!0000 FUN_1018_01dc FUN_1018_01dc `ZF1028:066c:undefined2[2]!0Zu1028:066f 2 initialize!@ j[h[(0000[[`Z\.1028:066e:undefined2[2]!5\1028:0671 2 initialize!@ j[h[(0000[[`Z\.1028:0670:undefined2[2]!5\2 1028:0673 2 initialize!@ ^^+/0000 FUN_1018_01dc,FUN_1018_1b08 FUN_1018_1a61 _u1028:0672:undefined2[2]!0W`1028:0675 2 initialize!@ ^^+/0000 FUN_1018_01dc,FUN_1018_1b08 FUN_1018_1a61 _u1028:0674:undefined2[2]!0W`6 1028:0677 2 initialize!@ d"c-0000 FUN_1018_134f eI1028:0676:undefined2[2]!5]dQ1028:0679 2 initialize!@ d"c-0000 FUN_1018_134f eI1028:0678:undefined2[2]!5]dOa 1028:067d 4 initialize!@ object_windows_selector_property object_windows_selector_property_name char[4] 4f573100 TDKPIN.EXE data bytes; SetProp16 call at 1018:004a-0059Q0fNUL-terminated property name OW1; stores the bound object's selector. 1028:067e 1028:0681 4 initialize!@ object_windows_offset_property object_windows_offset_property_name char[4] 4f573200 TDKPIN.EXE data bytes; SetProp16 call at 1018:005a-0069Q0dNUL-terminated property name OW2; stores the bound object's offset. 1028:0682 1028:0683 2 initialize!@ hh*0000 FUN_1018_0103 Vi1028:0682:undefined2[2]!/j84 1028:0685 2 initialize!@ hh*000h Vi1028:0684:undefined2[2]!/j86 1028:068a 5 initialize!@ Y template YJtemplate uint8_t[5] 5b2ec41fea Binary bytes; disassembly 1018:020e-0226!\XPOP BX; CS:LES BX,[BX]; JMP FAR immediate template: consumes the CALL return address, loads the embedded bound object, and jumpXs through the shared dispatch procedure appended at +7. 1028:068b 1028:068b 1 initialize!@m alignment_068b g_alignment_068b const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2Jplicit one-byte ObjectWindows separator. 1028:068c 1028:0697 12 initialize!@ object_windows_turbo_window_class_name object_windows_turbo_window_class_name char[12] 547572626f57696e646f7700 Binary bytegs; four TWindow-derived VMTs select 1018:0d6a at +0x2c; focused far-pointer test.; 1028:068c:string[12]a77gistered class-name provider for the shared ObjectWindows window implementation. 1028:0698 1028:06b2 27 initialized verified se.@  object_windows_error_format object_windows_error_format char[27] 4572726f7220636f6465203d2025642e20436f6e74696e75653f00 Bin6ary bytes and verified wvsprintf call at 1018:1f20-1f2ps _windows.c; 1028:0698:string[27]!0igned decimal application error prompt; the sole conversion consumes the caller's uint16 word as int16. 1028:06b3 1028:06c4 18 initialize!@ object_windows_error_caption object_windows_error_caption char[18] 4170706c69636174696f6e204572726f7200 Binary bytes and veHrified indirect MessageBox call at 1018:1f2f-1f3e.; 1028:06b3:string[18]!5caption for thK/error prompt. 1028:06c5 1028:06d9 21 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] 00cc05000000000600018002801001110010009005 AExact bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06da 1028:06dd 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06da->entry-ordinal:227 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06de 1028:06e1 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06de->entry-ordinal:228 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06e2 1028:06e5 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06e2->entry-ordinal:229 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06e6 1028:06e9 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06e6->entry-ordinal:230 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06ea 1028:06ed 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06ea->entry-ordinal:231 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06ee 1028:06f1 4 initialize!@ borland_unit_descriptor_table g_borland_unit_descriptor_table const uint8_t[45] ffff0000 1028:06ee->entry-ordinal:232 Exact ;bytes and relocations 06da..06ee to entry ordinals 227..232!startup/ExitProc chain!5Ecompiler-generated unit lifecycle table; all six targets and ordering06f2 1028:06f2 1 initialize!@ k" k,01 FUN_1008_2c83 C1k;1028:06f2:undefined1[1]!5lK3 1028:06f3 1 initialize!@m alignment_06f3 g_alignment_06f3 const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2#plicit one-byte runtime alignment. l initialize!@ borland_heap_reserve_sizel'0020 m l,1028:06f4:undefined2[2]!/Qm81028:06f7 2 initialize!@ borland_heap_reservem$!0000 FUN_1008_2de0,FUN_1008_2e22 m@nU1028:06f6:undefined2[2]!0nv1028:06f9 2 initialize!@ borland_heap_reservem$!0000 FUN_1008_2de0,FUN_1008_2e22 m@nU1028:06f8:undefined2[2]!0spv:q initialize!@ qq(00 FUN_1008_2e22 bqi; 1028:06fa:undefined1[1]wl6fb 1028:06fb 1 initialize!@m alignment_06fb g_alignment_06fb const uint8_t 00 Exact binary byte; zero readers, writers, and relocationQ2)plicit one-byte startup-state alignment. r 2 initialize!@ \rZr&0000r* FUN_1020_0002 s; 1028:06fc:undefined2[2]wl6fe 1028:06ff 2 initialize!@ win16_instance9t0000otFUN_1020_0002 u; 1028:06fe:undefined2[2]wn0 1028:0701 2 initialize!@ win16_show_commanv 0000 a718_1b57 FUN_1020_0002 Iw; 1028:0700:undefined2[2]wp1028:0703 2 initialize!@ Ozx#!0000 FUN_1020_0871 FUN_1020_0002 |-yR1028:0702:undefined4[4]6z yi1028:0705 2 initialize!@ Ozx#0000 FUN_1020_0002 |-y9| 2 initialize!@ heahead uint16_t 0000H|KFUN_1020_023c,FUN_1020_02d7 Q|j1028:0706:undefined2[2]!/}1028:0709 2 initialize!@ borland_local_heap_limitU~%0004 FUN_1020_01ca ~I1028:0708:undefined2[2]!/*1028:070b 2 initialize!@ &002 , J@1028:070a:undefined2[2]!541028:070d 2 initialize!@ borland_global_alloc_flags'0200 FUN_1020_0222 k>1028:070c:undefined2[2]6݁61028:070f 2 initialize!@ 2)!0000 FUN_1020_01ca FUN_1008_2e76 @Q1028:070e:undefined2[2]!/c0 1028:0711 2 initialize!@ 2)!0000 FUN_1020_01ca FUN_1008_2e76 @Q1028:0710:undefined2[2]!/e1028:0713 2 initialize!@ borland_exit_procA!0000 tDžl; 1028:0712:undefined2[2]n4 1028:0715 2 initialize!@ borland_exit_procA!0000 FUN_1008_2554 tDžl; 1028:0714:undefined2[2]n6 1028:0716 1 initialize!@ borland_exit_codeA#00 FUN_1020_0061 FUN_1020_0061 e; 1028:0716:undefined1[1]n7 1028:0717 1 initialize!@ borland_exit_codeA#00 1028:0719 2 initialize!@ borland_error_locationO60000FUN_1020_0061 Qp; 1028:0718:undefined2[2]p1028:071b 2 initialize!@ borland_error_locationO60000FUN_1020_0061 Qp; 1028:071a:undefined2[2]nc 1028:071d 2 initialize!@ borland_windows_mode!!0000 FUN_1020_0061 FUN_1020_0002 |O1028:071c:undefined2[2]!5g1028:071f 2 initialize!@ borland_io_result&0000 Ў'j; 1028:071e:undefined2[2]wm20 1028:0721 2 initialize!@ borland_random_see!0000 539 !e1028:0720:undefined2[2]!5 N1028:0723 2 initialize!@ borland_random_see!0000 FUN_1020_1501539 !e1028:0722:undefined2[2]!5 LX 2 initialize!@ (&*0000 FUN_1020_0002 Ĕa1028:0724:undefined2[2]!5X1028:0726 1 initialize!@2 borland_cpu_level g_borland_cpu_level uint8_t 00 8@FUN_1020_0002 i1028:0726:undefined1[1]!5IU1028:0727 1 initialize!@ borland_file_mode02 FUN_1020_06ab Z1028:0727:undefined1[1]!5E28 1028:0747 32 initialize!@ borland_runtime_error_text g_borland_runtime_error_text char[32] 52756e74696d65206572726f722030303020617420303030303a303030302ce00 TDKPIN.EXE bytes; fixed write endpoints 0739, 0741, 0746 in 1020:0061.; 1028:0728:string[32]!/Mutable decimal error-code and uppercase hexadecimal segment/offset fields are written backward into fixed placeholders before -MessageBox16. 1028:0748 1028:0749 2 zero-fill% tdkpin_application_object)zero-fill ne_program_entry q1028:0748:undefined2[2]!5<<4a 1028:076b 34 zero-fill% tdkpin_application_object) zero-fill 6c 1028:07be 83 zero-fill% reserved_runtime_to_game_state g_reserved_runtime_to_game_state uint8_t[83] zero-fill Complete reference, relocation, and d7efined-data inventories contain no address in the range!1plicit unreferenced runtime/game-state reserve; all 83 bytes remain zero in-image. 1028:07bf 1028:07c0 2 zero-fill verified sem%  tdkpin_windows_version#,zero-fill ne_program_entry ne_program_entry H1028:07bf:undefined2[2]!/~Z1028:07c2 2 zero-fill% tdkpin_windows_version#,zero-fill ne_program_entry ne_program_entry H1028:07c1:undefined2[2]!/~X3 1028:07c3 1 zero-fill% alignment_07c3 g_alignment_07c3 uint8_t zero-fill Complete zero-reader/zero-writer/zero-relocation inventory; complete veri0"Eplicit one-byte game-state alignment. 1028:07c4 1028:07c4 1 zero-fill% palette_update_activeS! zero-fill1 /; 1028:07c4:undefined1[1]wmx zero-fill% OM$ zero-fill­=; 1028:07c5:undefined1[1]wm 1 zero-fill%+ game_tilted game_tilted uint8_t zero-fill }ߡC}9e85 ; 1028:07c6:undefined1[1]wmc7 1028:07c7 1 zero-fill%  zero-fill q0­8 b476; 1028:07c7:undefined1[1]wmc8 1028:07c8 1 zero-fill% ! zero-fill q0­l; 1028:07c8:undefined1[1]wmc9 1028:07c9 1 zero-fill% .,& zero-fill­8 a70e a; 1028:07c9:undefined1[1]wmca 1028:07ca 1 zero-fill%@ claw_animation_active g_claw_animation_active uint8_t zero-fill­˪; 1028:07ca:undefined1[1]wmcb 1028:07cb 1 zero-fill% scene_ready zero-fill  a; 1028:07cb:undefined1[1]wmcc 1028:07cc 1 zero-fill% assets_pending zero-fill Э"­ oj; 1028:07cc:undefined1[1]wmcd 1028:07ce 2 zero-fill%- board_index g_board_index uint16_t zero-fill6129 FUN_1000_0270 n; 1028:07cd:undefined2[2]wm 1 zero-fill% debug_keys_enable(zero-fill FUN_1000_638e FUN_1000_0270 C11028:07cf:undefined1[1]!/e1028:07d0 1 zero-fill%/ player_count g_player_count uint8_t zero-fill }3­8 a70e c; 1028:07d0:undefined1[1]wm' zero-fill%3 current_player g_current_player uint8_t zero-fill 20|ʷ еP­8  yc; 1028:07d1:undefined1[1]wmd2 1028:07d2 1 zero-fill% mk!&zero-fill FUN_1000_ab3c,FUN_1000_ae6e  1; 1028:07d2:undefined1[1]wmd3 1028:07d4 2 zero-fill% ! zero-fill9_|8&&­8 ;. ; 1028:07d3:undefined2[2]wmd5 1028:07d6 2 zero-fill% ! zero-fill9_|8&&­8 ;. ; 1028:07d5:undefined2[2]wmd7 1028:07d8 2 zero-fill% ! zero-fill9_|8&&­8 ;. ; 1028:07d7:undefined2[2]wmd9 1028:07da 2 zero-fill% ! zero-fill9_|8&&­8 ;. ; 1028:07d9:undefined2[2]wmdb 1028:07dc 2 zero-fill% + zero-fillFUN_1000_c79c OSp]1028:07db:undefined2[2]!5jd 1028:07de 2 zero-fill% + zero-fillFUN_1000_c79c OSp]1028:07dd:undefined2[2]!5l1028:07e0 2 zero-fill% + zero-fillFUN_1000_c79c OSp]1028:07df:undefined2[2]!5ie1 1028:07e2 2 zero-fill% + zero-fillFUN_1000_c79c OSp]1028:07e1:undefined2[2]!5ie3 1028:07e4 2 zero-fill% ) zero-fillГ; 1028:07e3:undefined2[2]wme5 1028:07e6 2 zero-fill% ) zero-fillГ; 1028:07e5:undefined2[2]wme7 1028:07e8 2 zero-fill% ) zero-fill Г; 1028:07e7:undefined2[2]wme9 1028:07ea 2 zero-fill% ) zero-fill Г; 1028:07e9:undefined2[2]wmeb 1028:07ec 2 zero-fill% ) zero-fillF;; 1028:07eb:undefined2[2]wmed 1028:07ee 2 zero-fill% ) zero-fillF;; 1028:07ed:undefined2[2]wmef 1028:07f0 2 zero-fill% ) zero-fill F;; 1028:07ef:undefined2[2]wmf1 1028:07f2 2 zero-fill% ) zero-fill F;; 1028:07f1:undefined2[2]wmf3 1028:07f4 2 zero-fill% qzero-fill FUN_1000_638e#@; 1028:07f3:undefined2[2]wmf5 1028:07f6 2 zero-fill% qzero-fill FUN_1000_638e#@; 1028:07f5:undefined2[2]wmf7 1028:07f8 2 zero-fill% q zero-fill#FUN_1000_638e @; 1028:07f7:undefined2[2]wmf9 1028:07fa 2 zero-fill% q zero-fill#FUN_1000_638e @; 1028:07f9:undefined2[2]wmfb 1028:07fc 2 zero-fill% q(zero-fill FUN_1000_638e#; 1028:07fb:undefined2[2]wmfd 1028:07fe 2 zero-fill% q(zero-fill FUN_1000_638e#; 1028:07fd:undefined2[2]wmff 1028:0800 2 zero-fill% q( zero-fill#FUN_1000_638e ; 1028:07ff:undefined2[2]n1 1028:0802 2 zero-fill% q( zero-fill#FUN_1000_638e ; 1028:0801:undefined2[2]n3 1028:0804 2 zero-fill%  ' zero-fill Z; 1028:0803:undefined2[2]n5 1028:0806 2 zero-fill%  ' zero-fill Z; 1028:0805:undefined2[2]n7 1028:0808 2 zero-fill%  ' zero-fill Z; 1028:0807:undefined2[2]n9 1028:080a 2 zero-fill%  ' zero-fill Z; 1028:0809:undefined2[2]nb 1028:080c 2 zero-fill% @* zero-fill 0; 1028:080b:undefined2[2]p1028:080e 2 zero-fill% @* zero-fill 0; 1028:080d:undefined2[2]nf 1028:0810 2 zero-fill% @* zero-fill 0; 1028:080f:undefined2[2]m11 1028:0812 2 zero-fill% @* zero-fill 0; 1028:0811:undefined2[2]m13 1028:0814 2 zero-fill% @* zero-fill 0; 1028:0813:undefined2[2]m15 1028:0816 2 zero-fill% @* zero-fill 0; 1028:0815:undefined2[2]m17 1028:0817 1 zero-fill% player_ready_flags!zero-fill FUN_1000_0270 ; 1028:0817:undefined1[1]m18 1028:0818 1 zero-fill% player_ready_flags!zero-fill FUN_1000_a72c ; 1028:0818:undefined1[1]m19 1028:081a 2 zero-fill% player_ready_flags! zero-fill 1b 1028:081b 1 zero-fill% 1%zero-fill FUN_1000_0270 ; 1028:081b:undefined1[1]m1c 1028:081c 1 zero-fill% 1%zero-fill FUN_1000_a72c ; 1028:081c:undefined1[1]m1d 1028:081e 2 zero-fill% 1% zero-fill 1f 1028:0820 2 zero-fill% " zero-fill O1 1028:0822 2 zero-fill% " zero-fill  O; 1028:0821:undefined2[2]m23 1028:0824 2 zero-fill% " zero-fill } O; 1028:0823:undefined2[2]m25 1028:0828 4 zero-fill% " zero-fill O1028:082a 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:0829:undefined2[2]m2b 1028:082c 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:082b:undefined2[2]m2d 1028:082e 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:082d:undefined2[2]m2f 1028:0830 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:082f:undefined2[2]m31 1028:0832 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:0831:undefined2[2]m33 1028:0834 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:0833:undefined2[2]m35 1028:0836 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:0835:undefined2[2]m37 1028:0838 2 zero-fill% Q 1 ,zero-fill FUN_1000_0270 a; 1028:0837:undefined2[2]m39 1028:083a 2 zero-fill% player_marker_levels#zero-fill FUN_1000_0270 J; 1028:0839:undefined2[2]m3b 1028:083c 2 zero-fill% player_marker_levels#zero-fill FUN_1000_0270 J; 1028:083b:undefined2[2]m3d 1028:083e 2 zero-fill% player_marker_levels#zero-fill FUN_1000_a72c J; 1028:083d:undefined2[2]m3f 1028:0840 2 zero-fill% player_marker_levels#zero-fill FUN_1000_a72c J; 1028:083f:undefined2[2]m41 1028:0848 8 zero-fill% player_marker_levels# zero-fill J49 1028:084a 2 zero-fill% )&zero-fill FUN_1008_0138 FUN_1008_0138 T1028:0849:undefined2[2]1028:084c 2 zero-fill% )&zero-fill FUN_1008_0138 FUN_1008_0138 T1028:084b:undefined2[2]d 1028:084e 2 zero-fill% )&zero-fill FUN_1008_0138 FUN_1008_0138 T1028:084d:undefined2[2]f 1028:0850 2 zero-fill% )&zero-fill FUN_1008_0138 FUN_1008_0138 T1028:084f:undefined2[2]51 1028:0852 2 zero-fill% panel_animation_frame%!zero-fill FUN_1000_744M%0O$; 1028:0851:undefined2[2]m53 1028:0854 2 zero-fill% panel_animation_frame%!zero-fill FUN_1000_744M%0O$; 1028:0853:undefined2[2]m55 1028:0856 2 zero-fill% '' zero-fill FUN_1000_6f27}b476(; 1028:0855:undefined2[2]m57 1028:0858 2 zero-fill% '' zero-fill FUN_1000_6f27}b476(; 1028:0857:undefined2[2]m59 1028:085a 2 zero-fill% dat600_bitmap+ zero-fill,0 FUN_1000_5390 ,o1028:0859:undefined2[2]!57-1028:085c 2 zero-fill% background_bitmap- zero-fill".FUN_1000_5390 l/r; 1028:085b:undefined2[2]m5d 1028:085e 2 zero-fill% o0m0! zero-fill,0!FUN_1000_5390 PM511028:085d:undefined2[2]A61\1028:0860 2 zero-fill% background_overlay_aY2" zero-fill,02FUN_1000_5390 PM531028:085f:undefined2[2]A613U1028:0862 2 zero-fill% digit_sprite_bitmapL4! zero-fill,4FUN_1000_5390 PM581028:0861:undefined2[2]65m1028:0864 2 zero-fill% claw_sprite_bitmapD6 zero-fill,8_0e08 FUN_1000_5390 P+*791028:0863:undefined2[2]a71028:0866 2 zero-fill% ,8*8$ zero-fill,8FUN_1000_5390 9o1028:0865:undefined2[2]!591028:0868 2 zero-fill% overlay_bitmap\: zero-fill::6e :6129 i;1028:0867:undefined2[2]!5"<< 2 zero-fill% <<"zero-fill FUN_1000_0270 =?1028:0869:undefined2[2]!1=p1028:086c 2 zero-fill% displayed_status_level>#zero-fill FUN_1008_0b9e l>G?l; 1028:086b:undefined2[2]mg@ 2 zero-fill% claw_current_frameA@ zero-fillK"Av; 1028:086d:undefined2[2]m6f 1028:0870 2 zero-fill% claw_target_frame B zero-fill­Bd; 1028:086f:undefined2[2]m71 1028:0872 2 zero-fill% CC%&zero-fill FUN_1000_c79c FUN_1000_0270 DN1028:0871:undefined2[2]!5Ex1028:0873 1 zero-fill%< claw_alternate_bank g_claw_alternate_bank uint8_t zero-fill­cFo; 1028:0873:undefined1[1]m74 1028:0874 1 zero-fill% score_double_active`G zero-fill  ­8  I VHx; 1028:0874:undefined1[1]m75 1028:0875 1 zero-fill% II!zero-fill FUN_1000_c79cIbJ; 1028:0875:undefined1[1]m76 1028:0877 2 zero-fill% timer_tick_counter]M zero-fillK"7Nm; 1028:0876:undefined2[2]m78 1028:0879 2 zero-fill% timer_tick_counter]M zero-fillK"7Nm; 1028:0878:undefined2[2]m7a 1028:087b 2 zero-fill% intro_marquee_counterP" zero-fillK"Q_; 1028:087a:undefined2[2]m7c 1028:087d 2 zero-fill% intro_marquee_counterP" zero-fillK"Q_; 1028:087c:undefined2[2]m7e 1028:087f 2 zero-fill% highscore_scoresT zero-fillR FUN_1000_a99c OSs1028:087e:undefined2[2]!5 V|0 1028:0881 2 zero-fill% highscore_scoresT zero-fillR'be5 FUN_1000_a99c OSs1028:0880:undefined2[2]!5 V~1028:0883 2 zero-fill% highscore_scoresT zero-fillbe5 YOSs1028:0882:undefined2[2]!5 V|4 1028:0885 2 zero-fill% highscore_scoresT zero-fillbe5 YOSs1028:0884:undefined2[2]!5 V|6 1028:0899 20 zero-fill% highscore_scoresT zero-fill OS!9a 1028:089b 2 zero-fill% highscore_scoresT zero-fill FUN_1000_abe5 OSs1028:089a:undefined2[2]!5 V{9c 1028:089d 2 zero-fill% highscore_scoresT zero-fill FUN_1000_abe5 OSs1028:089c:undefined2[2]!5 V{9e 1028:089f 2 zero-fill% highscore_scoresT &zero-fill FUN_1000_abe5 FUN_1000_abe5 OSs1028:089e:undefined2[2]!5 V{a0 1028:08a1 2 zero-fill% highscore_scoresT &zero-fill FUN_1000_abe5 FUN_1000_abe5 OSs1028:08a0:undefined2[2]!5 V{a2 1028:08a3 2 zero-fill% highscore_scoresT zero-fill FUN_1000_abe5 OSs1028:08a2:undefined2[2]!5 V{a4 1028:08a5 2 zero-fill% highscore_scoresT zero-fill FUN_1000_abe5 OSs1028:08a4:undefined2[2]!5 V{a6 1028:0981 220 zero-fill%< highscore_names g_highscore_names char[10][22] zero-fill 9#S3Ufo22-byte slots, short-read behavior, defaulting, shift/edit, C-string display truncation, and persistence layoutf1028:0983 2 zero-fill% player_scoreskzero-fill FUN_1000_5390 @if; 1028:0982:undefined2[2]wl984 1028:0985 2 zero-fill% player_scoreskzero-fill FUN_1000_5390 @if; 1028:0984:undefined2[2]wl986 1028:0987 2 zero-fill% player_scoreskzero-fill FUN_1000_5390s@if; 1028:0986:undefined2[2]wl988 1028:0989 2 zero-fill% player_scoreskzero-fill FUN_1000_5390s@if; 1028:0988:undefined2[2]wl98a 1028:0991 8 zero-fill% player_scoresk zero-fill @i92 1028:0993 2 zero-fill% om2o%&zero-fill FUN_1000_acc2 FUN_1000_0270 q; 1028:0992:undefined2[2]wl994 1028:0995 2 zero-fill% om2o%&zero-fill FUN_1000_acc2 FUN_1000_0270 q; 1028:0994:undefined2[2]wl996 1028:0997 2 zero-fill% om2o% zero-fill sq; 1028:0996:undefined2[2]wl998 1028:0999 2 zero-fill% om2o% zero-fill sq; 1028:0998:undefined2[2]wl99a 1028:09a1 8 zero-fill% om2o% zero-fill qa2 1028:09a2 1 zero-fill% Ovt&&zero-fill FUN_1000_acc2 FUN_1000_0270 qUui; 1028:09a2:undefined1[1]wl9a3 1028:09a3 1 zero-fill% Ovt& zero-fill sqUui; 1028:09a3:undefined1[1]wl9a4 1028:09a5 2 zero-fill% Ovt& zero-fill qUu6 1028:09a7 2 zero-fill% yy$&zero-fill FUN_1000_acc2 FUN_1000_0270 q$xp; 1028:09a6:undefined2[2]wl9a8 1028:09a9 2 zero-fill% yy$ zero-fill sq$xp; 1028:09a8:undefined2[2]wl9aa 1028:09ad 4 zero-fill% yy$ zero-fill q$xe 1028:09e1 52 zero-fill% A5 zero-fill 9e2 1028:09e2 1 zero-fill% A5 zero-fillae6e }e6e v; 1028:09e2:undefined1[1]wl9e3 1028:09f0 14 zero-fill% A5 zero-fill 9f1 1028:09f2 2 zero-fill% A5 zero-fills e6e }e6e v; 1028:09f1:undefined2[2]wl9f3 1028:09f6 4 zero-fill% A5 zero-fill 9f7 1028:09f8 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:09f7:undefined2[2]wl9f9 1028:0a00 8 zero-fill% A5 zero-fill 1 1028:0a01 1 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a01:undefined1[1]m02 1028:0a02 1 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a02:undefined1[1]m03 1028:0a04 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a03:undefined2[2]m05 1028:0a06 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a05:undefined2[2]m07 1028:0a08 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a07:undefined2[2]m09 1028:0a0a 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a09:undefined2[2]m0b 1028:0a0c 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a0b:undefined2[2]m0d 1028:0a0e 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a0d:undefined2[2]m0f 1028:0a10 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a0f:undefined2[2]n1 1028:0a12 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a11:undefined2[2]n3 1028:0a14 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a13:undefined2[2]n5 1028:0a16 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a15:undefined2[2]n7 1028:0a18 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a17:undefined2[2]n9 1028:0a1a 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a19:undefined2[2]nb 1028:0a1c 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a1b:undefined2[2]nd 1028:0a1e 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a1d:undefined2[2]p1028:0a20 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a1f:undefined2[2]m21 1028:0a22 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a21:undefined2[2]m23 1028:0a24 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a23:undefined2[2]m25 1028:0a26 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a25:undefined2[2]m27 1028:0a28 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a27:undefined2[2]m29 1028:0a2a 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a29:undefined2[2]m2b 1028:0a2c 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a2b:undefined2[2]m2d 1028:0a2e 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a2d:undefined2[2]m2f 1028:0a30 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a2f:undefined2[2]m31 1028:0a32 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a31:undefined2[2]m33 1028:0a34 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a33:undefined2[2]m35 1028:0a35 1 zero-fill% A5 zero-fillI}v; 1028:0a35:undefined1[1]m36 1028:0a37 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a36:undefined2[2]m38 1028:0a39 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a38:undefined2[2]m3a 1028:0a3b 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a3a:undefined2[2]m3c 1028:0a3d 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a3c:undefined2[2]m3e 1028:0a3f 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a3e:undefined2[2]m40 1028:0a41 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a40:undefined2[2]m42 1028:0a43 2 zero-fill% A5&zero-fill FUN_1000_c79c FUN_1000_c79c v; 1028:0a42:undefined2[2]m44 1028:0a45 2 zero-fill% A5 zero-fillc79c FUN_1000_c79c v; 1028:0a44:undefined2[2]m46 1028:0a47 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a46:undefined2[2]m48 1028:0a49 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a48:undefined2[2]m4a 1028:0a4b 2 zero-fill% A5zero-fill FUN_1000_c79c v; 1028:0a4a:undefined2[2]m4c 1028:0b80 309 zero-fill% A5 zero-fill b81 1028:0b81 1 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:0b81:undefined1[1]m82 1028:0b97 22 zero-fill% A5 zero-fill b98 1028:0b99 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:0b98:undefined2[2]na 1028:0b9b 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:0b9a:undefined2[2]nc 1028:0b9d 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:0b9c:undefined2[2]ne 1028:0b9f 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:0b9e:undefined2[2]ma0 1028:0d72 467 zero-fill% A5 zero-fill d73 1028:0d73 1 zero-fill% A5 zero-fill `"v; 1028:0d73:undefined1[1]wld74 1028:0dc5 82 zero-fill% A5 zero-fill dc6 1028:0dc6 1 zero-fill% A5 zero-fill `"v; 1028:0dc6:undefined1[1]wldc7 1028:1e7f 4281 zero-fill% A5 zero-fill 180 1028:1e81 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e80:undefined2[2]!n2 1028:1e83 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e82:undefined2[2]!p1028:1e85 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e84:undefined2[2]!n6 1028:1e87 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e86:undefined2[2]!n8 1028:1e8f 8 zero-fill% A5 zero-fill 190 1028:1e91 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e90:undefined2[2]!m92 1028:1e93 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e92:undefined2[2]!m94 1028:1e95 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:1e94:undefined2[2]!m96 1028:1ec2 45 zero-fill% A5 zero-fill 13 1028:1ec4 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ec3:undefined2[2]!mc5 1028:1ec6 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ec5:undefined2[2]!mc7 1028:1ec8 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ec7:undefined2[2]!mc9 1028:1eca 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ec9:undefined2[2]!mcb 1028:1ecc 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ecb:undefined2[2]!mcd 1028:1ece 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ecd:undefined2[2]!mcf 1028:1ed0 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ecf:undefined2[2]Qn1 1028:1ed2 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1ed1:undefined2[2]Qn3 1028:1ed4 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1ed3:undefined2[2]Qp1028:1ed6 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1ed5:undefined2[2]Qn7 1028:1ed8 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1ed7:undefined2[2]Qn9 1028:1eda 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1ed9:undefined2[2]Qnb 1028:1edc 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1edb:undefined2[2]Qnd 1028:1ede 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1edd:undefined2[2]Qnf 1028:1ee0 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1edf:undefined2[2]!me1 1028:1ee2 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1ee1:undefined2[2]!me3 1028:1f15 51 zero-fill% A5 zero-fill 16 1028:1f17 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f16:undefined2[2] m18 1028:1f19 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f18:undefined2[2] m1a 1028:1f1b 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f1a:undefined2[2] m1c 1028:1f1d 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f1c:undefined2[2] m1e 1028:1f1f 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f1e:undefined2[2] m20 1028:1f21 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f20:undefined2[2] m22 1028:1f23 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f22:undefined2[2] m24 1028:1f25 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f24:undefined2[2] m26 1028:1f27 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f26:undefined2[2] m28 1028:1f29 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f28:undefined2[2] m2a 1028:1f2b 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f2a:undefined2[2] m2c 1028:1f2d 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f2c:undefined2[2] m2e 1028:1f68 59 zero-fill% A5 zero-fill 69 1028:1f6a 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f69:undefined2[2] nb 1028:1f6c 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f6b:undefined2[2] nd 1028:1f6e 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f6d:undefined2[2] p1028:1f70 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f6f:undefined2[2] m71 1028:1f72 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f71:undefined2[2] m73 1028:1f74 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f73:undefined2[2] m75 1028:1f76 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f75:undefined2[2] m77 1028:1f78 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:1f77:undefined2[2] m79 1028:1f7a 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f79:undefined2[2] m7b 1028:1f7c 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f7b:undefined2[2] m7d 1028:1f7e 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f7d:undefined2[2] m7f 1028:1f80 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f7f:undefined2[2] m81 1028:1f82 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f81:undefined2[2] m83 1028:1f84 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:1f83:undefined2[2] m85 1028:1f86 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f85:undefined2[2] m87 1028:1f88 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:1f87:undefined2[2] m89 1028:235c 980 zero-fill% A5 zero-fill "d 1028:235e 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:235d:undefined2[2]Q-m5f 1028:2360 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:235f:undefined2[2]Q-m61 1028:2362 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:2361:undefined2[2]Q-m63 1028:2364 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:2363:undefined2[2]Q-m65 1028:236c 8 zero-fill% A5 zero-fill "6d 1028:236e 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:236d:undefined2[2]Q-m6f 1028:2370 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:236f:undefined2[2]Q-m71 1028:2372 2 zero-fill% A5zero-fill FUN_1000_7ed9 v; 1028:2371:undefined2[2]Q-m73 1028:239f 45 zero-fill% A5 zero-fill "a0 1028:23a1 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23a0:undefined2[2]Q-n2 1028:23a3 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23a2:undefined2[2]Q-n4 1028:23a5 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23a4:undefined2[2]Q-n6 1028:23a7 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23a6:undefined2[2]Q-n8 1028:23a9 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23a8:undefined2[2]Q-na 1028:23ab 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23aa:undefined2[2]Q-nc 1028:23ad 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23ac:undefined2[2]Q-ne 1028:23af 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:23ae:undefined2[2]AAn0 1028:23b1 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23b0:undefined2[2]AAn2 1028:23b3 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23b2:undefined2[2]AAn4 1028:23b5 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23b4:undefined2[2]AAn6 1028:23b7 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23b6:undefined2[2]AAp1028:23b9 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23b8:undefined2[2]AAna 1028:23bb 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23ba:undefined2[2]AAnc 1028:23bd 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23bc:undefined2[2]AAne 1028:23bf 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:23be:undefined2[2]Q-mc0 1028:23f2 51 zero-fill% A5 zero-fill "f3 1028:23f4 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23f3:undefined2[2]Nn5 1028:23f6 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23f5:undefined2[2]Nn7 1028:23f8 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23f7:undefined2[2]Nn9 1028:23fa 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23f9:undefined2[2]Np1028:23fc 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23fb:undefined2[2]Nnd 1028:23fe 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23fd:undefined2[2]Nnf 1028:2400 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:23ff:undefined2[2]!im01 1028:2402 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2401:undefined2[2]!im03 1028:2404 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2403:undefined2[2]!im05 1028:2406 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2405:undefined2[2]!im07 1028:2408 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2407:undefined2[2]!im09 1028:240a 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2409:undefined2[2]!im0b 1028:2445 59 zero-fill% A5 zero-fill ^6 1028:2447 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:2446:undefined2[2]!im48 1028:2449 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:2448:undefined2[2]!im4a 1028:244b 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:244a:undefined2[2]!im4c 1028:244d 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:244c:undefined2[2]!im4e 1028:244f 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:244e:undefined2[2]!in0 1028:2451 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:2450:undefined2[2]!in2 1028:2453 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:2452:undefined2[2]!in4 1028:2455 2 zero-fill% A5zero-fill FUN_1000_8b0d v; 1028:2454:undefined2[2]!ip1028:2457 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:2456:undefined2[2]!in8 1028:2459 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:2458:undefined2[2]!ina 1028:245b 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:245a:undefined2[2]!inc 1028:245d 2 zero-fill% A5 zero-fillCFUN_1000_8b0d v; 1028:245c:undefined2[2]!ine 1028:245f 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:245e:undefined2[2]!im60 1028:2461 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2460:undefined2[2]!im62 1028:2463 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2462:undefined2[2]!im64 1028:2465 2 zero-fill% A5&zero-fill FUN_1000_8b0d FUN_1000_8b0d v; 1028:2464:undefined2[2]!im66 1028:2678 531 zero-fill% A5 zero-fill "679 1028:267a 2 zero-fill% A5 zero-fill v; 1028:2679:undefined2[2]vnb 1028:333f 3269 zero-fill% A5 zero-fill 1340 1028:3341 2 zero-fill% A5zero-fill FUN_1000_638e v; 1028:3340:undefined2[2]m42 1028:3343 2 zero-fill% A5zero-fill FUN_1000_638e v; 1028:3342:undefined2[2]m44 1028:3345 2 zero-fill% A5zero-fill FUN_1000_638e v; 1028:3344:undefined2[2]m46 1028:3347 2 zero-fill% A5zero-fill FUN_1000_638e v; 1028:3346:undefined2[2]m48 1028:3370 41 zero-fill% A5 zero-fill 1371 1028:3372 2 zero-fill% A5 zero-fill͆? c79c FUN_1000_6f27v; 1028:3371:undefined2[2]m73 1028:33c3 81 zero-fill% A5 zero-fill 13c4 1028:33c5 2 zero-fill% A5 zero-fill͆? c79c FUN_1000_6f27v; 1028:33c4:undefined2[2]n6 1028:3416 81 zero-fill% A5 zero-fill 1417 1028:3418 2 zero-fill% A5 zero-fill͆FUN_1000_6f27 v; 1028:3417:undefined2[2]l419 1028:3469 81 zero-fill% A5 zero-fill 146a 1028:346b 2 zero-fill% A5 zero-fill͆FUN_1000_6f27 v; 1028:346a:undefined2[2]l46c 1028:34bc 81 zero-fill% A5 zero-fill 14bd 1028:34be 2 zero-fill% A5 zero-fill͆FUN_1000_6f27 v; 1028:34bd:undefined2[2]l4bf 1028:3968 1194 zero-fill% A5 zero-fill 11028:396a 2 zero-fill% A5 zero-fill " v; 1028:3969:undefined2[2]l96b 1028:396c 2 zero-fill% A5 zero-fill " v; 1028:396b:undefined2[2]l96d 1028:396e 2 zero-fill% A5 zero-fill " v; 1028:396d:undefined2[2]l96f 1028:3970 2 zero-fill% A5 zero-fill " v; 1028:396f:undefined2[2]l971 1028:3999 41 zero-fill% A5 zero-fill 19a 1028:399b 2 zero-fill% A5 zero-fill е c4e1 "v; 1028:399a:undefined2[2]l99c 1028:39dd 66 zero-fill% A5 zero-fill 1de 1028:39de 1 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:39de:undefined1[1]l9df 1028:3b29 331 zero-fill% A5 zero-fill 1b2a 1028:3b2a 1 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b2a:undefined1[1]nb 1028:3b40 22 zero-fill% A5 zero-fill 1b41 1028:3b42 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b41:undefined2[2]m43 1028:3b44 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b43:undefined2[2]m45 1028:3b46 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b45:undefined2[2]m47 1028:3b48 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b47:undefined2[2]m49 1028:3b7c 52 zero-fill% A5 zero-fill 11028:3b7d 1 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b7d:undefined1[1]m7e 1028:3b93 22 zero-fill% A5 zero-fill 1b94 1028:3b95 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b94:undefined2[2]m96 1028:3b97 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b96:undefined2[2]m98 1028:3b99 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b98:undefined2[2]m9a 1028:3b9b 2 zero-fill% A5zero-fill FUN_1000_b476 v; 1028:3b9a:undefined2[2]m9c 1028:41f8 1629 zero-fill% A5 zero-fill !1028:41f9 1 zero-fill% A5 zero-fill"v; 1028:41f9:undefined1[1]l1fa 1028:4217 30 zero-fill% A5 zero-fill !218 1028:424b 52 zero-fill% collision_record_175_prefix zero-fill 24c 1028:424c 1 zero-fill% collision_record_175_prefix zero-fill`"; 1028:424c:undefined1[1]l24d 1028:4262 22 zero-fill% collision_record_175_prefix zero-fill 263 1028:430a 168 zero-fill% tdkpin_word_quads g_tdkpin_word_quads TdkpinWordQuad[21] zero-fill Twenty direct calls with exact constants; byte-complete zero-fill range and writ1?c430b 1028:431a 16 zero-fill%J sprite_bitmaps_400_407 g_sprite_bitmaps_400_407 HBITMAP16[8] zero-fill !1b 1028:431c 2 zero-fill% status_level_bitmaps%&zero-fill FUN_1000_51f5 FUN_1000_5390 Pi1028:431b:undefined2[2]61d 1028:431e 2 zero-fill% status_level_bitmaps%zero-fill FUN_1000_51f5 Pi1028:431d:undefined2[2]61f 1028:4320 2 zero-fill% status_level_bitmaps% zero-fill P)1028:4322 2 zero-fill% status_level_bitmaps%zero-fill FUN_1008_0b9e Pi1028:4321:undefined2[2]63 1028:4324 2 zero-fill% item_bitmaps_801_809$%&zero-fill FUN_1000_51f5 FUN_1000_5390 !u; 1028:4323:undefined2[2]l325 1028:4326 2 zero-fill% item_bitmaps_801_809$%zero-fill FUN_1000_51f5 !u; 1028:4325:undefined2[2]l327 1028:4334 14 zero-fill% item_bitmaps_801_809$% zero-fill !35 1028:43bd 137 zero-fill% reserved_asset_to_wave_state g_reserved_asset_to_wave_state uint8_t[137] zero-fill Complete reference, relocation, and defi4ned-data inventories contain no address in the range!1mplicit unreferenced asset/sound reserve; all 137 bytes remain zero in-image. 1028:43be 1028:43e9 44 zero-fill% wave_output_capabilitiesȱ( zero-fill `Ya 1028:43eb 2 zero-fill% wave_output_capabilitiesȱ(zero-fill FUN_1008_0f2e `1028:43ea:undefined2[2]!5/c 1028:43ed 2 zero-fill% wave_output_capabilitiesȱ(zero-fill FUN_1008_0f2e `1028:43ec:undefined2[2]!5/1028:43ef 2 zero-fill% wave_output_device_countٳ# zero-fill })1FUN_1008_0f2e 1028:43ee:undefined2[2]!/x1028:43f1 2 zero-fill% wave_output_device_i(!zero-fill FUN_1008_0f2e 1028:43f0:undefined2[2] 1KPڷ 1 zero-fill%/ sound_enabled sound_enabled uint8_t zero-fill }1131 }8_0f2e OSиJ1028:43f2:undefined1[1]!5M|1028:43f3 1 zero-fill%/ sound_playing sound_playing uint8_t zero-fill 0*= a1028:43f3:undefined1[1]!5?q1028:43f4 1 zero-fill% sound_volume_stepλzero-fill FUN_1008_0f2e k1028:43f4:undefined1[1]!/)d5 1028:43f5 1 zero-fill% sound_state_padding sound_state_padding uint8_t zero-fill Byte lies between the verified one-byte volume state and aligned far-pointer array contains no reader or writerq62plicit alignment/padding byte retained so the first sound pointer begins at 43f6. 1028:43f6 1028:43f7 2 zero-fill verified sema%  sound_bufferszero-fill FUN_1008_10e3 N1028:43f6:undefined2[2]!5^8 1028:43f9 2 zero-fill% sound_bufferszero-fill FUN_1008_10e3 N1028:43f8:undefined2[2]!5^a 1028:43fb 2 zero-fill% sound_buffers zero-fillFUN_1008_0f2e N1028:43fa:undefined4[4]!5^1028:43fd 2 zero-fill% sound_buffers&zero-fill FUN_1008_10e3 FUN_1008_0f2e NZe 1028:444d 80 zero-fill% sound_buffers zero-fill NX44e 1028:444f 2 zero-fill% tdkpin_palette_handle5" zero-fill 2q49d FUN_1008_11c5 Q; 1028:444e:undefined2[2]l450 1028:474f 768 zero-fill% tdkpin_palette_rgb tdkpin_palette_rgb uint8_t[256][3] zero-fill All consumers verified: LOGPALETTE RGB projection 1008:11c5) and BITMAPINFO BGR0 projection 1008:13a8p=768-byte RGB triplet table, resource provenance, copy extent, palette-entry projection, RGBQUAD channel reversal, and full read entry ordinal 119; relocation 0578 -> 1028:057c; assembly 1008:255e-2593.; complete verified referring-function closure style=CS_VREDRAW|CS_HREDRAW; wndproc=1008:2219; no class/window extra bytes; application icon and arrow cursor; background brush COLOR_WINDOW+1; no menu; class name TPWinCrt. 1028:057c 1028:0584 verified tpwincrt_class_name tpwincrt_class_name char[9] Static initialized bytes 54 50 57 69 6e 43 72 74 00. Relocation 1028:0578 -> 1028:057c; RegisterClass16 path 1008:2554.; complete verified referring-function closure NUL-terminated TPWinCrt class name used by the verified WNDCLASS16 object. 1028:0586 1028:0587 verified tpwincrt_window_handle g_tpwincrt_window HWND16 Static zero; assigned from every 1008:2219 callback entry. Store at 1008:2230-2233 and all TPWinCrt USER call sites.; complete verified referring-function closure Process-wide TPWinCrt HWND used by painting, caret, scrolling, focus, and teardown paths. 1028:0588 1028:0589 verified tpwincrt_ring_row_origin g_tpwincrt_ring_row_origin uint16_t Static zero; advanced/wrapped at bottom-row line advance. Verified circular addressing and scrolling tests.; complete verified referring-function closure Exact circular physical-row origin. 1028:058a 1028:058b verified tpwincrt_input_count g_tpwincrt_input_count uint16_t Static zero; incremented by WM_CHAR and decremented by blocking dequeue. Verified enqueue, poll, wait, dequeue, shift, and overflow paths.; complete verified referring-function closure Exact signed-compared count for the 64-byte queue. 1028:058c 1028:058c verified tpwincrt_window_created g_tpwincrt_window_created uint8_t Static zero; set on create and cleared after destroy. Verified create/destroy and all lazy-window/scroll/shutdown gates.; complete verified referring-function closure Exact process-wide live-window Boolean. 1028:058d 1028:058d verified tpwincrt_has_focus g_tpwincrt_has_focus uint8_t Static zero; set/cleared only by verified 1008:21ba/21ce. Reads in verified caret and size paths; exact focus handlers at 1008:21ba and 21ce.; complete verified referring-function closure Boolean focus state with proven caret ordering. 1028:058e 1028:058e verified tpwincrt_caret_enabled g_tpwincrt_caret_enabled uint8_t Static zero; set only across a blocking input wait. Verified read/wait/focus/resize caret lifecycle.; complete verified referring-function closure Exact Boolean controlling focus-owned caret lifetime. 1028:058f 1028:058f verified tpwincrt_paint_message_active g_tpwincrt_paint_message_active uint8_t Static zero; set only around WM_PAINT drawing. Branch in verified 1008:1779/17e2; stores in 1008:1dcc.; complete verified referring-function closure Selects matched BeginPaint16/EndPaint16 instead of GetDC16/ReleaseDC16. 1028:0590 1028:05bf verified tpwincrt_key_bindings g_tpwincrt_key_bindings TpWinCrtKeyBinding[12] Static 48-byte table represented verbatim in reconstructed/tdkpin_data.c. Binary bytes 1028:0590-05bf; indexed loop disassembly 1008:2170-21b4.; complete verified referring-function closure Ordered bindings for Left/Right/Home/End/Up/Down/PageUp/PageDown with exact Ctrl requirement, horizontal/vertical axis, and Win16 scroll command. 1028:05cc 1028:0609 verified object_windows_base_message_table g_object_windows_base_message_table ObjectWindowsMessageTable9 Static parent/cache zero, count 9, ids 0115,0114,0111,0010,0002,0082,0006,0011,0014, and nine relocated far handlers. Binary bytes; relocations 1028:05e6-0606; verified resolver and focused message/command/scroll tests.; complete verified referring-function closure Exact 62-byte mutable-cache table layout represented in C; all nine handler functions and every id-to-address mapping are now verified. 1028:0222 1028:022b verified tdkpin_module_name tdkpin_module_name char[10] "Static NUL-terminated bytes ""FLIPPER3D""." Binary bytes; verified multimedia initialization call 1000:0100; path locator input tests.; complete verified referring-function closure Exact module-name far argument used while locating CTL3D relative to the executable. 1028:022c 1028:0244 verified tdkpin_application_title tdkpin_application_title char[25] "Static NUL-terminated bytes ""TDK Pinball Machine 1.00""." Binary bytes; verified MainWindow constructor and second-instance MessageBox frames.; complete verified referring-function closure Exact application/window title and refusal-dialog caption. 1028:0245 1028:025f verified tdkpin_already_running_text tdkpin_already_running_text char[27] "Static OEM/ANSI bytes ""Der Flipper läuft bereits!"" plus NUL." Binary bytes; verified second-instance MessageBox frame 1000:0144-015f.; complete verified referring-function closure Exact German already-running refusal text. 1028:064e 1028:0651 verified object_windows_application g_object_windows_application Win16FarPtr Static null; published by verified 1018:1a61 after root construction. Write at 1018:1a93-1a99; reads in application/window routing across Code1, Code2, and Code4; constructor lifecycle tested.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:066c 1028:066d verified object_windows_thunk_code_selector g_object_windows_thunk_code_selector uint16_t Static zero; updated to each newly allocated thunk pool's executable selector. Disassembly 1018:01dc-02f9; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure Stored in the next pool's header before replacement and used as the current pool selector lifecycle marker. 1028:0666 1028:0669 verified win16_message_box g_win16_message_box Win16FarPtr NE loader relocation binds USER ordinal 1 at startup. Relocation record 139; all indirect readers inventoried; verified application-error call 1018:1f14 and focused test.; complete verified referring-function closure Process-wide far import pointer for MessageBox16; argument semantics at the reconstructed ObjectWindows call site are exact. 1028:066e 1028:0671 verified object_windows_free_thunk g_object_windows_free_thunk Win16FarPtr Static null; populated with 35 generated thunks per 256-byte pool. Disassembly 1018:01dc-0340; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure Exact LIFO head across pool construction, allocation, release, and reallocation; each free thunk stores the previous far head at +3. 1028:0672 1028:0675 verified object_windows_dispatch_proc g_object_windows_dispatch_proc Win16FarPtr Static null; assigned the MakeProcInstance16 result by 1018:1a61 and consumed by new thunk pools. Verified constructor write, thunk-pool copy/use, destructor FreeProcInstance, and focused application/thunk tests.; complete verified referring-function closure Shared procedure reached by every generated bound thunk; exact MakeProcInstance/FreeProcInstance ownership lifecycle is represented. 1028:0676 1028:0679 verified object_windows_creating_object g_object_windows_creating_object Win16FarPtr Published immediately before native creation and consumed by bootstrap WNDPROC 1018:018b. Verified writer 1018:134f, bootstrap reader/transition, exact extent, and creation tests.; complete verified referring-function closure Exact temporary object handoff until HWND-to-object thunk binding completes. 1028:067a 1028:067d verified object_windows_selector_property object_windows_selector_property_name char[4] Static initialized bytes 4f 57 31 00. TDKPIN.EXE data bytes; SetProp16 call at 1018:004a-0059.; complete verified referring-function closure NUL-terminated property name OW1; stores the bound object's selector. 1028:067e 1028:0681 verified object_windows_offset_property object_windows_offset_property_name char[4] Static initialized bytes 4f 57 32 00. TDKPIN.EXE data bytes; SetProp16 call at 1018:005a-0069.; complete verified referring-function closure NUL-terminated property name OW2; stores the bound object's offset. 1028:0682 1028:0685 verified object_windows_message_hook g_object_windows_message_hook Win16FarPtr Static null far pointer; the target image contains no writer. Complete Ghidra reference inventory: reads only at 1018:0127, 015f, and 08de; binary zero bytes; reconstructed/tests/test_message_dispatch.c; complete verified referring-function closure Optional generic ObjectWindows instrumentation hook. Normal TDKPIN execution always skips it because the selector word at 0684 remains zero; nonnull semantics are nevertheless reconstructed and branch-tested. 1028:0686 1028:068a verified object_windows_thunk_template object_windows_thunk_template uint8_t[5] Static bytes 5b 2e c4 1f ea copied to each generated code block at offset +2. Binary bytes; disassembly 1018:020e-0226; reconstructed/tests/test_bound_thunks.c; complete verified referring-function closure POP BX; CS:LES BX,[BX]; JMP FAR immediate template: consumes the CALL return address, loads the embedded bound object, and jumps through the shared dispatch procedure appended at +7. 1028:068c 1028:0697 verified object_windows_turbo_window_class_name object_windows_turbo_window_class_name char[12] "Static NUL-terminated bytes ""TurboWindow""." Binary bytes; four TWindow-derived VMTs select 1018:0d6a at +0x2c; focused far-pointer test.; complete verified referring-function closure Exact registered class-name provider for the shared ObjectWindows window implementation. 1028:0698 1028:06b2 verified object_windows_error_format object_windows_error_format char[27] "Static NUL-terminated bytes ""Error code = %d. Continue?""." Binary bytes and verified wvsprintf call at 1018:1f20-1f2c; reconstructed/tests/test_application_windows.c; complete verified referring-function closure Signed decimal application error prompt; the sole conversion consumes the caller's uint16 word as int16. 1028:06b3 1028:06c4 verified object_windows_error_caption object_windows_error_caption char[18] "Static NUL-terminated bytes ""Application Error""." Binary bytes and verified indirect MessageBox call at 1018:1f2f-1f3e.; complete verified referring-function closure Exact caption for the ObjectWindows application error prompt. 1028:06fc 1028:06fd verified win16_previous_instance g_win16_previous_instance HINSTANCE16 Initialized from the hPrevInstance startup word by 1020:0002. Startup write in 1020:0002; first-instance branch in verified 1018:1a61; reconstructed/tests/test_application.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:06fe 1028:06ff verified win16_instance g_win16_instance HINSTANCE16 Initialized from the current Win16 task instance by 1020:0002. 34 readers across resource/window/module paths; verified MakeProcInstance argument in 1018:1a61.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0700 1028:0701 verified win16_show_command g_win16_show_command uint16_t Initialized from DX by Win16 startup 1020:0002. Startup write at 1020:0015; read by verified application initialization 1018:1b57; reconstructed/tests/test_application.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0702 1028:0705 verified borland_command_line g_borland_command_line Win16FarPtr Initialized exactly from startup ES:BX by verified 1020:0002. Verified startup capture and command-token scanner 1020:0871; reconstructed/tests/test_borland_startup.c; complete verified referring-function closure Exact far pointer to the NUL-terminated DOS command tail, including independent selector and wrapping offset semantics. 1028:0706 1028:0707 verified borland_heap_segment_head g_borland_heap_segment_head uint16_t Static zero; points to current selector in the circular local-heap segment ring. Reads/writes in 1020:0167, 0195, 023c, 026a, 02d7; reconstructed/tests/test_heap_core.c; reconstructed/tests/test_heap_paths.c; complete verified referring-function closure Circular insertion, successful-segment rotation, predecessor unlink, and final zeroing are represented and verified across one- and two-segment lifecycles. 1028:0708 1028:0709 verified borland_local_heap_limit g_borland_local_heap_limit uint16_t Static value 0x0400. Threshold branches in 1020:01ca; reconstructed/tests/test_heap_paths.c; complete verified referring-function closure Below-threshold local-first and above-threshold global-first paths, including fallback, are represented and branch-tested. 1028:070a 1028:070b verified borland_heap_segment_bytes g_borland_heap_segment_bytes uint16_t Static value 0x2000. Header/free-size construction and full-segment release tests.; complete verified referring-function closure Exact 8-KiB local heap segment allocation size. 1028:06f4 1028:06f5 verified borland_heap_reserve_size g_borland_heap_reserve_bytes uint16_t Static value 0x2000. Binary bytes and reads in 1008:2dff/2e22.; complete verified referring-function closure Configured 8-KiB emergency heap reserve size. 1028:06f6 1028:06f9 verified borland_heap_reserve g_borland_heap_reserve Win16FarPtr Static null; allocated by 2dff and cleared by 2e22. Verified null/allocation/free/clear lifecycle tests for 1008:2de0, 2dff, and 2e22.; complete verified referring-function closure Emergency allocation released on OOM so the allocator can retry; underlying allocator is tracked separately. 1028:06fa 1028:06fa verified borland_heap_reserve_disabled g_borland_heap_reserve_disabled uint8_t Static zero. Branch in 1008:2e22 and writers in runtime setup/teardown.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:070c 1028:070d verified borland_global_alloc_flags g_borland_global_alloc_flags uint16_t Static value 2. Push at 1020:0222 and verified GlobalAlloc16 argument test.; complete verified referring-function closure Exact flags passed for Borland global heap blocks. 1028:070e 1028:0711 verified borland_heap_error_handler g_borland_heap_error_handler Win16FarPtr Set by 1008:2e76 relocation to 1008:2e22. Verified NE-segment binding to selector:2e22; indirect call at 1020:020c-0210.; complete verified referring-function closure Allocator callback returns 0 stop, 1 no retry, or 2 retry after emergency-reserve release. 1028:0712 1028:0715 verified borland_exit_proc g_borland_exit_proc Win16FarPtr Static zero; mutable ExitProc head. Reads/clears in 1020:00d2; writers throughout shutdown setup.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0716 1028:0717 verified borland_exit_code g_borland_exit_code_word uint16_t Static zero; AX store on runtime-exit entry. Stores/reads in 1020:0061 and related runtime entries.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0718 1028:071b verified borland_error_location g_borland_error_location struct BorlandErrorLocation Static zero; cleared by Halt and populated by run-error paths. Reads/writes in 1020:0002, 005d, 0061, and runtime error helpers.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:071c 1028:071d verified borland_windows_mode g_borland_windows_mode uint16_t Initialized from startup ES by verified 1020:0002. Verified startup capture, termination consumer 1020:0061, and focused tests.; complete verified referring-function closure Exact Win16 selector-valued mode word; nonzero selects ExitProc execution and GUI error reporting. 1028:071e 1028:071f verified borland_io_result g_borland_io_result _Atomic uint16_t Static zero; 1020:0388 uses one locked-equivalent XCHG read-and-clear. Atomic exchange in verified 1020:0388; reads/writes in runtime I/O and ExitProc paths.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0720 1028:0723 verified borland_random_seed g_borland_random_seed uint32_t Static zero; seeded from DOS time and advanced by the verified LCG. Reads/writes in 1020:14a4, 14c1, 14de, 1501, and 1539; multiplier 0x08088405 proved from assembly.; complete verified referring-function closure Exact modulo-2^32 Borland RandSeed state, stored low word then high word. 1028:0724 1028:0725 verified borland_huge_pointer_increment g_borland_huge_pointer_increment uint16_t Assigned the relocated KERNEL ordinal 114 equate __AHINCR by verified startup. Relocation 5:4 at 1020:0051; Wine 11.15 __AHINCR=8; reconstructed/tests/test_borland_startup.c; complete verified referring-function closure Exact selector increment used by Borland huge-pointer normalization; this import is runtime data, not a callable function. 1028:0726 1028:0726 verified borland_cpu_level g_borland_cpu_level uint8_t Set by verified startup from returned GetWinFlags AL. Verified startup branches and consumers 1020:08a9, 08e6, 098c, and 09af; arithmetic and startup tests.; complete verified referring-function closure Exact levels 0 for 086/186, 1 for 286, and 2 for 386-plus instruction selection. 1028:0727 1028:0727 verified borland_file_mode g_borland_file_mode uint8_t Static value 2. Binary byte; sole read by verified generic open entry 1020:06ab; focused DOS-open test.; complete verified referring-function closure Exact DOS AH=3d access mode passed for nonempty generic-file names. 1028:0728 1028:0747 verified borland_runtime_error_text g_borland_runtime_error_text char[32] Static string Runtime error 000 at 0000:0000. including NUL. TDKPIN.EXE bytes; fixed write endpoints 0739, 0741, 0746 in 1020:0061.; complete verified referring-function closure Mutable decimal error-code and uppercase hexadecimal segment/offset fields are written backward into fixed placeholders before MessageBox16. 1028:07c4 1028:07c4 verified palette_update_active g_palette_update_active uint8_t Zero-filled; reset by variant A wParam zero and set before synchronous invalidate/update in both verified handlers. All palette-message readers/writers 1000:58e7,5956,59a0,5a37 are verified; palette message tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cb 1028:07cb verified scene_ready g_scene_ready uint8_t Zero-filled; set to one after verified scene redraw, score/status update, and DC release in 1000:5390. Verified writer 1000:5390; asset-initializer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cc 1028:07cc verified assets_pending g_assets_pending uint8_t Set during game initialization; nonzero selects the verified one-time asset-loading phase and is cleared at loading stage 34. Verified reader/clear in 1000:5390; asset-initializer tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07cd 1028:07ce verified board_index g_board_index uint16_t Zero-filled; selects DAT resource 1000+value in verified 1000:6129. Verified setup reader; reconstructed/tests/test_board_overlay.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:07d1 1028:07d1 verified current_player g_current_player uint8_t Zero-filled; values 1..4 identify the active player and zero disables the status display. Verified gating/index use in 1008:0b9e; status tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0867 1028:0868 verified overlay_bitmap g_overlay_bitmap HBITMAP16 Zero-filled; assigned by verified DAT loaders 1000:5be5/6129 and deleted by verified destructors 5ba6/60e7 without clearing the slot. Complete verified setup/destructor, 616e 640x460 drawing, and 5c13 high-score source-region lifecycle; overlay and high-score tests; complete verified referring-function closure ExactEA global HBITMAP provenance, replacement, 32/204 high-score source, whole-overlay drawing, and ownership endpoints are fully proven. 1028:085b 1028:085c verified background_bitmap g_background_bitmap HBITMAP16 Zero-filled; assigned DAT 998 by verified asset initialization and selected by all verified low-level background blits. Verified writer and readers 1008:07b6,0837,08bb,093f,0996/1000:5390; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:085d 1028:085e verified background_overlay_b g_background_overlay_b HBITMAP16 Zero-filled; assigned DAT 998 by verified asset initialization and consumed only by verified restore variant B. Complete writer/reader inventory 1000:5390 and 1008:08bb; asset/render tests.; complete verified referring-function closure Exact overlay-B resource, publication, restore role, and DGROUP extent are fully proven. 1028:085f 1028:0860 verified background_overlay_a g_background_overlay_a HBITMAP16 Zero-filled; assigned DAT 997 by verified asset initialization and consumed only by verified restore variant A. Complete writer/reader inventory 1000:5390 and 1008:0837; asset/render tests.; complete verified referring-function closure Exact overlay-A resource, publication, restore role, and DGROUP extent are fully proven. 1028:0861 1028:0862 verified digit_sprite_bitmap g_digit_sprite_bitmap HBITMAP16 Zero-filled; assigned BITMAP resource 500 by verified asset initialization and consumed by verified score renderer. Complete writer/reader inventory 1000:5390 and 1008:0996; asset/score tests.; complete verified referring-function closure Exact HBITMAP slot, resource ID, 16-pixel horizontal digit stride, and 28x16 SRCAND use are fully proven. 1028:0859 1028:085a verified dat600_bitmap g_dat600_bitmap HBITMAP16 Zero-filled; assigned DAT resource 600 at loading stage 33 by verified asset initialization. Complete verified load/render/delete lifecycle 1000:5390,6f27,7440,51f5; mechanism and panel-animation tests; complete verified referring-function closure Exact DAT600 atlas provenance, 91-pixel target frames, panel-animation mask/image regions, publication, and ownership lifecycle are fully proven. 1028:0863 1028:0864 verified claw_sprite_bitmap g_claw_sprite_bitmap HBITMAP16 Zero-filled; assigned DAT resource 900 at loading stage 29 and deleted at asset shutdown. Complete writer/reader/deletion inventory 1000:5390,1008:0e08,1000:51f5; asset/claw/cleanup tests; complete verified referring-function closure Exact resource, atlas geometry, frame mapping, publication, rendering, and ownership lifecycle are fully proven. 1028:0865 1028:0866 verified board_decoration_bitmap g_board_decoration_bitmap HBITMAP16 Zero-filled; assigned DAT resource 901 at loading stage 32 and deleted during asset shutdown without clearing the slot. Complete verified lifecycle 1000:5390,638e,6b37,51f5; asset, key-release, gameplay-helper, and cleanup tests; complete verified referring-function closure Exact DAT901 provenance, launch-decoration and velocity-row atlas geometry, presentation, and ownership endpoint are fully proven. 1028:086b 1028:086c verified displayed_status_level g_displayed_status_level uint16_t Zero-filled; initialized/reset to 99 and assigned computed levels 0..4 by verified status renderer. All renderer reads/writes in 1008:0b9e verified; status tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:0982 1028:0991 verified player_scores g_player_scores int32_t[4] Zero-filled; initialized/reset by game setup and updated by scoring paths. Verified one-based reader 1008:0996; score-render tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:431b 1028:4322 verified status_level_bitmaps g_status_level_bitmaps HBITMAP16[4] Zero-filled; DAT resources 701..704 are loaded one-based by verified asset initialization. Complete writer/reader/deletion inventory in 1000:5390,1008:0b9e,1000:51f5; asset/status/cleanup tests; complete verified referring-function closure Exact four HBITMAP slots, resource mapping, threshold-level mapping, primary 146x142 blit use, and ownership lifecycle are fully proven. 1028:430b 1028:431a verified sprite_bitmaps_400_407 g_sprite_bitmaps_400_407 HBITMAP16[8] Zero-filled; DAT resources 400..407 are loaded zero-based at stages 7..14 and deleted zero-based at shutdown. Verified writer/deletion and ID order; asset initializer/cleanup tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4323 1028:4334 verified item_bitmaps_801_809 g_item_bitmaps_801_809 HBITMAP16[9] Zero-filled; DAT resources 801..809 are loaded and deleted one-based. Verified writer/deletion and ID order; asset initializer/cleanup tests; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4263 1028:430a verified tdkpin_word_quads g_tdkpin_word_quads TdkpinWordQuad[21] Zero-filled table; setup 1000:0270 writes indices 1..20 through verified 1008:0787. Twenty direct calls with exact constants; byte-complete zero-fill range and writer tests.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:43be 1028:43ed verified wave_output_capabilities wave_output_capabilities WAVEOUTCAPS16 Zero-filled 48-byte buffer populated by waveOutGetDevCaps for device zero. Windows 3.1 packed field offsets; call 1008:0fca-0fda; dwSupport read at 1008:0fe6-0ffe; strict size assertion and reconstructed/tests/test_sound.c; complete verified referring-function closure Exact Win16 layout is wMid, wPid, 16-bit driver version, 32-byte name, formats, channels, and support; WAVECAPS_VOLUME is bit 4 at offset 44. 1028:43ee 1028:43ef verified wave_output_device_count wave_output_device_count uint16_t Zero-filled; assigned from waveOutGetNumDevs and reset on entry or capability-query failure. Complete verified lifecycle in 1008:0f2e,10e3,1131,118f and sound-toggle reader 1000:638e; reconstructed/tests/test_sound.c and test_key_release.c; complete verified referring-function closure The word is the actual device count, not a Boolean initialized flag; nonzero permits keyboard re-enabling after sound has been disabled. 1028:43f0 1028:43f1 verified wave_output_device_id wave_output_device_id uint16_t Static zero and never written in the image. Reads before the sole waveOutGetDevCaps and waveOutGetVolume calls at 1008:0fca and 1008:1008; reconstructed/tests/test_sound.c; complete verified referring-function closure Selects wave-output device zero for both capability and volume queries. 1028:43f2 1028:43f2 verified sound_enabled sound_enabled uint8_t Zero-filled; cleared on every sound initialization entry, set after successful capability/resource setup, and toggled by F12 only when a device exists. Complete verified readers/writers 1008:0002,0f2e,1131 and 1000:638e; sound and key-release tests; complete verified referring-function closure Exact Boolean enable lifecycle, playback gates, disable behavior, and device-gated re-enable behavior are fully proven. 1028:43f3 1028:43f3 verified sound_playing sound_playing uint8_t Zero-filled; cleared by initialization/unload and assigned from sndPlaySound's BOOL16 result. All reads/writes in verified 1008:0f2e, 10e3, 1131, and 118f; reconstructed/tests/test_sound.c; complete verified referring-function closure Exact current-playing flag, including stop-without-clear behavior in 118f and failure-to-play clear in 1131. 1028:43f4 1028:43f4 verified sound_volume_step sound_volume_step uint8_t Zero-filled; set to ff when volume control is unsupported, otherwise the left-channel high byte rounded down to a multiple of ten. Disassembly 1008:0fe6-102e; exact byte extraction/divide/multiply path; reconstructed/tests/test_sound.c; complete verified referring-function closure Written during successful initialization and otherwise retained; no in-image reader exists. 1028:43f5 1028:43f5 verified sound_state_padding sound_state_padding uint8_t Zero-filled and never referenced directly. Byte lies between the verified one-byte volume state and aligned far-pointer array; complete reference inventory contains no reader or writer.; complete verified referring-function closure Explicit alignment/padding byte retained so the first sound pointer begins at 43f6. 1028:43f6 1028:444d verified sound_buffers sound_buffers Win16FarPtr[22] Zero-filled; sound setup stores locked global-memory blocks for resource numbers 2001..2022. All indexed accesses in verified 1008:0f2e, 10e3, and 1131; exact one-based addressing and focused lifecycle tests in reconstructed/tests/test_sound.c; complete verified referring-function closure Exact 22 far-pointer slots, load overwrite behavior, inclusive release order, lack of pointer clearing, and play selection are represented. 1028:444e 1028:444f verified tdkpin_palette_handle tdkpin_palette_handle HPALETTE16 Zero-filled; assigned the CreatePalette16 result by verified 1008:11c5. Complete reader inventory spans rendering/window functions; verified writer and bitmap loader 1008:149d; reconstructed/tests/test_palette.c; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4450 1028:474f verified tdkpin_palette_rgb tdkpin_palette_rgb uint8_t[256][3] Zero-filled then overwritten byte-for-byte from custom PAL resource 999 by verified 1008:1326. All consumers verified: LOGPALETTE RGB projection 1008:11c5 and BITMAPINFO BGR0 projection 1008:13a8; reconstructed/tests/test_palette.c; complete verified referring-function closure Exact 768-byte RGB triplet table, resource provenance, copy extent, palette-entry projection, RGBQUAD channel reversal, and full read/write inventory are proven. 1028:4750 1028:477b verified multimedia_procedures g_multimedia_procedures Win16FarPtr[11] Static zero; populated in exact CTL3D name order by verified loader 1010:01c2. Verified load/use/legacy-slot-8/clear lifecycle and focused tests.; complete verified referring-function closure Slots are AutoSubclass, ColorChange, CtlColorEx, Enabled, DlgFramePaint, GetVer, Register, SubclassDlg, SubclassDlgEx, SubclassCtl, Unregister. 1028:477c 1028:477d verified multimedia_version g_multimedia_version uint16_t Static zero; assigned from CTL3DGETVER after successful registration. Verified loader version >=9 gate and version-8 cleanup test.; complete verified referring-function closure Exact CTL3D compatibility version word. 1028:477e 1028:477e verified multimedia_auto_subclassed g_multimedia_auto_subclassed uint8_t Static zero; set from CTL3DAUTOSUBCLASS only on modern/nonzero-request path. Verified modern success and legacy/disabled zero branches.; complete verified referring-function closure Boolean records whether process auto-subclassing succeeded. 1028:477f 1028:477f verified multimedia_argument_2 g_multimedia_argument_2 uint8_t Stored from loader second byte argument after full initialization. Disassembly 1010:0373; focused export/loader test.; complete verified referring-function closure Exact parameter publication order is second argument first. 1028:4780 1028:4780 verified multimedia_argument_1 g_multimedia_argument_1 uint8_t Stored from loader first byte argument after full initialization. Disassembly 1010:0376; focused export/loader test.; complete verified referring-function closure Exact parameter publication order is second argument then first. 1028:4781 1028:4782 verified multimedia_module g_multimedia_module HINSTANCE16 Static zero; assigned by LoadLibrary16 and retained after FreeLibrary16. Verified <32 error, modern/legacy load, failure unload, and explicit cleanup tests.; complete verified referring-function closure Unaligned module handle; values below 32 are Win16 load errors rather than unloadable handles. 1028:4783 1028:4783 verified multimedia_pending g_multimedia_pending uint8_t Static zero; cleared by unit startup and every exported initialization return. Verified stores in 1010:03af/0472 and multimedia tests.; complete verified referring-function closure Exact transient pending byte; no reader exists in this image. 1028:4784 1028:4784 verified multimedia_initialized g_multimedia_initialized uint8_t Static zero; set only after Register, GetVer >=9, and Enabled all succeed; cleared by cleanup. Complete verified loader/finalizer/unload lifecycle and branch tests.; complete verified referring-function closure Gates every dynamic helper use with exact boolean semantics. 1028:478a 1028:478b verified multimedia_windows_version g_multimedia_windows_version uint16_t Low word returned by GetVersion16 during unit startup. Verified 3.0/3.10/4.0 major-minor branches and startup tests.; complete verified referring-function closure Low-byte major, high-byte minor; upper GetVersion word is discarded. 1028:478c 1028:478c verified multimedia_legacy_windows g_multimedia_legacy_windows uint8_t Set exactly for Windows 3.0 through 3.9. Verified writer and all loader branch consumers.; complete verified referring-function closure Selects path probing, legacy procedure policy, and AutoSubclass suppression. 1028:478d 1028:47a1 verified multimedia_library_path g_multimedia_library_path char[21] Zero-fill; populated with CTL3DV2.DLL or CTL3D.DLL according to exact existence policy. Verified unit writer, loader readers, all selection branches, and tests.; complete verified referring-function closure Exact 21-byte NUL-terminated selected DLL basename/path buffer. 1028:47a2 1028:47a3 verified multimedia_system_directory_length g_multimedia_system_directory_length uint16_t Return from GetSystemDirectory16 with maximum 200. Verified zero/nonzero path-probe gate and tests.; complete verified referring-function closure Exact length for adjacent system-directory buffer. 1028:47a4 1028:486b verified multimedia_system_directory g_multimedia_system_directory char[200] Zero-fill; populated by GetSystemDirectory16 during unit startup. Verified two ShortString path constructions and maximum size.; complete verified referring-function closure Exact transient NUL-terminated system directory buffer. 1028:486d 1028:496c verified multimedia_ctl3d_full_path g_multimedia_ctl3d_full_path uint8_t[256] "Constructed as system directory + ""\\"" + CTL3D.DLL." Verified ShortString helpers, file probe, and startup tests.; complete verified referring-function closure Exact Pascal ShortString classic DLL full path. 1028:496d 1028:4a6c verified multimedia_ctl3dv2_full_path g_multimedia_ctl3dv2_full_path uint8_t[256] "Constructed as system directory + ""\\"" + CTL3DV2.DLL." Verified ShortString helpers, preferred file probe, and startup tests.; complete verified referring-function closure Exact Pascal ShortString V2 DLL full path. 1028:4a6e 1028:4abd verified tpwincrt_window_title g_tpwincrt_window_title char[80] Zero-fill; populated with the module filename and converted in-place OEM to ANSI. Verified unit initialization, CreateWindow title, ExitProc formatting, and lifecycle tests.; complete verified referring-function closure Exact TPWinCrt application caption buffer. 1028:4abe 1028:4ac1 verified tpwincrt_saved_exit_proc g_tpwincrt_saved_exit_proc Win16FarPtr Zero-fill; receives the prior Borland ExitProc. Verified predecessor save/restore ordering and lifecycle tests.; complete verified referring-function closure Exact mutable ExitProc chain link. 1028:4ac2 1028:4ac5 verified tpwincrt_screen_buffer g_tpwincrt_screen_buffer Win16FarPtr Static zero; allocated on WM_CREATE and released on WM_DESTROY. Verified allocation/fill, circular readers, free/clear lifecycle, and tests.; complete verified referring-function closure Exact far pointer to columns*rows character cells. 1028:4ac6 1028:4ad3 verified tpwincrt_view_metrics g_tpwincrt_view_metrics struct TpWinCrtViewMetrics Static zero; populated from client size/font metrics. All arithmetic, caret, paint, scroll, size, and initialization paths are verified.; complete verified referring-function closure Seven exact uint16 fields: visible dimensions, max origins, character dimensions, and caret y offset. 1028:4ad4 1028:4ad5 verified tpwincrt_paint_dc g_tpwincrt_paint_dc HDC16 Static zero; assigned by GetDC16 or BeginPaint16. Verified 1008:1779/17e2 and paint/render consumers.; complete verified referring-function closure Exact object boundary, type, initialization, and full in-image reader/writer lifecycle are verified. 1028:4ad6 1028:4af5 verified tpwincrt_paint_struct g_tpwincrt_paint PAINTSTRUCT16 Zero-filled persistent structure populated by BeginPaint16. Wine 11.15 PAINTSTRUCT16 layout; fixed pointer in 1008:1779/17e2; rcPaint reads in verified 1008:1dcc.; complete verified referring-function closure Exact HDC, erase flag, RECT16, restore/update flags, and 16 reserved bytes; extent ends immediately before saved font at 4af6. 1028:4af6 1028:4af7 verified tpwincrt_previous_font g_tpwincrt_previous_font HGDIOBJ16 Static zero; receives SelectObject16 result. Verified paired stores/reads in 1008:1779 and 17e2.; complete verified referring-function closure Stock-font replacement is restored exactly before releasing the drawing context. 1028:4af8 1028:4b37 verified tpwincrt_input_buffer g_tpwincrt_input_buffer uint8_t[64] Zero-filled DGROUP storage. Verified append, signed-capacity suppression, blocking dequeue, overlapping shift, line editing, and focused tests.; complete verified referring-function closure Exact fixed 64-byte FIFO input queue. zx,# TDKPIN.EXE decompilation ## Target - File: `TDKPIN.EXE` - SHA-256: `a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c` - Format: Windows 3.x New Executable (NE), 16-bit protected-mode x86 - NE entry point: segment 1, offset `fd85` (Ghidra address `1000:fd85`) - Image: five executable segments, one data segment, and 63 resource blocks - Companion import: `MMTIMER.DLL` The executable contains a Borland runtime copyright string, but it does not retain useful original function or variable names. The `FUN_...` and `DAT_...` names in the output are therefore analysis-generated identifiers. ## Outputs - `TDKPIN_GHIDRA_RAW.c`: preserved initial Ghidra export; immutable evidence. - `TDKPIN_GHIDRA_COMPLETE_RAW.c`: separate regenerated C-like Ghidra output for every currently recovered in-image function, with Win16 import signatures applied. - `TDKPIN_PHYSICS_RESTORED.c` and `TDKPIN_MECHANICS_RESTORED.c`: preserved historical partial transcriptions, explicitly superseded by the complete address-linked modules under `reconstructed/`. - `FUNCTIONS.tsv` and `COVERAGE.tsv`: preserved inventories paired with the initial raw export. - `COMPLETE_FUNCTIONS.tsv` and `COMPLETE_COVERAGE.tsv`: regenerated inventories paired with `TDKPIN_GHIDRA_COMPLETE_RAW.c`. - `BINARY_FUNCTIONS.tsv`: function extents, segments, provisional conventions, and signatures. - `REFERENCES.tsv`, `DEFINED_DATA.tsv`, and `SYMBOLS.tsv`: reproducible call/data evidence. - `UNEXPLAINED.tsv`: exact classification of bytes not representable by a normal non-overlapping Ghidra code/data unit. - `FUNCTION_RECONSTRUCTION.tsv`: semantic reconstruction status for every in-image function. - `OBJECTS.tsv`: all 175 initialized collision/rule records, including geometry, Real48 response values, flags, layers, scores, and render bounds. - `tools/ExportDecompilation.java`: deterministic decompiler exporter. - `tools/SeedMissingEntrypoints.java`: classifies compiler data and seeds missed NE/runtime entries. - `tools/ExportProgramEvidence.java`: regenerates function metadata, references, data, symbols, and exceptional executable-byte evidence. - `tools/AuditCoverage.java`: regenerates the byte-coverage audit. - `tools/decompile.sh`: runs the import, repair, export, and audit from scratch. - `tools/dump_original_objects.py`: regenerates the initialized object ledger from a traceable Wine process without patching the executable. ## Accounting - 301/301 NE exported entry points have corresponding in-image functions. - 90 additional internal/startup/runtime functions were recovered. - 391 in-image functions were submitted to the decompiler. - 391 produced C-like output; none returned a decompiler failure. - 292 imported Win16 APIs are recorded separately and are not represented as fake bodies. - 92,780 bytes are disassembled instructions and 282 bytes are embedded compiler data. - 93,062/93,064 executable-segment bytes have non-overlapping Ghidra code/data units. - The remaining two bytes are fully classified in `UNEXPLAINED.tsv`: one is the first opcode byte of an overlapping Borland alternate entry at `1020:0666`, and one is an alignment NOP at `1020:0dea`. Ghidra's initial NE analysis missed export ordinal 10 at `1000:eab1` and the program entry at `1000:fd85`, plus 28 entries in the Borland runtime segment. Each added entry was verified from prologue/control-flow/return bytes or a direct recovered call target before being submitted to the decompiler. ## Fidelity boundary `TDKPIN_GHIDRA_RAW.c` remains an immutable decompilation artifact rather than the readable deliverable. Its guessed types and names are intentionally preserved as evidence. The separate modules under `reconstructed/` now provide the address-linked C reconstruction; their completeness, typed data/import/resource ledgers, strict host harnesses, and focused live Wine comparisons are tracked in `RECONSTRUCTION_PROGRESS.md`. No claim is made that rebuilding those portable semantic modules reproduces a byte-identical Borland NE image. x xl*address block length data_type label value 1000:0000 Code1 2 word[1] code_segment_1_tag - 1000:026e Code1 2 word[1] code1_embedded_word_026e - 1008:0000 Code2 2 word[1] code_segment_2_tag - 1008:0f2c Code2 2 word[1] code2_embedded_word_0f2c - 1008:11bd Code2 8 word[4] code2_embedded_words_11bd - 1008:131e Code2 8 word[4] code2_embedded_words_131e - 1010:0000 Code3 2 word[1] code_segment_3_tag - 1010:0470 Code3 2 word[1] code3_embedded_word_0470 - 1018:0000 Code4 2 word[1] code_segment_4_tag - 1020:0000 Code5 2 word[1] code_segment_5_tag - 1020:0107 Code5 38 byte[38] borland_runtime_copyright - 1020:1191 Code5 42 byte[42] real48_table_1191 - 1020:1240 Code5 36 byte[36] real48_table_1240 - 1020:12d7 Code5 48 byte[48] real48_table_12d7 - 1020:13e8 Code5 78 byte[78] real48_table_13e8 - 1020:14fb Code5 4 undefined4 DAT_1020_14fb 4F000000h 1020:14ff Code5 2 undefined2 DAT_1020_14ff FFE0h 1020:1537 Code5 2 undefined2 DAT_1020_1537 8405h 1028:0010 Data6 20 string s_IWIKTDK_Highscores_1028_0010 "IWIKTDK Highscores" 1028:0222 Data6 10 string "FLIPPER3D" 1028:022c Data6 25 string "TDK Pinball Machine 1.00" 1028:0253 Data6 13 string "uft bereits!" 1028:026a Data6 64 string "gend freier Speicher. Beenden Sie bitte alle anderen Programme." 1028:02aa Data6 25 string "TDK Pinball Machine 1.00" 1028:02c7 Data6 9 string "Settings" 1028:02d0 Data6 9 string "Language" 1028:02d9 Data6 6 string "Speed" 1028:02df Data6 21 string "No timer available!" 1028:02f4 Data6 12 string "HIGH SCORES" 1028:0306 Data6 11 string "HelpScreen" 1028:0312 Data6 14 string "HiScores.Dat" 1028:0320 Data6 13 string "HiScores.Dat" 1028:032d Data6 8 string "No Name" 1028:0336 Data6 19 string "TDK Pinball Player" 1028:0349 Data6 42 string "Congratulations! This is a Top Ten Score!" 1028:0373 Data6 24 string "Please input your name:" 1028:038b Data6 10 string "HighScore" 1028:0396 Data6 50 string "TDK Pinball Machine needs Windows 3.10 or higher!" 1028:03c8 Data6 25 string "TDK Pinball Machine 1.00" 1028:03ea Data6 2 undefined2 DAT_1028_03ea 189Eh 1028:03ec Data6 2 undefined2 DAT_1028_03ec 0000h 1028:03ee Data6 2 undefined2 DAT_1028_03ee 11F2h 1028:03f0 Data6 2 undefined2 DAT_1028_03f0 0000h 1028:0446 Data6 9 string "Settings" 1028:044f Data6 6 string "Sound" 1028:0462 Data6 8 string "Display" 1028:0470 Data6 18 string "CTL3DAUTOSUBCLASS" 1028:0482 Data6 17 string "CTL3DCOLORCHANGE" 1028:0493 Data6 16 string "CTL3DCTLCOLOREX" 1028:04a3 Data6 13 string "CTL3DENABLED" 1028:04b0 Data6 19 string "CTL3DDLGFRAMEPAINT" 1028:04c3 Data6 12 string "CTL3DGETVER" 1028:04cf Data6 14 string "CTL3DREGISTER" 1028:04dd Data6 17 string "CTL3DSUBCLASSDLG" 1028:04ee Data6 19 string "CTL3DSUBCLASSDLGEX" 1028:0501 Data6 17 string "CTL3DSUBCLASSCTL" 1028:0512 Data6 16 string "CTL3DUNREGISTER" 1028:0538 Data6 2 undefined2 DAT_1028_0538 8000h 1028:053a Data6 2 undefined2 DAT_1028_053a 8000h 1028:053c Data6 2 undefined2 DAT_1028_053c 8000h 1028:053e Data6 2 undefined2 DAT_1028_053e 8000h 1028:0540 Data6 2 undefined2 DAT_1028_0540 0050h 1028:0542 Data6 2 undefined2 DAT_1028_0542 0019h 1028:0544 Data6 2 undefined2 DAT_1028_0544 0000h 1028:0546 Data6 2 undefined2 DAT_1028_0546 0000h 1028:0548 Data6 2 undefined2 DAT_1028_0548 0000h 1028:054a Data6 2 undefined2 DAT_1028_054a 0000h 1028:054c Data6 2 undefined2 DAT_1028_054c 0550h 1028:054e Data6 2 undefined2 DAT_1028_054e 1028h 1028:0550 Data6 14 string "(Inactive %s)" 1028:055e Data6 1 undefined1 DAT_1028_055e 01h 1028:055f Data6 1 undefined1 DAT_1028_055f 00h 1028:0560 Data6 1 undefined1 DAT_1028_0560 01h 1028:056c Data6 2 undefined2 DAT_1028_056c 0000h 1028:056e Data6 2 undefined2 DAT_1028_056e 0000h 1028:0570 Data6 2 undefined2 DAT_1028_0570 0000h 1028:0572 Data6 2 undefined2 DAT_1028_0572 0000h 1028:0578 Data6 2 undefined2 DAT_1028_0578 057Ch 1028:057a Data6 2 undefined2 DAT_1028_057a 1028h 1028:057c Data6 9 string "TPWinCrt" 1028:0586 Data6 2 undefined2 DAT_1028_0586 0000h 1028:0588 Data6 2 undefined2 DAT_1028_0588 0000h 1028:058a Data6 2 undefined2 DAT_1028_058a 0000h 1028:058c Data6 1 undefined1 DAT_1028_058c 00h 1028:058d Data6 1 undefined1 DAT_1028_058d 00h 1028:058e Data6 1 undefined1 DAT_1028_058e 00h 1028:058f Data6 1 undefined1 DAT_1028_058f 00h 1028:0590 Data6 1 undefined1 DAT_1028_0590 25h 1028:0591 Data6 1 undefined1 DAT_1028_0591 00h 1028:0592 Data6 1 undefined1 DAT_1028_0592 00h 1028:0593 Data6 1 undefined1 DAT_1028_0593 00h 1028:0594 Data6 1 undefined1 DAT_1028_0594 27h 1028:0595 Data6 1 undefined1 DAT_1028_0595 00h 1028:0596 Data6 1 undefined1 DAT_1028_0596 00h 1028:0597 Data6 1 undefined1 DAT_1028_0597 01h 1028:064e Data6 4 undefined4 DAT_1028_064e 00000000h 1028:0652 Data6 2 undefined2 DAT_1028_0652 0294h 1028:0654 Data6 2 undefined2 DAT_1028_0654 1228h 1028:0656 Data6 2 undefined2 DAT_1028_0656 0290h 1028:0658 Data6 2 undefined2 DAT_1028_0658 1228h 1028:0666 Data6 2 undefined2 DAT_1028_0666 018Ch 1028:0668 Data6 2 undefined2 DAT_1028_0668 1228h 1028:066a Data6 1 undefined1 DAT_1028_066a 00h 1028:066c Data6 2 undefined2 DAT_1028_066c 0000h 1028:066e Data6 2 undefined2 DAT_1028_066e 0000h 1028:0670 Data6 2 undefined2 DAT_1028_0670 0000h 1028:0672 Data6 2 undefined2 DAT_1028_0672 0000h 1028:0674 Data6 2 undefined2 DAT_1028_0674 0000h 1028:0676 Data6 2 undefined2 DAT_1028_0676 0000h 1028:0678 Data6 2 undefined2 DAT_1028_0678 0000h 1028:0682 Data6 2 undefined2 DAT_1028_0682 0000h 1028:0684 Data6 2 undefined2 DAT_1028_0684 0000h 1028:068c Data6 12 string "TurboWindow" 1028:0698 Data6 27 string "Error code = %d. Continue?" 1028:06b3 Data6 18 string "Application Error" 1028:06f2 Data6 1 undefined1 DAT_1028_06f2 01h 1028:06f4 Data6 2 undefined2 DAT_1028_06f4 2000h 1028:06f6 Data6 2 undefined2 DAT_1028_06f6 0000h 1028:06f8 Data6 2 undefined2 DAT_1028_06f8 0000h 1028:06fa Data6 1 undefined1 DAT_1028_06fa 00h 1028:06fc Data6 2 undefined2 DAT_1028_06fc 0000h 1028:06fe Data6 2 undefined2 DAT_1028_06fe 0000h 1028:0700 Data6 2 undefined2 DAT_1028_0700 0000h 1028:0702 Data6 4 undefined4 DAT_1028_0702 00000000h 1028:0706 Data6 2 undefined2 DAT_1028_0706 0000h 1028:0708 Data6 2 undefined2 DAT_1028_0708 0400h 1028:070a Data6 2 undefined2 DAT_1028_070a 2000h 1028:070c Data6 2 undefined2 DAT_1028_070c 0002h 1028:070e Data6 2 undefined2 DAT_1028_070e 0000h 1028:0710 Data6 2 undefined2 DAT_1028_0710 0000h 1028:0712 Data6 2 undefined2 DAT_1028_0712 0000h 1028:0714 Data6 2 undefined2 DAT_1028_0714 0000h 1028:0716 Data6 1 undefined1 DAT_1028_0716 00h 1028:0718 Data6 2 undefined2 DAT_1028_0718 0000h 1028:071a Data6 2 undefined2 DAT_1028_071a 0000h 1028:071c Data6 2 undefined2 DAT_1028_071c 0000h 1028:071e Data6 2 undefined2 DAT_1028_071e 0000h 1028:0720 Data6 2 undefined2 DAT_1028_0720 0000h 1028:0722 Data6 2 undefined2 DAT_1028_0722 0000h 1028:0724 Data6 2 undefined2 DAT_1028_0724 0000h 1028:0726 Data6 1 undefined1 DAT_1028_0726 00h 1028:0727 Data6 1 undefined1 DAT_1028_0727 02h 1028:0728 Data6 32 string "Runtime error 000 at 0000:0000." 1028:0748 Data6 2 undefined2 DAT_1028_0748 0000h 1028:07bf Data6 2 undefined2 DAT_1028_07bf 0000h 1028:07c1 Data6 2 undefined2 DAT_1028_07c1 0000h 1028:07c4 Data6 1 undefined1 DAT_1028_07c4 00h 1028:07c5 Data6 1 undefined1 DAT_1028_07c5 00h 1028:07c6 Data6 1 undefined1 DAT_1028_07c6 00h 1028:07c7 Data6 1 undefined1 DAT_1028_07c7 00h 1028:07c8 Data6 1 undefined1 DAT_1028_07c8 00h 1028:07c9 Data6 1 undefined1 DAT_1028_07c9 00h 1028:07ca Data6 1 undefined1 DAT_1028_07ca 00h 1028:07cb Data6 1 undefined1 DAT_1028_07cb 00h 1028:07cc Data6 1 undefined1 DAT_1028_07cc 00h 1028:07cd Data6 2 undefined2 DAT_1028_07cd 0000h 1028:07cf Data6 1 undefined1 DAT_1028_07cf 00h 1028:07d0 Data6 1 undefined1 DAT_1028_07d0 00h 1028:07d1 Data6 1 undefined1 DAT_1028_07d1 00h 1028:07d2 Data6 1 undefined1 DAT_1028_07d2 00h 1028:07d3 Data6 2 undefined2 DAT_1028_07d3 0000h 1028:07d5 Data6 2 undefined2 DAT_1028_07d5 0000h 1028:07d7 Data6 2 undefined2 DAT_1028_07d7 0000h 1028:07d9 Data6 2 undefined2 DAT_1028_07d9 0000h 1028:07db Data6 2 undefined2 DAT_1028_07db 0000h 1028:07dd Data6 2 undefined2 DAT_1028_07dd 0000h 1028:07df Data6 2 undefined2 DAT_1028_07df 0000h 1028:07e1 Data6 2 undefined2 DAT_1028_07e1 0000h 1028:07e3 Data6 2 undefined2 DAT_1028_07e3 0000h 1028:07e5 Data6 2 undefined2 DAT_1028_07e5 0000h 1028:07e7 Data6 2 undefined2 DAT_1028_07e7 0000h 1028:07e9 Data6 2 undefined2 DAT_1028_07e9 0000h 1028:07eb Data6 2 undefined2 DAT_1028_07eb 0000h 1028:07ed Data6 2 undefined2 DAT_1028_07ed 0000h 1028:07ef Data6 2 undefined2 DAT_1028_07ef 0000h 1028:07f1 Data6 2 undefined2 DAT_1028_07f1 0000h 1028:07f3 Data6 2 undefined2 DAT_1028_07f3 0000h 1028:07f5 Data6 2 undefined2 DAT_1028_07f5 0000h 1028:07f7 Data6 2 undefined2 DAT_1028_07f7 0000h 1028:07f9 Data6 2 undefined2 DAT_1028_07f9 0000h 1028:07fb Data6 2 undefined2 DAT_1028_07fb 0000h 1028:07fd Data6 2 undefined2 DAT_1028_07fd 0000h 1028:07ff Data6 2 undefined2 DAT_1028_07ff 0000h 1028:0801 Data6 2 undefined2 DAT_1028_0801 0000h 1028:0803 Data6 2 undefined2 DAT_1028_0803 0000h 1028:0805 Data6 2 undefined2 DAT_1028_0805 0000h 1028:0807 Data6 2 undefined2 DAT_1028_0807 0000h 1028:0809 Data6 2 undefined2 DAT_1028_0809 0000h 1028:080b Data6 2 undefined2 DAT_1028_080b 0000h 1028:080d Data6 2 undefined2 DAT_1028_080d 0000h 1028:080f Data6 2 undefined2 DAT_1028_080f 0000h 1028:0811 Data6 2 undefined2 DAT_1028_0811 0000h 1028:0813 Data6 2 undefined2 DAT_1028_0813 0000h 1028:0815 Data6 2 undefined2 DAT_1028_0815 0000h 1028:0817 Data6 1 undefined1 DAT_1028_0817 00h 1028:0818 Data6 1 undefined1 DAT_1028_0818 00h 1028:081b Data6 1 undefined1 DAT_1028_081b 00h 1028:081c Data6 1 undefined1 DAT_1028_081c 00h 1028:0821 Data6 2 undefined2 DAT_1028_0821 0000h 1028:0823 Data6 2 undefined2 DAT_1028_0823 0000h 1028:0829 Data6 2 undefined2 DAT_1028_0829 0000h 1028:082b Data6 2 undefined2 DAT_1028_082b 0000h 1028:082d Data6 2 undefined2 DAT_1028_082d 0000h 1028:082f Data6 2 undefined2 DAT_1028_082f 0000h 1028:0831 Data6 2 undefined2 DAT_1028_0831 0000h 1028:0833 Data6 2 undefined2 DAT_1028_0833 0000h 1028:0835 Data6 2 undefined2 DAT_1028_0835 0000h 1028:0837 Data6 2 undefined2 DAT_1028_0837 0000h 1028:0839 Data6 2 undefined2 DAT_1028_0839 0000h 1028:083b Data6 2 undefined2 DAT_1028_083b 0000h 1028:083d Data6 2 undefined2 DAT_1028_083d 0000h 1028:083f Data6 2 undefined2 DAT_1028_083f 0000h 1028:0849 Data6 2 undefined2 DAT_1028_0849 0000h 1028:084b Data6 2 undefined2 DAT_1028_084b 0000h 1028:084d Data6 2 undefined2 DAT_1028_084d 0000h 1028:084f Data6 2 undefined2 DAT_1028_084f 0000h 1028:0851 Data6 2 undefined2 DAT_1028_0851 0000h 1028:0853 Data6 2 undefined2 DAT_1028_0853 0000h 1028:0855 Data6 2 undefined2 DAT_1028_0855 0000h 1028:0857 Data6 2 undefined2 DAT_1028_0857 0000h 1028:0859 Data6 2 undefined2 DAT_1028_0859 0000h 1028:085b Data6 2 undefined2 DAT_1028_085b 0000h 1028:085d Data6 2 undefined2 DAT_1028_085d 0000h 1028:085f Data6 2 undefined2 DAT_1028_085f 0000h 1028:0861 Data6 2 undefined2 DAT_1028_0861 0000h 1028:0863 Data6 2 undefined2 DAT_1028_0863 0000h 1028:0865 Data6 2 undefined2 DAT_1028_0865 0000h 1028:0867 Data6 2 undefined2 DAT_1028_0867 0000h 1028:0869 Data6 2 undefined2 DAT_1028_0869 0000h 1028:086b Data6 2 undefined2 DAT_1028_086b 0000h 1028:086d Data6 2 undefined2 DAT_1028_086d 0000h 1028:086f Data6 2 undefined2 DAT_1028_086f 0000h 1028:0871 Data6 2 undefined2 DAT_1028_0871 0000h 1028:0873 Data6 1 undefined1 DAT_1028_0873 00h 1028:0874 Data6 1 undefined1 DAT_1028_0874 00h 1028:0875 Data6 1 undefined1 DAT_1028_0875 00h 1028:0876 Data6 2 undefined2 DAT_1028_0876 0000h 1028:0878 Data6 2 undefined2 DAT_1028_0878 0000h 1028:087a Data6 2 undefined2 DAT_1028_087a 0000h 1028:087c Data6 2 undefined2 DAT_1028_087c 0000h 1028:087e Data6 2 undefined2 DAT_1028_087e 0000h 1028:0880 Data6 2 undefined2 DAT_1028_0880 0000h 1028:0882 Data6 2 undefined2 DAT_1028_0882 0000h 1028:0884 Data6 2 undefined2 DAT_1028_0884 0000h 1028:089a Data6 2 undefined2 DAT_1028_089a 0000h 1028:089c Data6 2 undefined2 DAT_1028_089c 0000h 1028:089e Data6 2 undefined2 DAT_1028_089e 0000h 1028:08a0 Data6 2 undefined2 DAT_1028_08a0 0000h 1028:08a2 Data6 2 undefined2 DAT_1028_08a2 0000h 1028:08a4 Data6 2 undefined2 DAT_1028_08a4 0000h 1028:0982 Data6 2 undefined2 DAT_1028_0982 0000h 1028:0984 Data6 2 undefined2 DAT_1028_0984 0000h 1028:0986 Data6 2 undefined2 DAT_1028_0986 0000h 1028:0988 Data6 2 undefined2 DAT_1028_0988 0000h 1028:0992 Data6 2 undefined2 DAT_1028_0992 0000h 1028:0994 Data6 2 undefined2 DAT_1028_0994 0000h 1028:0996 Data6 2 undefined2 DAT_1028_0996 0000h 1028:0998 Data6 2 undefined2 DAT_1028_0998 0000h 1028:09a2 Data6 1 undefined1 DAT_1028_09a2 00h 1028:09a3 Data6 1 undefined1 DAT_1028_09a3 00h 1028:09a6 Data6 2 undefined2 DAT_1028_09a6 0000h 1028:09a8 Data6 2 undefined2 DAT_1028_09a8 0000h 1028:09e2 Data6 1 undefined1 DAT_1028_09e2 00h 1028:09f1 Data6 2 undefined2 DAT_1028_09f1 0000h 1028:09f7 Data6 2 undefined2 DAT_1028_09f7 0000h 1028:0a01 Data6 1 undefined1 DAT_1028_0a01 00h 1028:0a02 Data6 1 undefined1 DAT_1028_0a02 00h 1028:0a03 Data6 2 undefined2 DAT_1028_0a03 0000h 1028:0a05 Data6 2 undefined2 DAT_1028_0a05 0000h 1028:0a07 Data6 2 undefined2 DAT_1028_0a07 0000h 1028:0a09 Data6 2 undefined2 DAT_1028_0a09 0000h 1028:0a0b Data6 2 undefined2 DAT_1028_0a0b 0000h 1028:0a0d Data6 2 undefined2 DAT_1028_0a0d 0000h 1028:0a0f Data6 2 undefined2 DAT_1028_0a0f 0000h 1028:0a11 Data6 2 undefined2 DAT_1028_0a11 0000h 1028:0a13 Data6 2 undefined2 DAT_1028_0a13 0000h 1028:0a15 Data6 2 undefined2 DAT_1028_0a15 0000h 1028:0a17 Data6 2 undefined2 DAT_1028_0a17 0000h 1028:0a19 Data6 2 undefined2 DAT_1028_0a19 0000h 1028:0a1b Data6 2 undefined2 DAT_1028_0a1b 0000h 1028:0a1d Data6 2 undefined2 DAT_1028_0a1d 0000h 1028:0a1f Data6 2 undefined2 DAT_1028_0a1f 0000h 1028:0a21 Data6 2 undefined2 DAT_1028_0a21 0000h 1028:0a23 Data6 2 undefined2 DAT_1028_0a23 0000h 1028:0a25 Data6 2 undefined2 DAT_1028_0a25 0000h 1028:0a27 Data6 2 undefined2 DAT_1028_0a27 0000h 1028:0a29 Data6 2 undefined2 DAT_1028_0a29 0000h 1028:0a2b Data6 2 undefined2 DAT_1028_0a2b 0000h 1028:0a2d Data6 2 undefined2 DAT_1028_0a2d 0000h 1028:0a2f Data6 2 undefined2 DAT_1028_0a2f 0000h 1028:0a31 Data6 2 undefined2 DAT_1028_0a31 0000h 1028:0a33 Data6 2 undefined2 DAT_1028_0a33 0000h 1028:0a35 Data6 1 undefined1 DAT_1028_0a35 00h 1028:0a36 Data6 2 undefined2 DAT_1028_0a36 0000h 1028:0a38 Data6 2 undefined2 DAT_1028_0a38 0000h 1028:0a3a Data6 2 undefined2 DAT_1028_0a3a 0000h 1028:0a3c Data6 2 undefined2 DAT_1028_0a3c 0000h 1028:0a3e Data6 2 undefined2 DAT_1028_0a3e 0000h 1028:0a40 Data6 2 undefined2 DAT_1028_0a40 0000h 1028:0a42 Data6 2 undefined2 DAT_1028_0a42 0000h 1028:0a44 Data6 2 undefined2 DAT_1028_0a44 0000h 1028:0a46 Data6 2 undefined2 DAT_1028_0a46 0000h 1028:0a48 Data6 2 undefined2 DAT_1028_0a48 0000h 1028:0a4a Data6 2 undefined2 DAT_1028_0a4a 0000h 1028:0b81 Data6 1 undefined1 DAT_1028_0b81 00h 1028:0b98 Data6 2 undefined2 DAT_1028_0b98 0000h 1028:0b9a Data6 2 undefined2 DAT_1028_0b9a 0000h 1028:0b9c Data6 2 undefined2 DAT_1028_0b9c 0000h 1028:0b9e Data6 2 undefined2 DAT_1028_0b9e 0000h 1028:0d73 Data6 1 undefined1 DAT_1028_0d73 00h 1028:0dc6 Data6 1 undefined1 DAT_1028_0dc6 00h 1028:1e80 Data6 2 undefined2 DAT_1028_1e80 0000h 1028:1e82 Data6 2 undefined2 DAT_1028_1e82 0000h 1028:1e84 Data6 2 undefined2 DAT_1028_1e84 0000h 1028:1e86 Data6 2 undefined2 DAT_1028_1e86 0000h 1028:1e90 Data6 2 undefined2 DAT_1028_1e90 0000h 1028:1e92 Data6 2 undefined2 DAT_1028_1e92 0000h 1028:1e94 Data6 2 undefined2 DAT_1028_1e94 0000h 1028:1ec3 Data6 2 undefined2 DAT_1028_1ec3 0000h 1028:1ec5 Data6 2 undefined2 DAT_1028_1ec5 0000h 1028:1ec7 Data6 2 undefined2 DAT_1028_1ec7 0000h 1028:1ec9 Data6 2 undefined2 DAT_1028_1ec9 0000h 1028:1ecb Data6 2 undefined2 DAT_1028_1ecb 0000h 1028:1ecd Data6 2 undefined2 DAT_1028_1ecd 0000h 1028:1ecf Data6 2 undefined2 DAT_1028_1ecf 0000h 1028:1ed1 Data6 2 undefined2 DAT_1028_1ed1 0000h 1028:1ed3 Data6 2 undefined2 DAT_1028_1ed3 0000h 1028:1ed5 Data6 2 undefined2 DAT_1028_1ed5 0000h 1028:1ed7 Data6 2 undefined2 DAT_1028_1ed7 0000h 1028:1ed9 Data6 2 undefined2 DAT_1028_1ed9 0000h 1028:1edb Data6 2 undefined2 DAT_1028_1edb 0000h 1028:1edd Data6 2 undefined2 DAT_1028_1edd 0000h 1028:1edf Data6 2 undefined2 DAT_1028_1edf 0000h 1028:1ee1 Data6 2 undefined2 DAT_1028_1ee1 0000h 1028:1f16 Data6 2 undefined2 DAT_1028_1f16 0000h 1028:1f18 Data6 2 undefined2 DAT_1028_1f18 0000h 1028:1f1a Data6 2 undefined2 DAT_1028_1f1a 0000h 1028:1f1c Data6 2 undefined2 DAT_1028_1f1c 0000h 1028:1f1e Data6 2 undefined2 DAT_1028_1f1e 0000h 1028:1f20 Data6 2 undefined2 DAT_1028_1f20 0000h 1028:1f22 Data6 2 undefined2 DAT_1028_1f22 0000h 1028:1f24 Data6 2 undefined2 DAT_1028_1f24 0000h 1028:1f26 Data6 2 undefined2 DAT_1028_1f26 0000h 1028:1f28 Data6 2 undefined2 DAT_1028_1f28 0000h 1028:1f2a Data6 2 undefined2 DAT_1028_1f2a 0000h 1028:1f2c Data6 2 undefined2 DAT_1028_1f2c 0000h 1028:1f69 Data6 2 undefined2 DAT_1028_1f69 0000h 1028:1f6b Data6 2 undefined2 DAT_1028_1f6b 0000h 1028:1f6d Data6 2 undefined2 DAT_1028_1f6d 0000h 1028:1f6f Data6 2 undefined2 DAT_1028_1f6f 0000h 1028:1f71 Data6 2 undefined2 DAT_1028_1f71 0000h 1028:1f73 Data6 2 undefined2 DAT_1028_1f73 0000h 1028:1f75 Data6 2 undefined2 DAT_1028_1f75 0000h 1028:1f77 Data6 2 undefined2 DAT_1028_1f77 0000h 1028:1f79 Data6 2 undefined2 DAT_1028_1f79 0000h 1028:1f7b Data6 2 undefined2 DAT_1028_1f7b 0000h 1028:1f7d Data6 2 undefined2 DAT_1028_1f7d 0000h 1028:1f7f Data6 2 undefined2 DAT_1028_1f7f 0000h 1028:1f81 Data6 2 undefined2 DAT_1028_1f81 0000h 1028:1f83 Data6 2 undefined2 DAT_1028_1f83 0000h 1028:1f85 Data6 2 undefined2 DAT_1028_1f85 0000h 1028:1f87 Data6 2 undefined2 DAT_1028_1f87 0000h 1028:235d Data6 2 undefined2 DAT_1028_235d 0000h 1028:235f Data6 2 undefined2 DAT_1028_235f 0000h 1028:2361 Data6 2 undefined2 DAT_1028_2361 0000h 1028:2363 Data6 2 undefined2 DAT_1028_2363 0000h 1028:236d Data6 2 undefined2 DAT_1028_236d 0000h 1028:236f Data6 2 undefined2 DAT_1028_236f 0000h 1028:2371 Data6 2 undefined2 DAT_1028_2371 0000h 1028:23a0 Data6 2 undefined2 DAT_1028_23a0 0000h 1028:23a2 Data6 2 undefined2 DAT_1028_23a2 0000h 1028:23a4 Data6 2 undefined2 DAT_1028_23a4 0000h 1028:23a6 Data6 2 undefined2 DAT_1028_23a6 0000h 1028:23a8 Data6 2 undefined2 DAT_1028_23a8 0000h 1028:23aa Data6 2 undefined2 DAT_1028_23aa 0000h 1028:23ac Data6 2 undefined2 DAT_1028_23ac 0000h 1028:23ae Data6 2 undefined2 DAT_1028_23ae 0000h 1028:23b0 Data6 2 undefined2 DAT_1028_23b0 0000h 1028:23b2 Data6 2 undefined2 DAT_1028_23b2 0000h 1028:23b4 Data6 2 undefined2 DAT_1028_23b4 0000h 1028:23b6 Data6 2 undefined2 DAT_1028_23b6 0000h 1028:23b8 Data6 2 undefined2 DAT_1028_23b8 0000h 1028:23ba Data6 2 undefined2 DAT_1028_23ba 0000h 1028:23bc Data6 2 undefined2 DAT_1028_23bc 0000h 1028:23be Data6 2 undefined2 DAT_1028_23be 0000h 1028:23f3 Data6 2 undefined2 DAT_1028_23f3 0000h 1028:23f5 Data6 2 undefined2 DAT_1028_23f5 0000h 1028:23f7 Data6 2 undefined2 DAT_1028_23f7 0000h 1028:23f9 Data6 2 undefined2 DAT_1028_23f9 0000h 1028:23fb Data6 2 undefined2 DAT_1028_23fb 0000h 1028:23fd Data6 2 undefined2 DAT_1028_23fd 0000h 1028:23ff Data6 2 undefined2 DAT_1028_23ff 0000h 1028:2401 Data6 2 undefined2 DAT_1028_2401 0000h 1028:2403 Data6 2 undefined2 DAT_1028_2403 0000h 1028:2405 Data6 2 undefined2 DAT_1028_2405 0000h 1028:2407 Data6 2 undefined2 DAT_1028_2407 0000h 1028:2409 Data6 2 undefined2 DAT_1028_2409 0000h 1028:2446 Data6 2 undefined2 DAT_1028_2446 0000h 1028:2448 Data6 2 undefined2 DAT_1028_2448 0000h 1028:244a Data6 2 undefined2 DAT_1028_244a 0000h 1028:244c Data6 2 undefined2 DAT_1028_244c 0000h 1028:244e Data6 2 undefined2 DAT_1028_244e 0000h 1028:2450 Data6 2 undefined2 DAT_1028_2450 0000h 1028:2452 Data6 2 undefined2 DAT_1028_2452 0000h 1028:2454 Data6 2 undefined2 DAT_1028_2454 0000h 1028:2456 Data6 2 undefined2 DAT_1028_2456 0000h 1028:2458 Data6 2 undefined2 DAT_1028_2458 0000h 1028:245a Data6 2 undefined2 DAT_1028_245a 0000h 1028:245c Data6 2 undefined2 DAT_1028_245c 0000h 1028:245e Data6 2 undefined2 DAT_1028_245e 0000h 1028:2460 Data6 2 undefined2 DAT_1028_2460 0000h 1028:2462 Data6 2 undefined2 DAT_1028_2462 0000h 1028:2464 Data6 2 undefined2 DAT_1028_2464 0000h 1028:2679 Data6 2 undefined2 DAT_1028_2679 0000h 1028:3340 Data6 2 undefined2 DAT_1028_3340 0000h 1028:3342 Data6 2 undefined2 DAT_1028_3342 0000h 1028:3344 Data6 2 undefined2 DAT_1028_3344 0000h 1028:3346 Data6 2 undefined2 DAT_1028_3346 0000h 1028:3371 Data6 2 undefined2 DAT_1028_3371 0000h 1028:33c4 Data6 2 undefined2 DAT_1028_33c4 0000h 1028:3417 Data6 2 undefined2 DAT_1028_3417 0000h 1028:346a Data6 2 undefined2 DAT_1028_346a 0000h 1028:34bd Data6 2 undefined2 DAT_1028_34bd 0000h 1028:3969 Data6 2 undefined2 DAT_1028_3969 0000h 1028:396b Data6 2 undefined2 DAT_1028_396b 0000h 1028:396d Data6 2 undefined2 DAT_1028_396d 0000h 1028:396f Data6 2 undefined2 DAT_1028_396f 0000h 1028:399a Data6 2 undefined2 DAT_1028_399a 0000h 1028:39de Data6 1 undefined1 DAT_1028_39de 00h 1028:3b2a Data6 1 undefined1 DAT_1028_3b2a 00h 1028:3b41 Data6 2 undefined2 DAT_1028_3b41 0000h 1028:3b43 Data6 2 undefined2 DAT_1028_3b43 0000h 1028:3b45 Data6 2 undefined2 DAT_1028_3b45 0000h 1028:3b47 Data6 2 undefined2 DAT_1028_3b47 0000h 1028:3b7d Data6 1 undefined1 DAT_1028_3b7d 00h 1028:3b94 Data6 2 undefined2 DAT_1028_3b94 0000h 1028:3b96 Data6 2 undefined2 DAT_1028_3b96 0000h 1028:3b98 Data6 2 undefined2 DAT_1028_3b98 0000h 1028:3b9a Data6 2 undefined2 DAT_1028_3b9a 0000h 1028:41f9 Data6 1 undefined1 DAT_1028_41f9 00h 1028:424c Data6 1 undefined1 DAT_1028_424c 00h 1028:431b Data6 2 undefined2 DAT_1028_431b 0000h 1028:431d Data6 2 undefined2 DAT_1028_431d 0000h 1028:4321 Data6 2 undefined2 DAT_1028_4321 0000h 1028:4323 Data6 2 undefined2 DAT_1028_4323 0000h 1028:4325 Data6 2 undefined2 DAT_1028_4325 0000h 1028:43ea Data6 2 undefined2 DAT_1028_43ea 0000h 1028:43ec Data6 2 undefined2 DAT_1028_43ec 0000h 1028:43ee Data6 2 undefined2 DAT_1028_43ee 0000h 1028:43f0 Data6 2 undefined2 DAT_1028_43f0 0000h 1028:43f2 Data6 1 undefined1 DAT_1028_43f2 00h 1028:43f3 Data6 1 undefined1 DAT_1028_43f3 00h 1028:43f4 Data6 1 undefined1 DAT_1028_43f4 00h 1028:43f6 Data6 2 undefined2 DAT_1028_43f6 0000h 1028:43f8 Data6 2 undefined2 DAT_1028_43f8 0000h 1028:43fa Data6 4 undefined4 DAT_1028_43fa 00000000h 1028:444e Data6 2 undefined2 DAT_1028_444e 0000h 1028:4750 Data6 2 undefined2 DAT_1028_4750 0000h 1028:4752 Data6 2 undefined2 DAT_1028_4752 0000h 1028:4754 Data6 2 undefined2 DAT_1028_4754 0000h 1028:4756 Data6 2 undefined2 DAT_1028_4756 0000h 1028:4758 Data6 2 undefined2 DAT_1028_4758 0000h 1028:475a Data6 2 undefined2 DAT_1028_475a 0000h 1028:475c Data6 2 undefined2 DAT_1028_475c 0000h 1028:475e Data6 2 undefined2 DAT_1028_475e 0000h 1028:4760 Data6 2 undefined2 DAT_1028_4760 0000h 1028:4762 Data6 2 undefined2 DAT_1028_4762 0000h 1028:4764 Data6 2 undefined2 DAT_1028_4764 0000h 1028:4766 Data6 2 undefined2 DAT_1028_4766 0000h 1028:4768 Data6 2 undefined2 DAT_1028_4768 0000h 1028:476a Data6 2 undefined2 DAT_1028_476a 0000h 1028:476c Data6 2 undefined2 DAT_1028_476c 0000h 1028:476e Data6 2 undefined2 DAT_1028_476e 0000h 1028:4770 Data6 2 undefined2 DAT_1028_4770 0000h 1028:4772 Data6 2 undefined2 DAT_1028_4772 0000h 1028:4774 Data6 2 undefined2 DAT_1028_4774 0000h 1028:4776 Data6 2 undefined2 DAT_1028_4776 0000h 1028:4778 Data6 2 undefined2 DAT_1028_4778 0000h 1028:477a Data6 2 undefined2 DAT_1028_477a 0000h 1028:477c Data6 2 undefined2 DAT_1028_477c 0000h 1028:477e Data6 1 undefined1 DAT_1028_477e 00h 1028:477f Data6 1 undefined1 DAT_1028_477f 00h 1028:4780 Data6 1 undefined1 DAT_1028_4780 00h 1028:4781 Data6 2 undefined2 DAT_1028_4781 0000h 1028:4783 Data6 1 undefined1 DAT_1028_4783 00h 1028:4784 Data6 1 undefined1 DAT_1028_4784 00h 1028:478a Data6 1 undefined1 DAT_1028_478a 00h 1028:478b Data6 1 undefined1 DAT_1028_478b 00h 1028:478c Data6 1 undefined1 DAT_1028_478c 00h 1028:47a2 Data6 2 undefined2 DAT_1028_47a2 0000h 1028:4abe Data6 2 undefined2 DAT_1028_4abe 0000h 1028:4ac0 Data6 2 undefined2 DAT_1028_4ac0 0000h 1028:4ac2 Data6 2 undefined2 DAT_1028_4ac2 0000h 1028:4ac6 Data6 2 undefined2 DAT_1028_4ac6 0000h 1028:4ac8 Data6 2 undefined2 DAT_1028_4ac8 0000h 1028:4aca Data6 2 undefined2 DAT_1028_4aca 0000h 1028:4acc Data6 2 undefined2 DAT_1028_4acc 0000h 1028:4ace Data6 2 undefined2 DAT_1028_4ace 0000h 1028:4ad0 Data6 2 undefined2 DAT_1028_4ad0 0000h 1028:4ad2 Data6 2 undefined2 DAT_1028_4ad2 0000h 1028:4ad4 Data6 2 undefined2 DAT_1028_4ad4 0000h 1028:4ada Data6 2 undefined2 DAT_1028_4ada 0000h 1028:4adc Data6 2 undefined2 DAT_1028_4adc 0000h 1028:4ade Data6 2 undefined2 DAT_1028_4ade 0000h 1028:4ae0 Data6 2 undefined2 DAT_1028_4ae0 0000h 1028:4af6 Data6 2 undefined2 DAT_1028_4af6 0000h 1028:4af8 Data6 1 undefined1 DAT_1028_4af8 00h 1028:4d38 Data6 2 undefined2 DAT_1028_4d38 0000h 1109:aeda Rsrc27 18 string "=================" 1109:b3db Rsrc27 16 string "===============" 1109:b8dc Rsrc27 14 string "=============" 1109:bb5e Rsrc27 10 string "=========" 1148:0000 Rsrc35 6302 WAVE-Sound 1150:0000 Rsrc36 4594 WAVE-Sound 1158:0000 Rsrc37 7554 WAVE-Sound 1160:0000 Rsrc38 2906 WAVE-Sound 1168:0000 Rsrc39 30452 WAVE-Sound 1170:0000 Rsrc40 39134 WAVE-Sound 1178:0000 Rsrc41 6710 WAVE-Sound 1180:0000 Rsrc42 320 WAVE-Sound 1188:0000 Rsrc43 46348 WAVE-Sound 1190:0000 Rsrc44 7946 WAVE-Sound 1198:0000 Rsrc45 3518 WAVE-Sound 11a0:0000 Rsrc46 34842 WAVE-Sound 11a8:0000 Rsrc47 5148 WAVE-Sound 11b0:0000 Rsrc48 30000 WAVE-Sound 11b8:0000 Rsrc49 3194 WAVE-Sound 11c0:0000 Rsrc50 22122 WAVE-Sound 11f0:0004 Rsrc56 16 string "VS_VERSION_INFO" 11f0:004c Rsrc56 16 string "StringFileInfo" 11f0:0070 Rsrc56 12 string "CompanyName" 11f0:007c Rsrc56 28 string "Lars Hammer / KIWI Hamburg" 11f0:009c Rsrc56 16 string "FileDescription" 11f0:00ac Rsrc56 20 string "TDK Pinball Machine" 11f0:00c4 Rsrc56 12 string "FileVersion" 11f0:00dc Rsrc56 16 string "InternalName" 11f0:00f8 Rsrc56 16 string "LegalCopyright" 11f0:0108 Rsrc56 48 string "Developed 1995 by KIWI Von Wendt Konzept GmbH." 11f0:013c Rsrc56 12 string "ProductName" 11f0:0148 Rsrc56 20 string "TDK Pinball Machine" 11f0:0160 Rsrc56 16 string "ProductVersion" 11f0:0180 Rsrc56 12 string "VarFileInfo" 11f0:0190 Rsrc56 12 string "Translation" 11f8:000f Rsrc57 10 string "File Open" 11f8:002f Rsrc57 11 string "File&name:" 11f8:005b Rsrc57 11 string "Directory:" 11f8:0087 Rsrc57 9 string "&Files:" 11f8:00b0 Rsrc57 14 string "&Directories:" 11f8:00f2 Rsrc57 10 string "Cancel" 1200:000f Rsrc58 13 string "File Save As" 1200:0032 Rsrc58 11 string "File&name:" 1200:005e Rsrc58 11 string "Directory:" 1200:009b Rsrc58 14 string "&Directories:" 1200:00cc Rsrc58 8 string "Cancel" 1208:005b Rsrc59 9 string "Cancel" 1210:0015 Rsrc60 10 string "File Open" 1210:0035 Rsrc60 11 string "File&name:" 1210:0061 Rsrc60 11 string "Directory:" 1210:008d Rsrc60 8 string "&Files:" 1210:00b6 Rsrc60 14 string "&Directories:" 1210:00e3 Rsrc60 10 string "PBorShade" 1210:00fc Rsrc60 12 string "PBorShade" 1210:011d Rsrc60 7 string "Button" 1210:013a Rsrc60 7 string "Button" 1210:014f Rsrc60 10 string "PBorShade" 1210:0168 Rsrc60 12 string "PBorShade" 1218:0015 Rsrc61 13 string "File Save As" 1218:0038 Rsrc61 12 string "File&name:" 1218:0064 Rsrc61 12 string "Directory:" 1218:00a1 Rsrc61 15 string "&Directories:" 1218:00bd Rsrc61 11 string "PBorShade" 1218:00d6 Rsrc61 10 string "PBorShade" 1218:00f7 Rsrc61 7 string "Button" 1218:0114 Rsrc61 8 string "Button" 1218:0129 Rsrc61 11 string "PBorShade" 1220:004c Rsrc62 12 string "PBorShade" 1220:006d Rsrc62 7 string "Button" 1220:008a Rsrc62 10 string "Button" =J}x7ordinal segment offset address flags kind 1 1 0x0100 1000:0100 0x00 movable-int3f-3fcd 2 1 0x0121 1000:0121 0x00 movable-int3f-3fcd 3 1 0x01d3 1000:01d3 0x00 movable-int3f-3fcd 4 1 0x016c 1000:016c 0x00 movable-int3f-3fcd 5 1 0x51f5 1000:51f5 0x00 movable-int3f-3fcd 6 1 0x0270 1000:0270 0x00 movable-int3f-3fcd 7 1 0x5390 1000:5390 0x00 movable-int3f-3fcd 8 1 0x6bf8 1000:6bf8 0x00 movable-int3f-3fcd 9 1 0x638e 1000:638e 0x00 movable-int3f-3fcd 10 1 0xeab1 1000:eab1 0x00 movable-int3f-3fcd 11 1 0x58e7 1000:58e7 0x00 movable-int3f-3fcd 12 1 0x5956 1000:5956 0x00 movable-int3f-3fcd 13 1 0x59a0 1000:59a0 0x00 movable-int3f-3fcd 14 1 0x5a37 1000:5a37 0x00 movable-int3f-3fcd 15 1 0x5aea 1000:5aea 0x00 movable-int3f-3fcd 16 1 0x5ab7 1000:5ab7 0x00 movable-int3f-3fcd 17 1 0x5ba6 1000:5ba6 0x00 movable-int3f-3fcd 18 1 0x5be5 1000:5be5 0x00 movable-int3f-3fcd 19 1 0x5c13 1000:5c13 0x00 movable-int3f-3fcd 20 1 0x5ee6 1000:5ee6 0x00 movable-int3f-3fcd 21 1 0x5efc 1000:5efc 0x00 movable-int3f-3fcd 22 1 0x5f29 1000:5f29 0x00 movable-int3f-3fcd 23 1 0x5fc0 1000:5fc0 0x00 movable-int3f-3fcd 24 1 0x6073 1000:6073 0x00 movable-int3f-3fcd 25 1 0x6040 1000:6040 0x00 movable-int3f-3fcd 26 1 0x60e7 1000:60e7 0x00 movable-int3f-3fcd 27 1 0x6129 1000:6129 0x00 movable-int3f-3fcd 28 1 0x616e 1000:616e 0x00 movable-int3f-3fcd 29 1 0x6202 1000:6202 0x00 movable-int3f-3fcd 30 1 0x6218 1000:6218 0x00 movable-int3f-3fcd 31 1 0x6245 1000:6245 0x00 movable-int3f-3fcd 32 1 0x62dc 1000:62dc 0x00 movable-int3f-3fcd 33 1 0x0002 1000:0002 0x00 movable-int3f-3fcd 34 1 0x531e 1000:531e 0x00 movable-int3f-3fcd 35 1 0x635c 1000:635c 0x00 movable-int3f-3fcd 36 1 0x6b37 1000:6b37 0x00 movable-int3f-3fcd 37 1 0xc79c 1000:c79c 0x00 movable-int3f-3fcd 38 1 0xbeff 1000:beff 0x00 movable-int3f-3fcd 39 1 0xbc36 1000:bc36 0x00 movable-int3f-3fcd 40 1 0xbda2 1000:bda2 0x00 movable-int3f-3fcd 41 1 0xb3f3 1000:b3f3 0x00 movable-int3f-3fcd 42 1 0xb30b 1000:b30b 0x00 movable-int3f-3fcd 43 1 0x7e12 1000:7e12 0x00 movable-int3f-3fcd 44 1 0xc36b 1000:c36b 0x00 movable-int3f-3fcd 45 1 0xc426 1000:c426 0x00 movable-int3f-3fcd 46 1 0x7e92 1000:7e92 0x00 movable-int3f-3fcd 47 1 0x6f27 1000:6f27 0x00 movable-int3f-3fcd 48 1 0x7440 1000:7440 0x00 movable-int3f-3fcd 49 1 0x7ed9 1000:7ed9 0x00 movable-int3f-3fcd 50 1 0x99f0 1000:99f0 0x00 movable-int3f-3fcd 51 1 0x8b0d 1000:8b0d 0x00 movable-int3f-3fcd 52 1 0x9ae0 1000:9ae0 0x00 movable-int3f-3fcd 53 1 0x9b69 1000:9b69 0x00 movable-int3f-3fcd 54 1 0x9bca 1000:9bca 0x00 movable-int3f-3fcd 55 1 0x9e85 1000:9e85 0x00 movable-int3f-3fcd 56 1 0x9f73 1000:9f73 0x00 movable-int3f-3fcd 57 1 0xa38e 1000:a38e 0x00 movable-int3f-3fcd 58 1 0xa604 1000:a604 0x00 movable-int3f-3fcd 59 1 0xa70e 1000:a70e 0x00 movable-int3f-3fcd 60 1 0xa72c 1000:a72c 0x00 movable-int3f-3fcd 61 1 0xa8ea 1000:a8ea 0x00 movable-int3f-3fcd 62 1 0xa99c 1000:a99c 0x00 movable-int3f-3fcd 63 1 0xab3c 1000:ab3c 0x00 movable-int3f-3fcd 64 1 0xabe5 1000:abe5 0x00 movable-int3f-3fcd 65 1 0xacc2 1000:acc2 0x00 movable-int3f-3fcd 66 1 0xbdde 1000:bdde 0x00 movable-int3f-3fcd 67 1 0xae6e 1000:ae6e 0x00 movable-int3f-3fcd 68 1 0xb2c8 1000:b2c8 0x00 movable-int3f-3fcd 69 1 0xb3b0 1000:b3b0 0x00 movable-int3f-3fcd 70 1 0xb476 1000:b476 0x00 movable-int3f-3fcd 71 1 0xc4e1 1000:c4e1 0x00 movable-int3f-3fcd 72 2 0x0f27 1008:0f27 0x00 movable-int3f-3fcd 73 2 0x0002 1008:0002 0x00 movable-int3f-3fcd 74 2 0x0023 1008:0023 0x00 movable-int3f-3fcd 75 2 0x00e2 1008:00e2 0x00 movable-int3f-3fcd 76 2 0x0138 1008:0138 0x00 movable-int3f-3fcd 77 2 0x0787 1008:0787 0x00 movable-int3f-3fcd 78 2 0x07b6 1008:07b6 0x00 movable-int3f-3fcd 79 2 0x0837 1008:0837 0x00 movable-int3f-3fcd 80 2 0x08bb 1008:08bb 0x00 movable-int3f-3fcd 81 2 0x093f 1008:093f 0x00 movable-int3f-3fcd 82 2 0x0996 1008:0996 0x00 movable-int3f-3fcd 83 2 0x0b9e 1008:0b9e 0x00 movable-int3f-3fcd 84 2 0x0dbd 1008:0dbd 0x00 movable-int3f-3fcd 85 2 0x0e08 1008:0e08 0x00 movable-int3f-3fcd 86 2 0x11b8 1008:11b8 0x00 movable-int3f-3fcd 87 2 0x0f2e 1008:0f2e 0x00 movable-int3f-3fcd 88 2 0x10e3 1008:10e3 0x00 movable-int3f-3fcd 89 2 0x1131 1008:1131 0x00 movable-int3f-3fcd 90 2 0x118f 1008:118f 0x00 movable-int3f-3fcd 91 2 0x15c2 1008:15c2 0x00 movable-int3f-3fcd 92 2 0x11c5 1008:11c5 0x00 movable-int3f-3fcd 93 2 0x1326 1008:1326 0x00 movable-int3f-3fcd 94 2 0x13a8 1008:13a8 0x00 movable-int3f-3fcd 95 2 0x149d 1008:149d 0x00 movable-int3f-3fcd 96 2 0x15c7 1008:15c7 0x00 movable-int3f-3fcd 97 2 0x15e7 1008:15e7 0x00 movable-int3f-3fcd 98 3 0x0472 1010:0472 0x00 movable-int3f-3fcd 99 3 0x03e0 1010:03e0 0x00 movable-int3f-3fcd 100 3 0x0079 1010:0079 0x00 movable-int3f-3fcd 101 3 0x03af 1010:03af 0x00 movable-int3f-3fcd 102 3 0x0002 1010:0002 0x00 movable-int3f-3fcd 103 3 0x00a2 1010:00a2 0x00 movable-int3f-3fcd 104 3 0x01c2 1010:01c2 0x00 movable-int3f-3fcd 105 3 0x0405 1010:0405 0x00 movable-int3f-3fcd 106 2 0x1607 1008:1607 0x00 movable-int3f-3fcd 107 2 0x168e 1008:168e 0x00 movable-int3f-3fcd 108 2 0x16be 1008:16be 0x00 movable-int3f-3fcd 109 2 0x2554 1008:2554 0x00 movable-int3f-3fcd 110 2 0x2442 1008:2442 0x00 movable-int3f-3fcd 111 2 0x1b11 1008:1b11 0x00 movable-int3f-3fcd 112 2 0x1be9 1008:1be9 0x00 movable-int3f-3fcd 113 2 0x1c03 1008:1c03 0x00 movable-int3f-3fcd 114 2 0x1c5f 1008:1c5f 0x00 movable-int3f-3fcd 115 2 0x1cc6 1008:1cc6 0x00 movable-int3f-3fcd 116 2 0x18ee 1008:18ee 0x00 movable-int3f-3fcd 117 2 0x19b7 1008:19b7 0x00 movable-int3f-3fcd 118 2 0x23fd 1008:23fd 0x00 movable-int3f-3fcd 119 2 0x2219 1008:2219 0x01 movable-int3f-3fcd 120 2 0x22fc 1008:22fc 0x00 movable-int3f-3fcd 121 2 0x233c 1008:233c 0x00 movable-int3f-3fcd 122 2 0x2374 1008:2374 0x00 movable-int3f-3fcd 123 2 0x238b 1008:238b 0x00 movable-int3f-3fcd 124 2 0x24a5 1008:24a5 0x00 movable-int3f-3fcd 125 2 0x2643 1008:2643 0x00 movable-int3f-3fcd 126 2 0x26b0 1008:26b0 0x00 movable-int3f-3fcd 127 2 0x2819 1008:2819 0x00 movable-int3f-3fcd 128 2 0x28a3 1008:28a3 0x00 movable-int3f-3fcd 129 2 0x2906 1008:2906 0x00 movable-int3f-3fcd 130 2 0x2932 1008:2932 0x00 movable-int3f-3fcd 131 2 0x295c 1008:295c 0x00 movable-int3f-3fcd 132 2 0x298a 1008:298a 0x00 movable-int3f-3fcd 133 4 0x0341 1018:0341 0x00 movable-int3f-3fcd 134 4 0x03ff 1018:03ff 0x00 movable-int3f-3fcd 135 4 0x0bb3 1018:0bb3 0x00 movable-int3f-3fcd 136 4 0x0c3d 1018:0c3d 0x00 movable-int3f-3fcd 137 4 0x0c59 1018:0c59 0x00 movable-int3f-3fcd 138 4 0x0641 1018:0641 0x00 movable-int3f-3fcd 139 4 0x0673 1018:0673 0x00 movable-int3f-3fcd 140 4 0x080d 1018:080d 0x00 movable-int3f-3fcd 141 4 0x085a 1018:085a 0x00 movable-int3f-3fcd 142 4 0x05f3 1018:05f3 0x00 movable-int3f-3fcd 143 4 0x060d 1018:060d 0x00 movable-int3f-3fcd 144 4 0x0627 1018:0627 0x00 movable-int3f-3fcd 145 4 0x0e46 1018:0e46 0x00 movable-int3f-3fcd 146 4 0x0ce7 1018:0ce7 0x00 movable-int3f-3fcd 147 4 0x08ac 1018:08ac 0x00 movable-int3f-3fcd 148 4 0x0d6a 1018:0d6a 0x00 movable-int3f-3fcd 149 4 0x10e9 1018:10e9 0x00 movable-int3f-3fcd 150 4 0x0d8a 1018:0d8a 0x00 movable-int3f-3fcd 151 4 0x0d9b 1018:0d9b 0x00 movable-int3f-3fcd 152 4 0x0e9e 1018:0e9e 0x00 movable-int3f-3fcd 153 4 0x0ef4 1018:0ef4 0x00 movable-int3f-3fcd 154 4 0x05dc 1018:05dc 0x00 movable-int3f-3fcd 155 4 0x0e0a 1018:0e0a 0x00 movable-int3f-3fcd 156 4 0x0a85 1018:0a85 0x00 movable-int3f-3fcd 157 4 0x0f38 1018:0f38 0x00 movable-int3f-3fcd 158 4 0x069a 1018:069a 0x00 movable-int3f-3fcd 159 4 0x071c 1018:071c 0x00 movable-int3f-3fcd 160 4 0x055c 1018:055c 0x00 movable-int3f-3fcd 161 4 0x0b25 1018:0b25 0x00 movable-int3f-3fcd 162 4 0x0b6c 1018:0b6c 0x00 movable-int3f-3fcd 163 4 0x08f0 1018:08f0 0x00 movable-int3f-3fcd 164 4 0x0f22 1018:0f22 0x00 movable-int3f-3fcd 165 4 0x0f8d 1018:0f8d 0x00 movable-int3f-3fcd 166 4 0x0fcc 1018:0fcc 0x00 movable-int3f-3fcd 167 4 0x0ffd 1018:0ffd 0x00 movable-int3f-3fcd 168 4 0x1054 1018:1054 0x00 movable-int3f-3fcd 169 4 0x10aa 1018:10aa 0x00 movable-int3f-3fcd 170 4 0x1106 1018:1106 0x00 movable-int3f-3fcd 171 4 0x121b 1018:121b 0x00 movable-int3f-3fcd 172 4 0x1274 1018:1274 0x00 movable-int3f-3fcd 173 4 0x1547 1018:1547 0x00 movable-int3f-3fcd 174 4 0x1586 1018:1586 0x00 movable-int3f-3fcd 175 4 0x12f5 1018:12f5 0x00 movable-int3f-3fcd 176 4 0x134f 1018:134f 0x00 movable-int3f-3fcd 177 4 0x1311 1018:1311 0x00 movable-int3f-3fcd 178 4 0x169d 1018:169d 0x00 movable-int3f-3fcd 179 4 0x16eb 1018:16eb 0x00 movable-int3f-3fcd 180 4 0x170c 1018:170c 0x00 movable-int3f-3fcd 181 4 0x1761 1018:1761 0x00 movable-int3f-3fcd 182 4 0x1788 1018:1788 0x00 movable-int3f-3fcd 183 4 0x17f8 1018:17f8 0x00 movable-int3f-3fcd 184 4 0x1868 1018:1868 0x00 movable-int3f-3fcd 185 4 0x18e9 1018:18e9 0x00 movable-int3f-3fcd 186 4 0x1960 1018:1960 0x00 movable-int3f-3fcd 187 4 0x1986 1018:1986 0x00 movable-int3f-3fcd 188 4 0x1a0e 1018:1a0e 0x00 movable-int3f-3fcd 189 4 0x15c0 1018:15c0 0x00 movable-int3f-3fcd 190 4 0x1a61 1018:1a61 0x00 movable-int3f-3fcd 191 4 0x1b08 1018:1b08 0x00 movable-int3f-3fcd 192 4 0x1b35 1018:1b35 0x00 movable-int3f-3fcd 193 4 0x1b4b 1018:1b4b 0x00 movable-int3f-3fcd 194 4 0x1b57 1018:1b57 0x00 movable-int3f-3fcd 195 4 0x1bb0 1018:1bb0 0x00 movable-int3f-3fcd 196 4 0x1bdf 1018:1bdf 0x00 movable-int3f-3fcd 197 4 0x1bfc 1018:1bfc 0x00 movable-int3f-3fcd 198 4 0x1c7f 1018:1c7f 0x00 movable-int3f-3fcd 199 4 0x1cd6 1018:1cd6 0x00 movable-int3f-3fcd 200 4 0x1d22 1018:1d22 0x00 movable-int3f-3fcd 201 4 0x1d64 1018:1d64 0x00 movable-int3f-3fcd 202 4 0x1e39 1018:1e39 0x00 movable-int3f-3fcd 203 4 0x1eb0 1018:1eb0 0x00 movable-int3f-3fcd 204 4 0x1db1 1018:1db1 0x00 movable-int3f-3fcd 205 4 0x1f14 1018:1f14 0x00 movable-int3f-3fcd 206 4 0x1f56 1018:1f56 0x00 movable-int3f-3fcd 207 4 0x0097 1018:0097 0x00 movable-int3f-3fcd 208 4 0x0045 1018:0045 0x00 movable-int3f-3fcd 209 4 0x0071 1018:0071 0x00 movable-int3f-3fcd 210 4 0x0133 1018:0133 0x01 movable-int3f-3fcd 211 4 0x018b 1018:018b 0x01 movable-int3f-3fcd 212 4 0x01dc 1018:01dc 0x00 movable-int3f-3fcd 213 4 0x02fa 1018:02fa 0x00 movable-int3f-3fcd 214 4 0x03e9 1018:03e9 0x00 movable-int3f-3fcd 215 4 0x0466 1018:0466 0x00 movable-int3f-3fcd 216 4 0x049e 1018:049e 0x00 movable-int3f-3fcd 217 4 0x0524 1018:0524 0x00 movable-int3f-3fcd 218 4 0x08c3 1018:08c3 0x00 movable-int3f-3fcd 219 4 0x0cc7 1018:0cc7 0x00 movable-int3f-3fcd 220 4 0x0dcd 1018:0dcd 0x00 movable-int3f-3fcd 221 4 0x0ec0 1018:0ec0 0x00 movable-int3f-3fcd 222 2 0x2996 1008:2996 0x00 movable-int3f-3fcd 223 2 0x2a0e 1008:2a0e 0x00 movable-int3f-3fcd 224 2 0x2a45 1008:2a45 0x00 movable-int3f-3fcd 225 2 0x2ae3 1008:2ae3 0x00 movable-int3f-3fcd 226 2 0x2bd1 1008:2bd1 0x00 movable-int3f-3fcd 227 2 0x2cf2 1008:2cf2 0x00 movable-int3f-3fcd 228 2 0x2d3a 1008:2d3a 0x00 movable-int3f-3fcd 229 2 0x2c08 1008:2c08 0x00 movable-int3f-3fcd 230 2 0x2c1f 1008:2c1f 0x00 movable-int3f-3fcd 231 2 0x2d66 1008:2d66 0x00 movable-int3f-3fcd 232 2 0x2c83 1008:2c83 0x00 movable-int3f-3fcd 233 2 0x2cd9 1008:2cd9 0x00 movable-int3f-3fcd 234 2 0x2bb1 1008:2bb1 0x00 movable-int3f-3fcd 235 2 0x2d99 1008:2d99 0x00 movable-int3f-3fcd 236 2 0x2db3 1008:2db3 0x00 movable-int3f-3fcd 237 2 0x2dcd 1008:2dcd 0x00 movable-int3f-3fcd 238 2 0x2d87 1008:2d87 0x00 movable-int3f-3fcd 239 2 0x2e76 1008:2e76 0x00 movable-int3f-3fcd 240 2 0x2de0 1008:2de0 0x00 movable-int3f-3fcd 241 2 0x2dff 1008:2dff 0x00 movable-int3f-3fcd 242 2 0x2e22 1008:2e22 0x00 movable-int3f-3fcd 243 2 0x2e92 1008:2e92 0x00 movable-int3f-3fcd 244 2 0x2ea9 1008:2ea9 0x00 movable-int3f-3fcd 245 2 0x2ec0 1008:2ec0 0x00 movable-int3f-3fcd 246 2 0x2ee5 1008:2ee5 0x00 movable-int3f-3fcd 247 2 0x2f07 1008:2f07 0x00 movable-int3f-3fcd 248 2 0x2f2f 1008:2f2f 0x00 movable-int3f-3fcd 249 2 0x2f4d 1008:2f4d 0x00 movable-int3f-3fcd 250 2 0x2f70 1008:2f70 0x00 movable-int3f-3fcd 251 2 0x2fbb 1008:2fbb 0x00 movable-int3f-3fcd 252 2 0x2fe3 1008:2fe3 0x00 movable-int3f-3fcd 253 2 0x300a 1008:300a 0x00 movable-int3f-3fcd 254 2 0x302c 1008:302c 0x00 movable-int3f-3fcd 255 2 0x3099 1008:3099 0x00 movable-int3f-3fcd 256 5 0x0002 1020:0002 0x00 movable-int3f-3fcd 257 5 0x005d 1020:005d 0x00 movable-int3f-3fcd 258 5 0x0061 1020:0061 0x00 movable-int3f-3fcd 259 5 0x0891 1020:0891 0x00 movable-int3f-3fcd 260 5 0x08a9 1020:08a9 0x00 movable-int3f-3fcd 261 5 0x08e6 1020:08e6 0x00 movable-int3f-3fcd 262 5 0x09ec 1020:09ec 0x00 movable-int3f-3fcd 263 5 0x0a51 1020:0a51 0x00 movable-int3f-3fcd 264 5 0x0a7d 1020:0a7d 0x00 movable-int3f-3fcd 265 5 0x0ac3 1020:0ac3 0x00 movable-int3f-3fcd 266 5 0x0b00 1020:0b00 0x00 movable-int3f-3fcd 267 5 0x012d 1020:012d 0x00 movable-int3f-3fcd 268 5 0x0147 1020:0147 0x00 movable-int3f-3fcd 269 5 0x0167 1020:0167 0x00 movable-int3f-3fcd 270 5 0x0388 1020:0388 0x00 movable-int3f-3fcd 271 5 0x038f 1020:038f 0x00 movable-int3f-3fcd 272 5 0x039d 1020:039d 0x00 movable-int3f-3fcd 273 5 0x03cb 1020:03cb 0x00 movable-int3f-3fcd 274 5 0x0527 1020:0527 0x00 movable-int3f-3fcd 275 5 0x052c 1020:052c 0x00 movable-int3f-3fcd 276 5 0x0667 1020:0667 0x00 movable-int3f-3fcd 277 5 0x06ab 1020:06ab 0x00 movable-int3f-3fcd 278 5 0x072c 1020:072c 0x00 movable-int3f-3fcd 279 5 0x16c9 1020:16c9 0x00 movable-int3f-3fcd 280 5 0x14a4 1020:14a4 0x00 movable-int3f-3fcd 281 5 0x082e 1020:082e 0x00 movable-int3f-3fcd 282 5 0x16a5 1020:16a5 0x00 movable-int3f-3fcd 283 5 0x1629 1020:1629 0x00 movable-int3f-3fcd 284 5 0x0fe5 1020:0fe5 0x00 movable-int3f-3fcd 285 5 0x0feb 1020:0feb 0x00 movable-int3f-3fcd 286 5 0x0ff7 1020:0ff7 0x00 movable-int3f-3fcd 287 5 0x0ffd 1020:0ffd 0x00 movable-int3f-3fcd 288 5 0x1007 1020:1007 0x00 movable-int3f-3fcd 289 5 0x100b 1020:100b 0x00 movable-int3f-3fcd 290 5 0x1017 1020:1017 0x00 movable-int3f-3fcd 291 5 0x0ff1 1020:0ff1 0x00 movable-int3f-3fcd 292 5 0x10be 1020:10be 0x00 movable-int3f-3fcd 293 5 0x14c1 1020:14c1 0x00 movable-int3f-3fcd 294 5 0x03ef 1020:03ef 0x00 movable-int3f-3fcd 295 5 0x0439 1020:0439 0x00 movable-int3f-3fcd 296 5 0x16e1 1020:16e1 0x00 movable-int3f-3fcd 297 5 0x0be9 1020:0be9 0x00 movable-int3f-3fcd 298 5 0x05d8 1020:05d8 0x00 movable-int3f-3fcd 299 5 0x0608 1020:0608 0x00 movable-int3f-3fcd 300 5 0x062d 1020:062d 0x00 movable-int3f-3fcd 301 5 0x064d 1020:064d 0x00 movable-int3f-3fcd blZ_x y{z{h Ŕ5r%i3hPE0!CFejX~OK e|9[ppE>G0%qI8nwps"G#03gDⵑ1?dm6D(\xFh!7Eh\kcpw E8'X<3Cq'xsx87L N! qM"?&bA7'Ii$cG2^&[[2)x[ nKC)=8Rq_*L4\+pG~i8Wc^:xnޝ/fwÙx]&>fbXxAA!YxjޔOe'YxI6>ofXg9l~ ؝#v.yxVޑ_G1w <x3+qF%^[+JVaC.U Wan5ΪqS5lE5w5X9!\-!ވ7X߄5Mr~߄98o'fh[ [ViZ1 p]kÓmXَ qe;hǯ1vD)N\Չx]8ԅKp #unU=8كzp4<4 {zq/NbGpUN> P?.lj~<Џl|eO ` q ~"h }_,ZBl:U {K]TZRT.}֥.ui-=zD,i^!ⶨd6o cKUķzt%H1oQC뢐`L90U\2wjAo q^G{"xCPI<>,鷸hpe%kծRnPI斝')sl΋lr?ONUOqG7PHu]=t]7U Z W$oQF! q3½&U :R]U7tβ@l7{҂ڣ1 etIfi묪 xn{ n5)O맦UˏYuOBjB"֮~$HLB1\qj맑hRe"ɓl*ѤRHayy-hƮ뺰8U`p=2T)g=Te[?EZS؄+` VrxEm$َ:m(Zit0C*۪~ڳ6˷8o01>XaD͜$j#v$*SB3q7Q?,L Ǒh"L }e>-%7Fn4 #7/_:~j0wx0fO߃VhB ҨU`C#j[-?xя#siQ?Z"X{'+9 M;i3IexZpŧg$ui۽,"Adbsig_kQ-'VvQ8w(uh з"[馎tCGs*`ȧRpP%)y^U%ذ&2[Vz?e*j)`/pP#=/?nOX K'Rvq>ڎHMZmz'L Lm4qk`V̕HMNdW}mcd ^"7_ k=`?$- =U%Ovr.kD$8TPJ4+γ$tЭF5bcgėIelul몐z}CGjjB6ڄ,yzj~y\0cz(Lv[iU^I vW}þ'oY_:^ `YO "< |fh+-a*%ܜKFf>_]1(>,E&yzs?G.ۃx6Xk8!t $-x"dzDy%D2 ۰CKgVK>薍j)w@ A=H4OezWWenޭ鴬dbfYlp$ۻa@eŮd~mTjQй8Q^E9 fE&~x@])oK*Z^5_\z9WtٴWEU7_G~*n|kOd+8y~_ƁmኵGCZcysL8N&'(8>4Ai䙾As`rZ ߭sVe$YeMa !s4i5ƞM_«Sn㤧Ds`R>s̿R>zQ?# 7X63& RpW?|ceNPf$#uGxd +IL{9d aɩҗ&DZm]Xoh{kQ Ues46R)I<>,|_tT3n s0ܱ]  Bo$ VLp2)p[P{9]g?p1E KWBN"C#2GX;Il{9pE*l ECEPSZAm'Dej=׋~|/95PNpdzWuƅX)U^({!HvKy5핬!Zg~`K.T 1~ {_p;uD]edY_6F8QvzHdGqD8-]NݔR䅳ͤ搚_뺇fϻ+Ly/|ڌu}UZ7%n`܍M=܇Wx{re;lAե^ JO̒EEHz3\u "vR&b2қ/ ]aG.1<(cSnr*֍\kKnXgt\|w32. ~*Q;ojaa3v#?KT~t"T9Q CvH7U)G/}dP>.jDb:,dp#qyr]r\mqz0͎O2ylvu^X7k^.*zMu+EUKZdk 4 @ˢXITwq K0 >ο~<ӯ[c')zA+.Z[uGrW VI'$V?c~<` S(r =ԕ7xN:jz*?]~cnWPŤ(RP_1ݧJ]&]L^:Q(ʉ;+gPv#E],;JRAIgh*Nd1SőLj''.& 3Upi"f|!ڟv] 8\Rup390zOLT+>73 E|sNMI x$(  e8 }14s {1~zCWَA?DN<!LuS}"f !ind`Eϧ_ۖ>hڃ2Xkh/01j:泍e{y@h?7Xb3FøTDɉz?p]ݸ>qj5Tv8FYX>~"cd 80",֫p}on@uW/";K"[^tH|DHN0|i$?'~hX9ϒC. 5NI"6B&*-FFDFޙF«+h`I|0f5ɽ#2iAc[pMy;# 1]$->M&;glvGc~О'VfQ X |!r`yu.3VwhE=j?eZSĽ*'n*eΠFE_"' +SkV-`mA!f]~߅ %h$jg" m^mUsWNbOaV9t,H#j]C_ 4pu/|%P!) ѷj`zccp΂uԳ4q'6N  /2YS9IC'$H7;PA!suKʫ֣[a2nOAtq} *Gz#=ߑ^8\쬵cAЌ=z.j)ⶈxH<蜨ZJeD^m=iØ@Yh>7̇d·m7@:B%! am"~&ϘD9q buMؿMU(1q(ƹ FjhF0:e JhYf`X'`I@nmvr4C#| ~c/sT aEL7#7v%nmJ ?[XKnS,5 .?|gJ[Ƃ" q -sg=\$Bz;h/L\:5Q=nL_nB_ p@j8O[bݫO U7>>f9$=>=X#gmm*8i={.Xћ>t\_#Ѕm*Ρyx^mÊf2Jܔ3 k5iD.;bנ݈XN"'re V">u҈Ekpu^z -<:|j N4+ ,_7*ZGe&Z|/7F,+ITJI[}Ĩe3q@6#є񪹫 (RICPYPZ=JR¶r#2| Z1VD\v Wdh3^#Qb((#" T-⤩5$zT g*7^B1[)R! O` SD5ȸ$OfUWP$3^˶揺!˩??rC,@J't߻(c/)3U{ BUꨭ|r &i &M_[e  =bi(oiM%5#s0K+oX]ݍ7l^mZ{/3L2Ops96@Qv̓| SHyY4DXef8yNFjtTw#f rI#]'X|^eZPFMjSJ=Uu+ӼN9sED7Da&N'Lwj 4gU18UPqLHq0)L&39KY0 ޝfNs:5 hw* ZxѯWKH1pni[q[EAi,g* 7:I;YAꪭYkl2sʠq/Nk#j puH4yLFì.6sBfC4V-rHʴR>Ď}2+ov~QQ$UVKfL, 00 ,O s<}tu#8W wϹ{^$vM|9S+5 BzTXjf)SՂ3J&3rZzc ت 6NCb!h# @( L=q䰱U,S{Ud6"|-|IiwtFc9= ̏#FӐIj吃#;Gy20NriLr lȦ+v T3wlfE^NDէb^ Dԙy#$,G_)!s2Tjb_~BPeƉ2oR;@WT\\zH Pk℮cgːH\fj7͸3 e6\= _[l8Ʈ}HeeuJB"B[˪Zҙ# ^T[3kgпC" [hIcutFG5ūW"nMf<;AZć)/@ <=@1O0;TO4aAF&ZE"RΖ_ b"$W\u:Ei]BvDJk&SD)dd4|}^k>GAЏ 8bHi^< ?~^6+s<>xk}*]7fz -p]oYDf@19Ɇ|T}&&4s$(cFk8 sh" 6SH__(y;/zxⷳ]$9sa+Me6H捭XЄ V0ka.):L(a0Sj6ήяd6wq=uQr_C._<Pbe%G"Z,9j^n`Gej&["_rϽV-(3{*%V)Ճ(n }H`Re&9ϡ ԭEUL36U_ϥk q=x@fѠG\{vĉ+GLooIdnS!@R4o HvY|~O+RQ;r =#]Q%Hj+Lw `Xólp?nEӃ]RqV|~#d֑?x3Ƈ΀vrGV+q`Pt8:O,m$;EL ,7+pnS[޲$;v xFRFᠦ^RN/Cg`ys"lV#k3B;d$6Ȭ-JS0A.ݫl-6$Ab굛3yW&ޜIy߻94H{nsIM@&g܆Q4[̔z*1ᇇv1(=RI8JoD.;Z>UAՆӉL`8r)rΕ04̋V> bjM,Mvdt]_wuChIbnnj'R3F ÁPv[5qԜ70` i8u.+Dh\x\$q]yuռyP#:{hG2HH- k]ڇz19r1=J=9t.NP{NO` K4Z4w\qYv,ҟ{$Dΐs{Wp{[vQ;(=#3+<٬ *zN$Iz-SKc+Auz|D`2aړtȘntlQgLO?σ<8B2I'd+vm2ɲlwA$jrf0; 8F'Z{2Na9Vϥ~AҮ9ˬ^q~;2Fn B6y}7h4dgi=:k{q1a|Oh v]*֥4)ad7vJp;N{.xE]0"Fhkˑ6@=Zc?c Q1:yܨϚ('2(>&ꚍO &cźĀ;KgTEt؏x4v4AG{}DRqm6=ˑ%QC #-qh's7UyL*ΐl 4eݲᬪ,օh{R(QBNbANg()YkXEϡ :7T0? <|3ׇ1>JC"UvK r#Ji`'q)iV9 E{~gR>HSL|2 QB4dwlV?v|]5/9;{ֿɭ`GmD(e/8FEd(ǚVP`OG3t\sDZuA'k|ݶbQqS@䬠{@FvnYcm~߁02pGȢZ,LW,P"~ .1GM RT [t ۋo. B Oc\V┭|n0޳R&<4訳e ax V ,I@#:ͪxfU wD9ꊸeo >79c]А[ jaw*[# }9`(CF5~RjJ.]RY_w™͠DeTjG?vt] y;XUt+MNȟ{HU߅-]d᧢s_Ϝ/?vIS>ݸ\/+1m͞7Dvv$-HZ-6|J[O=Fh3rXi~ ]Wj=xb%4\Z)ՠ]?7XPO=rr]8]-kjo!D \ס`OFwkB'"Yklrac|?G.J -a$1 Uo*[#IffAc 8jtszT/׿@Ʀ@qRߝ!u.t\E6p㸮y6\0c;_>ί.?~ۥ4y`[ܪpq:#P!x{{20Yj}1 ҝFMĖ@F%ڮ?uOuy~s}6DJX? .0q6uNp !K/Wz]갋Ynuf6l2e@ܻXpkv-kc $tf- 5>f>MɄ!Y ; %Ny((奫a:Dy1ASz'4̓fTX4279^骝S#ìFSNnԙ0,YxR}qC(s/7:ַFПfO|mQR&/ *-]u:@ۆeQLY2M&f`ixm5Ck U\H|h(=i*6nC #$H~eGKTnl7htG_0R4YuXNFF%l9n)X!i5:@{TSF %T{-^!y-J.NjVQhx)6BEc$ i'vHwmiˀ/< x.ddN'mBFf&mφ3om/%{YƆOd=mj[,XHw6,/]߃e6Wyg7r^ vx"v-5zb=l{W${z1&Mfv)r(]mɩpgNDmɾ1PUtۻY꓏ۆJHqf]/b(Dow PsO48 !.M1Y]ߖND1| c"\D[C6#-i} VW23`hW`RX9ߞ?g%3%,IRF\&hl^7pY܉rs̰ u0Ps S}em0m57,&ᅓG/i#w41v4#wˢghV<ЀzOo{fO&1`ubwltPbsE h]MF HM,ɤ AY~oRw[a!`@(Xo_X̨8V]LVf~܉G$=;e69Ta/jpL4&ߺC &^`Vkg7 (/H(_tsC{O;^ )#N F̦[C#T`ޫ#:36ڰ#~ǑLi)7uㅑ.8n iHk{=ѣا`wgar2k*,xE53>`P1?\u#:}huFql+mSw$|M}9?M}]9.OvyB^ƼքiwT'p IL oapٖ=Ŝ*j,4 ";7_=/q/[hr(Ѷtzp [HepPm{׼DƓ0Xn{sx; "'$M@$~ƍ \)g ) p%/3@U2ZotYʡq%R8]S PtwsU+>ɷ9]%BZ\D4e]2+8+|,_7{4j j8 ]2ëAT`4c j n/ \nfគki@j/7ԛ Ճޖ Mlvà^߯o.?|.B&Ž.<.K2#Uiw c~B=.s<\'T mC++6 LOiY Ʀ Nϋ\ ^@ժSPE-%ӝgeE(BjI8M|muYF]M>!á*/o'<`zoMmvmos6mDD m!1`e}PM/ۏ52a8ve8 h1#`_ជKt i7Z={ŗtsw303/]+Dc p7\=ȢY+8):@k^5Dsy(z%zi3"' p Y`xQNIAs 5'LIM v$58`Rh{|Yvٌq^6pʼn<ʺ`@Gz!vP2_>vyzqy\zo_O/:Iy˘Ա5ĦYI P=Όm}]v}"`x 6ĺ6 G;KNٯWVh>qr]5`QȼB% gV.X`G%2鍁tXބb(9q_/ώں>]NKQjn +$f+^WT;H`c+ G|P]?UO8Ѻd\߈ Z-%| vd3x,βZ ׸-xZWm쪍SrըU2WmZ(sЯ155uN +Ytz/ܼ8_q}WқN^q:_qJô}s:}^әe T=Oh${c6o" K<ƻ4-8 bfSnomxI6R#qyJCī-U"}u"NXC V1WD2P%ʗeFy=bI]t`S2g'u$#)֒Loת=H4I/'"C/MԃtbM-990xl|bZ^ĒHun)-d3^9 %l)"q"h s*B8{K~}U< ȝ뼭Rқ%6M/%eۜ.oĂ?_޽6Mc+!{ԪX!!\bI;scSOؒ\>]1K(N{P ]͒fn]!K*>C4./%2ۦqRZ)}>ɥ F:Qn0q-" )xW:uauC1Q=Q>F0(~N0|8abS0tXP˨? !LzqNn~IOH|za\U]e절kI}<5Oq#X0qcM Ƒ.s""/dK/`&F06XOcq4NHWzv6f,V-i9h57$:Ѷ/Y2Ӭ7TK{8P%'DEzItFs~];g,v1S;Q{hQ6MZ+Ub8 tm lW,27ٷfK]qhN ɗ*dMwq[^ <*6b;Ia&n M UBw1i1Y+EN+8perRdi g#ҙj1Qkc?de%\9uU!4U k(Q'/}ei*=gC,8Ȕ8O:iѰw|z0=w]cjMp7-(^cv]?S-PQliƥGmTӨ4Xz 7I1DGA\z}9 B?E0fbS.X]W{|E:H0 7bb'uhh1i:P..r#OaుKBip^9A?#;$:pmaÄ9P0]k@>ίKGe}W wla̰0x$k`VJV$];%zUZ;o vX,%.*4 /oޟ{OOࡷзg9NV5K3WWE4Wwi(GHCw_ d5@5oGj${ǎ偵̱"b) :cVkLu{e)C :5)g :d:߹y,؎NC8 \BHMS {@?ΤE-L \{䲸koZΘ#GfJUƻw[0S{wD(Uq,^8 WzF.&3)"8r4.{ˇT_W#͗/[V-V$yit!Ք6O7OS>IT;X0%s--\V3zR L/mԪFW *{|qۯkxCzj#+;3a|!6 ҏjyPd6bB< hX袖immr?@#| nVg#ze@0=+?WTe2|[÷O_>{`=SqdXkstP ):kXS@S_zW; Tן$2q(.Ԃr_* 9·nEY2nОVs7 fH?XmYx պ+ $hlDu~)͝sk#:#k -~Y)h%PIUs+6q~W"~6 ("^o4̬՞U~Z&* J \Cڦł8:99͈8wVlPu >:-[\EQ_laGJ^wkI4_JstXY]4!LJ'ۤv2)]\KR=L{+ۅ=DsG.-L _"(4,V54!BH$Wn+Vf&(MCOW>|pTQNDd?Xi5||iU:\;.'6zW88Jϋ w\_!X&/5UZTe!|#0HekU21m[ɺUsN ;sXTč? ?|zua:'58agw"]Og|q:m~$ B>eo07Ãލ¤'M~Btj)FcMZ vP@K*͎e 4s@ߗ(7.\ !܇H aƁgxŌMsn.M4bzuR8l)Ճjs~b|>jSEbF0z\pfN̵xx%p>|1s'ҟvYʇ;Z4hUgC٦N Я?!ii)OvgH}v W,dPg0JĐ[‡5/{یMbԤ^S#n6а/Sﻊ%KLaWr|I4\'I;^T3@יW ?WZւ?8^(~BVbȠIu@{oj`1UGj x!@Y̆9ǟcؿs\lqNWg$TQ1juk56L>s2!<~28/WZs"m63ނ ;4>Aj)ĔQYNJq] IT?1ԅut42Pc2.]X9w[<>~@F +|G߱`XjъG@?[m( ' 7:KU_ԚzfOH.e1nR0Rnzm{I@4ָxxi ᛛqKLچ|\؉Wbgݳȑ z.|g9oA8v߲!UV*(-$d8s[l?2O΀ጹ'gi#jbNx$]123>«R# 78彙QV/;m V@uZO"J?EV,RÝHdQjK,MqjiA6f]3PyI΢ª,]XS̆ܿ}۪궛ު^m:Q#kʵ+AI ,Y4hhةzY`{0 "a{RWم=fϲEO}Kdђjڻ5/]pǐҏxh6 nn/DF Q> cDŽcDzɣ,z)c2Cx3x]w0%l&79,~iH#mxTAhtCxʃ8ɚZPNzqϑņ"eACWA+'tǖr}5{͜`mhe7K7Jt:d ]I=kxkxh4O]@.|h$0*0eAZr׽8gApU)M0Bp4I //c>JaOU|B/UԗX8to`'NUrM wT>J1(/C3eڒ,z .+GIgA`/aXa)M>p#4DIXD0N<@ع)ku/u50UGRۧCj٭7,m0*wza6D.!N=3{To"CsK gX8H@HO0ljcF5_cߛ2J׃A{:<7[GFZz鱷دd7)_}3=\FgYZĽr|5NCZspd&NsL6ֵ%ٕN!pǾ'c@)C`|S,'`kCIOH6Hz.T(p:>(pf;#1x UQ4_,湚"p.:]/xpC ?ӄѭ8$H=wU뺤ŬEő/kZvK&%]m ^_xz|ʗt4OZz#0Ils<_B>x-Հ_>8ִVVF[c>:4=ךF&lx'Me*[;Oϛv"U^J2$o'LZ}dLb$`澵md>mVA$[!K 1 (H& 6|T|gwbȬ#cJ~_2"NE*ڡM E;=lf`b.VoB{Kp[mնVH^c|{ S~滎И#.,vRT4e:ؾ%v0*tw;7zg]ӡ~V)6M!k1 m.X\*J{ J-YGBiCIH [/A VDY,o%O>ͮ8C ."_qCL7k4^qBWGm>a l;?;l|91Q?XYDR>n%m{܇43n&ĝpMXYK9UįD(Gjg"!'<<#j-8Lp]^2޾5G(ngSu1H QKcX/a]Tޠr%{DM4e5@Pj%^B ˣLX '-*+j10RNm_^<1ܜZ(c\k rC솬a|!YeVF7a/h6D&O!t"i. B@&F*,9[("ϧ[?Yq #1G v7k"5r I ߿O/6"C)VVmm;@k17?FjSV9Q ̄}ƿ93T=vN~.?Hǫz恪Y]ɗǺ7WG\ҋo^||sC1Lr]I@dDa`z9U}pX83VBI:$JbO8wQ68S'k6N M,v"uΝ8ştC$%k65Vg7_K hR5#j#əBiOo{i3PAs1rۉ Rg}a"8oo]NZA_nzyQǡ#LxN LYkI}8#ĝkN+`˷̗0!7ӶL2l 8 Кf)P"pbQpe,ti<::rT% j6{6ShqH4[!t˝LV`Ӕ׭O{ ]&`k[yΫ&@ c/iQ0@ϣSzp/Z3,?a@+c{{@ &?N?^^_^~J"c2/@< "vj]rmw Fx'a$μUei9yZe. .;Tm ϖu29N iU. ?jNp9[8$j:IA.`6o4{nk*6x 6j61+`3*z1M&3 ~k~=] GUQnP6zW [lF\j~?s/-E6d~E7Ag` h uQ慭цfK_Em0 t'e:B :~D+JWY'PW|Y .zFkUjH*XξZ4*H8*e Htzv<'q@R4xD rii3ؚ>ܘ72XzmG}۟Aԭ/@#<Ov]UC;cHgWE;7t3FμvϳX4=AgMvC|KBƎpd:Tz3ΧJ9恕\5'+7B73 7fII~q>n6ʪ7fm8晄_4' ?/ﭝj7@43/KǠ6*w4+XPd\34t IoSYZАXm= 6)c@W0YS i~쳗':65+܂q}.ydDfe4NjElt,^6swZ)m]J;r5z~xI= -EFDG;t(p 5֎L>r@YuRJ*t e:IZY_AYo 0QiӳVt!G+opH.lJ{p]'؝\Ģ8sȅkR &ᶠ\=VwnP Z;2'ly)॔d_%z4H)uX[J*t+{JtjuBznH؜ZkrC:S3}[BHrQb0hET2Ue\Zɚtm)=hQȡ ^&¥9tpnBsN6ǔ'C~TgeUӆx|eu 54!FK(gɕzU{{FY/Xlm DH-+J|2iGR#Μc뒏Upwph@w,:Z)fQjgS1[7nujS6b'^LN]zl]h2^=*).^R="Vgro_c75swXvÉ'~q*{YXM$ͰH[3}Z&^Eũ>Z `܈G;OD"Ǜ 7gV58TI]E"okV[;°:FExEV=Y0Y_'W/AwFw{n06m0b3 0L.w.TYQ[i(8Xwǩ.A[l+CR5T?I~08R~hg F<ᆓXy_nNaG󂪠FCǁ[yIM\Oq![~ݺ5_FZBlxG7pc?P1Gh8A3YuP\3d$Udu%K*DML60ucO7%no+qUx\S~8IJ3d߮ NhF=4 aW7gH7L8F~5vӖZـØmQA5ᣡSح C r&ܑG62 ԑjW&4YWİ ZN,!ԨlP8'>ݑc>q Pj:e9pG&0#l w}M#ɀڲ3DuO3ADB$|θ27ҁ/UIr$; ͳ*vRYxZ=%p_Ꭰn "Vi:rح4gYX P+CbcPj|lgp= J'H{<(u`0?_{vi1jnׄغl`\F}6&DcND3ʨ T +c=`:uxӆ=;Q(C߭p7Q84a*ʖ3{!g~+}Lh׷_gvr~[} nnA:'%P l/_$~(wW ,BU>D Әw;Nߍ;ߪ>!> @}ԫ{詌IZY#c^M?^xϫ7@^ ƟBtjfL+{WUj%%D8ro^b^OB30u]g&# ^/xTPbqGEEtlQէ6mrjZ }v1u3*PǒAE.sͧuUzuB (A:[\/R ϿA%vd _ ߶^K}pF*_S$ahu XS&1[Gيe ~}o|K"gX+Y/O/Ư x%v޼۷ϟ~R]Q>GMM8 99FH]>ĘNHFp {f^hjطjZ K:~tƛRF0hM>VʉbN7ෞ6P#h`Q[c["N^} T/A;u2Dc߅\Ɋ}8߯*T>ZWL91tk3@kU%Nj/xd.<,4P8j8ţTqtF3(ƍ V(xBqPCE"fUA΃PH UF| bj5ZAεC#r!UA߾2N̈(De%pԴ 49j#k֟6`·?``}zoٷoZ76n9!R\8TD)yIL 1@08$'$b8olǨ 8z"P[c]VSzSm> u- fu v(Fn2sZxy}T.j}BM-"=p` Lvng0nܫV23cx07[݆ک+\ <6ieu7yh3$:SqHl6B?χ_ŜI7\KL{hw޳EB9WjH;tr'hI_9xq4`UIwr|1-8YF9gkC-(NU;Csë9Tcy\Iը|WY{ CSO/6 JćEJu`]p>S`tos"Sn+?"[VjZf!p0ƏJ@3вjDe9^%JXmnpб AlQuhnԚ$ZVGLј@Ulշ9<`E)5$8O0uP; [WϷ;b'l m4@1NPS I3h\wfn$z=T涂 Ѭb/=31k:JQ8[DsA>"};Vҁ,kVA@+@0&|(6UOL6Qm(6ո &`g/a*Qr%EmjF^u+y_bD|]FE) \nCC0+뮞(k4*AHKrN4v#?_Vc%}q cPPB7'&TE=]e&Z(@zqp "e\/KBmo/; @3nD|7LQ"Bu4@G{fEbo.wQqt'qR=] ~ 3k|vQ*\Jy,G/z}8 V<̟eJ'*>He{[ sJ+@t;9iM .puVwR]-#e0 J2H?UUfB2lNT~#pRY#/.HOe%S|юeE@#8VzQqQs 9q>#V:B̳EY?#ϕ٫9P?-9Y@O.*鷗:2 pۭeZKeG.U>bFAq+8kvŵm^Ϛ-BdbȌ ) -Jpo[=ãkLFH7O] xzD8~8 Thh!*%h q`E, 6Ejzt)m6$[|.0vi wccyL8UDќMlu Z$s4#J340&`6(1=Ӷj7c \;YkP q|}zV_eQ8󕄃^N%0=Dˁ55?/P [ë Z7X ,4Zl)D:_ٷ\Ɂ2K7o/VS~6orX8VR>ykкkQ9 %DрٟyfLW%]2 ,|,&3yFFw]n8 <˻7c2n]P uX 5v`DCS8)&oJgH`ߠA==\&/`lࡲ\9RdP%2R>;$DFF1 5)<}t QawNIĮ1JbMZ`Ebۓ0YSتÍ[ܧ O<_t.Mu/Hj[t3ĉ(&~t pomܰwN ;Z1Ƚ:Mi® [(.)zsohVhn`3& #;,oQ2%uTpB Lokx@k2k$T=_(*Cn@@f׉6GA6Ѹ.b G=Ut@C <;.>!<-୔K 2&)luk&"  ܖxOHc^۰΃ ݔdL͈rch S]Ne怉*YEݒߐAiWIq}1Ak٭z~*TaS J"Q-Ixn C谶|6Fx6Fљu/&8Σ|]ٿ|>-qbc.l=Ou;Ƒc97Vhr15$,?_}nؾi7,8x,UU`4k" g:f\#d`$֒MJsq?/Y7b-Q7AAwx jGi9 ] ehn(ϱFpn-4[oDjAp6Dy`Jd}_Rz`@HaO~g$͆:=jVB"<Uu<<4 7 xwC3N>-2 |Lmk6l( ٛGR`r.3=e՞*P;S)#Gί۠O¶&*2bQk-uZGkk g&۴5S1%kyPgӺ鷱+xi5(b+_v+N-EĘԎPMͶT*mTg*w$J)ϖ9#f/WG˧hmnݏO'?'6CAAd.3GyUcr(iU"߬ȅ޼*b?:9Kfn 6>Q%۔KXp#Z ?9(xu΂0~"UҴjKox4H!o>b*XVOW&`̸ XOœ(az4z!K& h|ƥX:7ǘAI\F\\|٠n`5'(Αh:Wi6zTzX*_=g,3܆94NqeǡuKcZ&`VЃNY{U 36 C;ax7P|Hq:$%xP86qFgKpzbYdۨ0gǡ6lz`atC/b!}KIB*|1uzf2n-~pY"M}REm2cL" E &@VEcYS&q"-M>UkrT ,`9TA+(LDm|KJ4!Ep&@qH8l-d[)7G eLlsRwmiOH$~ 2Y䫕z"0 ^rX8DcJ#_Z@pe|܋q6߻krQ@Xg<A2(8vP/eSK):A Iˁ~DhR8g"(ZU nȦЂ>9(X@$+gf6јEPF՚]U99$s=Jp4؜Y712su0b'>V D8QArTd`UʨV< 3/8F~N%xThAȰFJ<܂YTs/}Lp"`oA՟tf9 mQVX$*9Υ??Zg%on|.0͠H% U=V˫' Q)cIR*hAKpv;6CQ\YL|[vsĥNg$ĈqV525MBg{¨cjq3s3DE=IaiI>)}b}[}3~¨?Ik}iw&0JbKGf4 c}KcV˱VHҵIUӡ3/6>Xs͙LH'De_yGpfvK(MǛ/ԛ넕e]=㢐?.w PX#pZw&'‰GA  /f؀F98W!紑C\^ WtU;n8'Dbuyc6^~^W;@DF 'dWjxda֢T3Q5b>cByTVBmQtBU!.b.ijݻw~{IadHЙޫj# {RGx̱Wy6 ssf{h&1/Sh쀹թhħw$q'C4Pw6<X'5˓3̀Nҹ| l[_?8!uCi$%Un@5J|Ң S/:Ш𯹢?_pr\20toE׊PMt?Xvmɬ(INR/dYdfK$1|vj +6(hqK }B>7,"_fZ_(w?D8cP\֏1-k[KJ<ZrΨATN&&>F pjZWw2 GN\*lҵ>}b9rnY>2sxOlϮr`bY١>%`V< ?h)Q+kEP/ךZ޽(7, ?%Kd1*'1F/T !(tAFvHUiE + S`߽y{K~4;7JQiY h-Tz ֔ӵr'l)R-A 0QgKh4MB7 FA, ZC8A[OfhF<Ĭfۜuzfz@('!:P@}/ΜͺTll:Dc[vlBzf {SN7N:ΠM=̺/;z`/>Q.:Ѽvs} cмQJCTG emUzߒthF[`O =1Np&tm]m8wZ4z5yi!Osר\`Tzu4غ[7aK7C[ڨA92zCSg.>R>UڣKGG#euדU}G#?.>㦴#G?18WÍ-d)ğdeP݁s (Yg$QEh<Mը=6Bk:6]#ӣR Lm0T<4Y]q&s~>-pjqj5PW3tso?X\ Х1|f%(w"2"Yx\ & OvSA`3|>R)YChX vJ-edt tH̴[ӎ'1G;gU*\'oOGʊOR=;x#DLDX -}0If'6yۢks`DL9,(9~f1t1(F*~>dpљ{B~EmmF*юTh י% 6`B944O뾹y!)vM^Xb-ץ^V/q_&a%P|Yk~`|ȡg"=9Q7ڙ%81IvWw( 0ڵj002}QۿJ)6Zڿ>=ΦC͙2H ;/p2P*,I 850;yVVmdE6RxB9R X;w|0>5莔6! & x${Õb&y:ݸ.yz^eV!8@EYu'pYdL .=P#[y17ģE?sXPAV#p=34Gz_()"U甧 c\Dy]#Ӕ(J*?A<S*f*)p. fUf_;,Ac Kڟ]`?OΗ+6$q.413κ|G^8<μtm/_zG9nt]muy/Y1}x ᾲ_.^x<h D @s_1B]g]5"rOVa_;p u:'R-'joqu.6@}21۾Ӏ>?W;@4+L Vi 9pc׫X^mD*73J#"bwPW W(΀,Vм3 t`bWKơc7+(]3val~E<#?޸ Q&,:ssUf+]sC>^muW[2ƥ|!'2n,݁ZݪB"Ovf8QS2D3 RP! LH3THsj@G)ȓDSx(H`7_Rp%U^p[4?^B݊骸Q 7׏HPQpWG8L*25JO;|/OA \?IN"1O^dRDħf(cmfXQb }uq7_^믯_^ aL7BR8RE`15S)3V!*Čwա֭ՂxzcLO=_tk.&5V0v"4o 1/̉5ٽu}i~ H"60) \.$g\Fv |}û1u*+[]GBEXVk[ [g ֖^fPXA"`~'R~ /+p}VTYWMZbk)B!~.J)4zƻۋ+pf=G`?mPzgPOO`^se'3ǜ0bZ! W04v2[n05"7y!V!P*6zUVLA |u\Σ3vc ^ @q 87|%R) ip ' |̖1w{f;Aѡf6MXxG>0ErkLna2lvߨUQ?/1g8[D)PB[.,[ 73}5S݈0IKE>-EOz{\ 3[*I"PgpBnk'i\S;bmI&.Q!O D@GȨ%fOgv=T .H,5 ߼$ i?s1fvTY&AĻw%՟x-Q}R50x-dȖTpD wygV0D/ "&}^>GCP8#~m^O(<vc$w BexTDK Highscores*K#dK1mKjK*jKYKFK FK1BGKaDKPaulPaul SchulzeKallePaul SchulzeMartina SommerMartina SommerSommer MartinaNo NameTDK Pinball PlayerMartina Sommer$A:xaddress library import_name stack_purge_bytes call_sites status stage prototype evidence notes 1228:0000 KERNEL GETVERSION 0 2 verified binary-reviewed pascal16 dword GetVersion() disassembly 1000:fdb0-fdf2 and 1010:05ad-05c9; Wine 11.15 KERNEL ordinal 3; program-entry and multimedia-startup tests Both call sites take no arguments; the NE entry preserves DX:AX while the multimedia unit stores AX only, and both decode low-byte major/high-byte minor exactly. 1228:0004 KERNEL GLOBALALLOC 6 3 verified binary-reviewed pascal16 -ret16 GlobalAlloc(word long) Wine 11.15 ordinal 15 prototype; call sites 1008:15c7, 1018:01dc, and 1020:0222; focused global-memory, thunk-pool, and heap tests All calls have exact flags/uint32 byte order, handle use, and failure behavior represented; uses are application locked blocks, 256-byte executable thunk pools, and Borland heap blocks. 1228:0008 KERNEL GLOBALFREE 2 2 verified binary-reviewed pascal16 -ret16 GlobalFree(word) Wine 11.15 ordinal 17 prototype; call sites 1008:15e7 and 1020:035b; reconstructed/tests/test_global_memory.c and test_heap_paths.c Both calls pass a GlobalHandle-derived HGLOBAL after GlobalUnlock and ignore the returned handle exactly. 1228:000c KERNEL GLOBALLOCK 2 3 verified binary-reviewed pascal16 GlobalLock(word) Wine 11.15 ordinal 18 prototype; call sites 1008:15c7, 1018:01dc, and 1020:0222; focused global-memory, thunk-pool, and heap tests All calls pass the immediately returned HGLOBAL and preserve the resulting 16:16 pointer, including the unguarded thunk-pool lock and guarded Borland allocator path. 1228:0010 KERNEL GLOBALUNLOCK 2 5 verified binary-reviewed pascal16 -ret16 GlobalUnlock(word) Wine 11.15 KERNEL ordinal 19 prototype; call sites 1008:10c3,139c,15ab,15f6 and 1020:0356; focused sound/palette/bitmap/global-memory/heap tests All five calls are verified: three loaded-resource handles after copy/use and two GlobalHandle-derived allocations before GlobalFree; every BOOL16 return is ignored. 1228:0014 KERNEL GLOBALHANDLE 2 2 verified binary-reviewed pascal16 GlobalHandle(word) Wine 11.15 ordinal 21 prototype; call sites 1008:15ef and 1020:034b; reconstructed/tests/test_global_memory.c and test_heap_paths.c Both calls pass only the selector half of a far pointer; zero handles suppress freeing and nonzero handles feed the reviewed unlock/free sequence. 1228:0018 KERNEL GLOBALCOMPACT 4 1 verified callsite-reviewed pascal16 GlobalCompact(long) Wine wine-11.15 krnl386.exe16.spec line 28; disassembly 1020:019a-01c5 The sole call passes uint32 zero, preserves a high-word nonzero result, otherwise compares the low word with local free-byte counts. 1228:001c KERNEL WAITEVENT 2 1 verified binary-reviewed pascal16 -ret16 WaitEvent(word) disassembly 1020:0023-002a; Wine 11.15 KERNEL ordinal 30 prototype; reconstructed/tests/test_borland_startup.c Sole call pushes literal zero before startup InitApp; no return value is consumed, and ordering plus argument are tested. 1228:0020 KERNEL GETCURRENTTASK 0 2 verified binary-reviewed pascal16 GetCurrentTask() Wine 11.15 KERNEL ordinal 36 prototype; call sites 1010:008e and 1010:0327; reconstructed/tests/test_multimedia.c Finalizer passes the task to CTL3DUNREGISTER; loader passes it to CTL3DREGISTER. Both dynamic targets, returns, guards, and cleanup are verified. 1228:0024 KERNEL GETMODULEHANDLE 4 1 verified binary-reviewed pascal16 GetModuleHandle(segstr) Wine 11.15 KERNEL ordinal 47 prototype; sole call at 1010:013e; reconstructed/tests/test_multimedia.c The sole call passes the original far module-name argument; its HINSTANCE16 feeds GetModuleFileName for the fourth CTL3D search location. 1228:0028 KERNEL GETMODULEFILENAME 8 3 verified binary-reviewed pascal16 -ret16 GetModuleFileName(HINSTANCE16 segptr uint16) disassembly call sites 1008:25ca, 1010:0148, 1020:084c; Wine 11.15 KERNEL ordinal 49; focused TPWinCrt, multimedia, and command-line tests All three call sites have exact module, far-buffer, maximum-size, return-use, and in-place follow-up semantics represented. 1228:002c KERNEL GETPROCADDRESS 6 11 verified binary-reviewed pascal16 GetProcAddress(word str) Wine 11.15 KERNEL ordinal 50 prototype; eleven call sites 1010:0238-031b; reconstructed/tests/test_multimedia.c All calls pass the loaded HINSTANCE16 and exact ordered CTL3D names; far returns populate slots 0-10, except legacy Windows deliberately zeros slot 8 without calling the import. 1228:0030 KERNEL MAKEPROCINSTANCE 6 1 verified binary-reviewed pascal16 MakeProcInstance(segptr word) Wine 11.15 ordinal 51 prototype; sole call at 1018:1ac7; relocation to 1018:0133; reconstructed/tests/test_application.c The sole call passes the relocated bound-dispatch procedure and current HINSTANCE16, then stores the returned far proc instance in 1028:0672/0674. 1228:0034 KERNEL FREEPROCINSTANCE 4 1 verified binary-reviewed pascal16 -ret16 FreeProcInstance(segptr) Wine 11.15 ordinal 52 prototype; sole call at 1018:1b15; reconstructed/tests/test_application.c The sole call releases exactly the stored bound-dispatch proc instance before root/application allocation destruction; return is ignored. 1228:0038 KERNEL FINDRESOURCE 10 3 verified binary-reviewed pascal16 -ret16 FindResource(word str str) Wine 11.15 KERNEL ordinal 60 prototype; call sites 1008:1061,133c,14b3; sound/palette/bitmap harnesses All calls pass the current HINSTANCE16, exact name/MAKEINTRESOURCE far pointer, and custom type WAV, pal, or DAT; result chaining and lack of failure checks are represented. 1228:003c KERNEL LOADRESOURCE 4 3 verified binary-reviewed pascal16 -ret16 LoadResource(word word) Wine 11.15 KERNEL ordinal 61 prototype; call sites 1008:1067,134a,14c1; sound/palette/bitmap harnesses All calls pass current HINSTANCE16 plus the preceding HRSRC16, preserve the HGLOBAL16, and perform no failure check. 1228:0040 KERNEL LOCKRESOURCE 2 3 verified binary-reviewed pascal16 LockResource(word) Wine 11.15 KERNEL ordinal 62 prototype; call sites 1008:1095,1355,14cc; sound/palette/bitmap harnesses All calls receive the immediately loaded HGLOBAL16 and preserve the returned far pointer for byte copy, DIB header/bits, or waveform data. 1228:0044 KERNEL FREERESOURCE 2 2 verified binary-reviewed pascal16 -ret16 FreeResource(word) Wine 11.15 KERNEL ordinal 63 prototype; call sites 1008:10cb and 15b3; sound/bitmap harnesses Both calls occur after GlobalUnlock on the same resource handle and ignore BOOL16; the palette loader's intentional Unlock-only behavior is separately verified. 1228:0048 KERNEL _LCLOSE 2 2 verified call-sites-verified HFILE16 LClose16(HFILE16 file) Wine wine-11.15 ordinal 81 prototype; disassembly 1000:a8ea-a99b and a99c-ab3b; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c Both call sites close only successfully created/opened HiScores.Dat handles; load closes after valid or invalid header, save closes after all writes, returns are intentionally ignored, and no close occurs after -1. 1228:004c KERNEL _LREAD 8 3 verified call-sites-verified UINT16 LRead16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count) Wine wine-11.15 ordinal 82 prototype; disassembly 1000:a9d1-aa2e; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c All calls use an opened HiScores.Dat handle: 16 bytes to SS header, then only after header equality 40 bytes to SS encrypted scores and 220 bytes directly to DGROUP 08a6; all returns are deliberately ignored and short-read residue/tail effects are modeled and tested. 1228:0050 KERNEL _LCREAT 6 1 verified call-sites-verified HFILE16 LCreate16(Win16FarPtr file_name, INT16 attributes) Wine wine-11.15 ordinal 83 prototype; disassembly 1000:a8ee-a8fa; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c "Sole call passes DGROUP 0312 ""HiScores.Dat"" and attribute zero; signed -1 failure skips buffer construction, writes, and close; success handle is retained exactly." 1228:0054 KERNEL _LOPEN 6 2 verified call-sites-verified HFILE16 LOpen16(Win16FarPtr file_name, INT16 mode) Wine wine-11.15 ordinal 85 prototype; disassembly 1000:a9a4-a9c8; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c "Both calls use DGROUP 0320 ""HiScores.Dat""; mode zero is tried first and exactly on signed -1 mode 0x40 is retried; a second -1 selects defaults without read or close, and all branches are tested." 1228:0058 KERNEL _LWRITE 8 3 verified call-sites-verified UINT16 LWrite16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count) Wine wine-11.15 ordinal 86 prototype; disassembly 1000:a961-a990; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c All three calls use the successful HFILE and write header DGROUP 0014/16 bytes, encrypted-score SS buffer/40 bytes, then name SS buffer/220 bytes; every return is deliberately ignored and byte order is tested. 1228:005c KERNEL INITTASK 0 1 verified binary-reviewed pascal16 -register InitTask() disassembly 1000:fd85-fd8e and 1020:0002 register stores; Wine 11.15 KERNEL ordinal 91; reconstructed/tests/test_program_entry.c Sole register-return call supplies AX loader gate, ES:BX command line, DX show command, SI previous instance, and DI current instance directly to verified Borland startup. 1228:0060 KERNEL LOADLIBRARY 4 2 verified binary-reviewed pascal16 -ret16 LoadLibrary(str) Wine 11.15 KERNEL ordinal 95 prototype; modern and located-legacy calls at 1010:01f8/0216; reconstructed/tests/test_multimedia.c Both calls pass the mutable CTL3D path buffer; direct and locator-gated branches, <32 error handles, successful module lifecycle, and skipped-load failure are verified. 1228:0064 KERNEL FREELIBRARY 2 1 verified callsite-reviewed pascal16 -ret16 FreeLibrary(word) Wine wine-11.15 krnl386.exe16.spec line 100; disassembly 1010:0007-0016 The sole call is guarded by module handle >=32, passes that handle, ignores BOOL16, and intentionally leaves the stored handle unchanged while clearing proc slots. 1228:0068 KERNEL SETERRORMODE 2 2 verified binary-reviewed pascal16 -ret16 SetErrorMode(word) Wine 11.15 KERNEL ordinal 107 prototype; calls 1010:01f9/020d; reconstructed/tests/test_multimedia.c Modern loading sets 0x8000 immediately before LoadLibrary and 0 immediately after, ignores both returns, and legacy loading skips both calls; ordering is tested. 1228:006c KERNEL __AHINCR 2147483647 0 verified runtime-data equate16 __AHINCR = 8 Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L118 Wine Win16 ordinal 114; this is runtime data, not a callable function. 1228:0070 KERNEL GETPRIVATEPROFILEINT 14 3 verified call-sites-verified pascal16 -ret16 GetPrivateProfileInt(str str s_word str) Wine 11.15 KERNEL ordinal 127 prototype; disassembly 1008:1095-10b1; reconstructed/tests/test_sound.c; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0074 KERNEL GETDOSENVIRONMENT 0 1 verified binary-reviewed pascal16 segptr GetDOSEnvironment() disassembly 1008:2821-283a; Wine 11.15 KERNEL ordinal 131; reconstructed/tests/test_multimedia_paths.c Sole no-argument call returns the far base of the double-NUL DOS environment block; traversal preserves selector and returns a pointer immediately after matching NAME=. 1228:0078 KERNEL GETWINFLAGS 0 1 verified binary-reviewed pascal16 dword GetWinFlags() disassembly 1020:0038-0049; Wine 11.15 KERNEL ordinal 132 prototype; reconstructed/tests/test_borland_startup.c Sole call takes no arguments; only returned AL bits c0 and 02 classify 086/186, 286, or 386-plus arithmetic paths, including ignored upper bits. 1228:007c KERNEL GETWINDOWSDIRECTORY 6 1 verified binary-reviewed pascal16 -ret16 GetWindowsDirectory(ptr word) Wine 11.15 KERNEL ordinal 134 prototype; sole call at 1010:00df; reconstructed/tests/test_multimedia.c The sole call receives the 256-byte search buffer with maximum 0xff; its return is ignored and resulting directory becomes the second CTL3D search location. 1228:0080 KERNEL GETSYSTEMDIRECTORY 6 2 verified binary-reviewed pascal16 -ret16 GetSystemDirectory(segptr uint16) disassembly 1010:0107-0116 and 0476-0483; Wine 11.15 KERNEL ordinal 135; multimedia tests Locator uses a 255-byte stack buffer; unit startup uses the exact 200-byte DGROUP buffer and retains the returned length as its path-probe gate. 1228:0084 KERNEL GETFREESPACE 2 1 verified callsite-reviewed pascal16 GetFreeSpace(word) Wine wine-11.15 krnl386.exe16.spec line 172; disassembly 1020:016c-0190 The sole call passes 0x1000 and its uint32 result receives every local segment's uint16 free-byte count with carry. 1228:0088 KERNEL ALLOCCSTODSALIAS 2 2 verified binary-reviewed pascal16 -ret16 AllocCStoDSAlias(word) Wine 11.15 ordinal 170 prototype; call sites 1018:02bb and 1018:030c; reconstructed/tests/test_bound_thunks.c Allocate and release each alias the thunk's code selector, preserve its offset, patch through the returned writable selector, and free that alias afterward. 1228:008c KERNEL FREESELECTOR 2 2 verified binary-reviewed pascal16 -ret16 FreeSelector(word) Wine 11.15 ordinal 176 prototype; call sites 1018:02e9 and 1018:0329; reconstructed/tests/test_bound_thunks.c Both calls release exactly the temporary CS-to-DS alias returned for the current thunk and ignore the result. 1228:0090 KERNEL PRESTOCHANGOSELECTOR 4 1 verified binary-reviewed pascal16 -ret16 PrestoChangoSelector(word word) Wine 11.15 ordinal 177 prototype; sole call at 1018:029f; reconstructed/tests/test_bound_thunks.c The generated-pool selector is passed as both source and destination after all bytes are initialized, converting the locked block for executable thunk use; return is ignored. 1228:0094 MMTIMER SYSTEMTIMERMAKE 8 1 verified binary-reviewed pascal16 -ret16 SystemTimerMake(HWND16 recipient, word delay_ms, word resolution_ms, word one_shot) MMTIMER.DLL 1000:0039 disassembly; export ordinal 1; f1d9ac980c7bfba5dc53eaa9e7cb2c3cd9b82f879ee8962ad40bf863d641bb49 Binary-reviewed wrapper around timeSetEvent16: it installs MMTIMER 1000:0002, posts message 0x0580 to recipient, and returns the multimedia timer id. 1228:0098 MMSYSTEM SNDPLAYSOUND 6 4 verified binary-reviewed pascal16 sndPlaySound(ptr word) Wine 11.15 MMSYSTEM ordinal 2 prototype; call sites 1008:10ff,1164,1177,11ab; reconstructed/tests/test_sound.c All four calls are verified: NULL/0 stop in unload/play/stop helper, and loaded far sound/flags 5 playback with BOOL result stored to Playing. 1228:009c MMSYSTEM WAVEOUTGETNUMDEVS 0 1 verified binary-reviewed pascal16 waveOutGetNumDevs() Wine 11.15 MMSYSTEM ordinal 401 prototype; disassembly 1008:0fb8-0fc7; reconstructed/tests/test_sound.c The sole call has no arguments, stores the UINT16 device count at DGROUP 43ee, and returns early on zero; count and branch semantics are verified. 1228:00a0 MMSYSTEM WAVEOUTGETDEVCAPS 8 1 verified binary-reviewed pascal16 waveOutGetDevCaps(word ptr word) Wine 11.15 MMSYSTEM ordinal 402 prototype; disassembly 1008:0fca-0fe5; exact WAVEOUTCAPS16; reconstructed/tests/test_sound.c The sole call passes zero-filled device id 43f0, far DGROUP buffer 43be, and exact size 48; MMRESULT zero succeeds and failure clears device count. 1228:00a4 MMSYSTEM WAVEOUTGETVOLUME 6 1 verified binary-reviewed pascal16 waveOutGetVolume(word ptr) Wine 11.15 MMSYSTEM ordinal 415 prototype; disassembly 1008:1000-1027; reconstructed/tests/test_sound.c The sole conditional call passes device id 43f0 and a zeroed stack DWORD; its return is ignored and bits 8..15 of volume are rounded down to a multiple of ten. 1228:00a8 MMSYSTEM TIMEKILLEVENT 2147483647 1 verified binary-reviewed pascal16 timeKillEvent(word) Wine wine-11.15 MMSYSTEM ordinal 603 prototype; disassembly 1008:2932-295b; reconstructed/tests/test_system_timer.c The sole call passes the nonzero uint16 timer id from object offset +2, ignores the MMRESULT, and unconditionally clears the stored id afterward. 1228:00ac KERNEL GETVERSION 0 0 verified unused-slot-verified pascal16 GetVersion() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L6; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00b0 KERNEL GLOBALALLOC 6 0 verified unused-slot-verified pascal16 -ret16 GlobalAlloc(word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L18; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00b4 KERNEL GLOBALFREE 2 0 verified unused-slot-verified pascal16 -ret16 GlobalFree(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L20; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00b8 KERNEL GLOBALLOCK 2 0 verified unused-slot-verified pascal16 GlobalLock(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L21; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00bc KERNEL GLOBALUNLOCK 2 0 verified unused-slot-verified pascal16 -ret16 GlobalUnlock(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L22; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00c0 KERNEL GLOBALHANDLE 2 0 verified unused-slot-verified pascal16 GlobalHandle(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L24; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00c4 KERNEL GLOBALCOMPACT 4 0 verified unused-slot-verified pascal16 GlobalCompact(long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L28; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00c8 KERNEL WAITEVENT 2 0 verified unused-slot-verified pascal16 -ret16 WaitEvent(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L33; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00cc KERNEL GETCURRENTTASK 0 0 verified unused-slot-verified pascal16 GetCurrentTask() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L39; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00d0 KERNEL GETMODULEHANDLE 4 0 verified unused-slot-verified pascal16 GetModuleHandle(segstr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L50; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00d4 KERNEL GETMODULEFILENAME 8 0 verified unused-slot-verified pascal16 -ret16 GetModuleFileName(word ptr s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L52; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00d8 KERNEL GETPROCADDRESS 6 0 verified unused-slot-verified pascal16 GetProcAddress(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L53; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00dc KERNEL MAKEPROCINSTANCE 6 0 verified unused-slot-verified pascal16 MakeProcInstance(segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L54; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00e0 KERNEL FREEPROCINSTANCE 4 0 verified unused-slot-verified pascal16 -ret16 FreeProcInstance(segptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L55; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00e4 KERNEL FINDRESOURCE 10 0 verified unused-slot-verified pascal16 -ret16 FindResource(word str str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L63; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00e8 KERNEL LOADRESOURCE 4 0 verified unused-slot-verified pascal16 -ret16 LoadResource(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L64; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00ec KERNEL LOCKRESOURCE 2 0 verified unused-slot-verified pascal16 LockResource(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L65; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00f0 KERNEL FREERESOURCE 2 0 verified unused-slot-verified pascal16 -ret16 FreeResource(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L66; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00f4 KERNEL _LCLOSE 2 0 verified unused-slot-verified pascal16 -ret16 _lclose(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L85; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00f8 KERNEL _LREAD 8 0 verified unused-slot-verified pascal16 -ret16 _lread(word segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L86; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:00fc KERNEL _LCREAT 6 0 verified unused-slot-verified pascal16 -ret16 _lcreat(str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L87; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0100 KERNEL _LOPEN 6 0 verified unused-slot-verified pascal16 -ret16 _lopen(str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L89; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0104 KERNEL _LWRITE 8 0 verified unused-slot-verified pascal16 -ret16 _lwrite(word ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L90; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0108 KERNEL INITTASK 0 0 verified unused-slot-verified pascal16 -register InitTask() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L95; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:010c KERNEL LOADLIBRARY 4 0 verified unused-slot-verified pascal16 -ret16 LoadLibrary(str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L99; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0110 KERNEL FREELIBRARY 2 0 verified unused-slot-verified pascal16 -ret16 FreeLibrary(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L100; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0114 KERNEL SETERRORMODE 2 0 verified unused-slot-verified pascal16 -ret16 SetErrorMode(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L111; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0118 KERNEL __AHINCR 2147483647 0 verified runtime-data equate16 __AHINCR = 8 Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L118 Wine Win16 ordinal 114; this is runtime data, not a callable function. 1228:011c KERNEL GETPRIVATEPROFILEINT 14 0 verified unused-slot-verified pascal16 -ret16 GetPrivateProfileInt(str str s_word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L131; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0120 KERNEL GETDOSENVIRONMENT 0 0 verified unused-slot-verified pascal16 GetDOSEnvironment() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L135; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0124 KERNEL GETWINFLAGS 0 0 verified unused-slot-verified pascal16 GetWinFlags() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L136; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0128 KERNEL GETWINDOWSDIRECTORY 6 0 verified unused-slot-verified pascal16 -ret16 GetWindowsDirectory(ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L138; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:012c KERNEL GETSYSTEMDIRECTORY 6 0 verified unused-slot-verified pascal16 -ret16 GetSystemDirectory(ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L139; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0130 KERNEL GETFREESPACE 2 0 verified unused-slot-verified pascal16 GetFreeSpace(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L172; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0134 KERNEL ALLOCCSTODSALIAS 2 0 verified unused-slot-verified pascal16 -ret16 AllocCStoDSAlias(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L173; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0138 KERNEL FREESELECTOR 2 0 verified unused-slot-verified pascal16 -ret16 FreeSelector(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L179; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:013c KERNEL PRESTOCHANGOSELECTOR 4 0 verified unused-slot-verified pascal16 -ret16 PrestoChangoSelector(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L180; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0140 GDI SETBKCOLOR 6 1 verified call-sites-verified pascal16 SetBkColor(word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L1; all 1 direct call sites map to verified address-linked function rows and readable C All 1 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0144 GDI SETBKMODE 4 2 verified call-sites-verified INT16 SetBkMode16(HDC16 dc, INT16 mode) Wine wine-11.15 ordinal 2 prototype; disassembly 1000:5ca2-5ca8 and 5e93-5e9b; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c Both calls target the 300x360 buffer DC: mode 1 is installed and its exact return saved, then that saved mode is restored after drawing; sequence and arguments are tested. 1228:0148 GDI SETTEXTCOLOR 6 3 verified call-sites-verified pascal16 SetTextColor(word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L9; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:014c GDI TEXTOUT 12 5 verified call-sites-verified pascal16 -ret16 TextOut(word s_word s_word str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L33; all 5 direct call sites map to verified address-linked function rows and readable C All 5 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0150 GDI BITBLT 20 95 verified call-sites-verified pascal16 -ret16 BitBlt(word s_word s_word s_word s_word word s_word s_word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L34; all 95 direct call sites map to verified address-linked function rows and readable C All 95 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0154 GDI SELECTOBJECT 4 99 verified call-sites-verified pascal16 -ret16 SelectObject(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L45; all 99 direct call sites map to verified address-linked function rows and readable C All 99 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0158 GDI CREATECOMPATIBLEBITMAP 6 11 verified call-sites-verified pascal16 -ret16 CreateCompatibleBitmap(word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L51; all 11 direct call sites map to verified address-linked function rows and readable C All 11 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:015c GDI CREATECOMPATIBLEDC 2 41 verified call-sites-verified pascal16 -ret16 CreateCompatibleDC(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L52; all 41 direct call sites map to verified address-linked function rows and readable C All 41 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0160 GDI CREATEDC 16 1 verified binary-reviewed pascal16 -ret16 CreateDC(str str str ptr) Wine 11.15 GDI ordinal 53 prototype; sole call 1008:1537-154c; reconstructed/tests/test_bitmap_loader.c "The sole call passes far ""Display"" plus null device, output, and initialization-data pointers; returned HDC owns the palette/CreateDIBitmap sequence and is deleted exactly once." 1228:0164 GDI DELETEDC 2 40 verified call-sites-verified pascal16 -ret16 DeleteDC(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L68; all 40 direct call sites map to verified address-linked function rows and readable C All 40 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0168 GDI DELETEOBJECT 2 29 verified call-sites-verified pascal16 -ret16 DeleteObject(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L69; all 29 direct call sites map to verified address-linked function rows and readable C All 29 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:016c GDI GETSTOCKOBJECT 2 4 verified call-sites-verified pascal16 -ret16 GetStockObject(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L87; all 4 direct call sites map to verified address-linked function rows and readable C All 4 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0170 GDI GETTEXTCOLOR 2 1 verified call-sites-verified COLORREF16 GetTextColor16(HDC16 dc) Wine wine-11.15 ordinal 90 prototype; disassembly 1000:5c85-5c91; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c Sole call reads the newly created buffer DC text color as a full DX:AX COLORREF, which is restored after all text rendering; full-dword behavior is tested. 1228:0174 GDI GETTEXTMETRICS 6 1 verified callsite-reviewed pascal16 -ret16 GetTextMetrics(word ptr) Wine wine-11.15 gdi.exe16.spec line 93; disassembly 1008:1ff1-1ffe The sole call passes the active TPWinCrt HDC and a far SS pointer to an exact 31-byte TEXTMETRIC16; BOOL16 is intentionally ignored. 1228:0178 GDI UNREALIZEOBJECT 2 4 verified call-sites-verified pascal16 -ret16 UnrealizeObject(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L142; all 4 direct call sites map to verified address-linked function rows and readable C All 4 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:017c GDI SETTEXTALIGN 4 4 verified call-sites-verified UINT16 SetTextAlign16(HDC16 dc, UINT16 alignment) Wine wine-11.15 ordinal 346 prototype; disassembly 1000:5c94-5c9f,5d2e-5d39,5df5-5e00,5e87-5e93; reconstructed/tdkpin_highscores.c; reconstructed/tests/test_highscores.c All static call sites target the buffer DC: initial 6 saves old alignment, every name row uses 0, every score row uses 2, and cleanup restores the saved value; exact 22 dynamic calls are tested. 1228:0180 GDI CREATEPALETTE 4 2 verified binary-reviewed pascal16 -ret16 CreatePalette(ptr) Wine 11.15 GDI ordinal 360 prototype; call sites 1008:009a and 12f7; reconstructed/tests/test_palette_gdi.c and test_palette.c Both exact LOGPALETTE256 pointers are verified: temporary all-black PC_NOCOLLAPSE realization and persistent RGB-table palette publication. 1228:0184 GDI UPDATECOLORS 2 3 verified call-sites-verified pascal16 -ret16 UpdateColors(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/gdi.exe16/gdi.exe16.spec#L267; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0188 GDI CREATEDIBITMAP 20 1 verified binary-reviewed pascal16 -ret16 CreateDIBitmap(word ptr long ptr ptr word) Wine 11.15 GDI ordinal 442 prototype; sole call 1008:1572-1590; reconstructed/tests/test_bitmap_loader.c The sole call passes Display HDC, stack BITMAPINFOHEADER16, DWORD CBM_INIT=4, DAT bits at resource+40, allocated BGR0 BITMAPINFO, and DIB_RGB_COLORS=0; returned HBITMAP is propagated. 1228:018c USER MESSAGEBOX 12 6 verified call-sites-verified pascal16 -ret16 MessageBox(word str str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L1; all 6 direct call sites map to verified address-linked function rows and readable C All 6 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0190 USER INITAPP 2 1 verified binary-reviewed pascal16 -ret16 InitApp(HINSTANCE16) disassembly 1020:002b-0037; Wine 11.15 USER ordinal 5 prototype; reconstructed/tests/test_borland_startup.c Sole call receives the captured DI instance after WaitEvent(0); zero return terminates through DOS with status ff, nonzero continues to CPU detection. 1228:0194 USER POSTQUITMESSAGE 0 3 verified call-sites-verified pascal16 -ret16 PostQuitMessage(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L6; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0198 USER GETTICKCOUNT 2147483647 1 verified call-sites-verified pascal16 GetTickCount() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L11; all 1 direct call sites map to verified address-linked function rows and readable C All 1 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:019c USER SETCAPTURE 2 1 verified binary-reviewed pascal16 HWND16 SetCapture(HWND16) disassembly 1018:199b-19b1; Wine 11.15 USER ordinal 18; reconstructed/tests/test_window_advanced_handlers.c Sole call passes receiver HWND before the attached mouse-tracking loop; previous-capture HWND return is ignored and ReleaseCapture is paired after the inclusive button-up iteration. 1228:01a0 USER RELEASECAPTURE 0 1 verified binary-reviewed pascal16 BOOL16 ReleaseCapture() disassembly 1018:19eb-19f6; Wine 11.15 USER ordinal 19; reconstructed/tests/test_window_advanced_handlers.c Sole no-argument call occurs after the attached tracking loop exits on WM_LBUTTONUP; BOOL16 is ignored and default event forwarding follows. 1228:01a4 USER SETFOCUS 2 7 verified call-sites-verified pascal16 -ret16 SetFocus(word) Wine 11.15 USER ordinal 22 prototype; disassembly 1018:172b-1736; reconstructed/tests/test_window_placement.c; all 7 direct call sites map to verified address-linked function rows and readable C All 7 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01a8 USER GETFOCUS 0 2 verified call-sites-verified pascal16 -ret16 GetFocus() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L22; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01ac USER REMOVEPROP 6 2 verified callsite-reviewed pascal16 -ret16 RemoveProp(word ptr) Wine wine-11.15 user.exe16.spec line 23; disassembly 1018:0076-0090 Both call sites remove OW1 then OW2 for the same HWND; returned property handles are intentionally ignored. 1228:01b0 USER GETPROP 6 2 verified call-sites-verified pascal16 -ret16 GetProp(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L24; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01b4 USER SETPROP 8 2 verified callsite-reviewed pascal16 -ret16 SetProp(word str word) Wine wine-11.15 user.exe16.spec line 25; disassembly 1018:004a-0069 Both call sites bind one HWND to the object's selector under OW1 and offset under OW2; BOOL16 results are intentionally ignored. 1228:01b8 USER SCREENTOCLIENT 6 2 verified binary-reviewed pascal16 -ret16 ScreenToClient(word ptr) Wine 11.15 USER ordinal 29 prototype; both call sites 1018:164a-165b and 1673-1684; reconstructed/tests/test_window_placement.c Both calls pass the same stack RECT16 top-left as POINT16; one uses the VMT-returned MDI-client HWND under flag 08 and the other uses the parent HWND under attribute bit 40000000; BOOL16 is ignored. 1228:01bc USER ISICONIC 0 4 verified call-sites-verified pascal16 -ret16 IsIconic(word) Wine 11.15 USER ordinal 31 prototype; disassembly 1018:15c8-15da; reconstructed/tests/test_window_placement.c; all 4 direct call sites map to verified address-linked function rows and readable C All 4 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01c0 USER GETWINDOWRECT 6 2 verified binary-reviewed pascal16 BOOL16 GetWindowRect(HWND16 segptr RECT16) disassembly 1018:15ee-15ff and 1921-1931; Wine 11.15 USER ordinal 32; placement and advanced-handler tests Both calls pass exact HWND and eight-byte stack RECT16 pointers and ignore BOOL16; one converts screen placement, the other caches signed 16-bit width/height differences. 1228:01c4 USER GETCLIENTRECT 6 6 verified call-sites-verified pascal16 -ret16 GetClientRect(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L32; all 6 direct call sites map to verified address-linked function rows and readable C All 6 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01c8 USER GETWINDOWTEXT 0 1 verified call-sites-verified pascal16 -ret16 GetWindowText(word segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L35; all 1 direct call sites map to verified address-linked function rows and readable C All 1 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01cc USER SETWINDOWTEXT 0 3 verified binary-reviewed pascal16 BOOL16 SetWindowText(HWND16 segstr) disassembly 1008:16cd-16e0, 1008:24f5-2503, and 1018:0500-050d; Wine 11.15 USER ordinal 37; dialog/TPWinCrt/object tests All three call sites have exact HWND/text arguments and ignored BOOL16 returns: dialog caption field, inactive TPWinCrt stack caption, and child-activation text. 1228:01d0 USER BEGINPAINT 8 2 verified binary-reviewed pascal16 HDC16 BeginPaint(HWND16 segptr PAINTSTRUCT16) disassembly 1008:1782-1791 and 1018:1870-1880; Wine 11.15 USER ordinal 39; TPWinCrt and advanced-handler tests Both call sites pass exact HWND plus 32-byte PAINTSTRUCT16 storage; TPWinCrt stores the returned HDC while ObjectWindows consumes the structure HDC through ordered virtual calls. 1228:01d4 USER ENDPAINT 6 2 verified binary-reviewed pascal16 BOOL16 EndPaint(HWND16 segptr PAINTSTRUCT16) disassembly 1008:17f4-1806 and 1018:18d1-18e1; Wine 11.15 USER ordinal 40; TPWinCrt and advanced-handler tests Both calls pair the same HWND/PAINTSTRUCT used by BeginPaint after restoring fonts or completing attached/window paint virtuals; BOOL16 is ignored. 1228:01d8 USER CREATEWINDOW 34 1 verified binary-reviewed pascal16 HWND16 CreateWindow(segstr segstr long s_word s_word s_word s_word HWND16 HMENU16 HINSTANCE16 segptr) disassembly 1008:244e-2487; Wine 11.15 USER ordinal 41; reconstructed/tests/test_tpwincrt_lifecycle.c Sole call's class/title, style 00ff0000, four CW_USEDEFAULT words, null parent/menu/parameter, process instance, returned HWND publication, and subsequent Show/Update are verified. 1228:01dc USER SHOWWINDOW 4 2 verified call-sites-verified pascal16 -ret16 ShowWindow(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L41; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01e0 USER GETPARENT 2 4 verified call-sites-verified pascal16 -ret16 GetParent(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L45; all 4 direct call sites map to verified address-linked function rows and readable C All 4 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01e4 USER ISWINDOW 0 2 verified call-sites-verified pascal16 -ret16 IsWindow(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L46; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01e8 USER ISCHILD 0 1 verified call-sites-verified pascal16 -ret16 IsChild(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L47; all 1 direct call sites map to verified address-linked function rows and readable C All 1 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01ec USER DESTROYWINDOW 2 1 verified binary-reviewed pascal16 -ret16 DestroyWindow(word) Wine 11.15 USER ordinal 53 prototype; sole call at 1018:0d5e; reconstructed/tests/test_window_destroy.c The sole call receives object HWND +4 after child marking and after the MDI getter path declines; zero HWND skips it and BOOL16 return is ignored. 1228:01f0 USER REGISTERCLASS 4 2 verified binary-reviewed pascal16 uint16 RegisterClass(segptr WNDCLASS16) disassembly 1008:2588-2597 and 1018:0e76-0e8b; Wine 11.15 USER ordinal 57; TPWinCrt and ObjectWindows class tests Both call sites pass exact 26-byte Win16 class descriptors; first-instance gates, dynamic class construction, relocations, and ignored atom results are verified. 1228:01f4 USER SCROLLWINDOW 14 2 verified call-sites-verified pascal16 -ret16 ScrollWindow(word s_word s_word ptr ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L60; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:01f8 USER SETSCROLLPOS 8 4 verified callsite-reviewed pascal16 -ret16 SetScrollPos(word word s_word word) Wine wine-11.15 user.exe16.spec line 61; disassembly 1008:1886-1899, 18b9-18cd, 1937-1952, and 1953-196f All four calls use the TPWinCrt HWND, correct horizontal/vertical bar id, signed position, redraw=1, and intentionally ignore the previous position. 1228:01fc USER SETSCROLLRANGE 10 2 verified callsite-reviewed pascal16 -ret16 SetScrollRange(word word s_word s_word word) Wine wine-11.15 user.exe16.spec line 63; disassembly 1008:1868-1885 and 189a-18b8 Both calls use minimum 0, maximum max(recovered limit,1), redraw=0, correct bar id, and intentionally ignore BOOL16. 1228:0200 USER GETDC 2 43 verified call-sites-verified pascal16 -ret16 GetDC(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L65; all 43 direct call sites map to verified address-linked function rows and readable C All 43 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0204 USER RELEASEDC 4 43 verified call-sites-verified pascal16 -ret16 ReleaseDC(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L67; all 43 direct call sites map to verified address-linked function rows and readable C All 43 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0208 USER SETCURSOR 2 7 verified call-sites-verified pascal16 -ret16 SetCursor(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L68; all 7 direct call sites map to verified address-linked function rows and readable C All 7 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:020c USER ENDDIALOG 4 1 verified binary-reviewed pascal16 -ret16 EndDialog(word s_word) Wine 11.15 USER ordinal 88 prototype; sole call at 1008:2bfb; reconstructed/tests/test_dialog.c The sole call executes only for modal byte +0x25, after child marking, with object HWND +4 then signed result word; BOOL16 return is ignored. 1228:0210 USER ISDIALOGMESSAGE 6 1 verified binary-reviewed pascal16 -ret16 IsDialogMessage(word ptr) Wine 11.15 USER ordinal 90 prototype; sole call at 1018:1d0b; reconstructed/tests/test_application_loop.c The sole call passes active-dialog HWND at object +4 and the exact 18-byte MSG16 pointer; its BOOL16 is normalized by the target's NEG/SBB/NEG byte sequence. 1228:0214 USER GETDLGITEM 4 3 verified call-sites-verified pascal16 -ret16 GetDlgItem(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L90; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0218 USER SETDLGITEMTEXT 8 2 verified binary-reviewed pascal16 BOOL16 SetDlgItemText(HWND16 INT16 segstr) disassembly 1008:16e1-170c; Wine 11.15 USER ordinal 92; reconstructed/tests/test_dialog.c Both sole calls use the same dialog HWND with exact ids 100 and 101 and unaligned far text fields +2a and +2e; both returns are ignored. 1228:021c USER GETDLGITEMTEXT 10 1 verified binary-reviewed pascal16 -ret16 GetDlgItemText(word word segptr word) Wine 11.15 USER ordinal 93 prototype; sole call at 1008:16aa; reconstructed/tests/test_dialog.c The sole call passes object HWND +4, signed control id +0x32, unaligned far buffer +0x2e/+0x30, maximum 0x65, ignores the returned character count, and the caller returns true. 1228:0220 USER SENDDLGITEMMESSAGE 12 1 verified binary-reviewed pascal16 LRESULT16 SendDlgItemMessage(HWND16 INT16 UINT16 WPARAM16 LPARAM16) disassembly 1008:170d-1727; Wine 11.15 USER ordinal 101; reconstructed/tests/test_dialog.c Sole call targets control 101 with EM_LIMITTEXT 0415, uint16 field +32 minus one in wParam including zero-to-ffff wrap, lParam zero, and ignored LRESULT. 1228:0224 USER MESSAGEBEEP 2 1 verified binary-reviewed pascal16 BOOL16 MessageBeep(uint16) disassembly 1008:1bb8-1bc3; Wine 11.15 USER ordinal 104; reconstructed/tests/test_tpwincrt_text.c Sole BEL-byte branch passes literal zero, ignores BOOL16, and preserves dirty-range/cursor state. 1228:0228 USER GETKEYSTATE 0 1 verified callsite-reviewed pascal16 -ret16 GetKeyState(word) Wine wine-11.15 user.exe16.spec line 105; disassembly 1008:215d-216d The sole call pushes VK_CONTROL 0x11 and tests the signed INT16 result for negativity; Ghidra's zero purge metadata is contradicted by the call and the executing Wine spec. 1228:022c USER DEFWINDOWPROC 10 1 verified call-sites-verified pascal16 DefWindowProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L106; all 1 direct call sites map to verified address-linked function rows and readable C All 1 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0230 USER GETMESSAGE 14 1 verified binary-reviewed pascal16 BOOL16 GetMessage(segptr MSG16 HWND16 uint16 uint16) disassembly 1008:2522-254d; Wine 11.15 USER ordinal 108; reconstructed/tests/test_tpwincrt_lifecycle.c Sole clean-shutdown loop passes an 18-byte stack MSG and three zero filters; every nonzero result, including -1, is translated/dispatched until zero. 1228:0234 USER PEEKMESSAGE 14 4 verified binary-reviewed pascal16 BOOL16 PeekMessage(segptr MSG16 HWND16 UINT16 UINT16 UINT16) disassembly call sites 1008:00f3,1c22 and 1018:19bf,1c15; Wine 11.15 USER ordinal 109; runtime-input, message-loop, and advanced-handler tests All four calls pass 18-byte MSG storage, zero HWND/range filters, and PM_REMOVE=1; empty-queue behavior, WM_QUIT handling, tracking retention, and dispatch ordering are verified. 1228:0238 USER SENDMESSAGE 10 3 verified call-sites-verified pascal16 SendMessage(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L110; all 3 direct call sites map to verified address-linked function rows and readable C All 3 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:023c USER WAITMESSAGE 0 2 verified call-sites-verified pascal16 -ret16 WaitMessage() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L111; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0240 USER TRANSLATEMESSAGE 4 5 verified binary-reviewed pascal16 BOOL16 TranslateMessage(segptr MSG16) five disassembly call sites across verified TPWinCrt, shutdown, tracking, and application loops; Wine 11.15 USER ordinal 113; focused tests Every call receives the same stack MSG returned by Peek/GetMessage immediately before DispatchMessage; BOOL16 is ignored and all skip/loop conditions are verified. 1228:0244 USER DISPATCHMESSAGE 4 5 verified binary-reviewed pascal16 LRESULT16 DispatchMessage(segptr MSG16) five disassembly call sites across verified TPWinCrt, shutdown, tracking, and application loops; Wine 11.15 USER ordinal 114; focused tests Every call receives the translated stack MSG; LRESULT is ignored, while WM_QUIT/button-up and preprocessing gates are represented in enclosing functions. 1228:0248 USER CALLWINDOWPROC 14 1 verified binary-reviewed pascal16 CallWindowProc(segptr word word word long) Wine 11.15 USER ordinal 122 prototype; sole call at 1018:1337; reconstructed/tests/test_window_messages.c The sole call passes unaligned stored WNDPROC +0x37/+0x39, object HWND +4, exact message/WPARAM/LPARAM words, and stores the returned LRESULT16 into the ObjectWindows message record. 1228:024c USER UPDATEWINDOW 2 5 verified call-sites-verified pascal16 -ret16 UpdateWindow(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L123; all 5 direct call sites map to verified address-linked function rows and readable C All 5 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0250 USER INVALIDATERECT 10 6 verified call-sites-verified pascal16 -ret16 InvalidateRect(word ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L124; all 6 direct call sites map to verified address-linked function rows and readable C All 6 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0254 USER GETWINDOWWORD 4 2 verified call-sites-verified pascal16 -ret16 GetWindowWord(word s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L132; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0258 USER GETWINDOWLONG 4 5 verified binary-reviewed pascal16 LONG GetWindowLong(HWND16 INT16) five disassembly call sites in verified 1018:0097,0b25,0b6c,1788,17f8; Wine 11.15 USER ordinal 135; object/window/advanced-handler tests GWL_WNDPROC=-4 is used for bound-thunk recovery; GWL_STYLE=-16 supplies exact WS_HSCROLL/WS_VSCROLL high-word bits for base and attached scrolling. Full 32-bit results and all consumers are verified. 1228:025c USER SETWINDOWLONG 8 2 verified callsite-reviewed pascal16 SetWindowLong(word s_word long) Wine wine-11.15 user.exe16.spec line 135; disassembly 1018:0197-01ac and 1018:1488-14a3 Both calls use GWL_WNDPROC (-4): bootstrap installs the bound thunk; normal creation installs the object handler and preserves the previous procedure. 1228:0260 USER ENABLEMENUITEM 6 2 verified call-sites-verified pascal16 -ret16 EnableMenuItem(word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L154; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0264 USER GETSYSTEMMENU 4 2 verified call-sites-verified pascal16 -ret16 GetSystemMenu(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L155; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0268 USER CREATECARET 8 1 verified callsite-reviewed pascal16 -ret16 CreateCaret(word word word word) Wine wine-11.15 user.exe16.spec line 162; disassembly 1008:181b-182e The sole call passes TPWinCrt HWND, null bitmap, character width, and height 2 in exact far-Pascal order; BOOL16 is intentionally ignored. 1228:026c USER DESTROYCARET 0 1 verified callsite-reviewed pascal16 -ret16 DestroyCaret() Wine wine-11.15 user.exe16.spec line 163; disassembly 1008:185b-1864 The sole call has no arguments; BOOL16 is intentionally ignored. 1228:0270 USER SETCARETPOS 4 1 verified callsite-reviewed pascal16 -ret16 SetCaretPos(word word) Wine wine-11.15 user.exe16.spec line 164; disassembly 1008:182f-184f The sole call passes 16-bit wrapped x then y coordinates; BOOL16 is intentionally ignored. 1228:0274 USER SHOWCARET 2 1 verified callsite-reviewed pascal16 -ret16 ShowCaret(word) Wine wine-11.15 user.exe16.spec line 166; disassembly 1008:1850-185a The sole call passes the TPWinCrt HWND; BOOL16 is intentionally ignored. 1228:0278 USER LOADCURSOR 6 9 verified call-sites-verified pascal16 -ret16 LoadCursor(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L172; all 9 direct call sites map to verified address-linked function rows and readable C All 9 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:027c USER LOADICON 6 3 verified binary-reviewed pascal16 HICON16 LoadIcon(HINSTANCE16 segstr) disassembly 1000:0186-0194, 1008:2564-2573, 1018:128d-129b; Wine 11.15 USER ordinal 174; class-builder tests All three class-construction calls have exact instance/integer-resource arguments, handle publication, first-instance behavior, and no hidden ownership transfer. 1228:0280 USER LOADBITMAP 6 3 verified binary-reviewed pascal16 -ret16 LoadBitmap(word str) Wine 11.15 USER ordinal 175 prototype; all call sites 1000:5491,5551,5586 in verified asset initializer; reconstructed/tests/test_asset_initializer.c All calls pass current HINSTANCE16 and MAKEINTRESOURCE selectors zero for IDs 500,102,101; returned HBITMAPs publish to digit atlas or window fields +54/+52 at exact progress stages. 1228:0284 USER TRANSLATEACCELERATOR 8 1 verified binary-reviewed pascal16 -ret16 TranslateAccelerator(word word ptr) Wine 11.15 USER ordinal 178 prototype; sole call at 1018:1d48; reconstructed/tests/test_application_loop.c The sole call passes* main-window HWND +4, application HACCEL +0x0c, and exact MSG16 pointer; zero/nonzero return becomes AL false/true. 1228:0288 USER GETSYSTEMMETRICS 0 14 verified call-sites-verified pascal16 -ret16 GetSystemMetrics(s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L178; all 14 direct call sites map to verified address-linked function rows and readable C All 14 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:028c USER GETSYSCOLOR 0 2 verified call-sites-verified pascal16 GetSysColor(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L179; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:0290 USER DIALOGBOXPARAM 16 1 verified binary-reviewed pascal16 INT16 DialogBoxParam(HINSTANCE16 segstr HWND16 segptr LPARAM16) disassembly 1008:2b30-2b7d; Wine 11.15 USER ordinal 239; callback ledger; reconstructed/tests/test_dialog.c Sole indirect call passes process instance, template +1d, parent HWND, bound dispatcher +12, init value +21; preserves/restores application active dialog, maps -1 to status ffff, clears HWND, and returns INT16. 1228:0294 USER CREATEDIALOGPARAM 16 1 verified binary-reviewed pascal16 HWND16 CreateDialogParam(HINSTANCE16 segstr HWND16 segptr LPARAM16) disassembly 1008:2a8f-2ac8; Wine 11.15 USER ordinal 241; callback ledger; reconstructed/tests/test_dialog.c Sole indirect call passes process instance, template +1d, parent HWND, bound dispatcher +12, and init value +21; stores HWND, maps zero to status ffff, and preserves returned AH in its Boolean result. 1228:0298 USER ISZOOMED 0 1 verified binary-reviewed pascal16 -ret16 IsZoomed(word) Wine 11.15 USER ordinal 272 prototype; disassembly 1018:15db-15ed; reconstructed/tests/test_window_placement.c The sole call receives the receiver HWND after IsIconic returned zero and preserves all saved-placement words by returning immediately on nonzero. 1228:029c USER SELECTPALETTE 6 23 verified call-sites-verified pascal16 -ret16 SelectPalette(word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L282; all 23 direct call sites map to verified address-linked function rows and readable C All 23 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:02a0 USER REALIZEPALETTE 2 11 verified call-sites-verified pascal16 -ret16 RealizePalette(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L283; all 11 direct call sites map to verified address-linked function rows and readable C All 11 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:02a4 USER DEFDLGPROC 10 0 verified unused-slot-verified pascal16 DefDlgProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L304; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02a8 USER GETCLASSINFO 10 1 verified binary-reviewed pascal16 -ret16 GetClassInfo(word segstr ptr) Wine 11.15 USER ordinal 404 prototype; sole call at 1018:0e68; reconstructed/tests/test_class_registration.c The sole call passes current HINSTANCE16, VMT +0x2c far class name, and exact 26-byte WNDCLASS16 pointer; nonzero skips builder/registration and returns true. 1228:02ac USER WVSPRINTF 12 2 verified call-sites-verified pascal16 -ret16 wvsprintf(ptr str ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L391; all 2 direct call sites map to verified address-linked function rows and readable C All 2 relocation-backed direct call sites are in verified functions whose evidence records argument order, segmented pointer or handle use, return handling, side effects, and branches. 1228:02b0 USER DEFMDICHILDPROC 10 0 verified unused-slot-verified pascal16 DefMDIChildProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L410; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02b4 USER TRANSLATEMDISYSACCEL 6 1 verified binary-reviewed pascal16 -ret16 TranslateMDISysAccel(word ptr) Wine 11.15 USER ordinal 451 prototype; sole call at 1018:1d91; reconstructed/tests/test_application_loop.c The sole call follows main-window VMT +0x30 to a client object, passes client HWND +4 and exact MSG16 pointer, and booleanizes the BOOL16 result; null client skips the import. 1228:02b8 USER CREATEWINDOWEX 34 1 verified binary-reviewed pascal16 HWND16 CreateWindowEx(long segstr segstr long s_word s_word s_word s_word HWND16 HMENU16 HINSTANCE16 segptr) disassembly 1018:13cd-1429; Wine 11.15 USER ordinal 452; reconstructed/tests/test_window_creation.c Sole call passes exact extended/style dwords, VMT class far pointer, owned title, signed placement words, parent HWND, menu/id, process instance, far parameter, and stores returned HWND before common binding/error handling. 1228:02bc KEYBOARD Ordinal_5 2147483647 3 verified binary-reviewed pascal16 -ret16 AnsiToOem(segstr segptr) disassembly 1008:2629-2634, 1020:04d4-04f7, and 1020:0683-06a6; Wine 11.15 KEYBOARD ordinal 5; path and Borland-record tests All three call sites use identical source/destination buffers for in-place conversion: bounded DOS path, assigned TextRec name, and assigned FileRec name; results are ignored. 1228:02c0 KEYBOARD Ordinal_6 2147483647 1 verified binary-reviewed pascal16 -ret16 OemToAnsi(segstr segptr) disassembly 1008:25dc-25ea; Wine 11.15 KEYBOARD ordinal 6; reconstructed/tests/test_tpwincrt_lifecycle.c Sole call passes the same 80-byte module-title buffer as source and destination for in-place OEM-to-ANSI conversion; return is ignored. 1228:02c4 KERNEL GETVERSION 0 0 verified unused-slot-verified pascal16 GetVersion() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L6; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02c8 KERNEL GLOBALALLOC 6 0 verified unused-slot-verified pascal16 -ret16 GlobalAlloc(word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L18; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02cc KERNEL GLOBALFREE 2 0 verified unused-slot-verified pascal16 -ret16 GlobalFree(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L20; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02d0 KERNEL GLOBALLOCK 2 0 verified unused-slot-verified pascal16 GlobalLock(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L21; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02d4 KERNEL GLOBALUNLOCK 2 0 verified unused-slot-verified pascal16 -ret16 GlobalUnlock(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L22; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02d8 KERNEL GLOBALHANDLE 2 0 verified unused-slot-verified pascal16 GlobalHandle(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L24; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02dc KERNEL GLOBALCOMPACT 4 0 verified unused-slot-verified pascal16 GlobalCompact(long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L28; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02e0 KERNEL WAITEVENT 2 0 verified unused-slot-verified pascal16 -ret16 WaitEvent(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L33; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02e4 KERNEL GETCURRENTTASK 0 0 verified unused-slot-verified pascal16 GetCurrentTask() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L39; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02e8 KERNEL GETMODULEHANDLE 4 0 verified unused-slot-verified pascal16 GetModuleHandle(segstr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L50; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02ec KERNEL GETMODULEFILENAME 8 0 verified unused-slot-verified pascal16 -ret16 GetModuleFileName(word ptr s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L52; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02f0 KERNEL GETPROCADDRESS 6 0 verified unused-slot-verified pascal16 GetProcAddress(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L53; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02f4 KERNEL MAKEPROCINSTANCE 6 0 verified unused-slot-verified pascal16 MakeProcInstance(segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L54; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02f8 KERNEL FREEPROCINSTANCE 4 0 verified unused-slot-verified pascal16 -ret16 FreeProcInstance(segptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L55; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:02fc KERNEL FINDRESOURCE 10 0 verified unused-slot-verified pascal16 -ret16 FindResource(word str str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L63; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0300 KERNEL LOADRESOURCE 4 0 verified unused-slot-verified pascal16 -ret16 LoadResource(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L64; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0304 KERNEL LOCKRESOURCE 2 0 verified unused-slot-verified pascal16 LockResource(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L65; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0308 KERNEL FREERESOURCE 2 0 verified unused-slot-verified pascal16 -ret16 FreeResource(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L66; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:030c KERNEL _LCLOSE 2 0 verified unused-slot-verified pascal16 -ret16 _lclose(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L85; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0310 KERNEL _LREAD 8 0 verified unused-slot-verified pascal16 -ret16 _lread(word segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L86; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0314 KERNEL _LCREAT 6 0 verified unused-slot-verified pascal16 -ret16 _lcreat(str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L87; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0318 KERNEL _LOPEN 6 0 verified unused-slot-verified pascal16 -ret16 _lopen(str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L89; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:031c KERNEL _LWRITE 8 0 verified unused-slot-verified pascal16 -ret16 _lwrite(word ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L90; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0320 KERNEL INITTASK 0 0 verified unused-slot-verified pascal16 -register InitTask() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L95; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0324 KERNEL LOADLIBRARY 4 0 verified unused-slot-verified pascal16 -ret16 LoadLibrary(str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L99; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0328 KERNEL FREELIBRARY 2 0 verified unused-slot-verified pascal16 -ret16 FreeLibrary(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L100; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:032c KERNEL SETERRORMODE 2 0 verified unused-slot-verified pascal16 -ret16 SetErrorMode(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L111; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0330 KERNEL __AHINCR 2147483647 0 verified runtime-data equate16 __AHINCR = 8 Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L118 Wine Win16 ordinal 114; this is runtime data, not a callable function. 1228:0334 KERNEL GETPRIVATEPROFILEINT 14 0 verified unused-slot-verified pascal16 -ret16 GetPrivateProfileInt(str str s_word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L131; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0338 KERNEL GETDOSENVIRONMENT 0 0 verified unused-slot-verified pascal16 GetDOSEnvironment() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L135; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:033c KERNEL GETWINFLAGS 0 0 verified unused-slot-verified pascal16 GetWinFlags() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L136; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0340 KERNEL GETWINDOWSDIRECTORY 6 0 verified unused-slot-verified pascal16 -ret16 GetWindowsDirectory(ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L138; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0344 KERNEL GETSYSTEMDIRECTORY 6 0 verified unused-slot-verified pascal16 -ret16 GetSystemDirectory(ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L139; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0348 KERNEL GETFREESPACE 2 0 verified unused-slot-verified pascal16 GetFreeSpace(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L172; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:034c KERNEL ALLOCCSTODSALIAS 2 0 verified unused-slot-verified pascal16 -ret16 AllocCStoDSAlias(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L173; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0350 KERNEL FREESELECTOR 2 0 verified unused-slot-verified pascal16 -ret16 FreeSelector(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L179; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0354 KERNEL PRESTOCHANGOSELECTOR 4 0 verified unused-slot-verified pascal16 -ret16 PrestoChangoSelector(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/krnl386.exe16/krnl386.exe16.spec#L180; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0358 USER MESSAGEBOX 12 0 verified unused-slot-verified pascal16 -ret16 MessageBox(word str str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L1; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:035c USER INITAPP 2 0 verified unused-slot-verified pascal16 -ret16 InitApp(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L5; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0360 USER POSTQUITMESSAGE 0 0 verified unused-slot-verified pascal16 -ret16 PostQuitMessage(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L6; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0364 USER GETTICKCOUNT 2147483647 0 verified unused-slot-verified pascal16 GetTickCount() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L11; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0368 USER SETCAPTURE 2 0 verified unused-slot-verified pascal16 -ret16 SetCapture(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L17; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:036c USER RELEASECAPTURE 0 0 verified unused-slot-verified pascal16 -ret16 ReleaseCapture() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L18; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0370 USER SETFOCUS 2 0 verified unused-slot-verified pascal16 -ret16 SetFocus(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L21; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0374 USER GETFOCUS 0 0 verified unused-slot-verified pascal16 -ret16 GetFocus() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L22; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0378 USER REMOVEPROP 6 0 verified unused-slot-verified pascal16 -ret16 RemoveProp(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L23; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:037c USER GETPROP 6 0 verified unused-slot-verified pascal16 -ret16 GetProp(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L24; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0380 USER SETPROP 8 0 verified unused-slot-verified pascal16 -ret16 SetProp(word str word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L25; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0384 USER SCREENTOCLIENT 6 0 verified unused-slot-verified pascal16 -ret16 ScreenToClient(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L28; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0388 USER ISICONIC 0 0 verified unused-slot-verified pascal16 -ret16 IsIconic(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L30; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:038c USER GETWINDOWRECT 6 0 verified unused-slot-verified pascal16 -ret16 GetWindowRect(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L31; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0390 USER GETCLIENTRECT 6 0 verified unused-slot-verified pascal16 -ret16 GetClientRect(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L32; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0394 USER GETWINDOWTEXT 0 0 verified unused-slot-verified pascal16 -ret16 GetWindowText(word segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L35; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0398 USER SETWINDOWTEXT 0 0 verified unused-slot-verified pascal16 -ret16 SetWindowText(word segstr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L36; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:039c USER BEGINPAINT 8 0 verified unused-slot-verified pascal16 -ret16 BeginPaint(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L38; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03a0 USER ENDPAINT 6 0 verified unused-slot-verified pascal16 -ret16 EndPaint(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L39; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03a4 USER CREATEWINDOW 34 0 verified unused-slot-verified pascal16 -ret16 CreateWindow(str str long s_word s_word s_word s_word word word word segptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L40; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03a8 USER SHOWWINDOW 4 0 verified unused-slot-verified pascal16 -ret16 ShowWindow(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L41; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03ac USER GETPARENT 2 0 verified unused-slot-verified pascal16 -ret16 GetParent(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L45; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03b0 USER ISWINDOW 0 0 verified unused-slot-verified pascal16 -ret16 IsWindow(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L46; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03b4 USER ISCHILD 0 0 verified unused-slot-verified pascal16 -ret16 IsChild(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L47; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03b8 USER DESTROYWINDOW 2 0 verified unused-slot-verified pascal16 -ret16 DestroyWindow(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L52; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03bc USER REGISTERCLASS 4 0 verified unused-slot-verified pascal16 -ret16 RegisterClass(ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L56; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03c0 USER SCROLLWINDOW 14 0 verified unused-slot-verified pascal16 -ret16 ScrollWindow(word s_word s_word ptr ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L60; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03c4 USER SETSCROLLPOS 8 0 verified unused-slot-verified pascal16 -ret16 SetScrollPos(word word s_word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L61; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03c8 USER SETSCROLLRANGE 10 0 verified unused-slot-verified pascal16 -ret16 SetScrollRange(word word s_word s_word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L63; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03cc USER GETDC 2 0 verified unused-slot-verified pascal16 -ret16 GetDC(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L65; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03d0 USER RELEASEDC 4 0 verified unused-slot-verified pascal16 -ret16 ReleaseDC(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L67; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03d4 USER SETCURSOR 2 0 verified unused-slot-verified pascal16 -ret16 SetCursor(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L68; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03d8 USER ENDDIALOG 4 0 verified unused-slot-verified pascal16 -ret16 EndDialog(word s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L87; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03dc USER ISDIALOGMESSAGE 6 0 verified unused-slot-verified pascal16 -ret16 IsDialogMessage(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L89; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03e0 USER GETDLGITEM 4 0 verified unused-slot-verified pascal16 -ret16 GetDlgItem(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L90; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03e4 USER SETDLGITEMTEXT 8 0 verified unused-slot-verified pascal16 -ret16 SetDlgItemText(word word segstr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L91; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03e8 USER GETDLGITEMTEXT 10 0 verified unused-slot-verified pascal16 -ret16 GetDlgItemText(word word segptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L92; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03ec USER SENDDLGITEMMESSAGE 12 0 verified unused-slot-verified pascal16 SendDlgItemMessage(word word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L100; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03f0 USER MESSAGEBEEP 2 0 verified unused-slot-verified pascal16 -ret16 MessageBeep(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L103; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03f4 USER GETKEYSTATE 0 0 verified unused-slot-verified pascal16 -ret16 GetKeyState(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L105; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03f8 USER DEFWINDOWPROC 10 0 verified unused-slot-verified pascal16 DefWindowProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L106; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:03fc USER GETMESSAGE 14 0 verified unused-slot-verified pascal16 -ret16 GetMessage(ptr word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L107; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0400 USER PEEKMESSAGE 14 0 verified unused-slot-verified pascal16 -ret16 PeekMessage(ptr word word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L108; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0404 USER SENDMESSAGE 10 0 verified unused-slot-verified pascal16 SendMessage(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L110; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0408 USER WAITMESSAGE 0 0 verified unused-slot-verified pascal16 -ret16 WaitMessage() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L111; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:040c USER TRANSLATEMESSAGE 4 0 verified unused-slot-verified pascal16 -ret16 TranslateMessage(ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L112; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0410 USER DISPATCHMESSAGE 4 0 verified unused-slot-verified pascal16 DispatchMessage(ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L113; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0414 USER CALLWINDOWPROC 14 0 verified unused-slot-verified pascal16 CallWindowProc(segptr word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L121; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0418 USER UPDATEWINDOW 2 0 verified unused-slot-verified pascal16 -ret16 UpdateWindow(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L123; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:041c USER INVALIDATERECT 10 0 verified unused-slot-verified pascal16 -ret16 InvalidateRect(word ptr word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L124; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0420 USER GETWINDOWWORD 4 0 verified unused-slot-verified pascal16 -ret16 GetWindowWord(word s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L132; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0424 USER GETWINDOWLONG 4 0 verified unused-slot-verified pascal16 GetWindowLong(word s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L134; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0428 USER SETWINDOWLONG 8 0 verified unused-slot-verified pascal16 SetWindowLong(word s_word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L135; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:042c USER ENABLEMENUITEM 6 0 verified unused-slot-verified pascal16 -ret16 EnableMenuItem(word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L154; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0430 USER GETSYSTEMMENU 4 0 verified unused-slot-verified pascal16 -ret16 GetSystemMenu(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L155; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0434 USER CREATECARET 8 0 verified unused-slot-verified pascal16 -ret16 CreateCaret(word word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L162; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0438 USER DESTROYCARET 0 0 verified unused-slot-verified pascal16 -ret16 DestroyCaret() Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L163; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:043c USER SETCARETPOS 4 0 verified unused-slot-verified pascal16 -ret16 SetCaretPos(word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L164; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0440 USER SHOWCARET 2 0 verified unused-slot-verified pascal16 -ret16 ShowCaret(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L166; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0444 USER LOADCURSOR 6 0 verified unused-slot-verified pascal16 -ret16 LoadCursor(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L172; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0448 USER LOADICON 6 0 verified unused-slot-verified pascal16 -ret16 LoadIcon(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L173; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:044c USER LOADBITMAP 6 0 verified unused-slot-verified pascal16 -ret16 LoadBitmap(word str) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L174; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0450 USER TRANSLATEACCELERATOR 8 0 verified unused-slot-verified pascal16 -ret16 TranslateAccelerator(word word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L177; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0454 USER GETSYSTEMMETRICS 0 0 verified unused-slot-verified pascal16 -ret16 GetSystemMetrics(s_word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L178; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0458 USER GETSYSCOLOR 0 0 verified unused-slot-verified pascal16 GetSysColor(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L179; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:045c USER DIALOGBOXPARAM 16 0 verified unused-slot-verified pascal16 -ret16 DialogBoxParam(word str word segptr long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L239; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0460 USER CREATEDIALOGPARAM 16 0 verified unused-slot-verified pascal16 -ret16 CreateDialogParam(word str word segptr long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L241; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0464 USER ISZOOMED 0 0 verified unused-slot-verified pascal16 -ret16 IsZoomed(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L272; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0468 USER SELECTPALETTE 6 0 verified unused-slot-verified pascal16 -ret16 SelectPalette(word word word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L282; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:046c USER REALIZEPALETTE 2 0 verified unused-slot-verified pascal16 -ret16 RealizePalette(word) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L283; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0470 USER DEFDLGPROC 10 0 verified unused-slot-verified pascal16 DefDlgProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L304; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0474 USER GETCLASSINFO 10 0 verified unused-slot-verified pascal16 -ret16 GetClassInfo(word segstr ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L376; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0478 USER WVSPRINTF 12 0 verified unused-slot-verified pascal16 -ret16 wvsprintf(ptr str ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L391; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:047c USER DEFMDICHILDPROC 10 0 verified unused-slot-verified pascal16 DefMDIChildProc(word word word long) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L410; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0480 USER TRANSLATEMDISYSACCEL 6 0 verified unused-slot-verified pascal16 -ret16 TranslateMDISysAccel(word ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L414; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0484 USER CREATEWINDOWEX 34 0 verified unused-slot-verified pascal16 -ret16 CreateWindowEx(long str str long s_word s_word s_word s_word word word word segptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/user.exe16/user.exe16.spec#L415; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:0488 KEYBOARD Ordinal_5 2147483647 0 verified unused-slot-verified pascal16 -ret16 AnsiToOem(str ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/keyboard.drv16/keyboard.drv16.spec#L5; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 1228:048c KEYBOARD Ordinal_6 2147483647 0 verified unused-slot-verified pascal16 -ret16 OemToAnsi(str ptr) Wine wine-11.15 https://gitlab.winehq.org/wine/wine/-/raw/wine-11.15/dlls/keyboard.drv16/keyboard.drv16.spec#L6; complete Ghidra CALL inventory and NE relocation inventory: zero call sites Explicit imported NE slot with no CALL reference anywhere in the complete image; no TDKPIN call-site behavior exists to reconstruct. 0xZ[ܶr~*?x6>Ujm+v$JĐdASn$GGʋV _wYXGDmZ+L_;(MOGaa/$p͉[pGRxP/3|sff\?J^Y;w^q:z $j:3lqcy]?m*z3gOk`R¾WtV(\s Bղ n;7* ?6~m]w/p+*;>Ñ8{05x |:r0rI:nx`x˄}/ArO`5ɛ7`kս1'TeA( -N$;ARtu/Q {o+f;j#Oo~~?fux- ovdN|D'o޿ӇLJ#M ? ~ ,-a/́qCeV 39^yW%3\rf9%;@5qzd~: UVW@o@VyB)n`/^xuZ([R;S]ĝwµ{E4=qǮ>5^ e w@,вX\-k혫SDԻ䵃*Y0Uǡ_:mo@F(&3 p~NBѣhިb:rzSBfϸˆo#}M)9ϯqXWA(BgZ%XDMvPY9J#b ;kA/*1Gߌ>q;~d' e vbBXd~4cd+;wck'%p [; %gj]B|D`Հ'{9FFo@(olֲo7` T?N("TuS7b}[A-%Og<9[_.;C \=P,6x re^, Z{tH4 8` ՐW#IjcFhmuS.7zsD\vLk?R1f^.myw@[^szOa;5̠MC+x>HT#grFfYǔs8Q5:osី4SB+xy(=3;~zUX8 qγC=zIBȺ!NV! H|-JcL&@]+L̍ԝXn+nW ѓX !tl{]Qq(@VlC-7+r)քս}jx B ,ky[$xeBP3Z-7sw bx$݅B$z(+y㹉GEIRU=&QW/@5ᰄ,ӽCʵ+YmO!˰gdqs@m8*@ƋɉK] 'N )ׄ.NCF^B+lS{\<(.ܑ:pU4 V.?1\v$z4% 7F&5%Ip&%M/FtZwl?PdU|&=5Vsh퐳c!83uxxFD#3)m 0DcF31sف!^l!.]@^ ?G_ZocGDk7w @5@dޤ3,f]%/6!D5O! ŊD2b~(ܨl}:lJ߬H,g;fywZ28Ůz j9qU~g,1-j,Bw[A K 2:e݉2K`|tE㞓g)z G-y|p!Yɉx0nw7>ƺc, ߳^Y[)7[*CW3%3PYx!fcfqdc71,&(t[y~M"CN0|Eiwsbl`w4|PY],+Q(.l9 L;&` aKVbE`$KT*M,;3`lrRIh,$X)$X*Oכ|ߦ7YYnt jXs[,<-%ݧ!M.UZ|)֛\j"_D' |;}aw-pOŮ,=gꈌ40)56wğXVl{SJY bi\9 끠sأhJ2i.geY8Ƃr' J8pAq.gAXG GD< "OTڴLB xZM.[(D攪q'7\sUB:o{ '5o7bSxi`L|Mj)QrFS;y~Ɔb |6@aEͿhs]ʃ11.t| ތ FfL;7zPSn,jc; 4P_\qcĜ&L4$b&@} P)8:{w|/Òe bHC22cM=E˝Naq cP~t[9Z] "{-;(TsQ} U z)M{Jz2<~B^GYYXdyabsZL'gJ:+2pG}&풳y" kDo]ƢƘ=|H8.'/^뼥C*,yG1oeRr2w"@BcU f2>$FwԊcpILOX 䢞)NO` ƉS֦4QBdB=/BA}t_|êd2Y/TRc{ag+)}1g^۾LK+9e{Km EQ C+p6CӡjI4hk5DS`^?/`I&gNRI6 k/8f|! vZvo$Eј<]%x{w' 978_ AB;4}L%VɟݡM]p?Q3^J3D(+iy1/P;푹xN aO)"Lq`#jS0/7JJ_`[4^գH1GbY𢂖a^I-Q1Q#1J]`5VHuݷb 5gVGAYDc $.~MhdA6`'4 2#7<ͷ[VۺR6X~8k_Ie4AA:~Jgb[yӇ3$d0 ș$xk݇YO,}1ic~Ḿ.ML#is`"61?7 =xA^:{^@th,竊>} GJyI3lxeo]U˦\Viy#X@"[5eH(X<іٰФiFr~B~3W,| K١BW:HOz%T' ې pxMZ@ !L!Cannot execute a dynamic-link library. $ NE*  ?@X\muP \A \MMTIMERWEP MMSYSTEMUSERKERNELUSER9?`???V)Provides High Resolution Timer Services. SYSTEMTIMERMAKEؐEU1VWvvXZPhvPW_^]MؐEUظVW~t&v vPWv FPZXRPjF$v vPWv FPZXRPjFF_^f]MU1ɚ (-nG`sZZEU>63PQ t,3ҨuBuB:  8*]Mˋ]MYYXX*>ˌؐEUVW؋F*_^]MY[33ۣ* t t&,.>0tF, .t6 *2MM.UA,Z83P<SPPP*L!& t3&(2PS30:rK uPortions Copyright (c) 1983,92 Borland32˃>2uˡ26D&;U|&;r&;U|&;Ew˸r+s6; r 6;s6˸$Br Runtime error 000 at 0000:0000.]xtmodule_index module_name 1 KERNEL 2 MMTIMER 3 MMSYSTEM 4 KERNEL 5 GDI 6 USER 7 KEYBOARD 8 KERNEL 9 USER 10 KEYBOARD dxGsegment selector file_offset file_length allocation_size zero_fill_bytes flags has_relocations 1 1000 3328 65082 65082 0 0x1d10 True 2 1008 81920 12485 12485 0 0x1d10 True 3 1010 97280 1516 1516 0 0x1d50 True 4 1018 99328 8058 8058 0 0x1d10 True 5 1020 108800 5923 5923 0 0x0d50 True 6 1028 115200 1864 19770 17906 0x0d41 True ~R xH2id type subtype active bounds_min_x_milli bounds_min_y_milli bounds_max_x_milli bounds_max_y_milli point1_x_milli point1_y_milli point2_x_milli point2_y_milli radius_milli response_normal response_tangent response_auxiliary response_kick flags contact_state score_low score_high layer_mask render_left render_top render_right render_bottom 1 2 0 1 2000 392000 130000 442000 7000 397000 125000 437000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 2 2 0 1 5000 450000 305000 460000 10000 455000 300000 455000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 3 2 0 1 129000 420000 139000 447000 134000 442000 134000 425000 0 0.1 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 4 1 1 1 128000 413000 154000 439000 141000 426000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 5 2 0 1 143000 420000 153000 452000 148000 425000 148000 447000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 6 4 0 0 143000 421000 169000 452000 148000 426000 164000 447000 0 0 0 0 0 0x0102 6 0 0 0x0002 151 389 163 437 7 2 0 1 159000 420000 170000 451000 165000 425000 164000 446000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 8 1 1 1 159000 413000 185000 439000 172000 426000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 9 2 0 1 174000 420000 185000 452000 179000 425000 180000 447000 0 0.1 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 10 2 0 1 178000 389000 309000 442000 183000 437000 304000 394000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 11 2 0 1 293000 36000 303000 150000 298000 145000 298000 41000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 12 2 0 1 293000 117000 315000 127000 310000 122000 298000 122000 0 0.6 0.1 0 0 0x0000 0 5000 0 0x0001 0 0 0 0 13 1 1 1 286000 104000 310000 128000 298000 116000 0 0 7000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 14 2 0 1 286000 79000 297000 121000 291000 116000 292000 84000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 15 2 0 1 276000 75000 305000 94000 300000 89000 281000 80000 0 0.4 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 16 2 0 1 270000 71000 295000 120000 290000 76000 275000 115000 0 0.4 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 17 1 1 1 257000 102000 281000 126000 269000 114000 0 0 7000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 18 2 0 1 243000 89000 269000 124000 264000 119000 248000 94000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 19 2 0 1 244000 66000 262000 99000 249000 94000 257000 71000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 20 2 0 1 252000 24000 282000 76000 257000 71000 277000 29000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 21 2 0 1 272000 7000 292000 36000 277000 31000 287000 12000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 22 2 0 1 278000 17000 308000 33000 283000 22000 303000 28000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 23 2 0 1 297000 23000 325000 53000 302000 28000 320000 48000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 24 2 0 1 315000 43000 325000 442000 320000 48000 320000 437000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 25 2 0 1 310000 408000 337000 418000 315000 413000 332000 413000 0 0.1 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 26 1 1 1 245000 83000 269000 107000 257000 95000 0 0 7000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 27 2 0 1 321000 42000 333000 63000 328000 58000 326000 47000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 28 2 0 1 317000 32000 331000 52000 326000 47000 322000 37000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 29 2 0 1 311000 23000 327000 42000 322000 37000 316000 28000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 30 2 0 1 302000 16000 321000 33000 316000 28000 307000 21000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 31 2 0 1 291000 11000 312000 26000 307000 21000 296000 16000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 32 2 0 1 280000 10000 301000 21000 296000 16000 285000 15000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0001 0 0 0 0 33 2 0 1 107000 10000 290000 20000 285000 15000 112000 15000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 34 2 0 1 94000 9000 126000 25000 121000 14000 99000 20000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 35 2 0 1 73000 15000 105000 36000 100000 20000 78000 31000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 36 2 0 1 61000 25000 84000 54000 79000 30000 66000 49000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 37 2 0 1 52000 40000 73000 78000 68000 45000 57000 73000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 38 2 0 1 54000 57000 64000 159000 59000 62000 59000 154000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 39 2 0 1 53000 142000 72000 175000 58000 147000 67000 170000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 40 1 1 1 47000 160000 73000 186000 60000 173000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 41 2 0 1 36000 174000 69000 195000 64000 179000 41000 190000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 42 1 1 1 25000 170000 51000 196000 38000 183000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 43 2 0 1 17000 160000 36000 191000 31000 186000 22000 165000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 44 2 0 1 17000 6000 27000 170000 22000 165000 22000 11000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 45 2 0 1 6000 8000 28000 18000 23000 13000 11000 13000 0 0.4 0.1 0 0 0x0000 0 34464 1 0x0001 0 0 0 0 46 2 0 1 8000 5000 18000 175000 13000 10000 13000 170000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 47 2 0 1 7000 160000 37000 235000 12000 165000 32000 230000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 48 1 1 1 12000 218000 38000 244000 25000 231000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 49 2 0 1 5000 226000 38000 305000 33000 231000 10000 300000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 50 2 0 1 7000 256000 17000 412000 12000 261000 12000 407000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 51 1 1 1 137000 120000 193000 176000 165000 148000 0 0 23000 0.8 0.1 -0.1 0.4 0x0040 0 1000 0 0x0001 150 133 180 163 52 1 1 1 178000 82000 234000 138000 206000 110000 0 0 23000 0.8 0.1 -0.1 0.4 0x0040 0 1000 0 0x0001 191 95 221 125 53 1 1 1 191000 137000 247000 193000 219000 165000 0 0 23000 0.8 0.1 -0.1 0.4 0x0040 0 1000 0 0x0001 204 150 234 180 54 1 1 1 40000 279000 66000 305000 53000 292000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 55 2 0 1 54000 282000 112000 364000 59000 287000 107000 359000 0 0.5 0.1 -0.4 0.4 0x0000 0 0 0 0x0002 0 0 0 0 56 1 1 1 85000 346000 111000 372000 98000 359000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 57 2 0 1 45000 335000 102000 371000 97000 366000 50000 340000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 58 1 1 1 40000 320000 66000 346000 53000 333000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 59 2 0 1 40000 283000 50000 338000 45000 333000 45000 288000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 60 1 1 1 14000 279000 44000 309000 29000 294000 0 0 10000 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 61 2 0 1 32000 287000 42000 352000 37000 292000 37000 347000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 62 2 0 1 32000 342000 115000 389000 37000 347000 110000 384000 0 0.4 0.05 0 0 0x0000 0 0 0 0x0002 0 0 0 0 63 2 0 1 14000 380000 97000 413000 92000 408000 19000 385000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 64 2 0 1 14000 286000 24000 390000 19000 385000 19000 291000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 65 1 1 1 83000 377000 123000 417000 103000 397000 0 0 15000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 66 2 0 1 107000 381000 146000 418000 112000 386000 141000 413000 0 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 67 1 1 1 120000 405000 148000 433000 134000 419000 0 0 9000 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 68 2 0 1 92000 406000 135000 432000 130000 427000 97000 411000 0 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 69 1 1 1 247000 279000 273000 305000 260000 292000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 70 2 0 1 262000 287000 272000 342000 267000 292000 267000 337000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 71 1 1 1 247000 323000 273000 349000 260000 336000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 72 2 0 1 209000 339000 266000 371000 261000 344000 214000 366000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 73 1 1 1 201000 345000 227000 371000 214000 358000 0 0 8000 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 74 2 0 1 200000 280000 260000 361000 205000 356000 255000 285000 0 0.5 0.1 -0.4 0.4 0x0000 0 0 0 0x0002 0 0 0 0 75 1 1 1 270000 278000 298000 306000 284000 292000 0 0 9000 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 76 2 0 1 287000 286000 297000 390000 292000 291000 292000 385000 0 0.5 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 77 2 0 1 216000 380000 297000 413000 292000 385000 221000 408000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 78 2 0 1 200000 342000 280000 389000 205000 384000 275000 347000 0 0.5 0.05 0 0 0x0000 0 0 0 0x0002 0 0 0 0 79 2 0 1 270000 287000 280000 352000 275000 347000 275000 292000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0002 0 0 0 0 80 1 1 1 190000 377000 230000 417000 210000 397000 0 0 15000 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 81 2 0 1 172000 406000 221000 432000 216000 411000 177000 427000 0 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 82 1 1 1 165000 405000 193000 433000 179000 419000 0 0 9000 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 83 2 0 1 167000 381000 206000 418000 172000 413000 201000 386000 0 0.5 0.2 0 0 0x0000 0 0 0 0x0002 0 0 0 0 84 2 0 1 35000 180000 78000 206000 73000 185000 40000 201000 0 0.6 0 0 0 0x0004 0 1500 0 0x0003 0 0 0 0 85 2 0 1 62000 168000 78000 190000 67000 173000 73000 185000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 86 2 0 1 29000 184000 45000 206000 40000 201000 34000 189000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 87 2 0 0 37000 188000 81000 216000 76000 193000 42000 211000 0 0.6 0 0 0 0x0006 85 1500 0 0x0003 0 0 0 0 88 2 0 0 40000 196000 84000 224000 79000 201000 45000 219000 0 0.6 0 0 0 0x0006 86 1500 0 0x0003 0 0 0 0 89 3 0 1 265000 70000 313000 118000 289000 94000 0 0 19000 0.6 0 0 0 0x0000 0 0 0 0x0001 0 0 0 0 90 2 0 1 287000 222000 297000 258000 292000 253000 292000 227000 0 0.6 0 0 0 0x208a 90 1500 0 0x0003 282 231 306 246 91 2 0 1 287000 248000 307000 258000 302000 253000 292000 253000 0 0.4 0 0 0 0x208a 90 1500 0 0x0003 282 231 306 246 92 2 0 1 287000 222000 307000 232000 292000 227000 302000 227000 0 0.4 0 0 0 0x208a 90 1500 0 0x0003 282 231 306 246 93 2 0 1 287000 206000 297000 241000 292000 236000 292000 211000 0 0.6 0 0 0 0x208a 93 1500 0 0x0003 282 217 306 231 94 2 0 1 287000 231000 307000 241000 302000 236000 292000 236000 0 0.4 0 0 0 0x208a 93 1500 0 0x0003 282 217 306 231 95 2 0 1 287000 206000 307000 216000 292000 211000 302000 211000 0 0.4 0 0 0 0x208a 93 1500 0 0x0003 282 217 306 231 96 2 0 1 287000 192000 297000 226000 292000 221000 292000 197000 0 0.6 0 0 0 0x208a 96 1500 0 0x0003 282 202 306 216 97 2 0 1 287000 216000 307000 226000 302000 221000 292000 221000 0 0.4 0 0 0 0x208a 96 1500 0 0x0003 282 202 306 216 98 2 0 1 287000 192000 307000 202000 292000 197000 302000 197000 0 0.4 0 0 0 0x208a 96 1500 0 0x0003 282 202 306 216 99 2 0 1 287000 176000 297000 211000 292000 206000 292000 181000 0 0.6 0 0 0 0x208a 99 1500 0 0x0003 282 187 306 201 100 2 0 1 287000 201000 307000 211000 302000 206000 292000 206000 0 0.4 0 0 0 0x208a 99 0 0 0x0003 282 187 306 201 101 2 0 1 287000 177000 307000 187000 292000 182000 302000 182000 0 0.4 0 0 0 0x208a 99 0 0 0x0003 282 187 306 201 102 2 0 1 287000 162000 297000 195000 292000 190000 292000 167000 0 0.6 0 0 0 0x208a 102 1500 0 0x0003 282 174 306 186 103 2 0 1 287000 184000 307000 195000 302000 190000 292000 189000 0 0.4 0 0 0 0x208a 102 0 0 0x0003 282 174 306 186 104 2 0 1 287000 158000 307000 173000 292000 168000 302000 163000 0 0.4 0 0 0 0x208a 102 0 0 0x0003 282 174 306 186 105 2 0 1 143000 199000 208000 227000 203000 222000 148000 204000 0 0.6 0.2 0 0 0x0000 0 0 0 0x0003 0 0 0 0 106 1 1 1 137000 173000 175000 211000 156000 192000 0 0 14000 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 107 2 0 1 153000 173000 220000 202000 158000 178000 215000 197000 0 0.6 0.1 -0.4 0.3 0x0000 0 0 0 0x0003 0 0 0 0 108 1 1 1 191000 191000 229000 229000 210000 210000 0 0 14000 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 109 2 0 1 182000 221000 214000 238000 209000 233000 187000 226000 0 0.6 0 0 0 0x2092 109 1500 0 0x0003 192 214 206 236 110 2 0 1 204000 213000 219000 238000 214000 218000 209000 233000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 111 2 0 1 182000 209000 196000 231000 187000 226000 191000 214000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 112 2 0 1 164000 214000 203000 234000 198000 229000 169000 219000 0 0.6 0 0 0 0x2092 112 1500 0 0x0003 178 209 191 231 113 2 0 1 193000 212000 207000 234000 202000 217000 198000 229000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 114 2 0 1 164000 202000 178000 224000 169000 219000 173000 207000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 115 2 0 1 148000 208000 187000 228000 182000 223000 153000 213000 0 0.6 0 0 0 0x2092 115 1500 0 0x0003 163 204 177 226 116 2 0 1 177000 206000 191000 228000 186000 211000 182000 223000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 117 2 0 1 148000 196000 162000 218000 153000 213000 157000 201000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 118 2 0 1 134000 201000 168000 222000 163000 217000 139000 206000 0 0.6 0 0 0 0x2092 118 1500 0 0x0003 149 198 163 221 119 2 0 1 158000 200000 172000 222000 167000 205000 163000 217000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 120 2 0 1 134000 186000 149000 211000 139000 206000 144000 191000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 192 214 205 220 121 2 0 1 79000 124000 110000 145000 105000 129000 84000 140000 0 0.6 0 0 0 0x0400 0 2000 0 0x0001 0 0 0 0 122 2 0 1 96000 114000 110000 134000 101000 119000 105000 129000 0 0.6 0 0 0 0x0000 0 0 0 0x0001 0 0 0 0 123 2 0 1 75000 125000 89000 145000 84000 140000 80000 130000 0 0.6 0 0 0 0x0000 0 0 0 0x0001 0 0 0 0 124 2 0 1 82000 114000 116000 136000 111000 119000 87000 131000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 125 1 1 1 71000 113000 97000 139000 84000 126000 0 0 8000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 126 2 0 1 72000 83000 82000 132000 77000 127000 77000 88000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 127 2 0 1 72000 81000 92000 93000 77000 88000 87000 86000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 128 2 0 1 82000 81000 115000 126000 87000 86000 110000 121000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 129 3 0 1 72000 52000 120000 100000 96000 76000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 130 3 0 1 91000 25000 139000 73000 115000 49000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 131 3 0 1 123000 36000 171000 84000 147000 60000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 132 3 0 1 123000 68000 171000 116000 147000 92000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 133 3 0 1 91000 79000 139000 127000 115000 103000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 134 1 1 1 99000 51000 149000 101000 124000 76000 0 0 20000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 135 1 1 1 78000 36000 122000 80000 100000 58000 0 0 17000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 136 1 1 1 111000 26000 155000 70000 133000 48000 0 0 17000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 137 1 1 1 132000 54000 176000 98000 154000 76000 0 0 17000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 138 1 1 1 111000 83000 155000 127000 133000 105000 0 0 17000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 139 1 1 1 78000 72000 122000 116000 100000 94000 0 0 17000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 140 4 0 1 7000 165000 41000 199000 24000 182000 0 0 12000 0 0 0 0 0x00c0 0 1000 0 0x0001 17 174 31 188 141 4 0 1 1000 145000 35000 179000 18000 162000 0 0 12000 0 0 0 0 0x00c0 0 1000 0 0x0001 11 155 25 169 142 4 0 1 0 127000 34000 161000 17000 144000 0 0 12000 0 0 0 0 0x00c0 0 1500 0 0x0001 10 136 24 150 143 4 0 1 0 108000 34000 142000 17000 125000 0 0 12000 0 0 0 0 0x00c0 0 1500 0 0x0001 10 117 24 131 144 4 0 1 0 89000 34000 123000 17000 106000 0 0 12000 0 0 0 0 0x00c0 0 2000 0 0x0001 10 98 24 112 145 4 0 1 0 70000 34000 104000 17000 87000 0 0 12000 0 0 0 0 0x00c0 0 2000 0 0x0001 10 79 24 93 146 4 0 1 0 50000 34000 84000 17000 67000 0 0 12000 0 0 0 0 0x00c0 0 2500 0 0x0001 10 60 24 79 147 4 0 1 0 31000 34000 65000 17000 48000 0 0 12000 0 0 0 0 0x00c0 0 3000 0 0x0001 10 41 24 55 148 3 0 1 -7000 -1000 41000 47000 17000 23000 0 0 19000 0.6 0 0 0 0x0001 0 0 0 0x0001 0 0 0 0 149 4 0 0 47000 44000 89000 86000 68000 65000 0 0 16000 0 0 0 0 0x0140 0 500 0 0x0001 60 57 77 73 150 4 0 1 189000 31000 221000 63000 205000 47000 0 0 11000 0 0 0 0 0x1000 0 500 0 0x0001 199 40 211 50 151 4 0 1 217000 30000 249000 62000 233000 46000 0 0 11000 0 0 0 0 0x1000 0 500 0 0x0001 228 41 240 51 152 4 0 1 248000 30000 280000 62000 264000 46000 0 0 11000 0 0 0 0 0x1000 0 500 0 0x0001 257 42 269 52 153 4 0 0 1000 315000 32000 389000 6000 320000 27000 384000 0 0 0 0 0 0x0100 0 0 0 0x0002 11 344 23 392 154 4 0 0 278000 315000 312000 387000 283000 320000 307000 382000 0 0 0 0 0 0x0100 0 0 0 0x0002 291 346 303 394 155 1 1 1 167000 43000 199000 75000 183000 59000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 156 2 0 1 167000 27000 189000 60000 172000 55000 184000 32000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 157 1 1 1 179000 20000 211000 52000 195000 36000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 158 2 0 1 188000 36000 210000 67000 205000 41000 193000 62000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 159 1 1 1 196000 43000 228000 75000 212000 59000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 160 2 0 1 196000 27000 218000 60000 201000 55000 213000 32000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 161 1 1 1 208000 20000 240000 52000 224000 36000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 162 2 0 1 217000 36000 239000 67000 234000 41000 222000 62000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 163 1 1 1 225000 43000 257000 75000 241000 59000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 164 2 0 1 225000 27000 247000 60000 230000 55000 242000 32000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 165 1 1 1 237000 20000 269000 52000 253000 36000 0 0 11000 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 166 2 0 1 246000 36000 268000 67000 263000 41000 251000 62000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0001 0 0 0 0 167 1 0 1 285000 234000 313000 262000 299000 248000 0 0 9000 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 168 2 0 1 286000 248000 303000 276000 298000 271000 291000 253000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 169 2 0 1 323000 53000 333000 427000 328000 422000 328000 58000 0 0.6 0.1 0 0 0x0000 0 0 0 0x0003 0 0 0 0 170 2 0 1 293000 75000 303000 405000 298000 400000 298000 80000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 171 2 0 1 293000 165000 303000 252000 298000 247000 298000 170000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 172 1 0 1 285000 157000 313000 185000 299000 171000 0 0 9000 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 173 2 0 1 286000 140000 303000 173000 291000 168000 298000 145000 0 0.6 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 174 1 1 1 -22000 -42000 22000 2000 0 -20000 0 0 17000 0.9 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 175 1 1 0 -22000 -42000 22000 2000 0 -20000 0 0 17000 0.9 0 0 0 0x0000 0 0 0 0x0003 0 0 0 0 % x''# Complete C reconstruction progress This ledger tracks the full reconstruction of `TDKPIN.EXE`, not the narrower Rust gameplay replica. The binary is authoritative: ```text a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c TDKPIN.EXE ``` The required deliverable is polished, readable C that accounts for every binary-backed function, data object, callback, resource, import interaction, and observable behavior. Raw Ghidra output remains immutable evidence and is not itself accepted as reconstructed source. Until every completion gate in this file passes, the Rust project is explicitly out of scope and must not be edited. Translation to Rust is a separate future goal that begins only after the C reconstruction has passed its final audit. The preserved initial raw export is independently sealed as: ```text 987a47580ba5c92fa071c989bdaeddf138e285d2b07106c5909a4acbc3e27088 TDKPIN_GHIDRA_RAW.c ``` ## Current measured baseline | Gate | Current evidence | Status | | --- | --- | --- | | Known in-image functions | 391 ordinary functions plus six separately tracked overlapping/shared entries | 0 raw, 0 partial, 0 restored, 391 verified; all six shared entries verified; every code segment is raw-free | | Readable function reconstruction | 63 separate strict-C11 modules under `reconstructed/` | complete; every ordinary/shared entry is address-linked and raw evidence is never used as the readable deliverable | | Imported Win16 APIs | 292 slots / 140 unique declarations | 0 partial, 292 verified; 137 called slots have prototype/call-site evidence and 155 data/duplicate/unused slots have an explicit zero-CALL proof | | Executable bytes | 93,064 total; every byte classified | complete structural classification | | Non-overlapping Ghidra code/data | 93,062 bytes; 92,780 instruction bytes and 282 embedded-data bytes | complete within Ghidra's representation | | Exceptional executable bytes | overlapping opcode at `1020:0666`; alignment NOP at `1020:0dea` | classified with byte-level evidence | | Defined data | 578 Ghidra-defined units | raw inventory only | | Referenced DGROUP addresses | 455 unique targets reached from 147 functions | 0 unknown, 0 restored, 455 verified after semantic projection | | Byte-complete DGROUP ranges | 744 non-overlapping ranges / 19,770 bytes | 0 raw, 0 partial, 0 restored, 744 verified, 0 unknown | | Semantic DGROUP objects | 219 exact objects | 0 raw, 0 partial, 0 restored, 219 verified, 0 unknown | | Code-embedded data objects | 18 objects / all 282 executable data bytes | 0 unknown, 0 restored, 18 verified; exact inventory bijection enforced | | Collision/rule records | 175 initialized records | exact static ledger and live dump available | | Resources | 63 NE resource blocks | 0 raw, 0 partial, 0 restored, 63 verified; 57 directly managed, 2 Windows-resolved, and 4 explicitly linked-unused | | Callback sites | six registration sites | all six verified, including bootstrap and generated bound thunks | | Companion MMTIMER.DLL | SHA-256 `f1d9ac980c7bfba5dc53eaa9e7cb2c3cd9b82f879ee8962ad40bf863d641bb49` | ordinal 1 wrapper, internal callback, posted message 0580, timer-id return, and cancellation lifetime mapped | | Live runtime | Wine 11.15 staging plus trace/dump/injection tooling | exact original exercised for startup/input and focused types 1/2/3/4, claw, flipper, multiball, and score transitions | | Buildable reconstructed C | strict C11 Win16/segmented model and 89 focused harness units | complete; every one of 63 reconstructed C units is compiled by `test_reconstructed_c.sh`, all tests pass, and the Borland Real48 DOS reference probe is bit-exact | The prior 363-function inventory was incomplete. Classifying the executable gaps recovered 28 additional Borland runtime entries and established the current 391-function denominator. It remains subject to later correction only if direct control-flow or runtime evidence proves an overlapping/shared entry that Ghidra cannot represent as an ordinary function. ## Evidence artifacts - `TDKPIN_GHIDRA_RAW.c`: immutable original raw decompiler output; never regenerated. - `FUNCTIONS.tsv` and `COVERAGE.tsv`: immutable inventories paired with that original export. - `TDKPIN_GHIDRA_COMPLETE_RAW.c`: separate regenerated raw evidence containing every currently recovered entry after missed-code seeding and Win16 import typing. - `COMPLETE_FUNCTIONS.tsv` and `COMPLETE_COVERAGE.tsv`: inventories paired with the separate complete raw evidence. - `BINARY_FUNCTIONS.tsv`: function bodies, blocks, conventions, and provisional signatures. - `REFERENCES.tsv`: complete Ghidra reference export for calls, jumps, reads, and writes. - `DEFINED_DATA.tsv`: all currently defined data units. - `SYMBOLS.tsv`: all loader/analyzer symbols. - `UNEXPLAINED.tsv`: exact bytes outside ordinary function/code-data coverage; both current rows have explicit overlap/alignment classifications and evidence. - `SHARED_ENTRY_POINTS.tsv`: internal compiler/runtime entry points that begin inside another decoded instruction stream, including the verified C-string versus ShortString TextRec entries at `1020:049f` and `1020:04a0`. - `FUNCTION_RECONSTRUCTION.tsv`: one semantic-status row per known in-image function. - `IMPORT_RECONSTRUCTION.tsv`: one row per NE import slot, including module, stack-purge size, direct call count, prototype status, and review evidence. - `DATA_RECONSTRUCTION.tsv`: one row per currently referenced DGROUP address, with readers/writers and unresolved semantic object boundaries made explicit. - `DATA_COVERAGE.tsv`: byte-complete non-overlapping coverage of all 19,770 DGROUP bytes, including the 17,906-byte zero-fill tail. - `DATA_OBJECTS.tsv`: reviewed semantic data objects whose exact ranges and types are projected into the byte-complete coverage ledger. - `CODE_DATA_OBJECTS.tsv`: one semantic row for every defined data object embedded in executable segments, including compiler tags, ShortStrings, Real48 tables/constants, and the Borland runtime identification string. - `ENTRY_POINTS.tsv`, `NE_SEGMENTS.tsv`, `MODULE_REFERENCES.tsv`, and `RELOCATIONS.tsv`: direct NE metadata, including all 2,434 expanded relocation sites and their internal/import targets. - `RESOURCE_RECONSTRUCTION.tsv`: one verified row per NE resource with exact extraction provenance, code/system user mapping, lifecycle, and explicit classification of linked-but-unused Borland templates. - `CALLBACK_RECONSTRUCTION.tsv`: every identified callback-registration site, callback target, lifetime, and invocation path, all verified. - `COVERAGE.tsv`: executable-byte coverage and memory-block inventory. - `OBJECTS.tsv`: all initialized collision/rule records. - `assets/manifest.json`: resource offsets, raw hashes, and decoded derivatives. - `reconstructed/`: separate readable C modules and Win16/segmented-memory type model. - `tools/test_reconstructed_c.sh`: strict C11 tests for verified numeric, circular-buffer, key-table, selector, overlap, far-string, heap-ring, Borland object ownership, stack-guard, and SystemTimer behavior. Run `python3 tools/audit_reconstruction.py` after every reconstruction batch. It fails if the target hash, function bijection, raw markers, body metadata, coverage totals, or collision-record inventory drift. Run `python3 tools/audit_reconstruction.py --require-complete` for the final gate. It intentionally fails until every required function, import, data, resource, and callback row is `verified` and no unclassified range remains. ## Completion gates The reconstruction is complete only when all of the following are true: 1. Every executable byte is classified as function code, embedded data, relocation material, alignment, or unreachable padding with recorded evidence; no row remains `unclassified`. 2. Every in-image function has exactly one address-linked readable-C implementation and a `verified` ledger row. Combined or split source helpers retain an explicit mapping to the original function ranges. 3. Every DGROUP region and code-embedded data object has a named type, extent, initialization source, and complete read/write reference set. 4. All 292 imports have correct Win16 prototypes and every call site has reviewed argument order, far-pointer handling, and return semantics. 5. Window procedures, dialog procedures, timer callbacks, multimedia paths, and stored function pointers are separately inventoried and traced to their registration and invocation sites. 6. All 63 resources and the companion `MMTIMER.DLL` are mapped to their users; unused resources, if any, are explicitly identified rather than omitted. 7. Segmented pointers, DGROUP assumptions, 16-bit wrapping, Borland Real48, calling conventions, stack cleanup, and indirect jump tables are represented without silently replacing target behavior with modern equivalents. 8. The reconstructed sources pass strict syntax/build checks in their declared compatibility model and focused normal/sanitizer harnesses where host execution is meaningful. 9. Behavioral evidence is proportional and explicitly typed: complete disassembly/data-flow closure for every required unit, strict focused C harnesses for normal/error/ownership/ABI paths, a bit-exact 16-bit Borland Real48 reference probe, and focused Wine comparisons where live state adds evidence (startup/input, claw, flippers, collision types 1..4, multiball, scoring, and timer substeps). Host-only tests are never labeled Wine probes. 10. The final audit reports zero `raw`, `partial`, `restored`, unknown, unread, unclassified, or behaviorally unverified required units. ## Work order 1. Recover the Borland/Win16 ABI model and correct every imported and internal signature before relying on decompiler parameter lists. 2. Group DGROUP references into typed data objects and recover initialization, ownership, and lifecycle. 3. Reconstruct functions by subsystem into separate readable C modules while preserving address-level traceability. 4. Add subsystem differential probes and promote ledger rows to `verified` only when static and runtime evidence agree. ukxfrom_address from_function reference_type operand_index primary to_address to_block to_function to_symbol 1000:0006 FUN_1000_0002 DATA 0 true Stack[0x6] - 1000:0009 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:000e FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:0011 FUN_1000_0002 DATA 0 true Stack[0x6] - 1000:0014 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:0019 FUN_1000_0002 DATA 0 true Stack[-0xe] - 1000:001c FUN_1000_0002 DATA 0 true Stack[0x6] - 1000:001f FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:0024 FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:0027 FUN_1000_0002 DATA 0 true Stack[0x6] - 1000:002e FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:0033 FUN_1000_0002 DATA 0 true Stack[-0xa] - 1000:0036 FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:0039 FUN_1000_0002 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:003d FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:0042 FUN_1000_0002 DATA 0 true Stack[-0x4] - 1000:0045 FUN_1000_0002 DATA 0 true Stack[-0xe] - 1000:0048 FUN_1000_0002 DATA 1 true Stack[0x4] - 1000:0051 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:0056 FUN_1000_0002 DATA 0 true Stack[-0x6] - 1000:0059 FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:005c FUN_1000_0002 DATA 0 true Stack[-0xa] - 1000:005f FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:0064 FUN_1000_0002 DATA 0 true Stack[-0x8] - 1000:0067 FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:0072 FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:007e FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:0083 FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:008e FUN_1000_0002 DATA 0 true Stack[-0xe] - 1000:009a FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:009f FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:00aa FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:00b6 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:00bb FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:00be FUN_1000_0002 DATA 0 true Stack[-0x8] - 1000:00c1 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:00c6 FUN_1000_0002 DATA 0 true Stack[-0xe] - 1000:00c9 FUN_1000_0002 DATA 0 true Stack[-0x6] - 1000:00cc FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:00d1 FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:00d4 FUN_1000_0002 DATA 0 true Stack[-0x4] - 1000:00d7 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:00dc FUN_1000_0002 DATA 0 true Stack[-0xa] - 1000:00df FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:00e4 FUN_1000_0002 DATA 0 true Stack[-0x10] - 1000:00e7 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:00ec FUN_1000_0002 DATA 0 true Stack[-0xe] - 1000:00ef FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:00f4 FUN_1000_0002 DATA 0 true Stack[-0xc] - 1000:00f7 FUN_1000_0002 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:0103 FUN_1000_0100 DATA 1 true Stack[0x4] - 1000:0108 FUN_1000_0100 UNCONDITIONAL_CALL 0 true 1018:1b57 Code4 FUN_1018_1b57 FUN_1018_1b57 1000:0118 FUN_1000_0100 UNCONDITIONAL_CALL 0 true 1010:03af Code3 FUN_1010_03af FUN_1010_03af 1000:0124 FUN_1000_0121 READ 0 true 1028:06fc Data6 DAT_1028_06fc 1000:0129 FUN_1000_0121 CONDITIONAL_JUMP 0 true 1000:014e Code1 LAB_1000_014e 1000:013c FUN_1000_0121 UNCONDITIONAL_CALL 0 true 1000:01d3 Code1 FUN_1000_01d3 FUN_1000_01d3 1000:0141 FUN_1000_0121 DATA 1 true Stack[0x4] - 1000:014c FUN_1000_0121 UNCONDITIONAL_JUMP 0 true 1000:0168 Code1 LAB_1000_0168 1000:015d FUN_1000_0121 READ 0 true 1028:0668 Data6 DAT_1028_0668 1000:015d FUN_1000_0121 READ 0 false 1028:0666 Data6 DAT_1028_0666 1000:015d FUN_1000_0121 COMPUTED_CALL -1 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1000:0163 FUN_1000_0121 UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1000:016f FUN_1000_016c DATA 1 true Stack[0x8] - 1000:0174 FUN_1000_016c DATA 1 true Stack[0x4] - 1000:0179 FUN_1000_016c UNCONDITIONAL_CALL 0 true 1018:1274 Code4 FUN_1018_1274 FUN_1018_1274 1000:017e FUN_1000_016c DATA 1 true Stack[0x8] - 1000:0186 FUN_1000_016c READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:018f FUN_1000_016c UNCONDITIONAL_CALL 0 true 1228:027c EXTERNAL LOADICON LOADICON 1000:0194 FUN_1000_016c DATA 1 true Stack[0x8] - 1000:01a2 FUN_1000_016c UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:01a7 FUN_1000_016c DATA 1 true Stack[0x8] - 1000:01b0 FUN_1000_016c UNCONDITIONAL_CALL 0 true 1228:016c EXTERNAL GETSTOCKOBJECT GETSTOCKOBJECT 1000:01b5 FUN_1000_016c DATA 1 true Stack[0x8] - 1000:01bc FUN_1000_016c READ 1 true 1028:06fe Data6 DAT_1028_06fe 1000:01d9 FUN_1000_01d3 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1000:01de FUN_1000_01d3 CONDITIONAL_JUMP 0 true 1000:01e3 Code1 LAB_1000_01e3 1000:01e0 FUN_1000_01d3 UNCONDITIONAL_JUMP 0 true 1000:0265 Code1 LAB_1000_0265 1000:01e3 FUN_1000_01d3 DATA 0 true Stack[0x10] - 1000:01e6 FUN_1000_01d3 DATA 0 true Stack[0xe] - 1000:01e9 FUN_1000_01d3 DATA 0 true Stack[0xc] - 1000:01ec FUN_1000_01d3 DATA 0 true Stack[0xa] - 1000:01f2 FUN_1000_01d3 DATA 1 true Stack[0x4] - 1000:01f7 FUN_1000_01d3 UNCONDITIONAL_CALL 0 true 1018:1106 Code4 FUN_1018_1106 FUN_1018_1106 1000:01fc FUN_1000_01d3 DATA 1 true Stack[0x4] - 1000:0203 FUN_1000_01d3 DATA 0 true Stack[-0xa] - 1000:0206 FUN_1000_01d3 DATA 0 true Stack[-0x8] - 1000:0222 FUN_1000_01d3 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1000:0230 FUN_1000_01d3 DATA 1 true Stack[-0xa] - 1000:0244 FUN_1000_01d3 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1000:0252 FUN_1000_01d3 DATA 1 true Stack[-0xa] - 1000:0265 FUN_1000_01d3 DATA 1 true Stack[0x4] - 1000:0274 FUN_1000_0270 WRITE 0 true 1028:07cf Data6 DAT_1028_07cf 1000:0279 FUN_1000_0270 WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:027e FUN_1000_0270 WRITE 0 true 1028:0875 Data6 DAT_1028_0875 1000:0283 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:029a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:0167 Code5 FUN_1020_0167 FUN_1020_0167 1000:02a2 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:02ab Code1 LAB_1000_02ab 1000:02a4 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:02cf Code1 LAB_1000_02cf 1000:02a9 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:02cf Code1 LAB_1000_02cf 1000:02ba FUN_1000_0270 READ 0 true 1028:0668 Data6 DAT_1028_0668 1000:02ba FUN_1000_0270 READ 0 false 1028:0666 Data6 DAT_1028_0666 1000:02ba FUN_1000_0270 COMPUTED_CALL -1 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1000:02be FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:02c3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1000:02ca FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1000:02cf FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:02d4 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1018:170c Code4 FUN_1018_170c FUN_1018_170c 1000:02e0 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:02e6 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:02eb FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:02f2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0023 Code2 FUN_1008_0023 FUN_1008_0023 1000:02f7 FUN_1000_0270 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:0305 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:1326 Code2 FUN_1008_1326 FUN_1008_1326 1000:030a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:11c5 Code2 FUN_1008_11c5 FUN_1008_11c5 1000:030f FUN_1000_0270 WRITE 0 true 1028:07cc Data6 DAT_1028_07cc 1000:0314 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:032c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1228:0198 EXTERNAL GETTICKCOUNT GETTICKCOUNT 1000:0331 FUN_1000_0270 WRITE 0 true 1028:0720 Data6 DAT_1028_0720 1000:0334 FUN_1000_0270 WRITE 0 true 1028:0722 Data6 DAT_1028_0722 1000:0338 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0342 FUN_1000_0270 WRITE 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:0347 FUN_1000_0270 WRITE 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:034c FUN_1000_0270 WRITE 0 true 1028:086d Data6 DAT_1028_086d 1000:0352 FUN_1000_0270 WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:0358 FUN_1000_0270 WRITE 0 true 1028:0873 Data6 DAT_1028_0873 1000:035d FUN_1000_0270 WRITE 0 true 1028:07ca Data6 DAT_1028_07ca 1000:0362 FUN_1000_0270 WRITE 0 true 1028:07cb Data6 DAT_1028_07cb 1000:0367 FUN_1000_0270 WRITE 0 true 1028:07c9 Data6 DAT_1028_07c9 1000:03a4 FUN_1000_0270 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:03a7 FUN_1000_0270 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:03b5 FUN_1000_0270 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:03b8 FUN_1000_0270 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:03e0 FUN_1000_0270 WRITE 0 true 1028:07c5 Data6 DAT_1028_07c5 1000:03eb FUN_1000_0270 WRITE 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:03f0 FUN_1000_0270 WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:03fa FUN_1000_0270 WRITE 0 true 1028:086b Data6 DAT_1028_086b 1000:0402 FUN_1000_0270 WRITE 0 true 1028:0869 Data6 DAT_1028_0869 1000:0407 FUN_1000_0270 WRITE 0 true 1028:0876 Data6 DAT_1028_0876 1000:040a FUN_1000_0270 WRITE 0 true 1028:0878 Data6 DAT_1028_0878 1000:040f FUN_1000_0270 WRITE 0 true 1028:087a Data6 DAT_1028_087a 1000:0412 FUN_1000_0270 WRITE 0 true 1028:087c Data6 DAT_1028_087c 1000:0415 FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:041a FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:041f Code1 LAB_1000_041f 1000:041c FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:041f FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:0422 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:042d FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:0430 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:043b FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:043e FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0449 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:044c FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0457 FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:045b FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:041c Code1 LAB_1000_041c 1000:045d FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:0462 FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0467 Code1 LAB_1000_0467 1000:0464 FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:0467 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:046f FUN_1000_0270 WRITE 0 true 1028:0982 Data6 DAT_1028_0982 1000:046f FUN_1000_0270 WRITE 0 false 1028:0986 Data6 DAT_1028_0986 1000:0473 FUN_1000_0270 WRITE 0 true 1028:0984 Data6 DAT_1028_0984 1000:0473 FUN_1000_0270 WRITE 0 false 1028:0988 Data6 DAT_1028_0988 1000:0477 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:047f FUN_1000_0270 WRITE 0 true 1028:0992 Data6 DAT_1028_0992 1000:047f FUN_1000_0270 WRITE 0 false 1028:0996 Data6 DAT_1028_0996 1000:0483 FUN_1000_0270 WRITE 0 true 1028:0994 Data6 DAT_1028_0994 1000:0483 FUN_1000_0270 WRITE 0 false 1028:0998 Data6 DAT_1028_0998 1000:0487 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:048a FUN_1000_0270 WRITE 0 true 1028:09a2 Data6 DAT_1028_09a2 1000:048a FUN_1000_0270 WRITE 0 false 1028:09a3 Data6 DAT_1028_09a3 1000:048f FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:0496 FUN_1000_0270 WRITE 0 true 1028:09a6 Data6 DAT_1028_09a6 1000:0496 FUN_1000_0270 WRITE 0 false 1028:09a8 Data6 DAT_1028_09a8 1000:049a FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:049f FUN_1000_0270 WRITE 0 true 1028:0821 Data6 DAT_1028_0821 1000:04a5 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:04a8 FUN_1000_0270 WRITE 0 true 1028:0817 Data6 DAT_1028_0817 1000:04ad FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:04b3 FUN_1000_0270 WRITE 0 true 1028:0839 Data6 DAT_1028_0839 1000:04b9 FUN_1000_0270 WRITE 0 true 1028:083b Data6 DAT_1028_083b 1000:04bf FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:04c2 FUN_1000_0270 WRITE 0 true 1028:081b Data6 DAT_1028_081b 1000:04c7 FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:04cb FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0464 Code1 LAB_1000_0464 1000:04cd FUN_1000_0270 WRITE 0 true 1028:0829 Data6 DAT_1028_0829 1000:04d3 FUN_1000_0270 WRITE 0 true 1028:082b Data6 DAT_1028_082b 1000:04d9 FUN_1000_0270 WRITE 0 true 1028:082d Data6 DAT_1028_082d 1000:04df FUN_1000_0270 WRITE 0 true 1028:082f Data6 DAT_1028_082f 1000:04e5 FUN_1000_0270 WRITE 0 true 1028:0831 Data6 DAT_1028_0831 1000:04eb FUN_1000_0270 WRITE 0 true 1028:0833 Data6 DAT_1028_0833 1000:04f1 FUN_1000_0270 WRITE 0 true 1028:0835 Data6 DAT_1028_0835 1000:04f7 FUN_1000_0270 WRITE 0 true 1028:0837 Data6 DAT_1028_0837 1000:04fd FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:052d FUN_1000_0270 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:0530 FUN_1000_0270 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:053f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:0544 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:055d FUN_1000_0270 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:0560 FUN_1000_0270 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:056f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:0574 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:05a7 FUN_1000_0270 DATA 0 true Stack[-0x6b] - 1000:05ac FUN_1000_0270 DATA 0 true Stack[-0x2d2] - 1000:05b4 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:082e Code5 FUN_1020_082e FUN_1020_082e 1000:05b9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1000:05be FUN_1000_0270 DATA 0 true Stack[-0xd0] - 1000:05c4 FUN_1000_0270 DATA 0 true Stack[-0x6b] - 1000:05ce FUN_1000_0270 DATA 0 true Stack[-0x2d2] - 1000:05d6 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:082e Code5 FUN_1020_082e FUN_1020_082e 1000:05db FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:0a7d Code5 FUN_1020_0a7d FUN_1020_0a7d 1000:05e1 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:2f07 Code2 FUN_1008_2f07 FUN_1008_2f07 1000:05e6 FUN_1000_0270 DATA 0 true Stack[-0xd0] - 1000:05f1 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:2f4d Code2 FUN_1008_2f4d FUN_1008_2f4d 1000:0602 FUN_1000_0270 DATA 0 true Stack[-0xd0] - 1000:0608 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1228:0070 EXTERNAL GETPRIVATEPROFILEINT GETPRIVATEPROFILEINT 1000:060d FUN_1000_0270 WRITE 0 true 1028:07cd Data6 DAT_1028_07cd 1000:0610 FUN_1000_0270 READ 0 true 1028:07cd Data6 DAT_1028_07cd 1000:0615 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:061e Code1 LAB_1000_061e 1000:0617 FUN_1000_0270 READ 0 true 1028:07cd Data6 DAT_1028_07cd 1000:061c FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0624 Code1 LAB_1000_0624 1000:061e FUN_1000_0270 WRITE 0 true 1028:07cd Data6 DAT_1028_07cd 1000:0630 FUN_1000_0270 DATA 0 true Stack[-0xd0] - 1000:0636 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1228:0070 EXTERNAL GETPRIVATEPROFILEINT GETPRIVATEPROFILEINT 1000:063b FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0647 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0650 Code1 LAB_1000_0650 1000:064e FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0658 Code1 LAB_1000_0658 1000:0650 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0658 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0661 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:068a Code1 LAB_1000_068a 1000:067b FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:0681 FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:0687 FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0767 Code1 LAB_1000_0767 1000:068c FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:06b8 Code1 LAB_1000_06b8 1000:068e FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:06a9 FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:06af FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:06b5 FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0767 Code1 LAB_1000_0767 1000:06ba FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:06e6 Code1 LAB_1000_06e6 1000:06bc FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:06d7 FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:06dd FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:06e3 FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0767 Code1 LAB_1000_0767 1000:06e8 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0713 Code1 LAB_1000_0713 1000:06ea FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0705 FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:070b FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:0711 FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0767 Code1 LAB_1000_0767 1000:0715 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:0740 Code1 LAB_1000_0740 1000:0717 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0732 FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:0738 FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:073e FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:0767 Code1 LAB_1000_0767 1000:0740 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:075b FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:0761 FUN_1000_0270 WRITE 0 true 1028:0871 Data6 DAT_1028_0871 1000:0767 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:076e FUN_1000_0270 DATA 0 true Stack[-0x1d2] - 1000:077e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:28a3 Code2 FUN_1008_28a3 FUN_1008_28a3 1000:0783 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:0796 FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:07b4 Code1 LAB_1000_07b4 1000:07a9 FUN_1000_0270 READ 0 true 1028:0668 Data6 DAT_1028_0668 1000:07a9 FUN_1000_0270 READ 0 false 1028:0666 Data6 DAT_1028_0666 1000:07a9 FUN_1000_0270 COMPUTED_CALL -1 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1000:07af FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1000:0818 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0882 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:08ec FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0958 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:09c3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0a2c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0a97 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0b01 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0b6c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0bd5 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0c40 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0cab FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0d15 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0d81 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0dea FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0e54 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0ebd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0f27 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0f90 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:0ff8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1062 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:10cb FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1134 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:119d FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1206 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:126f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:12d9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1344 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:13ad FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1416 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:147f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:14e8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1551 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:15ba FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1622 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1689 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:16f0 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1757 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:17be FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1826 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:188f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:18f7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1960 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:19c8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1a31 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1a99 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1b01 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1b69 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1bd2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1c3a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1ca3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1d0c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1d80 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1df2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1e66 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1ecc FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1f37 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:1f9c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2001 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2066 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:20cb FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2133 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:219a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2203 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:226c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:22d5 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:233b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:23a3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:240a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2472 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:24d9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:253e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:25a3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2608 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:266d FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:26d8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2741 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:27aa FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2815 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:287e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:28e9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2950 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:29b9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2a20 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2a89 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2af0 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2b56 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2bbc FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2c23 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2c8a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2cef FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2d5d FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2dcb FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2e39 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2ea7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2f15 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2f83 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:2ff1 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:305f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:30cd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:313b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:31a8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3215 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3283 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:32f0 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:335d FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:33c8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3431 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:34a2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:350b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3579 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:35e5 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3651 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:36bf FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:372b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3797 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3805 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3871 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:38dd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:394b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:39b7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3a23 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3a8b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3af1 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3b57 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3bc0 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3c28 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3c90 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3cf7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3d60 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3dc5 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3e2a FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3e90 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3ef6 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3f5b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:3fc3 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:402b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4094 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:40fd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4166 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:41ce FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4235 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:429c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4303 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4369 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:43cd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4431 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4495 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:44f9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:455e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:45c2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4629 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4690 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:46f7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:475e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:47c9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4832 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:489c FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4905 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:496f FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:49d8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4a42 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4aab FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4b15 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4b7e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4be8 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4c51 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4cbb FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4d22 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4d8b FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4df6 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4e5e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4ec7 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4f2e FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4f97 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:4ffc FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:5061 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0138 Code2 FUN_1008_0138 FUN_1008_0138 1000:5072 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5084 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5097 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50aa FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50bd FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50cc FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50db FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50ea FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:50f9 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5108 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5117 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5126 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5135 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5144 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5153 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5162 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5173 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5184 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:5193 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:51a2 FUN_1000_0270 UNCONDITIONAL_CALL 0 true 1008:0787 Code2 FUN_1008_0787 FUN_1008_0787 1000:51a7 FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:51ac FUN_1000_0270 UNCONDITIONAL_JUMP 0 true 1000:51b1 Code1 LAB_1000_51b1 1000:51ae FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:51b1 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:51b5 FUN_1000_0270 READ 1 true 1028:09e2 Data6 DAT_1028_09e2 1000:51b5 FUN_1000_0270 READ 1 false 1028:0a35 Data6 DAT_1028_0a35 1000:51b9 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:51bc FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:51c6 FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:51ca FUN_1000_0270 READ 1 true 1028:09f1 Data6 DAT_1028_09f1 1000:51ca FUN_1000_0270 READ 1 false 1028:0a44 Data6 DAT_1028_0a44 1000:51ce FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:51d3 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:51dd FUN_1000_0270 DATA 1 true Stack[-0x4] - 1000:51e0 FUN_1000_0270 DATA 1 true Stack[0x4] - 1000:51ea FUN_1000_0270 DATA 0 true Stack[-0x4] - 1000:51ef FUN_1000_0270 CONDITIONAL_JUMP 0 true 1000:51ae Code1 LAB_1000_51ae 1000:5200 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:5206 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:520b FUN_1000_51f5 DATA 0 true Stack[-0x6] - 1000:520e FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1008:10e3 Code2 FUN_1008_10e3 FUN_1008_10e3 1000:5213 FUN_1000_51f5 DATA 1 true Stack[0x4] - 1000:522a FUN_1000_51f5 CONDITIONAL_JUMP 0 true 1000:523b Code1 LAB_1000_523b 1000:523b FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:5240 FUN_1000_51f5 DATA 1 true Stack[0x4] - 1000:5247 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:524c FUN_1000_51f5 READ 0 true 1028:0859 Data6 DAT_1028_0859 1000:5250 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5255 FUN_1000_51f5 READ 0 true 1028:0863 Data6 DAT_1028_0863 1000:5259 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:525e FUN_1000_51f5 READ 0 true 1028:0865 Data6 DAT_1028_0865 1000:5262 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5267 FUN_1000_51f5 READ 0 true 1028:085f Data6 DAT_1028_085f 1000:526b FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5270 FUN_1000_51f5 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:5274 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5279 FUN_1000_51f5 READ 0 true 1028:0861 Data6 DAT_1028_0861 1000:527d FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5282 FUN_1000_51f5 READ 0 true 1028:085d Data6 DAT_1028_085d 1000:5286 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:528d FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:5290 FUN_1000_51f5 UNCONDITIONAL_JUMP 0 true 1000:5295 Code1 LAB_1000_5295 1000:5292 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:5295 FUN_1000_51f5 DATA 1 true Stack[-0x4] - 1000:529e FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:52a3 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52a7 FUN_1000_51f5 CONDITIONAL_JUMP 0 true 1000:5292 Code1 LAB_1000_5292 1000:52a9 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52ae FUN_1000_51f5 UNCONDITIONAL_JUMP 0 true 1000:52b3 Code1 LAB_1000_52b3 1000:52b0 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52b3 FUN_1000_51f5 DATA 1 true Stack[-0x4] - 1000:52b8 FUN_1000_51f5 READ 0 true 1028:431b Data6 DAT_1028_431b 1000:52b8 FUN_1000_51f5 READ 0 false 1028:431d Data6 DAT_1028_431d 1000:52bc FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:52c1 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52c5 FUN_1000_51f5 CONDITIONAL_JUMP 0 true 1000:52b0 Code1 LAB_1000_52b0 1000:52c7 FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52cc FUN_1000_51f5 UNCONDITIONAL_JUMP 0 true 1000:52d1 Code1 LAB_1000_52d1 1000:52ce FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52d1 FUN_1000_51f5 DATA 1 true Stack[-0x4] - 1000:52d6 FUN_1000_51f5 READ 0 true 1028:4323 Data6 DAT_1028_4323 1000:52d6 FUN_1000_51f5 READ 0 false 1028:4325 Data6 DAT_1028_4325 1000:52da FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:52df FUN_1000_51f5 DATA 0 true Stack[-0x4] - 1000:52e3 FUN_1000_51f5 CONDITIONAL_JUMP 0 true 1000:52ce Code1 LAB_1000_52ce 1000:52e5 FUN_1000_51f5 DATA 0 true Stack[-0x6] - 1000:52e8 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:52ef FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0194 EXTERNAL POSTQUITMESSAGE POSTQUITMESSAGE 1000:52f7 FUN_1000_51f5 DATA 1 true Stack[0x4] - 1000:52fc FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1018:121b Code4 FUN_1018_121b FUN_1018_121b 1000:5301 FUN_1000_51f5 DATA 1 true Stack[0x4] - 1000:530e FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:5315 FUN_1000_51f5 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1000:5321 FUN_1000_531e DATA 1 true Stack[0x4] - 1000:5328 FUN_1000_531e UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:532d FUN_1000_531e DATA 1 true Stack[0x4] - 1000:533c FUN_1000_531e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5341 FUN_1000_531e DATA 1 true Stack[0x4] - 1000:5352 FUN_1000_531e DATA 1 true Stack[0x6] - 1000:536b FUN_1000_531e UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:5370 FUN_1000_531e DATA 1 true Stack[0x4] - 1000:537b FUN_1000_531e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5380 FUN_1000_531e DATA 1 true Stack[0x4] - 1000:5383 FUN_1000_531e DATA 0 true Stack[-0xc] - 1000:5387 FUN_1000_531e UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5394 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:5397 FUN_1000_5390 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:539d FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:53a2 FUN_1000_5390 DATA 0 true Stack[-0x24] - 1000:53a5 FUN_1000_5390 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:53a9 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0178 EXTERNAL UNREALIZEOBJECT UNREALIZEOBJECT 1000:53ae FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:53b1 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:53b6 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:53bb FUN_1000_5390 READ 0 true 1028:07cc Data6 DAT_1028_07cc 1000:53c0 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:53c5 Code1 LAB_1000_53c5 1000:53c2 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:5619 Code1 LAB_1000_5619 1000:53c5 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:53ce FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:53d3 FUN_1000_5390 DATA 0 true Stack[-0x4] - 1000:53d6 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:53d9 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:53de FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:53e1 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:53e4 FUN_1000_5390 DATA 0 true Stack[-0x4] - 1000:53e7 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:53ec FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:53ef FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:53fc FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:5408 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:540d FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:5410 FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:5413 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5418 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:541b FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5420 FUN_1000_5390 DATA 0 true Stack[-0x4] - 1000:5423 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5428 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5431 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:5436 FUN_1000_5390 DATA 0 true Stack[-0x4] - 1000:543c FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5441 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:0f2e Code2 FUN_1008_0f2e FUN_1008_0f2e 1000:5449 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5451 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5456 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:545f FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:5464 FUN_1000_5390 WRITE 0 true 1028:085d Data6 DAT_1028_085d 1000:546a FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:546f FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5478 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:547d FUN_1000_5390 WRITE 0 true 1028:085b Data6 DAT_1028_085b 1000:5483 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5488 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5491 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0280 EXTERNAL LOADBITMAP LOADBITMAP 1000:5496 FUN_1000_5390 WRITE 0 true 1028:0861 Data6 DAT_1028_0861 1000:549b FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:549e FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:54a3 Code1 LAB_1000_54a3 1000:54a0 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:54a3 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54ab FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:54b0 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:54b4 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54bd FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:54c2 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54cb FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:54cf FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:54a0 Code1 LAB_1000_54a0 1000:54d1 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:54d6 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:54db Code1 LAB_1000_54db 1000:54d8 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:54db FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54e3 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:54e8 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:54ec FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54f5 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:54fa FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:54ff FUN_1000_5390 WRITE 0 true 1028:431b Data6 DAT_1028_431b 1000:5503 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:5507 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:54d8 Code1 LAB_1000_54d8 1000:5509 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:550e FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:5513 Code1 LAB_1000_5513 1000:5510 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:5513 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:551b FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5520 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5524 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:552d FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:5532 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:5537 FUN_1000_5390 WRITE 0 true 1028:4323 Data6 DAT_1028_4323 1000:553b FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:553f FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5510 Code1 LAB_1000_5510 1000:5544 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5549 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5551 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0280 EXTERNAL LOADBITMAP LOADBITMAP 1000:5556 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:5560 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:5565 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:556e FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:5573 FUN_1000_5390 WRITE 0 true 1028:0863 Data6 DAT_1028_0863 1000:5579 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:557e FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5586 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0280 EXTERNAL LOADBITMAP LOADBITMAP 1000:558b FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:5595 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:559a FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:55a3 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:55a8 FUN_1000_5390 WRITE 0 true 1028:085f Data6 DAT_1028_085f 1000:55ae FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:55b3 FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:55bc FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:55c1 FUN_1000_5390 WRITE 0 true 1028:0865 Data6 DAT_1028_0865 1000:55c7 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:55cc FUN_1000_5390 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:55d5 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:55da FUN_1000_5390 WRITE 0 true 1028:0859 Data6 DAT_1028_0859 1000:55e0 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:55e5 FUN_1000_5390 WRITE 0 true 1028:07cc Data6 DAT_1028_07cc 1000:55ed FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1000:531e Code1 FUN_1000_531e FUN_1000_531e 1000:55f2 FUN_1000_5390 DATA 0 true Stack[-0x4] - 1000:55f5 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:55fa FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:55fd FUN_1000_5390 DATA 0 true Stack[-0x24] - 1000:5602 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:560e FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:5614 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:5619 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:5622 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5627 Code1 LAB_1000_5627 1000:5624 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:58e3 Code1 LAB_1000_58e3 1000:562d FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:5630 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:5635 FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:5638 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:563b FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:5640 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:5643 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:564a FUN_1000_5390 DATA 0 true Stack[-0x16] - 1000:564f FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:5654 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:5657 FUN_1000_5390 DATA 1 true Stack[-0x12] - 1000:565c FUN_1000_5390 DATA 1 true Stack[-0x10] - 1000:5661 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:5666 FUN_1000_5390 DATA 0 true Stack[-0xa] - 1000:5669 FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:566c FUN_1000_5390 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:5670 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5675 FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:5678 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:567b FUN_1000_5390 DATA 0 true Stack[-0xa] - 1000:567e FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5683 FUN_1000_5390 DATA 0 true Stack[-0x8] - 1000:5686 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:568d FUN_1000_5390 DATA 0 true Stack[-0x12] - 1000:5690 FUN_1000_5390 DATA 0 true Stack[-0x10] - 1000:5693 FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:569f FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:56a4 FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:56ab FUN_1000_5390 DATA 0 true Stack[-0x12] - 1000:56ae FUN_1000_5390 DATA 0 true Stack[-0x10] - 1000:56b1 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:56bd FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:56c2 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:56c9 FUN_1000_5390 DATA 0 true Stack[-0x12] - 1000:56cc FUN_1000_5390 DATA 0 true Stack[-0x10] - 1000:56cf FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:56db FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:56e0 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:56e3 FUN_1000_5390 DATA 0 true Stack[-0x8] - 1000:56e6 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:56eb FUN_1000_5390 DATA 0 true Stack[-0xa] - 1000:56ee FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:56f3 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:56f6 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:56fb FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:56fe FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:5701 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5706 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:570f FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5721 Code1 LAB_1000_5721 1000:5711 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5716 Code1 LAB_1000_5716 1000:5713 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:57fb Code1 LAB_1000_57fb 1000:571c FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5721 Code1 LAB_1000_5721 1000:571e FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:57fb Code1 LAB_1000_57fb 1000:5721 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:572a FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:573c Code1 LAB_1000_573c 1000:572c FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5731 Code1 LAB_1000_5731 1000:572e FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:57fb Code1 LAB_1000_57fb 1000:5737 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:573c Code1 LAB_1000_573c 1000:5739 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:57fb Code1 LAB_1000_57fb 1000:573c FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:5745 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:574a Code1 LAB_1000_574a 1000:5747 FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:57fb Code1 LAB_1000_57fb 1000:574a FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:5751 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5756 FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:5759 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:575c FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:578b FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:5798 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:579d FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:57a0 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:57a7 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:57ac FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:57af FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:57de FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:57eb FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:57f0 FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:57f3 FUN_1000_5390 DATA 0 true Stack[-0x6] - 1000:57f6 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:57fb FUN_1000_5390 DATA 0 true Stack[-0xc] - 1000:57fe FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:5803 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:5816 FUN_1000_5390 DATA 0 true Stack[0xc] - 1000:5819 FUN_1000_5390 DATA 0 true Stack[-0x24] - 1000:581e FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:582a FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:5830 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:5835 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:583c FUN_1000_5390 DATA 0 true Stack[-0x16] - 1000:5841 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:5846 FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:584d FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:5852 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:5855 FUN_1000_5390 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:5868 FUN_1000_5390 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:587a FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:5881 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:5884 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:0996 Code2 FUN_1008_0996 FUN_1008_0996 1000:5889 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:588e FUN_1000_5390 UNCONDITIONAL_JUMP 0 true 1000:5893 Code1 LAB_1000_5893 1000:5890 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:5893 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:5899 FUN_1000_5390 READ 0 true 1028:0984 Data6 DAT_1028_0984 1000:5899 FUN_1000_5390 READ 0 false 1028:0988 Data6 DAT_1028_0988 1000:589e FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:58a9 Code1 LAB_1000_58a9 1000:58a0 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:58b7 Code1 LAB_1000_58b7 1000:58a2 FUN_1000_5390 READ 0 true 1028:0982 Data6 DAT_1028_0982 1000:58a2 FUN_1000_5390 READ 0 false 1028:0986 Data6 DAT_1028_0986 1000:58a7 FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:58b7 Code1 LAB_1000_58b7 1000:58a9 FUN_1000_5390 DATA 1 true Stack[-0x20] - 1000:58af FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:58b2 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:0996 Code2 FUN_1008_0996 FUN_1008_0996 1000:58b7 FUN_1000_5390 DATA 0 true Stack[-0x20] - 1000:58bb FUN_1000_5390 CONDITIONAL_JUMP 0 true 1000:5890 Code1 LAB_1000_5890 1000:58bd FUN_1000_5390 WRITE 0 true 1028:086b Data6 DAT_1028_086b 1000:58c3 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:58c6 FUN_1000_5390 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:58ca FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1008:0b9e Code2 FUN_1008_0b9e FUN_1008_0b9e 1000:58cf FUN_1000_5390 DATA 1 true Stack[0x4] - 1000:58d6 FUN_1000_5390 DATA 0 true Stack[-0xe] - 1000:58d9 FUN_1000_5390 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:58de FUN_1000_5390 WRITE 0 true 1028:07cb Data6 DAT_1028_07cb 1000:58eb FUN_1000_58e7 DATA 1 true Stack[0x8] - 1000:58f3 FUN_1000_58e7 CONDITIONAL_JUMP 0 true 1000:5901 Code1 LAB_1000_5901 1000:58f5 FUN_1000_58e7 WRITE 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:58fc FUN_1000_58e7 DATA 0 true Stack[-0x4] - 1000:58ff FUN_1000_58e7 UNCONDITIONAL_JUMP 0 true 1000:594f Code1 LAB_1000_594f 1000:5901 FUN_1000_58e7 READ 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:5906 FUN_1000_58e7 CONDITIONAL_JUMP 0 true 1000:594f Code1 LAB_1000_594f 1000:5908 FUN_1000_58e7 DATA 1 true Stack[0x4] - 1000:590f FUN_1000_58e7 UNCONDITIONAL_CALL 0 true 1228:01bc EXTERNAL ISICONIC ISICONIC 1000:5916 FUN_1000_58e7 CONDITIONAL_JUMP 0 true 1000:594f Code1 LAB_1000_594f 1000:5918 FUN_1000_58e7 WRITE 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:591d FUN_1000_58e7 DATA 1 true Stack[0x4] - 1000:592a FUN_1000_58e7 UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:592f FUN_1000_58e7 DATA 1 true Stack[0x4] - 1000:5936 FUN_1000_58e7 UNCONDITIONAL_CALL 0 true 1228:024c EXTERNAL UPDATEWINDOW UPDATEWINDOW 1000:593b FUN_1000_58e7 DATA 1 true Stack[0x8] - 1000:594c FUN_1000_58e7 DATA 0 true Stack[-0x4] - 1000:594f FUN_1000_58e7 DATA 1 true Stack[-0x4] - 1000:5959 FUN_1000_5956 DATA 1 true Stack[0x8] - 1000:5961 FUN_1000_5956 CONDITIONAL_JUMP 0 true 1000:599c Code1 LAB_1000_599c 1000:5963 FUN_1000_5956 READ 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:5968 FUN_1000_5956 CONDITIONAL_JUMP 0 true 1000:599c Code1 LAB_1000_599c 1000:596a FUN_1000_5956 WRITE 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:596f FUN_1000_5956 DATA 1 true Stack[0x4] - 1000:597c FUN_1000_5956 UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:5981 FUN_1000_5956 DATA 1 true Stack[0x4] - 1000:5988 FUN_1000_5956 UNCONDITIONAL_CALL 0 true 1228:024c EXTERNAL UPDATEWINDOW UPDATEWINDOW 1000:598d FUN_1000_5956 DATA 1 true Stack[0x8] - 1000:59a4 FUN_1000_59a0 DATA 0 true Stack[-0x4] - 1000:59a9 FUN_1000_59a0 DATA 1 true Stack[0x8] - 1000:59b0 FUN_1000_59a0 DATA 1 true Stack[0x4] - 1000:59b7 FUN_1000_59a0 CONDITIONAL_JUMP 0 true 1000:59ce Code1 LAB_1000_59ce 1000:59b9 FUN_1000_59a0 DATA 1 true Stack[0x8] - 1000:59c0 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:01e0 EXTERNAL GETPARENT GETPARENT 1000:59c5 FUN_1000_59a0 DATA 1 true Stack[0x4] - 1000:59cc FUN_1000_59a0 CONDITIONAL_JUMP 0 true 1000:59d0 Code1 LAB_1000_59d0 1000:59ce FUN_1000_59a0 UNCONDITIONAL_JUMP 0 true 1000:5a30 Code1 LAB_1000_5a30 1000:59d0 FUN_1000_59a0 DATA 1 true Stack[0x4] - 1000:59d7 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:59dc FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:59df FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:59e2 FUN_1000_59a0 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:59e8 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:59ed FUN_1000_59a0 DATA 0 true Stack[-0x8] - 1000:59f0 FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:59f3 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:59f8 FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:59fb FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:0184 EXTERNAL UPDATECOLORS UPDATECOLORS 1000:5a00 FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:5a03 FUN_1000_59a0 DATA 0 true Stack[-0x8] - 1000:5a08 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5a0d FUN_1000_59a0 DATA 1 true Stack[0x4] - 1000:5a14 FUN_1000_59a0 DATA 0 true Stack[-0x6] - 1000:5a17 FUN_1000_59a0 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:5a1c FUN_1000_59a0 DATA 1 true Stack[0x8] - 1000:5a2d FUN_1000_59a0 DATA 0 true Stack[-0x4] - 1000:5a30 FUN_1000_59a0 DATA 1 true Stack[-0x4] - 1000:5a3b FUN_1000_5a37 DATA 1 true Stack[0x4] - 1000:5a42 FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:5a47 FUN_1000_5a37 DATA 0 true Stack[-0x6] - 1000:5a4a FUN_1000_5a37 DATA 0 true Stack[-0x6] - 1000:5a4d FUN_1000_5a37 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:5a53 FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5a58 FUN_1000_5a37 DATA 0 true Stack[-0x8] - 1000:5a5b FUN_1000_5a37 DATA 0 true Stack[-0x6] - 1000:5a5e FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:5a63 FUN_1000_5a37 DATA 0 true Stack[-0xa] - 1000:5a66 FUN_1000_5a37 DATA 0 true Stack[-0x6] - 1000:5a69 FUN_1000_5a37 DATA 0 true Stack[-0x8] - 1000:5a6e FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5a73 FUN_1000_5a37 DATA 1 true Stack[0x4] - 1000:5a7a FUN_1000_5a37 DATA 0 true Stack[-0x6] - 1000:5a7d FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:5a82 FUN_1000_5a37 DATA 0 true Stack[-0xa] - 1000:5a86 FUN_1000_5a37 CONDITIONAL_JUMP 0 true 1000:5a9a Code1 LAB_1000_5a9a 1000:5a88 FUN_1000_5a37 DATA 1 true Stack[0x4] - 1000:5a95 FUN_1000_5a37 UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:5a9a FUN_1000_5a37 DATA 1 true Stack[-0xa] - 1000:5a9d FUN_1000_5a37 DATA 1 true Stack[0x8] - 1000:5aaa FUN_1000_5a37 DATA 1 true Stack[-0xa] - 1000:5aad FUN_1000_5a37 DATA 0 true Stack[-0x4] - 1000:5ab0 FUN_1000_5a37 DATA 1 true Stack[-0x4] - 1000:5aba FUN_1000_5ab7 DATA 1 true Stack[0x8] - 1000:5abf FUN_1000_5ab7 DATA 1 true Stack[0x4] - 1000:5ac4 FUN_1000_5ab7 UNCONDITIONAL_CALL 0 true 1018:1274 Code4 FUN_1018_1274 FUN_1018_1274 1000:5acb FUN_1000_5ab7 UNCONDITIONAL_CALL 0 true 1228:016c EXTERNAL GETSTOCKOBJECT GETSTOCKOBJECT 1000:5ad0 FUN_1000_5ab7 DATA 1 true Stack[0x8] - 1000:5af0 FUN_1000_5aea UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1000:5af5 FUN_1000_5aea CONDITIONAL_JUMP 0 true 1000:5afa Code1 LAB_1000_5afa 1000:5af7 FUN_1000_5aea UNCONDITIONAL_JUMP 0 true 1000:5b9d Code1 LAB_1000_5b9d 1000:5afa FUN_1000_5aea DATA 0 true Stack[0x10] - 1000:5afd FUN_1000_5aea DATA 0 true Stack[0xe] - 1000:5b00 FUN_1000_5aea DATA 0 true Stack[0xc] - 1000:5b03 FUN_1000_5aea DATA 0 true Stack[0xa] - 1000:5b09 FUN_1000_5aea DATA 1 true Stack[0x4] - 1000:5b0e FUN_1000_5aea UNCONDITIONAL_CALL 0 true 1018:1106 Code4 FUN_1018_1106 FUN_1018_1106 1000:5b13 FUN_1000_5aea DATA 1 true Stack[0xe] - 1000:5b16 FUN_1000_5aea DATA 1 true Stack[0x10] - 1000:5b19 FUN_1000_5aea DATA 1 true Stack[0x4] - 1000:5b91 FUN_1000_5aea DATA 1 true Stack[0x4] - 1000:5b98 FUN_1000_5aea UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1000:5b9d FUN_1000_5aea DATA 1 true Stack[0x4] - 1000:5ba9 FUN_1000_5ba6 READ 0 true 1028:0867 Data6 DAT_1028_0867 1000:5bad FUN_1000_5ba6 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5bb2 FUN_1000_5ba6 DATA 1 true Stack[0x4] - 1000:5bc3 FUN_1000_5ba6 DATA 1 true Stack[0x4] - 1000:5bd5 FUN_1000_5ba6 UNCONDITIONAL_CALL 0 true 1018:121b Code4 FUN_1018_121b FUN_1018_121b 1000:5bdc FUN_1000_5ba6 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1000:5be8 FUN_1000_5be5 DATA 1 true Stack[0x4] - 1000:5bed FUN_1000_5be5 UNCONDITIONAL_CALL 0 true 1018:170c Code4 FUN_1018_170c FUN_1018_170c 1000:5bf2 FUN_1000_5be5 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:5bfb FUN_1000_5be5 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:5c00 FUN_1000_5be5 WRITE 0 true 1028:0867 Data6 DAT_1028_0867 1000:5c03 FUN_1000_5be5 DATA 1 true Stack[0x4] - 1000:5c0a FUN_1000_5be5 UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1000:5c17 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5c1a FUN_1000_5c13 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:5c20 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5c25 FUN_1000_5c13 DATA 0 true Stack[-0x4] - 1000:5c28 FUN_1000_5c13 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:5c2c FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0178 EXTERNAL UNREALIZEOBJECT UNREALIZEOBJECT 1000:5c31 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5c34 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:5c39 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5c3c FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:5c41 FUN_1000_5c13 DATA 0 true Stack[-0x16a] - 1000:5c45 FUN_1000_5c13 DATA 0 true Stack[-0x16a] - 1000:5c49 FUN_1000_5c13 READ 0 true 1028:0867 Data6 DAT_1028_0867 1000:5c4d FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5c52 FUN_1000_5c13 DATA 0 true Stack[-0x164] - 1000:5c56 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5c59 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:5c5e FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5c62 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5c6b FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:5c70 FUN_1000_5c13 DATA 0 true Stack[-0x168] - 1000:5c74 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5c78 FUN_1000_5c13 DATA 0 true Stack[-0x168] - 1000:5c7c FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5c81 FUN_1000_5c13 DATA 0 true Stack[-0x166] - 1000:5c85 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5c89 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0170 EXTERNAL GETTEXTCOLOR GETTEXTCOLOR 1000:5c8e FUN_1000_5c13 DATA 0 true Stack[-0x8] - 1000:5c91 FUN_1000_5c13 DATA 0 true Stack[-0x6] - 1000:5c94 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5c9a FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:017c EXTERNAL SETTEXTALIGN SETTEXTALIGN 1000:5c9f FUN_1000_5c13 DATA 0 true Stack[-0xa] - 1000:5ca2 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5ca8 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0144 EXTERNAL SETBKMODE SETBKMODE 1000:5cad FUN_1000_5c13 DATA 0 true Stack[-0x162] - 1000:5cb1 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5cbf FUN_1000_5c13 DATA 0 true Stack[-0x16a] - 1000:5ccc FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:5cd1 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5ce4 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0148 EXTERNAL SETTEXTCOLOR SETTEXTCOLOR 1000:5ce9 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5cf3 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:5cf8 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5d01 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5d06 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5d0b FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1000:5d11 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:014c EXTERNAL TEXTOUT TEXTOUT 1000:5d16 FUN_1000_5c13 DATA 0 true Stack[-0x15e] - 1000:5d1c FUN_1000_5c13 UNCONDITIONAL_JUMP 0 true 1000:5d22 Code1 LAB_1000_5d22 1000:5d1e FUN_1000_5c13 DATA 0 true Stack[-0x15e] - 1000:5d22 FUN_1000_5c13 DATA 1 true Stack[-0x15e] - 1000:5d2a FUN_1000_5c13 DATA 0 true Stack[-0x160] - 1000:5d2e FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5d34 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:017c EXTERNAL SETTEXTALIGN SETTEXTALIGN 1000:5d39 FUN_1000_5c13 DATA 0 true Stack[-0x15e] - 1000:5d3e FUN_1000_5c13 CONDITIONAL_JUMP 0 true 1000:5d51 Code1 LAB_1000_5d51 1000:5d40 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5d4a FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:5d4f FUN_1000_5c13 UNCONDITIONAL_JUMP 0 true 1000:5d60 Code1 LAB_1000_5d60 1000:5d51 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5d5b FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:5d60 FUN_1000_5c13 DATA 1 true Stack[-0x15e] - 1000:5d69 FUN_1000_5c13 DATA 0 true Stack[-0x15c] - 1000:5d72 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1020:1629 Code5 FUN_1020_1629 FUN_1020_1629 1000:5d77 FUN_1000_5c13 DATA 0 true Stack[-0x5c] - 1000:5d7c FUN_1000_5c13 DATA 0 true Stack[-0x15c] - 1000:5d82 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1000:5d87 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5d8c FUN_1000_5c13 DATA 0 true Stack[-0x5c] - 1000:5d91 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f4d Code2 FUN_1008_2f4d FUN_1008_2f4d 1000:5d96 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5da0 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f4d Code2 FUN_1008_2f4d FUN_1008_2f4d 1000:5da5 FUN_1000_5c13 DATA 0 true Stack[-0x5c] - 1000:5daa FUN_1000_5c13 DATA 0 true Stack[-0x26c] - 1000:5db0 FUN_1000_5c13 DATA 1 true Stack[-0x15e] - 1000:5dbd FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1020:0b00 Code5 FUN_1020_0b00 FUN_1020_0b00 1000:5dc2 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1000:5dc7 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5dcc FUN_1000_5c13 DATA 0 true Stack[-0x5c] - 1000:5dd1 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f4d Code2 FUN_1008_2f4d FUN_1008_2f4d 1000:5dd6 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5ddc FUN_1000_5c13 DATA 0 true Stack[-0x160] - 1000:5de0 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5de5 FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5dea FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1000:5df0 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:014c EXTERNAL TEXTOUT TEXTOUT 1000:5df5 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5dfb FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:017c EXTERNAL SETTEXTALIGN SETTEXTALIGN 1000:5e00 FUN_1000_5c13 DATA 1 true Stack[-0x15e] - 1000:5e07 FUN_1000_5c13 READ 0 true 1028:0880 Data6 DAT_1028_0880 1000:5e0b FUN_1000_5c13 READ 0 true 1028:087e Data6 DAT_1028_087e 1000:5e11 FUN_1000_5c13 DATA 0 true Stack[-0x15c] - 1000:5e1a FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1020:1629 Code5 FUN_1020_1629 FUN_1020_1629 1000:5e1f FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5e24 FUN_1000_5c13 DATA 0 true Stack[-0x15c] - 1000:5e2a FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1000:5e2f FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5e36 FUN_1000_5c13 DATA 0 true Stack[-0x160] - 1000:5e3a FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5e3f FUN_1000_5c13 DATA 0 true Stack[-0x33] - 1000:5e44 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1000:5e4a FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:014c EXTERNAL TEXTOUT TEXTOUT 1000:5e4f FUN_1000_5c13 DATA 0 true Stack[-0x15e] - 1000:5e54 FUN_1000_5c13 CONDITIONAL_JUMP 0 true 1000:5e59 Code1 LAB_1000_5e59 1000:5e56 FUN_1000_5c13 UNCONDITIONAL_JUMP 0 true 1000:5d1e Code1 LAB_1000_5d1e 1000:5e59 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5e66 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5e73 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:5e78 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5e7c FUN_1000_5c13 DATA 0 true Stack[-0x6] - 1000:5e7f FUN_1000_5c13 DATA 0 true Stack[-0x8] - 1000:5e82 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0148 EXTERNAL SETTEXTCOLOR SETTEXTCOLOR 1000:5e87 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5e8b FUN_1000_5c13 DATA 0 true Stack[-0xa] - 1000:5e8e FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:017c EXTERNAL SETTEXTALIGN SETTEXTALIGN 1000:5e93 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5e97 FUN_1000_5c13 DATA 0 true Stack[-0x162] - 1000:5e9b FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0144 EXTERNAL SETBKMODE SETBKMODE 1000:5ea0 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5ea4 FUN_1000_5c13 DATA 0 true Stack[-0x166] - 1000:5ea8 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5ead FUN_1000_5c13 DATA 0 true Stack[-0x168] - 1000:5eb1 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:5eb6 FUN_1000_5c13 DATA 0 true Stack[-0x16c] - 1000:5eba FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:5ebf FUN_1000_5c13 DATA 0 true Stack[-0x16a] - 1000:5ec3 FUN_1000_5c13 DATA 0 true Stack[-0x164] - 1000:5ec7 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:5ecc FUN_1000_5c13 DATA 0 true Stack[-0x16a] - 1000:5ed0 FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:5ed5 FUN_1000_5c13 DATA 0 true Stack[0xc] - 1000:5ed8 FUN_1000_5c13 DATA 0 true Stack[-0x4] - 1000:5edd FUN_1000_5c13 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5ee9 FUN_1000_5ee6 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:5eee FUN_1000_5ee6 DATA 1 true Stack[0x4] - 1000:5ef3 FUN_1000_5ee6 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1000:5f00 FUN_1000_5efc DATA 1 true Stack[0x8] - 1000:5f0a FUN_1000_5efc DATA 0 true Stack[-0x6] - 1000:5f0d FUN_1000_5efc DATA 0 true Stack[-0x6] - 1000:5f11 FUN_1000_5efc CONDITIONAL_JUMP 0 true 1000:5f22 Code1 LAB_1000_5f22 1000:5f13 FUN_1000_5efc UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:5f18 FUN_1000_5efc DATA 1 true Stack[0x4] - 1000:5f1d FUN_1000_5efc UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1000:5f22 FUN_1000_5efc DATA 1 true Stack[-0x4] - 1000:5f2d FUN_1000_5f29 DATA 0 true Stack[-0x4] - 1000:5f32 FUN_1000_5f29 DATA 1 true Stack[0x8] - 1000:5f39 FUN_1000_5f29 DATA 1 true Stack[0x4] - 1000:5f40 FUN_1000_5f29 CONDITIONAL_JUMP 0 true 1000:5f57 Code1 LAB_1000_5f57 1000:5f42 FUN_1000_5f29 DATA 1 true Stack[0x8] - 1000:5f49 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:01e0 EXTERNAL GETPARENT GETPARENT 1000:5f4e FUN_1000_5f29 DATA 1 true Stack[0x4] - 1000:5f55 FUN_1000_5f29 CONDITIONAL_JUMP 0 true 1000:5f59 Code1 LAB_1000_5f59 1000:5f57 FUN_1000_5f29 UNCONDITIONAL_JUMP 0 true 1000:5fb9 Code1 LAB_1000_5fb9 1000:5f59 FUN_1000_5f29 DATA 1 true Stack[0x4] - 1000:5f60 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:5f65 FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5f68 FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5f6b FUN_1000_5f29 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:5f71 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5f76 FUN_1000_5f29 DATA 0 true Stack[-0x8] - 1000:5f79 FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5f7c FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:5f81 FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5f84 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:0184 EXTERNAL UPDATECOLORS UPDATECOLORS 1000:5f89 FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5f8c FUN_1000_5f29 DATA 0 true Stack[-0x8] - 1000:5f91 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5f96 FUN_1000_5f29 DATA 1 true Stack[0x4] - 1000:5f9d FUN_1000_5f29 DATA 0 true Stack[-0x6] - 1000:5fa0 FUN_1000_5f29 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:5fa5 FUN_1000_5f29 DATA 1 true Stack[0x8] - 1000:5fb6 FUN_1000_5f29 DATA 0 true Stack[-0x4] - 1000:5fb9 FUN_1000_5f29 DATA 1 true Stack[-0x4] - 1000:5fc4 FUN_1000_5fc0 DATA 1 true Stack[0x4] - 1000:5fcb FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:5fd0 FUN_1000_5fc0 DATA 0 true Stack[-0x6] - 1000:5fd3 FUN_1000_5fc0 DATA 0 true Stack[-0x6] - 1000:5fd6 FUN_1000_5fc0 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:5fdc FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5fe1 FUN_1000_5fc0 DATA 0 true Stack[-0x8] - 1000:5fe4 FUN_1000_5fc0 DATA 0 true Stack[-0x6] - 1000:5fe7 FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:5fec FUN_1000_5fc0 DATA 0 true Stack[-0xa] - 1000:5fef FUN_1000_5fc0 DATA 0 true Stack[-0x6] - 1000:5ff2 FUN_1000_5fc0 DATA 0 true Stack[-0x8] - 1000:5ff7 FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:5ffc FUN_1000_5fc0 DATA 1 true Stack[0x4] - 1000:6003 FUN_1000_5fc0 DATA 0 true Stack[-0x6] - 1000:6006 FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:600b FUN_1000_5fc0 DATA 0 true Stack[-0xa] - 1000:600f FUN_1000_5fc0 CONDITIONAL_JUMP 0 true 1000:6023 Code1 LAB_1000_6023 1000:6011 FUN_1000_5fc0 DATA 1 true Stack[0x4] - 1000:601e FUN_1000_5fc0 UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:6023 FUN_1000_5fc0 DATA 1 true Stack[-0xa] - 1000:6026 FUN_1000_5fc0 DATA 1 true Stack[0x8] - 1000:6033 FUN_1000_5fc0 DATA 1 true Stack[-0xa] - 1000:6036 FUN_1000_5fc0 DATA 0 true Stack[-0x4] - 1000:6039 FUN_1000_5fc0 DATA 1 true Stack[-0x4] - 1000:6043 FUN_1000_6040 DATA 1 true Stack[0x8] - 1000:6048 FUN_1000_6040 DATA 1 true Stack[0x4] - 1000:604d FUN_1000_6040 UNCONDITIONAL_CALL 0 true 1018:1274 Code4 FUN_1018_1274 FUN_1018_1274 1000:6054 FUN_1000_6040 UNCONDITIONAL_CALL 0 true 1228:016c EXTERNAL GETSTOCKOBJECT GETSTOCKOBJECT 1000:6059 FUN_1000_6040 DATA 1 true Stack[0x8] - 1000:6079 FUN_1000_6073 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1000:607e FUN_1000_6073 CONDITIONAL_JUMP 0 true 1000:60de Code1 LAB_1000_60de 1000:6080 FUN_1000_6073 DATA 0 true Stack[0x10] - 1000:6083 FUN_1000_6073 DATA 0 true Stack[0xe] - 1000:6086 FUN_1000_6073 DATA 0 true Stack[0xc] - 1000:6089 FUN_1000_6073 DATA 0 true Stack[0xa] - 1000:608f FUN_1000_6073 DATA 1 true Stack[0x4] - 1000:6094 FUN_1000_6073 UNCONDITIONAL_CALL 0 true 1018:1106 Code4 FUN_1018_1106 FUN_1018_1106 1000:6099 FUN_1000_6073 DATA 1 true Stack[0xe] - 1000:609c FUN_1000_6073 DATA 1 true Stack[0x10] - 1000:609f FUN_1000_6073 DATA 1 true Stack[0x4] - 1000:60d2 FUN_1000_6073 DATA 1 true Stack[0x4] - 1000:60d9 FUN_1000_6073 UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1000:60de FUN_1000_6073 DATA 1 true Stack[0x4] - 1000:60ea FUN_1000_60e7 DATA 1 true Stack[0x4] - 1000:60fb FUN_1000_60e7 DATA 1 true Stack[0x4] - 1000:6108 FUN_1000_60e7 READ 0 true 1028:0867 Data6 DAT_1028_0867 1000:610c FUN_1000_60e7 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:6114 FUN_1000_60e7 DATA 1 true Stack[0x4] - 1000:6119 FUN_1000_60e7 UNCONDITIONAL_CALL 0 true 1018:121b Code4 FUN_1018_121b FUN_1018_121b 1000:6120 FUN_1000_60e7 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1000:612c FUN_1000_6129 DATA 1 true Stack[0x4] - 1000:6131 FUN_1000_6129 UNCONDITIONAL_CALL 0 true 1018:170c Code4 FUN_1018_170c FUN_1018_170c 1000:613d FUN_1000_6129 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:6143 FUN_1000_6129 UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:6148 FUN_1000_6129 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1000:614c FUN_1000_6129 READ 1 true 1028:07cd Data6 DAT_1028_07cd 1000:6156 FUN_1000_6129 UNCONDITIONAL_CALL 0 true 1008:149d Code2 FUN_1008_149d FUN_1008_149d 1000:615b FUN_1000_6129 WRITE 0 true 1028:0867 Data6 DAT_1028_0867 1000:615e FUN_1000_6129 DATA 1 true Stack[0x4] - 1000:6165 FUN_1000_6129 UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1000:6172 FUN_1000_616e DATA 0 true Stack[0xc] - 1000:6175 FUN_1000_616e READ 0 true 1028:444e Data6 DAT_1028_444e 1000:617b FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:6180 FUN_1000_616e DATA 0 true Stack[-0x4] - 1000:6183 FUN_1000_616e READ 0 true 1028:444e Data6 DAT_1028_444e 1000:6187 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0178 EXTERNAL UNREALIZEOBJECT UNREALIZEOBJECT 1000:618c FUN_1000_616e DATA 0 true Stack[0xc] - 1000:618f FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:6194 FUN_1000_616e DATA 0 true Stack[0xc] - 1000:6197 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:619c FUN_1000_616e DATA 0 true Stack[-0x8] - 1000:619f FUN_1000_616e DATA 0 true Stack[-0x8] - 1000:61a2 FUN_1000_616e READ 0 true 1028:0867 Data6 DAT_1028_0867 1000:61a6 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:61ab FUN_1000_616e DATA 0 true Stack[-0x6] - 1000:61ae FUN_1000_616e DATA 0 true Stack[0xc] - 1000:61bb FUN_1000_616e DATA 0 true Stack[-0x8] - 1000:61c7 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:61cc FUN_1000_616e DATA 0 true Stack[-0x8] - 1000:61cf FUN_1000_616e DATA 0 true Stack[-0x6] - 1000:61d2 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:61d7 FUN_1000_616e DATA 0 true Stack[-0x8] - 1000:61da FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:61df FUN_1000_616e DATA 0 true Stack[0xc] - 1000:61e2 FUN_1000_616e DATA 0 true Stack[-0x4] - 1000:61e7 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:61f3 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1000:61f9 FUN_1000_616e UNCONDITIONAL_CALL 0 true 1228:0208 EXTERNAL SETCURSOR SETCURSOR 1000:6205 FUN_1000_6202 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:620a FUN_1000_6202 DATA 1 true Stack[0x4] - 1000:620f FUN_1000_6202 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1000:621c FUN_1000_6218 DATA 1 true Stack[0x8] - 1000:6226 FUN_1000_6218 DATA 0 true Stack[-0x6] - 1000:6229 FUN_1000_6218 DATA 0 true Stack[-0x6] - 1000:622d FUN_1000_6218 CONDITIONAL_JUMP 0 true 1000:623e Code1 LAB_1000_623e 1000:622f FUN_1000_6218 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:6234 FUN_1000_6218 DATA 1 true Stack[0x4] - 1000:6239 FUN_1000_6218 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1000:623e FUN_1000_6218 DATA 1 true Stack[-0x4] - 1000:6249 FUN_1000_6245 DATA 0 true Stack[-0x4] - 1000:624e FUN_1000_6245 DATA 1 true Stack[0x8] - 1000:6255 FUN_1000_6245 DATA 1 true Stack[0x4] - 1000:625c FUN_1000_6245 CONDITIONAL_JUMP 0 true 1000:6273 Code1 LAB_1000_6273 1000:625e FUN_1000_6245 DATA 1 true Stack[0x8] - 1000:6265 FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:01e0 EXTERNAL GETPARENT GETPARENT 1000:626a FUN_1000_6245 DATA 1 true Stack[0x4] - 1000:6271 FUN_1000_6245 CONDITIONAL_JUMP 0 true 1000:6275 Code1 LAB_1000_6275 1000:6273 FUN_1000_6245 UNCONDITIONAL_JUMP 0 true 1000:62d5 Code1 LAB_1000_62d5 1000:6275 FUN_1000_6245 DATA 1 true Stack[0x4] - 1000:627c FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:6281 FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:6284 FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:6287 FUN_1000_6245 READ 0 true 1028:444e Data6 DAT_1028_444e 1000:628d FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:6292 FUN_1000_6245 DATA 0 true Stack[-0x8] - 1000:6295 FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:6298 FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:629d FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:62a0 FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:0184 EXTERNAL UPDATECOLORS UPDATECOLORS 1000:62a5 FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:62a8 FUN_1000_6245 DATA 0 true Stack[-0x8] - 1000:62ad FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:62b2 FUN_1000_6245 DATA 1 true Stack[0x4] - 1000:62b9 FUN_1000_6245 DATA 0 true Stack[-0x6] - 1000:62bc FUN_1000_6245 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:62c1 FUN_1000_6245 DATA 1 true Stack[0x8] - 1000:62d2 FUN_1000_6245 DATA 0 true Stack[-0x4] - 1000:62d5 FUN_1000_6245 DATA 1 true Stack[-0x4] - 1000:62e0 FUN_1000_62dc DATA 1 true Stack[0x4] - 1000:62e7 FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:62ec FUN_1000_62dc DATA 0 true Stack[-0x6] - 1000:62ef FUN_1000_62dc DATA 0 true Stack[-0x6] - 1000:62f2 FUN_1000_62dc READ 0 true 1028:444e Data6 DAT_1028_444e 1000:62f8 FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:62fd FUN_1000_62dc DATA 0 true Stack[-0x8] - 1000:6300 FUN_1000_62dc DATA 0 true Stack[-0x6] - 1000:6303 FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1000:6308 FUN_1000_62dc DATA 0 true Stack[-0xa] - 1000:630b FUN_1000_62dc DATA 0 true Stack[-0x6] - 1000:630e FUN_1000_62dc DATA 0 true Stack[-0x8] - 1000:6313 FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1000:6318 FUN_1000_62dc DATA 1 true Stack[0x4] - 1000:631f FUN_1000_62dc DATA 0 true Stack[-0x6] - 1000:6322 FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:6327 FUN_1000_62dc DATA 0 true Stack[-0xa] - 1000:632b FUN_1000_62dc CONDITIONAL_JUMP 0 true 1000:633f Code1 LAB_1000_633f 1000:632d FUN_1000_62dc DATA 1 true Stack[0x4] - 1000:633a FUN_1000_62dc UNCONDITIONAL_CALL 0 true 1228:0250 EXTERNAL INVALIDATERECT INVALIDATERECT 1000:633f FUN_1000_62dc DATA 1 true Stack[-0xa] - 1000:6342 FUN_1000_62dc DATA 1 true Stack[0x8] - 1000:634f FUN_1000_62dc DATA 1 true Stack[-0xa] - 1000:6352 FUN_1000_62dc DATA 0 true Stack[-0x4] - 1000:6355 FUN_1000_62dc DATA 1 true Stack[-0x4] - 1000:635f FUN_1000_635c DATA 0 true Stack[0xe] - 1000:6362 FUN_1000_635c DATA 0 true Stack[0xc] - 1000:6365 FUN_1000_635c DATA 0 true Stack[0xa] - 1000:6368 FUN_1000_635c DATA 0 true Stack[0x8] - 1000:636b FUN_1000_635c DATA 0 true Stack[0x6] - 1000:636e FUN_1000_635c DATA 0 true Stack[0x4] - 1000:6371 FUN_1000_635c UNCONDITIONAL_CALL 0 true 1008:07b6 Code2 FUN_1008_07b6 FUN_1008_07b6 1000:6376 FUN_1000_635c DATA 0 true Stack[0xe] - 1000:6379 FUN_1000_635c DATA 0 true Stack[0xc] - 1000:637c FUN_1000_635c DATA 0 true Stack[0xa] - 1000:637f FUN_1000_635c DATA 0 true Stack[0x8] - 1000:6382 FUN_1000_635c DATA 0 true Stack[0x6] - 1000:6385 FUN_1000_635c UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:6392 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:639d FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:63a2 Code1 LAB_1000_63a2 1000:639f FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:63aa FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:63af Code1 LAB_1000_63af 1000:63ac FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:63af FUN_1000_638e DATA 1 true Stack[0x8] - 1000:63b9 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:63bc FUN_1000_638e READ 0 true 1028:07cf Data6 DAT_1028_07cf 1000:63c1 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:63d6 Code1 LAB_1000_63d6 1000:63c3 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:63c7 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:63d6 Code1 LAB_1000_63d6 1000:63cb FUN_1000_638e WRITE 0 true 1028:0855 Data6 DAT_1028_0855 1000:63ce FUN_1000_638e WRITE 0 true 1028:0857 Data6 DAT_1028_0857 1000:63d1 FUN_1000_638e WRITE 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:63d6 FUN_1000_638e READ 0 true 1028:07cf Data6 DAT_1028_07cf 1000:63db FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:641a Code1 LAB_1000_641a 1000:63dd FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:63e1 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:641a Code1 LAB_1000_641a 1000:63e3 FUN_1000_638e READ 1 true 1028:3340 Data6 DAT_1028_3340 1000:63e6 FUN_1000_638e READ 1 true 1028:3342 Data6 DAT_1028_3342 1000:63ea FUN_1000_638e WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:63ed FUN_1000_638e WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:63f1 FUN_1000_638e READ 1 true 1028:3344 Data6 DAT_1028_3344 1000:63f4 FUN_1000_638e READ 1 true 1028:3346 Data6 DAT_1028_3346 1000:63f8 FUN_1000_638e WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:63fb FUN_1000_638e WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:63ff FUN_1000_638e DATA 1 true Stack[0x4] - 1000:641a FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6423 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6428 Code1 LAB_1000_6428 1000:6425 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:65aa Code1 LAB_1000_65aa 1000:642e FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6433 Code1 LAB_1000_6433 1000:6430 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:65aa Code1 LAB_1000_65aa 1000:6433 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:6437 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:643c Code1 LAB_1000_643c 1000:6439 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:65aa Code1 LAB_1000_65aa 1000:643c FUN_1000_638e READ 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:6441 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6446 Code1 LAB_1000_6446 1000:6443 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:65aa Code1 LAB_1000_65aa 1000:6453 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6458 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:645d FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:6466 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6495 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:64a0 Code1 LAB_1000_64a0 1000:6497 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:64db Code1 LAB_1000_64db 1000:649e FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:64db Code1 LAB_1000_64db 1000:64a0 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:64a7 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:64b9 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:64d9 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:654c Code1 LAB_1000_654c 1000:64db FUN_1000_638e DATA 1 true Stack[0x4] - 1000:64e6 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:64f4 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:64f9 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:6505 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:650d FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6518 Code1 LAB_1000_6518 1000:650f FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:654c Code1 LAB_1000_654c 1000:6516 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:654c Code1 LAB_1000_654c 1000:6518 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:651f FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:6531 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:654c FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6559 FUN_1000_638e WRITE 0 true 1028:07fb Data6 DAT_1028_07fb 1000:655c FUN_1000_638e WRITE 0 true 1028:07fd Data6 DAT_1028_07fd 1000:656e FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:6573 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:657a FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:657f FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6582 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:658f FUN_1000_638e READ 0 true 1028:0865 Data6 DAT_1028_0865 1000:6593 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1000:635c Code1 FUN_1000_635c FUN_1000_635c 1000:6598 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:659f FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:65a2 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:65a7 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:65aa FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65ae FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65bc Code1 LAB_1000_65bc 1000:65b0 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:65b9 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:65bc FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65c0 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65ce Code1 LAB_1000_65ce 1000:65c2 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:65cb FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:65ce FUN_1000_638e READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:65d3 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65d8 Code1 LAB_1000_65d8 1000:65d5 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:68f0 Code1 LAB_1000_68f0 1000:65d8 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65dc FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65ed Code1 LAB_1000_65ed 1000:65de FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65e2 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65ed Code1 LAB_1000_65ed 1000:65e4 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65e8 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:65ed Code1 LAB_1000_65ed 1000:65ea FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:68f0 Code1 LAB_1000_68f0 1000:65ef FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:65f4 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:65f8 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:663c Code1 LAB_1000_663c 1000:65fc FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:660a FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6615 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:661e FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6639 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:671a Code1 LAB_1000_671a 1000:663c FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:6640 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:667c Code1 LAB_1000_667c 1000:6644 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:6652 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:665d FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6662 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6679 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:671a Code1 LAB_1000_671a 1000:667c FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:6680 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6685 Code1 LAB_1000_6685 1000:6682 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:671a Code1 LAB_1000_671a 1000:6685 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6690 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:6698 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14c1 Code5 FUN_1020_14c1 FUN_1020_14c1 1000:66a5 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:66b2 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:66ba FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:66bf FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:66c4 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:66dd FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:66eb FUN_1000_638e DATA 1 true Stack[0x4] - 1000:66f6 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:66ff FUN_1000_638e DATA 1 true Stack[0x4] - 1000:671a FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6722 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6727 Code1 LAB_1000_6727 1000:6724 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6872 Code1 LAB_1000_6872 1000:6727 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:672b FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6783 Code1 LAB_1000_6783 1000:673a FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6743 FUN_1000_638e READ 1 true 1028:07f3 Data6 DAT_1028_07f3 1000:6746 FUN_1000_638e READ 1 true 1028:07f5 Data6 DAT_1028_07f5 1000:674e FUN_1000_638e WRITE 0 true 1028:07f3 Data6 DAT_1028_07f3 1000:6751 FUN_1000_638e WRITE 0 true 1028:07f5 Data6 DAT_1028_07f5 1000:6755 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6765 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:676e FUN_1000_638e READ 1 true 1028:07f7 Data6 DAT_1028_07f7 1000:6771 FUN_1000_638e READ 1 true 1028:07f9 Data6 DAT_1028_07f9 1000:6779 FUN_1000_638e WRITE 0 true 1028:07f7 Data6 DAT_1028_07f7 1000:677c FUN_1000_638e WRITE 0 true 1028:07f9 Data6 DAT_1028_07f9 1000:6780 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6872 Code1 LAB_1000_6872 1000:6783 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:6787 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:67d4 Code1 LAB_1000_67d4 1000:6789 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6799 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:679e FUN_1000_638e READ 1 true 1028:07f3 Data6 DAT_1028_07f3 1000:67a2 FUN_1000_638e READ 1 true 1028:07f5 Data6 DAT_1028_07f5 1000:67a6 FUN_1000_638e WRITE 0 true 1028:07f3 Data6 DAT_1028_07f3 1000:67a9 FUN_1000_638e WRITE 0 true 1028:07f5 Data6 DAT_1028_07f5 1000:67ad FUN_1000_638e DATA 1 true Stack[0x4] - 1000:67bd FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:67c2 FUN_1000_638e READ 1 true 1028:07f7 Data6 DAT_1028_07f7 1000:67c6 FUN_1000_638e READ 1 true 1028:07f9 Data6 DAT_1028_07f9 1000:67ca FUN_1000_638e WRITE 0 true 1028:07f7 Data6 DAT_1028_07f7 1000:67cd FUN_1000_638e WRITE 0 true 1028:07f9 Data6 DAT_1028_07f9 1000:67d1 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6872 Code1 LAB_1000_6872 1000:67d4 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:67d8 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:67dd Code1 LAB_1000_67dd 1000:67da FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6872 Code1 LAB_1000_6872 1000:67df FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:67e9 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:67f4 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:67f9 FUN_1000_638e DATA 0 true Stack[-0xe] - 1000:67fe FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:6808 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6813 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:681e FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6823 FUN_1000_638e DATA 0 true Stack[-0x10] - 1000:6826 FUN_1000_638e DATA 1 true Stack[-0xe] - 1000:682a FUN_1000_638e READ 1 true 1028:07f3 Data6 DAT_1028_07f3 1000:682e FUN_1000_638e READ 1 true 1028:07f5 Data6 DAT_1028_07f5 1000:6832 FUN_1000_638e WRITE 0 true 1028:07f3 Data6 DAT_1028_07f3 1000:6835 FUN_1000_638e WRITE 0 true 1028:07f5 Data6 DAT_1028_07f5 1000:6839 FUN_1000_638e DATA 1 true Stack[-0xe] - 1000:683d FUN_1000_638e READ 1 true 1028:07f7 Data6 DAT_1028_07f7 1000:6841 FUN_1000_638e READ 1 true 1028:07f9 Data6 DAT_1028_07f9 1000:6845 FUN_1000_638e WRITE 0 true 1028:07f7 Data6 DAT_1028_07f7 1000:6848 FUN_1000_638e WRITE 0 true 1028:07f9 Data6 DAT_1028_07f9 1000:684c FUN_1000_638e DATA 1 true Stack[-0x10] - 1000:6850 FUN_1000_638e READ 1 true 1028:07fb Data6 DAT_1028_07fb 1000:6854 FUN_1000_638e READ 1 true 1028:07fd Data6 DAT_1028_07fd 1000:6858 FUN_1000_638e WRITE 0 true 1028:07fb Data6 DAT_1028_07fb 1000:685b FUN_1000_638e WRITE 0 true 1028:07fd Data6 DAT_1028_07fd 1000:685f FUN_1000_638e DATA 1 true Stack[-0x10] - 1000:6863 FUN_1000_638e READ 1 true 1028:07ff Data6 DAT_1028_07ff 1000:6867 FUN_1000_638e READ 1 true 1028:0801 Data6 DAT_1028_0801 1000:686b FUN_1000_638e WRITE 0 true 1028:07ff Data6 DAT_1028_07ff 1000:686e FUN_1000_638e WRITE 0 true 1028:0801 Data6 DAT_1028_0801 1000:6872 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6882 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:688a FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6891 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:68ed Code1 LAB_1000_68ed 1000:6895 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:689a FUN_1000_638e WRITE 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:689f FUN_1000_638e DATA 1 true Stack[0x4] - 1000:68b2 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:68b7 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:68ba FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:68c7 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:68cc FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:68d9 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:68de FUN_1000_638e DATA 1 true Stack[0x4] - 1000:68e5 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:68e8 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:68ed FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:68f0 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:68f4 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6913 Code1 LAB_1000_6913 1000:68f6 FUN_1000_638e READ 0 true 1028:43f2 Data6 DAT_1028_43f2 1000:68fb FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:690b Code1 LAB_1000_690b 1000:68fd FUN_1000_638e READ 0 true 1028:43ee Data6 DAT_1028_43ee 1000:6902 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6909 Code1 LAB_1000_6909 1000:6904 FUN_1000_638e WRITE 0 true 1028:43f2 Data6 DAT_1028_43f2 1000:6909 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6910 Code1 LAB_1000_6910 1000:690b FUN_1000_638e WRITE 0 true 1028:43f2 Data6 DAT_1028_43f2 1000:6910 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:6913 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:691c FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6921 Code1 LAB_1000_6921 1000:691e FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:6921 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:6925 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6930 Code1 LAB_1000_6930 1000:6927 FUN_1000_638e DATA 0 true Stack[-0x6] - 1000:692b FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6930 Code1 LAB_1000_6930 1000:692d FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:6930 FUN_1000_638e READ 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:6935 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:693a Code1 LAB_1000_693a 1000:6937 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6b1c Code1 LAB_1000_6b1c 1000:693a FUN_1000_638e WRITE 0 true 1028:07c9 Data6 DAT_1028_07c9 1000:6941 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:6946 FUN_1000_638e READ_WRITE 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:694a FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6959 FUN_1000_638e WRITE 0 true 1028:07c5 Data6 DAT_1028_07c5 1000:6963 FUN_1000_638e WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:6968 FUN_1000_638e DATA 0 true Stack[-0x9] - 1000:696c FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6971 Code1 LAB_1000_6971 1000:696e FUN_1000_638e DATA 0 true Stack[-0x9] - 1000:6971 FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:697a FUN_1000_638e WRITE 0 true 1028:0821 Data6 DAT_1028_0821 1000:697a FUN_1000_638e WRITE 0 false 1028:0823 Data6 DAT_1028_0823 1000:6980 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:6984 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6989 Code1 LAB_1000_6989 1000:6986 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:6989 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:698e FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6998 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:699f FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:69a8 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:69b3 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:69ba FUN_1000_638e DATA 1 true Stack[0x4] - 1000:69c4 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:69cd FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:69d6 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:69e2 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:69e6 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6986 Code1 LAB_1000_6986 1000:69e8 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:69ef FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:69f4 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:69f7 FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:69fa FUN_1000_638e READ 1 true 1028:07d0 Data6 DAT_1028_07d0 1000:69fe FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6a4e Code1 LAB_1000_6a4e 1000:6a00 FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:6a0c FUN_1000_638e WRITE 0 true 1028:0982 Data6 DAT_1028_0982 1000:6a10 FUN_1000_638e WRITE 0 true 1028:0984 Data6 DAT_1028_0984 1000:6a14 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a1a FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:6a2c FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:6a31 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a37 FUN_1000_638e DATA 1 true Stack[-0x9] - 1000:6a49 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:6a4e FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a53 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0dbd Code2 FUN_1008_0dbd FUN_1008_0dbd 1000:6a58 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6a5f FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a62 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:6a67 FUN_1000_638e DATA 0 true Stack[-0x9] - 1000:6a6b FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6ac7 Code1 LAB_1000_6ac7 1000:6a6d FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6a74 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:6a79 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a7c FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a8a FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:6a8f FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6a9d FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:6aa6 FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6aa9 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0996 Code2 FUN_1008_0996 FUN_1008_0996 1000:6aae FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6ab3 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1008:0b9e Code2 FUN_1008_0b9e FUN_1008_0b9e 1000:6ab8 FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6abf FUN_1000_638e DATA 0 true Stack[-0xc] - 1000:6ac2 FUN_1000_638e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:6ac7 FUN_1000_638e DATA 0 true Stack[-0x9] - 1000:6acb FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6ad0 Code1 LAB_1000_6ad0 1000:6acd FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:696e Code1 LAB_1000_696e 1000:6ad0 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:6ad4 FUN_1000_638e UNCONDITIONAL_JUMP 0 true 1000:6ad9 Code1 LAB_1000_6ad9 1000:6ad6 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:6ad9 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:6ade FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6ae8 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:6af0 FUN_1000_638e WRITE 0 true 1028:09e2 Data6 DAT_1028_09e2 1000:6af0 FUN_1000_638e WRITE 0 false 1028:0a35 Data6 DAT_1028_0a35 1000:6af4 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:6afb FUN_1000_638e DATA 1 true Stack[0x4] - 1000:6b05 FUN_1000_638e DATA 1 true Stack[-0xa] - 1000:6b0d FUN_1000_638e WRITE 0 true 1028:09f1 Data6 DAT_1028_09f1 1000:6b11 FUN_1000_638e DATA 0 true Stack[-0xa] - 1000:6b15 FUN_1000_638e CONDITIONAL_JUMP 0 true 1000:6ad6 Code1 LAB_1000_6ad6 1000:6b17 FUN_1000_638e WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:6b1c FUN_1000_638e DATA 1 true Stack[0x8] - 1000:6b2d FUN_1000_638e DATA 0 true Stack[-0x4] - 1000:6b30 FUN_1000_638e DATA 1 true Stack[-0x4] - 1000:6b3a FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6b41 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:6b46 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6b51 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:6b56 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6b61 FUN_1000_6b37 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:6b65 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6b6a FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6b75 FUN_1000_6b37 READ 0 true 1028:0865 Data6 DAT_1028_0865 1000:6b79 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6b7e FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6b97 FUN_1000_6b37 DATA 0 true Stack[0x6] - 1000:6ba1 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:6ba6 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6bb1 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6bb6 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6bbd FUN_1000_6b37 DATA 0 true Stack[-0x12] - 1000:6bc1 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6bc6 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6bcd FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:6bd2 FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6bd9 FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:6bde FUN_1000_6b37 DATA 1 true Stack[0x4] - 1000:6bef FUN_1000_6b37 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:6bfc FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6c0c FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6c11 FUN_1000_6bf8 DATA 0 true Stack[-0xc] - 1000:6c14 FUN_1000_6bf8 DATA 0 true Stack[-0xa] - 1000:6c17 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6c22 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6c27 Code1 LAB_1000_6c27 1000:6c24 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6f0c Code1 LAB_1000_6f0c 1000:6c2f FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6c34 Code1 LAB_1000_6c34 1000:6c31 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6f0c Code1 LAB_1000_6f0c 1000:6c34 FUN_1000_6bf8 DATA 1 true Stack[0x8] - 1000:6c3e FUN_1000_6bf8 DATA 0 true Stack[-0x8] - 1000:6c41 FUN_1000_6bf8 DATA 0 true Stack[-0x8] - 1000:6c45 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6c87 Code1 LAB_1000_6c87 1000:6c47 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6c59 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6073 Code1 FUN_1000_6073 FUN_1000_6073 1000:6c60 FUN_1000_6bf8 READ 1 true 1028:064e Data6 DAT_1028_064e 1000:6c6c FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6c7f FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1018:0e9e Code4 FUN_1018_0e9e FUN_1018_0e9e 1000:6c84 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6f20 Code1 LAB_1000_6f20 1000:6c87 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6c90 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6c95 Code1 LAB_1000_6c95 1000:6c92 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ee7 Code1 LAB_1000_6ee7 1000:6c9b FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6ca0 Code1 LAB_1000_6ca0 1000:6c9d FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ee7 Code1 LAB_1000_6ee7 1000:6ca0 FUN_1000_6bf8 DATA 0 true Stack[-0x8] - 1000:6ca4 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6ca9 Code1 LAB_1000_6ca9 1000:6ca6 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ee7 Code1 LAB_1000_6ee7 1000:6ca9 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6cac FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6cb4 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:6cbd FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6ce4 FUN_1000_6bf8 READ 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:6ce9 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6cee Code1 LAB_1000_6cee 1000:6ceb FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ee5 Code1 LAB_1000_6ee5 1000:6cf2 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:6cf7 FUN_1000_6bf8 DATA 0 true Stack[-0xe] - 1000:6cfa FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6cfd FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6d07 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6d0f FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d1a Code1 LAB_1000_6d1a 1000:6d11 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d25 Code1 LAB_1000_6d25 1000:6d18 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d25 Code1 LAB_1000_6d25 1000:6d1d FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6d22 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6d25 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6d28 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6d31 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6d36 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6d3e FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d49 Code1 LAB_1000_6d49 1000:6d40 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d54 Code1 LAB_1000_6d54 1000:6d47 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d54 Code1 LAB_1000_6d54 1000:6d4c FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6d51 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6d54 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6d57 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6d60 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6d65 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6d6d FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d78 Code1 LAB_1000_6d78 1000:6d6f FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d83 Code1 LAB_1000_6d83 1000:6d76 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6d83 Code1 LAB_1000_6d83 1000:6d7b FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6d80 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6d83 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6d86 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6d8f FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6d94 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6d9c FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6da7 Code1 LAB_1000_6da7 1000:6d9e FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6db2 Code1 LAB_1000_6db2 1000:6da5 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6db2 Code1 LAB_1000_6db2 1000:6daa FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6daf FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6db2 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6db5 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6dbe FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6dc3 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6dcb FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6dd6 Code1 LAB_1000_6dd6 1000:6dcd FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6de1 Code1 LAB_1000_6de1 1000:6dd4 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6de1 Code1 LAB_1000_6de1 1000:6dd9 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6dde FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6de1 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6de4 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6ded FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6df2 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6dfa FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e05 Code1 LAB_1000_6e05 1000:6dfc FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e10 Code1 LAB_1000_6e10 1000:6e03 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e10 Code1 LAB_1000_6e10 1000:6e08 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6e0d FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6e10 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6e13 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6e1c FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6e21 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6e29 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e34 Code1 LAB_1000_6e34 1000:6e2b FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e40 Code1 LAB_1000_6e40 1000:6e32 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e40 Code1 LAB_1000_6e40 1000:6e38 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6e3d FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6e40 FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6e43 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6e4c FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6e51 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6e59 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e64 Code1 LAB_1000_6e64 1000:6e5b FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e6f Code1 LAB_1000_6e6f 1000:6e62 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e6f Code1 LAB_1000_6e6f 1000:6e68 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6e6d FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6e6f FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6e72 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6e7b FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6e80 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6e88 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e93 Code1 LAB_1000_6e93 1000:6e8a FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e9e Code1 LAB_1000_6e9e 1000:6e91 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6e9e Code1 LAB_1000_6e9e 1000:6e97 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6e9c FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6e9e FUN_1000_6bf8 DATA 1 true Stack[-0xc] - 1000:6ea1 FUN_1000_6bf8 DATA 1 true Stack[-0xa] - 1000:6eaa FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6eaf FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6eb7 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6ec2 Code1 LAB_1000_6ec2 1000:6eb9 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6ecd Code1 LAB_1000_6ecd 1000:6ec0 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6ecd Code1 LAB_1000_6ecd 1000:6ec6 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6ecb FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6ed6 Code1 LAB_1000_6ed6 1000:6ed1 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1000:6b37 Code1 FUN_1000_6b37 FUN_1000_6b37 1000:6ed6 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6edd FUN_1000_6bf8 DATA 0 true Stack[-0xe] - 1000:6ee0 FUN_1000_6bf8 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:6ee5 FUN_1000_6bf8 UNCONDITIONAL_JUMP 0 true 1000:6f0c Code1 LAB_1000_6f0c 1000:6ee7 FUN_1000_6bf8 READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:6eec FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6f0c Code1 LAB_1000_6f0c 1000:6eee FUN_1000_6bf8 DATA 0 true Stack[-0x8] - 1000:6ef2 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6efd Code1 LAB_1000_6efd 1000:6ef4 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6efd FUN_1000_6bf8 DATA 0 true Stack[-0x8] - 1000:6f01 FUN_1000_6bf8 CONDITIONAL_JUMP 0 true 1000:6f0c Code1 LAB_1000_6f0c 1000:6f03 FUN_1000_6bf8 DATA 1 true Stack[0x4] - 1000:6f0c FUN_1000_6bf8 DATA 1 true Stack[0x8] - 1000:6f1d FUN_1000_6bf8 DATA 0 true Stack[-0x4] - 1000:6f20 FUN_1000_6bf8 DATA 1 true Stack[-0x4] - 1000:6f2b FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:6f36 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:6f3b FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:6f3e FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:6f41 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:6f46 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6f49 FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:6f4c FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:6f51 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:6f54 FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:6f5b FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:6f60 FUN_1000_6f27 DATA 0 true Stack[-0xe] - 1000:6f63 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6f66 FUN_1000_6f27 READ 0 true 1028:0859 Data6 DAT_1028_0859 1000:6f6a FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6f6f FUN_1000_6f27 DATA 0 true Stack[-0xa] - 1000:6f72 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:6f75 FUN_1000_6f27 DATA 0 true Stack[-0xe] - 1000:6f78 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6f7d FUN_1000_6f27 DATA 0 true Stack[-0xc] - 1000:6f80 FUN_1000_6f27 READ 0 true 1028:0857 Data6 DAT_1028_0857 1000:6f85 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:6f90 Code1 LAB_1000_6f90 1000:6f87 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:6fc5 Code1 LAB_1000_6fc5 1000:6f89 FUN_1000_6f27 READ 0 true 1028:0855 Data6 DAT_1028_0855 1000:6f8e FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:6fc5 Code1 LAB_1000_6fc5 1000:6f90 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:6f9b FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6f9e FUN_1000_6f27 READ 1 true 1028:0855 Data6 DAT_1028_0855 1000:6fa1 FUN_1000_6f27 READ 1 true 1028:0857 Data6 DAT_1028_0857 1000:6fb0 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:6fbd FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:6fc2 FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:711b Code1 LAB_1000_711b 1000:6fc5 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6fc8 FUN_1000_6f27 READ 0 true 1028:085d Data6 DAT_1028_085d 1000:6fcc FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6fd1 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:6fdc FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6fe8 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:6fed FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:6ff0 FUN_1000_6f27 READ 0 true 1028:0859 Data6 DAT_1028_0859 1000:6ff4 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:6ff9 FUN_1000_6f27 READ 1 true 1028:3371 Data6 DAT_1028_3371 1000:6ffc FUN_1000_6f27 DATA 0 true Stack[-0x10] - 1000:6fff FUN_1000_6f27 READ 1 true 1028:33c4 Data6 DAT_1028_33c4 1000:7002 FUN_1000_6f27 WRITE 0 true 1028:3371 Data6 DAT_1028_3371 1000:7005 FUN_1000_6f27 READ 1 true 1028:3417 Data6 DAT_1028_3417 1000:7008 FUN_1000_6f27 WRITE 0 true 1028:33c4 Data6 DAT_1028_33c4 1000:700b FUN_1000_6f27 READ 1 true 1028:346a Data6 DAT_1028_346a 1000:700e FUN_1000_6f27 WRITE 0 true 1028:3417 Data6 DAT_1028_3417 1000:7011 FUN_1000_6f27 READ 1 true 1028:34bd Data6 DAT_1028_34bd 1000:7014 FUN_1000_6f27 WRITE 0 true 1028:346a Data6 DAT_1028_346a 1000:7017 FUN_1000_6f27 DATA 1 true Stack[-0x10] - 1000:701a FUN_1000_6f27 WRITE 0 true 1028:34bd Data6 DAT_1028_34bd 1000:701d FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:7025 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:7033 FUN_1000_6f27 DATA 0 true Stack[-0x25] - 1000:7036 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:703e FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:704c FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:7054 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:7062 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:706a FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:7078 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:7080 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:708e FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:7096 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:70a4 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:70ac FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:70ba FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:70c2 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:70d0 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:70d8 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:70e6 FUN_1000_6f27 DATA 1 true Stack[-0x25] - 1000:70e9 FUN_1000_6f27 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:70f1 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:70ff FUN_1000_6f27 DATA 0 true Stack[-0x10] - 1000:7104 FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:7109 Code1 LAB_1000_7109 1000:7106 FUN_1000_6f27 DATA 0 true Stack[-0x10] - 1000:7109 FUN_1000_6f27 DATA 0 true Stack[-0x10] - 1000:710c FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:7110 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1000:7e92 Code1 FUN_1000_7e92 FUN_1000_7e92 1000:7115 FUN_1000_6f27 DATA 0 true Stack[-0x10] - 1000:7119 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:7106 Code1 LAB_1000_7106 1000:711b FUN_1000_6f27 READ 1 true 1028:0855 Data6 DAT_1028_0855 1000:7121 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:715f Code1 LAB_1000_715f 1000:7125 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:712a FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:712f FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:7134 FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:7139 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:713e FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:7143 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:7148 FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:714d FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7152 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:7157 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:715c FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:7162 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:7199 Code1 LAB_1000_7199 1000:7164 FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:7169 FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:716e FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:7173 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:7178 FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:717d FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:7182 FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:7187 FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:718c FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:7191 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:7196 FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:719c FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:71d3 Code1 LAB_1000_71d3 1000:719e FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:71a3 FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:71a8 FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:71ad FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:71b2 FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:71b7 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:71bc FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:71c1 FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:71c6 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:71cb FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:71d0 FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:71d6 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:720c Code1 LAB_1000_720c 1000:71d8 FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:71dd FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:71e2 FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:71e7 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:71ec FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:71f1 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:71f6 FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:71fb FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7200 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:7205 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:720a FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:720f FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:7245 Code1 LAB_1000_7245 1000:7211 FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:7216 FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:721b FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:7220 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:7225 FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:722a FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:722f FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:7234 FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7239 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:723e FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:7243 FUN_1000_6f27 UNCONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:7248 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:727c Code1 LAB_1000_727c 1000:724a FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:724f FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:7254 FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:7259 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:725e FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:7263 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:7268 FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:726d FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7272 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:7277 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:727c FUN_1000_6f27 READ 0 true 1028:3371 Data6 DAT_1028_3371 1000:7281 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:72c3 Code1 LAB_1000_72c3 1000:7283 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:7286 FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:7289 FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:7290 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:729e FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:72a3 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:72a6 FUN_1000_6f27 DATA 0 true Stack[-0x12] - 1000:72a9 FUN_1000_6f27 DATA 0 true Stack[-0x1c] - 1000:72b0 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:72be FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:72c3 FUN_1000_6f27 READ 0 true 1028:33c4 Data6 DAT_1028_33c4 1000:72c8 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:730a Code1 LAB_1000_730a 1000:72ca FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:72cd FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:72d0 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:72d7 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:72e5 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:72ea FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:72ed FUN_1000_6f27 DATA 0 true Stack[-0x14] - 1000:72f0 FUN_1000_6f27 DATA 0 true Stack[-0x1e] - 1000:72f7 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:7305 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:730a FUN_1000_6f27 READ 0 true 1028:3417 Data6 DAT_1028_3417 1000:730f FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:7351 Code1 LAB_1000_7351 1000:7311 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:7314 FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:7317 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:731e FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:732c FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7331 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:7334 FUN_1000_6f27 DATA 0 true Stack[-0x16] - 1000:7337 FUN_1000_6f27 DATA 0 true Stack[-0x20] - 1000:733e FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:734c FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7351 FUN_1000_6f27 READ 0 true 1028:346a Data6 DAT_1028_346a 1000:7356 FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:7398 Code1 LAB_1000_7398 1000:7358 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:735b FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:735e FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7365 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:7373 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7378 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:737b FUN_1000_6f27 DATA 0 true Stack[-0x18] - 1000:737e FUN_1000_6f27 DATA 0 true Stack[-0x22] - 1000:7385 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:7393 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7398 FUN_1000_6f27 READ 0 true 1028:34bd Data6 DAT_1028_34bd 1000:739d FUN_1000_6f27 CONDITIONAL_JUMP 0 true 1000:73df Code1 LAB_1000_73df 1000:739f FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:73a2 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:73a5 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:73ac FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:73ba FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:73bf FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:73c2 FUN_1000_6f27 DATA 0 true Stack[-0x1a] - 1000:73c5 FUN_1000_6f27 DATA 0 true Stack[-0x24] - 1000:73cc FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:73da FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:73df FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:73ea FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:73f6 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:73fb FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:73fe FUN_1000_6f27 DATA 0 true Stack[-0xa] - 1000:7401 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7406 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:7409 FUN_1000_6f27 DATA 0 true Stack[-0xc] - 1000:740c FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7411 FUN_1000_6f27 DATA 0 true Stack[-0xe] - 1000:7414 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:7419 FUN_1000_6f27 DATA 0 true Stack[-0x6] - 1000:741c FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:7421 FUN_1000_6f27 DATA 0 true Stack[-0x8] - 1000:7424 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:7429 FUN_1000_6f27 DATA 1 true Stack[0x4] - 1000:7434 FUN_1000_6f27 DATA 0 true Stack[-0x4] - 1000:7437 FUN_1000_6f27 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:7444 FUN_1000_7440 DATA 1 true Stack[0x4] - 1000:744f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:7454 FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:7457 FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:745a FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:745f FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7462 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7465 FUN_1000_7440 READ 0 true 1028:085f Data6 DAT_1028_085f 1000:7469 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:746e FUN_1000_7440 DATA 0 true Stack[-0xa] - 1000:7471 FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:7474 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:7479 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:747c FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:7483 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:7488 FUN_1000_7440 DATA 0 true Stack[-0xe] - 1000:748b FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:748e FUN_1000_7440 DATA 0 true Stack[-0xe] - 1000:7491 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7496 FUN_1000_7440 DATA 0 true Stack[-0xc] - 1000:7499 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:74a4 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:74b0 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:74b5 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:74b8 FUN_1000_7440 READ 0 true 1028:0859 Data6 DAT_1028_0859 1000:74bc FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:74c1 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:74c7 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:74cc Code1 LAB_1000_74cc 1000:74c9 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:75b2 Code1 LAB_1000_75b2 1000:74cf FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:74d4 Code1 LAB_1000_74d4 1000:74d1 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:75b2 Code1 LAB_1000_75b2 1000:74d4 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:74d9 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:751d Code1 LAB_1000_751d 1000:74db FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:74e0 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:751d Code1 LAB_1000_751d 1000:74e4 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:74e9 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:74ec FUN_1000_7440 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:74f0 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:74f5 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7500 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:750d FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7512 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7515 FUN_1000_7440 DATA 0 true Stack[-0xe] - 1000:7518 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:751d FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7526 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7529 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7532 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7538 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7542 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7546 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:754f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7561 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7566 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:756f FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7572 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:757b FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7581 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:758b FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:758f FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7598 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:75aa FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:75af FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:75b5 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:760c Code1 LAB_1000_760c 1000:75ba FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:760c Code1 LAB_1000_760c 1000:75bc FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:75c1 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:75cf Code1 LAB_1000_75cf 1000:75c3 FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:75c8 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:75cf Code1 LAB_1000_75cf 1000:75ca FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:118f Code2 FUN_1008_118f FUN_1008_118f 1000:75cf FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:75da FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:75e7 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:75ec FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:75f7 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7604 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7609 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:760f FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7669 Code1 LAB_1000_7669 1000:7614 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7669 Code1 LAB_1000_7669 1000:7616 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:761b FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:762b Code1 LAB_1000_762b 1000:761d FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7622 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:762b Code1 LAB_1000_762b 1000:7626 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:762b FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7636 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7644 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7649 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7654 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7661 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7666 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:766c FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7671 Code1 LAB_1000_7671 1000:766e FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:787e Code1 LAB_1000_787e 1000:7674 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7679 Code1 LAB_1000_7679 1000:7676 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:787e Code1 LAB_1000_787e 1000:7679 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:767e FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:768e Code1 LAB_1000_768e 1000:7680 FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7685 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:768e Code1 LAB_1000_768e 1000:7689 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:768e FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7699 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:76a6 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:76ab FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:76b0 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:76bb Code1 LAB_1000_76bb 1000:76b2 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7726 Code1 LAB_1000_7726 1000:76b4 FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:76b9 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7726 Code1 LAB_1000_7726 1000:76bb FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:76c5 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:76c9 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:76d2 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:76dc FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:76ea FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:76ef FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:76f9 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:76fd FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7706 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7710 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:771e FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7723 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:77c6 Code1 LAB_1000_77c6 1000:7726 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7734 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7738 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7741 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7747 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:774d FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7750 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:775f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7771 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7776 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7784 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7788 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7791 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7797 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:779d FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:77a0 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:77af FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:77c1 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:77c6 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:77cb FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:77dc Code1 LAB_1000_77dc 1000:77cd FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:77d2 Code1 LAB_1000_77d2 1000:77cf FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:787b Code1 LAB_1000_787b 1000:77d2 FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:77d7 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:77dc Code1 LAB_1000_77dc 1000:77d9 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:787b Code1 LAB_1000_787b 1000:77dc FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:77ea FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:77ee FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:77f7 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:77fd FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7803 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7806 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7815 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7827 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:782c FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:783a FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:783e FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7847 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:784d FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7852 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7855 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7864 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7876 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:787b FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7881 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78bc Code1 LAB_1000_78bc 1000:7886 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78bc Code1 LAB_1000_78bc 1000:7888 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:788d FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:789c Code1 LAB_1000_789c 1000:788f FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7895 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:789c Code1 LAB_1000_789c 1000:7897 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:118f Code2 FUN_1008_118f FUN_1008_118f 1000:789c FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:78a7 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:78b4 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:78b9 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:78bf FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78c4 Code1 LAB_1000_78c4 1000:78c1 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7b26 Code1 LAB_1000_7b26 1000:78c7 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78cc Code1 LAB_1000_78cc 1000:78c9 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7b26 Code1 LAB_1000_7b26 1000:78cc FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:78d1 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78e2 Code1 LAB_1000_78e2 1000:78d3 FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:78d9 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:78e2 Code1 LAB_1000_78e2 1000:78dd FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:78e2 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:78ed FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:78fa FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:78ff FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7904 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7916 Code1 LAB_1000_7916 1000:7906 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:790b Code1 LAB_1000_790b 1000:7908 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:79b8 Code1 LAB_1000_79b8 1000:790b FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7911 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7916 Code1 LAB_1000_7916 1000:7913 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:79b8 Code1 LAB_1000_79b8 1000:7916 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:791f FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7922 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7931 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7937 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7942 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7946 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:794f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7961 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7966 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:796f FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7972 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7981 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7987 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7992 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7996 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:799f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:79b1 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:79b6 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7a20 Code1 LAB_1000_7a20 1000:79b8 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:79bd FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:79c0 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:79cf FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:79d9 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:79e7 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:79ec FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:79f1 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:79f4 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7a03 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7a0d FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7a1b FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7a20 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7a25 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7a37 Code1 LAB_1000_7a37 1000:7a27 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7a2c Code1 LAB_1000_7a2c 1000:7a29 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7b23 Code1 LAB_1000_7b23 1000:7a2c FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7a32 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7a37 Code1 LAB_1000_7a37 1000:7a34 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7b23 Code1 LAB_1000_7b23 1000:7a37 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7a3c FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7a84 Code1 LAB_1000_7a84 1000:7a3e FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7a44 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7a84 Code1 LAB_1000_7a84 1000:7a46 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7a51 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7a5f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7a64 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7a6f FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7a7c FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7a81 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7b23 Code1 LAB_1000_7b23 1000:7a84 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7a8d FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7a90 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7a9f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7aa5 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7ab0 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7ab4 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7abd FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7acf FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7ad4 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7add FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7ae0 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7aef FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7af5 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7aff FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7b03 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7b0c FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7b1e FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7b23 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7b29 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7b2e Code1 LAB_1000_7b2e 1000:7b2b FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7bc4 Code1 LAB_1000_7bc4 1000:7b31 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7b36 Code1 LAB_1000_7b36 1000:7b33 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7bc4 Code1 LAB_1000_7bc4 1000:7b36 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7b3b FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7b4a Code1 LAB_1000_7b4a 1000:7b3d FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7b43 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7b4a Code1 LAB_1000_7b4a 1000:7b45 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:118f Code2 FUN_1008_118f FUN_1008_118f 1000:7b4a FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7b55 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7b63 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7b68 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7b73 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7b81 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7b86 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7b91 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7b9f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7ba4 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7baf FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7bbc FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7bc1 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7bc7 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7bcc Code1 LAB_1000_7bcc 1000:7bc9 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7c63 Code1 LAB_1000_7c63 1000:7bcf FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7bd4 Code1 LAB_1000_7bd4 1000:7bd1 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7c63 Code1 LAB_1000_7c63 1000:7bd4 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7bd9 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7bea Code1 LAB_1000_7bea 1000:7bdb FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7be1 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7bea Code1 LAB_1000_7bea 1000:7be5 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:7bea FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7bf5 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7c03 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7c08 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7c13 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7c21 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7c26 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7c31 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7c3e FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7c43 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7c4e FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7c5b FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7c60 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7c66 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7c6b Code1 LAB_1000_7c6b 1000:7c68 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7c6e FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7c73 Code1 LAB_1000_7c73 1000:7c70 FUN_1000_7440 UNCONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7c73 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7c78 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7c89 Code1 LAB_1000_7c89 1000:7c7a FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7c80 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7c89 Code1 LAB_1000_7c89 1000:7c84 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:7c89 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7c94 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7ca2 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7ca7 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7cb2 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7cc0 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7cc5 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7cd3 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7cd7 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7ce0 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7ce6 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7ceb FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7cee FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7cfd FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7d0f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7d14 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7d22 FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7d26 FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7d2f FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7d35 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7d3a FUN_1000_7440 READ 1 true 1028:0851 Data6 DAT_1028_0851 1000:7d3d FUN_1000_7440 READ 1 true 1028:0853 Data6 DAT_1028_0853 1000:7d4c FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:7d5e FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7d63 FUN_1000_7440 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:7d68 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7d6a FUN_1000_7440 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:7d70 FUN_1000_7440 CONDITIONAL_JUMP 0 true 1000:7db1 Code1 LAB_1000_7db1 1000:7d72 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7d75 FUN_1000_7440 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:7d79 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7d7e FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7d81 FUN_1000_7440 READ 0 true 1028:085d Data6 DAT_1028_085d 1000:7d85 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7d8a FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7d95 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7da1 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7da6 FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7da9 FUN_1000_7440 DATA 0 true Stack[-0xe] - 1000:7dac FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7db1 FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:7dbc FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7dc8 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:7dcd FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7dd0 FUN_1000_7440 DATA 0 true Stack[-0xc] - 1000:7dd3 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7dd8 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7ddb FUN_1000_7440 DATA 0 true Stack[-0xa] - 1000:7dde FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:7de3 FUN_1000_7440 DATA 0 true Stack[-0xe] - 1000:7de6 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:7deb FUN_1000_7440 DATA 0 true Stack[-0x6] - 1000:7dee FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:7df3 FUN_1000_7440 DATA 0 true Stack[-0x8] - 1000:7df6 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:7dfb FUN_1000_7440 DATA 1 true Stack[0x4] - 1000:7e06 FUN_1000_7440 DATA 0 true Stack[-0x4] - 1000:7e09 FUN_1000_7440 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:7e15 FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e19 FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e8e Code1 LAB_1000_7e8e 1000:7e1b FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e20 FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e8e Code1 LAB_1000_7e8e 1000:7e22 FUN_1000_7e12 DATA 1 true Stack[0x6] - 1000:7e30 FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e59 Code1 LAB_1000_7e59 1000:7e32 FUN_1000_7e12 DATA 1 true Stack[0x6] - 1000:7e3b FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e4b Code1 LAB_1000_7e4b 1000:7e3d FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e40 FUN_1000_7e12 DATA 1 true Stack[0x4] - 1000:7e44 FUN_1000_7e12 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:7e49 FUN_1000_7e12 UNCONDITIONAL_JUMP 0 true 1000:7e57 Code1 LAB_1000_7e57 1000:7e4b FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e4e FUN_1000_7e12 DATA 1 true Stack[0x4] - 1000:7e52 FUN_1000_7e12 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:7e57 FUN_1000_7e12 UNCONDITIONAL_JUMP 0 true 1000:7e8e Code1 LAB_1000_7e8e 1000:7e59 FUN_1000_7e12 DATA 1 true Stack[0x6] - 1000:7e67 FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e8e Code1 LAB_1000_7e8e 1000:7e69 FUN_1000_7e12 DATA 1 true Stack[0x6] - 1000:7e72 FUN_1000_7e12 CONDITIONAL_JUMP 0 true 1000:7e82 Code1 LAB_1000_7e82 1000:7e74 FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e77 FUN_1000_7e12 DATA 1 true Stack[0x4] - 1000:7e7b FUN_1000_7e12 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:7e80 FUN_1000_7e12 UNCONDITIONAL_JUMP 0 true 1000:7e8e Code1 LAB_1000_7e8e 1000:7e82 FUN_1000_7e12 DATA 0 true Stack[0x6] - 1000:7e85 FUN_1000_7e12 DATA 1 true Stack[0x4] - 1000:7e89 FUN_1000_7e12 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:7e95 FUN_1000_7e92 DATA 1 true Stack[0x6] - 1000:7e98 FUN_1000_7e92 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:7ea0 FUN_1000_7e92 DATA 1 true Stack[0x4] - 1000:7eb1 FUN_1000_7e92 CONDITIONAL_JUMP 0 true 1000:7ec5 Code1 LAB_1000_7ec5 1000:7eb3 FUN_1000_7e92 DATA 1 true Stack[0x6] - 1000:7eba FUN_1000_7e92 DATA 1 true Stack[0x4] - 1000:7ebe FUN_1000_7e92 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:7ec3 FUN_1000_7e92 UNCONDITIONAL_JUMP 0 true 1000:7ed5 Code1 LAB_1000_7ed5 1000:7ec5 FUN_1000_7e92 DATA 1 true Stack[0x6] - 1000:7ecc FUN_1000_7e92 DATA 1 true Stack[0x4] - 1000:7ed0 FUN_1000_7e92 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:7edf FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:7ee4 FUN_1000_7ed9 DATA 1 true Stack[0xa] - 1000:7eea FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:7eef Code1 LAB_1000_7eef 1000:7eec FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:7fea Code1 LAB_1000_7fea 1000:7eef FUN_1000_7ed9 DATA 0 true Stack[-0x70] - 1000:7ef4 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7ef8 FUN_1000_7ed9 READ 1 true 1028:1e90 Data6 DAT_1028_1e90 1000:7efc FUN_1000_7ed9 READ 1 true 1028:1e92 Data6 DAT_1028_1e92 1000:7f00 FUN_1000_7ed9 READ 1 true 1028:1e94 Data6 DAT_1028_1e94 1000:7f04 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:7f09 FUN_1000_7ed9 DATA 0 true Stack[-0x7a] - 1000:7f0c FUN_1000_7ed9 DATA 0 true Stack[-0x78] - 1000:7f0f FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f13 FUN_1000_7ed9 READ 1 true 1028:1e80 Data6 DAT_1028_1e80 1000:7f17 FUN_1000_7ed9 READ 1 true 1028:1e82 Data6 DAT_1028_1e82 1000:7f21 FUN_1000_7ed9 DATA 0 true Stack[-0x1a] - 1000:7f24 FUN_1000_7ed9 DATA 0 true Stack[-0x18] - 1000:7f27 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f2e FUN_1000_7ed9 READ 1 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:7f32 FUN_1000_7ed9 READ 1 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:7f36 FUN_1000_7ed9 DATA 0 true Stack[-0x22] - 1000:7f39 FUN_1000_7ed9 DATA 0 true Stack[-0x20] - 1000:7f3c FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f40 FUN_1000_7ed9 READ 1 true 1028:1e84 Data6 DAT_1028_1e84 1000:7f44 FUN_1000_7ed9 READ 1 true 1028:1e86 Data6 DAT_1028_1e86 1000:7f48 FUN_1000_7ed9 DATA 0 true Stack[-0x1e] - 1000:7f4b FUN_1000_7ed9 DATA 0 true Stack[-0x1c] - 1000:7f4e FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f55 FUN_1000_7ed9 READ 1 true 1028:1edb Data6 DAT_1028_1edb 1000:7f59 FUN_1000_7ed9 READ 1 true 1028:1edd Data6 DAT_1028_1edd 1000:7f63 FUN_1000_7ed9 DATA 0 true Stack[-0x2a] - 1000:7f66 FUN_1000_7ed9 DATA 0 true Stack[-0x28] - 1000:7f69 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f70 FUN_1000_7ed9 READ 1 true 1028:1edf Data6 DAT_1028_1edf 1000:7f74 FUN_1000_7ed9 READ 1 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:7f78 FUN_1000_7ed9 DATA 0 true Stack[-0x2e] - 1000:7f7b FUN_1000_7ed9 DATA 0 true Stack[-0x2c] - 1000:7f7e FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f87 FUN_1000_7ed9 READ 1 true 1028:1f81 Data6 DAT_1028_1f81 1000:7f8b FUN_1000_7ed9 READ 1 true 1028:1f83 Data6 DAT_1028_1f83 1000:7f8f FUN_1000_7ed9 DATA 0 true Stack[-0x26] - 1000:7f92 FUN_1000_7ed9 DATA 0 true Stack[-0x24] - 1000:7f95 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7f9e FUN_1000_7ed9 READ 1 true 1028:1f79 Data6 DAT_1028_1f79 1000:7fa2 FUN_1000_7ed9 READ 1 true 1028:1f7b Data6 DAT_1028_1f7b 1000:7fac FUN_1000_7ed9 DATA 0 true Stack[-0x32] - 1000:7faf FUN_1000_7ed9 DATA 0 true Stack[-0x30] - 1000:7fb2 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7fbb FUN_1000_7ed9 READ 1 true 1028:1f7d Data6 DAT_1028_1f7d 1000:7fbf FUN_1000_7ed9 READ 1 true 1028:1f7f Data6 DAT_1028_1f7f 1000:7fc3 FUN_1000_7ed9 DATA 0 true Stack[-0x36] - 1000:7fc6 FUN_1000_7ed9 DATA 0 true Stack[-0x34] - 1000:7fc9 FUN_1000_7ed9 DATA 0 true Stack[0x8] - 1000:7fcd FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:7fe0 Code1 LAB_1000_7fe0 1000:7fcf FUN_1000_7ed9 DATA 0 true Stack[0x6] - 1000:7fd3 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:7fe0 Code1 LAB_1000_7fe0 1000:7fd5 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7fdb FUN_1000_7ed9 DATA 0 true Stack[-0x68] - 1000:7fde FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:7fe7 Code1 LAB_1000_7fe7 1000:7fe0 FUN_1000_7ed9 DATA 1 true Stack[-0x70] - 1000:7fe4 FUN_1000_7ed9 DATA 0 true Stack[-0x68] - 1000:7fe7 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:80ea Code1 LAB_1000_80ea 1000:7fed FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:7ff2 Code1 LAB_1000_7ff2 1000:7fef FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:80ea Code1 LAB_1000_80ea 1000:7ff2 FUN_1000_7ed9 DATA 0 true Stack[-0x72] - 1000:7ff7 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:7ffb FUN_1000_7ed9 READ 1 true 1028:236d Data6 DAT_1028_236d 1000:7fff FUN_1000_7ed9 READ 1 true 1028:236f Data6 DAT_1028_236f 1000:8003 FUN_1000_7ed9 READ 1 true 1028:2371 Data6 DAT_1028_2371 1000:8007 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:800c FUN_1000_7ed9 DATA 0 true Stack[-0x7a] - 1000:800f FUN_1000_7ed9 DATA 0 true Stack[-0x78] - 1000:8012 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:8016 FUN_1000_7ed9 READ 1 true 1028:235d Data6 DAT_1028_235d 1000:801a FUN_1000_7ed9 READ 1 true 1028:235f Data6 DAT_1028_235f 1000:8024 FUN_1000_7ed9 DATA 0 true Stack[-0x1a] - 1000:8027 FUN_1000_7ed9 DATA 0 true Stack[-0x18] - 1000:802a FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:802e FUN_1000_7ed9 READ 1 true 1028:2361 Data6 DAT_1028_2361 1000:8032 FUN_1000_7ed9 READ 1 true 1028:2363 Data6 DAT_1028_2363 1000:8036 FUN_1000_7ed9 DATA 0 true Stack[-0x1e] - 1000:8039 FUN_1000_7ed9 DATA 0 true Stack[-0x1c] - 1000:803c FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:8045 FUN_1000_7ed9 READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:8049 FUN_1000_7ed9 READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:804d FUN_1000_7ed9 DATA 0 true Stack[-0x22] - 1000:8050 FUN_1000_7ed9 DATA 0 true Stack[-0x20] - 1000:8053 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:805c FUN_1000_7ed9 READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:8060 FUN_1000_7ed9 READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:806a FUN_1000_7ed9 DATA 0 true Stack[-0x2a] - 1000:806d FUN_1000_7ed9 DATA 0 true Stack[-0x28] - 1000:8070 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:8079 FUN_1000_7ed9 READ 1 true 1028:245a Data6 DAT_1028_245a 1000:807d FUN_1000_7ed9 READ 1 true 1028:245c Data6 DAT_1028_245c 1000:8081 FUN_1000_7ed9 DATA 0 true Stack[-0x2e] - 1000:8084 FUN_1000_7ed9 DATA 0 true Stack[-0x2c] - 1000:8087 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:808e FUN_1000_7ed9 READ 1 true 1028:23b0 Data6 DAT_1028_23b0 1000:8092 FUN_1000_7ed9 READ 1 true 1028:23b2 Data6 DAT_1028_23b2 1000:8096 FUN_1000_7ed9 DATA 0 true Stack[-0x26] - 1000:8099 FUN_1000_7ed9 DATA 0 true Stack[-0x24] - 1000:809c FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:80a3 FUN_1000_7ed9 READ 1 true 1028:23b8 Data6 DAT_1028_23b8 1000:80a7 FUN_1000_7ed9 READ 1 true 1028:23ba Data6 DAT_1028_23ba 1000:80b1 FUN_1000_7ed9 DATA 0 true Stack[-0x32] - 1000:80b4 FUN_1000_7ed9 DATA 0 true Stack[-0x30] - 1000:80b7 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:80be FUN_1000_7ed9 READ 1 true 1028:23bc Data6 DAT_1028_23bc 1000:80c2 FUN_1000_7ed9 READ 1 true 1028:23be Data6 DAT_1028_23be 1000:80c6 FUN_1000_7ed9 DATA 0 true Stack[-0x36] - 1000:80c9 FUN_1000_7ed9 DATA 0 true Stack[-0x34] - 1000:80cc FUN_1000_7ed9 DATA 0 true Stack[0x8] - 1000:80d0 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:80e1 Code1 LAB_1000_80e1 1000:80d2 FUN_1000_7ed9 DATA 0 true Stack[0x6] - 1000:80d6 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:80e1 Code1 LAB_1000_80e1 1000:80d8 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:80dc FUN_1000_7ed9 DATA 0 true Stack[-0x68] - 1000:80df FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:80ea Code1 LAB_1000_80ea 1000:80e1 FUN_1000_7ed9 DATA 1 true Stack[-0x72] - 1000:80e7 FUN_1000_7ed9 DATA 0 true Stack[-0x68] - 1000:80ea FUN_1000_7ed9 DATA 1 true Stack[0x6] - 1000:80ed FUN_1000_7ed9 DATA 1 true Stack[0x8] - 1000:80f0 FUN_1000_7ed9 DATA 1 true Stack[-0x7a] - 1000:80f3 FUN_1000_7ed9 DATA 1 true Stack[-0x78] - 1000:80f6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:80fb FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8100 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8105 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8108 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:810b FUN_1000_7ed9 DATA 0 true Stack[-0x1e] - 1000:810e FUN_1000_7ed9 DATA 0 true Stack[-0x1c] - 1000:8111 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8120 FUN_1000_7ed9 DATA 0 true Stack[-0x3d7] - 1000:8124 FUN_1000_7ed9 DATA 0 true Stack[-0x3d5] - 1000:812d FUN_1000_7ed9 DATA 1 true Stack[-0x3d5] - 1000:8131 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8136 Code1 LAB_1000_8136 1000:8133 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8b09 Code1 LAB_1000_8b09 1000:8136 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8141 Code1 LAB_1000_8141 1000:8138 FUN_1000_7ed9 DATA 1 true Stack[-0x3d7] - 1000:813c FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8141 Code1 LAB_1000_8141 1000:813e FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8b09 Code1 LAB_1000_8b09 1000:8141 FUN_1000_7ed9 DATA 0 true Stack[-0x76] - 1000:8144 FUN_1000_7ed9 DATA 0 true Stack[-0x74] - 1000:8147 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8151 Code1 LAB_1000_8151 1000:8149 FUN_1000_7ed9 DATA 0 true Stack[-0x76] - 1000:814d FUN_1000_7ed9 DATA 0 true Stack[-0x74] - 1000:8151 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:815d FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8176 Code1 LAB_1000_8176 1000:815f FUN_1000_7ed9 DATA 1 true Stack[-0x76] - 1000:8162 FUN_1000_7ed9 DATA 1 true Stack[-0x74] - 1000:816d FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8171 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1000:c36b Code1 FUN_1000_c36b FUN_1000_c36b 1000:8176 FUN_1000_7ed9 DATA 0 true Stack[0x8] - 1000:817a FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:817f Code1 LAB_1000_817f 1000:817c FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:82b1 Code1 LAB_1000_82b1 1000:817f FUN_1000_7ed9 DATA 0 true Stack[0x6] - 1000:8183 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8188 Code1 LAB_1000_8188 1000:8185 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:82b1 Code1 LAB_1000_82b1 1000:8188 FUN_1000_7ed9 DATA 1 true Stack[-0x2a] - 1000:818b FUN_1000_7ed9 DATA 1 true Stack[-0x28] - 1000:818e FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:8192 FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:819b FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:81a0 FUN_1000_7ed9 DATA 0 true Stack[-0x5a] - 1000:81a3 FUN_1000_7ed9 DATA 0 true Stack[-0x58] - 1000:81a6 FUN_1000_7ed9 DATA 1 true Stack[-0x2e] - 1000:81a9 FUN_1000_7ed9 DATA 1 true Stack[-0x2c] - 1000:81b2 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:81b5 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:81bd FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:81c2 FUN_1000_7ed9 DATA 0 true Stack[-0x5e] - 1000:81c5 FUN_1000_7ed9 DATA 0 true Stack[-0x5c] - 1000:81c8 FUN_1000_7ed9 DATA 1 true Stack[-0x2e] - 1000:81cb FUN_1000_7ed9 DATA 1 true Stack[-0x2c] - 1000:81d4 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:81d8 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:81e1 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:81e6 FUN_1000_7ed9 DATA 0 true Stack[-0x62] - 1000:81e9 FUN_1000_7ed9 DATA 0 true Stack[-0x60] - 1000:81ec FUN_1000_7ed9 DATA 1 true Stack[-0x2a] - 1000:81ef FUN_1000_7ed9 DATA 1 true Stack[-0x28] - 1000:81f2 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:81f5 FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:81fd FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:8202 FUN_1000_7ed9 DATA 0 true Stack[-0x66] - 1000:8205 FUN_1000_7ed9 DATA 0 true Stack[-0x64] - 1000:8208 FUN_1000_7ed9 DATA 1 true Stack[-0x62] - 1000:820b FUN_1000_7ed9 DATA 1 true Stack[-0x60] - 1000:820e FUN_1000_7ed9 DATA 1 true Stack[-0x66] - 1000:8211 FUN_1000_7ed9 DATA 1 true Stack[-0x64] - 1000:8214 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:821b FUN_1000_7ed9 DATA 1 true Stack[-0x5a] - 1000:821e FUN_1000_7ed9 DATA 1 true Stack[-0x58] - 1000:8221 FUN_1000_7ed9 DATA 1 true Stack[-0x5e] - 1000:8224 FUN_1000_7ed9 DATA 1 true Stack[-0x5c] - 1000:8227 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8232 FUN_1000_7ed9 DATA 0 true Stack[-0x6] - 1000:8235 FUN_1000_7ed9 DATA 0 true Stack[-0x4] - 1000:8238 FUN_1000_7ed9 DATA 1 true Stack[-0x2e] - 1000:823b FUN_1000_7ed9 DATA 1 true Stack[-0x2c] - 1000:8244 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8247 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:824f FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:8254 FUN_1000_7ed9 DATA 0 true Stack[-0x5e] - 1000:8257 FUN_1000_7ed9 DATA 0 true Stack[-0x5c] - 1000:825a FUN_1000_7ed9 DATA 1 true Stack[-0x2e] - 1000:825d FUN_1000_7ed9 DATA 1 true Stack[-0x2c] - 1000:8266 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:826a FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:8273 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:8278 FUN_1000_7ed9 DATA 0 true Stack[-0x62] - 1000:827b FUN_1000_7ed9 DATA 0 true Stack[-0x60] - 1000:827e FUN_1000_7ed9 DATA 1 true Stack[-0x62] - 1000:8281 FUN_1000_7ed9 DATA 1 true Stack[-0x60] - 1000:8284 FUN_1000_7ed9 DATA 1 true Stack[-0x66] - 1000:8287 FUN_1000_7ed9 DATA 1 true Stack[-0x64] - 1000:828a FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8291 FUN_1000_7ed9 DATA 1 true Stack[-0x5a] - 1000:8294 FUN_1000_7ed9 DATA 1 true Stack[-0x58] - 1000:8297 FUN_1000_7ed9 DATA 1 true Stack[-0x5e] - 1000:829a FUN_1000_7ed9 DATA 1 true Stack[-0x5c] - 1000:829d FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:82a8 FUN_1000_7ed9 DATA 0 true Stack[-0xa] - 1000:82ab FUN_1000_7ed9 DATA 0 true Stack[-0x8] - 1000:82ae FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:83d7 Code1 LAB_1000_83d7 1000:82b1 FUN_1000_7ed9 DATA 1 true Stack[-0x32] - 1000:82b4 FUN_1000_7ed9 DATA 1 true Stack[-0x30] - 1000:82b7 FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:82bb FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:82c4 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:82c9 FUN_1000_7ed9 DATA 0 true Stack[-0x5a] - 1000:82cc FUN_1000_7ed9 DATA 0 true Stack[-0x58] - 1000:82cf FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:82d2 FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:82db FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:82de FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:82e6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:82eb FUN_1000_7ed9 DATA 0 true Stack[-0x5e] - 1000:82ee FUN_1000_7ed9 DATA 0 true Stack[-0x5c] - 1000:82f1 FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:82f4 FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:82fd FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:8301 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:830a FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:830f FUN_1000_7ed9 DATA 0 true Stack[-0x62] - 1000:8312 FUN_1000_7ed9 DATA 0 true Stack[-0x60] - 1000:8315 FUN_1000_7ed9 DATA 1 true Stack[-0x32] - 1000:8318 FUN_1000_7ed9 DATA 1 true Stack[-0x30] - 1000:831b FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:831e FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8326 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:832b FUN_1000_7ed9 DATA 0 true Stack[-0x66] - 1000:832e FUN_1000_7ed9 DATA 0 true Stack[-0x64] - 1000:8331 FUN_1000_7ed9 DATA 1 true Stack[-0x62] - 1000:8334 FUN_1000_7ed9 DATA 1 true Stack[-0x60] - 1000:8337 FUN_1000_7ed9 DATA 1 true Stack[-0x66] - 1000:833a FUN_1000_7ed9 DATA 1 true Stack[-0x64] - 1000:833d FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8344 FUN_1000_7ed9 DATA 1 true Stack[-0x5a] - 1000:8347 FUN_1000_7ed9 DATA 1 true Stack[-0x58] - 1000:834a FUN_1000_7ed9 DATA 1 true Stack[-0x5e] - 1000:834d FUN_1000_7ed9 DATA 1 true Stack[-0x5c] - 1000:8350 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:835b FUN_1000_7ed9 DATA 0 true Stack[-0x6] - 1000:835e FUN_1000_7ed9 DATA 0 true Stack[-0x4] - 1000:8361 FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:8364 FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:836d FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8370 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:8378 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:837d FUN_1000_7ed9 DATA 0 true Stack[-0x5e] - 1000:8380 FUN_1000_7ed9 DATA 0 true Stack[-0x5c] - 1000:8383 FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:8386 FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:838f FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:8393 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:839c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:83a1 FUN_1000_7ed9 DATA 0 true Stack[-0x62] - 1000:83a4 FUN_1000_7ed9 DATA 0 true Stack[-0x60] - 1000:83a7 FUN_1000_7ed9 DATA 1 true Stack[-0x62] - 1000:83aa FUN_1000_7ed9 DATA 1 true Stack[-0x60] - 1000:83ad FUN_1000_7ed9 DATA 1 true Stack[-0x66] - 1000:83b0 FUN_1000_7ed9 DATA 1 true Stack[-0x64] - 1000:83b3 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:83ba FUN_1000_7ed9 DATA 1 true Stack[-0x5a] - 1000:83bd FUN_1000_7ed9 DATA 1 true Stack[-0x58] - 1000:83c0 FUN_1000_7ed9 DATA 1 true Stack[-0x5e] - 1000:83c3 FUN_1000_7ed9 DATA 1 true Stack[-0x5c] - 1000:83c6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:83d1 FUN_1000_7ed9 DATA 0 true Stack[-0xa] - 1000:83d4 FUN_1000_7ed9 DATA 0 true Stack[-0x8] - 1000:83d7 FUN_1000_7ed9 DATA 0 true Stack[-0x3a] - 1000:83dc FUN_1000_7ed9 DATA 0 true Stack[-0x38] - 1000:83e1 FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:83e4 FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:83e8 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:83eb FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:83f0 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:83f9 Code1 LAB_1000_83f9 1000:83f9 FUN_1000_7ed9 DATA 0 true Stack[-0x8e] - 1000:83fd FUN_1000_7ed9 DATA 0 true Stack[-0x8c] - 1000:8401 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:8404 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:8408 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:840b FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:8410 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8419 Code1 LAB_1000_8419 1000:8419 FUN_1000_7ed9 DATA 0 true Stack[-0x92] - 1000:841d FUN_1000_7ed9 DATA 0 true Stack[-0x90] - 1000:8421 FUN_1000_7ed9 DATA 1 true Stack[-0x8e] - 1000:8425 FUN_1000_7ed9 DATA 1 true Stack[-0x8c] - 1000:8429 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:842c FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:843b Code1 LAB_1000_843b 1000:842e FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8433 Code1 LAB_1000_8433 1000:8430 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8433 FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:8436 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:843b Code1 LAB_1000_843b 1000:8438 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:843b FUN_1000_7ed9 DATA 1 true Stack[-0x92] - 1000:843f FUN_1000_7ed9 DATA 1 true Stack[-0x90] - 1000:8443 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:8446 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8455 Code1 LAB_1000_8455 1000:8448 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:844d Code1 LAB_1000_844d 1000:844a FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:844d FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:8450 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8455 Code1 LAB_1000_8455 1000:8452 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8455 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:8458 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:845c FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:845f FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:8462 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:846f FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:8474 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:847c FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:847f FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:8483 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:8486 FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8489 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8496 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:849b FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:84a3 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:84a8 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:84b5 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:84ba FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:84bf FUN_1000_7ed9 DATA 0 true Stack[-0x16] - 1000:84c2 FUN_1000_7ed9 DATA 0 true Stack[-0x14] - 1000:84c5 FUN_1000_7ed9 DATA 1 true Stack[-0x16] - 1000:84c8 FUN_1000_7ed9 DATA 1 true Stack[-0x14] - 1000:84cb FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:84ce FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:84dd Code1 LAB_1000_84dd 1000:84d0 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:84d5 Code1 LAB_1000_84d5 1000:84d2 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:84d5 FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:84d8 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:84dd Code1 LAB_1000_84dd 1000:84da FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:84dd FUN_1000_7ed9 DATA 0 true Stack[0xc] - 1000:84e1 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:84e3 FUN_1000_7ed9 DATA 0 true Stack[0xa] - 1000:84e7 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:84e9 FUN_1000_7ed9 DATA 0 true Stack[-0x4] - 1000:84ed FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:84f8 Code1 LAB_1000_84f8 1000:84ef FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:84f1 FUN_1000_7ed9 DATA 0 true Stack[-0x6] - 1000:84f6 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:84f8 FUN_1000_7ed9 DATA 0 true Stack[-0x8] - 1000:84fc FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8507 Code1 LAB_1000_8507 1000:84fe FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:8500 FUN_1000_7ed9 DATA 0 true Stack[-0xa] - 1000:8505 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:8507 FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:850a FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:850e FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8511 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:856f Code1 LAB_1000_856f 1000:8513 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:851a Code1 LAB_1000_851a 1000:8515 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:8518 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:856f Code1 LAB_1000_856f 1000:851a FUN_1000_7ed9 DATA 0 true Stack[0xc] - 1000:851e FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8523 Code1 LAB_1000_8523 1000:8520 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8523 FUN_1000_7ed9 DATA 0 true Stack[0xa] - 1000:8527 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:852c Code1 LAB_1000_852c 1000:8529 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:852c FUN_1000_7ed9 DATA 0 true Stack[-0x4] - 1000:8530 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8541 Code1 LAB_1000_8541 1000:8532 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8537 Code1 LAB_1000_8537 1000:8534 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8537 FUN_1000_7ed9 DATA 0 true Stack[-0x6] - 1000:853c FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8541 Code1 LAB_1000_8541 1000:853e FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8541 FUN_1000_7ed9 DATA 0 true Stack[-0x8] - 1000:8545 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8556 Code1 LAB_1000_8556 1000:8547 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:854c Code1 LAB_1000_854c 1000:8549 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:854c FUN_1000_7ed9 DATA 0 true Stack[-0xa] - 1000:8551 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8556 Code1 LAB_1000_8556 1000:8553 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8556 FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:8559 FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:855d FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8560 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:856f Code1 LAB_1000_856f 1000:8562 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8567 Code1 LAB_1000_8567 1000:8564 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:8567 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:856a FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:856f Code1 LAB_1000_856f 1000:856c FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8acc Code1 LAB_1000_8acc 1000:856f FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:8572 FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:8576 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:8579 FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:857c FUN_1000_7ed9 DATA 1 true Stack[0x6] - 1000:857f FUN_1000_7ed9 DATA 1 true Stack[0x8] - 1000:8582 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8587 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:858c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8591 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8596 FUN_1000_7ed9 DATA 0 true Stack[-0x44] - 1000:8599 FUN_1000_7ed9 DATA 0 true Stack[-0x42] - 1000:859c FUN_1000_7ed9 DATA 0 true Stack[-0x40] - 1000:859f FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:85a2 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:85a6 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:85a9 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:85b2 FUN_1000_7ed9 DATA 1 true Stack[0x6] - 1000:85b5 FUN_1000_7ed9 DATA 1 true Stack[0x8] - 1000:85b8 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:85bd FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:85c2 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:85c7 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:85cc FUN_1000_7ed9 DATA 0 true Stack[-0x4a] - 1000:85cf FUN_1000_7ed9 DATA 0 true Stack[-0x48] - 1000:85d2 FUN_1000_7ed9 DATA 0 true Stack[-0x46] - 1000:85d5 FUN_1000_7ed9 DATA 0 true Stack[0xc] - 1000:85d9 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8613 Code1 LAB_1000_8613 1000:85db FUN_1000_7ed9 DATA 0 true Stack[0xa] - 1000:85df FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8613 Code1 LAB_1000_8613 1000:85e1 FUN_1000_7ed9 DATA 1 true Stack[-0x44] - 1000:85e4 FUN_1000_7ed9 DATA 1 true Stack[-0x42] - 1000:85e7 FUN_1000_7ed9 DATA 1 true Stack[-0x40] - 1000:85ec FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:85f1 Code1 LAB_1000_85f1 1000:85f1 FUN_1000_7ed9 DATA 0 true Stack[-0x44] - 1000:85f4 FUN_1000_7ed9 DATA 0 true Stack[-0x42] - 1000:85f7 FUN_1000_7ed9 DATA 0 true Stack[-0x40] - 1000:85fa FUN_1000_7ed9 DATA 1 true Stack[-0x4a] - 1000:85fd FUN_1000_7ed9 DATA 1 true Stack[-0x48] - 1000:8600 FUN_1000_7ed9 DATA 1 true Stack[-0x46] - 1000:8605 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:860a Code1 LAB_1000_860a 1000:860a FUN_1000_7ed9 DATA 0 true Stack[-0x4a] - 1000:860d FUN_1000_7ed9 DATA 0 true Stack[-0x48] - 1000:8610 FUN_1000_7ed9 DATA 0 true Stack[-0x46] - 1000:8613 FUN_1000_7ed9 DATA 0 true Stack[0x8] - 1000:8617 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:861c Code1 LAB_1000_861c 1000:8619 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:86b6 Code1 LAB_1000_86b6 1000:861c FUN_1000_7ed9 DATA 0 true Stack[0x6] - 1000:8620 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8625 Code1 LAB_1000_8625 1000:8622 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:86b6 Code1 LAB_1000_86b6 1000:8625 FUN_1000_7ed9 DATA 1 true Stack[-0x2a] - 1000:8628 FUN_1000_7ed9 DATA 1 true Stack[-0x28] - 1000:862b FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:862e FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8633 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:863c Code1 LAB_1000_863c 1000:863c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:864a FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1007 Code5 FUN_1020_1007 FUN_1020_1007 1000:864f FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8687 Code1 LAB_1000_8687 1000:8651 FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:8654 FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:8658 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:865b FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8660 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8669 Code1 LAB_1000_8669 1000:866d FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8670 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:867d FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8681 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:8685 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:869b Code1 LAB_1000_869b 1000:8687 FUN_1000_7ed9 DATA 1 true Stack[-0x2e] - 1000:868a FUN_1000_7ed9 DATA 1 true Stack[-0x2c] - 1000:8693 FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8697 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:869b FUN_1000_7ed9 DATA 1 true Stack[-0x86] - 1000:869f FUN_1000_7ed9 DATA 1 true Stack[-0x84] - 1000:86a3 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:86a7 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:86ab FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:86af FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:86b3 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8774 Code1 LAB_1000_8774 1000:86b6 FUN_1000_7ed9 DATA 1 true Stack[-0x32] - 1000:86b9 FUN_1000_7ed9 DATA 1 true Stack[-0x30] - 1000:86bc FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:86bf FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:86c4 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:86cd Code1 LAB_1000_86cd 1000:86cd FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:86db FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1007 Code5 FUN_1020_1007 FUN_1020_1007 1000:86e0 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8748 Code1 LAB_1000_8748 1000:86e2 FUN_1000_7ed9 DATA 1 true Stack[-0x32] - 1000:86e5 FUN_1000_7ed9 DATA 1 true Stack[-0x30] - 1000:86e8 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:86eb FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:86ee FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:86f6 FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:86f9 FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:8702 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8705 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:870c FUN_1000_7ed9 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:870f FUN_1000_7ed9 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:8713 FUN_1000_7ed9 DATA 1 true Stack[-0x1a] - 1000:8716 FUN_1000_7ed9 DATA 1 true Stack[-0x18] - 1000:8719 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:871e FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8726 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:872b FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8734 FUN_1000_7ed9 DATA 1 true Stack[-0x1e] - 1000:8737 FUN_1000_7ed9 DATA 1 true Stack[-0x1c] - 1000:873e FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8742 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:8746 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:875c Code1 LAB_1000_875c 1000:8748 FUN_1000_7ed9 DATA 1 true Stack[-0x36] - 1000:874b FUN_1000_7ed9 DATA 1 true Stack[-0x34] - 1000:8754 FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8758 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:875c FUN_1000_7ed9 DATA 1 true Stack[-0x86] - 1000:8760 FUN_1000_7ed9 DATA 1 true Stack[-0x84] - 1000:8764 FUN_1000_7ed9 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:8768 FUN_1000_7ed9 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:876c FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8770 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:8774 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:8779 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8784 Code1 LAB_1000_8784 1000:877b FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:87b2 Code1 LAB_1000_87b2 1000:877d FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8782 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:87b2 Code1 LAB_1000_87b2 1000:8784 FUN_1000_7ed9 DATA 1 true Stack[-0x86] - 1000:8788 FUN_1000_7ed9 DATA 1 true Stack[-0x84] - 1000:878c FUN_1000_7ed9 DATA 1 true Stack[0x6] - 1000:878f FUN_1000_7ed9 DATA 1 true Stack[0x8] - 1000:8792 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8797 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:879c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:87a8 FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:87ac FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:87b0 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:87bc Code1 LAB_1000_87bc 1000:87b4 FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:87b8 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:87bc FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:87bf FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:87c8 FUN_1000_7ed9 DATA 0 true Stack[-0x3a] - 1000:87cb FUN_1000_7ed9 DATA 0 true Stack[-0x38] - 1000:87ce FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:87d1 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:87d4 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:87dc FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:87ed FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:87f2 FUN_1000_7ed9 DATA 1 true Stack[-0x4a] - 1000:87f5 FUN_1000_7ed9 DATA 1 true Stack[-0x48] - 1000:87f8 FUN_1000_7ed9 DATA 1 true Stack[-0x46] - 1000:87fb FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8803 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8814 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8819 FUN_1000_7ed9 DATA 1 true Stack[-0x44] - 1000:881c FUN_1000_7ed9 DATA 1 true Stack[-0x42] - 1000:881f FUN_1000_7ed9 DATA 1 true Stack[-0x40] - 1000:8822 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:882a FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:8836 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:883e FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:8843 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8848 FUN_1000_7ed9 DATA 0 true Stack[-0xe] - 1000:884b FUN_1000_7ed9 DATA 0 true Stack[-0xc] - 1000:8850 FUN_1000_7ed9 DATA 0 true Stack[-0xe] - 1000:8853 FUN_1000_7ed9 DATA 0 true Stack[-0xc] - 1000:8856 FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:8859 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:885c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8864 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8875 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:887a FUN_1000_7ed9 DATA 1 true Stack[-0x44] - 1000:887d FUN_1000_7ed9 DATA 1 true Stack[-0x42] - 1000:8880 FUN_1000_7ed9 DATA 1 true Stack[-0x40] - 1000:8883 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:888b FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:889c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:88a1 FUN_1000_7ed9 DATA 1 true Stack[-0x4a] - 1000:88a4 FUN_1000_7ed9 DATA 1 true Stack[-0x48] - 1000:88a7 FUN_1000_7ed9 DATA 1 true Stack[-0x46] - 1000:88aa FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:88b2 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:88ba FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:88bf FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:88c4 FUN_1000_7ed9 DATA 0 true Stack[-0x12] - 1000:88c7 FUN_1000_7ed9 DATA 0 true Stack[-0x10] - 1000:88ca FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:88cd FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:88d0 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:88d8 FUN_1000_7ed9 DATA 1 true Stack[-0x16] - 1000:88db FUN_1000_7ed9 DATA 1 true Stack[-0x14] - 1000:88de FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:88e6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:88eb FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:88f7 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8905 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:890a FUN_1000_7ed9 DATA 0 true Stack[-0x6e] - 1000:890d FUN_1000_7ed9 DATA 0 true Stack[-0x6c] - 1000:8910 FUN_1000_7ed9 DATA 0 true Stack[-0x6a] - 1000:8913 FUN_1000_7ed9 DATA 1 true Stack[-0x12] - 1000:8916 FUN_1000_7ed9 DATA 1 true Stack[-0x10] - 1000:8919 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8928 FUN_1000_7ed9 DATA 1 true Stack[-0x68] - 1000:8938 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:8940 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8945 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:894a FUN_1000_7ed9 DATA 0 true Stack[-0x12] - 1000:894d FUN_1000_7ed9 DATA 0 true Stack[-0x10] - 1000:8950 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:895f FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8964 FUN_1000_7ed9 DATA 1 true Stack[-0x6e] - 1000:8967 FUN_1000_7ed9 DATA 1 true Stack[-0x6c] - 1000:896a FUN_1000_7ed9 DATA 1 true Stack[-0x6a] - 1000:896d FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8972 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8977 FUN_1000_7ed9 DATA 1 true Stack[-0x12] - 1000:897a FUN_1000_7ed9 DATA 1 true Stack[-0x10] - 1000:897d FUN_1000_7ed9 DATA 0 true Stack[-0x12] - 1000:8980 FUN_1000_7ed9 DATA 0 true Stack[-0x10] - 1000:8983 FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:8986 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:8989 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8991 FUN_1000_7ed9 DATA 1 true Stack[-0x12] - 1000:8994 FUN_1000_7ed9 DATA 1 true Stack[-0x10] - 1000:8997 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:899c FUN_1000_7ed9 DATA 1 true Stack[-0x4a] - 1000:899f FUN_1000_7ed9 DATA 1 true Stack[-0x48] - 1000:89a2 FUN_1000_7ed9 DATA 1 true Stack[-0x46] - 1000:89a5 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:89ad FUN_1000_7ed9 DATA 1 true Stack[-0xe] - 1000:89b0 FUN_1000_7ed9 DATA 1 true Stack[-0xc] - 1000:89b3 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:89b8 FUN_1000_7ed9 DATA 1 true Stack[-0x44] - 1000:89bb FUN_1000_7ed9 DATA 1 true Stack[-0x42] - 1000:89be FUN_1000_7ed9 DATA 1 true Stack[-0x40] - 1000:89c1 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:89c9 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:89d1 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:89d6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:89db FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:89f6 FUN_1000_7ed9 DATA 1 true Stack[-0x3a] - 1000:89f9 FUN_1000_7ed9 DATA 1 true Stack[-0x38] - 1000:89fc FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8a04 FUN_1000_7ed9 DATA 1 true Stack[-0xe] - 1000:8a07 FUN_1000_7ed9 DATA 1 true Stack[-0xc] - 1000:8a0a FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8a0f FUN_1000_7ed9 DATA 1 true Stack[-0x4a] - 1000:8a12 FUN_1000_7ed9 DATA 1 true Stack[-0x48] - 1000:8a15 FUN_1000_7ed9 DATA 1 true Stack[-0x46] - 1000:8a18 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8a20 FUN_1000_7ed9 DATA 1 true Stack[-0x12] - 1000:8a23 FUN_1000_7ed9 DATA 1 true Stack[-0x10] - 1000:8a26 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8a2b FUN_1000_7ed9 DATA 1 true Stack[-0x44] - 1000:8a2e FUN_1000_7ed9 DATA 1 true Stack[-0x42] - 1000:8a31 FUN_1000_7ed9 DATA 1 true Stack[-0x40] - 1000:8a34 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:8a3c FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:8a44 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:8a49 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8a4e FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8a73 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8a7b FUN_1000_7ed9 DATA 1 true Stack[-0x86] - 1000:8a7f FUN_1000_7ed9 DATA 1 true Stack[-0x84] - 1000:8a83 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8a94 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8a99 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8aa1 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:8aa6 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8aab FUN_1000_7ed9 DATA 0 true Stack[-0x8a] - 1000:8aaf FUN_1000_7ed9 DATA 0 true Stack[-0x88] - 1000:8ab3 FUN_1000_7ed9 DATA 0 true Stack[-0x84] - 1000:8ab7 FUN_1000_7ed9 DATA 0 true Stack[-0x86] - 1000:8abb FUN_1000_7ed9 DATA 0 true Stack[-0x88] - 1000:8abf FUN_1000_7ed9 DATA 0 true Stack[-0x8a] - 1000:8ac3 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8ac7 FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1000:beff Code1 FUN_1000_beff FUN_1000_beff 1000:8acc FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8ad8 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8af1 Code1 LAB_1000_8af1 1000:8ada FUN_1000_7ed9 DATA 1 true Stack[-0x76] - 1000:8add FUN_1000_7ed9 DATA 1 true Stack[-0x74] - 1000:8ae8 FUN_1000_7ed9 DATA 1 true Stack[0x4] - 1000:8aec FUN_1000_7ed9 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:8af1 FUN_1000_7ed9 DATA 1 true Stack[-0x76] - 1000:8af4 FUN_1000_7ed9 DATA 1 true Stack[-0x74] - 1000:8af7 FUN_1000_7ed9 DATA 1 true Stack[-0x3d5] - 1000:8afb FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8b00 Code1 LAB_1000_8b00 1000:8afd FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8149 Code1 LAB_1000_8149 1000:8b00 FUN_1000_7ed9 DATA 1 true Stack[-0x3d7] - 1000:8b04 FUN_1000_7ed9 CONDITIONAL_JUMP 0 true 1000:8b09 Code1 LAB_1000_8b09 1000:8b06 FUN_1000_7ed9 UNCONDITIONAL_JUMP 0 true 1000:8149 Code1 LAB_1000_8149 1000:8b11 FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:8b20 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:8b25 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:8b28 FUN_1000_8b0d DATA 0 true Stack[0x8] - 1000:8b2c FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8b4f Code1 LAB_1000_8b4f 1000:8b2e FUN_1000_8b0d DATA 0 true Stack[0x6] - 1000:8b32 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8b4f Code1 LAB_1000_8b4f 1000:8b34 FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:8b4d FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:8b68 Code1 LAB_1000_8b68 1000:8b4f FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:8b68 FUN_1000_8b0d DATA 1 true Stack[0xa] - 1000:8b6d FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8b72 Code1 LAB_1000_8b72 1000:8b6f FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:92e6 Code1 LAB_1000_92e6 1000:8b72 FUN_1000_8b0d DATA 0 true Stack[-0x10] - 1000:8b77 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8b7a FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8b82 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8b87 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8b8c FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8b95 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8b9c FUN_1000_8b0d READ 1 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:8ba0 FUN_1000_8b0d READ 1 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:8bac FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8bb3 FUN_1000_8b0d WRITE 0 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:8bb7 FUN_1000_8b0d WRITE 0 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:8bbb FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8bbe FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8bc6 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8bcb FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8bd0 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8bd9 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8be0 FUN_1000_8b0d READ 1 true 1028:1ed7 Data6 DAT_1028_1ed7 1000:8be4 FUN_1000_8b0d READ 1 true 1028:1ed9 Data6 DAT_1028_1ed9 1000:8bf0 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8bf7 FUN_1000_8b0d WRITE 0 true 1028:1ed7 Data6 DAT_1028_1ed7 1000:8bfb FUN_1000_8b0d WRITE 0 true 1028:1ed9 Data6 DAT_1028_1ed9 1000:8bff FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8c02 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8c0a FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8c0f FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8c14 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8c1d FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c24 FUN_1000_8b0d READ 1 true 1028:1edb Data6 DAT_1028_1edb 1000:8c28 FUN_1000_8b0d READ 1 true 1028:1edd Data6 DAT_1028_1edd 1000:8c34 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c3b FUN_1000_8b0d WRITE 0 true 1028:1edb Data6 DAT_1028_1edb 1000:8c3f FUN_1000_8b0d WRITE 0 true 1028:1edd Data6 DAT_1028_1edd 1000:8c43 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8c46 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8c4e FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8c53 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8c58 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8c61 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c68 FUN_1000_8b0d READ 1 true 1028:1edf Data6 DAT_1028_1edf 1000:8c6c FUN_1000_8b0d READ 1 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:8c78 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c7f FUN_1000_8b0d WRITE 0 true 1028:1edf Data6 DAT_1028_1edf 1000:8c83 FUN_1000_8b0d WRITE 0 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:8c87 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c8e FUN_1000_8b0d READ 1 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:8c92 FUN_1000_8b0d READ 1 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:8c96 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8c9d FUN_1000_8b0d READ 1 true 1028:1edb Data6 DAT_1028_1edb 1000:8ca1 FUN_1000_8b0d READ 1 true 1028:1edd Data6 DAT_1028_1edd 1000:8ca7 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8caf Code1 LAB_1000_8caf 1000:8ca9 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8d01 Code1 LAB_1000_8d01 1000:8cad FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8d01 Code1 LAB_1000_8d01 1000:8caf FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8cb6 FUN_1000_8b0d READ 1 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:8cba FUN_1000_8b0d READ 1 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:8cc8 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8ccf FUN_1000_8b0d WRITE 0 true 1028:1ec3 Data6 DAT_1028_1ec3 1000:8cd3 FUN_1000_8b0d WRITE 0 true 1028:1ec5 Data6 DAT_1028_1ec5 1000:8cd7 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8cde FUN_1000_8b0d READ 1 true 1028:1edb Data6 DAT_1028_1edb 1000:8ce2 FUN_1000_8b0d READ 1 true 1028:1edd Data6 DAT_1028_1edd 1000:8cf0 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8cf7 FUN_1000_8b0d WRITE 0 true 1028:1ecb Data6 DAT_1028_1ecb 1000:8cfb FUN_1000_8b0d WRITE 0 true 1028:1ecd Data6 DAT_1028_1ecd 1000:8cff FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:8d51 Code1 LAB_1000_8d51 1000:8d01 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d08 FUN_1000_8b0d READ 1 true 1028:1edb Data6 DAT_1028_1edb 1000:8d0c FUN_1000_8b0d READ 1 true 1028:1edd Data6 DAT_1028_1edd 1000:8d1a FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d21 FUN_1000_8b0d WRITE 0 true 1028:1ec3 Data6 DAT_1028_1ec3 1000:8d25 FUN_1000_8b0d WRITE 0 true 1028:1ec5 Data6 DAT_1028_1ec5 1000:8d29 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d30 FUN_1000_8b0d READ 1 true 1028:1ed3 Data6 DAT_1028_1ed3 1000:8d34 FUN_1000_8b0d READ 1 true 1028:1ed5 Data6 DAT_1028_1ed5 1000:8d42 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d49 FUN_1000_8b0d WRITE 0 true 1028:1ecb Data6 DAT_1028_1ecb 1000:8d4d FUN_1000_8b0d WRITE 0 true 1028:1ecd Data6 DAT_1028_1ecd 1000:8d51 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d58 FUN_1000_8b0d READ 1 true 1028:1ed7 Data6 DAT_1028_1ed7 1000:8d5c FUN_1000_8b0d READ 1 true 1028:1ed9 Data6 DAT_1028_1ed9 1000:8d60 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d67 FUN_1000_8b0d READ 1 true 1028:1edf Data6 DAT_1028_1edf 1000:8d6b FUN_1000_8b0d READ 1 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:8d71 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8d79 Code1 LAB_1000_8d79 1000:8d73 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8dcb Code1 LAB_1000_8dcb 1000:8d77 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:8dcb Code1 LAB_1000_8dcb 1000:8d79 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d80 FUN_1000_8b0d READ 1 true 1028:1ed7 Data6 DAT_1028_1ed7 1000:8d84 FUN_1000_8b0d READ 1 true 1028:1ed9 Data6 DAT_1028_1ed9 1000:8d92 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8d99 FUN_1000_8b0d WRITE 0 true 1028:1ec7 Data6 DAT_1028_1ec7 1000:8d9d FUN_1000_8b0d WRITE 0 true 1028:1ec9 Data6 DAT_1028_1ec9 1000:8da1 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8da8 FUN_1000_8b0d READ 1 true 1028:1edf Data6 DAT_1028_1edf 1000:8dac FUN_1000_8b0d READ 1 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:8dba FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8dc1 FUN_1000_8b0d WRITE 0 true 1028:1ecf Data6 DAT_1028_1ecf 1000:8dc5 FUN_1000_8b0d WRITE 0 true 1028:1ed1 Data6 DAT_1028_1ed1 1000:8dc9 FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:8e1b Code1 LAB_1000_8e1b 1000:8dcb FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8dd2 FUN_1000_8b0d READ 1 true 1028:1edf Data6 DAT_1028_1edf 1000:8dd6 FUN_1000_8b0d READ 1 true 1028:1ee1 Data6 DAT_1028_1ee1 1000:8de4 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8deb FUN_1000_8b0d WRITE 0 true 1028:1ec7 Data6 DAT_1028_1ec7 1000:8def FUN_1000_8b0d WRITE 0 true 1028:1ec9 Data6 DAT_1028_1ec9 1000:8df3 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8dfa FUN_1000_8b0d READ 1 true 1028:1ed7 Data6 DAT_1028_1ed7 1000:8dfe FUN_1000_8b0d READ 1 true 1028:1ed9 Data6 DAT_1028_1ed9 1000:8e0c FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8e13 FUN_1000_8b0d WRITE 0 true 1028:1ecf Data6 DAT_1028_1ecf 1000:8e17 FUN_1000_8b0d WRITE 0 true 1028:1ed1 Data6 DAT_1028_1ed1 1000:8e1b FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8e1e FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8e26 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8e2b FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8e30 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8e39 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8e41 FUN_1000_8b0d READ 1 true 1028:1f26 Data6 DAT_1028_1f26 1000:8e45 FUN_1000_8b0d READ 1 true 1028:1f28 Data6 DAT_1028_1f28 1000:8e51 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8e59 FUN_1000_8b0d WRITE 0 true 1028:1f26 Data6 DAT_1028_1f26 1000:8e5d FUN_1000_8b0d WRITE 0 true 1028:1f28 Data6 DAT_1028_1f28 1000:8e61 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8e64 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8e6c FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8e71 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8e76 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8e7f FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8e87 FUN_1000_8b0d READ 1 true 1028:1f2a Data6 DAT_1028_1f2a 1000:8e8b FUN_1000_8b0d READ 1 true 1028:1f2c Data6 DAT_1028_1f2c 1000:8e97 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8e9f FUN_1000_8b0d WRITE 0 true 1028:1f2a Data6 DAT_1028_1f2a 1000:8ea3 FUN_1000_8b0d WRITE 0 true 1028:1f2c Data6 DAT_1028_1f2c 1000:8ea7 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8eaa FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8eb2 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8eb7 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8ebc FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8ec5 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8ecd FUN_1000_8b0d READ 1 true 1028:1f16 Data6 DAT_1028_1f16 1000:8ed1 FUN_1000_8b0d READ 1 true 1028:1f18 Data6 DAT_1028_1f18 1000:8edd FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8ee5 FUN_1000_8b0d WRITE 0 true 1028:1f16 Data6 DAT_1028_1f16 1000:8ee9 FUN_1000_8b0d WRITE 0 true 1028:1f18 Data6 DAT_1028_1f18 1000:8eed FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8ef0 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8ef8 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8efd FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8f02 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8f0b FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8f13 FUN_1000_8b0d READ 1 true 1028:1f1a Data6 DAT_1028_1f1a 1000:8f17 FUN_1000_8b0d READ 1 true 1028:1f1c Data6 DAT_1028_1f1c 1000:8f23 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8f2b FUN_1000_8b0d WRITE 0 true 1028:1f1a Data6 DAT_1028_1f1a 1000:8f2f FUN_1000_8b0d WRITE 0 true 1028:1f1c Data6 DAT_1028_1f1c 1000:8f33 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8f36 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8f3e FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8f43 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8f48 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8f51 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8f59 FUN_1000_8b0d READ 1 true 1028:1f1e Data6 DAT_1028_1f1e 1000:8f5d FUN_1000_8b0d READ 1 true 1028:1f20 Data6 DAT_1028_1f20 1000:8f69 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8f71 FUN_1000_8b0d WRITE 0 true 1028:1f1e Data6 DAT_1028_1f1e 1000:8f75 FUN_1000_8b0d WRITE 0 true 1028:1f20 Data6 DAT_1028_1f20 1000:8f79 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8f7c FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8f84 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8f89 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8f8e FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8f97 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8f9f FUN_1000_8b0d READ 1 true 1028:1f22 Data6 DAT_1028_1f22 1000:8fa3 FUN_1000_8b0d READ 1 true 1028:1f24 Data6 DAT_1028_1f24 1000:8faf FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8fb7 FUN_1000_8b0d WRITE 0 true 1028:1f22 Data6 DAT_1028_1f22 1000:8fbb FUN_1000_8b0d WRITE 0 true 1028:1f24 Data6 DAT_1028_1f24 1000:8fbf FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:8fc2 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:8fca FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:8fcf FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:8fd4 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:8fdd FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8fe6 FUN_1000_8b0d READ 1 true 1028:1f79 Data6 DAT_1028_1f79 1000:8fea FUN_1000_8b0d READ 1 true 1028:1f7b Data6 DAT_1028_1f7b 1000:8ff6 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:8fff FUN_1000_8b0d WRITE 0 true 1028:1f79 Data6 DAT_1028_1f79 1000:9003 FUN_1000_8b0d WRITE 0 true 1028:1f7b Data6 DAT_1028_1f7b 1000:9007 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:900a FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9012 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9017 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:901c FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:9025 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:902e FUN_1000_8b0d READ 1 true 1028:1f7d Data6 DAT_1028_1f7d 1000:9032 FUN_1000_8b0d READ 1 true 1028:1f7f Data6 DAT_1028_1f7f 1000:903e FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9047 FUN_1000_8b0d WRITE 0 true 1028:1f7d Data6 DAT_1028_1f7d 1000:904b FUN_1000_8b0d WRITE 0 true 1028:1f7f Data6 DAT_1028_1f7f 1000:904f FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9052 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:905a FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:905f FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:9064 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:906d FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9076 FUN_1000_8b0d READ 1 true 1028:1f81 Data6 DAT_1028_1f81 1000:907a FUN_1000_8b0d READ 1 true 1028:1f83 Data6 DAT_1028_1f83 1000:9086 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:908f FUN_1000_8b0d WRITE 0 true 1028:1f81 Data6 DAT_1028_1f81 1000:9093 FUN_1000_8b0d WRITE 0 true 1028:1f83 Data6 DAT_1028_1f83 1000:9097 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:909a FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:90a2 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:90a7 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:90ac FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:90b5 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:90be FUN_1000_8b0d READ 1 true 1028:1f85 Data6 DAT_1028_1f85 1000:90c2 FUN_1000_8b0d READ 1 true 1028:1f87 Data6 DAT_1028_1f87 1000:90ce FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:90d7 FUN_1000_8b0d WRITE 0 true 1028:1f85 Data6 DAT_1028_1f85 1000:90db FUN_1000_8b0d WRITE 0 true 1028:1f87 Data6 DAT_1028_1f87 1000:90df FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:90e8 FUN_1000_8b0d READ 1 true 1028:1f79 Data6 DAT_1028_1f79 1000:90ec FUN_1000_8b0d READ 1 true 1028:1f7b Data6 DAT_1028_1f7b 1000:90f0 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:90f9 FUN_1000_8b0d READ 1 true 1028:1f81 Data6 DAT_1028_1f81 1000:90fd FUN_1000_8b0d READ 1 true 1028:1f83 Data6 DAT_1028_1f83 1000:9103 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:910b Code1 LAB_1000_910b 1000:9105 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9165 Code1 LAB_1000_9165 1000:9109 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9165 Code1 LAB_1000_9165 1000:910b FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9114 FUN_1000_8b0d READ 1 true 1028:1f79 Data6 DAT_1028_1f79 1000:9118 FUN_1000_8b0d READ 1 true 1028:1f7b Data6 DAT_1028_1f7b 1000:9126 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:912f FUN_1000_8b0d WRITE 0 true 1028:1f69 Data6 DAT_1028_1f69 1000:9133 FUN_1000_8b0d WRITE 0 true 1028:1f6b Data6 DAT_1028_1f6b 1000:9137 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9140 FUN_1000_8b0d READ 1 true 1028:1f81 Data6 DAT_1028_1f81 1000:9144 FUN_1000_8b0d READ 1 true 1028:1f83 Data6 DAT_1028_1f83 1000:9152 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:915b FUN_1000_8b0d WRITE 0 true 1028:1f71 Data6 DAT_1028_1f71 1000:915f FUN_1000_8b0d WRITE 0 true 1028:1f73 Data6 DAT_1028_1f73 1000:9163 FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:91bd Code1 LAB_1000_91bd 1000:9165 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:916e FUN_1000_8b0d READ 1 true 1028:1f81 Data6 DAT_1028_1f81 1000:9172 FUN_1000_8b0d READ 1 true 1028:1f83 Data6 DAT_1028_1f83 1000:9180 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9189 FUN_1000_8b0d WRITE 0 true 1028:1f69 Data6 DAT_1028_1f69 1000:918d FUN_1000_8b0d WRITE 0 true 1028:1f6b Data6 DAT_1028_1f6b 1000:9191 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:919a FUN_1000_8b0d READ 1 true 1028:1f79 Data6 DAT_1028_1f79 1000:919e FUN_1000_8b0d READ 1 true 1028:1f7b Data6 DAT_1028_1f7b 1000:91ac FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:91b5 FUN_1000_8b0d WRITE 0 true 1028:1f71 Data6 DAT_1028_1f71 1000:91b9 FUN_1000_8b0d WRITE 0 true 1028:1f73 Data6 DAT_1028_1f73 1000:91bd FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:91c6 FUN_1000_8b0d READ 1 true 1028:1f7d Data6 DAT_1028_1f7d 1000:91ca FUN_1000_8b0d READ 1 true 1028:1f7f Data6 DAT_1028_1f7f 1000:91ce FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:91d7 FUN_1000_8b0d READ 1 true 1028:1f85 Data6 DAT_1028_1f85 1000:91db FUN_1000_8b0d READ 1 true 1028:1f87 Data6 DAT_1028_1f87 1000:91e1 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:91e9 Code1 LAB_1000_91e9 1000:91e3 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9243 Code1 LAB_1000_9243 1000:91e7 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9243 Code1 LAB_1000_9243 1000:91e9 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:91f2 FUN_1000_8b0d READ 1 true 1028:1f7d Data6 DAT_1028_1f7d 1000:91f6 FUN_1000_8b0d READ 1 true 1028:1f7f Data6 DAT_1028_1f7f 1000:9204 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:920d FUN_1000_8b0d WRITE 0 true 1028:1f6d Data6 DAT_1028_1f6d 1000:9211 FUN_1000_8b0d WRITE 0 true 1028:1f6f Data6 DAT_1028_1f6f 1000:9215 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:921e FUN_1000_8b0d READ 1 true 1028:1f85 Data6 DAT_1028_1f85 1000:9222 FUN_1000_8b0d READ 1 true 1028:1f87 Data6 DAT_1028_1f87 1000:9230 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9239 FUN_1000_8b0d WRITE 0 true 1028:1f75 Data6 DAT_1028_1f75 1000:923d FUN_1000_8b0d WRITE 0 true 1028:1f77 Data6 DAT_1028_1f77 1000:9241 FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:929b Code1 LAB_1000_929b 1000:9243 FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:924c FUN_1000_8b0d READ 1 true 1028:1f85 Data6 DAT_1028_1f85 1000:9250 FUN_1000_8b0d READ 1 true 1028:1f87 Data6 DAT_1028_1f87 1000:925e FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9267 FUN_1000_8b0d WRITE 0 true 1028:1f6d Data6 DAT_1028_1f6d 1000:926b FUN_1000_8b0d WRITE 0 true 1028:1f6f Data6 DAT_1028_1f6f 1000:926f FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9278 FUN_1000_8b0d READ 1 true 1028:1f7d Data6 DAT_1028_1f7d 1000:927c FUN_1000_8b0d READ 1 true 1028:1f7f Data6 DAT_1028_1f7f 1000:928a FUN_1000_8b0d DATA 1 true Stack[-0x10] - 1000:9293 FUN_1000_8b0d WRITE 0 true 1028:1f75 Data6 DAT_1028_1f75 1000:9297 FUN_1000_8b0d WRITE 0 true 1028:1f77 Data6 DAT_1028_1f77 1000:929b FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:92ac FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:92c1 Code1 LAB_1000_92c1 1000:92ae FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:92ba FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:92bf FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:92d2 Code1 LAB_1000_92d2 1000:92c1 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:92cd FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:92d2 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:92de FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:92e3 FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:99d5 Code1 LAB_1000_99d5 1000:92e8 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:92ed Code1 LAB_1000_92ed 1000:92ea FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:99d5 Code1 LAB_1000_99d5 1000:92ed FUN_1000_8b0d DATA 0 true Stack[-0x12] - 1000:92f2 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:92f5 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:92fd FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9306 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:930f FUN_1000_8b0d READ 1 true 1028:245e Data6 DAT_1028_245e 1000:9313 FUN_1000_8b0d READ 1 true 1028:2460 Data6 DAT_1028_2460 1000:931f FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9328 FUN_1000_8b0d WRITE 0 true 1028:245e Data6 DAT_1028_245e 1000:932c FUN_1000_8b0d WRITE 0 true 1028:2460 Data6 DAT_1028_2460 1000:9330 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9333 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:933b FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9344 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:934d FUN_1000_8b0d READ 1 true 1028:2462 Data6 DAT_1028_2462 1000:9351 FUN_1000_8b0d READ 1 true 1028:2464 Data6 DAT_1028_2464 1000:935d FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9366 FUN_1000_8b0d WRITE 0 true 1028:2462 Data6 DAT_1028_2462 1000:936a FUN_1000_8b0d WRITE 0 true 1028:2464 Data6 DAT_1028_2464 1000:936e FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9371 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9379 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9382 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:938b FUN_1000_8b0d READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:938f FUN_1000_8b0d READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:939b FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:93a4 FUN_1000_8b0d WRITE 0 true 1028:2456 Data6 DAT_1028_2456 1000:93a8 FUN_1000_8b0d WRITE 0 true 1028:2458 Data6 DAT_1028_2458 1000:93ac FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:93af FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:93b7 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:93c0 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:93c9 FUN_1000_8b0d READ 1 true 1028:245a Data6 DAT_1028_245a 1000:93cd FUN_1000_8b0d READ 1 true 1028:245c Data6 DAT_1028_245c 1000:93d9 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:93e2 FUN_1000_8b0d WRITE 0 true 1028:245a Data6 DAT_1028_245a 1000:93e6 FUN_1000_8b0d WRITE 0 true 1028:245c Data6 DAT_1028_245c 1000:93ea FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:93f3 FUN_1000_8b0d READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:93f7 FUN_1000_8b0d READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:93fb FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9404 FUN_1000_8b0d READ 1 true 1028:245e Data6 DAT_1028_245e 1000:9408 FUN_1000_8b0d READ 1 true 1028:2460 Data6 DAT_1028_2460 1000:940e FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9416 Code1 LAB_1000_9416 1000:9410 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9470 Code1 LAB_1000_9470 1000:9414 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9470 Code1 LAB_1000_9470 1000:9416 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:941f FUN_1000_8b0d READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:9423 FUN_1000_8b0d READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:9431 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:943a FUN_1000_8b0d WRITE 0 true 1028:2446 Data6 DAT_1028_2446 1000:943e FUN_1000_8b0d WRITE 0 true 1028:2448 Data6 DAT_1028_2448 1000:9442 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:944b FUN_1000_8b0d READ 1 true 1028:245e Data6 DAT_1028_245e 1000:944f FUN_1000_8b0d READ 1 true 1028:2460 Data6 DAT_1028_2460 1000:945d FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9466 FUN_1000_8b0d WRITE 0 true 1028:244e Data6 DAT_1028_244e 1000:946a FUN_1000_8b0d WRITE 0 true 1028:2450 Data6 DAT_1028_2450 1000:946e FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:94c8 Code1 LAB_1000_94c8 1000:9470 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9479 FUN_1000_8b0d READ 1 true 1028:245e Data6 DAT_1028_245e 1000:947d FUN_1000_8b0d READ 1 true 1028:2460 Data6 DAT_1028_2460 1000:948b FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9494 FUN_1000_8b0d WRITE 0 true 1028:2446 Data6 DAT_1028_2446 1000:9498 FUN_1000_8b0d WRITE 0 true 1028:2448 Data6 DAT_1028_2448 1000:949c FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:94a5 FUN_1000_8b0d READ 1 true 1028:2456 Data6 DAT_1028_2456 1000:94a9 FUN_1000_8b0d READ 1 true 1028:2458 Data6 DAT_1028_2458 1000:94b7 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:94c0 FUN_1000_8b0d WRITE 0 true 1028:244e Data6 DAT_1028_244e 1000:94c4 FUN_1000_8b0d WRITE 0 true 1028:2450 Data6 DAT_1028_2450 1000:94c8 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:94d1 FUN_1000_8b0d READ 1 true 1028:245a Data6 DAT_1028_245a 1000:94d5 FUN_1000_8b0d READ 1 true 1028:245c Data6 DAT_1028_245c 1000:94d9 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:94e2 FUN_1000_8b0d READ 1 true 1028:2462 Data6 DAT_1028_2462 1000:94e6 FUN_1000_8b0d READ 1 true 1028:2464 Data6 DAT_1028_2464 1000:94ec FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:94f4 Code1 LAB_1000_94f4 1000:94ee FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:954e Code1 LAB_1000_954e 1000:94f2 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:954e Code1 LAB_1000_954e 1000:94f4 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:94fd FUN_1000_8b0d READ 1 true 1028:245a Data6 DAT_1028_245a 1000:9501 FUN_1000_8b0d READ 1 true 1028:245c Data6 DAT_1028_245c 1000:950f FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9518 FUN_1000_8b0d WRITE 0 true 1028:244a Data6 DAT_1028_244a 1000:951c FUN_1000_8b0d WRITE 0 true 1028:244c Data6 DAT_1028_244c 1000:9520 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9529 FUN_1000_8b0d READ 1 true 1028:2462 Data6 DAT_1028_2462 1000:952d FUN_1000_8b0d READ 1 true 1028:2464 Data6 DAT_1028_2464 1000:953b FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9544 FUN_1000_8b0d WRITE 0 true 1028:2452 Data6 DAT_1028_2452 1000:9548 FUN_1000_8b0d WRITE 0 true 1028:2454 Data6 DAT_1028_2454 1000:954c FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:95a6 Code1 LAB_1000_95a6 1000:954e FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9557 FUN_1000_8b0d READ 1 true 1028:2462 Data6 DAT_1028_2462 1000:955b FUN_1000_8b0d READ 1 true 1028:2464 Data6 DAT_1028_2464 1000:9569 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9572 FUN_1000_8b0d WRITE 0 true 1028:244a Data6 DAT_1028_244a 1000:9576 FUN_1000_8b0d WRITE 0 true 1028:244c Data6 DAT_1028_244c 1000:957a FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9583 FUN_1000_8b0d READ 1 true 1028:245a Data6 DAT_1028_245a 1000:9587 FUN_1000_8b0d READ 1 true 1028:245c Data6 DAT_1028_245c 1000:9595 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:959e FUN_1000_8b0d WRITE 0 true 1028:2452 Data6 DAT_1028_2452 1000:95a2 FUN_1000_8b0d WRITE 0 true 1028:2454 Data6 DAT_1028_2454 1000:95a6 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:95a9 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:95b1 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:95ba FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:95c2 FUN_1000_8b0d READ 1 true 1028:2403 Data6 DAT_1028_2403 1000:95c6 FUN_1000_8b0d READ 1 true 1028:2405 Data6 DAT_1028_2405 1000:95d2 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:95da FUN_1000_8b0d WRITE 0 true 1028:2403 Data6 DAT_1028_2403 1000:95de FUN_1000_8b0d WRITE 0 true 1028:2405 Data6 DAT_1028_2405 1000:95e2 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:95e5 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:95ed FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:95f6 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:95fe FUN_1000_8b0d READ 1 true 1028:2407 Data6 DAT_1028_2407 1000:9602 FUN_1000_8b0d READ 1 true 1028:2409 Data6 DAT_1028_2409 1000:960e FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9616 FUN_1000_8b0d WRITE 0 true 1028:2407 Data6 DAT_1028_2407 1000:961a FUN_1000_8b0d WRITE 0 true 1028:2409 Data6 DAT_1028_2409 1000:961e FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9621 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9629 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9632 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:963a FUN_1000_8b0d READ 1 true 1028:23f3 Data6 DAT_1028_23f3 1000:963e FUN_1000_8b0d READ 1 true 1028:23f5 Data6 DAT_1028_23f5 1000:964a FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9652 FUN_1000_8b0d WRITE 0 true 1028:23f3 Data6 DAT_1028_23f3 1000:9656 FUN_1000_8b0d WRITE 0 true 1028:23f5 Data6 DAT_1028_23f5 1000:965a FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:965d FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9665 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:966e FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9676 FUN_1000_8b0d READ 1 true 1028:23f7 Data6 DAT_1028_23f7 1000:967a FUN_1000_8b0d READ 1 true 1028:23f9 Data6 DAT_1028_23f9 1000:9686 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:968e FUN_1000_8b0d WRITE 0 true 1028:23f7 Data6 DAT_1028_23f7 1000:9692 FUN_1000_8b0d WRITE 0 true 1028:23f9 Data6 DAT_1028_23f9 1000:9696 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9699 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:96a1 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:96aa FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:96b2 FUN_1000_8b0d READ 1 true 1028:23fb Data6 DAT_1028_23fb 1000:96b6 FUN_1000_8b0d READ 1 true 1028:23fd Data6 DAT_1028_23fd 1000:96c2 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:96ca FUN_1000_8b0d WRITE 0 true 1028:23fb Data6 DAT_1028_23fb 1000:96ce FUN_1000_8b0d WRITE 0 true 1028:23fd Data6 DAT_1028_23fd 1000:96d2 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:96d5 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:96dd FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:96e6 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:96ee FUN_1000_8b0d READ 1 true 1028:23ff Data6 DAT_1028_23ff 1000:96f2 FUN_1000_8b0d READ 1 true 1028:2401 Data6 DAT_1028_2401 1000:96fe FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9706 FUN_1000_8b0d WRITE 0 true 1028:23ff Data6 DAT_1028_23ff 1000:970a FUN_1000_8b0d WRITE 0 true 1028:2401 Data6 DAT_1028_2401 1000:970e FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9711 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9719 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9722 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9729 FUN_1000_8b0d READ 1 true 1028:23b8 Data6 DAT_1028_23b8 1000:972d FUN_1000_8b0d READ 1 true 1028:23ba Data6 DAT_1028_23ba 1000:9739 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9740 FUN_1000_8b0d WRITE 0 true 1028:23b8 Data6 DAT_1028_23b8 1000:9744 FUN_1000_8b0d WRITE 0 true 1028:23ba Data6 DAT_1028_23ba 1000:9748 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:974b FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:9753 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:975c FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9763 FUN_1000_8b0d READ 1 true 1028:23bc Data6 DAT_1028_23bc 1000:9767 FUN_1000_8b0d READ 1 true 1028:23be Data6 DAT_1028_23be 1000:9773 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:977a FUN_1000_8b0d WRITE 0 true 1028:23bc Data6 DAT_1028_23bc 1000:977e FUN_1000_8b0d WRITE 0 true 1028:23be Data6 DAT_1028_23be 1000:9782 FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:9785 FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:978d FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:9796 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:979d FUN_1000_8b0d READ 1 true 1028:23b0 Data6 DAT_1028_23b0 1000:97a1 FUN_1000_8b0d READ 1 true 1028:23b2 Data6 DAT_1028_23b2 1000:97ad FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:97b4 FUN_1000_8b0d WRITE 0 true 1028:23b0 Data6 DAT_1028_23b0 1000:97b8 FUN_1000_8b0d WRITE 0 true 1028:23b2 Data6 DAT_1028_23b2 1000:97bc FUN_1000_8b0d DATA 1 true Stack[0x6] - 1000:97bf FUN_1000_8b0d DATA 1 true Stack[0x8] - 1000:97c7 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:97d0 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:97d7 FUN_1000_8b0d READ 1 true 1028:23b4 Data6 DAT_1028_23b4 1000:97db FUN_1000_8b0d READ 1 true 1028:23b6 Data6 DAT_1028_23b6 1000:97e7 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:97ee FUN_1000_8b0d WRITE 0 true 1028:23b4 Data6 DAT_1028_23b4 1000:97f2 FUN_1000_8b0d WRITE 0 true 1028:23b6 Data6 DAT_1028_23b6 1000:97f6 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:97fd FUN_1000_8b0d READ 1 true 1028:23b0 Data6 DAT_1028_23b0 1000:9801 FUN_1000_8b0d READ 1 true 1028:23b2 Data6 DAT_1028_23b2 1000:9805 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:980c FUN_1000_8b0d READ 1 true 1028:23b8 Data6 DAT_1028_23b8 1000:9810 FUN_1000_8b0d READ 1 true 1028:23ba Data6 DAT_1028_23ba 1000:9816 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:981e Code1 LAB_1000_981e 1000:9818 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9870 Code1 LAB_1000_9870 1000:981c FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:9870 Code1 LAB_1000_9870 1000:981e FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9825 FUN_1000_8b0d READ 1 true 1028:23b0 Data6 DAT_1028_23b0 1000:9829 FUN_1000_8b0d READ 1 true 1028:23b2 Data6 DAT_1028_23b2 1000:9837 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:983e FUN_1000_8b0d WRITE 0 true 1028:23a0 Data6 DAT_1028_23a0 1000:9842 FUN_1000_8b0d WRITE 0 true 1028:23a2 Data6 DAT_1028_23a2 1000:9846 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:984d FUN_1000_8b0d READ 1 true 1028:23b8 Data6 DAT_1028_23b8 1000:9851 FUN_1000_8b0d READ 1 true 1028:23ba Data6 DAT_1028_23ba 1000:985f FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9866 FUN_1000_8b0d WRITE 0 true 1028:23a8 Data6 DAT_1028_23a8 1000:986a FUN_1000_8b0d WRITE 0 true 1028:23aa Data6 DAT_1028_23aa 1000:986e FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:98c0 Code1 LAB_1000_98c0 1000:9870 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9877 FUN_1000_8b0d READ 1 true 1028:23b8 Data6 DAT_1028_23b8 1000:987b FUN_1000_8b0d READ 1 true 1028:23ba Data6 DAT_1028_23ba 1000:9889 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9890 FUN_1000_8b0d WRITE 0 true 1028:23a0 Data6 DAT_1028_23a0 1000:9894 FUN_1000_8b0d WRITE 0 true 1028:23a2 Data6 DAT_1028_23a2 1000:9898 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:989f FUN_1000_8b0d READ 1 true 1028:23b0 Data6 DAT_1028_23b0 1000:98a3 FUN_1000_8b0d READ 1 true 1028:23b2 Data6 DAT_1028_23b2 1000:98b1 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:98b8 FUN_1000_8b0d WRITE 0 true 1028:23a8 Data6 DAT_1028_23a8 1000:98bc FUN_1000_8b0d WRITE 0 true 1028:23aa Data6 DAT_1028_23aa 1000:98c0 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:98c7 FUN_1000_8b0d READ 1 true 1028:23b4 Data6 DAT_1028_23b4 1000:98cb FUN_1000_8b0d READ 1 true 1028:23b6 Data6 DAT_1028_23b6 1000:98cf FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:98d6 FUN_1000_8b0d READ 1 true 1028:23bc Data6 DAT_1028_23bc 1000:98da FUN_1000_8b0d READ 1 true 1028:23be Data6 DAT_1028_23be 1000:98e0 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:98e8 Code1 LAB_1000_98e8 1000:98e2 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:993a Code1 LAB_1000_993a 1000:98e6 FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:993a Code1 LAB_1000_993a 1000:98e8 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:98ef FUN_1000_8b0d READ 1 true 1028:23b4 Data6 DAT_1028_23b4 1000:98f3 FUN_1000_8b0d READ 1 true 1028:23b6 Data6 DAT_1028_23b6 1000:9901 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9908 FUN_1000_8b0d WRITE 0 true 1028:23a4 Data6 DAT_1028_23a4 1000:990c FUN_1000_8b0d WRITE 0 true 1028:23a6 Data6 DAT_1028_23a6 1000:9910 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9917 FUN_1000_8b0d READ 1 true 1028:23bc Data6 DAT_1028_23bc 1000:991b FUN_1000_8b0d READ 1 true 1028:23be Data6 DAT_1028_23be 1000:9929 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9930 FUN_1000_8b0d WRITE 0 true 1028:23ac Data6 DAT_1028_23ac 1000:9934 FUN_1000_8b0d WRITE 0 true 1028:23ae Data6 DAT_1028_23ae 1000:9938 FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:998a Code1 LAB_1000_998a 1000:993a FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9941 FUN_1000_8b0d READ 1 true 1028:23bc Data6 DAT_1028_23bc 1000:9945 FUN_1000_8b0d READ 1 true 1028:23be Data6 DAT_1028_23be 1000:9953 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:995a FUN_1000_8b0d WRITE 0 true 1028:23a4 Data6 DAT_1028_23a4 1000:995e FUN_1000_8b0d WRITE 0 true 1028:23a6 Data6 DAT_1028_23a6 1000:9962 FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9969 FUN_1000_8b0d READ 1 true 1028:23b4 Data6 DAT_1028_23b4 1000:996d FUN_1000_8b0d READ 1 true 1028:23b6 Data6 DAT_1028_23b6 1000:997b FUN_1000_8b0d DATA 1 true Stack[-0x12] - 1000:9982 FUN_1000_8b0d WRITE 0 true 1028:23ac Data6 DAT_1028_23ac 1000:9986 FUN_1000_8b0d WRITE 0 true 1028:23ae Data6 DAT_1028_23ae 1000:998a FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:999b FUN_1000_8b0d CONDITIONAL_JUMP 0 true 1000:99b1 Code1 LAB_1000_99b1 1000:999d FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:99aa FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:99af FUN_1000_8b0d UNCONDITIONAL_JUMP 0 true 1000:99c3 Code1 LAB_1000_99c3 1000:99b1 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:99be FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:99c3 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:99d0 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:99d5 FUN_1000_8b0d DATA 1 true Stack[0x4] - 1000:99e4 FUN_1000_8b0d DATA 0 true Stack[-0x4] - 1000:99e7 FUN_1000_8b0d UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:99f4 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a01 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9a2f Code1 LAB_1000_9a2f 1000:9a09 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9a2f Code1 LAB_1000_9a2f 1000:9a18 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a1c FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:7ed9 Code1 FUN_1000_7ed9 FUN_1000_7ed9 1000:9a28 FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:8b0d Code1 FUN_1000_8b0d FUN_1000_8b0d 1000:9a2d FUN_1000_99f0 UNCONDITIONAL_JUMP 0 true 1000:9a68 Code1 LAB_1000_9a68 1000:9a2f FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a3c FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9a68 Code1 LAB_1000_9a68 1000:9a44 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9a68 Code1 LAB_1000_9a68 1000:9a53 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a57 FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:7ed9 Code1 FUN_1000_7ed9 FUN_1000_7ed9 1000:9a63 FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:8b0d Code1 FUN_1000_8b0d FUN_1000_8b0d 1000:9a68 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a75 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9aa3 Code1 LAB_1000_9aa3 1000:9a7d FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9aa3 Code1 LAB_1000_9aa3 1000:9a8c FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9a90 FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:7ed9 Code1 FUN_1000_7ed9 FUN_1000_7ed9 1000:9a9c FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:8b0d Code1 FUN_1000_8b0d FUN_1000_8b0d 1000:9aa1 FUN_1000_99f0 UNCONDITIONAL_JUMP 0 true 1000:9adc Code1 LAB_1000_9adc 1000:9aa3 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9ab0 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9adc Code1 LAB_1000_9adc 1000:9ab8 FUN_1000_99f0 CONDITIONAL_JUMP 0 true 1000:9adc Code1 LAB_1000_9adc 1000:9ac7 FUN_1000_99f0 DATA 1 true Stack[0x4] - 1000:9acb FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:7ed9 Code1 FUN_1000_7ed9 FUN_1000_7ed9 1000:9ad7 FUN_1000_99f0 UNCONDITIONAL_CALL 0 true 1000:8b0d Code1 FUN_1000_8b0d FUN_1000_8b0d 1000:9ae4 FUN_1000_9ae0 DATA 1 true Stack[0x4] - 1000:9af5 FUN_1000_9ae0 DATA 1 true Stack[0x14] - 1000:9af8 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b01 Code1 LAB_1000_9b01 1000:9afa FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9afc FUN_1000_9ae0 DATA 1 true Stack[0x12] - 1000:9aff FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b01 FUN_1000_9ae0 DATA 1 true Stack[0x4] - 1000:9b12 FUN_1000_9ae0 DATA 1 true Stack[0x10] - 1000:9b15 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b1e Code1 LAB_1000_9b1e 1000:9b17 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b19 FUN_1000_9ae0 DATA 1 true Stack[0xe] - 1000:9b1c FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b1e FUN_1000_9ae0 DATA 1 true Stack[0x4] - 1000:9b2f FUN_1000_9ae0 DATA 1 true Stack[0xc] - 1000:9b32 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b3b Code1 LAB_1000_9b3b 1000:9b34 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b36 FUN_1000_9ae0 DATA 1 true Stack[0xa] - 1000:9b39 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b3b FUN_1000_9ae0 DATA 1 true Stack[0x4] - 1000:9b4c FUN_1000_9ae0 DATA 1 true Stack[0x8] - 1000:9b4f FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b58 Code1 LAB_1000_9b58 1000:9b51 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b53 FUN_1000_9ae0 DATA 1 true Stack[0x6] - 1000:9b56 FUN_1000_9ae0 CONDITIONAL_JUMP 0 true 1000:9b5e Code1 LAB_1000_9b5e 1000:9b58 FUN_1000_9ae0 DATA 0 true Stack[-0x3] - 1000:9b5c FUN_1000_9ae0 UNCONDITIONAL_JUMP 0 true 1000:9b62 Code1 LAB_1000_9b62 1000:9b5e FUN_1000_9ae0 DATA 0 true Stack[-0x3] - 1000:9b62 FUN_1000_9ae0 DATA 1 true Stack[-0x3] - 1000:9b6d FUN_1000_9b69 READ 1 true 1028:07db Data6 DAT_1028_07db 1000:9b70 FUN_1000_9b69 READ 1 true 1028:07dd Data6 DAT_1028_07dd 1000:9b74 FUN_1000_9b69 DATA 1 true Stack[0x14] - 1000:9b77 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9b80 Code1 LAB_1000_9b80 1000:9b79 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9b7b FUN_1000_9b69 DATA 1 true Stack[0x12] - 1000:9b7e FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9b80 FUN_1000_9b69 READ 1 true 1028:07df Data6 DAT_1028_07df 1000:9b83 FUN_1000_9b69 READ 1 true 1028:07e1 Data6 DAT_1028_07e1 1000:9b87 FUN_1000_9b69 DATA 1 true Stack[0x10] - 1000:9b8a FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9b93 Code1 LAB_1000_9b93 1000:9b8c FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9b8e FUN_1000_9b69 DATA 1 true Stack[0xe] - 1000:9b91 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9b93 FUN_1000_9b69 READ 1 true 1028:07db Data6 DAT_1028_07db 1000:9b96 FUN_1000_9b69 READ 1 true 1028:07dd Data6 DAT_1028_07dd 1000:9b9a FUN_1000_9b69 DATA 1 true Stack[0xc] - 1000:9b9d FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9ba6 Code1 LAB_1000_9ba6 1000:9b9f FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9ba1 FUN_1000_9b69 DATA 1 true Stack[0xa] - 1000:9ba4 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9ba6 FUN_1000_9b69 READ 1 true 1028:07df Data6 DAT_1028_07df 1000:9ba9 FUN_1000_9b69 READ 1 true 1028:07e1 Data6 DAT_1028_07e1 1000:9bad FUN_1000_9b69 DATA 1 true Stack[0x8] - 1000:9bb0 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bb9 Code1 LAB_1000_9bb9 1000:9bb2 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9bb4 FUN_1000_9b69 DATA 1 true Stack[0x6] - 1000:9bb7 FUN_1000_9b69 CONDITIONAL_JUMP 0 true 1000:9bbf Code1 LAB_1000_9bbf 1000:9bb9 FUN_1000_9b69 DATA 0 true Stack[-0x3] - 1000:9bbd FUN_1000_9b69 UNCONDITIONAL_JUMP 0 true 1000:9bc3 Code1 LAB_1000_9bc3 1000:9bbf FUN_1000_9b69 DATA 0 true Stack[-0x3] - 1000:9bc3 FUN_1000_9b69 DATA 1 true Stack[-0x3] - 1000:9bcd FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9bd8 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9be1 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:9be6 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9bf1 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:9bf6 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c01 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9c06 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c11 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9c16 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c1d FUN_1000_9bca DATA 0 true Stack[-0xc] - 1000:9c21 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9c26 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c35 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:9c3a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c41 FUN_1000_9bca READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:9c44 FUN_1000_9bca READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:9c53 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:9c5e FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9c6f FUN_1000_9bca READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:9c72 FUN_1000_9bca READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:9c81 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:9c8c FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9cad FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9cba FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9cd1 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9cee FUN_1000_9bca READ 0 true 1028:085b Data6 DAT_1028_085b 1000:9cf2 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9cf7 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d06 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9d0b FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d26 FUN_1000_9bca DATA 0 true Stack[-0x20] - 1000:9d2a FUN_1000_9bca DATA 0 true Stack[-0x22] - 1000:9d33 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:9d38 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d3f FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d4a FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9d4f FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d70 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:9d75 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d7c FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9d87 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9d8c FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9dad FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:9db2 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9dc0 FUN_1000_9bca CONDITIONAL_JUMP 0 true 1000:9de1 Code1 LAB_1000_9de1 1000:9dc8 FUN_1000_9bca CONDITIONAL_JUMP 0 true 1000:9dd2 Code1 LAB_1000_9dd2 1000:9dd0 FUN_1000_9bca UNCONDITIONAL_JUMP 0 true 1000:9de1 Code1 LAB_1000_9de1 1000:9dd5 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9de1 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9de8 FUN_1000_9bca DATA 0 true Stack[-0x20] - 1000:9dec FUN_1000_9bca DATA 0 true Stack[-0x22] - 1000:9e05 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:9e0a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e15 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9e1a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e25 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9e2a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e35 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:9e3a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e41 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:9e46 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e4d FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:9e52 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e59 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:9e5e FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e65 FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:9e6a FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e75 FUN_1000_9bca DATA 1 true Stack[0x4] - 1000:9e7c FUN_1000_9bca UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:9e88 FUN_1000_9e85 READ 0 true 1028:3371 Data6 DAT_1028_3371 1000:9e8d FUN_1000_9e85 CONDITIONAL_JUMP 0 true 1000:9ec5 Code1 LAB_1000_9ec5 1000:9e8f FUN_1000_9e85 READ 0 true 1028:33c4 Data6 DAT_1028_33c4 1000:9e94 FUN_1000_9e85 CONDITIONAL_JUMP 0 true 1000:9ec5 Code1 LAB_1000_9ec5 1000:9e96 FUN_1000_9e85 READ 0 true 1028:3417 Data6 DAT_1028_3417 1000:9e9b FUN_1000_9e85 CONDITIONAL_JUMP 0 true 1000:9ec5 Code1 LAB_1000_9ec5 1000:9e9d FUN_1000_9e85 READ 0 true 1028:346a Data6 DAT_1028_346a 1000:9ea2 FUN_1000_9e85 CONDITIONAL_JUMP 0 true 1000:9ec5 Code1 LAB_1000_9ec5 1000:9ea4 FUN_1000_9e85 READ 0 true 1028:34bd Data6 DAT_1028_34bd 1000:9ea9 FUN_1000_9e85 CONDITIONAL_JUMP 0 true 1000:9ec5 Code1 LAB_1000_9ec5 1000:9ead FUN_1000_9e85 WRITE 0 true 1028:0851 Data6 DAT_1028_0851 1000:9eb0 FUN_1000_9e85 WRITE 0 true 1028:0853 Data6 DAT_1028_0853 1000:9eb3 FUN_1000_9e85 WRITE 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:9eb8 FUN_1000_9e85 DATA 1 true Stack[0x4] - 1000:9ec5 FUN_1000_9e85 WRITE 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:9eca FUN_1000_9e85 DATA 1 true Stack[0x4] - 1000:9ed7 FUN_1000_9e85 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:9edd FUN_1000_9e85 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:9ee3 FUN_1000_9e85 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:9ee9 FUN_1000_9e85 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:9f66 FUN_1000_9e85 DATA 1 true Stack[0x4] - 1000:9f6a FUN_1000_9e85 UNCONDITIONAL_CALL 0 true 1000:9bca Code1 FUN_1000_9bca FUN_1000_9bca 1000:9f76 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9f81 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9f8a FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:9f8f FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9f9a FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:9f9f FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9faa FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9faf FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9fba FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9fbf FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9fc6 FUN_1000_9f73 DATA 0 true Stack[-0xc] - 1000:9fca FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:9fcf FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9fde FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:9fe3 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:9fea FUN_1000_9f73 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:9fed FUN_1000_9f73 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:9ffc FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a007 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a018 FUN_1000_9f73 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:a01b FUN_1000_9f73 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:a02a FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a035 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a046 FUN_1000_9f73 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:a049 FUN_1000_9f73 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:a05c FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a061 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a072 FUN_1000_9f73 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:a075 FUN_1000_9f73 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:a088 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a08d FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a0a4 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a0b0 Code1 LAB_1000_a0b0 1000:a0a6 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a0f8 Code1 LAB_1000_a0f8 1000:a0ae FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a0f8 Code1 LAB_1000_a0f8 1000:a0b0 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a0d1 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a0d8 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a0ef FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a0f6 FUN_1000_9f73 UNCONDITIONAL_JUMP 0 true 1000:a11c Code1 LAB_1000_a11c 1000:a0f8 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a10f FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a11c FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a129 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a135 Code1 LAB_1000_a135 1000:a12b FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a17d Code1 LAB_1000_a17d 1000:a133 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a17d Code1 LAB_1000_a17d 1000:a135 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a156 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a15d FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a174 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a17b FUN_1000_9f73 UNCONDITIONAL_JUMP 0 true 1000:a1a1 Code1 LAB_1000_a1a1 1000:a17d FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a194 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a1a1 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a1b4 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a1bd Code1 LAB_1000_a1bd 1000:a1c3 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a1ca FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a1dd FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a1e6 Code1 LAB_1000_a1e6 1000:a1ec FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a1f7 FUN_1000_9f73 READ 0 true 1028:085b Data6 DAT_1028_085b 1000:a1fb FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a200 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a20f FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a214 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a22f FUN_1000_9f73 DATA 0 true Stack[-0x20] - 1000:a233 FUN_1000_9f73 DATA 0 true Stack[-0x22] - 1000:a23c FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a241 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a248 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a253 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a258 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a279 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a27e FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a285 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a290 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a295 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a2b6 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a2bb FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a2c9 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a2ea Code1 LAB_1000_a2ea 1000:a2d1 FUN_1000_9f73 CONDITIONAL_JUMP 0 true 1000:a2db Code1 LAB_1000_a2db 1000:a2d9 FUN_1000_9f73 UNCONDITIONAL_JUMP 0 true 1000:a2ea Code1 LAB_1000_a2ea 1000:a2de FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a2ea FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a2f1 FUN_1000_9f73 DATA 0 true Stack[-0x20] - 1000:a2f5 FUN_1000_9f73 DATA 0 true Stack[-0x22] - 1000:a30e FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a313 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a31e FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a323 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a32e FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a333 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a33e FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a343 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a34a FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:a34f FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a356 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a35b FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a362 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a367 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a36e FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a373 FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a37e FUN_1000_9f73 DATA 1 true Stack[0x4] - 1000:a385 FUN_1000_9f73 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:a391 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a39c FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3a5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:a3aa FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3b5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:a3ba FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3c5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:a3ca FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3d5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:a3da FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3e1 FUN_1000_a38e DATA 0 true Stack[-0xc] - 1000:a3e5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:a3ea FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a3f9 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:a3fe FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a405 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a421 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a42c FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a452 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:a45d FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a47e FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a48b FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a4a2 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a4bb FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a4da FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a4e1 FUN_1000_a38e READ 0 true 1028:085b Data6 DAT_1028_085b 1000:a4e5 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a4ea FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a4f9 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a4fe FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a519 FUN_1000_a38e DATA 0 true Stack[-0x20] - 1000:a51d FUN_1000_a38e DATA 0 true Stack[-0x22] - 1000:a526 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a52b FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a539 FUN_1000_a38e CONDITIONAL_JUMP 0 true 1000:a55a Code1 LAB_1000_a55a 1000:a541 FUN_1000_a38e CONDITIONAL_JUMP 0 true 1000:a54b Code1 LAB_1000_a54b 1000:a549 FUN_1000_a38e UNCONDITIONAL_JUMP 0 true 1000:a55a Code1 LAB_1000_a55a 1000:a54e FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a55a FUN_1000_a38e DATA 0 true Stack[0x6] - 1000:a55e FUN_1000_a38e CONDITIONAL_JUMP 0 true 1000:a589 Code1 LAB_1000_a589 1000:a560 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a584 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:a589 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a594 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a599 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5a4 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a5a9 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5b4 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:a5b9 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5c0 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:a5c5 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5cc FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a5d1 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5d8 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a5dd FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5e4 FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:a5e9 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5f4 FUN_1000_a38e DATA 1 true Stack[0x4] - 1000:a5fb FUN_1000_a38e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:a608 FUN_1000_a604 DATA 1 true Stack[0x4] - 1000:a613 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:a618 FUN_1000_a604 DATA 0 true Stack[-0x20] - 1000:a61b FUN_1000_a604 DATA 0 true Stack[-0x16] - 1000:a620 FUN_1000_a604 DATA 0 true Stack[-0x14] - 1000:a625 FUN_1000_a604 UNCONDITIONAL_JUMP 0 true 1000:a62f Code1 LAB_1000_a62f 1000:a627 FUN_1000_a604 DATA 0 true Stack[-0x16] - 1000:a62b FUN_1000_a604 DATA 0 true Stack[-0x14] - 1000:a62f FUN_1000_a604 DATA 1 true Stack[-0x16] - 1000:a632 FUN_1000_a604 DATA 1 true Stack[-0x14] - 1000:a640 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:a64b FUN_1000_a604 DATA 0 true Stack[-0x18] - 1000:a64e FUN_1000_a604 DATA 1 true Stack[-0x18] - 1000:a654 FUN_1000_a604 DATA 0 true Stack[-0x1c] - 1000:a657 FUN_1000_a604 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:a663 FUN_1000_a604 DATA 0 true Stack[-0x1a] - 1000:a666 FUN_1000_a604 DATA 1 true Stack[-0x1a] - 1000:a66c FUN_1000_a604 DATA 0 true Stack[-0x1e] - 1000:a66f FUN_1000_a604 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:a67d FUN_1000_a604 DATA 1 true Stack[-0x14] - 1000:a680 FUN_1000_a604 CONDITIONAL_JUMP 0 true 1000:a689 Code1 LAB_1000_a689 1000:a682 FUN_1000_a604 CONDITIONAL_JUMP 0 true 1000:a6a9 Code1 LAB_1000_a6a9 1000:a684 FUN_1000_a604 DATA 1 true Stack[-0x16] - 1000:a687 FUN_1000_a604 CONDITIONAL_JUMP 0 true 1000:a6a9 Code1 LAB_1000_a6a9 1000:a689 FUN_1000_a604 DATA 0 true Stack[-0x20] - 1000:a68c FUN_1000_a604 DATA 0 true Stack[-0x18] - 1000:a68f FUN_1000_a604 DATA 0 true Stack[-0x1a] - 1000:a692 FUN_1000_a604 DATA 1 true Stack[-0x1c] - 1000:a695 FUN_1000_a604 DATA 1 true Stack[-0x18] - 1000:a69a FUN_1000_a604 DATA 1 true Stack[-0x1e] - 1000:a69d FUN_1000_a604 DATA 1 true Stack[-0x1a] - 1000:a6a2 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:a6a7 FUN_1000_a604 UNCONDITIONAL_JUMP 0 true 1000:a6c7 Code1 LAB_1000_a6c7 1000:a6a9 FUN_1000_a604 DATA 0 true Stack[-0x20] - 1000:a6ac FUN_1000_a604 DATA 0 true Stack[-0x18] - 1000:a6af FUN_1000_a604 DATA 0 true Stack[-0x1a] - 1000:a6b2 FUN_1000_a604 DATA 1 true Stack[-0x1c] - 1000:a6b5 FUN_1000_a604 DATA 1 true Stack[-0x18] - 1000:a6ba FUN_1000_a604 DATA 1 true Stack[-0x1e] - 1000:a6bd FUN_1000_a604 DATA 1 true Stack[-0x1a] - 1000:a6c2 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:a6c7 FUN_1000_a604 DATA 0 true Stack[-0x20] - 1000:a6ca FUN_1000_a604 DATA 0 true Stack[-0x18] - 1000:a6cd FUN_1000_a604 DATA 0 true Stack[-0x1a] - 1000:a6d0 FUN_1000_a604 DATA 1 true Stack[-0x1c] - 1000:a6d3 FUN_1000_a604 DATA 1 true Stack[-0x18] - 1000:a6d8 FUN_1000_a604 DATA 1 true Stack[-0x1e] - 1000:a6db FUN_1000_a604 DATA 1 true Stack[-0x1a] - 1000:a6e0 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:a6e5 FUN_1000_a604 DATA 0 true Stack[-0x14] - 1000:a6e9 FUN_1000_a604 CONDITIONAL_JUMP 0 true 1000:a6ee Code1 LAB_1000_a6ee 1000:a6eb FUN_1000_a604 UNCONDITIONAL_JUMP 0 true 1000:a627 Code1 LAB_1000_a627 1000:a6ee FUN_1000_a604 DATA 0 true Stack[-0x16] - 1000:a6f2 FUN_1000_a604 CONDITIONAL_JUMP 0 true 1000:a6f7 Code1 LAB_1000_a6f7 1000:a6f4 FUN_1000_a604 UNCONDITIONAL_JUMP 0 true 1000:a627 Code1 LAB_1000_a627 1000:a6f7 FUN_1000_a604 DATA 1 true Stack[0x4] - 1000:a702 FUN_1000_a604 DATA 0 true Stack[-0x20] - 1000:a705 FUN_1000_a604 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:a711 FUN_1000_a70e WRITE 0 true 1028:07d0 Data6 DAT_1028_07d0 1000:a716 FUN_1000_a70e DATA 1 true Stack[0x4] - 1000:a723 FUN_1000_a70e WRITE 0 true 1028:07c9 Data6 DAT_1028_07c9 1000:a730 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a734 FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a739 Code1 LAB_1000_a739 1000:a736 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a739 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a73f FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a743 FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:a748 FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a74c FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a751 Code1 LAB_1000_a751 1000:a74e FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a751 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a759 FUN_1000_a72c READ 1 true 1028:09f1 Data6 DAT_1028_09f1 1000:a75d FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a766 FUN_1000_a72c DATA 1 true Stack[-0x4] - 1000:a76f FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a77f FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a783 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a74e Code1 LAB_1000_a74e 1000:a785 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a789 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a736 Code1 LAB_1000_a736 1000:a78b FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a78f FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a794 Code1 LAB_1000_a794 1000:a791 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a794 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a79d FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a7a1 FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:a7a6 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a7aa FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a791 Code1 LAB_1000_a791 1000:a7b0 FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a7b4 FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:a7b9 FUN_1000_a72c WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:a7be FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a7c2 FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a7c7 Code1 LAB_1000_a7c7 1000:a7c4 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a7c7 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a7ca FUN_1000_a72c READ 1 true 1028:07d0 Data6 DAT_1028_07d0 1000:a7ce FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a7d3 Code1 LAB_1000_a7d3 1000:a7d0 FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a8b5 Code1 LAB_1000_a8b5 1000:a7d3 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a7d6 FUN_1000_a72c WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:a7d9 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a7e5 FUN_1000_a72c WRITE 0 true 1028:0986 Data6 DAT_1028_0986 1000:a7e9 FUN_1000_a72c WRITE 0 true 1028:0988 Data6 DAT_1028_0988 1000:a7ed FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a7f9 FUN_1000_a72c WRITE 0 true 1028:0996 Data6 DAT_1028_0996 1000:a7fd FUN_1000_a72c WRITE 0 true 1028:0998 Data6 DAT_1028_0998 1000:a801 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a808 FUN_1000_a72c WRITE 0 true 1028:09a3 Data6 DAT_1028_09a3 1000:a80d FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a818 FUN_1000_a72c WRITE 0 true 1028:09a8 Data6 DAT_1028_09a8 1000:a820 FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a824 FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:a829 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a830 FUN_1000_a72c WRITE 0 true 1028:0818 Data6 DAT_1028_0818 1000:a835 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a839 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a84c Code1 LAB_1000_a84c 1000:a83b FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a844 FUN_1000_a72c WRITE 0 true 1028:0823 Data6 DAT_1028_0823 1000:a84a FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a85b Code1 LAB_1000_a85b 1000:a84c FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a855 FUN_1000_a72c WRITE 0 true 1028:0823 Data6 DAT_1028_0823 1000:a85b FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a85f FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:a604 Code1 FUN_1000_a604 FUN_1000_a604 1000:a864 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a86e FUN_1000_a72c WRITE 0 true 1028:083d Data6 DAT_1028_083d 1000:a874 FUN_1000_a72c WRITE 0 true 1028:083f Data6 DAT_1028_083f 1000:a87a FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a881 FUN_1000_a72c WRITE 0 true 1028:081c Data6 DAT_1028_081c 1000:a886 FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a88a FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a88f Code1 LAB_1000_a88f 1000:a88c FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a88f FUN_1000_a72c DATA 1 true Stack[-0x4] - 1000:a896 FUN_1000_a72c DATA 1 true Stack[-0x3] - 1000:a89e FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a8af FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a8b3 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a88c Code1 LAB_1000_a88c 1000:a8b5 FUN_1000_a72c DATA 0 true Stack[-0x3] - 1000:a8b9 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a8be Code1 LAB_1000_a8be 1000:a8bb FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a7c4 Code1 LAB_1000_a7c4 1000:a8be FUN_1000_a72c WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:a8c3 FUN_1000_a72c WRITE 0 true 1028:07d2 Data6 DAT_1028_07d2 1000:a8c8 FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a8cc FUN_1000_a72c UNCONDITIONAL_JUMP 0 true 1000:a8d1 Code1 LAB_1000_a8d1 1000:a8ce FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a8d1 FUN_1000_a72c DATA 1 true Stack[-0x4] - 1000:a8d7 FUN_1000_a72c DATA 1 true Stack[0x4] - 1000:a8db FUN_1000_a72c UNCONDITIONAL_CALL 0 true 1000:7e92 Code1 FUN_1000_7e92 FUN_1000_7e92 1000:a8e0 FUN_1000_a72c DATA 0 true Stack[-0x4] - 1000:a8e4 FUN_1000_a72c CONDITIONAL_JUMP 0 true 1000:a8ce Code1 LAB_1000_a8ce 1000:a8f5 FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1228:0050 EXTERNAL _LCREAT _LCREAT 1000:a8fa FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a8fd FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a901 FUN_1000_a8ea CONDITIONAL_JUMP 0 true 1000:a906 Code1 LAB_1000_a906 1000:a903 FUN_1000_a8ea UNCONDITIONAL_JUMP 0 true 1000:a998 Code1 LAB_1000_a998 1000:a906 FUN_1000_a8ea DATA 0 true Stack[-0x10a] - 1000:a911 FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1020:16c9 Code5 FUN_1020_16c9 FUN_1020_16c9 1000:a916 FUN_1000_a8ea DATA 0 true Stack[-0x4] - 1000:a91b FUN_1000_a8ea UNCONDITIONAL_JUMP 0 true 1000:a920 Code1 LAB_1000_a920 1000:a91d FUN_1000_a8ea DATA 0 true Stack[-0x4] - 1000:a920 FUN_1000_a8ea DATA 1 true Stack[-0x4] - 1000:a926 FUN_1000_a8ea READ 1 true 1028:087e Data6 DAT_1028_087e 1000:a926 FUN_1000_a8ea READ 1 false 1028:0882 Data6 DAT_1028_0882 1000:a92a FUN_1000_a8ea READ 1 true 1028:0880 Data6 DAT_1028_0880 1000:a92a FUN_1000_a8ea READ 1 false 1028:0884 Data6 DAT_1028_0884 1000:a92e FUN_1000_a8ea READ 1 true 1028:0010 Data6 s_IWIKTDK_Highscores_1028_0010 1000:a932 FUN_1000_a8ea READ 1 true 1028:0012 Data6 s_IKTDK_Highscores_1028_0010+2 1000:a936 FUN_1000_a8ea DATA 1 true Stack[-0x4] - 1000:a942 FUN_1000_a8ea DATA 1 true Stack[-0x4] - 1000:a946 FUN_1000_a8ea DATA 0 true Stack[-0x10a] - 1000:a94c FUN_1000_a8ea DATA 1 true Stack[-0x4] - 1000:a956 FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:a95b FUN_1000_a8ea DATA 0 true Stack[-0x4] - 1000:a95f FUN_1000_a8ea CONDITIONAL_JUMP 0 true 1000:a91d Code1 LAB_1000_a91d 1000:a961 FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a96b FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1228:0058 EXTERNAL _LWRITE _LWRITE 1000:a970 FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a973 FUN_1000_a8ea DATA 0 true Stack[-0x2e] - 1000:a97a FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1228:0058 EXTERNAL _LWRITE _LWRITE 1000:a97f FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a982 FUN_1000_a8ea DATA 0 true Stack[-0x10a] - 1000:a98b FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1228:0058 EXTERNAL _LWRITE _LWRITE 1000:a990 FUN_1000_a8ea DATA 0 true Stack[-0x6] - 1000:a993 FUN_1000_a8ea UNCONDITIONAL_CALL 0 true 1228:0048 EXTERNAL _LCLOSE _LCLOSE 1000:a9a0 FUN_1000_a99c DATA 0 true Stack[-0x7] - 1000:a9ab FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:0054 EXTERNAL _LOPEN _LOPEN 1000:a9b0 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:a9b3 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:a9b7 FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:a9c8 Code1 LAB_1000_a9c8 1000:a9c0 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:0054 EXTERNAL _LOPEN _LOPEN 1000:a9c5 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:a9c8 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:a9cc FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:a9d1 Code1 LAB_1000_a9d1 1000:a9ce FUN_1000_a99c UNCONDITIONAL_JUMP 0 true 1000:aa68 Code1 LAB_1000_aa68 1000:a9d1 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:a9d4 FUN_1000_a99c DATA 0 true Stack[-0x17] - 1000:a9db FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:004c EXTERNAL _LREAD _LREAD 1000:a9e0 FUN_1000_a99c DATA 0 true Stack[-0x13f] - 1000:a9e6 FUN_1000_a99c DATA 0 true Stack[-0x17] - 1000:a9ed FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1020:0b00 Code5 FUN_1020_0b00 FUN_1020_0b00 1000:a9f2 FUN_1000_a99c DATA 0 true Stack[-0x23f] - 1000:a9ff FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1020:0b00 Code5 FUN_1020_0b00 FUN_1020_0b00 1000:aa04 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1020:0ac3 Code5 FUN_1020_0ac3 FUN_1020_0ac3 1000:aa09 FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:aa60 Code1 LAB_1000_aa60 1000:aa0b FUN_1000_a99c DATA 0 true Stack[-0x7] - 1000:aa0f FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:aa12 FUN_1000_a99c DATA 0 true Stack[-0x3f] - 1000:aa19 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:004c EXTERNAL _LREAD _LREAD 1000:aa1e FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:aa29 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:004c EXTERNAL _LREAD _LREAD 1000:aa2e FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aa33 FUN_1000_a99c UNCONDITIONAL_JUMP 0 true 1000:aa38 Code1 LAB_1000_aa38 1000:aa35 FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aa38 FUN_1000_a99c DATA 1 true Stack[-0x4] - 1000:aa44 FUN_1000_a99c READ 1 true 1028:0010 Data6 s_IWIKTDK_Highscores_1028_0010 1000:aa48 FUN_1000_a99c READ 1 true 1028:0012 Data6 s_IKTDK_Highscores_1028_0010+2 1000:aa4c FUN_1000_a99c DATA 1 true Stack[-0x4] - 1000:aa52 FUN_1000_a99c WRITE 0 true 1028:087e Data6 DAT_1028_087e 1000:aa52 FUN_1000_a99c WRITE 0 false 1028:0882 Data6 DAT_1028_0882 1000:aa56 FUN_1000_a99c WRITE 0 true 1028:0880 Data6 DAT_1028_0880 1000:aa56 FUN_1000_a99c WRITE 0 false 1028:0884 Data6 DAT_1028_0884 1000:aa5a FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aa5e FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:aa35 Code1 LAB_1000_aa35 1000:aa60 FUN_1000_a99c DATA 0 true Stack[-0x6] - 1000:aa63 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1228:0048 EXTERNAL _LCLOSE _LCLOSE 1000:aa68 FUN_1000_a99c DATA 0 true Stack[-0x7] - 1000:aa6c FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:aa71 Code1 LAB_1000_aa71 1000:aa6e FUN_1000_a99c UNCONDITIONAL_JUMP 0 true 1000:ab38 Code1 LAB_1000_ab38 1000:aa71 FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aa76 FUN_1000_a99c UNCONDITIONAL_JUMP 0 true 1000:aa7b Code1 LAB_1000_aa7b 1000:aa78 FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aa7e FUN_1000_a99c DATA 1 true Stack[-0x4] - 1000:aa89 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:aa8e FUN_1000_a99c DATA 1 true Stack[-0x4] - 1000:aa94 FUN_1000_a99c WRITE 0 true 1028:087e Data6 DAT_1028_087e 1000:aa98 FUN_1000_a99c WRITE 0 true 1028:0880 Data6 DAT_1028_0880 1000:aa9c FUN_1000_a99c DATA 0 true Stack[-0x4] - 1000:aaa0 FUN_1000_a99c CONDITIONAL_JUMP 0 true 1000:aa78 Code1 LAB_1000_aa78 1000:aaac FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:aabb FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:aaca FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:aad9 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:aae8 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:aaf7 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab06 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab15 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab24 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab33 FUN_1000_a99c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab3f FUN_1000_ab3c READ 0 true 1028:07d2 Data6 DAT_1028_07d2 1000:ab44 FUN_1000_ab3c CONDITIONAL_JUMP 0 true 1000:ab9c Code1 LAB_1000_ab9c 1000:ab46 FUN_1000_ab3c READ 1 true 1028:07d2 Data6 DAT_1028_07d2 1000:ab59 FUN_1000_ab3c UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1000:ab5e FUN_1000_ab3c DATA 1 true Stack[0x4] - 1000:ab71 FUN_1000_ab3c READ 1 true 1028:07d2 Data6 DAT_1028_07d2 1000:ab89 FUN_1000_ab3c UNCONDITIONAL_CALL 0 true 1008:1607 Code2 FUN_1008_1607 FUN_1008_1607 1000:ab90 FUN_1000_ab3c READ 1 true 1028:064e Data6 DAT_1028_064e 1000:ab9c FUN_1000_ab3c DATA 1 true Stack[0x4] - 1000:abb2 FUN_1000_ab3c UNCONDITIONAL_CALL 0 true 1000:5aea Code1 FUN_1000_5aea FUN_1000_5aea 1000:abb9 FUN_1000_ab3c READ 1 true 1028:064e Data6 DAT_1028_064e 1000:abc5 FUN_1000_ab3c DATA 1 true Stack[0x4] - 1000:abdc FUN_1000_ab3c UNCONDITIONAL_CALL 0 true 1018:0e9e Code4 FUN_1018_0e9e FUN_1018_0e9e 1000:abe9 FUN_1000_abe5 DATA 0 true Stack[-0x6] - 1000:abee FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:abf3 Code1 LAB_1000_abf3 1000:abf0 FUN_1000_abe5 DATA 0 true Stack[-0x6] - 1000:abf3 FUN_1000_abe5 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:ac05 FUN_1000_abe5 DATA 1 true Stack[-0x6] - 1000:ac0b FUN_1000_abe5 READ 1 true 1028:0880 Data6 DAT_1028_0880 1000:ac0b FUN_1000_abe5 READ 1 false 1028:0884 Data6 DAT_1028_0884 1000:ac0f FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:ac1f Code1 LAB_1000_ac1f 1000:ac11 FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:ac16 Code1 LAB_1000_ac16 1000:ac13 FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:acb5 Code1 LAB_1000_acb5 1000:ac16 FUN_1000_abe5 READ 1 true 1028:0882 Data6 DAT_1028_0882 1000:ac1a FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:ac1f Code1 LAB_1000_ac1f 1000:ac1c FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:acb5 Code1 LAB_1000_acb5 1000:ac1f FUN_1000_abe5 DATA 1 true Stack[-0x6] - 1000:ac23 FUN_1000_abe5 DATA 0 true Stack[-0xa] - 1000:ac29 FUN_1000_abe5 DATA 1 true Stack[-0xa] - 1000:ac2c FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:ac7b Code1 LAB_1000_ac7b 1000:ac2e FUN_1000_abe5 DATA 0 true Stack[-0x8] - 1000:ac31 FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:ac36 Code1 LAB_1000_ac36 1000:ac33 FUN_1000_abe5 DATA 0 true Stack[-0x8] - 1000:ac36 FUN_1000_abe5 DATA 1 true Stack[-0x8] - 1000:ac3f FUN_1000_abe5 READ 1 true 1028:089e Data6 DAT_1028_089e 1000:ac3f FUN_1000_abe5 READ 1 false 1028:089a Data6 DAT_1028_089a 1000:ac43 FUN_1000_abe5 READ 1 true 1028:08a0 Data6 DAT_1028_08a0 1000:ac43 FUN_1000_abe5 READ 1 false 1028:089c Data6 DAT_1028_089c 1000:ac47 FUN_1000_abe5 DATA 1 true Stack[-0x8] - 1000:ac4d FUN_1000_abe5 WRITE 0 true 1028:08a2 Data6 DAT_1028_08a2 1000:ac4d FUN_1000_abe5 WRITE 0 false 1028:089e Data6 DAT_1028_089e 1000:ac51 FUN_1000_abe5 WRITE 0 true 1028:08a4 Data6 DAT_1028_08a4 1000:ac51 FUN_1000_abe5 WRITE 0 false 1028:08a0 Data6 DAT_1028_08a0 1000:ac55 FUN_1000_abe5 DATA 1 true Stack[-0x8] - 1000:ac62 FUN_1000_abe5 DATA 1 true Stack[-0x8] - 1000:ac6e FUN_1000_abe5 UNCONDITIONAL_CALL 0 true 1020:0891 Code5 FUN_1020_0891 FUN_1020_0891 1000:ac73 FUN_1000_abe5 DATA 1 true Stack[-0x8] - 1000:ac76 FUN_1000_abe5 DATA 1 true Stack[-0xa] - 1000:ac79 FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:ac33 Code1 LAB_1000_ac33 1000:ac7b FUN_1000_abe5 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:ac8d FUN_1000_abe5 DATA 1 true Stack[-0x6] - 1000:ac93 FUN_1000_abe5 WRITE 0 true 1028:0882 Data6 DAT_1028_0882 1000:ac97 FUN_1000_abe5 WRITE 0 true 1028:0884 Data6 DAT_1028_0884 1000:ac9b FUN_1000_abe5 DATA 1 true Stack[-0x6] - 1000:ac9e FUN_1000_abe5 WRITE 0 true 1028:07d2 Data6 DAT_1028_07d2 1000:aca1 FUN_1000_abe5 DATA 1 true Stack[0x4] - 1000:aca5 FUN_1000_abe5 UNCONDITIONAL_CALL 0 true 1000:ab3c Code1 FUN_1000_ab3c FUN_1000_ab3c 1000:acaa FUN_1000_abe5 DATA 1 true Stack[0x4] - 1000:acae FUN_1000_abe5 UNCONDITIONAL_CALL 0 true 1000:a8ea Code1 FUN_1000_a8ea FUN_1000_a8ea 1000:acb3 FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:acbe Code1 LAB_1000_acbe 1000:acb5 FUN_1000_abe5 DATA 0 true Stack[-0x6] - 1000:acb9 FUN_1000_abe5 CONDITIONAL_JUMP 0 true 1000:acbe Code1 LAB_1000_acbe 1000:acbb FUN_1000_abe5 UNCONDITIONAL_JUMP 0 true 1000:abf0 Code1 LAB_1000_abf0 1000:acc6 FUN_1000_acc2 DATA 1 true Stack[0x4] - 1000:acd1 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:acd6 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:acda FUN_1000_acc2 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:acdd FUN_1000_acc2 DATA 0 true Stack[-0x14e] - 1000:ace1 FUN_1000_acc2 READ 1 true 1028:07d0 Data6 DAT_1028_07d0 1000:ace4 FUN_1000_acc2 DATA 0 true Stack[-0x15b] - 1000:acea FUN_1000_acc2 DATA 1 true Stack[-0x15b] - 1000:acee FUN_1000_acc2 CONDITIONAL_JUMP 0 true 1000:acf3 Code1 LAB_1000_acf3 1000:acf0 FUN_1000_acc2 UNCONDITIONAL_JUMP 0 true 1000:ae4f Code1 LAB_1000_ae4f 1000:acf3 FUN_1000_acc2 DATA 0 true Stack[-0x14c] - 1000:acf7 FUN_1000_acc2 UNCONDITIONAL_JUMP 0 true 1000:acfd Code1 LAB_1000_acfd 1000:acf9 FUN_1000_acc2 DATA 0 true Stack[-0x14c] - 1000:acfd FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ad04 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad17 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:ad1c FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ad23 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad36 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:ad3b FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad3f FUN_1000_acc2 WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:ad42 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad46 FUN_1000_acc2 DATA 1 true Stack[-0x14e] - 1000:ad4a FUN_1000_acc2 CONDITIONAL_JUMP 0 true 1000:ad4f Code1 LAB_1000_ad4f 1000:ad4c FUN_1000_acc2 UNCONDITIONAL_JUMP 0 true 1000:adf9 Code1 LAB_1000_adf9 1000:ad53 FUN_1000_acc2 DATA 1 true Stack[0x4] - 1000:ad57 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:ad5c FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad64 FUN_1000_acc2 READ 1 true 1028:09a2 Data6 DAT_1028_09a2 1000:ad70 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ad7b FUN_1000_acc2 READ 1 true 1028:0992 Data6 DAT_1028_0992 1000:ad7f FUN_1000_acc2 READ 1 true 1028:0994 Data6 DAT_1028_0994 1000:ad83 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:ad8a FUN_1000_acc2 DATA 1 true Stack[0x4] - 1000:ad8e FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:ad93 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ad97 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ada1 FUN_1000_acc2 READ 0 true 1028:09a6 Data6 DAT_1028_09a6 1000:ada5 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1000:0002 Code1 FUN_1000_0002 FUN_1000_0002 1000:adaa FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:adb6 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:adbb FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:adc2 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:add4 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:add9 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ade0 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:adf2 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:adf7 FUN_1000_acc2 UNCONDITIONAL_JUMP 0 true 1000:ae42 Code1 LAB_1000_ae42 1000:adfd FUN_1000_acc2 DATA 1 true Stack[0x4] - 1000:ae01 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:ae06 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ae0d FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ae1f FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:ae24 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ae2b FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ae3d FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:ae42 FUN_1000_acc2 DATA 1 true Stack[-0x14c] - 1000:ae46 FUN_1000_acc2 DATA 1 true Stack[-0x15b] - 1000:ae4a FUN_1000_acc2 CONDITIONAL_JUMP 0 true 1000:ae4f Code1 LAB_1000_ae4f 1000:ae4c FUN_1000_acc2 UNCONDITIONAL_JUMP 0 true 1000:acf9 Code1 LAB_1000_acf9 1000:ae4f FUN_1000_acc2 DATA 1 true Stack[-0x14e] - 1000:ae53 FUN_1000_acc2 WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:ae56 FUN_1000_acc2 DATA 1 true Stack[0x4] - 1000:ae61 FUN_1000_acc2 DATA 0 true Stack[-0x150] - 1000:ae65 FUN_1000_acc2 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:ae72 FUN_1000_ae6e READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:ae77 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:ae7c Code1 LAB_1000_ae7c 1000:ae79 FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:af80 Code1 LAB_1000_af80 1000:ae7c FUN_1000_ae6e READ 0 true 1028:399a Data6 DAT_1028_399a 1000:ae81 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:ae86 Code1 LAB_1000_ae86 1000:ae83 FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:af80 Code1 LAB_1000_af80 1000:ae86 FUN_1000_ae6e WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:ae8d FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:ae91 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:a38e Code1 FUN_1000_a38e FUN_1000_a38e 1000:ae96 FUN_1000_ae6e READ 1 true 1028:3969 Data6 DAT_1028_3969 1000:ae99 FUN_1000_ae6e READ 1 true 1028:396b Data6 DAT_1028_396b 1000:ae9d FUN_1000_ae6e WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:aea0 FUN_1000_ae6e WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:aea4 FUN_1000_ae6e READ 1 true 1028:396d Data6 DAT_1028_396d 1000:aea7 FUN_1000_ae6e READ 1 true 1028:396f Data6 DAT_1028_396f 1000:aeab FUN_1000_ae6e WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:aeae FUN_1000_ae6e WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:aeb2 FUN_1000_ae6e READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:aeb5 FUN_1000_ae6e READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:aeb9 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:aeca FUN_1000_ae6e READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:aecd FUN_1000_ae6e READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:aedb FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:aeee FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:aef2 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:aefb FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:aeff FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:af04 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:af1f FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:af2d FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:af32 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:af37 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:af6b FUN_1000_ae6e WRITE 0 true 1028:399a Data6 DAT_1028_399a 1000:af6e FUN_1000_ae6e WRITE 0 true 1028:0875 Data6 DAT_1028_0875 1000:af73 FUN_1000_ae6e WRITE 0 true 1028:41f9 Data6 DAT_1028_41f9 1000:af7d FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b2c4 Code1 LAB_1000_b2c4 1000:af80 FUN_1000_ae6e WRITE 0 true 1028:0875 Data6 DAT_1028_0875 1000:af87 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:af8e FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:af92 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:a38e Code1 FUN_1000_a38e FUN_1000_a38e 1000:af97 FUN_1000_ae6e READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:af9c FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:afab Code1 LAB_1000_afab 1000:af9e FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:afab FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:afb8 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:afc6 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:afed Code1 LAB_1000_afed 1000:afc8 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:afdb FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:afdf FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:a99c Code1 FUN_1000_a99c FUN_1000_a99c 1000:afe4 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:afe8 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:abe5 Code1 FUN_1000_abe5 FUN_1000_abe5 1000:afed FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b009 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b00d FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b012 Code1 LAB_1000_b012 1000:b00f FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b012 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b01a FUN_1000_ae6e READ 1 true 1028:09e2 Data6 DAT_1028_09e2 1000:b01a FUN_1000_ae6e READ 1 false 1028:0a35 Data6 DAT_1028_0a35 1000:b01e FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b025 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b02e FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b03d FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b045 FUN_1000_ae6e READ 1 true 1028:09f1 Data6 DAT_1028_09f1 1000:b049 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b052 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b05b FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b06b FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b06f FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b00f Code1 LAB_1000_b00f 1000:b071 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b074 FUN_1000_ae6e DATA 0 true Stack[-0x3] - 1000:b077 FUN_1000_ae6e READ 1 true 1028:07d0 Data6 DAT_1028_07d0 1000:b07e FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b088 FUN_1000_ae6e WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:b08b FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b099 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b0a3 Code1 LAB_1000_b0a3 1000:b09b FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b09e FUN_1000_ae6e DATA 1 true Stack[-0x3] - 1000:b0a1 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b077 Code1 LAB_1000_b077 1000:b0a3 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b0b1 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b0b6 Code1 LAB_1000_b0b6 1000:b0b3 FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b293 Code1 LAB_1000_b293 1000:b0b6 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b0ba FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b0bf Code1 LAB_1000_b0bf 1000:b0bc FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b0bf FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b0c6 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b0cf FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b0de FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b0e6 FUN_1000_ae6e WRITE 0 true 1028:09e2 Data6 DAT_1028_09e2 1000:b0e6 FUN_1000_ae6e WRITE 0 false 1028:0a35 Data6 DAT_1028_0a35 1000:b0ea FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b0f3 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b0fc FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b10c FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b114 FUN_1000_ae6e WRITE 0 true 1028:09f1 Data6 DAT_1028_09f1 1000:b118 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b11b FUN_1000_ae6e DATA 1 true Stack[-0x3] - 1000:b11e FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b12f Code1 LAB_1000_b12f 1000:b120 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b126 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b12a FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:b12f FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b133 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b0bc Code1 LAB_1000_b0bc 1000:b135 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b139 FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b13e Code1 LAB_1000_b13e 1000:b13b FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b13e FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b141 FUN_1000_ae6e DATA 1 true Stack[-0x3] - 1000:b144 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b155 Code1 LAB_1000_b155 1000:b146 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b14c FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b150 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:7e92 Code1 FUN_1000_7e92 FUN_1000_7e92 1000:b155 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b159 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b13b Code1 LAB_1000_b13b 1000:b15b FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b15f FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b164 Code1 LAB_1000_b164 1000:b161 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b164 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b16f FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b172 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b187 Code1 LAB_1000_b187 1000:b174 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b17e FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b182 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b187 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b18b FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b161 Code1 LAB_1000_b161 1000:b18d FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b190 FUN_1000_ae6e DATA 1 true Stack[-0x3] - 1000:b193 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b20f Code1 LAB_1000_b20f 1000:b197 FUN_1000_ae6e DATA 0 true Stack[-0x9] - 1000:b19a FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b19e FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b1a3 Code1 LAB_1000_b1a3 1000:b1a0 FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b1a3 FUN_1000_ae6e DATA 1 true Stack[-0x4] - 1000:b1ae FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b1b6 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b1c7 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b1cc Code1 LAB_1000_b1cc 1000:b1c9 FUN_1000_ae6e DATA 0 true Stack[-0x9] - 1000:b1cc FUN_1000_ae6e DATA 0 true Stack[-0x4] - 1000:b1d0 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b1a0 Code1 LAB_1000_b1a0 1000:b1d2 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b1dd FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b1e2 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b1e5 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b1e8 FUN_1000_ae6e DATA 0 true Stack[-0x9] - 1000:b1eb FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1008:0dbd Code2 FUN_1008_0dbd FUN_1008_0dbd 1000:b1f0 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b1f3 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b1f7 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1008:0b9e Code2 FUN_1008_0b9e FUN_1008_0b9e 1000:b1fc FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b207 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b20a FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b20f FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b213 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:acc2 Code1 FUN_1000_acc2 FUN_1000_acc2 1000:b218 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b228 FUN_1000_ae6e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b235 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b239 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:9e85 Code1 FUN_1000_9e85 FUN_1000_9e85 1000:b23e FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b249 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b24e FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b251 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b25e FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:b263 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b270 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b275 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b280 FUN_1000_ae6e DATA 0 true Stack[-0x7] - 1000:b283 FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b288 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b28c FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:a604 Code1 FUN_1000_a604 FUN_1000_a604 1000:b291 FUN_1000_ae6e UNCONDITIONAL_JUMP 0 true 1000:b2c4 Code1 LAB_1000_b2c4 1000:b293 FUN_1000_ae6e WRITE 0 true 1028:07d1 Data6 DAT_1028_07d1 1000:b298 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b29c FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:a70e Code1 FUN_1000_a70e FUN_1000_a70e 1000:b2a1 FUN_1000_ae6e READ 0 true 1028:07d2 Data6 DAT_1028_07d2 1000:b2a6 FUN_1000_ae6e CONDITIONAL_JUMP 0 true 1000:b2c4 Code1 LAB_1000_b2c4 1000:b2a8 FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b2bb FUN_1000_ae6e DATA 1 true Stack[0x4] - 1000:b2bf FUN_1000_ae6e UNCONDITIONAL_CALL 0 true 1000:ab3c Code1 FUN_1000_ab3c FUN_1000_ab3c 1000:b2cb FUN_1000_b2c8 DATA 0 true Stack[0xe] - 1000:b2ce FUN_1000_b2c8 DATA 0 true Stack[0xc] - 1000:b2d1 FUN_1000_b2c8 DATA 0 true Stack[0xa] - 1000:b2d4 FUN_1000_b2c8 DATA 1 true Stack[0x8] - 1000:b2d7 FUN_1000_b2c8 DATA 1 true Stack[0xc] - 1000:b2dc FUN_1000_b2c8 DATA 1 true Stack[0x6] - 1000:b2df FUN_1000_b2c8 DATA 1 true Stack[0xa] - 1000:b2e4 FUN_1000_b2c8 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:b2e9 FUN_1000_b2c8 DATA 0 true Stack[0xe] - 1000:b2ec FUN_1000_b2c8 DATA 0 true Stack[0xc] - 1000:b2ef FUN_1000_b2c8 DATA 0 true Stack[0xa] - 1000:b2f2 FUN_1000_b2c8 DATA 1 true Stack[0x8] - 1000:b2f5 FUN_1000_b2c8 DATA 1 true Stack[0xc] - 1000:b2fa FUN_1000_b2c8 DATA 1 true Stack[0x6] - 1000:b2fd FUN_1000_b2c8 DATA 1 true Stack[0xa] - 1000:b302 FUN_1000_b2c8 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b30f FUN_1000_b30b DATA 1 true Stack[0x4] - 1000:b31a FUN_1000_b30b UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b31f FUN_1000_b30b DATA 0 true Stack[-0x4] - 1000:b322 FUN_1000_b30b DATA 0 true Stack[0x6] - 1000:b327 FUN_1000_b30b CONDITIONAL_JUMP 0 true 1000:b34e Code1 LAB_1000_b34e 1000:b329 FUN_1000_b30b DATA 1 true Stack[0x6] - 1000:b333 FUN_1000_b30b DATA 0 true Stack[-0x4] - 1000:b347 FUN_1000_b30b UNCONDITIONAL_CALL 0 true 1000:b2c8 Code1 FUN_1000_b2c8 FUN_1000_b2c8 1000:b34c FUN_1000_b30b UNCONDITIONAL_JUMP 0 true 1000:b399 Code1 LAB_1000_b399 1000:b34e FUN_1000_b30b DATA 0 true Stack[0x6] - 1000:b353 FUN_1000_b30b CONDITIONAL_JUMP 0 true 1000:b370 Code1 LAB_1000_b370 1000:b355 FUN_1000_b30b DATA 0 true Stack[0x6] - 1000:b35a FUN_1000_b30b CONDITIONAL_JUMP 0 true 1000:b370 Code1 LAB_1000_b370 1000:b35c FUN_1000_b30b DATA 0 true Stack[-0x4] - 1000:b35f FUN_1000_b30b DATA 1 true Stack[0x6] - 1000:b369 FUN_1000_b30b UNCONDITIONAL_CALL 0 true 1008:0dbd Code2 FUN_1008_0dbd FUN_1008_0dbd 1000:b36e FUN_1000_b30b UNCONDITIONAL_JUMP 0 true 1000:b399 Code1 LAB_1000_b399 1000:b370 FUN_1000_b30b DATA 1 true Stack[0x6] - 1000:b381 FUN_1000_b30b DATA 0 true Stack[-0x4] - 1000:b394 FUN_1000_b30b UNCONDITIONAL_CALL 0 true 1000:b2c8 Code1 FUN_1000_b2c8 FUN_1000_b2c8 1000:b399 FUN_1000_b30b DATA 1 true Stack[0x4] - 1000:b3a4 FUN_1000_b30b DATA 0 true Stack[-0x4] - 1000:b3a7 FUN_1000_b30b UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b3b3 FUN_1000_b3b0 DATA 0 true Stack[0xe] - 1000:b3b6 FUN_1000_b3b0 DATA 0 true Stack[0xc] - 1000:b3b9 FUN_1000_b3b0 DATA 0 true Stack[0xa] - 1000:b3bc FUN_1000_b3b0 DATA 1 true Stack[0x8] - 1000:b3bf FUN_1000_b3b0 DATA 1 true Stack[0xc] - 1000:b3c4 FUN_1000_b3b0 DATA 1 true Stack[0x6] - 1000:b3c7 FUN_1000_b3b0 DATA 1 true Stack[0xa] - 1000:b3cc FUN_1000_b3b0 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:b3d1 FUN_1000_b3b0 DATA 0 true Stack[0xe] - 1000:b3d4 FUN_1000_b3b0 DATA 0 true Stack[0xc] - 1000:b3d7 FUN_1000_b3b0 DATA 0 true Stack[0xa] - 1000:b3da FUN_1000_b3b0 DATA 1 true Stack[0x8] - 1000:b3dd FUN_1000_b3b0 DATA 1 true Stack[0xc] - 1000:b3e2 FUN_1000_b3b0 DATA 1 true Stack[0x6] - 1000:b3e5 FUN_1000_b3b0 DATA 1 true Stack[0xa] - 1000:b3ea FUN_1000_b3b0 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b3f7 FUN_1000_b3f3 DATA 1 true Stack[0x4] - 1000:b402 FUN_1000_b3f3 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b407 FUN_1000_b3f3 DATA 0 true Stack[-0x4] - 1000:b40a FUN_1000_b3f3 DATA 0 true Stack[0x6] - 1000:b40f FUN_1000_b3f3 CONDITIONAL_JUMP 0 true 1000:b436 Code1 LAB_1000_b436 1000:b411 FUN_1000_b3f3 DATA 1 true Stack[0x6] - 1000:b41b FUN_1000_b3f3 DATA 0 true Stack[-0x4] - 1000:b42f FUN_1000_b3f3 UNCONDITIONAL_CALL 0 true 1000:b3b0 Code1 FUN_1000_b3b0 FUN_1000_b3b0 1000:b434 FUN_1000_b3f3 UNCONDITIONAL_JUMP 0 true 1000:b45f Code1 LAB_1000_b45f 1000:b436 FUN_1000_b3f3 DATA 1 true Stack[0x6] - 1000:b447 FUN_1000_b3f3 DATA 0 true Stack[-0x4] - 1000:b45a FUN_1000_b3f3 UNCONDITIONAL_CALL 0 true 1000:b3b0 Code1 FUN_1000_b3b0 FUN_1000_b3b0 1000:b45f FUN_1000_b3f3 DATA 1 true Stack[0x4] - 1000:b46a FUN_1000_b3f3 DATA 0 true Stack[-0x4] - 1000:b46d FUN_1000_b3f3 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b47a FUN_1000_b476 READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:b47f FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b484 Code1 LAB_1000_b484 1000:b481 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:b484 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b48d FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b4d7 Code1 LAB_1000_b4d7 1000:b48f FUN_1000_b476 DATA 0 true Stack[0x8] - 1000:b494 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b4d7 Code1 LAB_1000_b4d7 1000:b496 FUN_1000_b476 DATA 0 true Stack[0x8] - 1000:b49b FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b4d7 Code1 LAB_1000_b4d7 1000:b49d FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:b4a8 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b4b0 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b4c1 FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:b4ce FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b4d2 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b4d7 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b4e0 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b526 Code1 LAB_1000_b526 1000:b4e2 FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:b4ea FUN_1000_b476 DATA 0 true Stack[-0x5] - 1000:b4ed FUN_1000_b476 DATA 1 true Stack[-0x5] - 1000:b4f6 FUN_1000_b476 DATA 0 true Stack[-0x5] - 1000:b4f9 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b4fd FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:b502 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b50b FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b526 Code1 LAB_1000_b526 1000:b50d FUN_1000_b476 DATA 1 true Stack[-0x5] - 1000:b519 FUN_1000_b476 DATA 1 true Stack[-0x5] - 1000:b526 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b52f FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b54c Code1 LAB_1000_b54c 1000:b531 FUN_1000_b476 READ 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:b536 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b54c Code1 LAB_1000_b54c 1000:b538 FUN_1000_b476 READ 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:b53d FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b54c Code1 LAB_1000_b54c 1000:b541 FUN_1000_b476 WRITE 0 true 1028:0855 Data6 DAT_1028_0855 1000:b544 FUN_1000_b476 WRITE 0 true 1028:0857 Data6 DAT_1028_0857 1000:b547 FUN_1000_b476 WRITE 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:b54c FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b555 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b55a Code1 LAB_1000_b55a 1000:b557 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b626 Code1 LAB_1000_b626 1000:b55c FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b561 FUN_1000_b476 WRITE 0 true 1028:39de Data6 DAT_1028_39de 1000:b566 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b56f FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b581 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b585 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b58a FUN_1000_b476 READ 0 true 1028:399a Data6 DAT_1028_399a 1000:b58f FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b5a2 Code1 LAB_1000_b5a2 1000:b591 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b5a0 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b5db Code1 LAB_1000_b5db 1000:b5a2 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b5af FUN_1000_b476 DATA 0 true Stack[-0x9] - 1000:b5b4 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:b5bc FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b5c9 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b5d6 FUN_1000_b476 DATA 1 true Stack[-0x9] - 1000:b5d9 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b5b2 Code1 LAB_1000_b5b2 1000:b5db FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b5e6 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b5eb FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b5ee FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b5f1 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b5fe FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:0002 Code1 FUN_1000_0002 FUN_1000_0002 1000:b603 FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b60e FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b613 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b61e FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b621 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b626 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b62f FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b634 Code1 LAB_1000_b634 1000:b631 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b758 Code1 LAB_1000_b758 1000:b636 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b63b FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b63f FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b643 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b648 Code1 LAB_1000_b648 1000:b645 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b648 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b65e FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b666 Code1 LAB_1000_b666 1000:b660 FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b664 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b66c Code1 LAB_1000_b66c 1000:b666 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b66a FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b645 Code1 LAB_1000_b645 1000:b66c FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b670 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b675 Code1 LAB_1000_b675 1000:b672 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b758 Code1 LAB_1000_b758 1000:b677 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b67c FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b688 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b69a Code1 LAB_1000_b69a 1000:b68f FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b693 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:b698 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b6ec Code1 LAB_1000_b6ec 1000:b69a FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b6a6 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b6b6 Code1 LAB_1000_b6b6 1000:b6a8 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b6b4 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b6d1 Code1 LAB_1000_b6d1 1000:b6b6 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b6c6 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b6d1 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b6e3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b6e7 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b6ec FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b6f0 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b6f5 Code1 LAB_1000_b6f5 1000:b6f2 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b6f5 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b70b FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b722 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b73a FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b749 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b74d FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:b752 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b756 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b6f2 Code1 LAB_1000_b6f2 1000:b758 FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:b761 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b766 Code1 LAB_1000_b766 1000:b763 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba8c Code1 LAB_1000_ba8c 1000:b768 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b76d FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b771 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b775 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b77a Code1 LAB_1000_b77a 1000:b777 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b77a FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b790 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b798 Code1 LAB_1000_b798 1000:b792 FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b796 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b79e Code1 LAB_1000_b79e 1000:b798 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b79c FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b777 Code1 LAB_1000_b777 1000:b79e FUN_1000_b476 DATA 0 true Stack[-0xa] - 1000:b7a2 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b7a7 Code1 LAB_1000_b7a7 1000:b7a4 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba8c Code1 LAB_1000_ba8c 1000:b7a7 FUN_1000_b476 DATA 0 true Stack[-0x7] - 1000:b7ac FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b7b0 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b7b5 Code1 LAB_1000_b7b5 1000:b7b2 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b7b5 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:b7c0 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b7c8 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b7d9 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b7de Code1 LAB_1000_b7de 1000:b7db FUN_1000_b476 DATA 0 true Stack[-0x7] - 1000:b7de FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:b7e2 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b7b2 Code1 LAB_1000_b7b2 1000:b7e4 FUN_1000_b476 DATA 0 true Stack[-0x7] - 1000:b7e8 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b839 Code1 LAB_1000_b839 1000:b7ec FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b7f1 FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b7fa FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b802 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b813 FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b81b FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b81f FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b824 FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b82d FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b831 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:b836 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba20 Code1 LAB_1000_ba20 1000:b839 FUN_1000_b476 DATA 0 true Stack[-0x7] - 1000:b83d FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:b842 Code1 LAB_1000_b842 1000:b83f FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:b998 Code1 LAB_1000_b998 1000:b844 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b849 FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b852 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b85a FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b86b FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b873 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b877 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:b87c FUN_1000_b476 DATA 1 true Stack[-0x7] - 1000:b885 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b889 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:b88e FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b89b FUN_1000_b476 WRITE 0 true 1028:3b2a Data6 DAT_1028_3b2a 1000:b8a0 FUN_1000_b476 WRITE 0 true 1028:0b81 Data6 DAT_1028_0b81 1000:b8a5 FUN_1000_b476 WRITE 0 true 1028:3b7d Data6 DAT_1028_3b7d 1000:b8ae FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:b8b3 FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b8b6 FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b8b9 FUN_1000_b476 READ 0 true 1028:3b41 Data6 DAT_1028_3b41 1000:b8bd FUN_1000_b476 READ 0 true 1028:3b43 Data6 DAT_1028_3b43 1000:b8c1 FUN_1000_b476 READ 1 true 1028:3b45 Data6 DAT_1028_3b45 1000:b8c4 FUN_1000_b476 READ 1 true 1028:3b41 Data6 DAT_1028_3b41 1000:b8ca FUN_1000_b476 READ 1 true 1028:3b47 Data6 DAT_1028_3b47 1000:b8cd FUN_1000_b476 READ 1 true 1028:3b43 Data6 DAT_1028_3b43 1000:b8d3 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:b8d8 FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b8db FUN_1000_b476 READ 0 true 1028:3b41 Data6 DAT_1028_3b41 1000:b8df FUN_1000_b476 READ 0 true 1028:3b43 Data6 DAT_1028_3b43 1000:b8e3 FUN_1000_b476 READ 1 true 1028:3b45 Data6 DAT_1028_3b45 1000:b8e6 FUN_1000_b476 READ 1 true 1028:3b41 Data6 DAT_1028_3b41 1000:b8ec FUN_1000_b476 READ 1 true 1028:3b47 Data6 DAT_1028_3b47 1000:b8ef FUN_1000_b476 READ 1 true 1028:3b43 Data6 DAT_1028_3b43 1000:b8f5 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b8fa FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b8fd FUN_1000_b476 READ 0 true 1028:3b94 Data6 DAT_1028_3b94 1000:b901 FUN_1000_b476 READ 0 true 1028:3b96 Data6 DAT_1028_3b96 1000:b905 FUN_1000_b476 READ 1 true 1028:3b98 Data6 DAT_1028_3b98 1000:b908 FUN_1000_b476 READ 1 true 1028:3b94 Data6 DAT_1028_3b94 1000:b90e FUN_1000_b476 READ 1 true 1028:3b9a Data6 DAT_1028_3b9a 1000:b911 FUN_1000_b476 READ 1 true 1028:3b96 Data6 DAT_1028_3b96 1000:b917 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:b91c FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b91f FUN_1000_b476 READ 0 true 1028:3b94 Data6 DAT_1028_3b94 1000:b923 FUN_1000_b476 READ 0 true 1028:3b96 Data6 DAT_1028_3b96 1000:b927 FUN_1000_b476 READ 1 true 1028:3b98 Data6 DAT_1028_3b98 1000:b92a FUN_1000_b476 READ 1 true 1028:3b94 Data6 DAT_1028_3b94 1000:b930 FUN_1000_b476 READ 1 true 1028:3b9a Data6 DAT_1028_3b9a 1000:b933 FUN_1000_b476 READ 1 true 1028:3b96 Data6 DAT_1028_3b96 1000:b939 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b93e FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b941 FUN_1000_b476 READ 0 true 1028:0b98 Data6 DAT_1028_0b98 1000:b945 FUN_1000_b476 READ 0 true 1028:0b9a Data6 DAT_1028_0b9a 1000:b949 FUN_1000_b476 READ 1 true 1028:0b9c Data6 DAT_1028_0b9c 1000:b94c FUN_1000_b476 READ 1 true 1028:0b98 Data6 DAT_1028_0b98 1000:b952 FUN_1000_b476 READ 1 true 1028:0b9e Data6 DAT_1028_0b9e 1000:b955 FUN_1000_b476 READ 1 true 1028:0b9a Data6 DAT_1028_0b9a 1000:b95b FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:b960 FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b963 FUN_1000_b476 READ 0 true 1028:0b98 Data6 DAT_1028_0b98 1000:b967 FUN_1000_b476 READ 0 true 1028:0b9a Data6 DAT_1028_0b9a 1000:b96b FUN_1000_b476 READ 1 true 1028:0b9c Data6 DAT_1028_0b9c 1000:b96e FUN_1000_b476 READ 1 true 1028:0b98 Data6 DAT_1028_0b98 1000:b974 FUN_1000_b476 READ 1 true 1028:0b9e Data6 DAT_1028_0b9e 1000:b977 FUN_1000_b476 READ 1 true 1028:0b9a Data6 DAT_1028_0b9a 1000:b97d FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:b982 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b98d FUN_1000_b476 DATA 0 true Stack[-0xd] - 1000:b990 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:b995 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba20 Code1 LAB_1000_ba20 1000:b99a FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:b99f FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:b9ac FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:ba13 Code1 LAB_1000_ba13 1000:b9ae FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b9ca FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b9dc FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:b9ef FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:ba01 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:ba08 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:ba0c FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:ba11 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba20 Code1 LAB_1000_ba20 1000:ba13 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:ba20 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:ba24 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:ba29 Code1 LAB_1000_ba29 1000:ba26 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:ba29 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:ba3f FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:ba56 FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:ba6e FUN_1000_b476 DATA 1 true Stack[-0x3] - 1000:ba7d FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:ba81 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:ba86 FUN_1000_b476 DATA 0 true Stack[-0x3] - 1000:ba8a FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:ba26 Code1 LAB_1000_ba26 1000:ba8c FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:ba95 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:ba9a Code1 LAB_1000_ba9a 1000:ba97 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bb2d Code1 LAB_1000_bb2d 1000:ba9a FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:baa0 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bace Code1 LAB_1000_bace 1000:baa2 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bab2 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bab6 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:babb FUN_1000_b476 WRITE 0 true 1028:3b2a Data6 DAT_1028_3b2a 1000:bac3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bac7 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bacc FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bb2d Code1 LAB_1000_bb2d 1000:bad1 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bafe Code1 LAB_1000_bafe 1000:bad3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bae3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bae7 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:baec FUN_1000_b476 WRITE 0 true 1028:0b81 Data6 DAT_1028_0b81 1000:baf3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:baf7 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bafc FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bb2d Code1 LAB_1000_bb2d 1000:bb01 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bb2d Code1 LAB_1000_bb2d 1000:bb03 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb13 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb17 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bb1c FUN_1000_b476 WRITE 0 true 1028:3b7d Data6 DAT_1028_3b7d 1000:bb24 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb28 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bb2d FUN_1000_b476 DATA 1 true Stack[0x6] - 1000:bb36 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bb3b Code1 LAB_1000_bb3b 1000:bb38 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bb3b FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:bb41 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bb83 Code1 LAB_1000_bb83 1000:bb45 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:bb4a FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb59 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb5d FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bb62 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bb77 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb7b FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:bb80 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bb86 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bbc7 Code1 LAB_1000_bbc7 1000:bb8a FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:bb8f FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bb9e FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bba2 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bba7 FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bbbc FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bbc0 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:bbc5 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bbca FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bc0b Code1 LAB_1000_bc0b 1000:bbce FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:bbd3 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bbe2 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bbe6 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bbeb FUN_1000_b476 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bc00 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bc04 FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:bc09 FUN_1000_b476 UNCONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bc0e FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bc13 FUN_1000_b476 CONDITIONAL_JUMP 0 true 1000:bc32 Code1 LAB_1000_bc32 1000:bc15 FUN_1000_b476 DATA 1 true Stack[0x8] - 1000:bc18 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bc26 FUN_1000_b476 DATA 0 true Stack[0x8] - 1000:bc29 FUN_1000_b476 DATA 1 true Stack[0x4] - 1000:bc2d FUN_1000_b476 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:bc3a FUN_1000_bc36 DATA 1 true Stack[0x4] - 1000:bc45 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:bc4a FUN_1000_bc36 DATA 0 true Stack[-0x8] - 1000:bc4d FUN_1000_bc36 DATA 0 true Stack[0x8] - 1000:bc51 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bc5c Code1 LAB_1000_bc5c 1000:bc53 FUN_1000_bc36 DATA 0 true Stack[0x6] - 1000:bc57 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bc5c Code1 LAB_1000_bc5c 1000:bc59 FUN_1000_bc36 UNCONDITIONAL_JUMP 0 true 1000:bd7a Code1 LAB_1000_bd7a 1000:bc5c FUN_1000_bc36 READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:bc61 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bc66 Code1 LAB_1000_bc66 1000:bc63 FUN_1000_bc36 UNCONDITIONAL_JUMP 0 true 1000:bd7a Code1 LAB_1000_bd7a 1000:bc66 FUN_1000_bc36 READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:bc6b FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bc83 Code1 LAB_1000_bc83 1000:bc6d FUN_1000_bc36 DATA 1 true Stack[0x6] - 1000:bc70 FUN_1000_bc36 DATA 1 true Stack[0x8] - 1000:bc78 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:bc7d FUN_1000_bc36 DATA 0 true Stack[0x6] - 1000:bc80 FUN_1000_bc36 DATA 0 true Stack[0x8] - 1000:bc83 FUN_1000_bc36 DATA 1 true Stack[0x4] - 1000:bc90 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bca8 Code1 LAB_1000_bca8 1000:bc92 FUN_1000_bc36 DATA 1 true Stack[0x6] - 1000:bc95 FUN_1000_bc36 DATA 1 true Stack[0x8] - 1000:bc9d FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:bca2 FUN_1000_bc36 DATA 0 true Stack[0x6] - 1000:bca5 FUN_1000_bc36 DATA 0 true Stack[0x8] - 1000:bca8 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bcba FUN_1000_bc36 DATA 0 true Stack[-0x6] - 1000:bcbd FUN_1000_bc36 DATA 0 true Stack[-0x4] - 1000:bcc0 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bcd2 FUN_1000_bc36 DATA 1 true Stack[0x6] - 1000:bcd5 FUN_1000_bc36 DATA 1 true Stack[0x8] - 1000:bcdc FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bcee FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bcfd FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd08 Code1 LAB_1000_bd08 1000:bcff FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd6e Code1 LAB_1000_bd6e 1000:bd06 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd6e Code1 LAB_1000_bd6e 1000:bd08 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd21 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd35 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd3d Code1 LAB_1000_bd3d 1000:bd37 FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd6e Code1 LAB_1000_bd6e 1000:bd3b FUN_1000_bc36 CONDITIONAL_JUMP 0 true 1000:bd6e Code1 LAB_1000_bd6e 1000:bd3f FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:bd44 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd58 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd65 FUN_1000_bc36 DATA 1 true Stack[0x4] - 1000:bd69 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1000:a604 Code1 FUN_1000_a604 FUN_1000_a604 1000:bd6e FUN_1000_bc36 DATA 0 true Stack[-0x8] - 1000:bd71 FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd75 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1008:0b9e Code2 FUN_1008_0b9e FUN_1008_0b9e 1000:bd7a FUN_1000_bc36 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:bd83 FUN_1000_bc36 DATA 0 true Stack[-0x8] - 1000:bd86 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1008:0996 Code2 FUN_1008_0996 FUN_1008_0996 1000:bd8b FUN_1000_bc36 DATA 1 true Stack[0x4] - 1000:bd96 FUN_1000_bc36 DATA 0 true Stack[-0x8] - 1000:bd99 FUN_1000_bc36 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:bda6 FUN_1000_bda2 DATA 1 true Stack[0x4] - 1000:bdb1 FUN_1000_bda2 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:bdb6 FUN_1000_bda2 DATA 0 true Stack[-0x4] - 1000:bdb9 FUN_1000_bda2 DATA 0 true Stack[0x8] - 1000:bdbc FUN_1000_bda2 DATA 0 true Stack[0x6] - 1000:bdbf FUN_1000_bda2 DATA 0 true Stack[-0x4] - 1000:bdc2 FUN_1000_bda2 UNCONDITIONAL_CALL 0 true 1008:0996 Code2 FUN_1008_0996 FUN_1008_0996 1000:bdc7 FUN_1000_bda2 DATA 1 true Stack[0x4] - 1000:bdd2 FUN_1000_bda2 DATA 0 true Stack[-0x4] - 1000:bdd5 FUN_1000_bda2 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:bde1 FUN_1000_bdde READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:bde5 FUN_1000_bdde READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:bde9 FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:bdec FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:be06 FUN_1000_bdde READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:be0a FUN_1000_bdde READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:be0e FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:be11 FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:be2b FUN_1000_bdde READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:be2e FUN_1000_bdde READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:be42 FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:be45 FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:be5f FUN_1000_bdde READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:be62 FUN_1000_bdde READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:be76 FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:be79 FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:be93 FUN_1000_bdde READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:be96 FUN_1000_bdde READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:beaa FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:bead FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:bec7 FUN_1000_bdde READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:beca FUN_1000_bdde READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:bede FUN_1000_bdde DATA 1 true Stack[0x6] - 1000:bee1 FUN_1000_bdde DATA 1 true Stack[0x8] - 1000:bf02 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf0d FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf16 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:01c4 EXTERNAL GETCLIENTRECT GETCLIENTRECT 1000:bf1b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf26 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:bf2b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf36 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:bf3b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf46 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:bf4b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf52 FUN_1000_beff DATA 0 true Stack[-0xc] - 1000:bf56 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:bf5b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf6a FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:bf6f FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf76 FUN_1000_beff READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:bf79 FUN_1000_beff READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:bf7d FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bf8e FUN_1000_beff READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:bf91 FUN_1000_beff READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:bf9f FUN_1000_beff READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:bfa2 FUN_1000_beff READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:bfa6 FUN_1000_beff DATA 1 true Stack[0xa] - 1000:bfa9 FUN_1000_beff DATA 1 true Stack[0xc] - 1000:bfac FUN_1000_beff WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:bfaf FUN_1000_beff WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:bfb3 FUN_1000_beff READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:bfb6 FUN_1000_beff READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:bfba FUN_1000_beff DATA 1 true Stack[0x6] - 1000:bfbd FUN_1000_beff DATA 1 true Stack[0x8] - 1000:bfc0 FUN_1000_beff WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:bfc3 FUN_1000_beff WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:bfc7 FUN_1000_beff READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:bfca FUN_1000_beff READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:bfd9 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:bfe4 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:bff5 FUN_1000_beff READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:bff8 FUN_1000_beff READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:c007 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:c012 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c023 FUN_1000_beff READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:c026 FUN_1000_beff READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:c039 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:c03e FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c04f FUN_1000_beff READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:c052 FUN_1000_beff READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:c065 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:c06a FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c081 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c08d Code1 LAB_1000_c08d 1000:c083 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c0d5 Code1 LAB_1000_c0d5 1000:c08b FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c0d5 Code1 LAB_1000_c0d5 1000:c08d FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0ae FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0b5 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0cc FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0d3 FUN_1000_beff UNCONDITIONAL_JUMP 0 true 1000:c0f9 Code1 LAB_1000_c0f9 1000:c0d5 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0ec FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c0f9 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c106 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c112 Code1 LAB_1000_c112 1000:c108 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c15a Code1 LAB_1000_c15a 1000:c110 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c15a Code1 LAB_1000_c15a 1000:c112 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c133 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c13a FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c151 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c158 FUN_1000_beff UNCONDITIONAL_JUMP 0 true 1000:c17e Code1 LAB_1000_c17e 1000:c15a FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c171 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c17e FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c191 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c19a Code1 LAB_1000_c19a 1000:c1a0 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c1a7 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c1ba FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c1c3 Code1 LAB_1000_c1c3 1000:c1c9 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c1d4 FUN_1000_beff READ 0 true 1028:085b Data6 DAT_1028_085b 1000:c1d8 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c1dd FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c1ec FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c1f1 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c20c FUN_1000_beff DATA 0 true Stack[-0x20] - 1000:c210 FUN_1000_beff DATA 0 true Stack[-0x22] - 1000:c219 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:c21e FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c225 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c230 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c235 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c256 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:c25b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c262 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c26d FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c272 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c293 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:c298 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c2a6 FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c2c7 Code1 LAB_1000_c2c7 1000:c2ae FUN_1000_beff CONDITIONAL_JUMP 0 true 1000:c2b8 Code1 LAB_1000_c2b8 1000:c2b6 FUN_1000_beff UNCONDITIONAL_JUMP 0 true 1000:c2c7 Code1 LAB_1000_c2c7 1000:c2bb FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c2c7 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c2ce FUN_1000_beff DATA 0 true Stack[-0x20] - 1000:c2d2 FUN_1000_beff DATA 0 true Stack[-0x22] - 1000:c2eb FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:c2f0 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c2fb FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c300 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c30b FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c310 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c31b FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:c320 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c327 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:c32c FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c333 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:c338 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c33f FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:c344 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c34b FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:c350 FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c35b FUN_1000_beff DATA 1 true Stack[0x4] - 1000:c362 FUN_1000_beff UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:c36e FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c37c FUN_1000_c36b WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:c37f FUN_1000_c36b WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:c383 FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c391 FUN_1000_c36b WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:c394 FUN_1000_c36b WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:c398 FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c3a6 FUN_1000_c36b DATA 1 true Stack[0x4] - 1000:c3b7 FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c3c5 FUN_1000_c36b DATA 1 true Stack[0x4] - 1000:c3d6 FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c3ed FUN_1000_c36b DATA 1 true Stack[0x4] - 1000:c403 FUN_1000_c36b DATA 1 true Stack[0x6] - 1000:c411 FUN_1000_c36b DATA 1 true Stack[0x4] - 1000:c429 FUN_1000_c426 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:c42c FUN_1000_c426 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:c430 FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c43e FUN_1000_c426 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:c441 FUN_1000_c426 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:c445 FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c453 FUN_1000_c426 DATA 1 true Stack[0x4] - 1000:c464 FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c472 FUN_1000_c426 DATA 1 true Stack[0x4] - 1000:c483 FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c491 FUN_1000_c426 DATA 1 true Stack[0x4] - 1000:c4a7 FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c4be FUN_1000_c426 DATA 1 true Stack[0x4] - 1000:c4cf FUN_1000_c426 DATA 1 true Stack[0x6] - 1000:c4e4 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c4f4 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c55c Code1 LAB_1000_c55c 1000:c4f6 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c512 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c524 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c537 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c549 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c550 FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c554 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c559 FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c55f FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c5c7 Code1 LAB_1000_c5c7 1000:c561 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c57d FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c58f FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c5a2 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c5b4 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c5bb FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c5bf FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c5c4 FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c5ca FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c632 Code1 LAB_1000_c632 1000:c5cc FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c5e8 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c5fa FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c60d FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c61f FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c626 FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c62a FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c62f FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c635 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c69d Code1 LAB_1000_c69d 1000:c637 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c653 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c665 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c678 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c68a FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c691 FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c695 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c69a FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c6a0 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c708 Code1 LAB_1000_c708 1000:c6a2 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c6be FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c6d0 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c6e3 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c6f5 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c6fc FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c700 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c705 FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c70b FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c765 Code1 LAB_1000_c765 1000:c70d FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c720 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c732 FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:c739 FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c73d FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:c742 FUN_1000_c4e1 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:c75a FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c75e FUN_1000_c4e1 UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:c763 FUN_1000_c4e1 UNCONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c768 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c76a FUN_1000_c4e1 READ 0 true 1028:399a Data6 DAT_1028_399a 1000:c76f FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c771 FUN_1000_c4e1 DATA 1 true Stack[0x6] - 1000:c779 FUN_1000_c4e1 READ 1 true 1028:399a Data6 DAT_1028_399a 1000:c780 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c786 Code1 LAB_1000_c786 1000:c784 FUN_1000_c4e1 CONDITIONAL_JUMP 0 true 1000:c798 Code1 LAB_1000_c798 1000:c786 FUN_1000_c4e1 DATA 1 true Stack[0x4] - 1000:c793 FUN_1000_c4e1 WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:c7a0 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c7b1 FUN_1000_c79c READ 1 true 1028:0871 Data6 DAT_1028_0871 1000:c7b4 FUN_1000_c79c DATA 0 true Stack[-0xa] - 1000:c7bd FUN_1000_c79c DATA 0 true Stack[-0x2770] - 1000:c7c4 FUN_1000_c79c DATA 1 true Stack[-0x2770] - 1000:c7c8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c7cd Code1 LAB_1000_c7cd 1000:c7ca FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:eaad Code1 LAB_1000_eaad 1000:c7cd FUN_1000_c79c DATA 0 true Stack[-0x8] - 1000:c7d0 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c7d5 Code1 LAB_1000_c7d5 1000:c7d2 FUN_1000_c79c DATA 0 true Stack[-0x8] - 1000:c7d5 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c7e1 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c7f3 Code1 LAB_1000_c7f3 1000:c7e3 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:c7ea FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c7ee FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:c36b Code1 FUN_1000_c36b FUN_1000_c36b 1000:c7f3 FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:c7f6 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:c7fa FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c80b FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:c80e FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:c81c FUN_1000_c79c DATA 1 true Stack[-0xa] - 1000:c81f FUN_1000_c79c DATA 0 true Stack[-0x2772] - 1000:c826 FUN_1000_c79c DATA 1 true Stack[-0x2772] - 1000:c82a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c82f Code1 LAB_1000_c82f 1000:c82c FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ea63 Code1 LAB_1000_ea63 1000:c82f FUN_1000_c79c DATA 0 true Stack[-0x2762] - 1000:c833 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c839 Code1 LAB_1000_c839 1000:c835 FUN_1000_c79c DATA 0 true Stack[-0x2762] - 1000:c839 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c866 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c873 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:c878 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:c880 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c891 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c89e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:c8a3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:c8ab FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:c8b0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:c8bd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:c8c2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:c8c7 FUN_1000_c79c DATA 0 true Stack[-0x16] - 1000:c8ca FUN_1000_c79c DATA 0 true Stack[-0x14] - 1000:c8cd FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:c8d0 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:c8d3 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c8de FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c8ee Code1 LAB_1000_c8ee 1000:c8e0 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c8e5 Code1 LAB_1000_c8e5 1000:c8e2 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c9ee Code1 LAB_1000_c9ee 1000:c8e9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:c8ee Code1 LAB_1000_c8ee 1000:c8eb FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c9ee Code1 LAB_1000_c9ee 1000:c8ee FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:c8f1 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:c8f4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c8fc FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:c8ff FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:c902 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c911 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c919 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:c921 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c932 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c93a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:c93f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:c948 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c967 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:c96a FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:c96d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c975 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:c978 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:c97b FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c98a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c992 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:c99a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c9ab FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:c9b3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:c9b8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:c9c1 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:c9e8 FUN_1000_c79c DATA 0 true Stack[-0x16] - 1000:c9eb FUN_1000_c79c DATA 0 true Stack[-0x14] - 1000:c9ee FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:c9f1 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:c9f5 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ca06 FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:ca09 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:ca17 FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:ca1a FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:ca28 FUN_1000_c79c WRITE 0 true 1028:07db Data6 DAT_1028_07db 1000:ca2b FUN_1000_c79c WRITE 0 true 1028:07dd Data6 DAT_1028_07dd 1000:ca2f FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:ca32 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:ca40 FUN_1000_c79c WRITE 0 true 1028:07df Data6 DAT_1028_07df 1000:ca43 FUN_1000_c79c WRITE 0 true 1028:07e1 Data6 DAT_1028_07e1 1000:ca51 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:ca54 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:ca61 FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:ca64 FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:ca71 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ca76 FUN_1000_c79c DATA 0 true Stack[-0x82] - 1000:ca79 FUN_1000_c79c DATA 0 true Stack[-0x80] - 1000:ca7c FUN_1000_c79c DATA 0 true Stack[-0x7e] - 1000:ca7f FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ca90 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ca95 FUN_1000_c79c DATA 0 true Stack[-0x88] - 1000:ca99 FUN_1000_c79c DATA 0 true Stack[-0x86] - 1000:ca9d FUN_1000_c79c DATA 0 true Stack[-0x84] - 1000:caa1 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cab7 FUN_1000_c79c DATA 0 true Stack[-0x40] - 1000:caba FUN_1000_c79c DATA 0 true Stack[-0x3e] - 1000:cabd FUN_1000_c79c DATA 0 true Stack[-0x3c] - 1000:cac2 FUN_1000_c79c DATA 0 true Stack[-0x2760] - 1000:cac6 FUN_1000_c79c DATA 0 true Stack[-0x70] - 1000:cacb FUN_1000_c79c DATA 0 true Stack[-0x6e] - 1000:cad2 FUN_1000_c79c DATA 0 true Stack[-0x22] - 1000:cad5 FUN_1000_c79c DATA 0 true Stack[-0x20] - 1000:cad8 FUN_1000_c79c READ 0 true 1028:07dd Data6 DAT_1028_07dd 1000:cadd FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:cadf FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cae8 Code1 LAB_1000_cae8 1000:cae1 FUN_1000_c79c READ 0 true 1028:07db Data6 DAT_1028_07db 1000:cae6 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:cae8 FUN_1000_c79c READ 0 true 1028:07dd Data6 DAT_1028_07dd 1000:caed FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:caef FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:caf9 Code1 LAB_1000_caf9 1000:caf1 FUN_1000_c79c READ 0 true 1028:07db Data6 DAT_1028_07db 1000:caf7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:caf9 FUN_1000_c79c READ 0 true 1028:07e1 Data6 DAT_1028_07e1 1000:cafe FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:cb00 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb09 Code1 LAB_1000_cb09 1000:cb02 FUN_1000_c79c READ 0 true 1028:07df Data6 DAT_1028_07df 1000:cb07 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:cb09 FUN_1000_c79c READ 0 true 1028:07e1 Data6 DAT_1028_07e1 1000:cb0e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb1a Code1 LAB_1000_cb1a 1000:cb10 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb47 Code1 LAB_1000_cb47 1000:cb12 FUN_1000_c79c READ 0 true 1028:07df Data6 DAT_1028_07df 1000:cb18 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb47 Code1 LAB_1000_cb47 1000:cb1a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cb26 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb3e Code1 LAB_1000_cb3e 1000:cb28 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:cb32 FUN_1000_c79c WRITE 0 true 1028:424c Data6 DAT_1028_424c 1000:cb37 FUN_1000_c79c WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:cb3c FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cb47 Code1 LAB_1000_cb47 1000:cb3e FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cb42 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:ae6e Code1 FUN_1000_ae6e FUN_1000_ae6e 1000:cb47 FUN_1000_c79c READ 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:cb4c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb58 Code1 LAB_1000_cb58 1000:cb4e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb60 Code1 LAB_1000_cb60 1000:cb50 FUN_1000_c79c READ 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:cb56 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb60 Code1 LAB_1000_cb60 1000:cb58 FUN_1000_c79c DATA 0 true Stack[-0x2764] - 1000:cb5e FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cb66 Code1 LAB_1000_cb66 1000:cb60 FUN_1000_c79c DATA 0 true Stack[-0x2764] - 1000:cb66 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:cb6b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cb70 Code1 LAB_1000_cb70 1000:cb6d FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:cb70 FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:cb7a FUN_1000_c79c DATA 0 true Stack[-0x2776] - 1000:cb7e FUN_1000_c79c DATA 0 true Stack[-0x2774] - 1000:cb82 FUN_1000_c79c DATA 0 true Stack[-0x95] - 1000:cb87 FUN_1000_c79c READ 1 true 1028:09f7 Data6 DAT_1028_09f7 1000:cb87 FUN_1000_c79c READ 1 false 1028:0a4a Data6 DAT_1028_0a4a 1000:cb8b FUN_1000_c79c DATA 1 true Stack[-0x2764] - 1000:cb91 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cb96 Code1 LAB_1000_cb96 1000:cb93 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:cb96 FUN_1000_c79c READ 0 true 1028:0a35 Data6 DAT_1028_0a35 1000:cb9b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cba0 Code1 LAB_1000_cba0 1000:cb9d FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:cba0 FUN_1000_c79c READ 0 true 1028:0a05 Data6 DAT_1028_0a05 1000:cba4 FUN_1000_c79c READ 0 true 1028:0a03 Data6 DAT_1028_0a03 1000:cba8 FUN_1000_c79c READ 0 true 1028:0a09 Data6 DAT_1028_0a09 1000:cbac FUN_1000_c79c READ 0 true 1028:0a07 Data6 DAT_1028_0a07 1000:cbb0 FUN_1000_c79c READ 0 true 1028:0a0d Data6 DAT_1028_0a0d 1000:cbb4 FUN_1000_c79c READ 0 true 1028:0a0b Data6 DAT_1028_0a0b 1000:cbb8 FUN_1000_c79c READ 0 true 1028:0a11 Data6 DAT_1028_0a11 1000:cbbc FUN_1000_c79c READ 0 true 1028:0a0f Data6 DAT_1028_0a0f 1000:cbc0 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cbc4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:9b69 Code1 FUN_1000_9b69 FUN_1000_9b69 1000:cbcb FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cbd0 Code1 LAB_1000_cbd0 1000:cbcd FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:cbd0 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cbd4 FUN_1000_c79c READ 1 true 1028:0a01 Data6 DAT_1028_0a01 1000:cbd9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cbde Code1 LAB_1000_cbde 1000:cbdb FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cfb5 Code1 LAB_1000_cfb5 1000:cbe1 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:cbe4 FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:cbe7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cbec Code1 LAB_1000_cbec 1000:cbe9 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cbec FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:cbf0 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:cbf4 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cc05 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cc12 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:cc17 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:cc1f FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cc23 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:cc27 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:cc2b FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cc3c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cc49 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:cc4e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:cc56 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:cc5b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:cc68 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:cc6d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cc74 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cc7d Code1 LAB_1000_cc7d 1000:cc7d FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:cc80 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:cc83 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cc87 FUN_1000_c79c READ 1 true 1028:0a23 Data6 DAT_1028_0a23 1000:cc8b FUN_1000_c79c READ 1 true 1028:0a25 Data6 DAT_1028_0a25 1000:cc8f FUN_1000_c79c READ 1 true 1028:0a27 Data6 DAT_1028_0a27 1000:cc93 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cc9c FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:cc9f FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:cca6 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:cca9 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:ccac FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:ccb0 FUN_1000_c79c READ 0 true 1028:0a02 Data6 DAT_1028_0a02 1000:ccb5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cccf Code1 LAB_1000_cccf 1000:ccb7 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:ccba FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:ccc3 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:ccc6 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd0a Code1 LAB_1000_cd0a 1000:ccc8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cccf Code1 LAB_1000_cccf 1000:ccca FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:cccd FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd0a Code1 LAB_1000_cd0a 1000:cccf FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:ccd3 FUN_1000_c79c READ 0 true 1028:0a02 Data6 DAT_1028_0a02 1000:ccd8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ccdd Code1 LAB_1000_ccdd 1000:ccda FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:ccdd FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:cce0 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:cced FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:ccf0 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:ccfc FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd0a Code1 LAB_1000_cd0a 1000:ccfe FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd03 Code1 LAB_1000_cd03 1000:cd00 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cd05 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd0a Code1 LAB_1000_cd0a 1000:cd07 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cd0a FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cd0e FUN_1000_c79c READ 0 true 1028:0a02 Data6 DAT_1028_0a02 1000:cd13 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cd18 Code1 LAB_1000_cd18 1000:cd15 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cdb1 Code1 LAB_1000_cdb1 1000:cd18 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cd29 FUN_1000_c79c READ 1 true 1028:07df Data6 DAT_1028_07df 1000:cd2d FUN_1000_c79c READ 1 true 1028:07e1 Data6 DAT_1028_07e1 1000:cd36 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:cd3f FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cd43 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:cd47 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:cd4f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cd54 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cd59 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cd5e FUN_1000_c79c DATA 0 true Stack[-0x76] - 1000:cd61 FUN_1000_c79c DATA 0 true Stack[-0x74] - 1000:cd64 FUN_1000_c79c DATA 0 true Stack[-0x72] - 1000:cd67 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cd78 FUN_1000_c79c READ 1 true 1028:07db Data6 DAT_1028_07db 1000:cd7c FUN_1000_c79c READ 1 true 1028:07dd Data6 DAT_1028_07dd 1000:cd85 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:cd8a FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cd8e FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:cd92 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:cd96 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cd9b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cda0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cda5 FUN_1000_c79c DATA 0 true Stack[-0x7c] - 1000:cda8 FUN_1000_c79c DATA 0 true Stack[-0x7a] - 1000:cdab FUN_1000_c79c DATA 0 true Stack[-0x78] - 1000:cdae FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ce47 Code1 LAB_1000_ce47 1000:cdb1 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:cdc2 FUN_1000_c79c READ 1 true 1028:07df Data6 DAT_1028_07df 1000:cdc6 FUN_1000_c79c READ 1 true 1028:07e1 Data6 DAT_1028_07e1 1000:cdcf FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:cdd8 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cddc FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:cde0 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:cde8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cded FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cdf2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cdf7 FUN_1000_c79c DATA 0 true Stack[-0x76] - 1000:cdfa FUN_1000_c79c DATA 0 true Stack[-0x74] - 1000:cdfd FUN_1000_c79c DATA 0 true Stack[-0x72] - 1000:ce00 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ce11 FUN_1000_c79c READ 1 true 1028:07db Data6 DAT_1028_07db 1000:ce15 FUN_1000_c79c READ 1 true 1028:07dd Data6 DAT_1028_07dd 1000:ce1e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:ce23 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:ce27 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:ce2b FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:ce2f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ce34 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ce39 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ce3e FUN_1000_c79c DATA 0 true Stack[-0x7c] - 1000:ce41 FUN_1000_c79c DATA 0 true Stack[-0x7a] - 1000:ce44 FUN_1000_c79c DATA 0 true Stack[-0x78] - 1000:ce47 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:ce4b FUN_1000_c79c READ 0 true 1028:0a02 Data6 DAT_1028_0a02 1000:ce50 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ce84 Code1 LAB_1000_ce84 1000:ce52 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:ce55 FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:ce58 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:ce5d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ce62 Code1 LAB_1000_ce62 1000:ce62 FUN_1000_c79c DATA 0 true Stack[-0x76] - 1000:ce65 FUN_1000_c79c DATA 0 true Stack[-0x74] - 1000:ce68 FUN_1000_c79c DATA 0 true Stack[-0x72] - 1000:ce6b FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:ce6e FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:ce71 FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:ce76 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ce7b Code1 LAB_1000_ce7b 1000:ce7b FUN_1000_c79c DATA 0 true Stack[-0x7c] - 1000:ce7e FUN_1000_c79c DATA 0 true Stack[-0x7a] - 1000:ce81 FUN_1000_c79c DATA 0 true Stack[-0x78] - 1000:ce84 FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:ce87 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:ce8a FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:ce95 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:ce9a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:cea2 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:cea5 FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:cea8 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:ceb3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:ceb8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:cec0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:cec5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:ced2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ced7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cedc FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:cedf FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:cee2 FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:cee6 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cef0 Code1 LAB_1000_cef0 1000:cee8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf4f Code1 LAB_1000_cf4f 1000:ceea FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:ceee FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf4f Code1 LAB_1000_cf4f 1000:cef0 FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:cef3 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:cef6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:cefe FUN_1000_c79c DATA 1 true Stack[-0x88] - 1000:cf02 FUN_1000_c79c DATA 1 true Stack[-0x86] - 1000:cf06 FUN_1000_c79c DATA 1 true Stack[-0x84] - 1000:cf0a FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:cf0d FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:cf10 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:cf13 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:cf1b FUN_1000_c79c DATA 1 true Stack[-0x82] - 1000:cf1e FUN_1000_c79c DATA 1 true Stack[-0x80] - 1000:cf21 FUN_1000_c79c DATA 1 true Stack[-0x7e] - 1000:cf24 FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:cf27 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:cf2a FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:cf2d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:cf35 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:cf3d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:cf42 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cf47 FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:cf4a FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:cf4d FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cf57 Code1 LAB_1000_cf57 1000:cf51 FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:cf54 FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:cf57 FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:cf5b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf65 Code1 LAB_1000_cf65 1000:cf5d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cf5f FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:cf63 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cf65 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:cf68 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:cf6d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf76 Code1 LAB_1000_cf76 1000:cf80 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:cf83 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:cf88 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf91 Code1 LAB_1000_cf91 1000:cf93 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cf9b Code1 LAB_1000_cf9b 1000:cf95 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cf99 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfb2 Code1 LAB_1000_cfb2 1000:cf9b FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:cf9e FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:cfa7 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:cfaa FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:cfad FUN_1000_c79c DATA 0 true Stack[-0x95] - 1000:cfb2 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:cfb7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfbc Code1 LAB_1000_cfbc 1000:cfb9 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d403 Code1 LAB_1000_d403 1000:cfbc FUN_1000_c79c READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:cfc1 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfc6 Code1 LAB_1000_cfc6 1000:cfc3 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d400 Code1 LAB_1000_d400 1000:cfc6 FUN_1000_c79c WRITE 0 true 1028:0875 Data6 DAT_1028_0875 1000:cfcb FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cfcf FUN_1000_c79c READ 1 true 1028:0a23 Data6 DAT_1028_0a23 1000:cfd3 FUN_1000_c79c READ 1 true 1028:0a25 Data6 DAT_1028_0a25 1000:cfd7 FUN_1000_c79c READ 1 true 1028:0a27 Data6 DAT_1028_0a27 1000:cfdb FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:cfe3 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cff2 Code1 LAB_1000_cff2 1000:cfe5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cfea Code1 LAB_1000_cfea 1000:cfe7 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2cd Code1 LAB_1000_d2cd 1000:cfed FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:cff2 Code1 LAB_1000_cff2 1000:cfef FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2cd Code1 LAB_1000_d2cd 1000:cff2 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:cff6 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:cffa FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:cffe FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d002 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d006 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d013 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d018 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d020 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d024 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d028 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d02c FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d030 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d034 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d041 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d046 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d04e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:d053 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:d060 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d065 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d06c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d075 Code1 LAB_1000_d075 1000:d075 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:d078 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:d07b FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d07f FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d083 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d087 FUN_1000_c79c READ 1 true 1028:07df Data6 DAT_1028_07df 1000:d08b FUN_1000_c79c READ 1 true 1028:07e1 Data6 DAT_1028_07e1 1000:d08f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d09c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d0a1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d0a9 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d0ad FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d0b1 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d0b5 FUN_1000_c79c READ 1 true 1028:07db Data6 DAT_1028_07db 1000:d0b9 FUN_1000_c79c READ 1 true 1028:07dd Data6 DAT_1028_07dd 1000:d0bd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d0ca FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d0cf FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d0d7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:d0dc FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:d0e9 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d0ee FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d0f5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d0fe Code1 LAB_1000_d0fe 1000:d0fe FUN_1000_c79c DATA 0 true Stack[-0x6c] - 1000:d101 FUN_1000_c79c DATA 0 true Stack[-0x6a] - 1000:d104 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d108 FUN_1000_c79c READ 1 true 1028:0a23 Data6 DAT_1028_0a23 1000:d10c FUN_1000_c79c READ 1 true 1028:0a25 Data6 DAT_1028_0a25 1000:d110 FUN_1000_c79c READ 1 true 1028:0a27 Data6 DAT_1028_0a27 1000:d114 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d119 FUN_1000_c79c DATA 1 true Stack[-0x6a] - 1000:d11c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d12b Code1 LAB_1000_d12b 1000:d11e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d123 Code1 LAB_1000_d123 1000:d120 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2bb Code1 LAB_1000_d2bb 1000:d123 FUN_1000_c79c DATA 1 true Stack[-0x6c] - 1000:d126 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d12b Code1 LAB_1000_d12b 1000:d128 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2bb Code1 LAB_1000_d2bb 1000:d12b FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d12f FUN_1000_c79c READ 1 true 1028:0a42 Data6 DAT_1028_0a42 1000:d139 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d13e Code1 LAB_1000_d13e 1000:d13b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2b9 Code1 LAB_1000_d2b9 1000:d13e FUN_1000_c79c READ 1 true 1028:0a42 Data6 DAT_1028_0a42 1000:d145 FUN_1000_c79c WRITE 0 true 1028:0a42 Data6 DAT_1028_0a42 1000:d14b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:d150 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:d15f FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d163 FUN_1000_c79c READ 1 true 1028:0a46 Data6 DAT_1028_0a46 1000:d167 FUN_1000_c79c READ 1 true 1028:0a48 Data6 DAT_1028_0a48 1000:d16b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:d172 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d176 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:d17b FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d180 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d185 Code1 LAB_1000_d185 1000:d182 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d215 Code1 LAB_1000_d215 1000:d185 FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:d189 FUN_1000_c79c WRITE 0 true 1028:0a35 Data6 DAT_1028_0a35 1000:d18e FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:d191 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:d19a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d1aa FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d1ad FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d1b1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:d1b6 FUN_1000_c79c DATA 0 true Stack[-0x8] - 1000:d1b9 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d1bd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:c4e1 Code1 FUN_1000_c4e1 FUN_1000_c4e1 1000:d1c2 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d1cd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:d1d2 FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:d1d6 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:d1e5 FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:d1eb FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:0002 Code1 FUN_1000_0002 FUN_1000_0002 1000:d1f0 FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:d1fc FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:d201 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d20c FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:d210 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:d215 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d218 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d21c FUN_1000_c79c READ 0 true 1028:0a42 Data6 DAT_1028_0a42 1000:d220 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d224 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b476 Code1 FUN_1000_b476 FUN_1000_b476 1000:d229 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:14c1 Code5 FUN_1020_14c1 FUN_1020_14c1 1000:d237 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d24b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:d253 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:d256 FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:d259 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d261 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d266 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d26b FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:d26e FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:d271 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:14c1 Code5 FUN_1020_14c1 FUN_1020_14c1 1000:d27f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d293 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:d29b FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:d29e FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:d2a1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d2a9 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d2ae FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d2b3 FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:d2b6 FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:d2b9 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d2ca Code1 LAB_1000_d2ca 1000:d2bb FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d2bf FUN_1000_c79c READ 1 true 1028:0a42 Data6 DAT_1028_0a42 1000:d2c6 FUN_1000_c79c WRITE 0 true 1028:0a42 Data6 DAT_1028_0a42 1000:d2ca FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d400 Code1 LAB_1000_d400 1000:d2cd FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d2d1 FUN_1000_c79c READ 0 true 1028:0a15 Data6 DAT_1028_0a15 1000:d2d5 FUN_1000_c79c READ 0 true 1028:0a13 Data6 DAT_1028_0a13 1000:d2d9 FUN_1000_c79c READ 0 true 1028:0a19 Data6 DAT_1028_0a19 1000:d2dd FUN_1000_c79c READ 0 true 1028:0a17 Data6 DAT_1028_0a17 1000:d2e1 FUN_1000_c79c READ 0 true 1028:0a1d Data6 DAT_1028_0a1d 1000:d2e5 FUN_1000_c79c READ 0 true 1028:0a1b Data6 DAT_1028_0a1b 1000:d2e9 FUN_1000_c79c READ 0 true 1028:0a21 Data6 DAT_1028_0a21 1000:d2ed FUN_1000_c79c READ 0 true 1028:0a1f Data6 DAT_1028_0a1f 1000:d2f1 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d2f5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:9ae0 Code1 FUN_1000_9ae0 FUN_1000_9ae0 1000:d2fc FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d301 Code1 LAB_1000_d301 1000:d2fe FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d400 Code1 LAB_1000_d400 1000:d301 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d306 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d318 Code1 LAB_1000_d318 1000:d308 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d30d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d318 Code1 LAB_1000_d318 1000:d30f FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d313 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d318 Code1 LAB_1000_d318 1000:d315 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d400 Code1 LAB_1000_d400 1000:d318 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:d31b FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:d31e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d32c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d331 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d336 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:d339 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:d33c FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d34b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d353 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:14c1 Code5 FUN_1020_14c1 FUN_1020_14c1 1000:d361 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d373 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:d37b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d380 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d38c FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:d38f FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:d392 FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d395 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d399 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:d39c FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:d39f FUN_1000_c79c WRITE 0 true 1028:07db Data6 DAT_1028_07db 1000:d3a2 FUN_1000_c79c WRITE 0 true 1028:07dd Data6 DAT_1028_07dd 1000:d3a6 FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d3a9 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d3ad FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:d3b0 FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:d3b3 FUN_1000_c79c WRITE 0 true 1028:07df Data6 DAT_1028_07df 1000:d3b6 FUN_1000_c79c WRITE 0 true 1028:07e1 Data6 DAT_1028_07e1 1000:d3ba FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d3be FUN_1000_c79c READ 0 true 1028:0a15 Data6 DAT_1028_0a15 1000:d3c2 FUN_1000_c79c READ 0 true 1028:0a13 Data6 DAT_1028_0a13 1000:d3c6 FUN_1000_c79c READ 0 true 1028:0a19 Data6 DAT_1028_0a19 1000:d3ca FUN_1000_c79c READ 0 true 1028:0a17 Data6 DAT_1028_0a17 1000:d3ce FUN_1000_c79c READ 0 true 1028:0a1d Data6 DAT_1028_0a1d 1000:d3d2 FUN_1000_c79c READ 0 true 1028:0a1b Data6 DAT_1028_0a1b 1000:d3d6 FUN_1000_c79c READ 0 true 1028:0a21 Data6 DAT_1028_0a21 1000:d3da FUN_1000_c79c READ 0 true 1028:0a1f Data6 DAT_1028_0a1f 1000:d3de FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d3e2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:9b69 Code1 FUN_1000_9b69 FUN_1000_9b69 1000:d3e9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d3f4 Code1 LAB_1000_d3f4 1000:d3eb FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:d3ef FUN_1000_c79c WRITE 0 true 1028:0a35 Data6 DAT_1028_0a35 1000:d3f4 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d3f7 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d3fb FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:d400 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:d405 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d40a Code1 LAB_1000_d40a 1000:d407 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d785 Code1 LAB_1000_d785 1000:d40a FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d40e FUN_1000_c79c READ 1 true 1028:0a1b Data6 DAT_1028_0a1b 1000:d412 FUN_1000_c79c READ 1 true 1028:0a1d Data6 DAT_1028_0a1d 1000:d416 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d41a FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d41e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d423 FUN_1000_c79c DATA 0 true Stack[-0x76] - 1000:d426 FUN_1000_c79c DATA 0 true Stack[-0x74] - 1000:d429 FUN_1000_c79c DATA 0 true Stack[-0x72] - 1000:d42c FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d430 FUN_1000_c79c READ 1 true 1028:0a1f Data6 DAT_1028_0a1f 1000:d434 FUN_1000_c79c READ 1 true 1028:0a21 Data6 DAT_1028_0a21 1000:d438 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d43c FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d440 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d445 FUN_1000_c79c DATA 0 true Stack[-0x7c] - 1000:d448 FUN_1000_c79c DATA 0 true Stack[-0x7a] - 1000:d44b FUN_1000_c79c DATA 0 true Stack[-0x78] - 1000:d44e FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:d451 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:d454 FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:d45f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d464 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d46c FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:d46f FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:d472 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:d47d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d482 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d48a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:d48f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:d49c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d4a1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d4a6 FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:d4a9 FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:d4ac FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:d4af FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:d4b2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d4bf FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d4c7 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:d4ca FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:d4cd FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:d4d8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d4e0 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d4f1 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d4f5 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d4f9 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d4fd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d505 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d50d FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:d510 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:d513 FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:d51e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d526 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d537 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d53b FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d53f FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d543 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d54b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d553 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:d55b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d563 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d568 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:d56b FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:d56e FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:d571 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:d574 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d581 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d589 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:d58c FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:d58f FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:d59a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d59f FUN_1000_c79c DATA 1 true Stack[-0x88] - 1000:d5a3 FUN_1000_c79c DATA 1 true Stack[-0x86] - 1000:d5a7 FUN_1000_c79c DATA 1 true Stack[-0x84] - 1000:d5ab FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d5b3 FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:d5b6 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:d5b9 FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:d5c4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d5c9 FUN_1000_c79c DATA 1 true Stack[-0x82] - 1000:d5cc FUN_1000_c79c DATA 1 true Stack[-0x80] - 1000:d5cf FUN_1000_c79c DATA 1 true Stack[-0x7e] - 1000:d5d2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d5da FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:d5e2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d5e7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d5ec FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:d5ef FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:d5f2 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:d5f5 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:d5fe FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:d601 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d610 Code1 LAB_1000_d610 1000:d603 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d608 Code1 LAB_1000_d608 1000:d605 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d608 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:d60b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d610 Code1 LAB_1000_d610 1000:d60d FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d610 FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:d614 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d624 Code1 LAB_1000_d624 1000:d616 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d61b Code1 LAB_1000_d61b 1000:d618 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d61b FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:d61f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d624 Code1 LAB_1000_d624 1000:d621 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d624 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:d627 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:d63a FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:d63d FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:d642 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d64b Code1 LAB_1000_d64b 1000:d64d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d65b Code1 LAB_1000_d65b 1000:d64f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d654 Code1 LAB_1000_d654 1000:d651 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d656 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d65b Code1 LAB_1000_d65b 1000:d658 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d65b FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d65e FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d662 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d673 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d677 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d67b FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d683 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d687 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d68b FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d68f FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d693 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:d69a FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d69d FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d6a1 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d6b2 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d6b6 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d6ba FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d6c2 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d6c6 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d6ca FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d6ce FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d6d2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:d6e0 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d6ef Code1 LAB_1000_d6ef 1000:d6e2 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d6e7 Code1 LAB_1000_d6e7 1000:d6e4 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d6ea FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d6ef Code1 LAB_1000_d6ef 1000:d6ec FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d6ef FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d6f2 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d6f6 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d707 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d70b FUN_1000_c79c READ 1 true 1028:0a1f Data6 DAT_1028_0a1f 1000:d70f FUN_1000_c79c READ 1 true 1028:0a21 Data6 DAT_1028_0a21 1000:d717 FUN_1000_c79c READ 1 true 1028:0a1b Data6 DAT_1028_0a1b 1000:d71b FUN_1000_c79c READ 1 true 1028:0a1d Data6 DAT_1028_0a1d 1000:d71f FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d723 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d727 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:d72e FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d731 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d735 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d746 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d74a FUN_1000_c79c READ 1 true 1028:0a1b Data6 DAT_1028_0a1b 1000:d74e FUN_1000_c79c READ 1 true 1028:0a1d Data6 DAT_1028_0a1d 1000:d756 FUN_1000_c79c READ 1 true 1028:0a1f Data6 DAT_1028_0a1f 1000:d75a FUN_1000_c79c READ 1 true 1028:0a21 Data6 DAT_1028_0a21 1000:d75e FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d762 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d766 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:d774 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d77d Code1 LAB_1000_d77d 1000:d776 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d77b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d782 Code1 LAB_1000_d782 1000:d77d FUN_1000_c79c DATA 0 true Stack[-0x95] - 1000:d782 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:d787 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d78c Code1 LAB_1000_d78c 1000:d789 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:d78c FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d790 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d794 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d798 FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:d79c FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:d7a6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d7b3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d7b8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d7c0 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d7c4 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d7c8 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d7cc FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:d7d0 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:d7d4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:d7e1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:d7e6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:d7ee FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:d7f3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:d800 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:d805 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d80c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d815 Code1 LAB_1000_d815 1000:d815 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:d818 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:d81b FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d81f FUN_1000_c79c READ 1 true 1028:0a23 Data6 DAT_1028_0a23 1000:d823 FUN_1000_c79c READ 1 true 1028:0a25 Data6 DAT_1028_0a25 1000:d827 FUN_1000_c79c READ 1 true 1028:0a27 Data6 DAT_1028_0a27 1000:d82b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:d834 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:d837 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:d83e FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:d841 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:d844 FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:d848 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d859 Code1 LAB_1000_d859 1000:d84a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d84f Code1 LAB_1000_d84f 1000:d84c FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5e Code1 LAB_1000_de5e 1000:d84f FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:d854 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d859 Code1 LAB_1000_d859 1000:d856 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5e Code1 LAB_1000_de5e 1000:d859 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d85d FUN_1000_c79c READ 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:d862 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d899 Code1 LAB_1000_d899 1000:d864 FUN_1000_c79c READ 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:d869 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d879 Code1 LAB_1000_d879 1000:d86b FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d877 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d899 Code1 LAB_1000_d899 1000:d879 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:d881 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d885 FUN_1000_c79c READ 1 true 1028:0a44 Data6 DAT_1028_0a44 1000:d88d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d892 Code1 LAB_1000_d892 1000:d88f FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5e Code1 LAB_1000_de5e 1000:d894 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d899 Code1 LAB_1000_d899 1000:d896 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5e Code1 LAB_1000_de5e 1000:d899 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d89e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8aa Code1 LAB_1000_d8aa 1000:d8a0 FUN_1000_c79c READ 0 true 1028:0875 Data6 DAT_1028_0875 1000:d8a5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8aa Code1 LAB_1000_d8aa 1000:d8a7 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5e Code1 LAB_1000_de5e 1000:d8aa FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d8b7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8ca Code1 LAB_1000_d8ca 1000:d8b9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8be Code1 LAB_1000_d8be 1000:d8bb FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db43 Code1 LAB_1000_db43 1000:d8c5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8ca Code1 LAB_1000_d8ca 1000:d8c7 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db43 Code1 LAB_1000_db43 1000:d8ca FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d8ce FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d8d2 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:d8d6 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d8e9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8f2 Code1 LAB_1000_d8f2 1000:d8f5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d904 Code1 LAB_1000_d904 1000:d8f7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d8fc Code1 LAB_1000_d8fc 1000:d8f9 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d8ff FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d904 Code1 LAB_1000_d904 1000:d901 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d904 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d908 FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:d90c FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:d910 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d923 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d92c Code1 LAB_1000_d92c 1000:d92f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d93e Code1 LAB_1000_d93e 1000:d931 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d936 Code1 LAB_1000_d936 1000:d933 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d939 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d93e Code1 LAB_1000_d93e 1000:d93b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d93e FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:d941 FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:d946 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d94f Code1 LAB_1000_d94f 1000:d952 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d961 Code1 LAB_1000_d961 1000:d954 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d959 Code1 LAB_1000_d959 1000:d956 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d95c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d961 Code1 LAB_1000_d961 1000:d95e FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d961 FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:d964 FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:d969 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d972 Code1 LAB_1000_d972 1000:d975 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d97e Code1 LAB_1000_d97e 1000:d977 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d97c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d9f4 Code1 LAB_1000_d9f4 1000:d980 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:d983 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:d988 FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:d98b FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:d98e FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d99f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d9b3 Code1 LAB_1000_d9b3 1000:d9a1 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:d9a4 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d9a8 FUN_1000_c79c WRITE 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:d9ae FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:d9b3 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:d9b7 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:d9d0 Code1 LAB_1000_d9d0 1000:d9b9 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d9ce FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:d9f1 Code1 LAB_1000_d9f1 1000:d9d0 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:d9f1 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db40 Code1 LAB_1000_db40 1000:d9f4 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:d9f8 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:d9fc FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:da00 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:da04 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:da0e Code1 LAB_1000_da0e 1000:da06 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:da55 Code1 LAB_1000_da55 1000:da08 FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:da0c FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:da55 Code1 LAB_1000_da55 1000:da0e FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:da22 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:da29 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:da2c FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:da2f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:da3d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:da42 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:da4d FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:da50 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:da53 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:da9a Code1 LAB_1000_da9a 1000:da55 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:da69 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:da70 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:da73 FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:da76 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:da84 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:da89 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:da94 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:da97 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:da9a FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:da9e FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:daa2 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:daa6 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:daaa FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dab4 Code1 LAB_1000_dab4 1000:daac FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dafb Code1 LAB_1000_dafb 1000:daae FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:dab2 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dafb Code1 LAB_1000_dafb 1000:dab4 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dac8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:dacf FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:dad2 FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:dad5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:dae3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:dae8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:daf3 FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:daf6 FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:daf9 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db40 Code1 LAB_1000_db40 1000:dafb FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:db0f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:db16 FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:db19 FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:db1c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:db2a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:db2f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:db3a FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:db3d FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:db40 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5b Code1 LAB_1000_de5b 1000:db43 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:db47 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db4c Code1 LAB_1000_db4c 1000:db49 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dbd6 Code1 LAB_1000_dbd6 1000:db4c FUN_1000_c79c READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:db51 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db56 Code1 LAB_1000_db56 1000:db53 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dbd3 Code1 LAB_1000_dbd3 1000:db56 FUN_1000_c79c WRITE 0 true 1028:07ca Data6 DAT_1028_07ca 1000:db5d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:14a4 Code5 FUN_1020_14a4 FUN_1020_14a4 1000:db66 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db70 Code1 LAB_1000_db70 1000:db68 FUN_1000_c79c WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:db6e FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db95 Code1 LAB_1000_db95 1000:db73 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db7d Code1 LAB_1000_db7d 1000:db75 FUN_1000_c79c WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:db7b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db95 Code1 LAB_1000_db95 1000:db80 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db8a Code1 LAB_1000_db8a 1000:db82 FUN_1000_c79c WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:db88 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:db95 Code1 LAB_1000_db95 1000:db8d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:db95 Code1 LAB_1000_db95 1000:db8f FUN_1000_c79c WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:db95 FUN_1000_c79c WRITE 0 true 1028:0873 Data6 DAT_1028_0873 1000:db9a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dba7 FUN_1000_c79c DATA 0 true Stack[-0x40] - 1000:dbac FUN_1000_c79c DATA 0 true Stack[-0x3e] - 1000:dbb1 FUN_1000_c79c DATA 0 true Stack[-0x3c] - 1000:dbb6 FUN_1000_c79c DATA 0 true Stack[-0x2768] - 1000:dbbc FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dbc2 Code1 LAB_1000_dbc2 1000:dbbe FUN_1000_c79c DATA 0 true Stack[-0x2768] - 1000:dbc2 FUN_1000_c79c DATA 1 true Stack[-0x2768] - 1000:dbc7 FUN_1000_c79c WRITE 0 true 1028:0d73 Data6 DAT_1028_0d73 1000:dbc7 FUN_1000_c79c WRITE 0 false 1028:0dc6 Data6 DAT_1028_0dc6 1000:dbcc FUN_1000_c79c DATA 0 true Stack[-0x2768] - 1000:dbd1 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dbbe Code1 LAB_1000_dbbe 1000:dbd3 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5b Code1 LAB_1000_de5b 1000:dbd6 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:dbdb FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dbe0 Code1 LAB_1000_dbe0 1000:dbdd FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ddb3 Code1 LAB_1000_ddb3 1000:dbe0 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:dbe5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dbea Code1 LAB_1000_dbea 1000:dbe7 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ddb3 Code1 LAB_1000_ddb3 1000:dbea FUN_1000_c79c DATA 0 true Stack[-0x276c] - 1000:dbf0 FUN_1000_c79c DATA 0 true Stack[-0x276a] - 1000:dbf6 FUN_1000_c79c DATA 0 true Stack[-0x2766] - 1000:dbfc FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dc02 Code1 LAB_1000_dc02 1000:dbfe FUN_1000_c79c DATA 0 true Stack[-0x2766] - 1000:dc02 FUN_1000_c79c DATA 1 true Stack[-0x2766] - 1000:dc0d FUN_1000_c79c READ 0 true 1028:3371 Data6 DAT_1028_3371 1000:dc0d FUN_1000_c79c READ 0 false 1028:33c4 Data6 DAT_1028_33c4 1000:dc12 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dc2e Code1 LAB_1000_dc2e 1000:dc14 FUN_1000_c79c DATA 1 true Stack[-0x276c] - 1000:dc18 FUN_1000_c79c DATA 1 true Stack[-0x276a] - 1000:dc21 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:dc26 FUN_1000_c79c DATA 0 true Stack[-0x276c] - 1000:dc2a FUN_1000_c79c DATA 0 true Stack[-0x276a] - 1000:dc2e FUN_1000_c79c DATA 0 true Stack[-0x2766] - 1000:dc33 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dbfe Code1 LAB_1000_dbfe 1000:dc35 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dc47 FUN_1000_c79c DATA 1 true Stack[-0x276c] - 1000:dc4b FUN_1000_c79c DATA 1 true Stack[-0x276a] - 1000:dc53 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dc65 FUN_1000_c79c DATA 0 true Stack[-0x276a] - 1000:dc6a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dc6f Code1 LAB_1000_dc6f 1000:dc6c FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dd42 Code1 LAB_1000_dd42 1000:dc6f FUN_1000_c79c DATA 0 true Stack[-0x276c] - 1000:dc75 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dc7a Code1 LAB_1000_dc7a 1000:dc77 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dd42 Code1 LAB_1000_dd42 1000:dc7a FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dc8d FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dc9f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:dca6 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dcaa FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:dcaf FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dcc3 FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dcce FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dcdb FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dcdf FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:a604 Code1 FUN_1000_a604 FUN_1000_a604 1000:dce4 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dcef FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:dcf4 FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:dcf8 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dd03 FUN_1000_c79c DATA 0 true Stack[-0x276e] - 1000:dd07 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:dd0c FUN_1000_c79c READ 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:dd11 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dd3b Code1 LAB_1000_dd3b 1000:dd13 FUN_1000_c79c READ 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:dd18 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dd3b Code1 LAB_1000_dd3b 1000:dd1a FUN_1000_c79c READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:dd1f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dd3b Code1 LAB_1000_dd3b 1000:dd23 FUN_1000_c79c WRITE 0 true 1028:0851 Data6 DAT_1028_0851 1000:dd26 FUN_1000_c79c WRITE 0 true 1028:0853 Data6 DAT_1028_0853 1000:dd29 FUN_1000_c79c WRITE 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:dd2e FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dd3b FUN_1000_c79c WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:dd40 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dd7c Code1 LAB_1000_dd7c 1000:dd42 FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:dd4d FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dd55 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dd66 FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:dd73 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dd77 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:dd7c FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dd8f FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:dda1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:dda8 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ddac FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bda2 Code1 FUN_1000_bda2 FUN_1000_bda2 1000:ddb1 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:dddd Code1 LAB_1000_dddd 1000:ddb3 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:ddb8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dddd Code1 LAB_1000_dddd 1000:ddba FUN_1000_c79c READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:ddc2 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ddd4 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ddd8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:dddd FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ddf5 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:de35 Code1 LAB_1000_de35 1000:ddf7 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:ddfc FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:de0a Code1 LAB_1000_de0a 1000:ddfe FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:de02 FUN_1000_c79c WRITE 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:de08 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de14 Code1 LAB_1000_de14 1000:de0a FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:de0e FUN_1000_c79c WRITE 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:de14 FUN_1000_c79c READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:de19 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:de26 Code1 LAB_1000_de26 1000:de1b FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:de1f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:ae6e Code1 FUN_1000_ae6e FUN_1000_ae6e 1000:de24 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de33 Code1 LAB_1000_de33 1000:de26 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:de33 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:de5b Code1 LAB_1000_de5b 1000:de35 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:de42 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:de4c FUN_1000_c79c WRITE 0 true 1028:424c Data6 DAT_1028_424c 1000:de51 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:de55 FUN_1000_c79c WRITE 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:de5b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:de5e FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:de62 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:de6d Code1 LAB_1000_de6d 1000:de64 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dea3 Code1 LAB_1000_dea3 1000:de66 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:de6b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dea3 Code1 LAB_1000_dea3 1000:de6d FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:de75 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:de79 FUN_1000_c79c READ 1 true 1028:0a44 Data6 DAT_1028_0a44 1000:de81 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dea3 Code1 LAB_1000_dea3 1000:de85 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dea3 Code1 LAB_1000_dea3 1000:de89 FUN_1000_c79c WRITE 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:de8d FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:dea0 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:dea3 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:dea6 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:dea9 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:deac FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:debb Code1 LAB_1000_debb 1000:deae FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:deb3 Code1 LAB_1000_deb3 1000:deb0 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:deb3 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:deb6 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:debb Code1 LAB_1000_debb 1000:deb8 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:debb FUN_1000_c79c DATA 0 true Stack[-0x66] - 1000:debf FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ded0 Code1 LAB_1000_ded0 1000:dec1 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dec6 Code1 LAB_1000_dec6 1000:dec3 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:dec6 FUN_1000_c79c DATA 0 true Stack[-0x68] - 1000:decb FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ded0 Code1 LAB_1000_ded0 1000:decd FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:ded0 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:ded4 FUN_1000_c79c READ 0 true 1028:0a44 Data6 DAT_1028_0a44 1000:ded9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dede Code1 LAB_1000_dede 1000:dedb FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:dede FUN_1000_c79c READ 1 true 1028:0a17 Data6 DAT_1028_0a17 1000:dee2 FUN_1000_c79c READ 1 true 1028:0a19 Data6 DAT_1028_0a19 1000:dee6 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:def7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:defc FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:df01 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:df06 FUN_1000_c79c DATA 0 true Stack[-0x76] - 1000:df09 FUN_1000_c79c DATA 0 true Stack[-0x74] - 1000:df0c FUN_1000_c79c DATA 0 true Stack[-0x72] - 1000:df0f FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:df20 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:df24 FUN_1000_c79c READ 1 true 1028:0a13 Data6 DAT_1028_0a13 1000:df28 FUN_1000_c79c READ 1 true 1028:0a15 Data6 DAT_1028_0a15 1000:df2c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:df31 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:df36 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:df3b FUN_1000_c79c DATA 0 true Stack[-0x7c] - 1000:df3e FUN_1000_c79c DATA 0 true Stack[-0x7a] - 1000:df41 FUN_1000_c79c DATA 0 true Stack[-0x78] - 1000:df44 FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:df47 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:df4a FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:df55 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:df5a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:df62 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:df65 FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:df68 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:df73 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:df78 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:df80 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:df85 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:df92 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:df97 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:df9c FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:df9f FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:dfa2 FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:dfa6 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:dfb0 Code1 LAB_1000_dfb0 1000:dfa8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e00f Code1 LAB_1000_e00f 1000:dfaa FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:dfae FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e00f Code1 LAB_1000_e00f 1000:dfb0 FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:dfb3 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:dfb6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:dfbe FUN_1000_c79c DATA 1 true Stack[-0x88] - 1000:dfc2 FUN_1000_c79c DATA 1 true Stack[-0x86] - 1000:dfc6 FUN_1000_c79c DATA 1 true Stack[-0x84] - 1000:dfca FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:dfcd FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:dfd0 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:dfd3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:dfdb FUN_1000_c79c DATA 1 true Stack[-0x82] - 1000:dfde FUN_1000_c79c DATA 1 true Stack[-0x80] - 1000:dfe1 FUN_1000_c79c DATA 1 true Stack[-0x7e] - 1000:dfe4 FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:dfe7 FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:dfea FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:dfed FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:dff5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:dffd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e002 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e007 FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e00a FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e00d FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e017 Code1 LAB_1000_e017 1000:e011 FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e014 FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e017 FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e01b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e025 Code1 LAB_1000_e025 1000:e01d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:e01f FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e023 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:e025 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:e028 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:e02d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e036 Code1 LAB_1000_e036 1000:e040 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:e043 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:e048 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e051 Code1 LAB_1000_e051 1000:e053 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e05b Code1 LAB_1000_e05b 1000:e055 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:e059 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e060 Code1 LAB_1000_e060 1000:e05b FUN_1000_c79c DATA 0 true Stack[-0x95] - 1000:e060 FUN_1000_c79c DATA 0 true Stack[-0x95] - 1000:e065 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e06a Code1 LAB_1000_e06a 1000:e067 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:e06a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e07d FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:e080 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:e083 FUN_1000_c79c DATA 1 true Stack[-0x6e] - 1000:e086 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e095 Code1 LAB_1000_e095 1000:e088 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e08d Code1 LAB_1000_e08d 1000:e08a FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:e08d FUN_1000_c79c DATA 1 true Stack[-0x70] - 1000:e090 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e095 Code1 LAB_1000_e095 1000:e092 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e1b9 Code1 LAB_1000_e1b9 1000:e095 FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:e098 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:e09b FUN_1000_c79c DATA 0 true Stack[-0x70] - 1000:e09e FUN_1000_c79c DATA 0 true Stack[-0x6e] - 1000:e0a1 FUN_1000_c79c DATA 1 true Stack[-0x2760] - 1000:e0a6 FUN_1000_c79c DATA 0 true Stack[-0x2760] - 1000:e0aa FUN_1000_c79c DATA 1 true Stack[-0x2760] - 1000:e0b5 FUN_1000_c79c DATA 0 true Stack[-0x277a] - 1000:e0b9 FUN_1000_c79c DATA 0 true Stack[-0x2778] - 1000:e0bd FUN_1000_c79c DATA 1 true Stack[-0x68] - 1000:e0c0 FUN_1000_c79c DATA 1 true Stack[-0x66] - 1000:e0cb FUN_1000_c79c DATA 1 true Stack[-0x4] - 1000:e0d1 FUN_1000_c79c DATA 1 true Stack[-0x76] - 1000:e0d4 FUN_1000_c79c DATA 1 true Stack[-0x74] - 1000:e0d7 FUN_1000_c79c DATA 1 true Stack[-0x72] - 1000:e0da FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e0ea FUN_1000_c79c DATA 1 true Stack[-0x7c] - 1000:e0ed FUN_1000_c79c DATA 1 true Stack[-0x7a] - 1000:e0f0 FUN_1000_c79c DATA 1 true Stack[-0x78] - 1000:e0f3 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e103 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e107 FUN_1000_c79c READ 1 true 1028:0a2f Data6 DAT_1028_0a2f 1000:e10b FUN_1000_c79c READ 1 true 1028:0a31 Data6 DAT_1028_0a31 1000:e10f FUN_1000_c79c READ 1 true 1028:0a33 Data6 DAT_1028_0a33 1000:e113 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e123 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e127 FUN_1000_c79c READ 1 true 1028:0a29 Data6 DAT_1028_0a29 1000:e12b FUN_1000_c79c READ 1 true 1028:0a2b Data6 DAT_1028_0a2b 1000:e12f FUN_1000_c79c READ 1 true 1028:0a2d Data6 DAT_1028_0a2d 1000:e133 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e143 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:e146 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:e151 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e155 FUN_1000_c79c READ 1 true 1028:0a36 Data6 DAT_1028_0a36 1000:e159 FUN_1000_c79c READ 1 true 1028:0a38 Data6 DAT_1028_0a38 1000:e15d FUN_1000_c79c READ 1 true 1028:0a3a Data6 DAT_1028_0a3a 1000:e161 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e171 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e175 FUN_1000_c79c READ 1 true 1028:0a3c Data6 DAT_1028_0a3c 1000:e179 FUN_1000_c79c READ 1 true 1028:0a3e Data6 DAT_1028_0a3e 1000:e17d FUN_1000_c79c READ 1 true 1028:0a40 Data6 DAT_1028_0a40 1000:e181 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e191 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e195 FUN_1000_c79c READ 1 true 1028:0a42 Data6 DAT_1028_0a42 1000:e199 FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e1a1 FUN_1000_c79c DATA 1 true Stack[-0x2776] - 1000:e1a5 FUN_1000_c79c READ 1 true 1028:0a46 Data6 DAT_1028_0a46 1000:e1a9 FUN_1000_c79c READ 1 true 1028:0a48 Data6 DAT_1028_0a48 1000:e1ad FUN_1000_c79c DATA 1 true Stack[-0x277a] - 1000:e1b9 FUN_1000_c79c DATA 0 true Stack[-0x4] - 1000:e1be FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e1c3 Code1 LAB_1000_e1c3 1000:e1c0 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:cb6d Code1 LAB_1000_cb6d 1000:e1c3 FUN_1000_c79c DATA 0 true Stack[-0x2760] - 1000:e1c8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e1cd Code1 LAB_1000_e1cd 1000:e1ca FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e831 Code1 LAB_1000_e831 1000:e1cd FUN_1000_c79c DATA 0 true Stack[-0x2734] - 1000:e1d2 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e1e5 Code1 LAB_1000_e1e5 1000:e1d4 FUN_1000_c79c DATA 0 true Stack[-0x275e] - 1000:e1d8 FUN_1000_c79c DATA 0 true Stack[-0x2734] - 1000:e1dc FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e1e0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:b476 Code1 FUN_1000_b476 FUN_1000_b476 1000:e1e5 FUN_1000_c79c DATA 1 true Stack[-0x2732] - 1000:e1e9 FUN_1000_c79c DATA 1 true Stack[-0x2730] - 1000:e1ed FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e219 Code1 LAB_1000_e219 1000:e1ef FUN_1000_c79c DATA 1 true Stack[-0x273a] - 1000:e1f3 FUN_1000_c79c DATA 1 true Stack[-0x2738] - 1000:e1f7 FUN_1000_c79c DATA 1 true Stack[-0x2736] - 1000:e201 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1007 Code5 FUN_1020_1007 FUN_1020_1007 1000:e206 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e219 Code1 LAB_1000_e219 1000:e208 FUN_1000_c79c DATA 0 true Stack[-0x2730] - 1000:e20c FUN_1000_c79c DATA 0 true Stack[-0x2732] - 1000:e210 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e214 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:e219 FUN_1000_c79c DATA 1 true Stack[-0x2756] - 1000:e21d FUN_1000_c79c DATA 1 true Stack[-0x2754] - 1000:e221 FUN_1000_c79c DATA 1 true Stack[-0x2752] - 1000:e22d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e232 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:e23a FUN_1000_c79c DATA 1 true Stack[-0x275c] - 1000:e23e FUN_1000_c79c DATA 1 true Stack[-0x275a] - 1000:e242 FUN_1000_c79c DATA 1 true Stack[-0x2758] - 1000:e24e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e253 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:e25b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e260 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:e26d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e272 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e277 FUN_1000_c79c DATA 0 true Stack[-0x5c] - 1000:e27a FUN_1000_c79c DATA 0 true Stack[-0x5a] - 1000:e27d FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:e280 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:e283 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e28b FUN_1000_c79c DATA 1 true Stack[-0x88] - 1000:e28f FUN_1000_c79c DATA 1 true Stack[-0x86] - 1000:e293 FUN_1000_c79c DATA 1 true Stack[-0x84] - 1000:e297 FUN_1000_c79c DATA 1 true Stack[-0x2756] - 1000:e29b FUN_1000_c79c DATA 1 true Stack[-0x2754] - 1000:e29f FUN_1000_c79c DATA 1 true Stack[-0x2752] - 1000:e2a3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e2ab FUN_1000_c79c DATA 1 true Stack[-0x82] - 1000:e2ae FUN_1000_c79c DATA 1 true Stack[-0x80] - 1000:e2b1 FUN_1000_c79c DATA 1 true Stack[-0x7e] - 1000:e2b4 FUN_1000_c79c DATA 1 true Stack[-0x275c] - 1000:e2b8 FUN_1000_c79c DATA 1 true Stack[-0x275a] - 1000:e2bc FUN_1000_c79c DATA 1 true Stack[-0x2758] - 1000:e2c0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e2c8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e2d0 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e2d5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e2da FUN_1000_c79c DATA 0 true Stack[-0x60] - 1000:e2dd FUN_1000_c79c DATA 0 true Stack[-0x5e] - 1000:e2e0 FUN_1000_c79c DATA 1 true Stack[-0x60] - 1000:e2e3 FUN_1000_c79c DATA 1 true Stack[-0x5e] - 1000:e2e6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e2f7 FUN_1000_c79c DATA 1 true Stack[-0x2746] - 1000:e2fb FUN_1000_c79c DATA 1 true Stack[-0x2744] - 1000:e2ff FUN_1000_c79c DATA 1 true Stack[-0x2742] - 1000:e303 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e30b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e310 FUN_1000_c79c DATA 0 true Stack[-0x46] - 1000:e313 FUN_1000_c79c DATA 0 true Stack[-0x44] - 1000:e316 FUN_1000_c79c DATA 0 true Stack[-0x42] - 1000:e319 FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e31d FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e323 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e32c Code1 LAB_1000_e32c 1000:e32c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e331 FUN_1000_c79c DATA 1 true Stack[-0x2746] - 1000:e335 FUN_1000_c79c DATA 1 true Stack[-0x2744] - 1000:e339 FUN_1000_c79c DATA 1 true Stack[-0x2742] - 1000:e33d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e342 FUN_1000_c79c DATA 0 true Stack[-0x2746] - 1000:e346 FUN_1000_c79c DATA 0 true Stack[-0x2744] - 1000:e34a FUN_1000_c79c DATA 0 true Stack[-0x2742] - 1000:e34e FUN_1000_c79c DATA 0 true Stack[-0x5e] - 1000:e352 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e35c Code1 LAB_1000_e35c 1000:e354 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e37b Code1 LAB_1000_e37b 1000:e356 FUN_1000_c79c DATA 0 true Stack[-0x60] - 1000:e35a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e37b Code1 LAB_1000_e37b 1000:e35c FUN_1000_c79c DATA 1 true Stack[-0x2746] - 1000:e360 FUN_1000_c79c DATA 1 true Stack[-0x2744] - 1000:e364 FUN_1000_c79c DATA 1 true Stack[-0x2742] - 1000:e36a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e36f Code1 LAB_1000_e36f 1000:e36f FUN_1000_c79c DATA 0 true Stack[-0x2746] - 1000:e373 FUN_1000_c79c DATA 0 true Stack[-0x2744] - 1000:e377 FUN_1000_c79c DATA 0 true Stack[-0x2742] - 1000:e37b FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e37e FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e381 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e389 FUN_1000_c79c DATA 1 true Stack[-0x46] - 1000:e38c FUN_1000_c79c DATA 1 true Stack[-0x44] - 1000:e38f FUN_1000_c79c DATA 1 true Stack[-0x42] - 1000:e39d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e3a2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:e3aa FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e3af FUN_1000_c79c DATA 0 true Stack[-0x4c] - 1000:e3b2 FUN_1000_c79c DATA 0 true Stack[-0x4a] - 1000:e3b5 FUN_1000_c79c DATA 0 true Stack[-0x48] - 1000:e3b8 FUN_1000_c79c DATA 0 true Stack[-0x4c] - 1000:e3bd FUN_1000_c79c DATA 0 true Stack[-0x4a] - 1000:e3c2 FUN_1000_c79c DATA 0 true Stack[-0x48] - 1000:e3c7 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e3ca FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e3cd FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e3d5 FUN_1000_c79c DATA 1 true Stack[-0x60] - 1000:e3d8 FUN_1000_c79c DATA 1 true Stack[-0x5e] - 1000:e3dd FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e3e6 Code1 LAB_1000_e3e6 1000:e3e6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e3eb FUN_1000_c79c DATA 1 true Stack[-0x4c] - 1000:e3ee FUN_1000_c79c DATA 1 true Stack[-0x4a] - 1000:e3f1 FUN_1000_c79c DATA 1 true Stack[-0x48] - 1000:e3f4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e3fc FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e40d FUN_1000_c79c DATA 1 true Stack[-0x40] - 1000:e410 FUN_1000_c79c DATA 1 true Stack[-0x3e] - 1000:e413 FUN_1000_c79c DATA 1 true Stack[-0x3c] - 1000:e416 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e41e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:e423 FUN_1000_c79c DATA 1 true Stack[-0x2746] - 1000:e427 FUN_1000_c79c DATA 1 true Stack[-0x2744] - 1000:e42b FUN_1000_c79c DATA 1 true Stack[-0x2742] - 1000:e42f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:e434 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e439 FUN_1000_c79c DATA 0 true Stack[-0x60] - 1000:e43c FUN_1000_c79c DATA 0 true Stack[-0x5e] - 1000:e448 FUN_1000_c79c DATA 1 true Stack[-0x40] - 1000:e44b FUN_1000_c79c DATA 1 true Stack[-0x3e] - 1000:e44e FUN_1000_c79c DATA 1 true Stack[-0x3c] - 1000:e451 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e456 FUN_1000_c79c DATA 1 true Stack[-0x46] - 1000:e459 FUN_1000_c79c DATA 1 true Stack[-0x44] - 1000:e45c FUN_1000_c79c DATA 1 true Stack[-0x42] - 1000:e45f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e464 FUN_1000_c79c DATA 0 true Stack[-0x40] - 1000:e467 FUN_1000_c79c DATA 0 true Stack[-0x3e] - 1000:e46a FUN_1000_c79c DATA 0 true Stack[-0x3c] - 1000:e46d FUN_1000_c79c DATA 0 true Stack[-0x275e] - 1000:e473 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e480 Code1 LAB_1000_e480 1000:e475 FUN_1000_c79c DATA 0 true Stack[-0x275e] - 1000:e47b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e480 Code1 LAB_1000_e480 1000:e47d FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e590 Code1 LAB_1000_e590 1000:e480 FUN_1000_c79c DATA 1 true Stack[-0x275e] - 1000:e491 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e4a2 Code1 LAB_1000_e4a2 1000:e493 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e498 Code1 LAB_1000_e498 1000:e495 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e590 Code1 LAB_1000_e590 1000:e49d FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e4a2 Code1 LAB_1000_e4a2 1000:e49f FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e590 Code1 LAB_1000_e590 1000:e4a2 FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:e4a5 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:e4a8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e4b0 FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e4b4 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e4b8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e4bd FUN_1000_c79c DATA 1 true Stack[-0x2756] - 1000:e4c1 FUN_1000_c79c DATA 1 true Stack[-0x2754] - 1000:e4c5 FUN_1000_c79c DATA 1 true Stack[-0x2752] - 1000:e4c9 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e4d1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e4d6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e4df FUN_1000_c79c DATA 1 true Stack[-0x275e] - 1000:e4fb FUN_1000_c79c DATA 1 true Stack[-0x275e] - 1000:e50f FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:e512 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:e515 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e51d FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e521 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e525 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e52a FUN_1000_c79c DATA 1 true Stack[-0x275c] - 1000:e52e FUN_1000_c79c DATA 1 true Stack[-0x275a] - 1000:e532 FUN_1000_c79c DATA 1 true Stack[-0x2758] - 1000:e536 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e53e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e543 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e54c FUN_1000_c79c DATA 1 true Stack[-0x275e] - 1000:e568 FUN_1000_c79c DATA 1 true Stack[-0x275e] - 1000:e57c FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e580 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e58a FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e58d FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e590 FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e594 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e598 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e5a0 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e5a3 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e5a6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e5ae FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e5b2 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e5b8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e5c1 Code1 LAB_1000_e5c1 1000:e5c1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e5c6 FUN_1000_c79c DATA 1 true Stack[-0x4c] - 1000:e5c9 FUN_1000_c79c DATA 1 true Stack[-0x4a] - 1000:e5cc FUN_1000_c79c DATA 1 true Stack[-0x48] - 1000:e5cf FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e5d7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e5e6 FUN_1000_c79c DATA 1 true Stack[-0x274c] - 1000:e5ea FUN_1000_c79c DATA 1 true Stack[-0x274a] - 1000:e5ee FUN_1000_c79c DATA 1 true Stack[-0x2748] - 1000:e5f2 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e5fa FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:e602 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e607 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e60c FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e60f FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e612 FUN_1000_c79c READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:e617 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e61c Code1 LAB_1000_e61c 1000:e619 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e6d2 Code1 LAB_1000_e6d2 1000:e61c FUN_1000_c79c DATA 1 true Stack[-0x2740] - 1000:e620 FUN_1000_c79c DATA 1 true Stack[-0x273e] - 1000:e624 FUN_1000_c79c DATA 1 true Stack[-0x273c] - 1000:e62e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1007 Code5 FUN_1020_1007 FUN_1020_1007 1000:e633 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e638 Code1 LAB_1000_e638 1000:e635 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e6d2 Code1 LAB_1000_e6d2 1000:e638 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e647 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e64c FUN_1000_c79c DATA 1 true Stack[-0x2740] - 1000:e650 FUN_1000_c79c DATA 1 true Stack[-0x273e] - 1000:e654 FUN_1000_c79c DATA 1 true Stack[-0x273c] - 1000:e658 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e65d FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e662 FUN_1000_c79c DATA 1 true Stack[-0x274e] - 1000:e666 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e670 Code1 LAB_1000_e670 1000:e668 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e6d2 Code1 LAB_1000_e6d2 1000:e66a FUN_1000_c79c DATA 1 true Stack[-0x2750] - 1000:e66e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e6d2 Code1 LAB_1000_e6d2 1000:e670 FUN_1000_c79c DATA 1 true Stack[-0x2732] - 1000:e674 FUN_1000_c79c DATA 1 true Stack[-0x2730] - 1000:e678 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e68d Code1 LAB_1000_e68d 1000:e67a FUN_1000_c79c DATA 0 true Stack[-0x2730] - 1000:e67e FUN_1000_c79c DATA 0 true Stack[-0x2732] - 1000:e682 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e686 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bc36 Code1 FUN_1000_bc36 FUN_1000_bc36 1000:e68b FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e694 Code1 LAB_1000_e694 1000:e68f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:e694 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e6a3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e6a8 FUN_1000_c79c DATA 1 true Stack[-0x273a] - 1000:e6ac FUN_1000_c79c DATA 1 true Stack[-0x2738] - 1000:e6b0 FUN_1000_c79c DATA 1 true Stack[-0x2736] - 1000:e6b4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e6b9 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e6c2 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:e6c5 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:e6cc FUN_1000_c79c DATA 0 true Stack[-0x64] - 1000:e6cf FUN_1000_c79c DATA 0 true Stack[-0x62] - 1000:e6d2 FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:e6d5 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:e6d8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e6e0 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:e6e3 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:e6e6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e6eb FUN_1000_c79c DATA 1 true Stack[-0x2756] - 1000:e6ef FUN_1000_c79c DATA 1 true Stack[-0x2754] - 1000:e6f3 FUN_1000_c79c DATA 1 true Stack[-0x2752] - 1000:e6f7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e6ff FUN_1000_c79c DATA 1 true Stack[-0x60] - 1000:e702 FUN_1000_c79c DATA 1 true Stack[-0x5e] - 1000:e705 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e70a FUN_1000_c79c DATA 1 true Stack[-0x275c] - 1000:e70e FUN_1000_c79c DATA 1 true Stack[-0x275a] - 1000:e712 FUN_1000_c79c DATA 1 true Stack[-0x2758] - 1000:e716 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e71e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0feb Code5 FUN_1020_0feb FUN_1020_0feb 1000:e726 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e72b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e730 FUN_1000_c79c DATA 0 true Stack[-0x1a] - 1000:e733 FUN_1000_c79c DATA 0 true Stack[-0x18] - 1000:e736 FUN_1000_c79c DATA 1 true Stack[-0x5c] - 1000:e739 FUN_1000_c79c DATA 1 true Stack[-0x5a] - 1000:e73c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e744 FUN_1000_c79c DATA 1 true Stack[-0x60] - 1000:e747 FUN_1000_c79c DATA 1 true Stack[-0x5e] - 1000:e74a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e74f FUN_1000_c79c DATA 1 true Stack[-0x2756] - 1000:e753 FUN_1000_c79c DATA 1 true Stack[-0x2754] - 1000:e757 FUN_1000_c79c DATA 1 true Stack[-0x2752] - 1000:e75b FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e763 FUN_1000_c79c DATA 1 true Stack[-0x64] - 1000:e766 FUN_1000_c79c DATA 1 true Stack[-0x62] - 1000:e769 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e76e FUN_1000_c79c DATA 1 true Stack[-0x275c] - 1000:e772 FUN_1000_c79c DATA 1 true Stack[-0x275a] - 1000:e776 FUN_1000_c79c DATA 1 true Stack[-0x2758] - 1000:e77a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e782 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e78a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e78f FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e794 FUN_1000_c79c DATA 0 true Stack[-0x1e] - 1000:e797 FUN_1000_c79c DATA 0 true Stack[-0x1c] - 1000:e79a FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:e79d FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:e7a0 FUN_1000_c79c DATA 1 true Stack[-0x1a] - 1000:e7a3 FUN_1000_c79c DATA 1 true Stack[-0x18] - 1000:e7a6 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:e7a9 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:e7ac FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:e7af FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:e7b2 FUN_1000_c79c DATA 1 true Stack[-0x1e] - 1000:e7b5 FUN_1000_c79c DATA 1 true Stack[-0x1c] - 1000:e7b8 FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:e7bb FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:e7be FUN_1000_c79c DATA 0 true Stack[-0x275e] - 1000:e7c3 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e7fd Code1 LAB_1000_e7fd 1000:e7c5 FUN_1000_c79c DATA 0 true Stack[-0x14] - 1000:e7c9 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e7d4 Code1 LAB_1000_e7d4 1000:e7cb FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e7f3 Code1 LAB_1000_e7f3 1000:e7cd FUN_1000_c79c DATA 0 true Stack[-0x16] - 1000:e7d2 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e7f3 Code1 LAB_1000_e7f3 1000:e7d4 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e7e3 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:e7e6 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:e7eb FUN_1000_c79c DATA 0 true Stack[-0x12] - 1000:e7ee FUN_1000_c79c DATA 0 true Stack[-0x10] - 1000:e7f1 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e7fb Code1 LAB_1000_e7fb 1000:e7f5 FUN_1000_c79c DATA 0 true Stack[-0xe] - 1000:e7f8 FUN_1000_c79c DATA 0 true Stack[-0xc] - 1000:e7fb FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e831 Code1 LAB_1000_e831 1000:e7fd FUN_1000_c79c DATA 0 true Stack[-0x275e] - 1000:e802 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e831 Code1 LAB_1000_e831 1000:e804 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e810 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e828 Code1 LAB_1000_e828 1000:e812 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:e81c FUN_1000_c79c WRITE 0 true 1028:424c Data6 DAT_1028_424c 1000:e821 FUN_1000_c79c WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:e826 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e831 Code1 LAB_1000_e831 1000:e828 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e82c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:ae6e Code1 FUN_1000_ae6e FUN_1000_ae6e 1000:e831 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e83e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e843 Code1 LAB_1000_e843 1000:e840 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ea36 Code1 LAB_1000_ea36 1000:e843 FUN_1000_c79c DATA 1 true Stack[-0x40] - 1000:e846 FUN_1000_c79c DATA 1 true Stack[-0x3e] - 1000:e849 FUN_1000_c79c DATA 1 true Stack[-0x3c] - 1000:e84c FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e862 FUN_1000_c79c DATA 1 true Stack[-0xe] - 1000:e865 FUN_1000_c79c DATA 1 true Stack[-0xc] - 1000:e872 FUN_1000_c79c DATA 1 true Stack[-0x12] - 1000:e875 FUN_1000_c79c DATA 1 true Stack[-0x10] - 1000:e88c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e899 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e89e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:e8a6 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e8b7 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e8c4 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e8c9 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff1 Code5 FUN_1020_0ff1 FUN_1020_0ff1 1000:e8d1 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0fe5 Code5 FUN_1020_0fe5 FUN_1020_0fe5 1000:e8d6 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:10be Code5 FUN_1020_10be FUN_1020_10be 1000:e8e3 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:e8e8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e8ed FUN_1000_c79c DATA 0 true Stack[-0x16] - 1000:e8f0 FUN_1000_c79c DATA 0 true Stack[-0x14] - 1000:e8f3 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e8f6 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e8f9 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e904 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e914 Code1 LAB_1000_e914 1000:e906 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e90b Code1 LAB_1000_e90b 1000:e908 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e9f0 Code1 LAB_1000_e9f0 1000:e90f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:e914 Code1 LAB_1000_e914 1000:e911 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:e9f0 Code1 LAB_1000_e9f0 1000:e914 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e917 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e91a FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e922 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e925 FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e928 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e941 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:e946 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e94e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e953 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e95c FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e97b FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e97e FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e981 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e989 FUN_1000_c79c DATA 1 true Stack[-0x16] - 1000:e98c FUN_1000_c79c DATA 1 true Stack[-0x14] - 1000:e98f FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e9a8 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:e9ad FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:e9b5 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:0ffd Code5 FUN_1020_0ffd FUN_1020_0ffd 1000:e9ba FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:e9c3 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:e9ea FUN_1000_c79c DATA 0 true Stack[-0x16] - 1000:e9ed FUN_1000_c79c DATA 0 true Stack[-0x14] - 1000:e9f0 FUN_1000_c79c READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:e9f3 FUN_1000_c79c READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:e9f7 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea08 FUN_1000_c79c WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ea0b FUN_1000_c79c WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ea0f FUN_1000_c79c READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:ea12 FUN_1000_c79c READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:ea20 FUN_1000_c79c WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ea23 FUN_1000_c79c WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ea27 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:ea2d FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea31 FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:ea36 FUN_1000_c79c DATA 0 true Stack[-0x2760] - 1000:ea3b FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea54 Code1 LAB_1000_ea54 1000:ea3d FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea4a FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea54 Code1 LAB_1000_ea54 1000:ea52 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea56 Code1 LAB_1000_ea56 1000:ea54 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:ea63 Code1 LAB_1000_ea63 1000:ea56 FUN_1000_c79c DATA 1 true Stack[-0x2762] - 1000:ea5a FUN_1000_c79c DATA 1 true Stack[-0x2772] - 1000:ea5e FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea63 Code1 LAB_1000_ea63 1000:ea60 FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c835 Code1 LAB_1000_c835 1000:ea63 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea70 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea83 Code1 LAB_1000_ea83 1000:ea78 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:ea83 Code1 LAB_1000_ea83 1000:ea7a FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea7e FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:9f73 Code1 FUN_1000_9f73 FUN_1000_9f73 1000:ea83 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea8f FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:eaa1 Code1 LAB_1000_eaa1 1000:ea91 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:ea98 FUN_1000_c79c DATA 1 true Stack[0x4] - 1000:ea9c FUN_1000_c79c UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:eaa1 FUN_1000_c79c DATA 1 true Stack[-0x8] - 1000:eaa4 FUN_1000_c79c DATA 1 true Stack[-0x2770] - 1000:eaa8 FUN_1000_c79c CONDITIONAL_JUMP 0 true 1000:eaad Code1 LAB_1000_eaad 1000:eaaa FUN_1000_c79c UNCONDITIONAL_JUMP 0 true 1000:c7d2 Code1 LAB_1000_c7d2 1000:eab5 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eac0 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eac5 Code1 LAB_1000_eac5 1000:eac2 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eacd exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ead2 Code1 LAB_1000_ead2 1000:eacf exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:ead8 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eadd Code1 LAB_1000_eadd 1000:eada exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eae3 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eae8 Code1 LAB_1000_eae8 1000:eae5 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eae8 exported_ordinal_10 READ 0 true 1028:07cc Data6 DAT_1028_07cc 1000:eaed exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eaf2 Code1 LAB_1000_eaf2 1000:eaef exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eaf7 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eafc Code1 LAB_1000_eafc 1000:eaf9 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eafc exported_ordinal_10 READ 0 true 1028:07c4 Data6 DAT_1028_07c4 1000:eb01 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb06 Code1 LAB_1000_eb06 1000:eb03 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:eb0b exported_ordinal_10 READ 0 true 1028:07c5 Data6 DAT_1028_07c5 1000:eb10 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb31 Code1 LAB_1000_eb31 1000:eb12 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:eb17 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:eb1c Code1 LAB_1000_eb1c 1000:eb19 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:eb1c exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:eb20 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:7e12 Code1 FUN_1000_7e12 FUN_1000_7e12 1000:eb25 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:eb2a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb19 Code1 LAB_1000_eb19 1000:eb2c exported_ordinal_10 WRITE 0 true 1028:07c5 Data6 DAT_1028_07c5 1000:eb31 exported_ordinal_10 READ_WRITE 0 true 1028:0876 Data6 DAT_1028_0876 1000:eb36 exported_ordinal_10 READ_WRITE 0 true 1028:0878 Data6 DAT_1028_0878 1000:eb3b exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eb44 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb49 Code1 LAB_1000_eb49 1000:eb46 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f4ad Code1 LAB_1000_f4ad 1000:eb49 exported_ordinal_10 READ 0 true 1028:07ca Data6 DAT_1028_07ca 1000:eb4e exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb53 Code1 LAB_1000_eb53 1000:eb50 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f121 Code1 LAB_1000_f121 1000:eb53 exported_ordinal_10 READ 0 true 1028:0874 Data6 DAT_1028_0874 1000:eb58 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb5d Code1 LAB_1000_eb5d 1000:eb5a exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f121 Code1 LAB_1000_f121 1000:eb5d exported_ordinal_10 READ 1 true 1028:086d Data6 DAT_1028_086d 1000:eb60 exported_ordinal_10 READ 1 true 1028:086f Data6 DAT_1028_086f 1000:eb64 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ebad Code1 LAB_1000_ebad 1000:eb6a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:eb6f exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:eb72 exported_ordinal_10 READ 1 true 1028:086f Data6 DAT_1028_086f 1000:eb75 exported_ordinal_10 READ 1 true 1028:086d Data6 DAT_1028_086d 1000:eb79 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eb84 Code1 LAB_1000_eb84 1000:eb7b exported_ordinal_10 READ 1 true 1028:086d Data6 DAT_1028_086d 1000:eb7f exported_ordinal_10 WRITE 0 true 1028:086d Data6 DAT_1028_086d 1000:eb82 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:eb8b Code1 LAB_1000_eb8b 1000:eb84 exported_ordinal_10 READ 1 true 1028:086d Data6 DAT_1028_086d 1000:eb88 exported_ordinal_10 WRITE 0 true 1028:086d Data6 DAT_1028_086d 1000:eb8b exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:eb8e exported_ordinal_10 READ 0 true 1028:086d Data6 DAT_1028_086d 1000:eb92 exported_ordinal_10 READ 1 true 1028:0873 Data6 DAT_1028_0873 1000:eb96 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0e08 Code2 FUN_1008_0e08 FUN_1008_0e08 1000:eb9b exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eba2 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:eba5 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:ebaa exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f121 Code1 LAB_1000_f121 1000:ebad exported_ordinal_10 READ 0 true 1028:086d Data6 DAT_1028_086d 1000:ebb2 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ec06 Code1 LAB_1000_ec06 1000:ebb4 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ebbb exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:ebc0 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ebc3 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ebca exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0e08 Code2 FUN_1008_0e08 FUN_1008_0e08 1000:ebcf exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ebd6 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ebd9 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:ebde exported_ordinal_10 READ 0 true 1028:0873 Data6 DAT_1028_0873 1000:ebe3 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ec03 Code1 LAB_1000_ec03 1000:ebe5 exported_ordinal_10 WRITE 0 true 1028:07ca Data6 DAT_1028_07ca 1000:ebea exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:ebef exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:ebf4 Code1 LAB_1000_ebf4 1000:ebf1 exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:ebf4 exported_ordinal_10 DATA 1 true Stack[-0x2e] - 1000:ebf8 exported_ordinal_10 WRITE 0 true 1028:0d73 Data6 DAT_1028_0d73 1000:ebf8 exported_ordinal_10 WRITE 0 false 1028:0dc6 Data6 DAT_1028_0dc6 1000:ebfd exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:ec01 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ebf1 Code1 LAB_1000_ebf1 1000:ec03 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f121 Code1 LAB_1000_f121 1000:ec06 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ec0d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:ec12 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ec15 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ec18 exported_ordinal_10 READ 0 true 1028:086d Data6 DAT_1028_086d 1000:ec1e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0e08 Code2 FUN_1008_0e08 FUN_1008_0e08 1000:ec23 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ec2a exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:ec2d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:ec32 exported_ordinal_10 WRITE 0 true 1028:086f Data6 DAT_1028_086f 1000:ec38 exported_ordinal_10 WRITE 0 true 1028:0873 Data6 DAT_1028_0873 1000:ec3f exported_ordinal_10 WRITE 0 true 1028:2679 Data6 DAT_1028_2679 1000:ec42 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ec66 exported_ordinal_10 READ 1 true 1028:086d Data6 DAT_1028_086d 1000:ec6c exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ece0 Code1 LAB_1000_ece0 1000:ec6e exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ec74 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ec7a exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ec80 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ec8e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ec9c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:eca1 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:eca6 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ecbb exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ecc6 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:eccb exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ecd0 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ecdd exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:ece3 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ed5d Code1 LAB_1000_ed5d 1000:ece5 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:eceb exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ecf1 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ecf7 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ecfd exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ed08 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ed16 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ed1b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ed20 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ed35 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ed43 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ed48 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ed4d exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ed5a exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:ed60 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:edda Code1 LAB_1000_edda 1000:ed62 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ed68 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ed6e exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ed74 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ed7a exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ed85 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ed93 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ed98 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ed9d exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:edb2 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:edc0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:edc5 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:edca exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:edd7 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:eddd exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ee57 Code1 LAB_1000_ee57 1000:eddf exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ede5 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:edeb exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:edf1 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:edf7 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ee02 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ee10 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ee15 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ee1a exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ee2f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ee3d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ee42 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ee47 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ee54 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:ee5a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:eed4 Code1 LAB_1000_eed4 1000:ee5c exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ee62 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ee68 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ee6e exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ee74 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ee7f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ee8d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ee92 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ee97 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eeac exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:eeba exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:eebf exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:eec4 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eed1 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:eed7 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:ef51 Code1 LAB_1000_ef51 1000:eed9 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:eedf exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:eee5 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:eeeb exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:eef1 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eefc exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ef0a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ef0f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ef14 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ef29 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ef37 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ef3c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ef41 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ef4e exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:ef54 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:efce Code1 LAB_1000_efce 1000:ef56 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:ef5c exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:ef62 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:ef68 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:ef6e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:ef79 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:ef87 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:ef8c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:ef91 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:efa6 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:efb4 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:efb9 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:efbe exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:efcb exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:efd1 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f04b Code1 LAB_1000_f04b 1000:efd3 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:efd9 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:efdf exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:efe5 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:efeb exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:eff6 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:f004 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:f009 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:f00e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f023 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:f031 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:f036 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:f03b exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f048 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:f04e exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f0c7 Code1 LAB_1000_f0c7 1000:f050 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:f056 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:f05c exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:f062 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:f068 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f073 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:f081 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:f086 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:f08b exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f0a0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:f0ae exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:f0b3 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:f0b8 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f0c5 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:f0ca exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f101 Code1 LAB_1000_f101 1000:f0cc exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:f0d2 exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:f0d8 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:f0de exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:f0e4 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f106 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:f10c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:9bca Code1 FUN_1000_9bca FUN_1000_9bca 1000:f113 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0002 Code2 FUN_1008_0002 FUN_1008_0002 1000:f118 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f121 exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:f126 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f12b Code1 LAB_1000_f12b 1000:f128 exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:f12b exported_ordinal_10 DATA 1 true Stack[-0x2e] - 1000:f12e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f138 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f15e Code1 LAB_1000_f15e 1000:f13a exported_ordinal_10 DATA 1 true Stack[-0x2e] - 1000:f13d exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f146 exported_ordinal_10 DATA 1 true Stack[-0x2e] - 1000:f149 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f153 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f15e Code1 LAB_1000_f15e 1000:f155 exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:f159 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f15e exported_ordinal_10 DATA 0 true Stack[-0x2e] - 1000:f163 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f128 Code1 LAB_1000_f128 1000:f165 exported_ordinal_10 READ 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:f16a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f193 Code1 LAB_1000_f193 1000:f16c exported_ordinal_10 READ 0 true 1028:0857 Data6 DAT_1028_0857 1000:f171 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f17c Code1 LAB_1000_f17c 1000:f173 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f18e Code1 LAB_1000_f18e 1000:f175 exported_ordinal_10 READ 0 true 1028:0855 Data6 DAT_1028_0855 1000:f17a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f18e Code1 LAB_1000_f18e 1000:f17c exported_ordinal_10 READ_WRITE 0 true 1028:0855 Data6 DAT_1028_0855 1000:f181 exported_ordinal_10 READ_WRITE 0 true 1028:0857 Data6 DAT_1028_0857 1000:f187 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:6f27 Code1 FUN_1000_6f27 FUN_1000_6f27 1000:f18c exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f193 Code1 LAB_1000_f193 1000:f18e exported_ordinal_10 WRITE 0 true 1028:07c7 Data6 DAT_1028_07c7 1000:f193 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f19b exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f1a0 Code1 LAB_1000_f1a0 1000:f19d exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f2f5 Code1 LAB_1000_f2f5 1000:f1a0 exported_ordinal_10 READ 0 true 1028:41f9 Data6 DAT_1028_41f9 1000:f1a5 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f1aa Code1 LAB_1000_f1aa 1000:f1a7 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f297 Code1 LAB_1000_f297 1000:f1b0 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f1de Code1 LAB_1000_f1de 1000:f1b2 exported_ordinal_10 READ 1 true 1028:07e3 Data6 DAT_1028_07e3 1000:f1b5 exported_ordinal_10 READ 1 true 1028:07e5 Data6 DAT_1028_07e5 1000:f1c3 exported_ordinal_10 READ 1 true 1028:07eb Data6 DAT_1028_07eb 1000:f1c6 exported_ordinal_10 READ 1 true 1028:07ed Data6 DAT_1028_07ed 1000:f1d7 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:a38e Code1 FUN_1000_a38e FUN_1000_a38e 1000:f1dc exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f1e7 Code1 LAB_1000_f1e7 1000:f1de exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f1e7 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f1ef exported_ordinal_10 WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:f1f4 exported_ordinal_10 WRITE 0 true 1028:41f9 Data6 DAT_1028_41f9 1000:f1f9 exported_ordinal_10 READ 0 true 1028:424c Data6 DAT_1028_424c 1000:f1fe exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f22a Code1 LAB_1000_f22a 1000:f200 exported_ordinal_10 READ 1 true 1028:07e7 Data6 DAT_1028_07e7 1000:f203 exported_ordinal_10 READ 1 true 1028:07e9 Data6 DAT_1028_07e9 1000:f211 exported_ordinal_10 READ 1 true 1028:07ef Data6 DAT_1028_07ef 1000:f214 exported_ordinal_10 READ 1 true 1028:07f1 Data6 DAT_1028_07f1 1000:f223 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:ae6e Code1 FUN_1000_ae6e FUN_1000_ae6e 1000:f228 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f295 Code1 LAB_1000_f295 1000:f22a exported_ordinal_10 READ 1 true 1028:07e7 Data6 DAT_1028_07e7 1000:f22d exported_ordinal_10 READ 1 true 1028:07e9 Data6 DAT_1028_07e9 1000:f231 exported_ordinal_10 WRITE 0 true 1028:07e3 Data6 DAT_1028_07e3 1000:f234 exported_ordinal_10 WRITE 0 true 1028:07e5 Data6 DAT_1028_07e5 1000:f238 exported_ordinal_10 READ 1 true 1028:07ef Data6 DAT_1028_07ef 1000:f23b exported_ordinal_10 READ 1 true 1028:07f1 Data6 DAT_1028_07f1 1000:f23f exported_ordinal_10 WRITE 0 true 1028:07eb Data6 DAT_1028_07eb 1000:f242 exported_ordinal_10 WRITE 0 true 1028:07ed Data6 DAT_1028_07ed 1000:f246 exported_ordinal_10 READ 1 true 1028:07f7 Data6 DAT_1028_07f7 1000:f249 exported_ordinal_10 READ 1 true 1028:07f9 Data6 DAT_1028_07f9 1000:f24d exported_ordinal_10 WRITE 0 true 1028:07f3 Data6 DAT_1028_07f3 1000:f250 exported_ordinal_10 WRITE 0 true 1028:07f5 Data6 DAT_1028_07f5 1000:f254 exported_ordinal_10 READ 1 true 1028:07ff Data6 DAT_1028_07ff 1000:f257 exported_ordinal_10 READ 1 true 1028:0801 Data6 DAT_1028_0801 1000:f25b exported_ordinal_10 WRITE 0 true 1028:07fb Data6 DAT_1028_07fb 1000:f25e exported_ordinal_10 WRITE 0 true 1028:07fd Data6 DAT_1028_07fd 1000:f262 exported_ordinal_10 READ 1 true 1028:0811 Data6 DAT_1028_0811 1000:f265 exported_ordinal_10 READ 1 true 1028:0813 Data6 DAT_1028_0813 1000:f269 exported_ordinal_10 READ 1 true 1028:0815 Data6 DAT_1028_0815 1000:f26d exported_ordinal_10 WRITE 0 true 1028:080b Data6 DAT_1028_080b 1000:f270 exported_ordinal_10 WRITE 0 true 1028:080d Data6 DAT_1028_080d 1000:f274 exported_ordinal_10 WRITE 0 true 1028:080f Data6 DAT_1028_080f 1000:f278 exported_ordinal_10 READ 1 true 1028:0807 Data6 DAT_1028_0807 1000:f27b exported_ordinal_10 READ 1 true 1028:0809 Data6 DAT_1028_0809 1000:f27f exported_ordinal_10 WRITE 0 true 1028:0803 Data6 DAT_1028_0803 1000:f282 exported_ordinal_10 WRITE 0 true 1028:0805 Data6 DAT_1028_0805 1000:f28b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c36b Code1 FUN_1000_c36b FUN_1000_c36b 1000:f290 exported_ordinal_10 WRITE 0 true 1028:424c Data6 DAT_1028_424c 1000:f295 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f2f5 Code1 LAB_1000_f2f5 1000:f297 exported_ordinal_10 READ 0 true 1028:424c Data6 DAT_1028_424c 1000:f29c exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f2f5 Code1 LAB_1000_f2f5 1000:f29e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f2a7 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f2d5 Code1 LAB_1000_f2d5 1000:f2a9 exported_ordinal_10 READ 1 true 1028:07e7 Data6 DAT_1028_07e7 1000:f2ac exported_ordinal_10 READ 1 true 1028:07e9 Data6 DAT_1028_07e9 1000:f2ba exported_ordinal_10 READ 1 true 1028:07ef Data6 DAT_1028_07ef 1000:f2bd exported_ordinal_10 READ 1 true 1028:07f1 Data6 DAT_1028_07f1 1000:f2ce exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:a38e Code1 FUN_1000_a38e FUN_1000_a38e 1000:f2d3 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f2de Code1 LAB_1000_f2de 1000:f2d5 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f2de exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f2e6 exported_ordinal_10 WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:f2f0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c36b Code1 FUN_1000_c36b FUN_1000_c36b 1000:f2f5 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f2fe exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f30e Code1 LAB_1000_f30e 1000:f306 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f30e Code1 LAB_1000_f30e 1000:f309 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c79c Code1 FUN_1000_c79c FUN_1000_c79c 1000:f30e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f317 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f38f Code1 LAB_1000_f38f 1000:f324 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:f32e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:f334 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:9e85 Code1 FUN_1000_9e85 FUN_1000_9e85 1000:f339 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f340 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:f345 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f348 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f355 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f35a exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f367 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f36c exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f373 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f376 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:f380 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:f38a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:f38f exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f398 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f39d Code1 LAB_1000_f39d 1000:f39a exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f4aa Code1 LAB_1000_f4aa 1000:f3a2 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:f3ac exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:f3b1 exported_ordinal_10 READ 1 true 1028:3969 Data6 DAT_1028_3969 1000:f3b4 exported_ordinal_10 READ 1 true 1028:396b Data6 DAT_1028_396b 1000:f3b8 exported_ordinal_10 WRITE 0 true 1028:07d3 Data6 DAT_1028_07d3 1000:f3bb exported_ordinal_10 WRITE 0 true 1028:07d5 Data6 DAT_1028_07d5 1000:f3bf exported_ordinal_10 READ 1 true 1028:396d Data6 DAT_1028_396d 1000:f3c2 exported_ordinal_10 READ 1 true 1028:396f Data6 DAT_1028_396f 1000:f3c6 exported_ordinal_10 WRITE 0 true 1028:07d7 Data6 DAT_1028_07d7 1000:f3c9 exported_ordinal_10 WRITE 0 true 1028:07d9 Data6 DAT_1028_07d9 1000:f3cd exported_ordinal_10 READ 1 true 1028:07d3 Data6 DAT_1028_07d3 1000:f3d0 exported_ordinal_10 READ 1 true 1028:07d5 Data6 DAT_1028_07d5 1000:f3d4 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f3e1 exported_ordinal_10 READ 1 true 1028:07d7 Data6 DAT_1028_07d7 1000:f3e4 exported_ordinal_10 READ 1 true 1028:07d9 Data6 DAT_1028_07d9 1000:f3f5 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:a38e Code1 FUN_1000_a38e FUN_1000_a38e 1000:f3fa exported_ordinal_10 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:f402 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f411 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f416 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f42d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1000:f43b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:0ff7 Code5 FUN_1020_0ff7 FUN_1020_0ff7 1000:f440 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:1017 Code5 FUN_1020_1017 FUN_1020_1017 1000:f445 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f473 exported_ordinal_10 WRITE 0 true 1028:399a Data6 DAT_1028_399a 1000:f47e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:c426 Code1 FUN_1000_c426 FUN_1000_c426 1000:f488 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:bdde Code1 FUN_1000_bdde FUN_1000_bdde 1000:f48d exported_ordinal_10 WRITE 0 true 1028:41f9 Data6 DAT_1028_41f9 1000:f492 exported_ordinal_10 WRITE 0 true 1028:424c Data6 DAT_1028_424c 1000:f497 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f49f exported_ordinal_10 WRITE 0 true 1028:0874 Data6 DAT_1028_0874 1000:f4aa exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fd59 Code1 LAB_1000_fd59 1000:f4ad exported_ordinal_10 READ 0 true 1028:07c9 Data6 DAT_1028_07c9 1000:f4b2 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f4b7 Code1 LAB_1000_f4b7 1000:f4b4 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fc04 Code1 LAB_1000_fc04 1000:f4b7 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f4ba exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f4c3 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f4ce exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f525 Code1 LAB_1000_f525 1000:f4d0 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f4d3 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f4dc exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f4ea exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f4ef exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f4f2 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f4f8 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f50e Code1 LAB_1000_f50e 1000:f4fd exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f50e Code1 LAB_1000_f50e 1000:f4ff exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f507 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f50c exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f525 Code1 LAB_1000_f525 1000:f511 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f525 Code1 LAB_1000_f525 1000:f516 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f525 Code1 LAB_1000_f525 1000:f518 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f520 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f525 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f528 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f531 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f53c exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f541 Code1 LAB_1000_f541 1000:f53e exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f5c9 Code1 LAB_1000_f5c9 1000:f541 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f544 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f54d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f55b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f560 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f563 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f569 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f57f Code1 LAB_1000_f57f 1000:f56f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f578 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f57d exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f5c9 Code1 LAB_1000_f5c9 1000:f582 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f5a5 Code1 LAB_1000_f5a5 1000:f587 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f5a5 Code1 LAB_1000_f5a5 1000:f589 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f591 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f596 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f59e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f5a3 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f5c9 Code1 LAB_1000_f5c9 1000:f5a8 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f5c9 Code1 LAB_1000_f5c9 1000:f5ad exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f5c9 Code1 LAB_1000_f5c9 1000:f5b2 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f5b7 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f5bf exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f5c4 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f5c9 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f5cc exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f5d5 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f5e1 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f5ff Code1 LAB_1000_f5ff 1000:f5e7 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f5f0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f5f8 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b30b Code1 FUN_1000_b30b FUN_1000_b30b 1000:f5fd exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f61e Code1 LAB_1000_f61e 1000:f602 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f61e Code1 LAB_1000_f61e 1000:f608 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f611 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f619 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:b3f3 Code1 FUN_1000_b3f3 FUN_1000_b3f3 1000:f61e exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f621 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f62a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f635 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f63a Code1 LAB_1000_f63a 1000:f637 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f759 Code1 LAB_1000_f759 1000:f63a exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f641 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:f646 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f649 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f64c exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f655 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f663 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f668 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f66b exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f66f exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f6dd Code1 LAB_1000_f6dd 1000:f671 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f686 exported_ordinal_10 DATA 0 true Stack[-0x4d] - 1000:f689 exported_ordinal_10 DATA 0 true Stack[-0x4b] - 1000:f68c exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f6ad exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:f6b2 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f6b5 exported_ordinal_10 DATA 1 true Stack[-0x4d] - 1000:f6d6 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f6db exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f74a Code1 LAB_1000_f74a 1000:f6dd exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f6f5 exported_ordinal_10 DATA 0 true Stack[-0x4d] - 1000:f6f8 exported_ordinal_10 DATA 0 true Stack[-0x4b] - 1000:f6fb exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f71c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f721 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f724 exported_ordinal_10 DATA 1 true Stack[-0x4d] - 1000:f745 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f74a exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f751 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f754 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:f759 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f75c exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f765 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f770 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f775 Code1 LAB_1000_f775 1000:f772 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f8f4 Code1 LAB_1000_f8f4 1000:f775 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f77c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:f781 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f784 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f787 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f790 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f79e exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f7a3 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f7a6 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f7ac exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f7f9 Code1 LAB_1000_f7f9 1000:f7ae exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f7bb exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:f7c0 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f7cd exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f7d2 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f7df exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f7e4 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f7f1 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f7f6 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f8e5 Code1 LAB_1000_f8e5 1000:f7fc exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f849 Code1 LAB_1000_f849 1000:f7fe exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f80b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:f810 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f81d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f822 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f82f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f834 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f841 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f846 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f8e5 Code1 LAB_1000_f8e5 1000:f84c exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f898 Code1 LAB_1000_f898 1000:f84e exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f85b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:f860 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f86d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f872 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f87f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f884 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f891 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f896 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f8e5 Code1 LAB_1000_f8e5 1000:f89b exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f8e5 Code1 LAB_1000_f8e5 1000:f89d exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f8aa exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1000:f8af exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f8bc exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f8c1 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f8ce exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:f8d3 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f8e0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:f8e5 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f8ec exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f8ef exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:f8f4 exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f8f7 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f900 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f90b exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f96f Code1 LAB_1000_f96f 1000:f90d exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f914 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:f919 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f91c exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f91f exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f928 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f936 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f93b exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f93e exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f942 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f951 Code1 LAB_1000_f951 1000:f944 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f947 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:f94a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0dbd Code2 FUN_1008_0dbd FUN_1008_0dbd 1000:f94f exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:f960 Code1 LAB_1000_f960 1000:f951 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f957 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:f95b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:0dbd Code2 FUN_1008_0dbd FUN_1008_0dbd 1000:f960 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f967 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f96a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:f96f exported_ordinal_10 READ 1 true 1028:0876 Data6 DAT_1028_0876 1000:f972 exported_ordinal_10 READ 1 true 1028:0878 Data6 DAT_1028_0878 1000:f97b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:f986 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:f98b Code1 LAB_1000_f98b 1000:f988 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fc04 Code1 LAB_1000_fc04 1000:f98b exported_ordinal_10 READ_WRITE 0 true 1028:087a Data6 DAT_1028_087a 1000:f990 exported_ordinal_10 READ_WRITE 0 true 1028:087c Data6 DAT_1028_087c 1000:f995 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:f99c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:f9a1 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f9a4 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f9a7 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:f9ac exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:f9af exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f9b2 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1000:f9b7 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:f9ba exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:f9c2 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1000:f9c7 exported_ordinal_10 DATA 0 true Stack[-0xa] - 1000:f9ca exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:f9cd exported_ordinal_10 READ 0 true 1028:085f Data6 DAT_1028_085f 1000:f9d1 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:f9d6 exported_ordinal_10 DATA 0 true Stack[-0x4] - 1000:f9d9 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:f9dc exported_ordinal_10 DATA 0 true Stack[-0xa] - 1000:f9df exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:f9e4 exported_ordinal_10 DATA 0 true Stack[-0x6] - 1000:f9e7 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:f9f2 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fa00 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:fa05 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fa11 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fa1f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:fa24 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fa27 exported_ordinal_10 READ 0 true 1028:0861 Data6 DAT_1028_0861 1000:fa2b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:fa30 exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fa33 exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fa3c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fa48 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fa51 Code1 LAB_1000_fa51 1000:fa4a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fabd Code1 LAB_1000_fabd 1000:fa4f exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fabd Code1 LAB_1000_fabd 1000:fa51 exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fa54 exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fa5d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fa69 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fa72 Code1 LAB_1000_fa72 1000:fa6b exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fabd Code1 LAB_1000_fabd 1000:fa70 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fabd Code1 LAB_1000_fabd 1000:fa72 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fa7e exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fa81 exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fa84 exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fa8d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:faa1 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:fab5 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:faba exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fba8 Code1 LAB_1000_fba8 1000:fabd exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fac4 exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fac7 exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fad0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fae4 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:faf9 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fafc exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:faff exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fb08 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fb1c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:fb30 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:fb35 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fb38 exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fb3b exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fb44 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fb58 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:fb6d exported_ordinal_10 READ 1 true 1028:087a Data6 DAT_1028_087a 1000:fb70 exported_ordinal_10 READ 1 true 1028:087c Data6 DAT_1028_087c 1000:fb79 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1000:fb8d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1000:fb95 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fba3 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:fba8 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fbb6 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fbc2 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1000:fbc7 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fbca exported_ordinal_10 DATA 0 true Stack[-0x4] - 1000:fbcd exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:fbd2 exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fbd5 exported_ordinal_10 DATA 0 true Stack[-0x6] - 1000:fbd8 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1000:fbdd exported_ordinal_10 DATA 0 true Stack[-0xa] - 1000:fbe0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1000:fbe5 exported_ordinal_10 DATA 0 true Stack[-0x10] - 1000:fbe8 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:fbed exported_ordinal_10 DATA 0 true Stack[-0x12] - 1000:fbf0 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1000:fbf5 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fbfc exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fbff exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:fc04 exported_ordinal_10 READ 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:fc09 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc0e Code1 LAB_1000_fc0e 1000:fc0b exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fce7 Code1 LAB_1000_fce7 1000:fc0e exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fc17 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc1c Code1 LAB_1000_fc1c 1000:fc19 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fce7 Code1 LAB_1000_fce7 1000:fc22 exported_ordinal_10 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:fc27 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc33 Code1 LAB_1000_fc33 1000:fc29 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc6e Code1 LAB_1000_fc6e 1000:fc2b exported_ordinal_10 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:fc31 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc6e Code1 LAB_1000_fc6e 1000:fc33 exported_ordinal_10 READ 0 true 1028:0853 Data6 DAT_1028_0853 1000:fc38 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc5c Code1 LAB_1000_fc5c 1000:fc3a exported_ordinal_10 READ 0 true 1028:0851 Data6 DAT_1028_0851 1000:fc3f exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc5c Code1 LAB_1000_fc5c 1000:fc41 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fc46 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fc4b Code1 LAB_1000_fc4b 1000:fc48 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fc4b exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:fc51 exported_ordinal_10 WRITE 0 true 1028:3371 Data6 DAT_1028_3371 1000:fc51 exported_ordinal_10 WRITE 0 false 1028:33c4 Data6 DAT_1028_33c4 1000:fc55 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fc5a exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fc48 Code1 LAB_1000_fc48 1000:fc5c exported_ordinal_10 READ_WRITE 0 true 1028:0851 Data6 DAT_1028_0851 1000:fc61 exported_ordinal_10 READ_WRITE 0 true 1028:0853 Data6 DAT_1028_0853 1000:fc67 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:7440 Code1 FUN_1000_7440 FUN_1000_7440 1000:fc6c exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fce7 Code1 LAB_1000_fce7 1000:fc6e exported_ordinal_10 WRITE 0 true 1028:07c8 Data6 DAT_1028_07c8 1000:fc73 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fc7e exported_ordinal_10 WRITE 0 true 1028:0851 Data6 DAT_1028_0851 1000:fc81 exported_ordinal_10 WRITE 0 true 1028:0853 Data6 DAT_1028_0853 1000:fc88 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:fc8d exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fc90 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fc9b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:fca0 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fcab exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:fcb0 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fcb7 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fcba exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:fcbf exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fcc4 exported_ordinal_10 UNCONDITIONAL_JUMP 0 true 1000:fcc9 Code1 LAB_1000_fcc9 1000:fcc6 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fcc9 exported_ordinal_10 DATA 1 true Stack[-0x30] - 1000:fccc exported_ordinal_10 READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1000:fcd4 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fce1 exported_ordinal_10 DATA 0 true Stack[-0x30] - 1000:fce5 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fcc6 Code1 LAB_1000_fcc6 1000:fce7 exported_ordinal_10 READ 1 true 1028:07d0 Data6 DAT_1028_07d0 1000:fcf5 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fd59 Code1 LAB_1000_fd59 1000:fcf8 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:a72c Code1 FUN_1000_a72c FUN_1000_a72c 1000:fcfe exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:acc2 Code1 FUN_1000_acc2 FUN_1000_acc2 1000:fd04 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:a604 Code1 FUN_1000_a604 FUN_1000_a604 1000:fd0a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:9e85 Code1 FUN_1000_9e85 FUN_1000_9e85 1000:fd0f exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fd16 exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1000:fd1b exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fd1e exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fd2b exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1000:fd30 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fd3d exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1000:fd42 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fd49 exported_ordinal_10 DATA 0 true Stack[-0xe] - 1000:fd4c exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1000:fd53 exported_ordinal_10 WRITE 0 true 1028:0876 Data6 DAT_1028_0876 1000:fd56 exported_ordinal_10 WRITE 0 true 1028:0878 Data6 DAT_1028_0878 1000:fd5a exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1000:99f0 Code1 FUN_1000_99f0 FUN_1000_99f0 1000:fd5f exported_ordinal_10 UNCONDITIONAL_CALL 0 true 1008:00e2 Code2 FUN_1008_00e2 FUN_1008_00e2 1000:fd64 exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fd71 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fd81 Code1 LAB_1000_fd81 1000:fd73 exported_ordinal_10 READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1000:fd78 exported_ordinal_10 CONDITIONAL_JUMP 0 true 1000:fd7a Code1 LAB_1000_fd7a 1000:fd7a exported_ordinal_10 DATA 1 true Stack[0x4] - 1000:fd85 ne_program_entry UNCONDITIONAL_CALL 0 true 1228:005c EXTERNAL INITTASK INITTASK 1000:fd8a ne_program_entry UNCONDITIONAL_CALL 0 true 1020:0002 Code5 FUN_1020_0002 FUN_1020_0002 1000:fd8f ne_program_entry UNCONDITIONAL_CALL 0 true 1008:298a Code2 FUN_1008_298a FUN_1008_298a 1000:fd94 ne_program_entry UNCONDITIONAL_CALL 0 true 1008:2554 Code2 FUN_1008_2554 FUN_1008_2554 1000:fd99 ne_program_entry UNCONDITIONAL_CALL 0 true 1010:0472 Code3 FUN_1010_0472 FUN_1010_0472 1000:fd9e ne_program_entry UNCONDITIONAL_CALL 0 true 1008:15c2 Code2 FUN_1008_15c2 FUN_1008_15c2 1000:fda3 ne_program_entry UNCONDITIONAL_CALL 0 true 1008:11b8 Code2 FUN_1008_11b8 FUN_1008_11b8 1000:fda8 ne_program_entry UNCONDITIONAL_CALL 0 true 1008:0f27 Code2 FUN_1008_0f27 FUN_1008_0f27 1000:fdb0 ne_program_entry UNCONDITIONAL_CALL 0 true 1228:0000 EXTERNAL GETVERSION GETVERSION 1000:fdb5 ne_program_entry WRITE 0 true 1028:07bf Data6 DAT_1028_07bf 1000:fdb8 ne_program_entry WRITE 0 true 1028:07c1 Data6 DAT_1028_07c1 1000:fdbc ne_program_entry READ 0 true 1028:07c1 Data6 DAT_1028_07c1 1000:fdc0 ne_program_entry READ 0 true 1028:07bf Data6 DAT_1028_07bf 1000:fdcc ne_program_entry CONDITIONAL_JUMP 0 true 1000:fdf4 Code1 LAB_1000_fdf4 1000:fdce ne_program_entry READ 0 true 1028:07c1 Data6 DAT_1028_07c1 1000:fdd2 ne_program_entry READ 0 true 1028:07bf Data6 DAT_1028_07bf 1000:fdde ne_program_entry CONDITIONAL_JUMP 0 true 1000:fe08 Code1 LAB_1000_fe08 1000:fde0 ne_program_entry READ 0 true 1028:07c1 Data6 DAT_1028_07c1 1000:fde4 ne_program_entry READ 0 true 1028:07bf Data6 DAT_1028_07bf 1000:fdf2 ne_program_entry CONDITIONAL_JUMP 0 true 1000:fe08 Code1 LAB_1000_fe08 1000:fe02 ne_program_entry READ 0 true 1028:0668 Data6 DAT_1028_0668 1000:fe02 ne_program_entry READ 0 false 1028:0666 Data6 DAT_1028_0666 1000:fe02 ne_program_entry COMPUTED_CALL -1 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1000:fe06 ne_program_entry UNCONDITIONAL_JUMP 0 true 1000:fe32 Code1 LAB_1000_fe32 1000:fe16 ne_program_entry UNCONDITIONAL_CALL 0 true 1018:1a61 Code4 FUN_1018_1a61 FUN_1018_1a61 1000:fe20 ne_program_entry READ 1 true 1028:0748 Data6 DAT_1028_0748 1000:fe2d ne_program_entry READ 1 true 1028:0748 Data6 DAT_1028_0748 1000:fe35 ne_program_entry UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1008:0006 FUN_1008_0002 READ 0 true 1028:07c6 Data6 DAT_1028_07c6 1008:000b FUN_1008_0002 CONDITIONAL_JUMP 0 true 1008:001f Code2 LAB_1008_001f 1008:000d FUN_1008_0002 READ 0 true 1028:43f2 Data6 DAT_1028_43f2 1008:0012 FUN_1008_0002 CONDITIONAL_JUMP 0 true 1008:001f Code2 LAB_1008_001f 1008:0014 FUN_1008_0002 DATA 0 true Stack[0x4] - 1008:0017 FUN_1008_0002 UNCONDITIONAL_CALL 0 true 1008:1131 Code2 FUN_1008_1131 FUN_1008_1131 1008:001c FUN_1008_0002 DATA 0 true Stack[-0x4] - 1008:002a FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:002f FUN_1008_0023 DATA 0 true Stack[-0x6] - 1008:0032 FUN_1008_0023 DATA 0 true Stack[-0x4] - 1008:0035 FUN_1008_0023 DATA 1 true Stack[-0x6] - 1008:0038 FUN_1008_0023 DATA 1 true Stack[-0x4] - 1008:003b FUN_1008_0023 CONDITIONAL_JUMP 0 true 1008:0040 Code2 LAB_1008_0040 1008:003d FUN_1008_0023 UNCONDITIONAL_JUMP 0 true 1008:00de Code2 LAB_1008_00de 1008:0040 FUN_1008_0023 DATA 1 true Stack[-0x6] - 1008:0043 FUN_1008_0023 DATA 0 true Stack[-0x10] - 1008:0046 FUN_1008_0023 DATA 0 true Stack[-0xe] - 1008:0056 FUN_1008_0023 DATA 0 true Stack[-0x8] - 1008:0059 FUN_1008_0023 UNCONDITIONAL_JUMP 0 true 1008:005e Code2 LAB_1008_005e 1008:005b FUN_1008_0023 DATA 0 true Stack[-0x8] - 1008:005e FUN_1008_0023 DATA 1 true Stack[-0x8] - 1008:0064 FUN_1008_0023 DATA 1 true Stack[-0x10] - 1008:0080 FUN_1008_0023 DATA 0 true Stack[-0x8] - 1008:0085 FUN_1008_0023 CONDITIONAL_JUMP 0 true 1008:005b Code2 LAB_1008_005b 1008:0087 FUN_1008_0023 DATA 0 true Stack[0x4] - 1008:008a FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1008:008f FUN_1008_0023 DATA 0 true Stack[-0xa] - 1008:0092 FUN_1008_0023 DATA 0 true Stack[-0xa] - 1008:0095 FUN_1008_0023 DATA 1 true Stack[-0x6] - 1008:009a FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:0180 EXTERNAL CREATEPALETTE CREATEPALETTE 1008:00a2 FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1008:00a7 FUN_1008_0023 DATA 0 true Stack[-0xc] - 1008:00aa FUN_1008_0023 DATA 0 true Stack[-0xa] - 1008:00ad FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1008:00b2 FUN_1008_0023 DATA 0 true Stack[-0xa] - 1008:00b5 FUN_1008_0023 DATA 0 true Stack[-0xc] - 1008:00ba FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1008:00c0 FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1008:00c5 FUN_1008_0023 DATA 0 true Stack[0x4] - 1008:00c8 FUN_1008_0023 DATA 0 true Stack[-0xa] - 1008:00cb FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1008:00d0 FUN_1008_0023 DATA 0 true Stack[-0x4] - 1008:00d3 FUN_1008_0023 DATA 0 true Stack[-0x6] - 1008:00d9 FUN_1008_0023 UNCONDITIONAL_CALL 0 true 1020:0147 Code5 FUN_1020_0147 FUN_1020_0147 1008:00e6 FUN_1008_00e2 DATA 0 true Stack[-0x14] - 1008:00f3 FUN_1008_00e2 UNCONDITIONAL_CALL 0 true 1228:0234 EXTERNAL PEEKMESSAGE PEEKMESSAGE 1008:00fe FUN_1008_00e2 DATA 0 true Stack[-0x15] - 1008:0101 FUN_1008_00e2 DATA 0 true Stack[-0x15] - 1008:0105 FUN_1008_00e2 CONDITIONAL_JUMP 0 true 1008:0130 Code2 LAB_1008_0130 1008:0107 FUN_1008_00e2 DATA 0 true Stack[-0x12] - 1008:010c FUN_1008_00e2 CONDITIONAL_JUMP 0 true 1008:0130 Code2 LAB_1008_0130 1008:010e FUN_1008_00e2 DATA 0 true Stack[-0x12] - 1008:0113 FUN_1008_00e2 CONDITIONAL_JUMP 0 true 1008:0130 Code2 LAB_1008_0130 1008:0115 FUN_1008_00e2 DATA 0 true Stack[-0x12] - 1008:011a FUN_1008_00e2 CONDITIONAL_JUMP 0 true 1008:0130 Code2 LAB_1008_0130 1008:011c FUN_1008_00e2 DATA 0 true Stack[-0x14] - 1008:0121 FUN_1008_00e2 UNCONDITIONAL_CALL 0 true 1228:0240 EXTERNAL TRANSLATEMESSAGE TRANSLATEMESSAGE 1008:0126 FUN_1008_00e2 DATA 0 true Stack[-0x14] - 1008:012b FUN_1008_00e2 UNCONDITIONAL_CALL 0 true 1228:0244 EXTERNAL DISPATCHMESSAGE DISPATCHMESSAGE 1008:0130 FUN_1008_00e2 DATA 0 true Stack[-0x15] - 1008:0134 FUN_1008_00e2 CONDITIONAL_JUMP 0 true 1008:00e6 Code2 LAB_1008_00e6 1008:013c FUN_1008_0138 DATA 0 true Stack[0x52] - 1008:0141 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0146 Code2 LAB_1008_0146 1008:0143 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:0783 Code2 LAB_1008_0783 1008:0146 FUN_1008_0138 DATA 1 true Stack[0x52] - 1008:0150 FUN_1008_0138 DATA 0 true Stack[-0xe] - 1008:0153 FUN_1008_0138 DATA 0 true Stack[-0xc] - 1008:0156 FUN_1008_0138 DATA 1 true Stack[0x4e] - 1008:015c FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:015f FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:0162 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:016a Code2 LAB_1008_016a 1008:0164 FUN_1008_0138 DATA 0 true Stack[0x4e] - 1008:0168 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:016e Code2 LAB_1008_016e 1008:016a FUN_1008_0138 DATA 0 true Stack[0x4e] - 1008:016e FUN_1008_0138 DATA 0 true Stack[0x4a] - 1008:0172 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:01c0 Code2 LAB_1008_01c0 1008:0174 FUN_1008_0138 READ 1 true 1028:0849 Data6 DAT_1028_0849 1008:0177 FUN_1008_0138 READ 1 true 1028:084b Data6 DAT_1028_084b 1008:017b FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:017e FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:0181 FUN_1008_0138 DATA 0 true Stack[0x46] - 1008:0184 FUN_1008_0138 DATA 0 true Stack[0x48] - 1008:0187 FUN_1008_0138 READ 1 true 1028:084d Data6 DAT_1028_084d 1008:018a FUN_1008_0138 READ 1 true 1028:084f Data6 DAT_1028_084f 1008:018e FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:0191 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:0194 FUN_1008_0138 DATA 0 true Stack[0x42] - 1008:0197 FUN_1008_0138 DATA 0 true Stack[0x44] - 1008:019a FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:019d FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:01a0 FUN_1008_0138 DATA 1 true Stack[0x3e] - 1008:01a3 FUN_1008_0138 DATA 1 true Stack[0x40] - 1008:01a6 FUN_1008_0138 DATA 0 true Stack[-0x6] - 1008:01a9 FUN_1008_0138 DATA 0 true Stack[-0x4] - 1008:01ac FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:01af FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:01b2 FUN_1008_0138 DATA 1 true Stack[0x3a] - 1008:01b5 FUN_1008_0138 DATA 1 true Stack[0x3c] - 1008:01b8 FUN_1008_0138 DATA 0 true Stack[-0xa] - 1008:01bb FUN_1008_0138 DATA 0 true Stack[-0x8] - 1008:01be FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:0208 Code2 LAB_1008_0208 1008:01c0 FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:01c3 FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:01cc FUN_1008_0138 DATA 0 true Stack[0x46] - 1008:01cf FUN_1008_0138 DATA 0 true Stack[0x48] - 1008:01d2 FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:01d5 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:01de FUN_1008_0138 DATA 0 true Stack[0x42] - 1008:01e1 FUN_1008_0138 DATA 0 true Stack[0x44] - 1008:01e4 FUN_1008_0138 DATA 1 true Stack[0x3e] - 1008:01e7 FUN_1008_0138 DATA 1 true Stack[0x40] - 1008:01f0 FUN_1008_0138 DATA 0 true Stack[-0x6] - 1008:01f3 FUN_1008_0138 DATA 0 true Stack[-0x4] - 1008:01f6 FUN_1008_0138 DATA 1 true Stack[0x3a] - 1008:01f9 FUN_1008_0138 DATA 1 true Stack[0x3c] - 1008:0202 FUN_1008_0138 DATA 0 true Stack[-0xa] - 1008:0205 FUN_1008_0138 DATA 0 true Stack[-0x8] - 1008:0208 FUN_1008_0138 DATA 0 true Stack[-0x4] - 1008:020c FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0216 Code2 LAB_1008_0216 1008:020e FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0261 Code2 LAB_1008_0261 1008:0210 FUN_1008_0138 DATA 0 true Stack[-0x6] - 1008:0214 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0261 Code2 LAB_1008_0261 1008:0216 FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:0219 FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:021c FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:021f FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0228 Code2 LAB_1008_0228 1008:0221 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0261 Code2 LAB_1008_0261 1008:0223 FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:0226 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0261 Code2 LAB_1008_0261 1008:0228 FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:022b FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:0233 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0238 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0243 FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:0246 FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:024e FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0253 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:025e FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:02fb Code2 LAB_1008_02fb 1008:0261 FUN_1008_0138 DATA 0 true Stack[-0x4] - 1008:0265 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:026f Code2 LAB_1008_026f 1008:0267 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:02b9 Code2 LAB_1008_02b9 1008:0269 FUN_1008_0138 DATA 0 true Stack[-0x6] - 1008:026d FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:02b9 Code2 LAB_1008_02b9 1008:026f FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:0272 FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:0275 FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:0278 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0281 Code2 LAB_1008_0281 1008:027a FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:02b9 Code2 LAB_1008_02b9 1008:027c FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:027f FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:02b9 Code2 LAB_1008_02b9 1008:0281 FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:0284 FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:028c FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0291 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:029c FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:029f FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:02a7 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:02ac FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:02b7 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:02fb Code2 LAB_1008_02fb 1008:02b9 FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:02bc FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:02bf FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:02c2 FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:02ca FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:02cf FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:02da FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:02dd FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:02e0 FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:02e3 FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:02eb FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:02f0 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:02fb FUN_1008_0138 DATA 0 true Stack[-0x8] - 1008:02ff FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0309 Code2 LAB_1008_0309 1008:0301 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0354 Code2 LAB_1008_0354 1008:0303 FUN_1008_0138 DATA 0 true Stack[-0xa] - 1008:0307 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0354 Code2 LAB_1008_0354 1008:0309 FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:030c FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:030f FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:0312 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:031b Code2 LAB_1008_031b 1008:0314 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0354 Code2 LAB_1008_0354 1008:0316 FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:0319 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0354 Code2 LAB_1008_0354 1008:031b FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:031e FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:0326 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:032b FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0336 FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:0339 FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:0341 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0346 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0351 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:03ee Code2 LAB_1008_03ee 1008:0354 FUN_1008_0138 DATA 0 true Stack[-0x8] - 1008:0358 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0362 Code2 LAB_1008_0362 1008:035a FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:03ac Code2 LAB_1008_03ac 1008:035c FUN_1008_0138 DATA 0 true Stack[-0xa] - 1008:0360 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:03ac Code2 LAB_1008_03ac 1008:0362 FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:0365 FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:0368 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:036b FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0374 Code2 LAB_1008_0374 1008:036d FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:03ac Code2 LAB_1008_03ac 1008:036f FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:0372 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:03ac Code2 LAB_1008_03ac 1008:0374 FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:0377 FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:037f FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0384 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:038f FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:0392 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:039a FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:039f FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:03aa FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:03ee Code2 LAB_1008_03ee 1008:03ac FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:03af FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:03b2 FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:03b5 FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:03bd FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:03c2 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:03cd FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:03d0 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:03d3 FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:03d6 FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:03de FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:03e3 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:03ee FUN_1008_0138 DATA 1 true Stack[0x4e] - 1008:03f3 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:03f8 Code2 LAB_1008_03f8 1008:03f5 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:05dc Code2 LAB_1008_05dc 1008:03f8 FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:03fb FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:0403 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0408 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0413 FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:0416 FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:041e FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0423 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0442 FUN_1008_0138 DATA 1 true Stack[0x36] - 1008:0445 FUN_1008_0138 DATA 1 true Stack[0x38] - 1008:044d FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0452 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:100b Code5 FUN_1020_100b FUN_1020_100b 1008:0457 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0472 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:047c Code2 LAB_1008_047c 1008:0474 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0497 Code2 LAB_1008_0497 1008:047a FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0497 Code2 LAB_1008_0497 1008:047c FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0495 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:04ba Code2 LAB_1008_04ba 1008:0497 FUN_1008_0138 DATA 1 true Stack[0x10] - 1008:049a FUN_1008_0138 DATA 1 true Stack[0x12] - 1008:04a2 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:04a7 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:04ba FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:04c9 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:04d3 Code2 LAB_1008_04d3 1008:04cb FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:04ee Code2 LAB_1008_04ee 1008:04d1 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:04ee Code2 LAB_1008_04ee 1008:04d3 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:04ec FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:0511 Code2 LAB_1008_0511 1008:04ee FUN_1008_0138 DATA 1 true Stack[0xc] - 1008:04f1 FUN_1008_0138 DATA 1 true Stack[0xe] - 1008:04f9 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:04fe FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0511 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0520 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:052a Code2 LAB_1008_052a 1008:0522 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0545 Code2 LAB_1008_0545 1008:0528 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0545 Code2 LAB_1008_0545 1008:052a FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0543 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:0568 Code2 LAB_1008_0568 1008:0545 FUN_1008_0138 DATA 1 true Stack[0x10] - 1008:0548 FUN_1008_0138 DATA 1 true Stack[0x12] - 1008:0550 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0555 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0568 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0577 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:0581 Code2 LAB_1008_0581 1008:0579 FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:059c Code2 LAB_1008_059c 1008:057f FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:059c Code2 LAB_1008_059c 1008:0581 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:059a FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:05bf Code2 LAB_1008_05bf 1008:059c FUN_1008_0138 DATA 1 true Stack[0xc] - 1008:059f FUN_1008_0138 DATA 1 true Stack[0xe] - 1008:05a7 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:05ac FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:05bf FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:05c2 FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:05c5 FUN_1008_0138 WRITE 0 true 1028:0849 Data6 DAT_1028_0849 1008:05c8 FUN_1008_0138 WRITE 0 true 1028:084b Data6 DAT_1028_084b 1008:05cc FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:05cf FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:05d2 FUN_1008_0138 WRITE 0 true 1028:084d Data6 DAT_1028_084d 1008:05d5 FUN_1008_0138 WRITE 0 true 1028:084f Data6 DAT_1028_084f 1008:05d9 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:06d6 Code2 LAB_1008_06d6 1008:05de FUN_1008_0138 CONDITIONAL_JUMP 0 true 1008:05e3 Code2 LAB_1008_05e3 1008:05e0 FUN_1008_0138 UNCONDITIONAL_JUMP 0 true 1008:06d6 Code2 LAB_1008_06d6 1008:05e3 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:063e FUN_1008_0138 DATA 1 true Stack[0x46] - 1008:0641 FUN_1008_0138 DATA 1 true Stack[0x48] - 1008:0649 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:064e FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0659 FUN_1008_0138 DATA 1 true Stack[0x42] - 1008:065c FUN_1008_0138 DATA 1 true Stack[0x44] - 1008:0664 FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0669 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0674 FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:0677 FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:067f FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:0684 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:068f FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:0692 FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:069a FUN_1008_0138 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:069f FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:06aa FUN_1008_0138 DATA 1 true Stack[-0x6] - 1008:06ad FUN_1008_0138 DATA 1 true Stack[-0x4] - 1008:06b0 FUN_1008_0138 WRITE 0 true 1028:0849 Data6 DAT_1028_0849 1008:06b3 FUN_1008_0138 WRITE 0 true 1028:084b Data6 DAT_1028_084b 1008:06b7 FUN_1008_0138 DATA 1 true Stack[-0xa] - 1008:06ba FUN_1008_0138 DATA 1 true Stack[-0x8] - 1008:06bd FUN_1008_0138 WRITE 0 true 1028:084d Data6 DAT_1028_084d 1008:06c0 FUN_1008_0138 WRITE 0 true 1028:084f Data6 DAT_1028_084f 1008:06d6 FUN_1008_0138 DATA 1 true Stack[0x30] - 1008:06d9 FUN_1008_0138 DATA 1 true Stack[0x32] - 1008:06dc FUN_1008_0138 DATA 1 true Stack[0x34] - 1008:06df FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:06ee FUN_1008_0138 DATA 1 true Stack[0x2a] - 1008:06f1 FUN_1008_0138 DATA 1 true Stack[0x2c] - 1008:06f4 FUN_1008_0138 DATA 1 true Stack[0x2e] - 1008:06f7 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0706 FUN_1008_0138 DATA 1 true Stack[0x50] - 1008:070d FUN_1008_0138 DATA 1 true Stack[0x24] - 1008:0710 FUN_1008_0138 DATA 1 true Stack[0x26] - 1008:0713 FUN_1008_0138 DATA 1 true Stack[0x28] - 1008:0716 FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:0725 FUN_1008_0138 DATA 1 true Stack[0x1e] - 1008:0728 FUN_1008_0138 DATA 1 true Stack[0x20] - 1008:072b FUN_1008_0138 DATA 1 true Stack[0x22] - 1008:072e FUN_1008_0138 DATA 1 true Stack[-0xe] - 1008:073d FUN_1008_0138 DATA 1 true Stack[0x4c] - 1008:0744 FUN_1008_0138 DATA 1 true Stack[0x1c] - 1008:074b FUN_1008_0138 DATA 1 true Stack[0x1a] - 1008:0752 FUN_1008_0138 DATA 1 true Stack[0x16] - 1008:0755 FUN_1008_0138 DATA 1 true Stack[0x18] - 1008:0760 FUN_1008_0138 DATA 1 true Stack[0x14] - 1008:0767 FUN_1008_0138 DATA 1 true Stack[0xa] - 1008:076e FUN_1008_0138 DATA 1 true Stack[0x8] - 1008:0775 FUN_1008_0138 DATA 1 true Stack[0x6] - 1008:077c FUN_1008_0138 DATA 1 true Stack[0x4] - 1008:078b FUN_1008_0787 DATA 1 true Stack[0xc] - 1008:0797 FUN_1008_0787 DATA 1 true Stack[0xa] - 1008:079d FUN_1008_0787 DATA 1 true Stack[0x8] - 1008:07a4 FUN_1008_0787 DATA 1 true Stack[0x6] - 1008:07ab FUN_1008_0787 DATA 1 true Stack[0x4] - 1008:07ba FUN_1008_07b6 DATA 0 true Stack[0xe] - 1008:07bd FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:07c2 FUN_1008_07b6 DATA 0 true Stack[-0x8] - 1008:07c5 FUN_1008_07b6 DATA 0 true Stack[0xe] - 1008:07c8 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:07cd FUN_1008_07b6 DATA 0 true Stack[-0xa] - 1008:07d0 FUN_1008_07b6 DATA 0 true Stack[-0x8] - 1008:07d3 FUN_1008_07b6 READ 0 true 1028:085b Data6 DAT_1028_085b 1008:07d7 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:07dc FUN_1008_07b6 DATA 0 true Stack[-0x4] - 1008:07df FUN_1008_07b6 DATA 0 true Stack[-0xa] - 1008:07e2 FUN_1008_07b6 DATA 0 true Stack[0x4] - 1008:07e5 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:07ea FUN_1008_07b6 DATA 0 true Stack[-0x6] - 1008:07ed FUN_1008_07b6 DATA 0 true Stack[-0x8] - 1008:07f0 FUN_1008_07b6 DATA 0 true Stack[0xc] - 1008:07f3 FUN_1008_07b6 DATA 0 true Stack[0xa] - 1008:07f6 FUN_1008_07b6 DATA 0 true Stack[0x8] - 1008:07f9 FUN_1008_07b6 DATA 0 true Stack[0x6] - 1008:07fc FUN_1008_07b6 DATA 0 true Stack[-0xa] - 1008:0808 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:080d FUN_1008_07b6 DATA 0 true Stack[-0xa] - 1008:0810 FUN_1008_07b6 DATA 0 true Stack[-0x6] - 1008:0813 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0818 FUN_1008_07b6 DATA 0 true Stack[-0x8] - 1008:081b FUN_1008_07b6 DATA 0 true Stack[-0x4] - 1008:081e FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0823 FUN_1008_07b6 DATA 0 true Stack[-0xa] - 1008:0826 FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:082b FUN_1008_07b6 DATA 0 true Stack[-0x8] - 1008:082e FUN_1008_07b6 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:083b FUN_1008_0837 DATA 0 true Stack[0xc] - 1008:083e FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:0843 FUN_1008_0837 DATA 0 true Stack[-0x8] - 1008:0846 FUN_1008_0837 DATA 0 true Stack[0xc] - 1008:0849 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:084e FUN_1008_0837 DATA 0 true Stack[-0xa] - 1008:0851 FUN_1008_0837 DATA 0 true Stack[-0x8] - 1008:0854 FUN_1008_0837 READ 0 true 1028:085b Data6 DAT_1028_085b 1008:0858 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:085d FUN_1008_0837 DATA 0 true Stack[-0x4] - 1008:0860 FUN_1008_0837 DATA 0 true Stack[-0xa] - 1008:0863 FUN_1008_0837 READ 0 true 1028:085f Data6 DAT_1028_085f 1008:0867 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:086c FUN_1008_0837 DATA 0 true Stack[-0x6] - 1008:086f FUN_1008_0837 DATA 0 true Stack[-0x8] - 1008:0872 FUN_1008_0837 DATA 0 true Stack[0xa] - 1008:0875 FUN_1008_0837 DATA 0 true Stack[0x8] - 1008:0878 FUN_1008_0837 DATA 0 true Stack[0x6] - 1008:087b FUN_1008_0837 DATA 0 true Stack[0x4] - 1008:087e FUN_1008_0837 DATA 0 true Stack[-0xa] - 1008:0881 FUN_1008_0837 DATA 0 true Stack[0xa] - 1008:0884 FUN_1008_0837 DATA 0 true Stack[0x8] - 1008:088c FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0891 FUN_1008_0837 DATA 0 true Stack[-0xa] - 1008:0894 FUN_1008_0837 DATA 0 true Stack[-0x6] - 1008:0897 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:089c FUN_1008_0837 DATA 0 true Stack[-0x8] - 1008:089f FUN_1008_0837 DATA 0 true Stack[-0x4] - 1008:08a2 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:08a7 FUN_1008_0837 DATA 0 true Stack[-0xa] - 1008:08aa FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:08af FUN_1008_0837 DATA 0 true Stack[-0x8] - 1008:08b2 FUN_1008_0837 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:08bf FUN_1008_08bb DATA 0 true Stack[0xc] - 1008:08c2 FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:08c7 FUN_1008_08bb DATA 0 true Stack[-0x8] - 1008:08ca FUN_1008_08bb DATA 0 true Stack[0xc] - 1008:08cd FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:08d2 FUN_1008_08bb DATA 0 true Stack[-0xa] - 1008:08d5 FUN_1008_08bb DATA 0 true Stack[-0x8] - 1008:08d8 FUN_1008_08bb READ 0 true 1028:085b Data6 DAT_1028_085b 1008:08dc FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:08e1 FUN_1008_08bb DATA 0 true Stack[-0x4] - 1008:08e4 FUN_1008_08bb DATA 0 true Stack[-0xa] - 1008:08e7 FUN_1008_08bb READ 0 true 1028:085d Data6 DAT_1028_085d 1008:08eb FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:08f0 FUN_1008_08bb DATA 0 true Stack[-0x6] - 1008:08f3 FUN_1008_08bb DATA 0 true Stack[-0x8] - 1008:08f6 FUN_1008_08bb DATA 0 true Stack[0xa] - 1008:08f9 FUN_1008_08bb DATA 0 true Stack[0x8] - 1008:08fc FUN_1008_08bb DATA 0 true Stack[0x6] - 1008:08ff FUN_1008_08bb DATA 0 true Stack[0x4] - 1008:0902 FUN_1008_08bb DATA 0 true Stack[-0xa] - 1008:0905 FUN_1008_08bb DATA 0 true Stack[0xa] - 1008:0908 FUN_1008_08bb DATA 0 true Stack[0x8] - 1008:0910 FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0915 FUN_1008_08bb DATA 0 true Stack[-0xa] - 1008:0918 FUN_1008_08bb DATA 0 true Stack[-0x6] - 1008:091b FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0920 FUN_1008_08bb DATA 0 true Stack[-0x8] - 1008:0923 FUN_1008_08bb DATA 0 true Stack[-0x4] - 1008:0926 FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:092b FUN_1008_08bb DATA 0 true Stack[-0xa] - 1008:092e FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0933 FUN_1008_08bb DATA 0 true Stack[-0x8] - 1008:0936 FUN_1008_08bb UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0943 FUN_1008_093f DATA 0 true Stack[0xc] - 1008:0946 FUN_1008_093f UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:094b FUN_1008_093f DATA 0 true Stack[-0x6] - 1008:094e FUN_1008_093f DATA 0 true Stack[-0x6] - 1008:0951 FUN_1008_093f READ 0 true 1028:085b Data6 DAT_1028_085b 1008:0955 FUN_1008_093f UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:095a FUN_1008_093f DATA 0 true Stack[-0x4] - 1008:095d FUN_1008_093f DATA 0 true Stack[0xc] - 1008:0960 FUN_1008_093f DATA 0 true Stack[0xa] - 1008:0963 FUN_1008_093f DATA 0 true Stack[0x8] - 1008:0966 FUN_1008_093f DATA 0 true Stack[0x6] - 1008:0969 FUN_1008_093f DATA 0 true Stack[0x4] - 1008:096c FUN_1008_093f DATA 0 true Stack[-0x6] - 1008:096f FUN_1008_093f DATA 0 true Stack[0xa] - 1008:0972 FUN_1008_093f DATA 0 true Stack[0x8] - 1008:097a FUN_1008_093f UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:097f FUN_1008_093f DATA 0 true Stack[-0x6] - 1008:0982 FUN_1008_093f DATA 0 true Stack[-0x4] - 1008:0985 FUN_1008_093f UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:098a FUN_1008_093f DATA 0 true Stack[-0x6] - 1008:098d FUN_1008_093f UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:099a FUN_1008_0996 DATA 0 true Stack[0x4] - 1008:099d FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:09a2 FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:09a5 FUN_1008_0996 DATA 0 true Stack[0x4] - 1008:09a8 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:09ad FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:09b0 FUN_1008_0996 DATA 0 true Stack[0x4] - 1008:09b8 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP CREATECOMPATIBLEBITMAP 1008:09bd FUN_1008_0996 DATA 0 true Stack[-0x18] - 1008:09c0 FUN_1008_0996 DATA 0 true Stack[-0x2e] - 1008:09c5 FUN_1008_0996 DATA 0 true Stack[-0x2c] - 1008:09ca FUN_1008_0996 DATA 1 true Stack[0x6] - 1008:09d0 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:09de Code2 LAB_1008_09de 1008:09d2 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:09d7 FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:09dc FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0a1b Code2 LAB_1008_0a1b 1008:09e1 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:09ef Code2 LAB_1008_09ef 1008:09e3 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:09e8 FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:09ed FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0a1b Code2 LAB_1008_0a1b 1008:09f2 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a00 Code2 LAB_1008_0a00 1008:09f4 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:09f9 FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:09fe FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0a1b Code2 LAB_1008_0a1b 1008:0a03 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a11 Code2 LAB_1008_0a11 1008:0a05 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:0a0a FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:0a0f FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0a1b Code2 LAB_1008_0a1b 1008:0a11 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:0a16 FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:0a1b FUN_1008_0996 DATA 1 true Stack[-0x32] - 1008:0a1e FUN_1008_0996 DATA 1 true Stack[-0x30] - 1008:0a27 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:0a2a FUN_1008_0996 DATA 0 true Stack[-0x30] - 1008:0a2d FUN_1008_0996 DATA 0 true Stack[0x8] - 1008:0a31 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a49 Code2 LAB_1008_0a49 1008:0a33 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a3b Code2 LAB_1008_0a3b 1008:0a35 FUN_1008_0996 DATA 0 true Stack[0x6] - 1008:0a39 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a49 Code2 LAB_1008_0a49 1008:0a3b FUN_1008_0996 DATA 0 true Stack[0x8] - 1008:0a3f FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a49 Code2 LAB_1008_0a49 1008:0a41 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a57 Code2 LAB_1008_0a57 1008:0a43 FUN_1008_0996 DATA 0 true Stack[0x6] - 1008:0a47 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0a57 Code2 LAB_1008_0a57 1008:0a49 FUN_1008_0996 DATA 1 true Stack[0x6] - 1008:0a4c FUN_1008_0996 DATA 1 true Stack[0x8] - 1008:0a4f FUN_1008_0996 DATA 0 true Stack[-0x1e] - 1008:0a52 FUN_1008_0996 DATA 0 true Stack[-0x1c] - 1008:0a55 FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0a6b Code2 LAB_1008_0a6b 1008:0a57 FUN_1008_0996 DATA 1 true Stack[0x6] - 1008:0a65 FUN_1008_0996 DATA 0 true Stack[-0x1e] - 1008:0a68 FUN_1008_0996 DATA 0 true Stack[-0x1c] - 1008:0a6b FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0a6e FUN_1008_0996 READ 0 true 1028:085b Data6 DAT_1028_085b 1008:0a72 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0a77 FUN_1008_0996 DATA 0 true Stack[-0x10] - 1008:0a7a FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0a7d FUN_1008_0996 DATA 0 true Stack[-0x18] - 1008:0a80 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0a85 FUN_1008_0996 DATA 0 true Stack[-0x12] - 1008:0a88 FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0a94 FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0a97 FUN_1008_0996 DATA 0 true Stack[-0x2e] - 1008:0a9a FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:0aa2 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0aa7 FUN_1008_0996 DATA 0 true Stack[-0x4] - 1008:0aab FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0ab0 Code2 LAB_1008_0ab0 1008:0aad FUN_1008_0996 DATA 0 true Stack[-0x4] - 1008:0ab0 FUN_1008_0996 DATA 1 true Stack[-0x1e] - 1008:0ab3 FUN_1008_0996 DATA 1 true Stack[-0x1c] - 1008:0abb FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1008:0ac4 FUN_1008_0996 DATA 0 true Stack[-0x5] - 1008:0ac7 FUN_1008_0996 DATA 1 true Stack[-0x1e] - 1008:0aca FUN_1008_0996 DATA 1 true Stack[-0x1c] - 1008:0ad2 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1020:08e6 Code5 FUN_1020_08e6 FUN_1020_08e6 1008:0ad7 FUN_1008_0996 DATA 0 true Stack[-0x1e] - 1008:0ada FUN_1008_0996 DATA 0 true Stack[-0x1c] - 1008:0add FUN_1008_0996 DATA 0 true Stack[-0x5] - 1008:0ae1 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0afd Code2 LAB_1008_0afd 1008:0ae3 FUN_1008_0996 DATA 0 true Stack[-0x1c] - 1008:0ae7 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0afd Code2 LAB_1008_0afd 1008:0ae9 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0af1 Code2 LAB_1008_0af1 1008:0aeb FUN_1008_0996 DATA 0 true Stack[-0x1e] - 1008:0aef FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0afd Code2 LAB_1008_0afd 1008:0af1 FUN_1008_0996 DATA 0 true Stack[-0x5] - 1008:0af5 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0b44 Code2 LAB_1008_0b44 1008:0af7 FUN_1008_0996 DATA 0 true Stack[-0x4] - 1008:0afb FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0b44 Code2 LAB_1008_0b44 1008:0afd FUN_1008_0996 DATA 1 true Stack[-0x4] - 1008:0b0d FUN_1008_0996 DATA 0 true Stack[-0x26] - 1008:0b10 FUN_1008_0996 DATA 0 true Stack[-0x24] - 1008:0b13 FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0b16 FUN_1008_0996 READ 0 true 1028:0861 Data6 DAT_1028_0861 1008:0b1a FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0b1f FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0b22 FUN_1008_0996 DATA 0 true Stack[-0x26] - 1008:0b2b FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0b2e FUN_1008_0996 DATA 1 true Stack[-0x5] - 1008:0b3f FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0b44 FUN_1008_0996 DATA 0 true Stack[-0x4] - 1008:0b48 FUN_1008_0996 CONDITIONAL_JUMP 0 true 1008:0b4d Code2 LAB_1008_0b4d 1008:0b4a FUN_1008_0996 UNCONDITIONAL_JUMP 0 true 1008:0aad Code2 LAB_1008_0aad 1008:0b4d FUN_1008_0996 DATA 0 true Stack[0x4] - 1008:0b50 FUN_1008_0996 DATA 0 true Stack[-0x2e] - 1008:0b53 FUN_1008_0996 DATA 0 true Stack[-0x32] - 1008:0b5b FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0b67 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0b6c FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0b6f FUN_1008_0996 DATA 0 true Stack[-0x10] - 1008:0b72 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0b77 FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0b7a FUN_1008_0996 DATA 0 true Stack[-0x12] - 1008:0b7d FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0b82 FUN_1008_0996 DATA 0 true Stack[-0x18] - 1008:0b85 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0168 EXTERNAL DELETEOBJECT DELETEOBJECT 1008:0b8a FUN_1008_0996 DATA 0 true Stack[-0x8] - 1008:0b8d FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0b92 FUN_1008_0996 DATA 0 true Stack[-0xe] - 1008:0b95 FUN_1008_0996 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0ba2 FUN_1008_0b9e DATA 1 true Stack[0x4] - 1008:0ba5 FUN_1008_0b9e READ 1 true 1028:07d1 Data6 DAT_1028_07d1 1008:0ba9 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0bb5 Code2 LAB_1008_0bb5 1008:0bab FUN_1008_0b9e READ 0 true 1028:086b Data6 DAT_1028_086b 1008:0bb0 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0bb5 Code2 LAB_1008_0bb5 1008:0bb2 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d3f Code2 LAB_1008_0d3f 1008:0bb5 FUN_1008_0b9e DATA 0 true Stack[0x4] - 1008:0bb9 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0bbe Code2 LAB_1008_0bbe 1008:0bbb FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d3f Code2 LAB_1008_0d3f 1008:0bbe FUN_1008_0b9e DATA 0 true Stack[0x4] - 1008:0bc2 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0bc7 Code2 LAB_1008_0bc7 1008:0bc4 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d3f Code2 LAB_1008_0d3f 1008:0bc7 FUN_1008_0b9e DATA 1 true Stack[0x4] - 1008:0bd6 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0be2 Code2 LAB_1008_0be2 1008:0bd8 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0be9 Code2 LAB_1008_0be9 1008:0be0 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0be9 Code2 LAB_1008_0be9 1008:0be2 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0be7 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0c54 Code2 LAB_1008_0c54 1008:0be9 FUN_1008_0b9e DATA 1 true Stack[0x4] - 1008:0bf8 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c04 Code2 LAB_1008_0c04 1008:0bfa FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c0b Code2 LAB_1008_0c0b 1008:0c02 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c0b Code2 LAB_1008_0c0b 1008:0c04 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0c09 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0c54 Code2 LAB_1008_0c54 1008:0c0b FUN_1008_0b9e DATA 1 true Stack[0x4] - 1008:0c1a FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c26 Code2 LAB_1008_0c26 1008:0c1c FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c2d Code2 LAB_1008_0c2d 1008:0c24 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c2d Code2 LAB_1008_0c2d 1008:0c26 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0c2b FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0c54 Code2 LAB_1008_0c54 1008:0c2d FUN_1008_0b9e DATA 1 true Stack[0x4] - 1008:0c3c FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c48 Code2 LAB_1008_0c48 1008:0c3e FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c4f Code2 LAB_1008_0c4f 1008:0c46 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c4f Code2 LAB_1008_0c4f 1008:0c48 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0c4d FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0c54 Code2 LAB_1008_0c54 1008:0c51 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0c54 FUN_1008_0b9e DATA 1 true Stack[-0x4] - 1008:0c57 FUN_1008_0b9e READ 1 true 1028:086b Data6 DAT_1028_086b 1008:0c5b FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c60 Code2 LAB_1008_0c60 1008:0c5d FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d37 Code2 LAB_1008_0d37 1008:0c60 FUN_1008_0b9e DATA 0 true Stack[-0x4] - 1008:0c64 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0c84 Code2 LAB_1008_0c84 1008:0c66 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0c74 FUN_1008_0b9e DATA 1 true Stack[-0x4] - 1008:0c79 FUN_1008_0b9e READ 0 true 1028:4321 Data6 DAT_1028_4321 1008:0c7d FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:07b6 Code2 FUN_1008_07b6 FUN_1008_07b6 1008:0c82 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0c97 Code2 LAB_1008_0c97 1008:0c84 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0c92 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1008:0c97 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0ca5 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0cac FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0caf FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0cb4 Code2 LAB_1008_0cb4 1008:0cb1 FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0cb4 FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0cb7 FUN_1008_0b9e DATA 1 true Stack[-0x4] - 1008:0cba FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0cf6 Code2 LAB_1008_0cf6 1008:0cbc FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0cc5 FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0cd3 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:0837 Code2 FUN_1008_0837 FUN_1008_0837 1008:0cd8 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0ce1 FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0cef FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0cf4 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d2e Code2 LAB_1008_0d2e 1008:0cf6 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0cff FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0d0d FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1008:0d12 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0d1b FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0d29 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0d2e FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0d32 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0d37 Code2 LAB_1008_0d37 1008:0d34 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0cb1 Code2 LAB_1008_0cb1 1008:0d37 FUN_1008_0b9e DATA 1 true Stack[-0x4] - 1008:0d3a FUN_1008_0b9e WRITE 0 true 1028:086b Data6 DAT_1028_086b 1008:0d3d FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0db9 Code2 LAB_1008_0db9 1008:0d3f FUN_1008_0b9e DATA 0 true Stack[0x4] - 1008:0d43 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0db9 Code2 LAB_1008_0db9 1008:0d45 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0d53 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1008:0d58 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0d66 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0d6d FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0d70 FUN_1008_0b9e UNCONDITIONAL_JUMP 0 true 1008:0d75 Code2 LAB_1008_0d75 1008:0d72 FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0d75 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0d7e FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0d8c FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1008:0d91 FUN_1008_0b9e DATA 0 true Stack[0x6] - 1008:0d9a FUN_1008_0b9e DATA 1 true Stack[-0x6] - 1008:0da8 FUN_1008_0b9e UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0dad FUN_1008_0b9e DATA 0 true Stack[-0x6] - 1008:0db1 FUN_1008_0b9e CONDITIONAL_JUMP 0 true 1008:0d72 Code2 LAB_1008_0d72 1008:0db3 FUN_1008_0b9e WRITE 0 true 1028:086b Data6 DAT_1028_086b 1008:0dc0 FUN_1008_0dbd DATA 0 true Stack[0x4] - 1008:0dc4 FUN_1008_0dbd CONDITIONAL_JUMP 0 true 1008:0de2 Code2 LAB_1008_0de2 1008:0dc6 FUN_1008_0dbd DATA 0 true Stack[0x6] - 1008:0dd2 FUN_1008_0dbd DATA 1 true Stack[0x4] - 1008:0ddb FUN_1008_0dbd UNCONDITIONAL_CALL 0 true 1008:07b6 Code2 FUN_1008_07b6 FUN_1008_07b6 1008:0de0 FUN_1008_0dbd UNCONDITIONAL_JUMP 0 true 1008:0df3 Code2 LAB_1008_0df3 1008:0de2 FUN_1008_0dbd DATA 0 true Stack[0x6] - 1008:0dee FUN_1008_0dbd UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1008:0df3 FUN_1008_0dbd DATA 0 true Stack[0x6] - 1008:0dff FUN_1008_0dbd UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0e0c FUN_1008_0e08 DATA 0 true Stack[0x6] - 1008:0e10 FUN_1008_0e08 CONDITIONAL_JUMP 0 true 1008:0e37 Code2 LAB_1008_0e37 1008:0e12 FUN_1008_0e08 DATA 0 true Stack[0x8] - 1008:0e1e FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1008:08bb Code2 FUN_1008_08bb FUN_1008_08bb 1008:0e23 FUN_1008_0e08 DATA 0 true Stack[0x8] - 1008:0e2f FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1008:093f Code2 FUN_1008_093f FUN_1008_093f 1008:0e34 FUN_1008_0e08 UNCONDITIONAL_JUMP 0 true 1008:0f23 Code2 LAB_1008_0f23 1008:0e37 FUN_1008_0e08 DATA 0 true Stack[0x8] - 1008:0e3a FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:0e3f FUN_1008_0e08 DATA 0 true Stack[-0x4] - 1008:0e42 FUN_1008_0e08 DATA 0 true Stack[0x8] - 1008:0e45 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:015c EXTERNAL CREATECOMPATIBLEDC CREATECOMPATIBLEDC 1008:0e4a FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0e4d FUN_1008_0e08 DATA 0 true Stack[-0x4] - 1008:0e50 FUN_1008_0e08 READ 0 true 1028:085b Data6 DAT_1028_085b 1008:0e54 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0e59 FUN_1008_0e08 DATA 0 true Stack[-0x8] - 1008:0e5c FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0e5f FUN_1008_0e08 READ 0 true 1028:0863 Data6 DAT_1028_0863 1008:0e63 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0e68 FUN_1008_0e08 DATA 0 true Stack[-0xa] - 1008:0e6b FUN_1008_0e08 DATA 0 true Stack[-0xc] - 1008:0e70 FUN_1008_0e08 DATA 0 true Stack[-0xe] - 1008:0e75 FUN_1008_0e08 DATA 0 true Stack[-0x10] - 1008:0e7a FUN_1008_0e08 DATA 0 true Stack[-0x12] - 1008:0e81 FUN_1008_0e08 DATA 0 true Stack[-0x14] - 1008:0e86 FUN_1008_0e08 DATA 0 true Stack[-0x16] - 1008:0e89 FUN_1008_0e08 DATA 0 true Stack[0x4] - 1008:0e8d FUN_1008_0e08 CONDITIONAL_JUMP 0 true 1008:0e97 Code2 LAB_1008_0e97 1008:0e8f FUN_1008_0e08 DATA 1 true Stack[-0x12] - 1008:0e94 FUN_1008_0e08 DATA 0 true Stack[-0x16] - 1008:0e97 FUN_1008_0e08 DATA 0 true Stack[0x6] - 1008:0e9b FUN_1008_0e08 CONDITIONAL_JUMP 0 true 1008:0eaf Code2 LAB_1008_0eaf 1008:0e9d FUN_1008_0e08 DATA 1 true Stack[-0x16] - 1008:0ea0 FUN_1008_0e08 DATA 1 true Stack[-0x12] - 1008:0ea3 FUN_1008_0e08 DATA 0 true Stack[-0x16] - 1008:0ea6 FUN_1008_0e08 DATA 1 true Stack[0x6] - 1008:0eac FUN_1008_0e08 DATA 0 true Stack[0x6] - 1008:0eaf FUN_1008_0e08 DATA 1 true Stack[0x6] - 1008:0eb3 FUN_1008_0e08 DATA 0 true Stack[-0x10] - 1008:0eb6 FUN_1008_0e08 DATA 0 true Stack[-0x14] - 1008:0eb9 FUN_1008_0e08 DATA 0 true Stack[-0x4] - 1008:0ebc FUN_1008_0e08 DATA 0 true Stack[-0xc] - 1008:0ebf FUN_1008_0e08 DATA 0 true Stack[-0xe] - 1008:0ec2 FUN_1008_0e08 DATA 0 true Stack[-0x10] - 1008:0ec5 FUN_1008_0e08 DATA 0 true Stack[-0x12] - 1008:0ec8 FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0ecb FUN_1008_0e08 DATA 0 true Stack[-0x14] - 1008:0ece FUN_1008_0e08 DATA 0 true Stack[-0x16] - 1008:0ed6 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0edb FUN_1008_0e08 DATA 0 true Stack[0x8] - 1008:0ede FUN_1008_0e08 DATA 0 true Stack[-0xc] - 1008:0ee1 FUN_1008_0e08 DATA 0 true Stack[-0xe] - 1008:0ee4 FUN_1008_0e08 DATA 0 true Stack[-0x10] - 1008:0ee7 FUN_1008_0e08 DATA 0 true Stack[-0x12] - 1008:0eea FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0eed FUN_1008_0e08 DATA 0 true Stack[-0x14] - 1008:0ef0 FUN_1008_0e08 DATA 0 true Stack[-0x16] - 1008:0ef8 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0150 EXTERNAL BITBLT BITBLT 1008:0efd FUN_1008_0e08 DATA 0 true Stack[-0x4] - 1008:0f00 FUN_1008_0e08 DATA 0 true Stack[-0x8] - 1008:0f03 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0f08 FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0f0b FUN_1008_0e08 DATA 0 true Stack[-0xa] - 1008:0f0e FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:0f13 FUN_1008_0e08 DATA 0 true Stack[-0x6] - 1008:0f16 FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0f1b FUN_1008_0e08 DATA 0 true Stack[-0x4] - 1008:0f1e FUN_1008_0e08 UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:0f37 FUN_1008_0f2e WRITE 0 true 1028:43f2 Data6 DAT_1028_43f2 1008:0f3c FUN_1008_0f2e WRITE 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:0f43 FUN_1008_0f2e WRITE 0 true 1028:43ee Data6 DAT_1028_43ee 1008:0f46 FUN_1008_0f2e DATA 0 true Stack[-0x78] - 1008:0f4b FUN_1008_0f2e DATA 0 true Stack[-0x2de] - 1008:0f53 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1020:082e Code5 FUN_1020_082e FUN_1020_082e 1008:0f58 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1008:0f5d FUN_1008_0f2e DATA 0 true Stack[-0xde] - 1008:0f63 FUN_1008_0f2e DATA 0 true Stack[-0x78] - 1008:0f6d FUN_1008_0f2e DATA 0 true Stack[-0x2de] - 1008:0f75 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1020:082e Code5 FUN_1020_082e FUN_1020_082e 1008:0f7a FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1020:0a7d Code5 FUN_1020_0a7d FUN_1020_0a7d 1008:0f80 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1008:2f07 Code2 FUN_1008_2f07 FUN_1008_2f07 1008:0f85 FUN_1008_0f2e DATA 0 true Stack[-0xde] - 1008:0f90 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1008:2f4d Code2 FUN_1008_2f4d FUN_1008_2f4d 1008:0fa1 FUN_1008_0f2e DATA 0 true Stack[-0xde] - 1008:0fa7 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:0070 EXTERNAL GETPRIVATEPROFILEINT GETPRIVATEPROFILEINT 1008:0fac FUN_1008_0f2e DATA 0 true Stack[-0xc] - 1008:0faf FUN_1008_0f2e DATA 0 true Stack[-0xc] - 1008:0fb3 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:0fb8 Code2 LAB_1008_0fb8 1008:0fb5 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:10de Code2 LAB_1008_10de 1008:0fb8 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:009c EXTERNAL WAVEOUTGETNUMDEVS WAVEOUTGETNUMDEVS 1008:0fbd FUN_1008_0f2e WRITE 0 true 1028:43ee Data6 DAT_1028_43ee 1008:0fc0 FUN_1008_0f2e READ 0 true 1028:43ee Data6 DAT_1028_43ee 1008:0fc5 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:0fca Code2 LAB_1008_0fca 1008:0fc7 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:10de Code2 LAB_1008_10de 1008:0fca FUN_1008_0f2e READ 0 true 1028:43f0 Data6 DAT_1028_43f0 1008:0fd5 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:00a0 EXTERNAL WAVEOUTGETDEVCAPS WAVEOUTGETDEVCAPS 1008:0fdc FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:0fe6 Code2 LAB_1008_0fe6 1008:0fe0 FUN_1008_0f2e WRITE 0 true 1028:43ee Data6 DAT_1028_43ee 1008:0fe3 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:10de Code2 LAB_1008_10de 1008:0fe6 FUN_1008_0f2e READ 1 true 1028:43ea Data6 DAT_1028_43ea 1008:0fe9 FUN_1008_0f2e READ 1 true 1028:43ec Data6 DAT_1028_43ec 1008:0ff7 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:1000 Code2 LAB_1008_1000 1008:0ff9 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:1029 Code2 LAB_1008_1029 1008:0ffe FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:1029 Code2 LAB_1008_1029 1008:1002 FUN_1008_0f2e DATA 0 true Stack[-0x8] - 1008:1005 FUN_1008_0f2e DATA 0 true Stack[-0x6] - 1008:1008 FUN_1008_0f2e READ 0 true 1028:43f0 Data6 DAT_1028_43f0 1008:100c FUN_1008_0f2e DATA 0 true Stack[-0x8] - 1008:1011 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:00a4 EXTERNAL WAVEOUTGETVOLUME WAVEOUTGETVOLUME 1008:1016 FUN_1008_0f2e DATA 1 true Stack[-0x7] - 1008:1024 FUN_1008_0f2e WRITE 0 true 1028:43f4 Data6 DAT_1028_43f4 1008:1027 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:102e Code2 LAB_1008_102e 1008:1029 FUN_1008_0f2e WRITE 0 true 1028:43f4 Data6 DAT_1028_43f4 1008:102e FUN_1008_0f2e DATA 0 true Stack[-0xa] - 1008:1033 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:1038 Code2 LAB_1008_1038 1008:1035 FUN_1008_0f2e DATA 0 true Stack[-0xa] - 1008:1038 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:103e FUN_1008_0f2e READ 1 true 1028:03ea Data6 DAT_1028_03ea 1008:103e FUN_1008_0f2e READ 1 false 1028:03ee Data6 DAT_1028_03ee 1008:1042 FUN_1008_0f2e READ 1 true 1028:03ec Data6 DAT_1028_03ec 1008:1042 FUN_1008_0f2e READ 1 false 1028:03f0 Data6 DAT_1028_03f0 1008:1046 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:104b Code2 LAB_1008_104b 1008:1048 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:10d0 Code2 LAB_1008_10d0 1008:104b FUN_1008_0f2e READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:104f FUN_1008_0f2e READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:1053 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:1061 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:0038 EXTERNAL FINDRESOURCE FINDRESOURCE 1008:1067 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:003c EXTERNAL LOADRESOURCE LOADRESOURCE 1008:106c FUN_1008_0f2e DATA 0 true Stack[-0x12] - 1008:1071 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:1077 FUN_1008_0f2e READ 0 true 1028:03f0 Data6 DAT_1028_03f0 1008:107b FUN_1008_0f2e READ 0 true 1028:03ee Data6 DAT_1028_03ee 1008:107f FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1008:15c7 Code2 FUN_1008_15c7 FUN_1008_15c7 1008:1084 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:108a FUN_1008_0f2e WRITE 0 true 1028:43fa Data6 DAT_1028_43fa 1008:108e FUN_1008_0f2e WRITE 0 true 1028:43fc Data6 DAT_1028_43fa+2 1008:1092 FUN_1008_0f2e DATA 0 true Stack[-0x12] - 1008:1095 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:0040 EXTERNAL LOCKRESOURCE LOCKRESOURCE 1008:109a FUN_1008_0f2e DATA 0 true Stack[-0x10] - 1008:109d FUN_1008_0f2e DATA 0 true Stack[-0xe] - 1008:10a0 FUN_1008_0f2e DATA 1 true Stack[-0x10] - 1008:10a5 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:10ab FUN_1008_0f2e READ 1 true 1028:43fa Data6 DAT_1028_43fa 1008:10b1 FUN_1008_0f2e DATA 1 true Stack[-0xa] - 1008:10b7 FUN_1008_0f2e READ 0 true 1028:03ee Data6 DAT_1028_03ee 1008:10bb FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1020:16a5 Code5 FUN_1020_16a5 FUN_1020_16a5 1008:10c0 FUN_1008_0f2e DATA 0 true Stack[-0x12] - 1008:10c3 FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:0010 EXTERNAL GLOBALUNLOCK GLOBALUNLOCK 1008:10c8 FUN_1008_0f2e DATA 0 true Stack[-0x12] - 1008:10cb FUN_1008_0f2e UNCONDITIONAL_CALL 0 true 1228:0044 EXTERNAL FREERESOURCE FREERESOURCE 1008:10d0 FUN_1008_0f2e DATA 0 true Stack[-0xa] - 1008:10d4 FUN_1008_0f2e CONDITIONAL_JUMP 0 true 1008:10d9 Code2 LAB_1008_10d9 1008:10d6 FUN_1008_0f2e UNCONDITIONAL_JUMP 0 true 1008:1035 Code2 LAB_1008_1035 1008:10d9 FUN_1008_0f2e WRITE 0 true 1028:43f2 Data6 DAT_1028_43f2 1008:10eb FUN_1008_10e3 READ 0 true 1028:43ee Data6 DAT_1028_43ee 1008:10f0 FUN_1008_10e3 CONDITIONAL_JUMP 0 true 1008:112c Code2 LAB_1008_112c 1008:10f2 FUN_1008_10e3 READ 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:10f7 FUN_1008_10e3 CONDITIONAL_JUMP 0 true 1008:1104 Code2 LAB_1008_1104 1008:10ff FUN_1008_10e3 UNCONDITIONAL_CALL 0 true 1228:0098 EXTERNAL SNDPLAYSOUND SNDPLAYSOUND 1008:1104 FUN_1008_10e3 DATA 0 true Stack[-0x6] - 1008:1109 FUN_1008_10e3 UNCONDITIONAL_JUMP 0 true 1008:110e Code2 LAB_1008_110e 1008:110b FUN_1008_10e3 DATA 0 true Stack[-0x6] - 1008:110e FUN_1008_10e3 DATA 1 true Stack[-0x6] - 1008:1114 FUN_1008_10e3 READ 0 true 1028:43f8 Data6 DAT_1028_43f8 1008:1114 FUN_1008_10e3 READ 0 false 1028:43fc Data6 DAT_1028_43fa+2 1008:1118 FUN_1008_10e3 READ 0 true 1028:43f6 Data6 DAT_1028_43f6 1008:1118 FUN_1008_10e3 READ 0 false 1028:43fa Data6 DAT_1028_43fa 1008:111c FUN_1008_10e3 UNCONDITIONAL_CALL 0 true 1008:15e7 Code2 FUN_1008_15e7 FUN_1008_15e7 1008:1121 FUN_1008_10e3 DATA 0 true Stack[-0x6] - 1008:1125 FUN_1008_10e3 CONDITIONAL_JUMP 0 true 1008:110b Code2 LAB_1008_110b 1008:1127 FUN_1008_10e3 WRITE 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:1139 FUN_1008_1131 READ 0 true 1028:43ee Data6 DAT_1028_43ee 1008:113e FUN_1008_1131 CONDITIONAL_JUMP 0 true 1008:1185 Code2 LAB_1008_1185 1008:1140 FUN_1008_1131 READ 0 true 1028:43f2 Data6 DAT_1028_43f2 1008:1145 FUN_1008_1131 CONDITIONAL_JUMP 0 true 1008:1185 Code2 LAB_1008_1185 1008:1147 FUN_1008_1131 DATA 1 true Stack[0x4] - 1008:1155 FUN_1008_1131 CONDITIONAL_JUMP 0 true 1008:1185 Code2 LAB_1008_1185 1008:1157 FUN_1008_1131 READ 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:115c FUN_1008_1131 CONDITIONAL_JUMP 0 true 1008:1169 Code2 LAB_1008_1169 1008:1164 FUN_1008_1131 UNCONDITIONAL_CALL 0 true 1228:0098 EXTERNAL SNDPLAYSOUND SNDPLAYSOUND 1008:1169 FUN_1008_1131 DATA 1 true Stack[0x4] - 1008:1177 FUN_1008_1131 UNCONDITIONAL_CALL 0 true 1228:0098 EXTERNAL SNDPLAYSOUND SNDPLAYSOUND 1008:1182 FUN_1008_1131 WRITE 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:1185 FUN_1008_1131 DATA 1 true Stack[-0x6] - 1008:1197 FUN_1008_118f READ 0 true 1028:43ee Data6 DAT_1028_43ee 1008:119c FUN_1008_118f CONDITIONAL_JUMP 0 true 1008:11b0 Code2 LAB_1008_11b0 1008:119e FUN_1008_118f READ 0 true 1028:43f3 Data6 DAT_1028_43f3 1008:11a3 FUN_1008_118f CONDITIONAL_JUMP 0 true 1008:11b0 Code2 LAB_1008_11b0 1008:11ab FUN_1008_118f UNCONDITIONAL_CALL 0 true 1228:0098 EXTERNAL SNDPLAYSOUND SNDPLAYSOUND 1008:11b0 FUN_1008_118f DATA 1 true Stack[-0x6] - 1008:11cd FUN_1008_11c5 DATA 0 true Stack[-0xc] - 1008:11d2 FUN_1008_11c5 DATA 0 true Stack[-0xa] - 1008:11d7 FUN_1008_11c5 DATA 1 true Stack[-0xc] - 1008:11da FUN_1008_11c5 DATA 1 true Stack[-0xa] - 1008:11e8 FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:11f3 FUN_1008_11c5 DATA 0 true Stack[-0x14] - 1008:11f6 FUN_1008_11c5 DATA 0 true Stack[-0x12] - 1008:11f9 FUN_1008_11c5 DATA 0 true Stack[-0x14] - 1008:11fc FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:1201 FUN_1008_11c5 DATA 0 true Stack[-0x8] - 1008:1204 FUN_1008_11c5 DATA 0 true Stack[-0x6] - 1008:1207 FUN_1008_11c5 DATA 1 true Stack[-0xc] - 1008:120a FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:1211 FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:1219 FUN_1008_11c5 DATA 1 true Stack[-0xc] - 1008:121c FUN_1008_11c5 DATA 1 true Stack[-0xa] - 1008:1225 FUN_1008_11c5 DATA 0 true Stack[-0x18] - 1008:1228 FUN_1008_11c5 DATA 0 true Stack[-0x16] - 1008:122f FUN_1008_11c5 DATA 1 true Stack[-0x16] - 1008:1232 FUN_1008_11c5 CONDITIONAL_JUMP 0 true 1008:1237 Code2 LAB_1008_1237 1008:1234 FUN_1008_11c5 UNCONDITIONAL_JUMP 0 true 1008:12f2 Code2 LAB_1008_12f2 1008:1237 FUN_1008_11c5 CONDITIONAL_JUMP 0 true 1008:1241 Code2 LAB_1008_1241 1008:1239 FUN_1008_11c5 DATA 1 true Stack[-0x18] - 1008:123c FUN_1008_11c5 CONDITIONAL_JUMP 0 true 1008:1241 Code2 LAB_1008_1241 1008:123e FUN_1008_11c5 UNCONDITIONAL_JUMP 0 true 1008:12f2 Code2 LAB_1008_12f2 1008:1241 FUN_1008_11c5 DATA 0 true Stack[-0x10] - 1008:1244 FUN_1008_11c5 DATA 0 true Stack[-0xe] - 1008:1247 FUN_1008_11c5 UNCONDITIONAL_JUMP 0 true 1008:1251 Code2 LAB_1008_1251 1008:1249 FUN_1008_11c5 DATA 0 true Stack[-0x10] - 1008:124d FUN_1008_11c5 DATA 0 true Stack[-0xe] - 1008:1251 FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:1254 FUN_1008_11c5 DATA 1 true Stack[-0xe] - 1008:125c FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:1267 FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:126d FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:1276 FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:1279 FUN_1008_11c5 DATA 1 true Stack[-0xe] - 1008:1281 FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:1292 FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:1298 FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:12a1 FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:12a4 FUN_1008_11c5 DATA 1 true Stack[-0xe] - 1008:12ac FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:12bd FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:12c3 FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:12cc FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:12d2 FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:12dc FUN_1008_11c5 DATA 1 true Stack[-0x10] - 1008:12df FUN_1008_11c5 DATA 1 true Stack[-0xe] - 1008:12e2 FUN_1008_11c5 DATA 1 true Stack[-0x16] - 1008:12e5 FUN_1008_11c5 CONDITIONAL_JUMP 0 true 1008:12ea Code2 LAB_1008_12ea 1008:12e7 FUN_1008_11c5 UNCONDITIONAL_JUMP 0 true 1008:1249 Code2 LAB_1008_1249 1008:12ea FUN_1008_11c5 DATA 1 true Stack[-0x18] - 1008:12ed FUN_1008_11c5 CONDITIONAL_JUMP 0 true 1008:12f2 Code2 LAB_1008_12f2 1008:12ef FUN_1008_11c5 UNCONDITIONAL_JUMP 0 true 1008:1249 Code2 LAB_1008_1249 1008:12f2 FUN_1008_11c5 DATA 1 true Stack[-0x8] - 1008:12f7 FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1228:0180 EXTERNAL CREATEPALETTE CREATEPALETTE 1008:12fc FUN_1008_11c5 WRITE 0 true 1028:444e Data6 DAT_1028_444e 1008:12ff FUN_1008_11c5 DATA 0 true Stack[-0x6] - 1008:1302 FUN_1008_11c5 DATA 0 true Stack[-0x8] - 1008:1305 FUN_1008_11c5 DATA 1 true Stack[-0x14] - 1008:1308 FUN_1008_11c5 DATA 1 true Stack[-0x12] - 1008:130e FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:039d Code5 FUN_1020_039d FUN_1020_039d 1008:1314 FUN_1008_11c5 UNCONDITIONAL_CALL 0 true 1020:0147 Code5 FUN_1020_0147 FUN_1020_0147 1008:132e FUN_1008_1326 DATA 0 true Stack[0xc] - 1008:1331 FUN_1008_1326 DATA 0 true Stack[0xa] - 1008:1334 FUN_1008_1326 DATA 0 true Stack[0x8] - 1008:133c FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1228:0038 EXTERNAL FINDRESOURCE FINDRESOURCE 1008:1341 FUN_1008_1326 DATA 0 true Stack[-0xa] - 1008:1344 FUN_1008_1326 DATA 0 true Stack[0xc] - 1008:1347 FUN_1008_1326 DATA 0 true Stack[-0xa] - 1008:134a FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1228:003c EXTERNAL LOADRESOURCE LOADRESOURCE 1008:134f FUN_1008_1326 DATA 0 true Stack[-0xc] - 1008:1352 FUN_1008_1326 DATA 0 true Stack[-0xc] - 1008:1355 FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1228:0040 EXTERNAL LOCKRESOURCE LOCKRESOURCE 1008:135a FUN_1008_1326 DATA 0 true Stack[-0x8] - 1008:135d FUN_1008_1326 DATA 0 true Stack[-0x6] - 1008:1362 FUN_1008_1326 DATA 0 true Stack[-0xe] - 1008:1365 FUN_1008_1326 UNCONDITIONAL_JUMP 0 true 1008:136a Code2 LAB_1008_136a 1008:1367 FUN_1008_1326 DATA 0 true Stack[-0xe] - 1008:136a FUN_1008_1326 DATA 1 true Stack[-0xe] - 1008:1371 FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1020:039d Code5 FUN_1020_039d FUN_1020_039d 1008:1376 FUN_1008_1326 DATA 1 true Stack[-0x8] - 1008:137e FUN_1008_1326 DATA 1 true Stack[-0xe] - 1008:1385 FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1020:039d Code5 FUN_1020_039d FUN_1020_039d 1008:138a FUN_1008_1326 DATA 1 true Stack[0x4] - 1008:1392 FUN_1008_1326 DATA 0 true Stack[-0xe] - 1008:1397 FUN_1008_1326 CONDITIONAL_JUMP 0 true 1008:1367 Code2 LAB_1008_1367 1008:1399 FUN_1008_1326 DATA 0 true Stack[-0xc] - 1008:139c FUN_1008_1326 UNCONDITIONAL_CALL 0 true 1228:0010 EXTERNAL GLOBALUNLOCK GLOBALUNLOCK 1008:13b3 FUN_1008_13a8 DATA 1 true Stack[0x4] - 1008:13be FUN_1008_13a8 DATA 0 true Stack[-0xc] - 1008:13c1 FUN_1008_13a8 DATA 0 true Stack[-0xa] - 1008:13c4 FUN_1008_13a8 DATA 1 true Stack[-0xc] - 1008:13c7 FUN_1008_13a8 DATA 1 true Stack[-0xa] - 1008:13d5 FUN_1008_13a8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:13e0 FUN_1008_13a8 DATA 0 true Stack[-0x14] - 1008:13e3 FUN_1008_13a8 DATA 0 true Stack[-0x12] - 1008:13e8 FUN_1008_13a8 DATA 0 true Stack[-0x10] - 1008:13eb FUN_1008_13a8 DATA 0 true Stack[-0xe] - 1008:13ee FUN_1008_13a8 UNCONDITIONAL_JUMP 0 true 1008:13f8 Code2 LAB_1008_13f8 1008:13f0 FUN_1008_13a8 DATA 0 true Stack[-0x10] - 1008:13f4 FUN_1008_13a8 DATA 0 true Stack[-0xe] - 1008:13f8 FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:13fb FUN_1008_13a8 DATA 1 true Stack[-0xe] - 1008:1403 FUN_1008_13a8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:140e FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:1414 FUN_1008_13a8 DATA 1 true Stack[0x4] - 1008:141d FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:1420 FUN_1008_13a8 DATA 1 true Stack[-0xe] - 1008:1428 FUN_1008_13a8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:1439 FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:143f FUN_1008_13a8 DATA 1 true Stack[0x4] - 1008:1448 FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:144b FUN_1008_13a8 DATA 1 true Stack[-0xe] - 1008:1453 FUN_1008_13a8 UNCONDITIONAL_CALL 0 true 1020:08a9 Code5 FUN_1020_08a9 FUN_1020_08a9 1008:1464 FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:146a FUN_1008_13a8 DATA 1 true Stack[0x4] - 1008:1473 FUN_1008_13a8 DATA 1 true Stack[-0x10] - 1008:1479 FUN_1008_13a8 DATA 1 true Stack[0x4] - 1008:1483 FUN_1008_13a8 DATA 0 true Stack[-0xe] - 1008:1487 FUN_1008_13a8 CONDITIONAL_JUMP 0 true 1008:148c Code2 LAB_1008_148c 1008:1489 FUN_1008_13a8 UNCONDITIONAL_JUMP 0 true 1008:13f0 Code2 LAB_1008_13f0 1008:148c FUN_1008_13a8 DATA 0 true Stack[-0x10] - 1008:1491 FUN_1008_13a8 CONDITIONAL_JUMP 0 true 1008:1496 Code2 LAB_1008_1496 1008:1493 FUN_1008_13a8 UNCONDITIONAL_JUMP 0 true 1008:13f0 Code2 LAB_1008_13f0 1008:14a5 FUN_1008_149d DATA 0 true Stack[0x8] - 1008:14a8 FUN_1008_149d DATA 0 true Stack[0x6] - 1008:14ab FUN_1008_149d DATA 0 true Stack[0x4] - 1008:14b3 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0038 EXTERNAL FINDRESOURCE FINDRESOURCE 1008:14b8 FUN_1008_149d DATA 0 true Stack[-0xa] - 1008:14bb FUN_1008_149d DATA 0 true Stack[0x8] - 1008:14be FUN_1008_149d DATA 0 true Stack[-0xa] - 1008:14c1 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:003c EXTERNAL LOADRESOURCE LOADRESOURCE 1008:14c6 FUN_1008_149d DATA 0 true Stack[-0x8] - 1008:14c9 FUN_1008_149d DATA 0 true Stack[-0x8] - 1008:14cc FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0040 EXTERNAL LOCKRESOURCE LOCKRESOURCE 1008:14d1 FUN_1008_149d DATA 0 true Stack[-0x70] - 1008:14d4 FUN_1008_149d DATA 0 true Stack[-0x6e] - 1008:14d7 FUN_1008_149d DATA 1 true Stack[-0x70] - 1008:14dc FUN_1008_149d DATA 0 true Stack[-0x32] - 1008:14e3 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1020:0891 Code5 FUN_1020_0891 FUN_1020_0891 1008:14e8 FUN_1008_149d DATA 1 true Stack[-0x70] - 1008:14f1 FUN_1008_149d DATA 0 true Stack[-0x3a] - 1008:14f4 FUN_1008_149d DATA 0 true Stack[-0x38] - 1008:14f7 FUN_1008_149d DATA 1 true Stack[-0x24] - 1008:14fa FUN_1008_149d DATA 0 true Stack[-0x42] - 1008:1500 FUN_1008_149d DATA 1 true Stack[-0x42] - 1008:150b FUN_1008_149d DATA 0 true Stack[-0x40] - 1008:150e FUN_1008_149d DATA 0 true Stack[-0x40] - 1008:1511 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:1516 FUN_1008_149d DATA 0 true Stack[-0x36] - 1008:1519 FUN_1008_149d DATA 0 true Stack[-0x34] - 1008:151c FUN_1008_149d DATA 0 true Stack[-0x32] - 1008:1521 FUN_1008_149d DATA 1 true Stack[-0x36] - 1008:1528 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1020:0891 Code5 FUN_1020_0891 FUN_1020_0891 1008:152d FUN_1008_149d DATA 1 true Stack[-0x36] - 1008:1532 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1008:13a8 Code2 FUN_1008_13a8 FUN_1008_13a8 1008:1548 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0160 EXTERNAL CREATEDC CREATEDC 1008:154d FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:1550 FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:1553 FUN_1008_149d READ 0 true 1028:444e Data6 DAT_1028_444e 1008:1559 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1008:155e FUN_1008_149d DATA 0 true Stack[-0x3e] - 1008:1561 FUN_1008_149d READ 0 true 1028:444e Data6 DAT_1028_444e 1008:1565 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0178 EXTERNAL UNREALIZEOBJECT UNREALIZEOBJECT 1008:156a FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:156d FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:02a0 EXTERNAL REALIZEPALETTE REALIZEPALETTE 1008:1572 FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:1575 FUN_1008_149d DATA 0 true Stack[-0x32] - 1008:157e FUN_1008_149d DATA 0 true Stack[-0x38] - 1008:1581 FUN_1008_149d DATA 0 true Stack[-0x3a] - 1008:1584 FUN_1008_149d DATA 1 true Stack[-0x36] - 1008:158b FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0188 EXTERNAL CREATEDIBITMAP CREATEDIBITMAP 1008:1590 FUN_1008_149d DATA 0 true Stack[-0x6] - 1008:1593 FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:1596 FUN_1008_149d DATA 0 true Stack[-0x3e] - 1008:159b FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:029c EXTERNAL SELECTPALETTE SELECTPALETTE 1008:15a0 FUN_1008_149d DATA 0 true Stack[-0x3c] - 1008:15a3 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0164 EXTERNAL DELETEDC DELETEDC 1008:15a8 FUN_1008_149d DATA 0 true Stack[-0x8] - 1008:15ab FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0010 EXTERNAL GLOBALUNLOCK GLOBALUNLOCK 1008:15b0 FUN_1008_149d DATA 0 true Stack[-0x8] - 1008:15b3 FUN_1008_149d UNCONDITIONAL_CALL 0 true 1228:0044 EXTERNAL FREERESOURCE FREERESOURCE 1008:15b8 FUN_1008_149d DATA 1 true Stack[-0x6] - 1008:15cc FUN_1008_15c7 DATA 0 true Stack[0x8] - 1008:15cf FUN_1008_15c7 DATA 0 true Stack[0x6] - 1008:15d2 FUN_1008_15c7 DATA 0 true Stack[0x4] - 1008:15d5 FUN_1008_15c7 UNCONDITIONAL_CALL 0 true 1228:0004 EXTERNAL GLOBALALLOC GLOBALALLOC 1008:15db FUN_1008_15c7 UNCONDITIONAL_CALL 0 true 1228:000c EXTERNAL GLOBALLOCK GLOBALLOCK 1008:15ec FUN_1008_15e7 DATA 0 true Stack[0x6] - 1008:15ef FUN_1008_15e7 UNCONDITIONAL_CALL 0 true 1228:0014 EXTERNAL GLOBALHANDLE GLOBALHANDLE 1008:15f6 FUN_1008_15e7 UNCONDITIONAL_CALL 0 true 1228:0010 EXTERNAL GLOBALUNLOCK GLOBALUNLOCK 1008:15fb FUN_1008_15e7 UNCONDITIONAL_CALL 0 true 1228:0008 EXTERNAL GLOBALFREE GLOBALFREE 1008:1611 FUN_1008_1607 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1008:1616 FUN_1008_1607 CONDITIONAL_JUMP 0 true 1008:1682 Code2 LAB_1008_1682 1008:1618 FUN_1008_1607 READ 0 true 1028:066a Data6 DAT_1028_066a 1008:161d FUN_1008_1607 CONDITIONAL_JUMP 0 true 1008:162b Code2 LAB_1008_162b 1008:161f FUN_1008_1607 DATA 0 true Stack[-0x8] - 1008:1624 FUN_1008_1607 DATA 0 true Stack[-0x6] - 1008:1629 FUN_1008_1607 UNCONDITIONAL_JUMP 0 true 1008:1635 Code2 LAB_1008_1635 1008:162b FUN_1008_1607 DATA 0 true Stack[-0x8] - 1008:1630 FUN_1008_1607 DATA 0 true Stack[-0x6] - 1008:1635 FUN_1008_1607 DATA 0 true Stack[0x1a] - 1008:1638 FUN_1008_1607 DATA 0 true Stack[0x18] - 1008:163b FUN_1008_1607 DATA 0 true Stack[-0x6] - 1008:163e FUN_1008_1607 DATA 0 true Stack[-0x8] - 1008:1644 FUN_1008_1607 DATA 1 true Stack[0x4] - 1008:1649 FUN_1008_1607 UNCONDITIONAL_CALL 0 true 1008:2996 Code2 FUN_1008_2996 FUN_1008_2996 1008:164e FUN_1008_1607 DATA 1 true Stack[0x14] - 1008:1651 FUN_1008_1607 DATA 1 true Stack[0x16] - 1008:1654 FUN_1008_1607 DATA 1 true Stack[0x4] - 1008:165f FUN_1008_1607 DATA 1 true Stack[0x10] - 1008:1662 FUN_1008_1607 DATA 1 true Stack[0x12] - 1008:166d FUN_1008_1607 DATA 1 true Stack[0xc] - 1008:1670 FUN_1008_1607 DATA 1 true Stack[0xe] - 1008:167b FUN_1008_1607 DATA 1 true Stack[0xa] - 1008:1682 FUN_1008_1607 DATA 1 true Stack[0x4] - 1008:1696 FUN_1008_168e DATA 1 true Stack[0x4] - 1008:16ab FUN_1008_168e UNCONDITIONAL_CALL 0 true 1228:021c EXTERNAL GETDLGITEMTEXT GETDLGITEMTEXT 1008:16b0 FUN_1008_168e DATA 0 true Stack[-0x5] - 1008:16b4 FUN_1008_168e DATA 1 true Stack[-0x5] - 1008:16c3 FUN_1008_16be DATA 1 true Stack[0x4] - 1008:16c8 FUN_1008_16be UNCONDITIONAL_CALL 0 true 1018:0d9b Code4 FUN_1018_0d9b FUN_1018_0d9b 1008:16cd FUN_1008_16be DATA 1 true Stack[0x4] - 1008:16dc FUN_1008_16be UNCONDITIONAL_CALL 0 true 1228:01cc EXTERNAL SETWINDOWTEXT SETWINDOWTEXT 1008:16e1 FUN_1008_16be DATA 1 true Stack[0x4] - 1008:16f2 FUN_1008_16be UNCONDITIONAL_CALL 0 true 1228:0218 EXTERNAL SETDLGITEMTEXT SETDLGITEMTEXT 1008:16f7 FUN_1008_16be DATA 1 true Stack[0x4] - 1008:1708 FUN_1008_16be UNCONDITIONAL_CALL 0 true 1228:0218 EXTERNAL SETDLGITEMTEXT SETDLGITEMTEXT 1008:170d FUN_1008_16be DATA 1 true Stack[0x4] - 1008:1723 FUN_1008_16be UNCONDITIONAL_CALL 0 true 1228:0220 EXTERNAL SENDDLGITEMMESSAGE SENDDLGITEMMESSAGE 1008:1735 FUN_1008_172f DATA 1 true Stack[0x4] - 1008:1738 FUN_1008_172f DATA 1 true Stack[0x2] - 1008:173b FUN_1008_172f CONDITIONAL_JUMP 0 true 1008:1745 Code2 LAB_1008_1745 1008:173d FUN_1008_172f DATA 1 true Stack[0x4] - 1008:1740 FUN_1008_172f DATA 0 true Stack[-0x4] - 1008:1743 FUN_1008_172f UNCONDITIONAL_JUMP 0 true 1008:174b Code2 LAB_1008_174b 1008:1745 FUN_1008_172f DATA 1 true Stack[0x2] - 1008:1748 FUN_1008_172f DATA 0 true Stack[-0x4] - 1008:174b FUN_1008_172f DATA 1 true Stack[-0x4] - 1008:175a FUN_1008_1754 DATA 1 true Stack[0x4] - 1008:175d FUN_1008_1754 DATA 1 true Stack[0x2] - 1008:1760 FUN_1008_1754 CONDITIONAL_JUMP 0 true 1008:176a Code2 LAB_1008_176a 1008:1762 FUN_1008_1754 DATA 1 true Stack[0x4] - 1008:1765 FUN_1008_1754 DATA 0 true Stack[-0x4] - 1008:1768 FUN_1008_1754 UNCONDITIONAL_JUMP 0 true 1008:1770 Code2 LAB_1008_1770 1008:176a FUN_1008_1754 DATA 1 true Stack[0x2] - 1008:176d FUN_1008_1754 DATA 0 true Stack[-0x4] - 1008:1770 FUN_1008_1754 DATA 1 true Stack[-0x4] - 1008:177c FUN_1008_1779 READ 0 true 1028:058f Data6 DAT_1028_058f 1008:1781 FUN_1008_1779 CONDITIONAL_JUMP 0 true 1008:1796 Code2 LAB_1008_1796 1008:1783 FUN_1008_1779 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:178c FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:01d0 EXTERNAL BEGINPAINT BEGINPAINT 1008:1791 FUN_1008_1779 WRITE 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:1794 FUN_1008_1779 UNCONDITIONAL_JUMP 0 true 1008:17a2 Code2 LAB_1008_17a2 1008:1796 FUN_1008_1779 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:179a FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:0200 EXTERNAL GETDC GETDC 1008:179f FUN_1008_1779 WRITE 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:17a2 FUN_1008_1779 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:17aa FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:016c EXTERNAL GETSTOCKOBJECT GETSTOCKOBJECT 1008:17b0 FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:17b5 FUN_1008_1779 WRITE 0 true 1028:4af6 Data6 DAT_1028_4af6 1008:17b8 FUN_1008_1779 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:17c0 FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:028c EXTERNAL GETSYSCOLOR GETSYSCOLOR 1008:17c7 FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:0148 EXTERNAL SETTEXTCOLOR SETTEXTCOLOR 1008:17cc FUN_1008_1779 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:17d4 FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:028c EXTERNAL GETSYSCOLOR GETSYSCOLOR 1008:17db FUN_1008_1779 UNCONDITIONAL_CALL 0 true 1228:0140 EXTERNAL SETBKCOLOR SETBKCOLOR 1008:17e5 FUN_1008_17e2 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:17e9 FUN_1008_17e2 READ 0 true 1028:4af6 Data6 DAT_1028_4af6 1008:17ed FUN_1008_17e2 UNCONDITIONAL_CALL 0 true 1228:0154 EXTERNAL SELECTOBJECT SELECTOBJECT 1008:17f2 FUN_1008_17e2 READ 0 true 1028:058f Data6 DAT_1028_058f 1008:17f7 FUN_1008_17e2 CONDITIONAL_JUMP 0 true 1008:1809 Code2 LAB_1008_1809 1008:17f9 FUN_1008_17e2 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1802 FUN_1008_17e2 UNCONDITIONAL_CALL 0 true 1228:01d4 EXTERNAL ENDPAINT ENDPAINT 1008:1807 FUN_1008_17e2 UNCONDITIONAL_JUMP 0 true 1008:1816 Code2 LAB_1008_1816 1008:1809 FUN_1008_17e2 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:180d FUN_1008_17e2 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:1811 FUN_1008_17e2 UNCONDITIONAL_CALL 0 true 1228:0204 EXTERNAL RELEASEDC RELEASEDC 1008:181b FUN_1008_1818 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1822 FUN_1008_1818 READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:182a FUN_1008_1818 UNCONDITIONAL_CALL 0 true 1228:0268 EXTERNAL CREATECARET CREATECARET 1008:182f FUN_1008_1818 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1832 FUN_1008_1818 READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1836 FUN_1008_1818 READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:183b FUN_1008_1818 READ 1 true 1028:0546 Data6 DAT_1028_0546 1008:183e FUN_1008_1818 READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1842 FUN_1008_1818 READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1846 FUN_1008_1818 READ 1 true 1028:4ad2 Data6 DAT_1028_4ad2 1008:184b FUN_1008_1818 UNCONDITIONAL_CALL 0 true 1228:0270 EXTERNAL SETCARETPOS SETCARETPOS 1008:1850 FUN_1008_1818 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1854 FUN_1008_1818 UNCONDITIONAL_CALL 0 true 1228:0274 EXTERNAL SHOWCARET SHOWCARET 1008:185e FUN_1008_185b UNCONDITIONAL_CALL 0 true 1228:026c EXTERNAL DESTROYCARET DESTROYCARET 1008:1868 FUN_1008_1865 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1876 FUN_1008_1865 READ 0 true 1028:4aca Data6 DAT_1028_4aca 1008:187a FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1881 FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1228:01fc EXTERNAL SETSCROLLRANGE SETSCROLLRANGE 1008:1886 FUN_1008_1865 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:188d FUN_1008_1865 READ 0 true 1028:0548 Data6 DAT_1028_0548 1008:1895 FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1228:01f8 EXTERNAL SETSCROLLPOS SETSCROLLPOS 1008:189a FUN_1008_1865 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:18a9 FUN_1008_1865 READ 0 true 1028:4acc Data6 DAT_1028_4acc 1008:18ad FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:18b4 FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1228:01fc EXTERNAL SETSCROLLRANGE SETSCROLLRANGE 1008:18b9 FUN_1008_1865 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:18c1 FUN_1008_1865 READ 0 true 1028:054a Data6 DAT_1028_054a 1008:18c9 FUN_1008_1865 UNCONDITIONAL_CALL 0 true 1228:01f8 EXTERNAL SETSCROLLPOS SETSCROLLPOS 1008:18d3 FUN_1008_18d0 READ 0 true 1028:058d Data6 DAT_1028_058d 1008:18d8 FUN_1008_18d0 CONDITIONAL_JUMP 0 true 1008:18e4 Code2 LAB_1008_18e4 1008:18da FUN_1008_18d0 READ 0 true 1028:058e Data6 DAT_1028_058e 1008:18df FUN_1008_18d0 CONDITIONAL_JUMP 0 true 1008:18e4 Code2 LAB_1008_18e4 1008:18e1 FUN_1008_18d0 UNCONDITIONAL_CALL 0 true 1008:185b Code2 FUN_1008_185b FUN_1008_185b 1008:18e7 FUN_1008_18d0 UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1008:18f3 FUN_1008_18ee READ 0 true 1028:058c Data6 DAT_1028_058c 1008:18f8 FUN_1008_18ee CONDITIONAL_JUMP 0 true 1008:18fd Code2 LAB_1008_18fd 1008:18fa FUN_1008_18ee UNCONDITIONAL_JUMP 0 true 1008:19b0 Code2 LAB_1008_19b0 1008:1900 FUN_1008_18ee DATA 0 true Stack[0x6] - 1008:1903 FUN_1008_18ee READ 0 true 1028:4aca Data6 DAT_1028_4aca 1008:1907 FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:190b FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:190e FUN_1008_18ee DATA 0 true Stack[0x6] - 1008:1914 FUN_1008_18ee DATA 0 true Stack[0x4] - 1008:1917 FUN_1008_18ee READ 0 true 1028:4acc Data6 DAT_1028_4acc 1008:191b FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:191f FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1922 FUN_1008_18ee DATA 0 true Stack[0x4] - 1008:1925 FUN_1008_18ee DATA 1 true Stack[0x6] - 1008:1928 FUN_1008_18ee READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:192c FUN_1008_18ee CONDITIONAL_JUMP 0 true 1008:1937 Code2 LAB_1008_1937 1008:192e FUN_1008_18ee DATA 1 true Stack[0x4] - 1008:1931 FUN_1008_18ee READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1935 FUN_1008_18ee CONDITIONAL_JUMP 0 true 1008:19b0 Code2 LAB_1008_19b0 1008:1937 FUN_1008_18ee DATA 1 true Stack[0x6] - 1008:193a FUN_1008_18ee READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:193e FUN_1008_18ee CONDITIONAL_JUMP 0 true 1008:1953 Code2 LAB_1008_1953 1008:1940 FUN_1008_18ee READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1947 FUN_1008_18ee DATA 0 true Stack[0x6] - 1008:194e FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1228:01f8 EXTERNAL SETSCROLLPOS SETSCROLLPOS 1008:1953 FUN_1008_18ee DATA 1 true Stack[0x4] - 1008:1956 FUN_1008_18ee READ 1 true 1028:054a Data6 DAT_1028_054a 1008:195a FUN_1008_18ee CONDITIONAL_JUMP 0 true 1008:1970 Code2 LAB_1008_1970 1008:195c FUN_1008_18ee READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1964 FUN_1008_18ee DATA 0 true Stack[0x4] - 1008:196b FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1228:01f8 EXTERNAL SETSCROLLPOS SETSCROLLPOS 1008:1970 FUN_1008_18ee READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1974 FUN_1008_18ee READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1977 FUN_1008_18ee DATA 1 true Stack[0x6] - 1008:197a FUN_1008_18ee READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:197f FUN_1008_18ee READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1982 FUN_1008_18ee DATA 1 true Stack[0x4] - 1008:1985 FUN_1008_18ee READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1996 FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1228:01f4 EXTERNAL SCROLLWINDOW SCROLLWINDOW 1008:199b FUN_1008_18ee DATA 1 true Stack[0x6] - 1008:199e FUN_1008_18ee WRITE 0 true 1028:0548 Data6 DAT_1028_0548 1008:19a1 FUN_1008_18ee DATA 1 true Stack[0x4] - 1008:19a4 FUN_1008_18ee WRITE 0 true 1028:054a Data6 DAT_1028_054a 1008:19a7 FUN_1008_18ee READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:19ab FUN_1008_18ee UNCONDITIONAL_CALL 0 true 1228:024c EXTERNAL UPDATEWINDOW UPDATEWINDOW 1008:19bc FUN_1008_19b7 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:19bf FUN_1008_19b7 READ 1 true 1028:4ac6 Data6 DAT_1028_4ac6 1008:19c5 FUN_1008_19b7 READ 0 true 1028:0548 Data6 DAT_1028_0548 1008:19c9 FUN_1008_19b7 READ 0 true 1028:0544 Data6 DAT_1028_0544 1008:19cd FUN_1008_19b7 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:19d1 FUN_1008_19b7 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:19d5 FUN_1008_19b7 READ 1 true 1028:0546 Data6 DAT_1028_0546 1008:19d8 FUN_1008_19b7 READ 1 true 1028:4ac8 Data6 DAT_1028_4ac8 1008:19de FUN_1008_19b7 READ 0 true 1028:054a Data6 DAT_1028_054a 1008:19e2 FUN_1008_19b7 READ 0 true 1028:0546 Data6 DAT_1028_0546 1008:19e6 FUN_1008_19b7 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:19ea FUN_1008_19b7 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:19ee FUN_1008_19b7 UNCONDITIONAL_CALL 0 true 1008:18ee Code2 FUN_1008_18ee FUN_1008_18ee 1008:19fe FUN_1008_19f8 READ 1 true 1028:0588 Data6 DAT_1028_0588 1008:1a01 FUN_1008_19f8 DATA 0 true Stack[0x2] - 1008:1a04 FUN_1008_19f8 DATA 1 true Stack[0x2] - 1008:1a07 FUN_1008_19f8 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:1a0b FUN_1008_19f8 CONDITIONAL_JUMP 0 true 1008:1a13 Code2 LAB_1008_1a13 1008:1a0d FUN_1008_19f8 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:1a10 FUN_1008_19f8 DATA 0 true Stack[0x2] - 1008:1a13 FUN_1008_19f8 DATA 1 true Stack[0x2] - 1008:1a16 FUN_1008_19f8 READ 0 true 1028:0540 Data6 DAT_1028_0540 1008:1a1a FUN_1008_19f8 DATA 1 true Stack[0x4] - 1008:1a1d FUN_1008_19f8 READ 1 true 1028:4ac2 Data6 DAT_1028_4ac2 1008:1a27 FUN_1008_19f8 DATA 0 true Stack[-0x6] - 1008:1a2a FUN_1008_19f8 DATA 0 true Stack[-0x4] - 1008:1a2d FUN_1008_19f8 DATA 1 true Stack[-0x6] - 1008:1a30 FUN_1008_19f8 DATA 1 true Stack[-0x4] - 1008:1a3c FUN_1008_1a39 DATA 1 true Stack[0x4] - 1008:1a3f FUN_1008_1a39 DATA 1 true Stack[0x2] - 1008:1a42 FUN_1008_1a39 CONDITIONAL_JUMP 0 true 1008:1a7e Code2 LAB_1008_1a7e 1008:1a44 FUN_1008_1a39 UNCONDITIONAL_CALL 0 true 1008:1779 Code2 FUN_1008_1779 FUN_1008_1779 1008:1a47 FUN_1008_1a39 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:1a4b FUN_1008_1a39 DATA 1 true Stack[0x4] - 1008:1a4e FUN_1008_1a39 READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1a52 FUN_1008_1a39 READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:1a57 FUN_1008_1a39 READ 1 true 1028:0546 Data6 DAT_1028_0546 1008:1a5a FUN_1008_1a39 READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1a5e FUN_1008_1a39 READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1a63 FUN_1008_1a39 DATA 0 true Stack[0x4] - 1008:1a66 FUN_1008_1a39 READ 0 true 1028:0546 Data6 DAT_1028_0546 1008:1a6a FUN_1008_1a39 UNCONDITIONAL_CALL 0 true 1008:19f8 Code2 FUN_1008_19f8 FUN_1008_19f8 1008:1a6f FUN_1008_1a39 DATA 1 true Stack[0x2] - 1008:1a72 FUN_1008_1a39 DATA 1 true Stack[0x4] - 1008:1a76 FUN_1008_1a39 UNCONDITIONAL_CALL 0 true 1228:014c EXTERNAL TEXTOUT TEXTOUT 1008:1a7b FUN_1008_1a39 UNCONDITIONAL_CALL 0 true 1008:17e2 Code2 FUN_1008_17e2 FUN_1008_17e2 1008:1a85 FUN_1008_1a82 DATA 1 true Stack[0x2] - 1008:1a88 FUN_1008_1a82 DATA 0 true Stack[-0x4] - 1008:1a8c FUN_1008_1a82 DATA 0 true Stack[-0x6] - 1008:1a90 FUN_1008_1a82 UNCONDITIONAL_CALL 0 true 1008:1a39 Code2 FUN_1008_1a39 FUN_1008_1a39 1008:1a93 FUN_1008_1a82 DATA 1 true Stack[0x2] - 1008:1aa4 FUN_1008_1a82 WRITE 0 true 1028:0544 Data6 DAT_1028_0544 1008:1aa7 FUN_1008_1a82 READ_WRITE 0 true 1028:0546 Data6 DAT_1028_0546 1008:1aab FUN_1008_1a82 READ 1 true 1028:0546 Data6 DAT_1028_0546 1008:1aae FUN_1008_1a82 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:1ab2 FUN_1008_1a82 CONDITIONAL_JUMP 0 true 1008:1b0d Code2 LAB_1008_1b0d 1008:1ab4 FUN_1008_1a82 READ_WRITE 0 true 1028:0546 Data6 DAT_1028_0546 1008:1ab8 FUN_1008_1a82 READ_WRITE 0 true 1028:0588 Data6 DAT_1028_0588 1008:1abc FUN_1008_1a82 READ 1 true 1028:0588 Data6 DAT_1028_0588 1008:1abf FUN_1008_1a82 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:1ac3 FUN_1008_1a82 CONDITIONAL_JUMP 0 true 1008:1aca Code2 LAB_1008_1aca 1008:1ac7 FUN_1008_1a82 WRITE 0 true 1028:0588 Data6 DAT_1028_0588 1008:1acd FUN_1008_1a82 READ 0 true 1028:0546 Data6 DAT_1028_0546 1008:1ad1 FUN_1008_1a82 UNCONDITIONAL_CALL 0 true 1008:19f8 Code2 FUN_1008_19f8 FUN_1008_19f8 1008:1ada FUN_1008_1a82 READ 0 true 1028:0540 Data6 DAT_1028_0540 1008:1ae1 FUN_1008_1a82 UNCONDITIONAL_CALL 0 true 1020:16c9 Code5 FUN_1020_16c9 FUN_1020_16c9 1008:1ae6 FUN_1008_1a82 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1aed FUN_1008_1a82 READ 1 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1aff FUN_1008_1a82 UNCONDITIONAL_CALL 0 true 1228:01f4 EXTERNAL SCROLLWINDOW SCROLLWINDOW 1008:1b04 FUN_1008_1a82 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1b08 FUN_1008_1a82 UNCONDITIONAL_CALL 0 true 1228:024c EXTERNAL UPDATEWINDOW UPDATEWINDOW 1008:1b19 FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:2442 Code2 FUN_1008_2442 FUN_1008_2442 1008:1b1e FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1b21 FUN_1008_1b11 DATA 0 true Stack[-0x6] - 1008:1b24 FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1b27 FUN_1008_1b11 DATA 0 true Stack[-0x8] - 1008:1b2a FUN_1008_1b11 DATA 0 true Stack[0x4] - 1008:1b2e FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b33 Code2 LAB_1008_1b33 1008:1b30 FUN_1008_1b11 UNCONDITIONAL_JUMP 0 true 1008:1bcd Code2 LAB_1008_1bcd 1008:1b33 FUN_1008_1b11 DATA 1 true Stack[0x6] - 1008:1b3b FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b7c Code2 LAB_1008_1b7c 1008:1b3f FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b7c Code2 LAB_1008_1b7c 1008:1b41 FUN_1008_1b11 DATA 1 true Stack[0x6] - 1008:1b48 FUN_1008_1b11 READ 0 true 1028:0544 Data6 DAT_1028_0544 1008:1b4c FUN_1008_1b11 READ 0 true 1028:0546 Data6 DAT_1028_0546 1008:1b50 FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:19f8 Code2 FUN_1008_19f8 FUN_1008_19f8 1008:1b5b FUN_1008_1b11 READ_WRITE 0 true 1028:0544 Data6 DAT_1028_0544 1008:1b5f FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1b62 FUN_1008_1b11 DATA 1 true Stack[-0x8] - 1008:1b65 FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b6d Code2 LAB_1008_1b6d 1008:1b67 FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1b6a FUN_1008_1b11 DATA 0 true Stack[-0x8] - 1008:1b6d FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1b70 FUN_1008_1b11 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:1b74 FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b7a Code2 LAB_1008_1b7a 1008:1b77 FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:1a82 Code2 FUN_1008_1a82 FUN_1008_1a82 1008:1b7a FUN_1008_1b11 UNCONDITIONAL_JUMP 0 true 1008:1bc4 Code2 LAB_1008_1bc4 1008:1b7e FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1b86 Code2 LAB_1008_1b86 1008:1b81 FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:1a82 Code2 FUN_1008_1a82 FUN_1008_1a82 1008:1b84 FUN_1008_1b11 UNCONDITIONAL_JUMP 0 true 1008:1bc4 Code2 LAB_1008_1bc4 1008:1b88 FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1bb8 Code2 LAB_1008_1bb8 1008:1b8a FUN_1008_1b11 READ 0 true 1028:0544 Data6 DAT_1028_0544 1008:1b8f FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1bb6 Code2 LAB_1008_1bb6 1008:1b91 FUN_1008_1b11 READ_WRITE 0 true 1028:0544 Data6 DAT_1028_0544 1008:1b95 FUN_1008_1b11 READ 0 true 1028:0544 Data6 DAT_1028_0544 1008:1b99 FUN_1008_1b11 READ 0 true 1028:0546 Data6 DAT_1028_0546 1008:1b9d FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:19f8 Code2 FUN_1008_19f8 FUN_1008_19f8 1008:1ba8 FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1bab FUN_1008_1b11 DATA 1 true Stack[-0x6] - 1008:1bae FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1bb6 Code2 LAB_1008_1bb6 1008:1bb0 FUN_1008_1b11 READ 1 true 1028:0544 Data6 DAT_1028_0544 1008:1bb3 FUN_1008_1b11 DATA 0 true Stack[-0x6] - 1008:1bb6 FUN_1008_1b11 UNCONDITIONAL_JUMP 0 true 1008:1bc4 Code2 LAB_1008_1bc4 1008:1bba FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1bc4 Code2 LAB_1008_1bc4 1008:1bbf FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1228:0224 EXTERNAL MESSAGEBEEP MESSAGEBEEP 1008:1bc4 FUN_1008_1b11 DATA 0 true Stack[0x6] - 1008:1bc7 FUN_1008_1b11 DATA 0 true Stack[0x4] - 1008:1bca FUN_1008_1b11 UNCONDITIONAL_JUMP 0 true 1008:1b2a Code2 LAB_1008_1b2a 1008:1bcd FUN_1008_1b11 DATA 0 true Stack[-0x6] - 1008:1bd0 FUN_1008_1b11 DATA 0 true Stack[-0x8] - 1008:1bd3 FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:1a39 Code2 FUN_1008_1a39 FUN_1008_1a39 1008:1bd6 FUN_1008_1b11 READ 0 true 1028:055e Data6 DAT_1028_055e 1008:1bdb FUN_1008_1b11 CONDITIONAL_JUMP 0 true 1008:1be2 Code2 LAB_1008_1be2 1008:1bdd FUN_1008_1b11 UNCONDITIONAL_CALL 0 true 1008:19b7 Code2 FUN_1008_19b7 FUN_1008_19b7 1008:1bee FUN_1008_1be9 DATA 0 true Stack[0x4] - 1008:1bf7 FUN_1008_1be9 UNCONDITIONAL_CALL 0 true 1008:1b11 Code2 FUN_1008_1b11 FUN_1008_1b11 1008:1c0b FUN_1008_1c03 UNCONDITIONAL_CALL 0 true 1008:2442 Code2 FUN_1008_2442 FUN_1008_2442 1008:1c10 FUN_1008_1c03 DATA 0 true Stack[-0x18] - 1008:1c22 FUN_1008_1c03 UNCONDITIONAL_CALL 0 true 1228:0234 EXTERNAL PEEKMESSAGE PEEKMESSAGE 1008:1c29 FUN_1008_1c03 CONDITIONAL_JUMP 0 true 1008:1c4a Code2 LAB_1008_1c4a 1008:1c2b FUN_1008_1c03 DATA 0 true Stack[-0x16] - 1008:1c2f FUN_1008_1c03 CONDITIONAL_JUMP 0 true 1008:1c34 Code2 LAB_1008_1c34 1008:1c31 FUN_1008_1c03 UNCONDITIONAL_CALL 0 true 1008:18d0 Code2 FUN_1008_18d0 FUN_1008_18d0 1008:1c34 FUN_1008_1c03 DATA 0 true Stack[-0x18] - 1008:1c39 FUN_1008_1c03 UNCONDITIONAL_CALL 0 true 1228:0240 EXTERNAL TRANSLATEMESSAGE TRANSLATEMESSAGE 1008:1c3e FUN_1008_1c03 DATA 0 true Stack[-0x18] - 1008:1c43 FUN_1008_1c03 UNCONDITIONAL_CALL 0 true 1228:0244 EXTERNAL DISPATCHMESSAGE DISPATCHMESSAGE 1008:1c48 FUN_1008_1c03 UNCONDITIONAL_JUMP 0 true 1008:1c10 Code2 LAB_1008_1c10 1008:1c4a FUN_1008_1c03 READ 0 true 1028:058a Data6 DAT_1028_058a 1008:1c51 FUN_1008_1c03 CONDITIONAL_JUMP 0 true 1008:1c54 Code2 LAB_1008_1c54 1008:1c54 FUN_1008_1c03 DATA 0 true Stack[-0x5] - 1008:1c57 FUN_1008_1c03 DATA 1 true Stack[-0x5] - 1008:1c67 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1008:19b7 Code2 FUN_1008_19b7 FUN_1008_19b7 1008:1c6c FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1008:1c03 Code2 FUN_1008_1c03 FUN_1008_1c03 1008:1c73 FUN_1008_1c5f CONDITIONAL_JUMP 0 true 1008:1ca1 Code2 LAB_1008_1ca1 1008:1c75 FUN_1008_1c5f WRITE 0 true 1028:058e Data6 DAT_1028_058e 1008:1c7a FUN_1008_1c5f READ 0 true 1028:058d Data6 DAT_1028_058d 1008:1c7f FUN_1008_1c5f CONDITIONAL_JUMP 0 true 1008:1c84 Code2 LAB_1008_1c84 1008:1c81 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1008:1818 Code2 FUN_1008_1818 FUN_1008_1818 1008:1c84 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1228:023c EXTERNAL WAITMESSAGE WAITMESSAGE 1008:1c89 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1008:1c03 Code2 FUN_1008_1c03 FUN_1008_1c03 1008:1c90 FUN_1008_1c5f CONDITIONAL_JUMP 0 true 1008:1c84 Code2 LAB_1008_1c84 1008:1c92 FUN_1008_1c5f READ 0 true 1028:058d Data6 DAT_1028_058d 1008:1c97 FUN_1008_1c5f CONDITIONAL_JUMP 0 true 1008:1c9c Code2 LAB_1008_1c9c 1008:1c99 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1008:185b Code2 FUN_1008_185b FUN_1008_185b 1008:1c9c FUN_1008_1c5f WRITE 0 true 1028:058e Data6 DAT_1028_058e 1008:1ca1 FUN_1008_1c5f READ 1 true 1028:4af8 Data6 DAT_1028_4af8 1008:1ca4 FUN_1008_1c5f DATA 0 true Stack[-0x5] - 1008:1ca7 FUN_1008_1c5f READ_WRITE 0 true 1028:058a Data6 DAT_1028_058a 1008:1cb5 FUN_1008_1c5f READ 0 true 1028:058a Data6 DAT_1028_058a 1008:1cb9 FUN_1008_1c5f UNCONDITIONAL_CALL 0 true 1020:16a5 Code5 FUN_1020_16a5 FUN_1020_16a5 1008:1cbe FUN_1008_1c5f DATA 1 true Stack[-0x5] - 1008:1cd0 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1cd3 FUN_1008_1cc6 UNCONDITIONAL_CALL 0 true 1008:1c5f Code2 FUN_1008_1c5f FUN_1008_1c5f 1008:1cd8 FUN_1008_1cc6 DATA 0 true Stack[-0x7] - 1008:1cdb FUN_1008_1cc6 DATA 1 true Stack[-0x7] - 1008:1ce0 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1cf5 Code2 LAB_1008_1cf5 1008:1ce2 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1ce6 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1cf3 Code2 LAB_1008_1cf3 1008:1ce8 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1cee FUN_1008_1cc6 UNCONDITIONAL_CALL 0 true 1008:1be9 Code2 FUN_1008_1be9 FUN_1008_1be9 1008:1cf3 FUN_1008_1cc6 UNCONDITIONAL_JUMP 0 true 1008:1d21 Code2 LAB_1008_1d21 1008:1cf7 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1d21 Code2 LAB_1008_1d21 1008:1cfb FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1d21 Code2 LAB_1008_1d21 1008:1cfd FUN_1008_1cc6 DATA 1 true Stack[0x4] - 1008:1d02 FUN_1008_1cc6 DATA 1 true Stack[-0xa] - 1008:1d05 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1d21 Code2 LAB_1008_1d21 1008:1d07 FUN_1008_1cc6 DATA 1 true Stack[-0x7] - 1008:1d0a FUN_1008_1cc6 DATA 1 true Stack[-0xa] - 1008:1d0d FUN_1008_1cc6 DATA 1 true Stack[0x6] - 1008:1d15 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1d18 FUN_1008_1cc6 DATA 1 true Stack[-0x7] - 1008:1d1c FUN_1008_1cc6 UNCONDITIONAL_CALL 0 true 1008:1be9 Code2 FUN_1008_1be9 FUN_1008_1be9 1008:1d21 FUN_1008_1cc6 DATA 0 true Stack[-0x7] - 1008:1d25 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1d34 Code2 LAB_1008_1d34 1008:1d27 FUN_1008_1cc6 READ 0 true 1028:055f Data6 DAT_1028_055f 1008:1d2c FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1cd3 Code2 LAB_1008_1cd3 1008:1d2e FUN_1008_1cc6 DATA 0 true Stack[-0x7] - 1008:1d32 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1cd3 Code2 LAB_1008_1cd3 1008:1d34 FUN_1008_1cc6 DATA 1 true Stack[-0x7] - 1008:1d37 FUN_1008_1cc6 DATA 1 true Stack[-0xa] - 1008:1d3a FUN_1008_1cc6 DATA 1 true Stack[0x6] - 1008:1d42 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1d45 FUN_1008_1cc6 DATA 0 true Stack[-0x7] - 1008:1d49 FUN_1008_1cc6 CONDITIONAL_JUMP 0 true 1008:1d62 Code2 LAB_1008_1d62 1008:1d4b FUN_1008_1cc6 DATA 1 true Stack[-0xa] - 1008:1d4e FUN_1008_1cc6 DATA 1 true Stack[0x6] - 1008:1d57 FUN_1008_1cc6 DATA 0 true Stack[-0xa] - 1008:1d5d FUN_1008_1cc6 UNCONDITIONAL_CALL 0 true 1008:1be9 Code2 FUN_1008_1be9 FUN_1008_1be9 1008:1d62 FUN_1008_1cc6 UNCONDITIONAL_CALL 0 true 1008:19b7 Code2 FUN_1008_19b7 FUN_1008_19b7 1008:1d67 FUN_1008_1cc6 DATA 1 true Stack[-0xa] - 1008:1d6a FUN_1008_1cc6 DATA 0 true Stack[-0x6] - 1008:1d6d FUN_1008_1cc6 DATA 1 true Stack[-0x6] - 1008:1d7a FUN_1008_1d77 WRITE 0 true 1028:058c Data6 DAT_1028_058c 1008:1d7f FUN_1008_1d77 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:1d82 FUN_1008_1d77 READ 0 true 1028:0542 Data6 DAT_1028_0542 1008:1d87 FUN_1008_1d77 UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:1d8c FUN_1008_1d77 WRITE 0 true 1028:4ac2 Data6 DAT_1028_4ac2 1008:1d8f FUN_1008_1d77 WRITE 0 true 1028:4ac4 Data6 DAT_1028_4ac4 1008:1d93 FUN_1008_1d77 READ 1 true 1028:4ac2 Data6 DAT_1028_4ac2 1008:1d99 FUN_1008_1d77 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:1d9c FUN_1008_1d77 READ 0 true 1028:0542 Data6 DAT_1028_0542 1008:1da4 FUN_1008_1d77 UNCONDITIONAL_CALL 0 true 1020:16c9 Code5 FUN_1020_16c9 FUN_1020_16c9 1008:1da9 FUN_1008_1d77 READ 0 true 1028:0560 Data6 DAT_1028_0560 1008:1dae FUN_1008_1d77 CONDITIONAL_JUMP 0 true 1008:1dca Code2 LAB_1008_1dca 1008:1db0 FUN_1008_1d77 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:1db7 FUN_1008_1d77 UNCONDITIONAL_CALL 0 true 1228:0264 EXTERNAL GETSYSTEMMENU GETSYSTEMMENU 1008:1dc5 FUN_1008_1d77 UNCONDITIONAL_CALL 0 true 1228:0260 EXTERNAL ENABLEMENUITEM ENABLEMENUITEM 1008:1dd2 FUN_1008_1dcc WRITE 0 true 1028:058f Data6 DAT_1028_058f 1008:1dd7 FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:1779 Code2 FUN_1008_1779 FUN_1008_1779 1008:1ddd FUN_1008_1dcc READ 1 true 1028:4ada Data6 DAT_1028_4ada 1008:1de1 FUN_1008_1dcc READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:1de5 FUN_1008_1dcc READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1dea FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1ded FUN_1008_1dcc DATA 0 true Stack[-0x4] - 1008:1df0 FUN_1008_1dcc READ 0 true 1028:0540 Data6 DAT_1028_0540 1008:1df4 FUN_1008_1dcc READ 1 true 1028:4ade Data6 DAT_1028_4ade 1008:1df7 FUN_1008_1dcc READ 1 true 1028:4ace Data6 DAT_1028_4ace 1008:1dfd FUN_1008_1dcc READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:1e01 FUN_1008_1dcc READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1e06 FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:1e09 FUN_1008_1dcc DATA 0 true Stack[-0x6] - 1008:1e0f FUN_1008_1dcc READ 1 true 1028:4adc Data6 DAT_1028_4adc 1008:1e13 FUN_1008_1dcc READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1e17 FUN_1008_1dcc READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1e1c FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1e1f FUN_1008_1dcc DATA 0 true Stack[-0x8] - 1008:1e22 FUN_1008_1dcc READ 0 true 1028:0542 Data6 DAT_1028_0542 1008:1e26 FUN_1008_1dcc READ 1 true 1028:4ae0 Data6 DAT_1028_4ae0 1008:1e29 FUN_1008_1dcc READ 1 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1e2f FUN_1008_1dcc READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1e33 FUN_1008_1dcc READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1e38 FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:1e3b FUN_1008_1dcc DATA 0 true Stack[-0xa] - 1008:1e3e FUN_1008_1dcc DATA 1 true Stack[-0x8] - 1008:1e41 FUN_1008_1dcc DATA 1 true Stack[-0xa] - 1008:1e44 FUN_1008_1dcc CONDITIONAL_JUMP 0 true 1008:1e7e Code2 LAB_1008_1e7e 1008:1e46 FUN_1008_1dcc READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:1e4a FUN_1008_1dcc DATA 1 true Stack[-0x4] - 1008:1e4d FUN_1008_1dcc READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1e51 FUN_1008_1dcc READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:1e56 FUN_1008_1dcc DATA 1 true Stack[-0x8] - 1008:1e59 FUN_1008_1dcc READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1e5d FUN_1008_1dcc READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1e62 FUN_1008_1dcc DATA 0 true Stack[-0x4] - 1008:1e65 FUN_1008_1dcc DATA 0 true Stack[-0x8] - 1008:1e68 FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:19f8 Code2 FUN_1008_19f8 FUN_1008_19f8 1008:1e6d FUN_1008_1dcc DATA 1 true Stack[-0x6] - 1008:1e70 FUN_1008_1dcc DATA 1 true Stack[-0x4] - 1008:1e74 FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1228:014c EXTERNAL TEXTOUT TEXTOUT 1008:1e79 FUN_1008_1dcc DATA 0 true Stack[-0x8] - 1008:1e7c FUN_1008_1dcc UNCONDITIONAL_JUMP 0 true 1008:1e3e Code2 LAB_1008_1e3e 1008:1e7e FUN_1008_1dcc UNCONDITIONAL_CALL 0 true 1008:17e2 Code2 FUN_1008_17e2 FUN_1008_17e2 1008:1e81 FUN_1008_1dcc WRITE 0 true 1028:058f Data6 DAT_1028_058f 1008:1e90 FUN_1008_1e8a DATA 1 true Stack[0x2] - 1008:1e9a FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1ea5 Code2 LAB_1008_1ea5 1008:1e9c FUN_1008_1e8a DATA 1 true Stack[0x8] - 1008:1ea0 FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1ea3 FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1ea8 FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1eb3 Code2 LAB_1008_1eb3 1008:1eaa FUN_1008_1e8a DATA 1 true Stack[0x8] - 1008:1eae FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1eb1 FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1eb6 FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1ec3 Code2 LAB_1008_1ec3 1008:1eb8 FUN_1008_1e8a DATA 1 true Stack[0x8] - 1008:1ebb FUN_1008_1e8a DATA 1 true Stack[0x6] - 1008:1ebe FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1ec1 FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1ec6 FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1ed3 Code2 LAB_1008_1ed3 1008:1ec8 FUN_1008_1e8a DATA 1 true Stack[0x8] - 1008:1ecb FUN_1008_1e8a DATA 1 true Stack[0x6] - 1008:1ece FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1ed1 FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1ed6 FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1edf Code2 LAB_1008_1edf 1008:1eda FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1edd FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1ee2 FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1eec Code2 LAB_1008_1eec 1008:1ee4 FUN_1008_1e8a DATA 1 true Stack[0x4] - 1008:1ee7 FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1eea FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1eef FUN_1008_1e8a CONDITIONAL_JUMP 0 true 1008:1efd Code2 LAB_1008_1efd 1008:1ef1 FUN_1008_1e8a DATA 1 true Stack[0x2] - 1008:1ef8 FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1efb FUN_1008_1e8a UNCONDITIONAL_JUMP 0 true 1008:1f03 Code2 LAB_1008_1f03 1008:1efd FUN_1008_1e8a DATA 1 true Stack[0x8] - 1008:1f00 FUN_1008_1e8a DATA 0 true Stack[-0x4] - 1008:1f03 FUN_1008_1e8a DATA 1 true Stack[-0x4] - 1008:1f12 FUN_1008_1f0c READ 1 true 1028:0548 Data6 DAT_1028_0548 1008:1f15 FUN_1008_1f0c DATA 0 true Stack[-0x4] - 1008:1f18 FUN_1008_1f0c READ 1 true 1028:054a Data6 DAT_1028_054a 1008:1f1b FUN_1008_1f0c DATA 0 true Stack[-0x6] - 1008:1f1e FUN_1008_1f0c DATA 1 true Stack[0x6] - 1008:1f24 FUN_1008_1f0c CONDITIONAL_JUMP 0 true 1008:1f40 Code2 LAB_1008_1f40 1008:1f26 FUN_1008_1f0c DATA 0 true Stack[-0x4] - 1008:1f29 FUN_1008_1f0c READ 1 true 1028:4ac6 Data6 DAT_1028_4ac6 1008:1f33 FUN_1008_1f0c READ 0 true 1028:4aca Data6 DAT_1028_4aca 1008:1f38 FUN_1008_1f0c UNCONDITIONAL_CALL 0 true 1008:1e8a Code2 FUN_1008_1e8a FUN_1008_1e8a 1008:1f3b FUN_1008_1f0c DATA 0 true Stack[-0x4] - 1008:1f3e FUN_1008_1f0c UNCONDITIONAL_JUMP 0 true 1008:1f57 Code2 LAB_1008_1f57 1008:1f43 FUN_1008_1f0c CONDITIONAL_JUMP 0 true 1008:1f57 Code2 LAB_1008_1f57 1008:1f45 FUN_1008_1f0c DATA 0 true Stack[-0x6] - 1008:1f48 FUN_1008_1f0c READ 0 true 1028:4ac8 Data6 DAT_1028_4ac8 1008:1f4c FUN_1008_1f0c READ 0 true 1028:4acc Data6 DAT_1028_4acc 1008:1f51 FUN_1008_1f0c UNCONDITIONAL_CALL 0 true 1008:1e8a Code2 FUN_1008_1e8a FUN_1008_1e8a 1008:1f54 FUN_1008_1f0c DATA 0 true Stack[-0x6] - 1008:1f57 FUN_1008_1f0c DATA 0 true Stack[-0x4] - 1008:1f5a FUN_1008_1f0c DATA 0 true Stack[-0x6] - 1008:1f5d FUN_1008_1f0c UNCONDITIONAL_CALL 0 true 1008:18ee Code2 FUN_1008_18ee FUN_1008_18ee 1008:1f6b FUN_1008_1f68 READ 0 true 1028:058d Data6 DAT_1028_058d 1008:1f70 FUN_1008_1f68 CONDITIONAL_JUMP 0 true 1008:1f7c Code2 LAB_1008_1f7c 1008:1f72 FUN_1008_1f68 READ 0 true 1028:058e Data6 DAT_1028_058e 1008:1f77 FUN_1008_1f68 CONDITIONAL_JUMP 0 true 1008:1f7c Code2 LAB_1008_1f7c 1008:1f79 FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:185b Code2 FUN_1008_185b FUN_1008_185b 1008:1f7c FUN_1008_1f68 DATA 1 true Stack[0x4] - 1008:1f80 FUN_1008_1f68 READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:1f84 FUN_1008_1f68 WRITE 0 true 1028:4ac6 Data6 DAT_1028_4ac6 1008:1f87 FUN_1008_1f68 DATA 1 true Stack[0x2] - 1008:1f8b FUN_1008_1f68 READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:1f8f FUN_1008_1f68 WRITE 0 true 1028:4ac8 Data6 DAT_1028_4ac8 1008:1f95 FUN_1008_1f68 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:1f98 FUN_1008_1f68 READ 1 true 1028:4ac6 Data6 DAT_1028_4ac6 1008:1f9d FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1fa0 FUN_1008_1f68 WRITE 0 true 1028:4aca Data6 DAT_1028_4aca 1008:1fa6 FUN_1008_1f68 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:1fa9 FUN_1008_1f68 READ 1 true 1028:4ac8 Data6 DAT_1028_4ac8 1008:1fae FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:1754 Code2 FUN_1008_1754 FUN_1008_1754 1008:1fb1 FUN_1008_1f68 WRITE 0 true 1028:4acc Data6 DAT_1028_4acc 1008:1fb4 FUN_1008_1f68 READ 0 true 1028:0548 Data6 DAT_1028_0548 1008:1fb8 FUN_1008_1f68 READ 0 true 1028:4aca Data6 DAT_1028_4aca 1008:1fbc FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:1fbf FUN_1008_1f68 WRITE 0 true 1028:0548 Data6 DAT_1028_0548 1008:1fc2 FUN_1008_1f68 READ 0 true 1028:054a Data6 DAT_1028_054a 1008:1fc6 FUN_1008_1f68 READ 0 true 1028:4acc Data6 DAT_1028_4acc 1008:1fca FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:1fcd FUN_1008_1f68 WRITE 0 true 1028:054a Data6 DAT_1028_054a 1008:1fd0 FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:1865 Code2 FUN_1008_1865 FUN_1008_1865 1008:1fd3 FUN_1008_1f68 READ 0 true 1028:058d Data6 DAT_1028_058d 1008:1fd8 FUN_1008_1f68 CONDITIONAL_JUMP 0 true 1008:1fe4 Code2 LAB_1008_1fe4 1008:1fda FUN_1008_1f68 READ 0 true 1028:058e Data6 DAT_1028_058e 1008:1fdf FUN_1008_1f68 CONDITIONAL_JUMP 0 true 1008:1fe4 Code2 LAB_1008_1fe4 1008:1fe1 FUN_1008_1f68 UNCONDITIONAL_CALL 0 true 1008:1818 Code2 FUN_1008_1818 FUN_1008_1818 1008:1fee FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1008:1779 Code2 FUN_1008_1779 FUN_1008_1779 1008:1ff1 FUN_1008_1fe8 READ 0 true 1028:4ad4 Data6 DAT_1028_4ad4 1008:1ff5 FUN_1008_1fe8 DATA 0 true Stack[-0x26] - 1008:1ffa FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0174 EXTERNAL GETTEXTMETRICS GETTEXTMETRICS 1008:1fff FUN_1008_1fe8 DATA 1 true Stack[-0x1a] - 1008:2002 FUN_1008_1fe8 WRITE 0 true 1028:4ace Data6 DAT_1028_4ace 1008:2005 FUN_1008_1fe8 DATA 1 true Stack[-0x26] - 1008:2008 FUN_1008_1fe8 DATA 1 true Stack[-0x1e] - 1008:200b FUN_1008_1fe8 WRITE 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:200e FUN_1008_1fe8 DATA 1 true Stack[-0x24] - 1008:2011 FUN_1008_1fe8 WRITE 0 true 1028:4ad2 Data6 DAT_1028_4ad2 1008:2018 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:2024 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:202b FUN_1008_1fe8 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:202e FUN_1008_1fe8 READ 0 true 1028:4ace Data6 DAT_1028_4ace 1008:2038 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:203e FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:2044 FUN_1008_1fe8 DATA 0 true Stack[-0x4] - 1008:204b FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:2057 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:2061 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:2068 FUN_1008_1fe8 READ 1 true 1028:0542 Data6 DAT_1028_0542 1008:206b FUN_1008_1fe8 READ 0 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:2079 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:207f FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1008:172f Code2 FUN_1008_172f FUN_1008_172f 1008:2085 FUN_1008_1fe8 DATA 0 true Stack[-0x6] - 1008:2088 FUN_1008_1fe8 DATA 1 true Stack[-0x4] - 1008:208b FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:2092 FUN_1008_1fe8 DATA 1 true Stack[-0x6] - 1008:2095 FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:20a0 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:20ac FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:20b3 FUN_1008_1fe8 READ 1 true 1028:4ace Data6 DAT_1028_4ace 1008:20bf FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:20ca FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:20d4 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:20e0 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1228:0288 EXTERNAL GETSYSTEMMETRICS GETSYSTEMMETRICS 1008:20e7 FUN_1008_1fe8 READ 1 true 1028:4ad0 Data6 DAT_1028_4ad0 1008:20f6 FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:20fd FUN_1008_1fe8 DATA 1 true Stack[-0x4] - 1008:2100 FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:2107 FUN_1008_1fe8 DATA 1 true Stack[-0x6] - 1008:210a FUN_1008_1fe8 DATA 1 true Stack[0x2] - 1008:2111 FUN_1008_1fe8 UNCONDITIONAL_CALL 0 true 1008:17e2 Code2 FUN_1008_17e2 FUN_1008_17e2 1008:211d FUN_1008_211a READ 0 true 1028:0560 Data6 DAT_1028_0560 1008:2122 FUN_1008_211a CONDITIONAL_JUMP 0 true 1008:212d Code2 LAB_1008_212d 1008:2124 FUN_1008_211a DATA 0 true Stack[0x2] - 1008:2128 FUN_1008_211a CONDITIONAL_JUMP 0 true 1008:212d Code2 LAB_1008_212d 1008:212a FUN_1008_211a UNCONDITIONAL_CALL 0 true 1008:18d0 Code2 FUN_1008_18d0 FUN_1008_18d0 1008:212d FUN_1008_211a READ 0 true 1028:058a Data6 DAT_1028_058a 1008:2132 FUN_1008_211a CONDITIONAL_JUMP 0 true 1008:2143 Code2 LAB_1008_2143 1008:2134 FUN_1008_211a DATA 1 true Stack[0x2] - 1008:2137 FUN_1008_211a READ 1 true 1028:058a Data6 DAT_1028_058a 1008:213f FUN_1008_211a READ_WRITE 0 true 1028:058a Data6 DAT_1028_058a 1008:214d FUN_1008_2147 READ 0 true 1028:0560 Data6 DAT_1028_0560 1008:2152 FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:215d Code2 LAB_1008_215d 1008:2154 FUN_1008_2147 DATA 0 true Stack[0x2] - 1008:2158 FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:215d Code2 LAB_1008_215d 1008:215a FUN_1008_2147 UNCONDITIONAL_CALL 0 true 1008:18d0 Code2 FUN_1008_18d0 FUN_1008_18d0 1008:2161 FUN_1008_2147 UNCONDITIONAL_CALL 0 true 1228:0228 EXTERNAL GETKEYSTATE GETKEYSTATE 1008:216a FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:216d Code2 LAB_1008_216d 1008:216d FUN_1008_2147 DATA 0 true Stack[-0x3] - 1008:2170 FUN_1008_2147 DATA 0 true Stack[-0x6] - 1008:2175 FUN_1008_2147 UNCONDITIONAL_JUMP 0 true 1008:217a Code2 LAB_1008_217a 1008:2177 FUN_1008_2147 DATA 0 true Stack[-0x6] - 1008:217a FUN_1008_2147 DATA 1 true Stack[-0x6] - 1008:2187 FUN_1008_2147 READ 1 true 1028:0590 Data6 DAT_1028_0590 1008:2187 FUN_1008_2147 READ 1 false 1028:0594 Data6 DAT_1028_0594 1008:218a FUN_1008_2147 DATA 1 true Stack[0x2] - 1008:218d FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:21ae Code2 LAB_1008_21ae 1008:218f FUN_1008_2147 READ 1 true 1028:0591 Data6 DAT_1028_0591 1008:218f FUN_1008_2147 READ 1 false 1028:0595 Data6 DAT_1028_0595 1008:2193 FUN_1008_2147 DATA 1 true Stack[-0x3] - 1008:2196 FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:21ae Code2 LAB_1008_21ae 1008:2198 FUN_1008_2147 READ 1 true 1028:0592 Data6 DAT_1028_0592 1008:2198 FUN_1008_2147 READ 1 false 1028:0596 Data6 DAT_1028_0596 1008:219f FUN_1008_2147 READ 1 true 1028:0593 Data6 DAT_1028_0593 1008:219f FUN_1008_2147 READ 1 false 1028:0597 Data6 DAT_1028_0597 1008:21a9 FUN_1008_2147 UNCONDITIONAL_CALL 0 true 1008:1f0c Code2 FUN_1008_1f0c FUN_1008_1f0c 1008:21ac FUN_1008_2147 UNCONDITIONAL_JUMP 0 true 1008:21b4 Code2 LAB_1008_21b4 1008:21ae FUN_1008_2147 DATA 0 true Stack[-0x6] - 1008:21b2 FUN_1008_2147 CONDITIONAL_JUMP 0 true 1008:2177 Code2 LAB_1008_2177 1008:21bd FUN_1008_21ba WRITE 0 true 1028:058d Data6 DAT_1028_058d 1008:21c2 FUN_1008_21ba READ 0 true 1028:058e Data6 DAT_1028_058e 1008:21c7 FUN_1008_21ba CONDITIONAL_JUMP 0 true 1008:21cc Code2 LAB_1008_21cc 1008:21c9 FUN_1008_21ba UNCONDITIONAL_CALL 0 true 1008:1818 Code2 FUN_1008_1818 FUN_1008_1818 1008:21d1 FUN_1008_21ce READ 0 true 1028:058e Data6 DAT_1028_058e 1008:21d6 FUN_1008_21ce CONDITIONAL_JUMP 0 true 1008:21db Code2 LAB_1008_21db 1008:21d8 FUN_1008_21ce UNCONDITIONAL_CALL 0 true 1008:185b Code2 FUN_1008_185b FUN_1008_185b 1008:21db FUN_1008_21ce WRITE 0 true 1028:058d Data6 DAT_1028_058d 1008:21e5 FUN_1008_21e2 READ 0 true 1028:4ac4 Data6 DAT_1028_4ac4 1008:21e9 FUN_1008_21e2 READ 0 true 1028:4ac2 Data6 DAT_1028_4ac2 1008:21ed FUN_1008_21e2 READ 1 true 1028:0540 Data6 DAT_1028_0540 1008:21f0 FUN_1008_21e2 READ 0 true 1028:0542 Data6 DAT_1028_0542 1008:21f5 FUN_1008_21e2 UNCONDITIONAL_CALL 0 true 1020:0147 Code5 FUN_1020_0147 FUN_1020_0147 1008:21fc FUN_1008_21e2 WRITE 0 true 1028:0544 Data6 DAT_1028_0544 1008:21ff FUN_1008_21e2 WRITE 0 true 1028:0546 Data6 DAT_1028_0546 1008:2204 FUN_1008_21e2 WRITE 0 true 1028:0548 Data6 DAT_1028_0548 1008:2207 FUN_1008_21e2 WRITE 0 true 1028:054a Data6 DAT_1028_054a 1008:220d FUN_1008_21e2 UNCONDITIONAL_CALL 0 true 1228:0194 EXTERNAL POSTQUITMESSAGE POSTQUITMESSAGE 1008:2212 FUN_1008_21e2 WRITE 0 true 1028:058c Data6 DAT_1028_058c 1008:222a FUN_1008_2219 DATA 0 true Stack[-0x8] - 1008:222d FUN_1008_2219 DATA 0 true Stack[-0x6] - 1008:2230 FUN_1008_2219 DATA 1 true Stack[0xc] - 1008:2236 FUN_1008_2219 DATA 1 true Stack[0xa] - 1008:223c FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:2244 Code2 LAB_1008_2244 1008:223e FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1d77 Code2 FUN_1008_1d77 FUN_1008_1d77 1008:2241 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:2247 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:224f Code2 LAB_1008_224f 1008:2249 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1dcc Code2 FUN_1008_1dcc FUN_1008_1dcc 1008:224c FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:2252 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:2264 Code2 LAB_1008_2264 1008:2258 FUN_1008_2219 DATA 0 true Stack[0x8] - 1008:225b FUN_1008_2219 DATA 0 true Stack[0x4] - 1008:225e FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1f0c Code2 FUN_1008_1f0c FUN_1008_1f0c 1008:2261 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:2267 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:2277 Code2 LAB_1008_2277 1008:226c FUN_1008_2219 DATA 0 true Stack[0x8] - 1008:226f FUN_1008_2219 DATA 0 true Stack[0x4] - 1008:2272 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1f0c Code2 FUN_1008_1f0c FUN_1008_1f0c 1008:2275 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:227a FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:2287 Code2 LAB_1008_2287 1008:227c FUN_1008_2219 DATA 0 true Stack[0x4] - 1008:227f FUN_1008_2219 DATA 0 true Stack[0x6] - 1008:2282 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1f68 Code2 FUN_1008_1f68 FUN_1008_1f68 1008:2285 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:228a FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:2297 Code2 LAB_1008_2297 1008:228c FUN_1008_2219 DATA 0 true Stack[0x6] - 1008:228f FUN_1008_2219 DATA 0 true Stack[0x4] - 1008:2292 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:1fe8 Code2 FUN_1008_1fe8 FUN_1008_1fe8 1008:2295 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:229a FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:22a5 Code2 LAB_1008_22a5 1008:229c FUN_1008_2219 DATA 1 true Stack[0x8] - 1008:22a0 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:211a Code2 FUN_1008_211a FUN_1008_211a 1008:22a3 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:22a8 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:22b3 Code2 LAB_1008_22b3 1008:22aa FUN_1008_2219 DATA 1 true Stack[0x8] - 1008:22ae FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:2147 Code2 FUN_1008_2147 FUN_1008_2147 1008:22b1 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:22b6 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:22bd Code2 LAB_1008_22bd 1008:22b8 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:21ba Code2 FUN_1008_21ba FUN_1008_21ba 1008:22bb FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:22c0 FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:22c7 Code2 LAB_1008_22c7 1008:22c2 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:21ce Code2 FUN_1008_21ce FUN_1008_21ce 1008:22c5 FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:22ca FUN_1008_2219 CONDITIONAL_JUMP 0 true 1008:22d1 Code2 LAB_1008_22d1 1008:22cc FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1008:21e2 Code2 FUN_1008_21e2 FUN_1008_21e2 1008:22cf FUN_1008_2219 UNCONDITIONAL_JUMP 0 true 1008:22eb Code2 LAB_1008_22eb 1008:22d1 FUN_1008_2219 DATA 0 true Stack[0xc] - 1008:22d4 FUN_1008_2219 DATA 0 true Stack[0xa] - 1008:22d7 FUN_1008_2219 DATA 0 true Stack[0x8] - 1008:22da FUN_1008_2219 DATA 0 true Stack[0x6] - 1008:22dd FUN_1008_2219 DATA 0 true Stack[0x4] - 1008:22e0 FUN_1008_2219 UNCONDITIONAL_CALL 0 true 1228:022c EXTERNAL DEFWINDOWPROC DEFWINDOWPROC 1008:22e5 FUN_1008_2219 DATA 0 true Stack[-0x8] - 1008:22e8 FUN_1008_2219 DATA 0 true Stack[-0x6] - 1008:22eb FUN_1008_2219 DATA 1 true Stack[-0x8] - 1008:22ee FUN_1008_2219 DATA 1 true Stack[-0x6] - 1008:22f3 FUN_1008_2219 DATA 0 true Stack[-0x4] - 1008:2304 FUN_1008_22fc DATA 1 true Stack[0x4] - 1008:230c FUN_1008_22fc CONDITIONAL_JUMP 0 true 1008:232d Code2 LAB_1008_232d 1008:231a FUN_1008_22fc UNCONDITIONAL_CALL 0 true 1008:1b11 Code2 FUN_1008_1b11 FUN_1008_1b11 1008:231f FUN_1008_22fc DATA 1 true Stack[0x4] - 1008:2328 FUN_1008_22fc UNCONDITIONAL_CALL 0 true 1008:1c03 Code2 FUN_1008_1c03 FUN_1008_1c03 1008:232f FUN_1008_22fc DATA 0 true Stack[-0x6] - 1008:2332 FUN_1008_22fc DATA 1 true Stack[-0x6] - 1008:2344 FUN_1008_233c DATA 1 true Stack[0x4] - 1008:2353 FUN_1008_233c UNCONDITIONAL_CALL 0 true 1008:1cc6 Code2 FUN_1008_1cc6 FUN_1008_1cc6 1008:2358 FUN_1008_233c DATA 1 true Stack[0x4] - 1008:2367 FUN_1008_233c DATA 0 true Stack[-0x6] - 1008:236a FUN_1008_233c DATA 1 true Stack[-0x6] - 1008:237e FUN_1008_2374 DATA 0 true Stack[-0x6] - 1008:2381 FUN_1008_2374 DATA 1 true Stack[-0x6] - 1008:2393 FUN_1008_238b DATA 1 true Stack[0x4] - 1008:239c FUN_1008_238b CONDITIONAL_JUMP 0 true 1008:23b8 Code2 LAB_1008_23b8 1008:23b6 FUN_1008_238b UNCONDITIONAL_JUMP 0 true 1008:23dd Code2 LAB_1008_23dd 1008:23b8 FUN_1008_238b DATA 1 true Stack[0x4] - 1008:23e3 FUN_1008_238b DATA 1 true Stack[0x4] - 1008:23f0 FUN_1008_238b DATA 0 true Stack[-0x6] - 1008:23f3 FUN_1008_238b DATA 1 true Stack[-0x6] - 1008:2405 FUN_1008_23fd DATA 1 true Stack[0x4] - 1008:2447 FUN_1008_2442 READ 0 true 1028:058c Data6 DAT_1028_058c 1008:244c FUN_1008_2442 CONDITIONAL_JUMP 0 true 1008:24a0 Code2 LAB_1008_24a0 1008:244e FUN_1008_2442 READ 0 true 1028:057a Data6 DAT_1028_057a 1008:2452 FUN_1008_2442 READ 0 true 1028:0578 Data6 DAT_1028_0578 1008:2462 FUN_1008_2442 READ 0 true 1028:0538 Data6 DAT_1028_0538 1008:2466 FUN_1008_2442 READ 0 true 1028:053a Data6 DAT_1028_053a 1008:246a FUN_1008_2442 READ 0 true 1028:053c Data6 DAT_1028_053c 1008:246e FUN_1008_2442 READ 0 true 1028:053e Data6 DAT_1028_053e 1008:2478 FUN_1008_2442 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:2482 FUN_1008_2442 UNCONDITIONAL_CALL 0 true 1228:01d8 EXTERNAL CREATEWINDOW CREATEWINDOW 1008:2487 FUN_1008_2442 WRITE 0 true 1028:0586 Data6 DAT_1028_0586 1008:248a FUN_1008_2442 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:248e FUN_1008_2442 READ 0 true 1028:0700 Data6 DAT_1028_0700 1008:2492 FUN_1008_2442 UNCONDITIONAL_CALL 0 true 1228:01dc EXTERNAL SHOWWINDOW SHOWWINDOW 1008:2497 FUN_1008_2442 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:249b FUN_1008_2442 UNCONDITIONAL_CALL 0 true 1228:024c EXTERNAL UPDATEWINDOW UPDATEWINDOW 1008:24ae FUN_1008_24a5 READ 1 true 1028:4abe Data6 DAT_1028_4abe 1008:24b1 FUN_1008_24a5 READ 1 true 1028:4ac0 Data6 DAT_1028_4ac0 1008:24b5 FUN_1008_24a5 WRITE 0 true 1028:0712 Data6 DAT_1028_0712 1008:24b8 FUN_1008_24a5 WRITE 0 true 1028:0714 Data6 DAT_1028_0714 1008:24bc FUN_1008_24a5 READ 0 true 1028:058c Data6 DAT_1028_058c 1008:24c1 FUN_1008_24a5 CONDITIONAL_JUMP 0 true 1008:24c6 Code2 LAB_1008_24c6 1008:24c3 FUN_1008_24a5 UNCONDITIONAL_JUMP 0 true 1008:254f Code2 LAB_1008_254f 1008:24c6 FUN_1008_24a5 READ 1 true 1028:0718 Data6 DAT_1028_0718 1008:24c9 FUN_1008_24a5 READ 1 true 1028:071a Data6 DAT_1028_071a 1008:24cd FUN_1008_24a5 CONDITIONAL_JUMP 0 true 1008:24d2 Code2 LAB_1008_24d2 1008:24cf FUN_1008_24a5 UNCONDITIONAL_JUMP 0 true 1008:254f Code2 LAB_1008_254f 1008:24d7 FUN_1008_24a5 DATA 0 true Stack[-0x8] - 1008:24da FUN_1008_24a5 DATA 0 true Stack[-0x6] - 1008:24dd FUN_1008_24a5 DATA 0 true Stack[-0x9a] - 1008:24e3 FUN_1008_24a5 READ 0 true 1028:054e Data6 DAT_1028_054e 1008:24e7 FUN_1008_24a5 READ 0 true 1028:054c Data6 DAT_1028_054c 1008:24eb FUN_1008_24a5 DATA 0 true Stack[-0x8] - 1008:24f0 FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:02ac EXTERNAL WVSPRINTF WVSPRINTF 1008:24f5 FUN_1008_24a5 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:24f9 FUN_1008_24a5 DATA 0 true Stack[-0x9a] - 1008:24ff FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:01cc EXTERNAL SETWINDOWTEXT SETWINDOWTEXT 1008:2504 FUN_1008_24a5 READ 0 true 1028:0586 Data6 DAT_1028_0586 1008:250b FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:0264 EXTERNAL GETSYSTEMMENU GETSYSTEMMENU 1008:2518 FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:0260 EXTERNAL ENABLEMENUITEM ENABLEMENUITEM 1008:251d FUN_1008_24a5 WRITE 0 true 1028:0560 Data6 DAT_1028_0560 1008:2522 FUN_1008_24a5 DATA 0 true Stack[-0x1a] - 1008:2530 FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:0230 EXTERNAL GETMESSAGE GETMESSAGE 1008:2537 FUN_1008_24a5 CONDITIONAL_JUMP 0 true 1008:254f Code2 LAB_1008_254f 1008:2539 FUN_1008_24a5 DATA 0 true Stack[-0x1a] - 1008:253e FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:0240 EXTERNAL TRANSLATEMESSAGE TRANSLATEMESSAGE 1008:2543 FUN_1008_24a5 DATA 0 true Stack[-0x1a] - 1008:2548 FUN_1008_24a5 UNCONDITIONAL_CALL 0 true 1228:0244 EXTERNAL DISPATCHMESSAGE DISPATCHMESSAGE 1008:254d FUN_1008_24a5 UNCONDITIONAL_JUMP 0 true 1008:2522 Code2 LAB_1008_2522 1008:2557 FUN_1008_2554 READ 0 true 1028:06fc Data6 DAT_1028_06fc 1008:255c FUN_1008_2554 CONDITIONAL_JUMP 0 true 1008:2598 Code2 LAB_1008_2598 1008:255e FUN_1008_2554 READ 1 true 1028:06fe Data6 DAT_1028_06fe 1008:2561 FUN_1008_2554 WRITE 0 true 1028:056c Data6 DAT_1028_056c 1008:256e FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1228:027c EXTERNAL LOADICON LOADICON 1008:2573 FUN_1008_2554 WRITE 0 true 1028:056e Data6 DAT_1028_056e 1008:2580 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1008:2585 FUN_1008_2554 WRITE 0 true 1028:0570 Data6 DAT_1028_0570 1008:2588 FUN_1008_2554 WRITE 0 true 1028:0572 Data6 DAT_1028_0572 1008:2593 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1228:01f0 EXTERNAL REGISTERCLASS REGISTERCLASS 1008:259d FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1008:23fd Code2 FUN_1008_23fd FUN_1008_23fd 1008:25a7 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1020:0527 Code5 FUN_1020_0527 FUN_1020_0527 1008:25ac FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1020:038f Code5 FUN_1020_038f FUN_1020_038f 1008:25b6 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1008:23fd Code2 FUN_1008_23fd FUN_1008_23fd 1008:25c0 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1020:052c Code5 FUN_1020_052c FUN_1020_052c 1008:25c5 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1020:038f Code5 FUN_1020_038f FUN_1020_038f 1008:25ca FUN_1008_2554 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:25d7 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1228:0028 EXTERNAL GETMODULEFILENAME GETMODULEFILENAME 1008:25e6 FUN_1008_2554 UNCONDITIONAL_CALL 0 true 1228:02c0 EXTERNAL Ordinal_6 Ordinal_6 1008:25eb FUN_1008_2554 READ 1 true 1028:0712 Data6 DAT_1028_0712 1008:25ee FUN_1008_2554 READ 1 true 1028:0714 Data6 DAT_1028_0714 1008:25f2 FUN_1008_2554 WRITE 0 true 1028:4abe Data6 DAT_1028_4abe 1008:25f5 FUN_1008_2554 WRITE 0 true 1028:4ac0 Data6 DAT_1028_4ac0 1008:25ff FUN_1008_2554 WRITE 0 true 1028:0712 Data6 DAT_1028_0712 1008:2602 FUN_1008_2554 WRITE 0 true 1028:0714 Data6 DAT_1028_0714 1008:2615 FUN_1008_2608 DATA 0 true Stack[-0x52] - 1008:2621 FUN_1008_2608 CONDITIONAL_JUMP 0 true 1008:2626 Code2 LAB_1008_2626 1008:2624 FUN_1008_2608 CONDITIONAL_JUMP 0 true 1008:261e Code2 LAB_1008_261e 1008:2629 FUN_1008_2608 DATA 0 true Stack[-0x52] - 1008:2630 FUN_1008_2608 UNCONDITIONAL_CALL 0 true 1228:02bc EXTERNAL Ordinal_5 Ordinal_5 1008:2637 FUN_1008_2608 DATA 0 true Stack[-0x52] - 1008:2648 FUN_1008_2643 DATA 1 true Stack[0x4] - 1008:264b FUN_1008_2643 DATA 1 true Stack[0xc] - 1008:2653 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2660 Code2 LAB_1008_2660 1008:2655 FUN_1008_2643 DATA 1 true Stack[0x8] - 1008:265b FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2660 Code2 LAB_1008_2660 1008:265e FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2658 Code2 LAB_1008_2658 1008:2663 FUN_1008_2643 DATA 1 true Stack[0xc] - 1008:2669 FUN_1008_2643 UNCONDITIONAL_CALL 0 true 1008:2608 Code2 FUN_1008_2608 FUN_1008_2608 1008:266e FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2676 Code2 LAB_1008_2676 1008:2674 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:26a5 Code2 LAB_1008_26a5 1008:2676 FUN_1008_2643 DATA 1 true Stack[0xc] - 1008:2681 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:26a4 Code2 LAB_1008_26a4 1008:2685 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2693 Code2 LAB_1008_2693 1008:2687 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:268d Code2 LAB_1008_268d 1008:2690 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2683 Code2 LAB_1008_2683 1008:2693 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2651 Code2 LAB_1008_2651 1008:2698 FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2651 Code2 LAB_1008_2651 1008:269e FUN_1008_2643 CONDITIONAL_JUMP 0 true 1008:2651 Code2 LAB_1008_2651 1008:26a2 FUN_1008_2643 UNCONDITIONAL_JUMP 0 true 1008:2651 Code2 LAB_1008_2651 1008:26a5 FUN_1008_2643 DATA 1 true Stack[0xc] - 1008:26a8 FUN_1008_2643 DATA 1 true Stack[0xe] - 1008:26b8 FUN_1008_26b0 DATA 0 true Stack[0x12] - 1008:26bb FUN_1008_26b0 DATA 0 true Stack[0x10] - 1008:26c1 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2fe3 Code2 FUN_1008_2fe3 FUN_1008_2fe3 1008:26c6 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:26c9 FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:26cc FUN_1008_26b0 DATA 1 true Stack[-0x10] - 1008:26cf FUN_1008_26b0 DATA 1 true Stack[-0xe] - 1008:26d2 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:26e8 Code2 LAB_1008_26e8 1008:26d4 FUN_1008_26b0 DATA 0 true Stack[0x12] - 1008:26d7 FUN_1008_26b0 DATA 0 true Stack[0x10] - 1008:26dd FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2fe3 Code2 FUN_1008_2fe3 FUN_1008_2fe3 1008:26e2 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:26e5 FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:26e8 FUN_1008_26b0 DATA 1 true Stack[-0x10] - 1008:26eb FUN_1008_26b0 DATA 1 true Stack[-0xe] - 1008:26ee FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:26fe Code2 LAB_1008_26fe 1008:26f0 FUN_1008_26b0 DATA 1 true Stack[0x10] - 1008:26f3 FUN_1008_26b0 DATA 1 true Stack[0x12] - 1008:26f6 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:26f9 FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:26fc FUN_1008_26b0 UNCONDITIONAL_JUMP 0 true 1008:2701 Code2 LAB_1008_2701 1008:26fe FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:2701 FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:2704 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:270a FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2fbb Code2 FUN_1008_2fbb FUN_1008_2fbb 1008:270f FUN_1008_26b0 DATA 0 true Stack[-0x14] - 1008:2712 FUN_1008_26b0 DATA 0 true Stack[-0x12] - 1008:2715 FUN_1008_26b0 DATA 1 true Stack[-0x14] - 1008:2718 FUN_1008_26b0 DATA 1 true Stack[-0x12] - 1008:271b FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:272e Code2 LAB_1008_272e 1008:271d FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:2720 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:2723 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2ea9 Code2 FUN_1008_2ea9 FUN_1008_2ea9 1008:2728 FUN_1008_26b0 DATA 0 true Stack[-0x14] - 1008:272b FUN_1008_26b0 DATA 0 true Stack[-0x12] - 1008:272e FUN_1008_26b0 DATA 1 true Stack[-0x10] - 1008:2731 FUN_1008_26b0 DATA 1 true Stack[0x10] - 1008:2734 FUN_1008_26b0 DATA 0 true Stack[-0x8] - 1008:2737 FUN_1008_26b0 DATA 0 true Stack[-0x8] - 1008:273b FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:2742 Code2 LAB_1008_2742 1008:273d FUN_1008_26b0 DATA 0 true Stack[-0x8] - 1008:2742 FUN_1008_26b0 DATA 1 true Stack[-0x14] - 1008:2745 FUN_1008_26b0 DATA 1 true Stack[-0x10] - 1008:2748 FUN_1008_26b0 DATA 0 true Stack[-0xa] - 1008:274b FUN_1008_26b0 DATA 0 true Stack[-0xa] - 1008:274f FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:2756 Code2 LAB_1008_2756 1008:2751 FUN_1008_26b0 DATA 0 true Stack[-0xa] - 1008:2758 FUN_1008_26b0 DATA 0 true Stack[-0xc] - 1008:275b FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:275e FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:2764 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2fbb Code2 FUN_1008_2fbb FUN_1008_2fbb 1008:276b FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:277f Code2 LAB_1008_277f 1008:276d FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:2770 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:2776 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2fbb Code2 FUN_1008_2fbb FUN_1008_2fbb 1008:277d FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:2784 Code2 LAB_1008_2784 1008:277f FUN_1008_26b0 DATA 0 true Stack[-0xc] - 1008:2784 FUN_1008_26b0 DATA 0 true Stack[-0x8] - 1008:2788 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:2793 Code2 LAB_1008_2793 1008:278a FUN_1008_26b0 DATA 1 true Stack[-0xc] - 1008:2790 FUN_1008_26b0 DATA 0 true Stack[-0xc] - 1008:2793 FUN_1008_26b0 DATA 0 true Stack[-0xa] - 1008:2797 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:27a2 Code2 LAB_1008_27a2 1008:2799 FUN_1008_26b0 DATA 1 true Stack[-0xc] - 1008:279f FUN_1008_26b0 DATA 0 true Stack[-0xc] - 1008:27a2 FUN_1008_26b0 DATA 1 true Stack[-0x14] - 1008:27a9 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:27b4 Code2 LAB_1008_27b4 1008:27ab FUN_1008_26b0 DATA 1 true Stack[-0xc] - 1008:27b1 FUN_1008_26b0 DATA 0 true Stack[-0xc] - 1008:27b4 FUN_1008_26b0 DATA 1 true Stack[0xc] - 1008:27b7 FUN_1008_26b0 DATA 1 true Stack[0xe] - 1008:27ba FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:27d0 Code2 LAB_1008_27d0 1008:27bc FUN_1008_26b0 DATA 0 true Stack[0xe] - 1008:27bf FUN_1008_26b0 DATA 0 true Stack[0xc] - 1008:27c2 FUN_1008_26b0 DATA 0 true Stack[0x12] - 1008:27c5 FUN_1008_26b0 DATA 0 true Stack[0x10] - 1008:27c8 FUN_1008_26b0 DATA 0 true Stack[-0x8] - 1008:27cb FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2f07 Code2 FUN_1008_2f07 FUN_1008_2f07 1008:27d0 FUN_1008_26b0 DATA 1 true Stack[0x8] - 1008:27d3 FUN_1008_26b0 DATA 1 true Stack[0xa] - 1008:27d6 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:27ec Code2 LAB_1008_27ec 1008:27d8 FUN_1008_26b0 DATA 0 true Stack[0xa] - 1008:27db FUN_1008_26b0 DATA 0 true Stack[0x8] - 1008:27de FUN_1008_26b0 DATA 0 true Stack[-0xe] - 1008:27e1 FUN_1008_26b0 DATA 0 true Stack[-0x10] - 1008:27e4 FUN_1008_26b0 DATA 0 true Stack[-0xa] - 1008:27e7 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2f07 Code2 FUN_1008_2f07 FUN_1008_2f07 1008:27ec FUN_1008_26b0 DATA 1 true Stack[0x4] - 1008:27ef FUN_1008_26b0 DATA 1 true Stack[0x6] - 1008:27f2 FUN_1008_26b0 CONDITIONAL_JUMP 0 true 1008:2809 Code2 LAB_1008_2809 1008:27f4 FUN_1008_26b0 DATA 0 true Stack[0x6] - 1008:27f7 FUN_1008_26b0 DATA 0 true Stack[0x4] - 1008:27fa FUN_1008_26b0 DATA 0 true Stack[-0x12] - 1008:27fd FUN_1008_26b0 DATA 0 true Stack[-0x14] - 1008:2804 FUN_1008_26b0 UNCONDITIONAL_CALL 0 true 1008:2f07 Code2 FUN_1008_2f07 FUN_1008_2f07 1008:2809 FUN_1008_26b0 DATA 1 true Stack[-0xc] - 1008:280c FUN_1008_26b0 DATA 0 true Stack[-0x6] - 1008:280f FUN_1008_26b0 DATA 1 true Stack[-0x6] - 1008:2821 FUN_1008_2819 DATA 0 true Stack[0x6] - 1008:2824 FUN_1008_2819 DATA 0 true Stack[0x4] - 1008:2827 FUN_1008_2819 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1008:282c FUN_1008_2819 DATA 0 true Stack[-0xa] - 1008:282f FUN_1008_2819 UNCONDITIONAL_CALL 0 true 1228:0074 EXTERNAL GETDOSENVIRONMENT GETDOSENVIRONMENT 1008:2834 FUN_1008_2819 DATA 0 true Stack[-0xe] - 1008:2837 FUN_1008_2819 DATA 0 true Stack[-0xc] - 1008:283a FUN_1008_2819 DATA 1 true Stack[-0xe] - 1008:2841 FUN_1008_2819 CONDITIONAL_JUMP 0 true 1008:288e Code2 LAB_1008_288e 1008:2843 FUN_1008_2819 DATA 0 true Stack[-0xc] - 1008:2846 FUN_1008_2819 DATA 0 true Stack[-0xe] - 1008:2849 FUN_1008_2819 DATA 0 true Stack[0x6] - 1008:284c FUN_1008_2819 DATA 0 true Stack[0x4] - 1008:284f FUN_1008_2819 DATA 0 true Stack[-0xa] - 1008:2852 FUN_1008_2819 UNCONDITIONAL_CALL 0 true 1008:2f70 Code2 FUN_1008_2f70 FUN_1008_2f70 1008:2859 FUN_1008_2819 CONDITIONAL_JUMP 0 true 1008:287d Code2 LAB_1008_287d 1008:285b FUN_1008_2819 DATA 1 true Stack[-0xa] - 1008:285e FUN_1008_2819 DATA 1 true Stack[-0xe] - 1008:2867 FUN_1008_2819 CONDITIONAL_JUMP 0 true 1008:287d Code2 LAB_1008_287d 1008:2869 FUN_1008_2819 DATA 1 true Stack[-0xe] - 1008:286c FUN_1008_2819 DATA 1 true Stack[-0xc] - 1008:286f FUN_1008_2819 DATA 1 true Stack[-0xa] - 1008:2875 FUN_1008_2819 DATA 0 true Stack[-0x8] - 1008:2878 FUN_1008_2819 DATA 0 true Stack[-0x6] - 1008:287b FUN_1008_2819 UNCONDITIONAL_JUMP 0 true 1008:2896 Code2 LAB_1008_2896 1008:287d FUN_1008_2819 DATA 0 true Stack[-0xc] - 1008:2880 FUN_1008_2819 DATA 0 true Stack[-0xe] - 1008:2883 FUN_1008_2819 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1008:2889 FUN_1008_2819 DATA 0 true Stack[-0xe] - 1008:288c FUN_1008_2819 UNCONDITIONAL_JUMP 0 true 1008:283a Code2 LAB_1008_283a 1008:2890 FUN_1008_2819 DATA 0 true Stack[-0x8] - 1008:2893 FUN_1008_2819 DATA 0 true Stack[-0x6] - 1008:2896 FUN_1008_2819 DATA 1 true Stack[-0x8] - 1008:2899 FUN_1008_2819 DATA 1 true Stack[-0x6] - 1008:28a8 FUN_1008_28a3 UNCONDITIONAL_CALL 0 true 1020:03cb Code5 FUN_1020_03cb FUN_1020_03cb 1008:28af FUN_1008_28a3 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1008:28b4 FUN_1008_28a3 CONDITIONAL_JUMP 0 true 1008:28fd Code2 LAB_1008_28fd 1008:28b9 FUN_1008_28a3 DATA 1 true Stack[0x4] - 1008:28be FUN_1008_28a3 UNCONDITIONAL_CALL 0 true 1008:2d99 Code2 FUN_1008_2d99 FUN_1008_2d99 1008:28c3 FUN_1008_28a3 DATA 1 true Stack[0x4] - 1008:28cc FUN_1008_28a3 DATA 1 true Stack[0x10] - 1008:28d3 FUN_1008_28a3 DATA 0 true Stack[0xe] - 1008:28d6 FUN_1008_28a3 DATA 0 true Stack[0xc] - 1008:28d9 FUN_1008_28a3 DATA 1 true Stack[0xa] - 1008:28df FUN_1008_28a3 UNCONDITIONAL_CALL 0 true 1008:295c Code2 FUN_1008_295c FUN_1008_295c 1008:28e4 FUN_1008_28a3 DATA 1 true Stack[0x4] - 1008:28f0 FUN_1008_28a3 CONDITIONAL_JUMP 0 true 1008:28f4 Code2 LAB_1008_28f4 1008:28f2 FUN_1008_28a3 UNCONDITIONAL_JUMP 0 true 1008:28f6 Code2 LAB_1008_28f6 1008:28f4 FUN_1008_28a3 UNCONDITIONAL_JUMP 0 true 1008:28fd Code2 LAB_1008_28fd 1008:28f8 FUN_1008_28a3 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1008:28fd FUN_1008_28a3 DATA 1 true Stack[0x4] - 1008:290b FUN_1008_2906 UNCONDITIONAL_CALL 0 true 1020:03cb Code5 FUN_1020_03cb FUN_1020_03cb 1008:2910 FUN_1008_2906 DATA 1 true Stack[0x4] - 1008:2915 FUN_1008_2906 UNCONDITIONAL_CALL 0 true 1008:2932 Code2 FUN_1008_2932 FUN_1008_2932 1008:291d FUN_1008_2906 DATA 1 true Stack[0x4] - 1008:2922 FUN_1008_2906 UNCONDITIONAL_CALL 0 true 1008:2dcd Code2 FUN_1008_2dcd FUN_1008_2dcd 1008:2929 FUN_1008_2906 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1008:2937 FUN_1008_2932 UNCONDITIONAL_CALL 0 true 1020:03cb Code5 FUN_1020_03cb FUN_1020_03cb 1008:293c FUN_1008_2932 DATA 1 true Stack[0x4] - 1008:2944 FUN_1008_2932 CONDITIONAL_JUMP 0 true 1008:294f Code2 LAB_1008_294f 1008:294a FUN_1008_2932 UNCONDITIONAL_CALL 0 true 1228:00a8 EXTERNAL TIMEKILLEVENT TIMEKILLEVENT 1008:294f FUN_1008_2932 DATA 1 true Stack[0x4] - 1008:2962 FUN_1008_295c UNCONDITIONAL_CALL 0 true 1020:03cb Code5 FUN_1020_03cb FUN_1020_03cb 1008:296a FUN_1008_295c DATA 1 true Stack[0x4] - 1008:2971 FUN_1008_295c DATA 0 true Stack[0xc] - 1008:2974 FUN_1008_295c DATA 0 true Stack[0xa] - 1008:2977 FUN_1008_295c DATA 1 true Stack[0x8] - 1008:297b FUN_1008_295c UNCONDITIONAL_CALL 0 true 1228:0094 EXTERNAL SYSTEMTIMERMAKE SYSTEMTIMERMAKE 1008:2980 FUN_1008_295c DATA 0 true Stack[-0x4] - 1008:2983 FUN_1008_295c DATA 1 true Stack[-0x4] - 1008:298f FUN_1008_298a UNCONDITIONAL_CALL 0 true 1020:03cb Code5 FUN_1020_03cb FUN_1020_03cb 1008:299d FUN_1008_2996 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1008:29a2 FUN_1008_2996 CONDITIONAL_JUMP 0 true 1008:2a02 Code2 LAB_1008_2a02 1008:29a4 FUN_1008_2996 DATA 0 true Stack[0x10] - 1008:29a7 FUN_1008_2996 DATA 0 true Stack[0xe] - 1008:29ad FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:29b2 FUN_1008_2996 UNCONDITIONAL_CALL 0 true 1018:0341 Code4 FUN_1018_0341 FUN_1018_0341 1008:29b7 FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:29bc FUN_1008_2996 UNCONDITIONAL_CALL 0 true 1018:0627 Code4 FUN_1018_0627 FUN_1018_0627 1008:29c1 FUN_1008_2996 DATA 0 true Stack[0xc] - 1008:29c5 FUN_1008_2996 CONDITIONAL_JUMP 0 true 1008:29df Code2 LAB_1008_29df 1008:29c7 FUN_1008_2996 DATA 0 true Stack[0xc] - 1008:29ca FUN_1008_2996 DATA 0 true Stack[0xa] - 1008:29cd FUN_1008_2996 UNCONDITIONAL_CALL 0 true 1008:302c Code2 FUN_1008_302c FUN_1008_302c 1008:29d2 FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:29dd FUN_1008_2996 UNCONDITIONAL_JUMP 0 true 1008:29f0 Code2 LAB_1008_29f0 1008:29df FUN_1008_2996 DATA 1 true Stack[0xa] - 1008:29e2 FUN_1008_2996 DATA 1 true Stack[0xc] - 1008:29e5 FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:29f0 FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:2a02 FUN_1008_2996 DATA 1 true Stack[0x4] - 1008:2a13 FUN_1008_2a0e DATA 1 true Stack[0x4] - 1008:2a1b FUN_1008_2a0e CONDITIONAL_JUMP 0 true 1008:2a2a Code2 LAB_1008_2a2a 1008:2a25 FUN_1008_2a0e UNCONDITIONAL_CALL 0 true 1008:3099 Code2 FUN_1008_3099 FUN_1008_3099 1008:2a2d FUN_1008_2a0e DATA 1 true Stack[0x4] - 1008:2a32 FUN_1008_2a0e UNCONDITIONAL_CALL 0 true 1018:03ff Code4 FUN_1018_03ff FUN_1018_03ff 1008:2a39 FUN_1008_2a0e UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1008:2a4d FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2a55 FUN_1008_2a45 CONDITIONAL_JUMP 0 true 1008:2ac9 Code2 LAB_1008_2ac9 1008:2a59 FUN_1008_2a45 UNCONDITIONAL_CALL 0 true 1018:0627 Code4 FUN_1018_0627 FUN_1018_0627 1008:2a5e FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2a63 FUN_1008_2a45 UNCONDITIONAL_CALL 0 true 1018:05f3 Code4 FUN_1018_05f3 FUN_1018_05f3 1008:2a68 FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2a78 FUN_1008_2a45 CONDITIONAL_JUMP 0 true 1008:2a81 Code2 LAB_1008_2a81 1008:2a7c FUN_1008_2a45 DATA 0 true Stack[-0x8] - 1008:2a7f FUN_1008_2a45 UNCONDITIONAL_JUMP 0 true 1008:2a8f Code2 LAB_1008_2a8f 1008:2a81 FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2a8c FUN_1008_2a45 DATA 0 true Stack[-0x8] - 1008:2a8f FUN_1008_2a45 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:2a93 FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2a9e FUN_1008_2a45 DATA 0 true Stack[-0x8] - 1008:2ab1 FUN_1008_2a45 READ 0 true 1028:0654 Data6 DAT_1028_0654 1008:2ab1 FUN_1008_2a45 READ 0 false 1028:0652 Data6 DAT_1028_0652 1008:2ab1 FUN_1008_2a45 COMPUTED_CALL -1 true 1228:0294 EXTERNAL CREATEDIALOGPARAM CREATEDIALOGPARAM 1008:2ab5 FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2ac1 FUN_1008_2a45 CONDITIONAL_JUMP 0 true 1008:2ac9 Code2 LAB_1008_2ac9 1008:2ac9 FUN_1008_2a45 DATA 1 true Stack[0x4] - 1008:2ad3 FUN_1008_2a45 CONDITIONAL_JUMP 0 true 1008:2ad6 Code2 LAB_1008_2ad6 1008:2ad6 FUN_1008_2a45 DATA 0 true Stack[-0x5] - 1008:2ad9 FUN_1008_2a45 DATA 1 true Stack[-0x5] - 1008:2aeb FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2af3 FUN_1008_2ae3 CONDITIONAL_JUMP 0 true 1008:2af8 Code2 LAB_1008_2af8 1008:2af5 FUN_1008_2ae3 UNCONDITIONAL_JUMP 0 true 1008:2b9d Code2 LAB_1008_2b9d 1008:2afa FUN_1008_2ae3 UNCONDITIONAL_CALL 0 true 1018:0627 Code4 FUN_1018_0627 FUN_1018_0627 1008:2aff FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b04 FUN_1008_2ae3 UNCONDITIONAL_CALL 0 true 1018:05f3 Code4 FUN_1018_05f3 FUN_1018_05f3 1008:2b09 FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b19 FUN_1008_2ae3 CONDITIONAL_JUMP 0 true 1008:2b22 Code2 LAB_1008_2b22 1008:2b1d FUN_1008_2ae3 DATA 0 true Stack[-0x8] - 1008:2b20 FUN_1008_2ae3 UNCONDITIONAL_JUMP 0 true 1008:2b30 Code2 LAB_1008_2b30 1008:2b22 FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b2d FUN_1008_2ae3 DATA 0 true Stack[-0x8] - 1008:2b30 FUN_1008_2ae3 READ 1 true 1028:064e Data6 DAT_1028_064e 1008:2b3c FUN_1008_2ae3 DATA 0 true Stack[-0xe] - 1008:2b3f FUN_1008_2ae3 DATA 0 true Stack[-0xc] - 1008:2b42 FUN_1008_2ae3 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1008:2b46 FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b51 FUN_1008_2ae3 DATA 0 true Stack[-0x8] - 1008:2b64 FUN_1008_2ae3 READ 0 true 1028:0658 Data6 DAT_1028_0658 1008:2b64 FUN_1008_2ae3 READ 0 false 1028:0656 Data6 DAT_1028_0656 1008:2b64 FUN_1008_2ae3 COMPUTED_CALL -1 true 1228:0290 EXTERNAL DIALOGBOXPARAM DIALOGBOXPARAM 1008:2b68 FUN_1008_2ae3 DATA 0 true Stack[-0xa] - 1008:2b6b FUN_1008_2ae3 DATA 1 true Stack[-0xe] - 1008:2b6e FUN_1008_2ae3 DATA 1 true Stack[-0xc] - 1008:2b71 FUN_1008_2ae3 READ 1 true 1028:064e Data6 DAT_1028_064e 1008:2b7d FUN_1008_2ae3 DATA 0 true Stack[-0xa] - 1008:2b81 FUN_1008_2ae3 CONDITIONAL_JUMP 0 true 1008:2b8c Code2 LAB_1008_2b8c 1008:2b83 FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b8c FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2b95 FUN_1008_2ae3 DATA 1 true Stack[-0xa] - 1008:2b98 FUN_1008_2ae3 DATA 0 true Stack[-0x6] - 1008:2b9b FUN_1008_2ae3 UNCONDITIONAL_JUMP 0 true 1008:2ba7 Code2 LAB_1008_2ba7 1008:2b9d FUN_1008_2ae3 DATA 1 true Stack[0x4] - 1008:2ba4 FUN_1008_2ae3 DATA 0 true Stack[-0x6] - 1008:2ba7 FUN_1008_2ae3 DATA 1 true Stack[-0x6] - 1008:2bb6 FUN_1008_2bb1 DATA 1 true Stack[0x6] - 1008:2bbe FUN_1008_2bb1 CONDITIONAL_JUMP 0 true 1008:2bca Code2 LAB_1008_2bca 1008:2bc0 FUN_1008_2bb1 DATA 1 true Stack[0x6] - 1008:2bc5 FUN_1008_2bb1 UNCONDITIONAL_CALL 0 true 1018:060d Code4 FUN_1018_060d FUN_1018_060d 1008:2bd6 FUN_1008_2bd1 DATA 1 true Stack[0x4] - 1008:2bde FUN_1008_2bd1 CONDITIONAL_JUMP 0 true 1008:2c01 Code2 LAB_1008_2c01 1008:2be8 FUN_1008_2bd1 DATA 1 true Stack[0x4] - 1008:2bed FUN_1008_2bd1 UNCONDITIONAL_CALL 0 true 1018:085a Code4 FUN_1018_085a FUN_1018_085a 1008:2bf2 FUN_1008_2bd1 DATA 1 true Stack[0x4] - 1008:2bf9 FUN_1008_2bd1 DATA 0 true Stack[0x8] - 1008:2bfc FUN_1008_2bd1 UNCONDITIONAL_CALL 0 true 1228:020c EXTERNAL ENDDIALOG ENDDIALOG 1008:2c0d FUN_1008_2c08 DATA 1 true Stack[0x4] - 1008:2c24 FUN_1008_2c1f DATA 1 true Stack[0x4] - 1008:2c2b FUN_1008_2c1f READ 1 true 1028:064e Data6 DAT_1028_064e 1008:2c33 FUN_1008_2c1f CONDITIONAL_JUMP 0 true 1008:2c5d Code2 LAB_1008_2c5d 1008:2c39 FUN_1008_2c1f CONDITIONAL_JUMP 0 true 1008:2c5d Code2 LAB_1008_2c5d 1008:2c3b FUN_1008_2c1f READ 1 true 1028:064e Data6 DAT_1028_064e 1008:2c4b FUN_1008_2c1f CONDITIONAL_JUMP 0 true 1008:2c4e Code2 LAB_1008_2c4e 1008:2c50 FUN_1008_2c1f DATA 1 true Stack[0x8] - 1008:2c5b FUN_1008_2c1f UNCONDITIONAL_JUMP 0 true 1008:2c7c Code2 LAB_1008_2c7c 1008:2c5d FUN_1008_2c1f DATA 1 true Stack[0x4] - 1008:2c6c FUN_1008_2c1f CONDITIONAL_JUMP 0 true 1008:2c6f Code2 LAB_1008_2c6f 1008:2c71 FUN_1008_2c1f DATA 1 true Stack[0x8] - 1008:2c8b FUN_1008_2c83 DATA 1 true Stack[0x8] - 1008:2c92 FUN_1008_2c83 UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1008:2c97 FUN_1008_2c83 DATA 1 true Stack[0x8] - 1008:2c9e FUN_1008_2c83 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1008:2ca3 FUN_1008_2c83 DATA 0 true Stack[-0x8] - 1008:2ca6 FUN_1008_2c83 DATA 0 true Stack[-0x6] - 1008:2ca9 FUN_1008_2c83 DATA 1 true Stack[-0x8] - 1008:2cac FUN_1008_2c83 DATA 1 true Stack[-0x6] - 1008:2caf FUN_1008_2c83 CONDITIONAL_JUMP 0 true 1008:2ccd Code2 LAB_1008_2ccd 1008:2cb1 FUN_1008_2c83 DATA 1 true Stack[-0x8] - 1008:2cbc FUN_1008_2c83 CONDITIONAL_JUMP 0 true 1008:2ccd Code2 LAB_1008_2ccd 1008:2cbe FUN_1008_2c83 DATA 1 true Stack[-0x8] - 1008:2ccd FUN_1008_2c83 WRITE 0 true 1028:06f2 Data6 DAT_1028_06f2 1008:2cde FUN_1008_2cd9 DATA 1 true Stack[0x8] - 1008:2cf7 FUN_1008_2cf2 DATA 1 true Stack[0x4] - 1008:2cff FUN_1008_2cf2 CONDITIONAL_JUMP 0 true 1008:2d29 Code2 LAB_1008_2d29 1008:2d0b FUN_1008_2cf2 CONDITIONAL_JUMP 0 true 1008:2d27 Code2 LAB_1008_2d27 1008:2d0f FUN_1008_2cf2 DATA 1 true Stack[0x4] - 1008:2d1c FUN_1008_2cf2 DATA 1 true Stack[0x4] - 1008:2d27 FUN_1008_2cf2 UNCONDITIONAL_JUMP 0 true 1008:2d33 Code2 LAB_1008_2d33 1008:2d29 FUN_1008_2cf2 DATA 1 true Stack[0x4] - 1008:2d2e FUN_1008_2cf2 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1008:2d3f FUN_1008_2d3a DATA 1 true Stack[0x4] - 1008:2d47 FUN_1008_2d3a CONDITIONAL_JUMP 0 true 1008:2d55 Code2 LAB_1008_2d55 1008:2d53 FUN_1008_2d3a UNCONDITIONAL_JUMP 0 true 1008:2d5f Code2 LAB_1008_2d5f 1008:2d55 FUN_1008_2d3a DATA 1 true Stack[0x4] - 1008:2d5a FUN_1008_2d3a UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1008:2d6b FUN_1008_2d66 DATA 1 true Stack[0x8] - 1008:2d70 FUN_1008_2d66 DATA 1 true Stack[0x4] - 1008:2d7b FUN_1008_2d66 UNCONDITIONAL_CALL 0 true 1020:16e1 Code5 FUN_1020_16e1 FUN_1020_16e1 1008:2d8f FUN_1008_2d87 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1008:2da0 FUN_1008_2d99 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1008:2da5 FUN_1008_2d99 CONDITIONAL_JUMP 0 true 1008:2da7 Code2 LAB_1008_2da7 1008:2da7 FUN_1008_2d99 DATA 1 true Stack[0x4] - 1008:2dbb FUN_1008_2db3 DATA 1 true Stack[0x4] - 1008:2dd4 FUN_1008_2dcd UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1008:2de8 FUN_1008_2de0 READ 1 true 1028:06f6 Data6 DAT_1028_06f6 1008:2deb FUN_1008_2de0 READ 1 true 1028:06f8 Data6 DAT_1028_06f8 1008:2df1 FUN_1008_2de0 CONDITIONAL_JUMP 0 true 1008:2df4 Code2 LAB_1008_2df4 1008:2df4 FUN_1008_2de0 DATA 0 true Stack[-0x5] - 1008:2df7 FUN_1008_2de0 DATA 1 true Stack[-0x5] - 1008:2e04 FUN_1008_2dff UNCONDITIONAL_CALL 0 true 1008:2de0 Code2 FUN_1008_2de0 FUN_1008_2de0 1008:2e0b FUN_1008_2dff CONDITIONAL_JUMP 0 true 1008:2e1d Code2 LAB_1008_2e1d 1008:2e0d FUN_1008_2dff READ 0 true 1028:06f4 Data6 DAT_1028_06f4 1008:2e11 FUN_1008_2dff UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:2e16 FUN_1008_2dff WRITE 0 true 1028:06f6 Data6 DAT_1028_06f6 1008:2e19 FUN_1008_2dff WRITE 0 true 1028:06f8 Data6 DAT_1028_06f8 1008:2e2a FUN_1008_2e22 DATA 0 true Stack[0x4] - 1008:2e2e FUN_1008_2e22 CONDITIONAL_JUMP 0 true 1008:2e6c Code2 LAB_1008_2e6c 1008:2e30 FUN_1008_2e22 READ 0 true 1028:06fa Data6 DAT_1028_06fa 1008:2e35 FUN_1008_2e22 CONDITIONAL_JUMP 0 true 1008:2e3e Code2 LAB_1008_2e3e 1008:2e37 FUN_1008_2e22 DATA 0 true Stack[-0x6] - 1008:2e3c FUN_1008_2e22 UNCONDITIONAL_JUMP 0 true 1008:2e6c Code2 LAB_1008_2e6c 1008:2e3e FUN_1008_2e22 UNCONDITIONAL_CALL 0 true 1008:2de0 Code2 FUN_1008_2de0 FUN_1008_2de0 1008:2e45 FUN_1008_2e22 CONDITIONAL_JUMP 0 true 1008:2e4e Code2 LAB_1008_2e4e 1008:2e49 FUN_1008_2e22 DATA 0 true Stack[-0x6] - 1008:2e4c FUN_1008_2e22 UNCONDITIONAL_JUMP 0 true 1008:2e6c Code2 LAB_1008_2e6c 1008:2e4e FUN_1008_2e22 READ 0 true 1028:06f8 Data6 DAT_1028_06f8 1008:2e52 FUN_1008_2e22 READ 0 true 1028:06f6 Data6 DAT_1028_06f6 1008:2e56 FUN_1008_2e22 READ 0 true 1028:06f4 Data6 DAT_1028_06f4 1008:2e5a FUN_1008_2e22 UNCONDITIONAL_CALL 0 true 1020:0147 Code5 FUN_1020_0147 FUN_1020_0147 1008:2e61 FUN_1008_2e22 WRITE 0 true 1028:06f6 Data6 DAT_1028_06f6 1008:2e64 FUN_1008_2e22 WRITE 0 true 1028:06f8 Data6 DAT_1028_06f8 1008:2e67 FUN_1008_2e22 DATA 0 true Stack[-0x6] - 1008:2e6c FUN_1008_2e22 DATA 1 true Stack[-0x6] - 1008:2e7b FUN_1008_2e76 UNCONDITIONAL_CALL 0 true 1008:2dff Code2 FUN_1008_2dff FUN_1008_2dff 1008:2e86 FUN_1008_2e76 WRITE 0 true 1028:070e Data6 DAT_1028_070e 1008:2e89 FUN_1008_2e76 WRITE 0 true 1028:0710 Data6 DAT_1028_0710 1008:2e96 FUN_1008_2e92 DATA 1 true Stack[0x4] - 1008:2ead FUN_1008_2ea9 DATA 1 true Stack[0x4] - 1008:2ec5 FUN_1008_2ec0 DATA 1 true Stack[0x6] - 1008:2ec8 FUN_1008_2ec0 DATA 1 true Stack[0xa] - 1008:2ecf FUN_1008_2ec0 DATA 1 true Stack[0x4] - 1008:2ed4 FUN_1008_2ec0 CONDITIONAL_JUMP 0 true 1008:2edd Code2 LAB_1008_2edd 1008:2eea FUN_1008_2ee5 DATA 1 true Stack[0x4] - 1008:2ef6 FUN_1008_2ee5 DATA 1 true Stack[0x4] - 1008:2ef9 FUN_1008_2ee5 DATA 1 true Stack[0x8] - 1008:2f0c FUN_1008_2f07 DATA 1 true Stack[0x6] - 1008:2f0f FUN_1008_2f07 DATA 1 true Stack[0x4] - 1008:2f1c FUN_1008_2f07 DATA 1 true Stack[0x6] - 1008:2f1f FUN_1008_2f07 DATA 1 true Stack[0xa] - 1008:2f34 FUN_1008_2f2f DATA 1 true Stack[0x4] - 1008:2f37 FUN_1008_2f2f DATA 1 true Stack[0x8] - 1008:2f50 FUN_1008_2f4d DATA 0 true Stack[0xa] - 1008:2f53 FUN_1008_2f4d DATA 0 true Stack[0x8] - 1008:2f57 FUN_1008_2f4d UNCONDITIONAL_CALL 0 true 1008:2ea9 Code2 FUN_1008_2ea9 FUN_1008_2ea9 1008:2f5c FUN_1008_2f4d DATA 0 true Stack[0x6] - 1008:2f5f FUN_1008_2f4d DATA 0 true Stack[0x4] - 1008:2f63 FUN_1008_2f4d UNCONDITIONAL_CALL 0 true 1008:2ee5 Code2 FUN_1008_2ee5 FUN_1008_2ee5 1008:2f66 FUN_1008_2f4d DATA 1 true Stack[0x8] - 1008:2f69 FUN_1008_2f4d DATA 1 true Stack[0xa] - 1008:2f75 FUN_1008_2f70 DATA 1 true Stack[0x6] - 1008:2f7a FUN_1008_2f70 DATA 1 true Stack[0x4] - 1008:2f7f FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fb6 Code2 LAB_1008_2fb6 1008:2f8d FUN_1008_2f70 DATA 1 true Stack[0xa] - 1008:2f92 FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fb6 Code2 LAB_1008_2fb6 1008:2f99 FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fa1 Code2 LAB_1008_2fa1 1008:2f9d FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fa1 Code2 LAB_1008_2fa1 1008:2fa8 FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fb2 Code2 LAB_1008_2fb2 1008:2fad FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2fb2 Code2 LAB_1008_2fb2 1008:2fb4 FUN_1008_2f70 CONDITIONAL_JUMP 0 true 1008:2f90 Code2 LAB_1008_2f90 1008:2fbf FUN_1008_2fbb DATA 1 true Stack[0x6] - 1008:2fcf FUN_1008_2fbb DATA 1 true Stack[0x4] - 1008:2fd8 FUN_1008_2fbb CONDITIONAL_JUMP 0 true 1008:2fdf Code2 LAB_1008_2fdf 1008:2fe7 FUN_1008_2fe3 DATA 1 true Stack[0x6] - 1008:2ff5 FUN_1008_2fe3 DATA 1 true Stack[0x4] - 1008:2ffe FUN_1008_2fe3 CONDITIONAL_JUMP 0 true 1008:3005 Code2 LAB_1008_3005 1008:300f FUN_1008_300a DATA 1 true Stack[0x4] - 1008:301c FUN_1008_300a DATA 1 true Stack[0x4] - 1008:301f FUN_1008_300a DATA 1 true Stack[0x8] - 1008:3036 FUN_1008_302c DATA 0 true Stack[-0x8] - 1008:3039 FUN_1008_302c DATA 0 true Stack[-0x6] - 1008:303c FUN_1008_302c DATA 1 true Stack[0x4] - 1008:303f FUN_1008_302c DATA 1 true Stack[0x6] - 1008:3042 FUN_1008_302c CONDITIONAL_JUMP 0 true 1008:308c Code2 LAB_1008_308c 1008:3044 FUN_1008_302c DATA 1 true Stack[0x4] - 1008:304b FUN_1008_302c CONDITIONAL_JUMP 0 true 1008:308c Code2 LAB_1008_308c 1008:304d FUN_1008_302c DATA 0 true Stack[0x6] - 1008:3050 FUN_1008_302c DATA 0 true Stack[0x4] - 1008:3053 FUN_1008_302c UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1008:3059 FUN_1008_302c DATA 0 true Stack[-0xa] - 1008:305c FUN_1008_302c DATA 0 true Stack[-0xa] - 1008:305f FUN_1008_302c UNCONDITIONAL_CALL 0 true 1020:012d Code5 FUN_1020_012d FUN_1020_012d 1008:3064 FUN_1008_302c DATA 0 true Stack[-0xe] - 1008:3067 FUN_1008_302c DATA 0 true Stack[-0xc] - 1008:306a FUN_1008_302c DATA 1 true Stack[-0xe] - 1008:306d FUN_1008_302c DATA 1 true Stack[-0xc] - 1008:3070 FUN_1008_302c CONDITIONAL_JUMP 0 true 1008:308c Code2 LAB_1008_308c 1008:3072 FUN_1008_302c DATA 0 true Stack[-0xc] - 1008:3075 FUN_1008_302c DATA 0 true Stack[-0xe] - 1008:3078 FUN_1008_302c DATA 0 true Stack[0x6] - 1008:307b FUN_1008_302c DATA 0 true Stack[0x4] - 1008:307e FUN_1008_302c DATA 0 true Stack[-0xa] - 1008:3081 FUN_1008_302c UNCONDITIONAL_CALL 0 true 1008:2ec0 Code2 FUN_1008_2ec0 FUN_1008_2ec0 1008:3086 FUN_1008_302c DATA 0 true Stack[-0x8] - 1008:3089 FUN_1008_302c DATA 0 true Stack[-0x6] - 1008:308c FUN_1008_302c DATA 1 true Stack[-0x8] - 1008:308f FUN_1008_302c DATA 1 true Stack[-0x6] - 1008:309e FUN_1008_3099 DATA 1 true Stack[0x4] - 1008:30a1 FUN_1008_3099 DATA 1 true Stack[0x6] - 1008:30a4 FUN_1008_3099 CONDITIONAL_JUMP 0 true 1008:30be Code2 LAB_1008_30be 1008:30a6 FUN_1008_3099 DATA 0 true Stack[0x6] - 1008:30a9 FUN_1008_3099 DATA 0 true Stack[0x4] - 1008:30ac FUN_1008_3099 DATA 0 true Stack[0x6] - 1008:30af FUN_1008_3099 DATA 0 true Stack[0x4] - 1008:30b2 FUN_1008_3099 UNCONDITIONAL_CALL 0 true 1008:2e92 Code2 FUN_1008_2e92 FUN_1008_2e92 1008:30b9 FUN_1008_3099 UNCONDITIONAL_CALL 0 true 1020:0147 Code5 FUN_1020_0147 FUN_1020_0147 1010:0007 FUN_1010_0002 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:000c FUN_1010_0002 CONDITIONAL_JUMP 0 true 1010:0017 Code3 LAB_1010_0017 1010:000e FUN_1010_0002 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:0012 FUN_1010_0002 UNCONDITIONAL_CALL 0 true 1228:0064 EXTERNAL FREELIBRARY FREELIBRARY 1010:0017 FUN_1010_0002 WRITE 0 true 1028:4784 Data6 DAT_1028_4784 1010:001e FUN_1010_0002 WRITE 0 true 1028:4750 Data6 DAT_1028_4750 1010:0021 FUN_1010_0002 WRITE 0 true 1028:4752 Data6 DAT_1028_4752 1010:0026 FUN_1010_0002 WRITE 0 true 1028:4754 Data6 DAT_1028_4754 1010:0029 FUN_1010_0002 WRITE 0 true 1028:4756 Data6 DAT_1028_4756 1010:002e FUN_1010_0002 WRITE 0 true 1028:4758 Data6 DAT_1028_4758 1010:0031 FUN_1010_0002 WRITE 0 true 1028:475a Data6 DAT_1028_475a 1010:0036 FUN_1010_0002 WRITE 0 true 1028:475c Data6 DAT_1028_475c 1010:0039 FUN_1010_0002 WRITE 0 true 1028:475e Data6 DAT_1028_475e 1010:003e FUN_1010_0002 WRITE 0 true 1028:4760 Data6 DAT_1028_4760 1010:0041 FUN_1010_0002 WRITE 0 true 1028:4762 Data6 DAT_1028_4762 1010:0046 FUN_1010_0002 WRITE 0 true 1028:4764 Data6 DAT_1028_4764 1010:0049 FUN_1010_0002 WRITE 0 true 1028:4766 Data6 DAT_1028_4766 1010:004e FUN_1010_0002 WRITE 0 true 1028:4768 Data6 DAT_1028_4768 1010:0051 FUN_1010_0002 WRITE 0 true 1028:476a Data6 DAT_1028_476a 1010:0056 FUN_1010_0002 WRITE 0 true 1028:476c Data6 DAT_1028_476c 1010:0059 FUN_1010_0002 WRITE 0 true 1028:476e Data6 DAT_1028_476e 1010:005e FUN_1010_0002 WRITE 0 true 1028:4770 Data6 DAT_1028_4770 1010:0061 FUN_1010_0002 WRITE 0 true 1028:4772 Data6 DAT_1028_4772 1010:0066 FUN_1010_0002 WRITE 0 true 1028:4774 Data6 DAT_1028_4774 1010:0069 FUN_1010_0002 WRITE 0 true 1028:4776 Data6 DAT_1028_4776 1010:006e FUN_1010_0002 WRITE 0 true 1028:4778 Data6 DAT_1028_4778 1010:0071 FUN_1010_0002 WRITE 0 true 1028:477a Data6 DAT_1028_477a 1010:007e FUN_1010_0079 READ 0 true 1028:4784 Data6 DAT_1028_4784 1010:0083 FUN_1010_0079 CONDITIONAL_JUMP 0 true 1010:009d Code3 LAB_1010_009d 1010:0085 FUN_1010_0079 READ 1 true 1028:4778 Data6 DAT_1028_4778 1010:0088 FUN_1010_0079 READ 1 true 1028:477a Data6 DAT_1028_477a 1010:008c FUN_1010_0079 CONDITIONAL_JUMP 0 true 1010:009d Code3 LAB_1010_009d 1010:008e FUN_1010_0079 UNCONDITIONAL_CALL 0 true 1228:0020 EXTERNAL GETCURRENTTASK GETCURRENTTASK 1010:0094 FUN_1010_0079 READ 0 true 1028:477a Data6 DAT_1028_477a 1010:0094 FUN_1010_0079 READ 0 false 1028:4778 Data6 DAT_1028_4778 1010:0098 FUN_1010_0079 UNCONDITIONAL_CALL 0 true 1010:0002 Code3 FUN_1010_0002 FUN_1010_0002 1010:00ab FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:00af FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:00b4 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:00b9 FUN_1010_00a2 DATA 0 true Stack[0xa] - 1010:00bc FUN_1010_00a2 DATA 0 true Stack[0x8] - 1010:00bf FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:00c5 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2643 Code2 FUN_1008_2643 FUN_1008_2643 1010:00ca FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:00ce FUN_1010_00a2 CONDITIONAL_JUMP 0 true 1010:00d7 Code3 LAB_1010_00d7 1010:00d0 FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:00d4 FUN_1010_00a2 UNCONDITIONAL_JUMP 0 true 1010:01b8 Code3 LAB_1010_01b8 1010:00d7 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:00e0 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1228:007c EXTERNAL GETWINDOWSDIRECTORY GETWINDOWSDIRECTORY 1010:00e5 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:00ea FUN_1010_00a2 DATA 0 true Stack[0xa] - 1010:00ed FUN_1010_00a2 DATA 0 true Stack[0x8] - 1010:00f0 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:00f6 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2643 Code2 FUN_1008_2643 FUN_1008_2643 1010:00fb FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:00ff FUN_1010_00a2 CONDITIONAL_JUMP 0 true 1010:0108 Code3 LAB_1010_0108 1010:0101 FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:0105 FUN_1010_00a2 UNCONDITIONAL_JUMP 0 true 1010:01b8 Code3 LAB_1010_01b8 1010:0108 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:0111 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1228:0080 EXTERNAL GETSYSTEMDIRECTORY GETSYSTEMDIRECTORY 1010:0116 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:011b FUN_1010_00a2 DATA 0 true Stack[0xa] - 1010:011e FUN_1010_00a2 DATA 0 true Stack[0x8] - 1010:0121 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:0127 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2643 Code2 FUN_1008_2643 FUN_1008_2643 1010:012c FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:0130 FUN_1010_00a2 CONDITIONAL_JUMP 0 true 1010:0139 Code3 LAB_1010_0139 1010:0132 FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:0136 FUN_1010_00a2 UNCONDITIONAL_JUMP 0 true 1010:01b8 Code3 LAB_1010_01b8 1010:0139 FUN_1010_00a2 DATA 0 true Stack[0x6] - 1010:013c FUN_1010_00a2 DATA 0 true Stack[0x4] - 1010:013f FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1228:0024 EXTERNAL GETMODULEHANDLE GETMODULEHANDLE 1010:0145 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:014e FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1228:0028 EXTERNAL GETMODULEFILENAME GETMODULEFILENAME 1010:0153 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:0159 FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:015f FUN_1010_00a2 DATA 0 true Stack[-0x163] - 1010:0165 FUN_1010_00a2 DATA 0 true Stack[-0x15a] - 1010:016b FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:26b0 Code2 FUN_1008_26b0 FUN_1008_26b0 1010:0170 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:0175 FUN_1010_00a2 DATA 0 true Stack[0xa] - 1010:0178 FUN_1010_00a2 DATA 0 true Stack[0x8] - 1010:017b FUN_1010_00a2 DATA 0 true Stack[-0x155] - 1010:0181 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2643 Code2 FUN_1008_2643 FUN_1008_2643 1010:0186 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:018a FUN_1010_00a2 CONDITIONAL_JUMP 0 true 1010:0192 Code3 LAB_1010_0192 1010:018c FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:0190 FUN_1010_00a2 UNCONDITIONAL_JUMP 0 true 1010:01b8 Code3 LAB_1010_01b8 1010:0192 FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:0197 FUN_1010_00a2 DATA 0 true Stack[0xa] - 1010:019a FUN_1010_00a2 DATA 0 true Stack[0x8] - 1010:01a2 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2819 Code2 FUN_1008_2819 FUN_1008_2819 1010:01a9 FUN_1010_00a2 UNCONDITIONAL_CALL 0 true 1008:2643 Code2 FUN_1008_2643 FUN_1008_2643 1010:01ae FUN_1010_00a2 DATA 0 true Stack[-0x55] - 1010:01b2 FUN_1010_00a2 CONDITIONAL_JUMP 0 true 1010:01b8 Code3 LAB_1010_01b8 1010:01b4 FUN_1010_00a2 DATA 0 true Stack[-0x5] - 1010:01b8 FUN_1010_00a2 DATA 1 true Stack[-0x5] - 1010:01ca FUN_1010_01c2 DATA 0 true Stack[-0x5] - 1010:01ce FUN_1010_01c2 READ 0 true 1028:4784 Data6 DAT_1028_4784 1010:01d3 FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:01d8 Code3 LAB_1010_01d8 1010:01d5 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:03a5 Code3 LAB_1010_03a5 1010:01d8 FUN_1010_01c2 READ 0 true 1028:478c Data6 DAT_1028_478c 1010:01dd FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:0209 Code3 LAB_1010_0209 1010:01e4 FUN_1010_01c2 DATA 0 true Stack[0xc] - 1010:01e7 FUN_1010_01c2 DATA 0 true Stack[0xa] - 1010:01ea FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1010:00a2 Code3 FUN_1010_00a2 FUN_1010_00a2 1010:01f1 FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:0202 Code3 LAB_1010_0202 1010:01f8 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:0060 EXTERNAL LOADLIBRARY LOADLIBRARY 1010:01fd FUN_1010_01c2 WRITE 0 true 1028:4781 Data6 DAT_1028_4781 1010:0200 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:0207 Code3 LAB_1010_0207 1010:0204 FUN_1010_01c2 WRITE 0 true 1028:4781 Data6 DAT_1028_4781 1010:0207 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:0225 Code3 LAB_1010_0225 1010:020c FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:0068 EXTERNAL SETERRORMODE SETERRORMODE 1010:0216 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:0060 EXTERNAL LOADLIBRARY LOADLIBRARY 1010:021b FUN_1010_01c2 WRITE 0 true 1028:4781 Data6 DAT_1028_4781 1010:0220 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:0068 EXTERNAL SETERRORMODE SETERRORMODE 1010:0225 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:022a FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:022f Code3 LAB_1010_022f 1010:022c FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:039f Code3 LAB_1010_039f 1010:022f FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:0238 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:023d FUN_1010_01c2 WRITE 0 true 1028:4750 Data6 DAT_1028_4750 1010:0240 FUN_1010_01c2 WRITE 0 true 1028:4752 Data6 DAT_1028_4752 1010:0244 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:024d FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:0252 FUN_1010_01c2 WRITE 0 true 1028:4754 Data6 DAT_1028_4754 1010:0255 FUN_1010_01c2 WRITE 0 true 1028:4756 Data6 DAT_1028_4756 1010:0259 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:0262 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:0267 FUN_1010_01c2 WRITE 0 true 1028:4758 Data6 DAT_1028_4758 1010:026a FUN_1010_01c2 WRITE 0 true 1028:475a Data6 DAT_1028_475a 1010:026e FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:0277 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:027c FUN_1010_01c2 WRITE 0 true 1028:475c Data6 DAT_1028_475c 1010:027f FUN_1010_01c2 WRITE 0 true 1028:475e Data6 DAT_1028_475e 1010:0283 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:028c FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:0291 FUN_1010_01c2 WRITE 0 true 1028:4760 Data6 DAT_1028_4760 1010:0294 FUN_1010_01c2 WRITE 0 true 1028:4762 Data6 DAT_1028_4762 1010:0298 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:02a1 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:02a6 FUN_1010_01c2 WRITE 0 true 1028:4764 Data6 DAT_1028_4764 1010:02a9 FUN_1010_01c2 WRITE 0 true 1028:4766 Data6 DAT_1028_4766 1010:02ad FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:02b6 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:02bb FUN_1010_01c2 WRITE 0 true 1028:4768 Data6 DAT_1028_4768 1010:02be FUN_1010_01c2 WRITE 0 true 1028:476a Data6 DAT_1028_476a 1010:02c2 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:02cb FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:02d0 FUN_1010_01c2 WRITE 0 true 1028:476c Data6 DAT_1028_476c 1010:02d3 FUN_1010_01c2 WRITE 0 true 1028:476e Data6 DAT_1028_476e 1010:02d7 FUN_1010_01c2 READ 0 true 1028:478c Data6 DAT_1028_478c 1010:02dc FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:02f5 Code3 LAB_1010_02f5 1010:02de FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:02e7 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:02ec FUN_1010_01c2 WRITE 0 true 1028:4770 Data6 DAT_1028_4770 1010:02ef FUN_1010_01c2 WRITE 0 true 1028:4772 Data6 DAT_1028_4772 1010:02f3 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:02fd Code3 LAB_1010_02fd 1010:02f7 FUN_1010_01c2 WRITE 0 true 1028:4770 Data6 DAT_1028_4770 1010:02fa FUN_1010_01c2 WRITE 0 true 1028:4772 Data6 DAT_1028_4772 1010:02fd FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:0306 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:030b FUN_1010_01c2 WRITE 0 true 1028:4774 Data6 DAT_1028_4774 1010:030e FUN_1010_01c2 WRITE 0 true 1028:4776 Data6 DAT_1028_4776 1010:0312 FUN_1010_01c2 READ 0 true 1028:4781 Data6 DAT_1028_4781 1010:031b FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:002c EXTERNAL GETPROCADDRESS GETPROCADDRESS 1010:0320 FUN_1010_01c2 WRITE 0 true 1028:4778 Data6 DAT_1028_4778 1010:0323 FUN_1010_01c2 WRITE 0 true 1028:477a Data6 DAT_1028_477a 1010:0327 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1228:0020 EXTERNAL GETCURRENTTASK GETCURRENTTASK 1010:032d FUN_1010_01c2 READ 0 true 1028:476a Data6 DAT_1028_476a 1010:032d FUN_1010_01c2 READ 0 false 1028:4768 Data6 DAT_1028_4768 1010:0337 FUN_1010_01c2 WRITE 0 true 1028:4784 Data6 DAT_1028_4784 1010:033a FUN_1010_01c2 READ 0 true 1028:4784 Data6 DAT_1028_4784 1010:033f FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:0360 Code3 LAB_1010_0360 1010:0341 FUN_1010_01c2 READ 0 true 1028:4766 Data6 DAT_1028_4766 1010:0341 FUN_1010_01c2 READ 0 false 1028:4764 Data6 DAT_1028_4764 1010:0345 FUN_1010_01c2 WRITE 0 true 1028:477c Data6 DAT_1028_477c 1010:0348 FUN_1010_01c2 READ 0 true 1028:475e Data6 DAT_1028_475e 1010:0348 FUN_1010_01c2 READ 0 false 1028:475c Data6 DAT_1028_475c 1010:034e FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:0357 Code3 LAB_1010_0357 1010:0350 FUN_1010_01c2 READ 0 true 1028:477c Data6 DAT_1028_477c 1010:0355 FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:035b Code3 LAB_1010_035b 1010:0359 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:035d Code3 LAB_1010_035d 1010:035d FUN_1010_01c2 WRITE 0 true 1028:4784 Data6 DAT_1028_4784 1010:0360 FUN_1010_01c2 READ 0 true 1028:4784 Data6 DAT_1028_4784 1010:0365 FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:036e Code3 LAB_1010_036e 1010:0367 FUN_1010_01c2 UNCONDITIONAL_CALL 0 true 1010:0002 Code3 FUN_1010_0002 FUN_1010_0002 1010:036c FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:039f Code3 LAB_1010_039f 1010:036e FUN_1010_01c2 DATA 1 true Stack[0x6] - 1010:0371 FUN_1010_01c2 WRITE 0 true 1028:477f Data6 DAT_1028_477f 1010:0374 FUN_1010_01c2 DATA 1 true Stack[0x4] - 1010:0377 FUN_1010_01c2 WRITE 0 true 1028:4780 Data6 DAT_1028_4780 1010:037a FUN_1010_01c2 READ 0 true 1028:478c Data6 DAT_1028_478c 1010:037f FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:039a Code3 LAB_1010_039a 1010:0381 FUN_1010_01c2 DATA 0 true Stack[0x8] - 1010:0385 FUN_1010_01c2 CONDITIONAL_JUMP 0 true 1010:039a Code3 LAB_1010_039a 1010:0387 FUN_1010_01c2 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1010:038b FUN_1010_01c2 READ 0 true 1028:4752 Data6 DAT_1028_4752 1010:038b FUN_1010_01c2 READ 0 false 1028:4750 Data6 DAT_1028_4750 1010:0395 FUN_1010_01c2 WRITE 0 true 1028:477e Data6 DAT_1028_477e 1010:0398 FUN_1010_01c2 UNCONDITIONAL_JUMP 0 true 1010:039f Code3 LAB_1010_039f 1010:039a FUN_1010_01c2 WRITE 0 true 1028:477e Data6 DAT_1028_477e 1010:039f FUN_1010_01c2 READ 1 true 1028:4784 Data6 DAT_1028_4784 1010:03a2 FUN_1010_01c2 DATA 0 true Stack[-0x5] - 1010:03a5 FUN_1010_01c2 DATA 1 true Stack[-0x5] - 1010:03b7 FUN_1010_03af DATA 0 true Stack[0xc] - 1010:03ba FUN_1010_03af DATA 0 true Stack[0xa] - 1010:03bd FUN_1010_03af DATA 1 true Stack[0x8] - 1010:03c1 FUN_1010_03af DATA 1 true Stack[0x6] - 1010:03c5 FUN_1010_03af DATA 1 true Stack[0x4] - 1010:03c9 FUN_1010_03af UNCONDITIONAL_CALL 0 true 1010:01c2 Code3 FUN_1010_01c2 FUN_1010_01c2 1010:03ce FUN_1010_03af DATA 0 true Stack[-0x5] - 1010:03d1 FUN_1010_03af WRITE 0 true 1028:4783 Data6 DAT_1028_4783 1010:03d6 FUN_1010_03af DATA 1 true Stack[-0x5] - 1010:03e5 FUN_1010_03e0 UNCONDITIONAL_CALL 0 true 1010:0079 Code3 FUN_1010_0079 FUN_1010_0079 1010:03ed FUN_1010_03e0 DATA 1 true Stack[0x4] - 1010:03f2 FUN_1010_03e0 UNCONDITIONAL_CALL 0 true 1018:1b08 Code4 FUN_1018_1b08 FUN_1018_1b08 1010:03f9 FUN_1010_03e0 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1010:0415 FUN_1010_0405 DATA 0 true Stack[-0x105] - 1010:0419 FUN_1010_0405 DATA 1 true Stack[0x4] - 1010:0425 FUN_1010_0405 DATA 0 true Stack[-0x185] - 1010:042b FUN_1010_0405 DATA 0 true Stack[-0x105] - 1010:0431 FUN_1010_0405 UNCONDITIONAL_CALL 0 true 1020:0667 Code5 FUN_1020_0667 FUN_1020_0667 1010:0436 FUN_1010_0405 DATA 0 true Stack[-0x185] - 1010:043e FUN_1010_0405 UNCONDITIONAL_CALL 0 true 1020:06ab Code5 FUN_1020_06ab FUN_1020_06ab 1010:0443 FUN_1010_0405 UNCONDITIONAL_CALL 0 true 1020:0388 Code5 FUN_1020_0388 FUN_1020_0388 1010:044a FUN_1010_0405 CONDITIONAL_JUMP 0 true 1010:0462 Code3 LAB_1010_0462 1010:044c FUN_1010_0405 DATA 0 true Stack[-0x5] - 1010:0450 FUN_1010_0405 DATA 0 true Stack[-0x185] - 1010:0456 FUN_1010_0405 UNCONDITIONAL_CALL 0 true 1020:072c Code5 FUN_1020_072c FUN_1020_072c 1010:045b FUN_1010_0405 UNCONDITIONAL_CALL 0 true 1020:038f Code5 FUN_1020_038f FUN_1020_038f 1010:0460 FUN_1010_0405 UNCONDITIONAL_JUMP 0 true 1010:0466 Code3 LAB_1010_0466 1010:0462 FUN_1010_0405 DATA 0 true Stack[-0x5] - 1010:0466 FUN_1010_0405 DATA 1 true Stack[-0x5] - 1010:047e FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1228:0080 EXTERNAL GETSYSTEMDIRECTORY GETSYSTEMDIRECTORY 1010:0483 FUN_1010_0472 WRITE 0 true 1028:47a2 Data6 DAT_1028_47a2 1010:0486 FUN_1010_0472 DATA 0 true Stack[-0x102] - 1010:0491 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:049b FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1010:04a0 FUN_1010_0472 DATA 0 true Stack[-0x202] - 1010:04ab FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:04b0 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1010:04bd FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:09ec Code5 FUN_1020_09ec FUN_1020_09ec 1010:04c2 FUN_1010_0472 DATA 0 true Stack[-0x102] - 1010:04cd FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:04d7 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1010:04dc FUN_1010_0472 DATA 0 true Stack[-0x202] - 1010:04e7 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:04ec FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1010:04f9 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1020:09ec Code5 FUN_1020_09ec FUN_1020_09ec 1010:04fe FUN_1010_0472 READ 0 true 1028:47a2 Data6 DAT_1028_47a2 1010:0503 FUN_1010_0472 CONDITIONAL_JUMP 0 true 1010:0555 Code3 LAB_1010_0555 1010:050a FUN_1010_0472 DATA 0 true Stack[-0x102] - 1010:0515 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:051a FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1010:0524 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1010:0405 Code3 FUN_1010_0405 FUN_1010_0405 1010:052b FUN_1010_0472 CONDITIONAL_JUMP 0 true 1010:0555 Code3 LAB_1010_0555 1010:0532 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1010:0405 Code3 FUN_1010_0405 FUN_1010_0405 1010:0539 FUN_1010_0472 CONDITIONAL_JUMP 0 true 1010:0555 Code3 LAB_1010_0555 1010:0540 FUN_1010_0472 DATA 0 true Stack[-0x102] - 1010:054b FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:300a Code2 FUN_1008_300a FUN_1008_300a 1010:0550 FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1008:2f2f Code2 FUN_1008_2f2f FUN_1008_2f2f 1010:0557 FUN_1010_0472 WRITE 0 true 1028:4750 Data6 DAT_1028_4750 1010:055a FUN_1010_0472 WRITE 0 true 1028:4752 Data6 DAT_1028_4752 1010:055f FUN_1010_0472 WRITE 0 true 1028:4754 Data6 DAT_1028_4754 1010:0562 FUN_1010_0472 WRITE 0 true 1028:4756 Data6 DAT_1028_4756 1010:0567 FUN_1010_0472 WRITE 0 true 1028:4758 Data6 DAT_1028_4758 1010:056a FUN_1010_0472 WRITE 0 true 1028:475a Data6 DAT_1028_475a 1010:056f FUN_1010_0472 WRITE 0 true 1028:475c Data6 DAT_1028_475c 1010:0572 FUN_1010_0472 WRITE 0 true 1028:475e Data6 DAT_1028_475e 1010:0577 FUN_1010_0472 WRITE 0 true 1028:4760 Data6 DAT_1028_4760 1010:057a FUN_1010_0472 WRITE 0 true 1028:4762 Data6 DAT_1028_4762 1010:057f FUN_1010_0472 WRITE 0 true 1028:4764 Data6 DAT_1028_4764 1010:0582 FUN_1010_0472 WRITE 0 true 1028:4766 Data6 DAT_1028_4766 1010:0587 FUN_1010_0472 WRITE 0 true 1028:4768 Data6 DAT_1028_4768 1010:058a FUN_1010_0472 WRITE 0 true 1028:476a Data6 DAT_1028_476a 1010:058f FUN_1010_0472 WRITE 0 true 1028:476c Data6 DAT_1028_476c 1010:0592 FUN_1010_0472 WRITE 0 true 1028:476e Data6 DAT_1028_476e 1010:0597 FUN_1010_0472 WRITE 0 true 1028:4770 Data6 DAT_1028_4770 1010:059a FUN_1010_0472 WRITE 0 true 1028:4772 Data6 DAT_1028_4772 1010:059f FUN_1010_0472 WRITE 0 true 1028:4774 Data6 DAT_1028_4774 1010:05a2 FUN_1010_0472 WRITE 0 true 1028:4776 Data6 DAT_1028_4776 1010:05a7 FUN_1010_0472 WRITE 0 true 1028:4778 Data6 DAT_1028_4778 1010:05aa FUN_1010_0472 WRITE 0 true 1028:477a Data6 DAT_1028_477a 1010:05ad FUN_1010_0472 UNCONDITIONAL_CALL 0 true 1228:0000 EXTERNAL GETVERSION GETVERSION 1010:05b2 FUN_1010_0472 WRITE 0 true 1028:478a Data6 DAT_1028_478a 1010:05b5 FUN_1010_0472 READ 0 true 1028:478a Data6 DAT_1028_478a 1010:05ba FUN_1010_0472 CONDITIONAL_JUMP 0 true 1010:05c3 Code3 LAB_1010_05c3 1010:05bc FUN_1010_0472 READ 0 true 1028:478b Data6 DAT_1028_478b 1010:05c1 FUN_1010_0472 CONDITIONAL_JUMP 0 true 1010:05c7 Code3 LAB_1010_05c7 1010:05c5 FUN_1010_0472 UNCONDITIONAL_JUMP 0 true 1010:05c9 Code3 LAB_1010_05c9 1010:05c9 FUN_1010_0472 WRITE 0 true 1028:478c Data6 DAT_1028_478c 1010:05cc FUN_1010_0472 WRITE 0 true 1028:477e Data6 DAT_1028_477e 1010:05d1 FUN_1010_0472 WRITE 0 true 1028:477f Data6 DAT_1028_477f 1010:05d6 FUN_1010_0472 WRITE 0 true 1028:4780 Data6 DAT_1028_4780 1010:05dd FUN_1010_0472 WRITE 0 true 1028:4781 Data6 DAT_1028_4781 1010:05e0 FUN_1010_0472 WRITE 0 true 1028:4783 Data6 DAT_1028_4783 1010:05e5 FUN_1010_0472 WRITE 0 true 1028:4784 Data6 DAT_1028_4784 1018:0007 FUN_1018_0002 CONDITIONAL_JUMP 0 true 1018:0029 Code4 LAB_1018_0029 1018:000c FUN_1018_0002 CONDITIONAL_JUMP 0 true 1018:0013 Code4 LAB_1018_0013 1018:0011 FUN_1018_0002 UNCONDITIONAL_JUMP 0 true 1018:0044 Code4 LAB_1018_0044 1018:0020 FUN_1018_0002 CONDITIONAL_JUMP 0 true 1018:002f Code4 LAB_1018_002f 1018:0027 FUN_1018_0002 CONDITIONAL_JUMP 0 true 1018:0018 Code4 LAB_1018_0018 1018:002d FUN_1018_0002 UNCONDITIONAL_JUMP 0 true 1018:0044 Code4 LAB_1018_0044 1018:004a FUN_1018_0045 DATA 0 true Stack[0x8] - 1018:0052 FUN_1018_0045 DATA 0 true Stack[0x6] - 1018:0055 FUN_1018_0045 UNCONDITIONAL_CALL 0 true 1228:01b4 EXTERNAL SETPROP SETPROP 1018:005a FUN_1018_0045 DATA 0 true Stack[0x8] - 1018:0062 FUN_1018_0045 DATA 0 true Stack[0x4] - 1018:0065 FUN_1018_0045 UNCONDITIONAL_CALL 0 true 1228:01b4 EXTERNAL SETPROP SETPROP 1018:0076 FUN_1018_0071 DATA 0 true Stack[0x4] - 1018:007e FUN_1018_0071 UNCONDITIONAL_CALL 0 true 1228:01ac EXTERNAL REMOVEPROP REMOVEPROP 1018:0083 FUN_1018_0071 DATA 0 true Stack[0x4] - 1018:008b FUN_1018_0071 UNCONDITIONAL_CALL 0 true 1228:01ac EXTERNAL REMOVEPROP REMOVEPROP 1018:009c FUN_1018_0097 DATA 0 true Stack[0x4] - 1018:009f FUN_1018_0097 UNCONDITIONAL_CALL 0 true 1228:01e4 EXTERNAL ISWINDOW ISWINDOW 1018:00a7 FUN_1018_0097 CONDITIONAL_JUMP 0 true 1018:00fc Code4 LAB_1018_00fc 1018:00a9 FUN_1018_0097 DATA 0 true Stack[0x4] - 1018:00b0 FUN_1018_0097 UNCONDITIONAL_CALL 0 true 1228:0258 EXTERNAL GETWINDOWLONG GETWINDOWLONG 1018:00c0 FUN_1018_0097 CONDITIONAL_JUMP 0 true 1018:00e0 Code4 LAB_1018_00e0 1018:00cb FUN_1018_0097 CONDITIONAL_JUMP 0 true 1018:00e0 Code4 LAB_1018_00e0 1018:00d4 FUN_1018_0097 CONDITIONAL_JUMP 0 true 1018:00e0 Code4 LAB_1018_00e0 1018:00de FUN_1018_0097 UNCONDITIONAL_JUMP 0 true 1018:00fc Code4 LAB_1018_00fc 1018:00e0 FUN_1018_0097 DATA 0 true Stack[0x4] - 1018:00e8 FUN_1018_0097 UNCONDITIONAL_CALL 0 true 1228:01b0 EXTERNAL GETPROP GETPROP 1018:00ee FUN_1018_0097 DATA 0 true Stack[0x4] - 1018:00f6 FUN_1018_0097 UNCONDITIONAL_CALL 0 true 1228:01b0 EXTERNAL GETPROP GETPROP 1018:0108 FUN_1018_0103 DATA 1 true Stack[0x6] - 1018:0122 FUN_1018_0103 DATA 1 true Stack[0x2] - 1018:0127 FUN_1018_0103 READ 0 true 1028:0684 Data6 DAT_1028_0684 1018:0127 FUN_1018_0103 READ 0 false 1028:0682 Data6 DAT_1028_0682 1018:013f FUN_1018_0133 DATA 1 true Stack[0xc] - 1018:014b FUN_1018_0133 DATA 0 true Stack[0x6] - 1018:014e FUN_1018_0133 DATA 0 true Stack[0x4] - 1018:0151 FUN_1018_0133 DATA 0 true Stack[0x8] - 1018:0154 FUN_1018_0133 DATA 1 true Stack[0xa] - 1018:0164 FUN_1018_0133 CONDITIONAL_JUMP 0 true 1018:016d Code4 LAB_1018_016d 1018:016b FUN_1018_0133 UNCONDITIONAL_JUMP 0 true 1018:0173 Code4 LAB_1018_0173 1018:0170 FUN_1018_0133 UNCONDITIONAL_CALL 0 true 1018:0002 Code4 FUN_1018_0002 FUN_1018_0002 1018:0177 FUN_1018_0133 CONDITIONAL_JUMP 0 true 1018:017c Code4 LAB_1018_017c 1018:0179 FUN_1018_0133 UNCONDITIONAL_CALL 0 true 1018:0103 Code4 FUN_1018_0103 FUN_1018_0103 1018:0197 FUN_1018_018b DATA 0 true Stack[0xc] - 1018:01a8 FUN_1018_018b UNCONDITIONAL_CALL 0 true 1228:025c EXTERNAL SETWINDOWLONG SETWINDOWLONG 1018:01ad FUN_1018_018b DATA 0 true Stack[0xc] - 1018:01b6 FUN_1018_018b UNCONDITIONAL_CALL 0 true 1018:0045 Code4 FUN_1018_0045 FUN_1018_0045 1018:01bb FUN_1018_018b DATA 0 true Stack[0xc] - 1018:01be FUN_1018_018b DATA 0 true Stack[0xa] - 1018:01c1 FUN_1018_018b DATA 0 true Stack[0x8] - 1018:01c4 FUN_1018_018b DATA 0 true Stack[0x6] - 1018:01c7 FUN_1018_018b DATA 0 true Stack[0x4] - 1018:01e4 FUN_1018_01dc READ 1 true 1028:066e Data6 DAT_1028_066e 1018:01e7 FUN_1018_01dc READ 1 true 1028:0670 Data6 DAT_1028_0670 1018:01eb FUN_1018_01dc CONDITIONAL_JUMP 0 true 1018:01f0 Code4 LAB_1018_01f0 1018:01ed FUN_1018_01dc UNCONDITIONAL_JUMP 0 true 1018:02a3 Code4 LAB_1018_02a3 1018:01f7 FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1228:0004 EXTERNAL GLOBALALLOC GLOBALALLOC 1018:01fd FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1228:000c EXTERNAL GLOBALLOCK GLOBALLOCK 1018:0202 FUN_1018_01dc DATA 0 true Stack[-0xc] - 1018:0205 FUN_1018_01dc DATA 0 true Stack[-0xa] - 1018:0208 FUN_1018_01dc READ 1 true 1028:066c Data6 DAT_1028_066c 1018:020b FUN_1018_01dc DATA 1 true Stack[-0xc] - 1018:0216 FUN_1018_01dc DATA 1 true Stack[-0xc] - 1018:0221 FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1020:16a5 Code5 FUN_1020_16a5 FUN_1020_16a5 1018:0226 FUN_1018_01dc READ 1 true 1028:0672 Data6 DAT_1028_0672 1018:0229 FUN_1018_01dc READ 1 true 1028:0674 Data6 DAT_1028_0674 1018:022d FUN_1018_01dc DATA 1 true Stack[-0xc] - 1018:0238 FUN_1018_01dc DATA 1 true Stack[-0xc] - 1018:0241 FUN_1018_01dc DATA 0 true Stack[-0x10] - 1018:0244 FUN_1018_01dc DATA 0 true Stack[-0xe] - 1018:0247 FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:024e FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:0261 FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:0268 FUN_1018_01dc READ 1 true 1028:066e Data6 DAT_1028_066e 1018:026b FUN_1018_01dc READ 1 true 1028:0670 Data6 DAT_1028_0670 1018:026f FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:027a FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:027d FUN_1018_01dc DATA 1 true Stack[-0xe] - 1018:0280 FUN_1018_01dc WRITE 0 true 1028:066e Data6 DAT_1028_066e 1018:0283 FUN_1018_01dc WRITE 0 true 1028:0670 Data6 DAT_1028_0670 1018:0287 FUN_1018_01dc DATA 0 true Stack[-0x10] - 1018:028b FUN_1018_01dc DATA 0 true Stack[-0x10] - 1018:0290 FUN_1018_01dc CONDITIONAL_JUMP 0 true 1018:0247 Code4 LAB_1018_0247 1018:0292 FUN_1018_01dc DATA 1 true Stack[-0xa] - 1018:0295 FUN_1018_01dc WRITE 0 true 1028:066c Data6 DAT_1028_066c 1018:0298 FUN_1018_01dc DATA 0 true Stack[-0xa] - 1018:029b FUN_1018_01dc DATA 0 true Stack[-0xa] - 1018:029e FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1228:0090 EXTERNAL PRESTOCHANGOSELECTOR PRESTOCHANGOSELECTOR 1018:02a3 FUN_1018_01dc READ 1 true 1028:066e Data6 DAT_1028_066e 1018:02a6 FUN_1018_01dc READ 1 true 1028:0670 Data6 DAT_1028_0670 1018:02aa FUN_1018_01dc DATA 0 true Stack[-0x8] - 1018:02ad FUN_1018_01dc DATA 0 true Stack[-0x6] - 1018:02b0 FUN_1018_01dc READ 1 true 1028:066e Data6 DAT_1028_066e 1018:02b3 FUN_1018_01dc DATA 0 true Stack[-0x10] - 1018:02b6 FUN_1018_01dc READ 0 true 1028:0670 Data6 DAT_1028_0670 1018:02ba FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1228:0088 EXTERNAL ALLOCCSTODSALIAS ALLOCCSTODSALIAS 1018:02bf FUN_1018_01dc DATA 0 true Stack[-0xe] - 1018:02c2 FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:02cd FUN_1018_01dc WRITE 0 true 1028:066e Data6 DAT_1028_066e 1018:02d0 FUN_1018_01dc WRITE 0 true 1028:0670 Data6 DAT_1028_0670 1018:02d4 FUN_1018_01dc DATA 1 true Stack[0x4] - 1018:02d7 FUN_1018_01dc DATA 1 true Stack[0x6] - 1018:02da FUN_1018_01dc DATA 1 true Stack[-0x10] - 1018:02e5 FUN_1018_01dc DATA 0 true Stack[-0xe] - 1018:02e8 FUN_1018_01dc UNCONDITIONAL_CALL 0 true 1228:008c EXTERNAL FREESELECTOR FREESELECTOR 1018:02ed FUN_1018_01dc DATA 1 true Stack[-0x8] - 1018:02f0 FUN_1018_01dc DATA 1 true Stack[-0x6] - 1018:0302 FUN_1018_02fa DATA 1 true Stack[0x4] - 1018:0305 FUN_1018_02fa DATA 0 true Stack[-0x8] - 1018:0308 FUN_1018_02fa DATA 0 true Stack[0x6] - 1018:030b FUN_1018_02fa UNCONDITIONAL_CALL 0 true 1228:0088 EXTERNAL ALLOCCSTODSALIAS ALLOCCSTODSALIAS 1018:0310 FUN_1018_02fa DATA 0 true Stack[-0x6] - 1018:0313 FUN_1018_02fa READ 1 true 1028:066e Data6 DAT_1028_066e 1018:0316 FUN_1018_02fa READ 1 true 1028:0670 Data6 DAT_1028_0670 1018:031a FUN_1018_02fa DATA 1 true Stack[-0x8] - 1018:0325 FUN_1018_02fa DATA 0 true Stack[-0x6] - 1018:0328 FUN_1018_02fa UNCONDITIONAL_CALL 0 true 1228:008c EXTERNAL FREESELECTOR FREESELECTOR 1018:032d FUN_1018_02fa DATA 1 true Stack[0x4] - 1018:0330 FUN_1018_02fa DATA 1 true Stack[0x6] - 1018:0333 FUN_1018_02fa WRITE 0 true 1028:066e Data6 DAT_1028_066e 1018:0336 FUN_1018_02fa WRITE 0 true 1028:0670 Data6 DAT_1028_0670 1018:0348 FUN_1018_0341 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1018:034d FUN_1018_0341 CONDITIONAL_JUMP 0 true 1018:0352 Code4 LAB_1018_0352 1018:034f FUN_1018_0341 UNCONDITIONAL_JUMP 0 true 1018:03dd Code4 LAB_1018_03dd 1018:0355 FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:035a FUN_1018_0341 UNCONDITIONAL_CALL 0 true 1008:2d99 Code2 FUN_1008_2d99 FUN_1008_2d99 1018:035f FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:0374 FUN_1018_0341 DATA 1 true Stack[0xa] - 1018:0377 FUN_1018_0341 DATA 1 true Stack[0xc] - 1018:038a FUN_1018_0341 CONDITIONAL_JUMP 0 true 1018:039b Code4 LAB_1018_039b 1018:0394 FUN_1018_0341 UNCONDITIONAL_CALL 0 true 1018:069a Code4 FUN_1018_069a FUN_1018_069a 1018:0399 FUN_1018_0341 UNCONDITIONAL_JUMP 0 true 1018:03a8 Code4 LAB_1018_03a8 1018:039b FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:03a8 FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:03c1 FUN_1018_0341 UNCONDITIONAL_CALL 0 true 1018:01dc Code4 FUN_1018_01dc FUN_1018_01dc 1018:03c6 FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:03d8 FUN_1018_0341 UNCONDITIONAL_CALL 0 true 1018:060d Code4 FUN_1018_060d FUN_1018_060d 1018:03dd FUN_1018_0341 DATA 1 true Stack[0x4] - 1018:03ee FUN_1018_03e9 DATA 1 true Stack[0x6] - 1018:03f3 FUN_1018_03e9 UNCONDITIONAL_CALL 0 true 1008:2db3 Code2 FUN_1008_2db3 FUN_1008_2db3 1018:0404 FUN_1018_03ff DATA 1 true Stack[0x4] - 1018:0417 FUN_1018_03ff DATA 1 true Stack[0x4] - 1018:041c FUN_1018_03ff UNCONDITIONAL_CALL 0 true 1018:085a Code4 FUN_1018_085a FUN_1018_085a 1018:0421 FUN_1018_03ff DATA 1 true Stack[0x4] - 1018:042c FUN_1018_03ff CONDITIONAL_JUMP 0 true 1018:043b Code4 LAB_1018_043b 1018:0436 FUN_1018_03ff UNCONDITIONAL_CALL 0 true 1018:071c Code4 FUN_1018_071c FUN_1018_071c 1018:043b FUN_1018_03ff DATA 1 true Stack[0x4] - 1018:0446 FUN_1018_03ff UNCONDITIONAL_CALL 0 true 1018:02fa Code4 FUN_1018_02fa FUN_1018_02fa 1018:044e FUN_1018_03ff DATA 1 true Stack[0x4] - 1018:0453 FUN_1018_03ff UNCONDITIONAL_CALL 0 true 1008:2dcd Code2 FUN_1008_2dcd FUN_1008_2dcd 1018:045a FUN_1018_03ff UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1018:046e FUN_1018_0466 DATA 1 true Stack[0x4] - 1018:047a FUN_1018_0466 DATA 1 true Stack[0x6] - 1018:0485 FUN_1018_0466 CONDITIONAL_JUMP 0 true 1018:048b Code4 LAB_1018_048b 1018:0489 FUN_1018_0466 CONDITIONAL_JUMP 0 true 1018:048f Code4 LAB_1018_048f 1018:048d FUN_1018_0466 UNCONDITIONAL_JUMP 0 true 1018:0491 Code4 LAB_1018_0491 1018:0491 FUN_1018_0466 DATA 0 true Stack[-0x5] - 1018:0494 FUN_1018_0466 DATA 1 true Stack[-0x5] - 1018:04a6 FUN_1018_049e DATA 1 true Stack[0x6] - 1018:04a9 FUN_1018_049e DATA 0 true Stack[-0x5c] - 1018:04ac FUN_1018_049e DATA 0 true Stack[-0x5a] - 1018:04b3 FUN_1018_049e UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:04ba FUN_1018_049e CONDITIONAL_JUMP 0 true 1018:04cf Code4 LAB_1018_04cf 1018:04bc FUN_1018_049e DATA 1 true Stack[-0x5c] - 1018:04c9 FUN_1018_049e CONDITIONAL_JUMP 0 true 1018:04cf Code4 LAB_1018_04cf 1018:04cd FUN_1018_049e UNCONDITIONAL_JUMP 0 true 1018:04d1 Code4 LAB_1018_04d1 1018:04d1 FUN_1018_049e DATA 0 true Stack[-0x6] - 1018:04d4 FUN_1018_049e DATA 0 true Stack[-0x6] - 1018:04d8 FUN_1018_049e CONDITIONAL_JUMP 0 true 1018:050e Code4 LAB_1018_050e 1018:04da FUN_1018_049e DATA 1 true Stack[-0x5c] - 1018:04e1 FUN_1018_049e UNCONDITIONAL_CALL 0 true 1228:01bc EXTERNAL ISICONIC ISICONIC 1018:04e8 FUN_1018_049e CONDITIONAL_JUMP 0 true 1018:050e Code4 LAB_1018_050e 1018:04ea FUN_1018_049e DATA 1 true Stack[-0x5c] - 1018:04f1 FUN_1018_049e DATA 0 true Stack[-0x58] - 1018:04f8 FUN_1018_049e UNCONDITIONAL_CALL 0 true 1228:01c8 EXTERNAL GETWINDOWTEXT GETWINDOWTEXT 1018:04fd FUN_1018_049e DATA 1 true Stack[-0x5c] - 1018:0504 FUN_1018_049e DATA 0 true Stack[-0x58] - 1018:0509 FUN_1018_049e UNCONDITIONAL_CALL 0 true 1228:01cc EXTERNAL SETWINDOWTEXT SETWINDOWTEXT 1018:050e FUN_1018_049e DATA 0 true Stack[-0x6] - 1018:0514 FUN_1018_049e CONDITIONAL_JUMP 0 true 1018:0517 Code4 LAB_1018_0517 1018:0517 FUN_1018_049e DATA 0 true Stack[-0x5] - 1018:051a FUN_1018_049e DATA 1 true Stack[-0x5] - 1018:052c FUN_1018_0524 DATA 1 true Stack[0x6] - 1018:0534 FUN_1018_0524 CONDITIONAL_JUMP 0 true 1018:0549 Code4 LAB_1018_0549 1018:0536 FUN_1018_0524 DATA 0 true Stack[0x8] - 1018:0539 FUN_1018_0524 DATA 0 true Stack[0x6] - 1018:053c FUN_1018_0524 DATA 1 true Stack[0x4] - 1018:0540 FUN_1018_0524 UNCONDITIONAL_CALL 0 true 1018:049e Code4 FUN_1018_049e FUN_1018_049e 1018:0547 FUN_1018_0524 CONDITIONAL_JUMP 0 true 1018:054d Code4 LAB_1018_054d 1018:054b FUN_1018_0524 UNCONDITIONAL_JUMP 0 true 1018:054f Code4 LAB_1018_054f 1018:054f FUN_1018_0524 DATA 0 true Stack[-0x5] - 1018:0552 FUN_1018_0524 DATA 1 true Stack[-0x5] - 1018:0564 FUN_1018_055c DATA 0 true Stack[-0x8] - 1018:0569 FUN_1018_055c DATA 0 true Stack[-0xd] - 1018:0575 FUN_1018_055c DATA 1 true Stack[0x4] - 1018:057a FUN_1018_055c UNCONDITIONAL_CALL 0 true 1018:080d Code4 FUN_1018_080d FUN_1018_080d 1018:057f FUN_1018_055c DATA 0 true Stack[-0xc] - 1018:0582 FUN_1018_055c DATA 0 true Stack[-0xa] - 1018:0585 FUN_1018_055c DATA 1 true Stack[-0xc] - 1018:0588 FUN_1018_055c DATA 1 true Stack[-0xa] - 1018:058b FUN_1018_055c CONDITIONAL_JUMP 0 true 1018:059c Code4 LAB_1018_059c 1018:058d FUN_1018_055c DATA 0 true Stack[-0xa] - 1018:0590 FUN_1018_055c DATA 0 true Stack[-0xc] - 1018:0594 FUN_1018_055c UNCONDITIONAL_CALL 0 true 1018:049e Code4 FUN_1018_049e FUN_1018_049e 1018:0599 FUN_1018_055c DATA 0 true Stack[-0xd] - 1018:059c FUN_1018_055c DATA 0 true Stack[-0x8] - 1018:059f FUN_1018_055c DATA 0 true Stack[-0xd] - 1018:05a3 FUN_1018_055c CONDITIONAL_JUMP 0 true 1018:05ad Code4 LAB_1018_05ad 1018:05a5 FUN_1018_055c DATA 1 true Stack[-0xc] - 1018:05a8 FUN_1018_055c DATA 1 true Stack[-0xa] - 1018:05ab FUN_1018_055c CONDITIONAL_JUMP 0 true 1018:056d Code4 LAB_1018_056d 1018:05ad FUN_1018_055c DATA 0 true Stack[-0xd] - 1018:05b1 FUN_1018_055c CONDITIONAL_JUMP 0 true 1018:05c9 Code4 LAB_1018_05c9 1018:05bb FUN_1018_055c DATA 1 true Stack[0x4] - 1018:05c0 FUN_1018_055c UNCONDITIONAL_CALL 0 true 1018:080d Code4 FUN_1018_080d FUN_1018_080d 1018:05c7 FUN_1018_055c CONDITIONAL_JUMP 0 true 1018:05cd Code4 LAB_1018_05cd 1018:05cb FUN_1018_055c UNCONDITIONAL_JUMP 0 true 1018:05cf Code4 LAB_1018_05cf 1018:05cf FUN_1018_055c DATA 0 true Stack[-0x5] - 1018:05d2 FUN_1018_055c DATA 1 true Stack[-0x5] - 1018:05e6 FUN_1018_05dc DATA 0 true Stack[-0x6] - 1018:05e9 FUN_1018_05dc DATA 1 true Stack[-0x6] - 1018:05fc FUN_1018_05f3 DATA 1 true Stack[0x4] - 1018:0601 FUN_1018_05f3 UNCONDITIONAL_CALL 0 true 1018:0641 Code4 FUN_1018_0641 FUN_1018_0641 1018:0616 FUN_1018_060d DATA 1 true Stack[0x4] - 1018:061b FUN_1018_060d UNCONDITIONAL_CALL 0 true 1018:0641 Code4 FUN_1018_0641 FUN_1018_0641 1018:0630 FUN_1018_0627 DATA 1 true Stack[0x4] - 1018:0635 FUN_1018_0627 UNCONDITIONAL_CALL 0 true 1018:0641 Code4 FUN_1018_0641 FUN_1018_0641 1018:0646 FUN_1018_0641 DATA 0 true Stack[0x8] - 1018:064a FUN_1018_0641 CONDITIONAL_JUMP 0 true 1018:065c Code4 LAB_1018_065c 1018:064c FUN_1018_0641 DATA 1 true Stack[0x4] - 1018:0653 FUN_1018_0641 DATA 1 true Stack[0xa] - 1018:065a FUN_1018_0641 UNCONDITIONAL_JUMP 0 true 1018:066c Code4 LAB_1018_066c 1018:065c FUN_1018_0641 DATA 1 true Stack[0xa] - 1018:0661 FUN_1018_0641 DATA 1 true Stack[0x4] - 1018:067b FUN_1018_0673 DATA 1 true Stack[0x4] - 1018:0682 FUN_1018_0673 DATA 1 true Stack[0x8] - 1018:0685 FUN_1018_0673 DATA 1 true Stack[0x8] - 1018:068a FUN_1018_0673 CONDITIONAL_JUMP 0 true 1018:068d Code4 LAB_1018_068d 1018:068d FUN_1018_0673 DATA 0 true Stack[-0x5] - 1018:0690 FUN_1018_0673 DATA 1 true Stack[-0x5] - 1018:069f FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06a2 FUN_1018_069a DATA 1 true Stack[0xa] - 1018:06a5 FUN_1018_069a CONDITIONAL_JUMP 0 true 1018:0715 Code4 LAB_1018_0715 1018:06a7 FUN_1018_069a DATA 1 true Stack[0x4] - 1018:06b2 FUN_1018_069a CONDITIONAL_JUMP 0 true 1018:06d5 Code4 LAB_1018_06d5 1018:06b4 FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06b7 FUN_1018_069a DATA 1 true Stack[0xa] - 1018:06c2 FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06c5 FUN_1018_069a DATA 1 true Stack[0xa] - 1018:06c8 FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06d3 FUN_1018_069a UNCONDITIONAL_JUMP 0 true 1018:0715 Code4 LAB_1018_0715 1018:06d5 FUN_1018_069a DATA 1 true Stack[0x4] - 1018:06e4 FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06ef FUN_1018_069a DATA 1 true Stack[0x8] - 1018:06f2 FUN_1018_069a DATA 1 true Stack[0xa] - 1018:06f5 FUN_1018_069a DATA 1 true Stack[0x4] - 1018:0704 FUN_1018_069a DATA 1 true Stack[0x8] - 1018:0707 FUN_1018_069a DATA 1 true Stack[0xa] - 1018:070a FUN_1018_069a DATA 1 true Stack[0x4] - 1018:0724 FUN_1018_071c DATA 1 true Stack[0x4] - 1018:072f FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:0734 Code4 LAB_1018_0734 1018:0731 FUN_1018_071c UNCONDITIONAL_JUMP 0 true 1018:0806 Code4 LAB_1018_0806 1018:073c FUN_1018_071c DATA 0 true Stack[-0x8] - 1018:073f FUN_1018_071c DATA 0 true Stack[-0x6] - 1018:0742 FUN_1018_071c DATA 1 true Stack[-0x8] - 1018:0745 FUN_1018_071c DATA 1 true Stack[-0x6] - 1018:0748 FUN_1018_071c DATA 0 true Stack[-0xc] - 1018:074b FUN_1018_071c DATA 0 true Stack[-0xa] - 1018:074e FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:0759 FUN_1018_071c DATA 1 true Stack[-0x6] - 1018:075c FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:0763 Code4 LAB_1018_0763 1018:075e FUN_1018_071c DATA 1 true Stack[-0x8] - 1018:0761 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:078b Code4 LAB_1018_078b 1018:0763 FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:076e FUN_1018_071c DATA 1 true Stack[0xa] - 1018:0771 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:0778 Code4 LAB_1018_0778 1018:0773 FUN_1018_071c DATA 1 true Stack[0x8] - 1018:0776 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:078b Code4 LAB_1018_078b 1018:0778 FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:0783 FUN_1018_071c DATA 0 true Stack[-0xc] - 1018:0786 FUN_1018_071c DATA 0 true Stack[-0xa] - 1018:0789 FUN_1018_071c UNCONDITIONAL_JUMP 0 true 1018:074e Code4 LAB_1018_074e 1018:078b FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:0796 FUN_1018_071c DATA 1 true Stack[0xa] - 1018:0799 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:0806 Code4 LAB_1018_0806 1018:079b FUN_1018_071c DATA 1 true Stack[0x8] - 1018:079e FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:0806 Code4 LAB_1018_0806 1018:07a0 FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:07ab FUN_1018_071c DATA 1 true Stack[-0xa] - 1018:07ae FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:07c4 Code4 LAB_1018_07c4 1018:07b0 FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:07b3 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:07c4 Code4 LAB_1018_07c4 1018:07b5 FUN_1018_071c DATA 1 true Stack[0x4] - 1018:07c2 FUN_1018_071c UNCONDITIONAL_JUMP 0 true 1018:0806 Code4 LAB_1018_0806 1018:07c4 FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:07cf FUN_1018_071c DATA 1 true Stack[0x4] - 1018:07d6 FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:07ec Code4 LAB_1018_07ec 1018:07dc FUN_1018_071c CONDITIONAL_JUMP 0 true 1018:07ec Code4 LAB_1018_07ec 1018:07de FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:07e1 FUN_1018_071c DATA 1 true Stack[-0xa] - 1018:07ec FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:07fb FUN_1018_071c DATA 1 true Stack[-0xc] - 1018:0815 FUN_1018_080d DATA 1 true Stack[0x4] - 1018:0820 FUN_1018_080d CONDITIONAL_JUMP 0 true 1018:084f Code4 LAB_1018_084f 1018:0822 FUN_1018_080d DATA 0 true Stack[-0x8] - 1018:0825 FUN_1018_080d DATA 0 true Stack[-0x6] - 1018:0830 FUN_1018_080d DATA 1 true Stack[-0x2] - 1018:0836 FUN_1018_080d DATA 0 true Stack[0x8] - 1018:083d FUN_1018_080d CONDITIONAL_JUMP 0 true 1018:084f Code4 LAB_1018_084f 1018:083f FUN_1018_080d DATA 1 true Stack[-0x8] - 1018:0842 FUN_1018_080d CONDITIONAL_JUMP 0 true 1018:0828 Code4 LAB_1018_0828 1018:0846 FUN_1018_080d DATA 1 true Stack[-0x6] - 1018:0849 FUN_1018_080d CONDITIONAL_JUMP 0 true 1018:0828 Code4 LAB_1018_0828 1018:0862 FUN_1018_085a DATA 1 true Stack[0x4] - 1018:086d FUN_1018_085a CONDITIONAL_JUMP 0 true 1018:08a5 Code4 LAB_1018_08a5 1018:086f FUN_1018_085a DATA 0 true Stack[-0x8] - 1018:0872 FUN_1018_085a DATA 0 true Stack[-0x6] - 1018:0879 FUN_1018_085a DATA 1 true Stack[-0x8] - 1018:087c FUN_1018_085a CONDITIONAL_JUMP 0 true 1018:0885 Code4 LAB_1018_0885 1018:0880 FUN_1018_085a DATA 1 true Stack[-0x6] - 1018:0883 FUN_1018_085a CONDITIONAL_JUMP 0 true 1018:089c Code4 LAB_1018_089c 1018:088f FUN_1018_085a DATA 1 true Stack[-0x2] - 1018:0895 FUN_1018_085a DATA 0 true Stack[0x8] - 1018:089a FUN_1018_085a UNCONDITIONAL_JUMP 0 true 1018:0879 Code4 LAB_1018_0879 1018:089c FUN_1018_085a DATA 1 true Stack[-0x2] - 1018:08a2 FUN_1018_085a DATA 0 true Stack[0x8] - 1018:08b4 FUN_1018_08ac DATA 0 true Stack[-0x6] - 1018:08b9 FUN_1018_08ac DATA 1 true Stack[-0x6] - 1018:08c8 FUN_1018_08c3 DATA 1 true Stack[0x4] - 1018:08cb FUN_1018_08c3 DATA 1 true Stack[0x6] - 1018:08ce FUN_1018_08c3 DATA 1 true Stack[0x8] - 1018:08d3 FUN_1018_08c3 DATA 1 true Stack[0xc] - 1018:08db FUN_1018_08c3 UNCONDITIONAL_CALL 0 true 1018:0002 Code4 FUN_1018_0002 FUN_1018_0002 1018:08de FUN_1018_08c3 READ 1 true 1028:0684 Data6 DAT_1028_0684 1018:08e2 FUN_1018_08c3 CONDITIONAL_JUMP 0 true 1018:08e7 Code4 LAB_1018_08e7 1018:08e4 FUN_1018_08c3 UNCONDITIONAL_CALL 0 true 1018:0103 Code4 FUN_1018_0103 FUN_1018_0103 1018:08fa FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:08ff FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:0906 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0959 Code4 LAB_1018_0959 1018:0908 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0913 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0959 Code4 LAB_1018_0959 1018:0915 FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:091c FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0923 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1228:0214 EXTERNAL GETDLGITEM GETDLGITEM 1018:0928 FUN_1018_08f0 DATA 0 true Stack[-0x8] - 1018:092b FUN_1018_08f0 DATA 0 true Stack[-0x8] - 1018:092f FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0959 Code4 LAB_1018_0959 1018:0931 FUN_1018_08f0 DATA 0 true Stack[-0x8] - 1018:093d FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1228:0238 EXTERNAL SENDMESSAGE SENDMESSAGE 1018:0947 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0959 Code4 LAB_1018_0959 1018:0949 FUN_1018_08f0 DATA 1 true Stack[-0x8] - 1018:094c FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0959 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0961 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0966 Code4 LAB_1018_0966 1018:0963 FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:09fd Code4 LAB_1018_09fd 1018:096c FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:09ea Code4 LAB_1018_09ea 1018:096e FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1228:01a8 EXTERNAL GETFOCUS GETFOCUS 1018:0973 FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:0976 FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:0979 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:097e FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:0981 FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:0984 FUN_1018_08f0 DATA 1 true Stack[-0xc] - 1018:0987 FUN_1018_08f0 DATA 1 true Stack[-0xa] - 1018:098a FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:09b9 Code4 LAB_1018_09b9 1018:098c FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:0990 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:09b9 Code4 LAB_1018_09b9 1018:0992 FUN_1018_08f0 DATA 1 true Stack[-0x6] - 1018:0995 FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:099c FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:09b9 Code4 LAB_1018_09b9 1018:099e FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:09a1 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1228:01e0 EXTERNAL GETPARENT GETPARENT 1018:09a6 FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:09a9 FUN_1018_08f0 DATA 0 true Stack[-0x6] - 1018:09ac FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:09b1 FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:09b4 FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:09b7 FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:0984 Code4 LAB_1018_0984 1018:09b9 FUN_1018_08f0 DATA 1 true Stack[-0xc] - 1018:09bc FUN_1018_08f0 DATA 1 true Stack[-0xa] - 1018:09bf FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:09ce Code4 LAB_1018_09ce 1018:09c1 FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:09c8 FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:09cb FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:09ce FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:09d1 FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:09d4 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:09e3 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:09e8 FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:09fa Code4 LAB_1018_09fa 1018:09ea FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:09ef FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:09fa FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:0a7e Code4 LAB_1018_0a7e 1018:09fd FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:0a04 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0a0b FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1228:0214 EXTERNAL GETDLGITEM GETDLGITEM 1018:0a11 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:0a16 FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:0a19 FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:0a1c FUN_1018_08f0 DATA 1 true Stack[-0xc] - 1018:0a1f FUN_1018_08f0 DATA 1 true Stack[-0xa] - 1018:0a22 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0a48 Code4 LAB_1018_0a48 1018:0a24 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0a2d FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0a48 Code4 LAB_1018_0a48 1018:0a2f FUN_1018_08f0 DATA 0 true Stack[-0xa] - 1018:0a32 FUN_1018_08f0 DATA 0 true Stack[-0xc] - 1018:0a41 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0a46 FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:0a7e Code4 LAB_1018_0a7e 1018:0a48 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0a51 FUN_1018_08f0 CONDITIONAL_JUMP 0 true 1018:0a6e Code4 LAB_1018_0a6e 1018:0a53 FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:0a58 FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0a67 FUN_1018_08f0 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0a6c FUN_1018_08f0 UNCONDITIONAL_JUMP 0 true 1018:0a7e Code4 LAB_1018_0a7e 1018:0a6e FUN_1018_08f0 DATA 1 true Stack[0x8] - 1018:0a73 FUN_1018_08f0 DATA 1 true Stack[0x4] - 1018:0a8d FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0a95 FUN_1018_0a85 CONDITIONAL_JUMP 0 true 1018:0b0e Code4 LAB_1018_0b0e 1018:0a9b FUN_1018_0a85 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:0aa0 FUN_1018_0a85 DATA 0 true Stack[-0xa] - 1018:0aa3 FUN_1018_0a85 DATA 0 true Stack[-0x8] - 1018:0aa6 FUN_1018_0a85 DATA 1 true Stack[-0xa] - 1018:0aa9 FUN_1018_0a85 DATA 1 true Stack[-0x8] - 1018:0aac FUN_1018_0a85 CONDITIONAL_JUMP 0 true 1018:0aca Code4 LAB_1018_0aca 1018:0aae FUN_1018_0a85 DATA 0 true Stack[-0x8] - 1018:0ab1 FUN_1018_0a85 DATA 0 true Stack[-0xa] - 1018:0ab4 FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0ac3 FUN_1018_0a85 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0ac8 FUN_1018_0a85 UNCONDITIONAL_JUMP 0 true 1018:0b0c Code4 LAB_1018_0b0c 1018:0aca FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0ad3 FUN_1018_0a85 UNCONDITIONAL_CALL 0 true 1228:0254 EXTERNAL GETWINDOWWORD GETWINDOWWORD 1018:0ad8 FUN_1018_0a85 DATA 0 true Stack[-0xc] - 1018:0adb FUN_1018_0a85 DATA 0 true Stack[-0xc] - 1018:0ae0 FUN_1018_0a85 CONDITIONAL_JUMP 0 true 1018:0afc Code4 LAB_1018_0afc 1018:0ae2 FUN_1018_0a85 DATA 1 true Stack[0x4] - 1018:0ae7 FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0aec FUN_1018_0a85 DATA 1 true Stack[-0xc] - 1018:0af5 FUN_1018_0a85 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0afa FUN_1018_0a85 UNCONDITIONAL_JUMP 0 true 1018:0b0c Code4 LAB_1018_0b0c 1018:0afc FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0b01 FUN_1018_0a85 DATA 1 true Stack[0x4] - 1018:0b0c FUN_1018_0a85 UNCONDITIONAL_JUMP 0 true 1018:0b1e Code4 LAB_1018_0b1e 1018:0b0e FUN_1018_0a85 DATA 1 true Stack[0x8] - 1018:0b13 FUN_1018_0a85 DATA 1 true Stack[0x4] - 1018:0b2a FUN_1018_0b25 DATA 1 true Stack[0x4] - 1018:0b33 FUN_1018_0b25 UNCONDITIONAL_CALL 0 true 1228:0258 EXTERNAL GETWINDOWLONG GETWINDOWLONG 1018:0b41 FUN_1018_0b25 CONDITIONAL_JUMP 0 true 1018:0b55 Code4 LAB_1018_0b55 1018:0b43 FUN_1018_0b25 DATA 1 true Stack[0x8] - 1018:0b48 FUN_1018_0b25 DATA 1 true Stack[0x4] - 1018:0b53 FUN_1018_0b25 UNCONDITIONAL_JUMP 0 true 1018:0b65 Code4 LAB_1018_0b65 1018:0b55 FUN_1018_0b25 DATA 1 true Stack[0x8] - 1018:0b5a FUN_1018_0b25 DATA 1 true Stack[0x4] - 1018:0b71 FUN_1018_0b6c DATA 1 true Stack[0x4] - 1018:0b7a FUN_1018_0b6c UNCONDITIONAL_CALL 0 true 1228:0258 EXTERNAL GETWINDOWLONG GETWINDOWLONG 1018:0b88 FUN_1018_0b6c CONDITIONAL_JUMP 0 true 1018:0b9c Code4 LAB_1018_0b9c 1018:0b8a FUN_1018_0b6c DATA 1 true Stack[0x8] - 1018:0b8f FUN_1018_0b6c DATA 1 true Stack[0x4] - 1018:0b9a FUN_1018_0b6c UNCONDITIONAL_JUMP 0 true 1018:0bac Code4 LAB_1018_0bac 1018:0b9c FUN_1018_0b6c DATA 1 true Stack[0x8] - 1018:0ba1 FUN_1018_0b6c DATA 1 true Stack[0x4] - 1018:0bbb FUN_1018_0bb3 DATA 1 true Stack[0x8] - 1018:0bc1 FUN_1018_0bb3 DATA 1 true Stack[0x4] - 1018:0bc8 FUN_1018_0bb3 CONDITIONAL_JUMP 0 true 1018:0bd4 Code4 LAB_1018_0bd4 1018:0bcc FUN_1018_0bb3 DATA 0 true Stack[-0x8] - 1018:0bcf FUN_1018_0bb3 DATA 0 true Stack[-0x6] - 1018:0bd2 FUN_1018_0bb3 UNCONDITIONAL_JUMP 0 true 1018:0c02 Code4 LAB_1018_0c02 1018:0bd4 FUN_1018_0bb3 DATA 1 true Stack[0x4] - 1018:0bdf FUN_1018_0bb3 CONDITIONAL_JUMP 0 true 1018:0bf1 Code4 LAB_1018_0bf1 1018:0be9 FUN_1018_0bb3 DATA 0 true Stack[-0x8] - 1018:0bec FUN_1018_0bb3 DATA 0 true Stack[-0x6] - 1018:0bef FUN_1018_0bb3 UNCONDITIONAL_JUMP 0 true 1018:0c02 Code4 LAB_1018_0c02 1018:0bf1 FUN_1018_0bb3 DATA 1 true Stack[0x8] - 1018:0bf7 FUN_1018_0bb3 UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:0bfc FUN_1018_0bb3 DATA 0 true Stack[-0x8] - 1018:0bff FUN_1018_0bb3 DATA 0 true Stack[-0x6] - 1018:0c02 FUN_1018_0bb3 DATA 1 true Stack[-0x8] - 1018:0c05 FUN_1018_0bb3 DATA 1 true Stack[-0x6] - 1018:0c08 FUN_1018_0bb3 CONDITIONAL_JUMP 0 true 1018:0c1c Code4 LAB_1018_0c1c 1018:0c0a FUN_1018_0bb3 DATA 1 true Stack[0x8] - 1018:0c0f FUN_1018_0bb3 DATA 1 true Stack[0x4] - 1018:0c1a FUN_1018_0bb3 UNCONDITIONAL_JUMP 0 true 1018:0c36 Code4 LAB_1018_0c36 1018:0c1c FUN_1018_0bb3 DATA 0 true Stack[-0x6] - 1018:0c1f FUN_1018_0bb3 DATA 0 true Stack[-0x8] - 1018:0c22 FUN_1018_0bb3 DATA 1 true Stack[0x8] - 1018:0c31 FUN_1018_0bb3 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0c42 FUN_1018_0c3d DATA 1 true Stack[0x8] - 1018:0c47 FUN_1018_0c3d DATA 1 true Stack[0x4] - 1018:0c5e FUN_1018_0c59 DATA 1 true Stack[0x4] - 1018:0c69 FUN_1018_0c59 CONDITIONAL_JUMP 0 true 1018:0cc0 Code4 LAB_1018_0cc0 1018:0c6b FUN_1018_0c59 DATA 1 true Stack[0x8] - 1018:0c74 FUN_1018_0c59 CONDITIONAL_JUMP 0 true 1018:0c97 Code4 LAB_1018_0c97 1018:0c76 FUN_1018_0c59 DATA 1 true Stack[0x4] - 1018:0c81 FUN_1018_0c59 DATA 1 true Stack[0x8] - 1018:0c90 FUN_1018_0c59 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0c95 FUN_1018_0c59 UNCONDITIONAL_JUMP 0 true 1018:0cc0 Code4 LAB_1018_0cc0 1018:0c97 FUN_1018_0c59 DATA 1 true Stack[0x4] - 1018:0ca2 FUN_1018_0c59 DATA 1 true Stack[0x8] - 1018:0ca7 FUN_1018_0c59 DATA 1 true Stack[0x4] - 1018:0cb0 FUN_1018_0c59 UNCONDITIONAL_CALL 0 true 1228:0254 EXTERNAL GETWINDOWWORD GETWINDOWWORD 1018:0cbb FUN_1018_0c59 UNCONDITIONAL_CALL 0 true 1018:08c3 Code4 FUN_1018_08c3 FUN_1018_08c3 1018:0ccc FUN_1018_0cc7 DATA 1 true Stack[0x6] - 1018:0cd4 FUN_1018_0cc7 CONDITIONAL_JUMP 0 true 1018:0ce0 Code4 LAB_1018_0ce0 1018:0cd6 FUN_1018_0cc7 DATA 1 true Stack[0x6] - 1018:0cdb FUN_1018_0cc7 UNCONDITIONAL_CALL 0 true 1018:060d Code4 FUN_1018_060d FUN_1018_060d 1018:0cec FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0cf4 FUN_1018_0ce7 CONDITIONAL_JUMP 0 true 1018:0d63 Code4 LAB_1018_0d63 1018:0cfe FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d03 FUN_1018_0ce7 UNCONDITIONAL_CALL 0 true 1018:085a Code4 FUN_1018_085a FUN_1018_085a 1018:0d0a FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d0f FUN_1018_0ce7 UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:0d16 FUN_1018_0ce7 CONDITIONAL_JUMP 0 true 1018:0d57 Code4 LAB_1018_0d57 1018:0d18 FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d29 FUN_1018_0ce7 CONDITIONAL_JUMP 0 true 1018:0d57 Code4 LAB_1018_0d57 1018:0d2b FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d45 FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d50 FUN_1018_0ce7 UNCONDITIONAL_CALL 0 true 1228:0238 EXTERNAL SENDMESSAGE SENDMESSAGE 1018:0d55 FUN_1018_0ce7 UNCONDITIONAL_JUMP 0 true 1018:0d63 Code4 LAB_1018_0d63 1018:0d57 FUN_1018_0ce7 DATA 1 true Stack[0x4] - 1018:0d5e FUN_1018_0ce7 UNCONDITIONAL_CALL 0 true 1228:01ec EXTERNAL DESTROYWINDOW DESTROYWINDOW 1018:0d77 FUN_1018_0d6a DATA 0 true Stack[-0x8] - 1018:0d7a FUN_1018_0d6a DATA 0 true Stack[-0x6] - 1018:0d7d FUN_1018_0d6a DATA 1 true Stack[-0x8] - 1018:0d80 FUN_1018_0d6a DATA 1 true Stack[-0x6] - 1018:0d8f FUN_1018_0d8a UNCONDITIONAL_CALL 0 true 1008:2d87 Code2 FUN_1008_2d87 FUN_1008_2d87 1018:0da0 FUN_1018_0d9b DATA 1 true Stack[0x4] - 1018:0da5 FUN_1018_0d9b UNCONDITIONAL_CALL 0 true 1018:055c Code4 FUN_1018_055c FUN_1018_055c 1018:0dac FUN_1018_0d9b CONDITIONAL_JUMP 0 true 1018:0db9 Code4 LAB_1018_0db9 1018:0dae FUN_1018_0d9b DATA 1 true Stack[0x4] - 1018:0db7 FUN_1018_0d9b UNCONDITIONAL_JUMP 0 true 1018:0dc6 Code4 LAB_1018_0dc6 1018:0dbb FUN_1018_0d9b DATA 1 true Stack[0x4] - 1018:0dd4 FUN_1018_0dcd DATA 1 true Stack[0x6] - 1018:0dd9 FUN_1018_0dcd UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:0de0 FUN_1018_0dcd CONDITIONAL_JUMP 0 true 1018:0e03 Code4 LAB_1018_0e03 1018:0de2 FUN_1018_0dcd DATA 1 true Stack[0x4] - 1018:0df1 FUN_1018_0dcd DATA 1 true Stack[0x6] - 1018:0dfc FUN_1018_0dcd DATA 1 true Stack[0x4] - 1018:0e12 FUN_1018_0e0a DATA 1 true Stack[0x4] - 1018:0e1d FUN_1018_0e0a CONDITIONAL_JUMP 0 true 1018:0e3f Code4 LAB_1018_0e3f 1018:0e27 FUN_1018_0e0a DATA 0 true Stack[-0x8] - 1018:0e2a FUN_1018_0e0a DATA 0 true Stack[-0x6] - 1018:0e35 FUN_1018_0e0a DATA 1 true Stack[0x4] - 1018:0e3a FUN_1018_0e0a UNCONDITIONAL_CALL 0 true 1018:085a Code4 FUN_1018_085a FUN_1018_085a 1018:0e4e FUN_1018_0e46 DATA 0 true Stack[-0x5] - 1018:0e52 FUN_1018_0e46 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1018:0e56 FUN_1018_0e46 DATA 1 true Stack[0x4] - 1018:0e63 FUN_1018_0e46 DATA 0 true Stack[-0x20] - 1018:0e68 FUN_1018_0e46 UNCONDITIONAL_CALL 0 true 1228:02a8 EXTERNAL GETCLASSINFO GETCLASSINFO 1018:0e6f FUN_1018_0e46 CONDITIONAL_JUMP 0 true 1018:0e94 Code4 LAB_1018_0e94 1018:0e71 FUN_1018_0e46 DATA 0 true Stack[-0x20] - 1018:0e76 FUN_1018_0e46 DATA 1 true Stack[0x4] - 1018:0e81 FUN_1018_0e46 DATA 0 true Stack[-0x20] - 1018:0e86 FUN_1018_0e46 UNCONDITIONAL_CALL 0 true 1228:01f0 EXTERNAL REGISTERCLASS REGISTERCLASS 1018:0e91 FUN_1018_0e46 DATA 0 true Stack[-0x5] - 1018:0e94 FUN_1018_0e46 DATA 1 true Stack[-0x5] - 1018:0ea3 FUN_1018_0e9e DATA 1 true Stack[0x4] - 1018:0eab FUN_1018_0e9e CONDITIONAL_JUMP 0 true 1018:0eb9 Code4 LAB_1018_0eb9 1018:0eb1 FUN_1018_0e9e DATA 0 true Stack[0x8] - 1018:0eb4 FUN_1018_0e9e UNCONDITIONAL_CALL 0 true 1228:01dc EXTERNAL SHOWWINDOW SHOWWINDOW 1018:0ec8 FUN_1018_0ec0 DATA 1 true Stack[0x6] - 1018:0ed0 FUN_1018_0ec0 CONDITIONAL_JUMP 0 true 1018:0ee1 Code4 LAB_1018_0ee1 1018:0ed2 FUN_1018_0ec0 DATA 1 true Stack[0x6] - 1018:0edf FUN_1018_0ec0 CONDITIONAL_JUMP 0 true 1018:0ee5 Code4 LAB_1018_0ee5 1018:0ee3 FUN_1018_0ec0 UNCONDITIONAL_JUMP 0 true 1018:0ee7 Code4 LAB_1018_0ee7 1018:0ee7 FUN_1018_0ec0 DATA 0 true Stack[-0x5] - 1018:0eea FUN_1018_0ec0 DATA 1 true Stack[-0x5] - 1018:0f04 FUN_1018_0ef4 DATA 1 true Stack[0x4] - 1018:0f09 FUN_1018_0ef4 UNCONDITIONAL_CALL 0 true 1018:080d Code4 FUN_1018_080d FUN_1018_080d 1018:0f12 FUN_1018_0ef4 CONDITIONAL_JUMP 0 true 1018:0f15 Code4 LAB_1018_0f15 1018:0f15 FUN_1018_0ef4 DATA 0 true Stack[-0x5] - 1018:0f18 FUN_1018_0ef4 DATA 1 true Stack[-0x5] - 1018:0f27 FUN_1018_0f22 DATA 1 true Stack[0x4] - 1018:0f2c FUN_1018_0f22 UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1018:0f40 FUN_1018_0f38 DATA 1 true Stack[0x4] - 1018:0f47 FUN_1018_0f38 READ 1 true 1028:064e Data6 DAT_1028_064e 1018:0f4f FUN_1018_0f38 CONDITIONAL_JUMP 0 true 1018:0f68 Code4 LAB_1018_0f68 1018:0f55 FUN_1018_0f38 CONDITIONAL_JUMP 0 true 1018:0f68 Code4 LAB_1018_0f68 1018:0f57 FUN_1018_0f38 READ 1 true 1028:064e Data6 DAT_1028_064e 1018:0f63 FUN_1018_0f38 DATA 0 true Stack[-0x5] - 1018:0f66 FUN_1018_0f38 UNCONDITIONAL_JUMP 0 true 1018:0f76 Code4 LAB_1018_0f76 1018:0f68 FUN_1018_0f38 DATA 1 true Stack[0x4] - 1018:0f73 FUN_1018_0f38 DATA 0 true Stack[-0x5] - 1018:0f76 FUN_1018_0f38 DATA 0 true Stack[-0x5] - 1018:0f7a FUN_1018_0f38 CONDITIONAL_JUMP 0 true 1018:0f86 Code4 LAB_1018_0f86 1018:0f7c FUN_1018_0f38 DATA 1 true Stack[0x4] - 1018:0f81 FUN_1018_0f38 UNCONDITIONAL_CALL 0 true 1008:2db3 Code2 FUN_1008_2db3 FUN_1008_2db3 1018:0f92 FUN_1018_0f8d DATA 1 true Stack[0x4] - 1018:0f99 FUN_1018_0f8d READ 1 true 1028:064e Data6 DAT_1028_064e 1018:0fa1 FUN_1018_0f8d CONDITIONAL_JUMP 0 true 1018:0fb5 Code4 LAB_1018_0fb5 1018:0fa7 FUN_1018_0f8d CONDITIONAL_JUMP 0 true 1018:0fb5 Code4 LAB_1018_0fb5 1018:0fa9 FUN_1018_0f8d DATA 1 true Stack[0x4] - 1018:0fb0 FUN_1018_0f8d UNCONDITIONAL_CALL 0 true 1228:0194 EXTERNAL POSTQUITMESSAGE POSTQUITMESSAGE 1018:0fb5 FUN_1018_0f8d DATA 1 true Stack[0x8] - 1018:0fba FUN_1018_0f8d DATA 1 true Stack[0x4] - 1018:0fd1 FUN_1018_0fcc DATA 1 true Stack[0x4] - 1018:0fd8 FUN_1018_0fcc UNCONDITIONAL_CALL 0 true 1018:0071 Code4 FUN_1018_0071 FUN_1018_0071 1018:0fdd FUN_1018_0fcc DATA 1 true Stack[0x8] - 1018:0fe2 FUN_1018_0fcc DATA 1 true Stack[0x4] - 1018:0fed FUN_1018_0fcc DATA 1 true Stack[0x4] - 1018:1002 FUN_1018_0ffd DATA 1 true Stack[0x8] - 1018:1007 FUN_1018_0ffd DATA 1 true Stack[0x4] - 1018:1012 FUN_1018_0ffd DATA 1 true Stack[0x8] - 1018:101a FUN_1018_0ffd CONDITIONAL_JUMP 0 true 1018:104d Code4 LAB_1018_104d 1018:101e FUN_1018_0ffd DATA 1 true Stack[0x4] - 1018:1023 FUN_1018_0ffd UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:102a FUN_1018_0ffd CONDITIONAL_JUMP 0 true 1018:103e Code4 LAB_1018_103e 1018:102c FUN_1018_0ffd DATA 1 true Stack[0x4] - 1018:1031 FUN_1018_0ffd READ 1 true 1028:064e Data6 DAT_1028_064e 1018:1037 FUN_1018_0ffd UNCONDITIONAL_CALL 0 true 1018:1bdf Code4 FUN_1018_1bdf FUN_1018_1bdf 1018:103c FUN_1018_0ffd UNCONDITIONAL_JUMP 0 true 1018:104d Code4 LAB_1018_104d 1018:1042 FUN_1018_0ffd READ 1 true 1028:064e Data6 DAT_1028_064e 1018:1048 FUN_1018_0ffd UNCONDITIONAL_CALL 0 true 1018:1bdf Code4 FUN_1018_1bdf FUN_1018_1bdf 1018:1059 FUN_1018_1054 DATA 1 true Stack[0x4] - 1018:1060 FUN_1018_1054 READ 1 true 1028:064e Data6 DAT_1028_064e 1018:1068 FUN_1018_1054 CONDITIONAL_JUMP 0 true 1018:108b Code4 LAB_1018_108b 1018:106e FUN_1018_1054 CONDITIONAL_JUMP 0 true 1018:108b Code4 LAB_1018_108b 1018:1070 FUN_1018_1054 READ 1 true 1028:064e Data6 DAT_1028_064e 1018:107e FUN_1018_1054 DATA 1 true Stack[0x8] - 1018:1089 FUN_1018_1054 UNCONDITIONAL_JUMP 0 true 1018:10a3 Code4 LAB_1018_10a3 1018:108b FUN_1018_1054 DATA 1 true Stack[0x4] - 1018:1098 FUN_1018_1054 DATA 1 true Stack[0x8] - 1018:10af FUN_1018_10aa DATA 1 true Stack[0x4] - 1018:10b6 FUN_1018_10aa READ 1 true 1028:064e Data6 DAT_1028_064e 1018:10be FUN_1018_10aa CONDITIONAL_JUMP 0 true 1018:10d2 Code4 LAB_1018_10d2 1018:10c4 FUN_1018_10aa CONDITIONAL_JUMP 0 true 1018:10d2 Code4 LAB_1018_10d2 1018:10c6 FUN_1018_10aa DATA 1 true Stack[0x4] - 1018:10cb FUN_1018_10aa UNCONDITIONAL_CALL 0 true 1018:0f38 Code4 FUN_1018_0f38 FUN_1018_0f38 1018:10d0 FUN_1018_10aa UNCONDITIONAL_JUMP 0 true 1018:10e2 Code4 LAB_1018_10e2 1018:10d2 FUN_1018_10aa DATA 1 true Stack[0x8] - 1018:10d7 FUN_1018_10aa DATA 1 true Stack[0x4] - 1018:10f3 FUN_1018_10e9 DATA 0 true Stack[-0x8] - 1018:10f6 FUN_1018_10e9 DATA 0 true Stack[-0x6] - 1018:10f9 FUN_1018_10e9 DATA 1 true Stack[-0x8] - 1018:10fc FUN_1018_10e9 DATA 1 true Stack[-0x6] - 1018:1110 FUN_1018_1106 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1018:1115 FUN_1018_1106 CONDITIONAL_JUMP 0 true 1018:111a Code4 LAB_1018_111a 1018:1117 FUN_1018_1106 UNCONDITIONAL_JUMP 0 true 1018:120f Code4 LAB_1018_120f 1018:111a FUN_1018_1106 DATA 0 true Stack[0x10] - 1018:111d FUN_1018_1106 DATA 0 true Stack[0xe] - 1018:1123 FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:1128 FUN_1018_1106 UNCONDITIONAL_CALL 0 true 1018:0341 Code4 FUN_1018_0341 FUN_1018_0341 1018:112d FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:1134 FUN_1018_1106 DATA 0 true Stack[-0x8] - 1018:1137 FUN_1018_1106 DATA 0 true Stack[-0x6] - 1018:113a FUN_1018_1106 DATA 0 true Stack[0xc] - 1018:113d FUN_1018_1106 DATA 0 true Stack[0xa] - 1018:1140 FUN_1018_1106 UNCONDITIONAL_CALL 0 true 1008:302c Code2 FUN_1008_302c FUN_1008_302c 1018:1145 FUN_1018_1106 DATA 1 true Stack[-0x8] - 1018:1155 FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:1160 FUN_1018_1106 DATA 1 true Stack[0xe] - 1018:1163 FUN_1018_1106 DATA 1 true Stack[0x10] - 1018:1166 FUN_1018_1106 CONDITIONAL_JUMP 0 true 1018:1179 Code4 LAB_1018_1179 1018:1168 FUN_1018_1106 DATA 1 true Stack[-0x8] - 1018:1177 FUN_1018_1106 UNCONDITIONAL_JUMP 0 true 1018:11c7 Code4 LAB_1018_11c7 1018:1179 FUN_1018_1106 DATA 1 true Stack[0xe] - 1018:1186 FUN_1018_1106 CONDITIONAL_JUMP 0 true 1018:11b8 Code4 LAB_1018_11b8 1018:118c FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:1191 FUN_1018_1106 UNCONDITIONAL_CALL 0 true 1018:0641 Code4 FUN_1018_0641 FUN_1018_0641 1018:119c FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:11a7 FUN_1018_1106 DATA 1 true Stack[-0x8] - 1018:11b6 FUN_1018_1106 UNCONDITIONAL_JUMP 0 true 1018:11c7 Code4 LAB_1018_11c7 1018:11b8 FUN_1018_1106 DATA 1 true Stack[-0x8] - 1018:11c7 FUN_1018_1106 DATA 1 true Stack[-0x8] - 1018:11fc FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:120f FUN_1018_1106 DATA 1 true Stack[0x4] - 1018:1220 FUN_1018_121b DATA 1 true Stack[0x4] - 1018:122b FUN_1018_121b UNCONDITIONAL_CALL 0 true 1008:3099 Code2 FUN_1008_3099 FUN_1008_3099 1018:1230 FUN_1018_121b DATA 1 true Stack[0x4] - 1018:123b FUN_1018_121b CONDITIONAL_JUMP 0 true 1018:1259 Code4 LAB_1018_1259 1018:124c FUN_1018_121b DATA 1 true Stack[0x4] - 1018:125c FUN_1018_121b DATA 1 true Stack[0x4] - 1018:1261 FUN_1018_121b UNCONDITIONAL_CALL 0 true 1018:03ff Code4 FUN_1018_03ff FUN_1018_03ff 1018:1268 FUN_1018_121b UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1018:1279 FUN_1018_1274 DATA 1 true Stack[0x8] - 1018:1288 FUN_1018_1274 READ 1 true 1028:06fe Data6 DAT_1028_06fe 1018:1296 FUN_1018_1274 UNCONDITIONAL_CALL 0 true 1228:027c EXTERNAL LOADICON LOADICON 1018:129b FUN_1018_1274 DATA 1 true Stack[0x8] - 1018:12a9 FUN_1018_1274 UNCONDITIONAL_CALL 0 true 1228:0278 EXTERNAL LOADCURSOR LOADCURSOR 1018:12ae FUN_1018_1274 DATA 1 true Stack[0x8] - 1018:12c5 FUN_1018_1274 DATA 1 true Stack[0x4] - 1018:12d0 FUN_1018_1274 DATA 1 true Stack[0x8] - 1018:12fd FUN_1018_12f5 DATA 1 true Stack[0x4] - 1018:1304 FUN_1018_12f5 DATA 0 true Stack[-0x6] - 1018:1307 FUN_1018_12f5 DATA 1 true Stack[-0x6] - 1018:1316 FUN_1018_1311 DATA 1 true Stack[0x4] - 1018:1325 FUN_1018_1311 DATA 1 true Stack[0x8] - 1018:1338 FUN_1018_1311 UNCONDITIONAL_CALL 0 true 1228:0248 EXTERNAL CALLWINDOWPROC CALLWINDOWPROC 1018:133d FUN_1018_1311 DATA 1 true Stack[0x8] - 1018:1357 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:135f FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:1364 Code4 LAB_1018_1364 1018:1361 FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:152d Code4 LAB_1018_152d 1018:1366 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1018:0627 Code4 FUN_1018_0627 FUN_1018_0627 1018:136b FUN_1018_134f DATA 1 true Stack[0x4] - 1018:1376 FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:137f Code4 LAB_1018_137f 1018:137a FUN_1018_134f DATA 0 true Stack[-0x8] - 1018:137d FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:138d Code4 LAB_1018_138d 1018:137f FUN_1018_134f DATA 1 true Stack[0x4] - 1018:138a FUN_1018_134f DATA 0 true Stack[-0x8] - 1018:138f FUN_1018_134f DATA 1 true Stack[0x4] - 1018:1394 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:139b FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:13a0 Code4 LAB_1018_13a0 1018:139d FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:14be Code4 LAB_1018_14be 1018:13a0 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:13ad FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:13b2 Code4 LAB_1018_13b2 1018:13af FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:14bc Code4 LAB_1018_14bc 1018:13b2 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:13b9 FUN_1018_134f WRITE 0 true 1028:0676 Data6 DAT_1028_0676 1018:13bc FUN_1018_134f WRITE 0 true 1028:0678 Data6 DAT_1028_0678 1018:13c4 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:13cb FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:1433 Code4 LAB_1018_1433 1018:13cd FUN_1018_134f DATA 1 true Stack[0x4] - 1018:13d4 FUN_1018_134f DATA 0 true Stack[-0x2a] - 1018:13d7 FUN_1018_134f DATA 0 true Stack[-0x28] - 1018:13e2 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:13ef FUN_1018_134f DATA 1 true Stack[-0x2a] - 1018:1411 FUN_1018_134f DATA 0 true Stack[-0x8] - 1018:1418 FUN_1018_134f READ 0 true 1028:06fe Data6 DAT_1028_06fe 1018:1424 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1228:02b8 EXTERNAL CREATEWINDOWEX CREATEWINDOWEX 1018:1429 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:1430 FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:14bc Code4 LAB_1018_14bc 1018:1433 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:143e FUN_1018_134f DATA 0 true Stack[-0x26] - 1018:1441 FUN_1018_134f DATA 0 true Stack[-0x24] - 1018:1444 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:144f FUN_1018_134f DATA 0 true Stack[-0x22] - 1018:1452 FUN_1018_134f DATA 0 true Stack[-0x20] - 1018:1455 FUN_1018_134f READ 1 true 1028:06fe Data6 DAT_1028_06fe 1018:1458 FUN_1018_134f DATA 0 true Stack[-0x1e] - 1018:145f FUN_1018_134f DATA 0 true Stack[-0x1c] - 1018:1466 FUN_1018_134f DATA 0 true Stack[-0x1a] - 1018:146d FUN_1018_134f DATA 0 true Stack[-0x18] - 1018:1474 FUN_1018_134f DATA 0 true Stack[-0x16] - 1018:147f FUN_1018_134f DATA 0 true Stack[-0x14] - 1018:1482 FUN_1018_134f DATA 0 true Stack[-0x12] - 1018:1491 FUN_1018_134f DATA 0 true Stack[-0xc] - 1018:1494 FUN_1018_134f DATA 0 true Stack[-0xa] - 1018:1497 FUN_1018_134f DATA 1 true Stack[-0xc] - 1018:149a FUN_1018_134f DATA 1 true Stack[-0xa] - 1018:149d FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:14bc Code4 LAB_1018_14bc 1018:149f FUN_1018_134f DATA 1 true Stack[-0xc] - 1018:14ab FUN_1018_134f DATA 0 true Stack[-0x26] - 1018:14b0 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1228:0238 EXTERNAL SENDMESSAGE SENDMESSAGE 1018:14b5 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14bc FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:14d4 Code4 LAB_1018_14d4 1018:14be FUN_1018_134f DATA 0 true Stack[-0x8] - 1018:14c1 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14c8 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1228:0214 EXTERNAL GETDLGITEM GETDLGITEM 1018:14cd FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14d4 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14dc FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:14e6 Code4 LAB_1018_14e6 1018:14e4 FUN_1018_134f UNCONDITIONAL_JUMP 0 true 1018:152d Code4 LAB_1018_152d 1018:14e6 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14ed FUN_1018_134f UNCONDITIONAL_CALL 0 true 1018:0097 Code4 FUN_1018_0097 FUN_1018_0097 1018:14f4 FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:152d Code4 LAB_1018_152d 1018:14f6 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:14ff FUN_1018_134f UNCONDITIONAL_CALL 0 true 1018:0045 Code4 FUN_1018_0045 FUN_1018_0045 1018:1504 FUN_1018_134f DATA 1 true Stack[0x4] - 1018:1515 FUN_1018_134f UNCONDITIONAL_CALL 0 true 1228:025c EXTERNAL SETWINDOWLONG SETWINDOWLONG 1018:151a FUN_1018_134f DATA 1 true Stack[0x4] - 1018:152d FUN_1018_134f DATA 1 true Stack[0x4] - 1018:1537 FUN_1018_134f CONDITIONAL_JUMP 0 true 1018:153a Code4 LAB_1018_153a 1018:153a FUN_1018_134f DATA 0 true Stack[-0x5] - 1018:153d FUN_1018_134f DATA 1 true Stack[-0x5] - 1018:154c FUN_1018_1547 DATA 1 true Stack[0x4] - 1018:1554 FUN_1018_1547 CONDITIONAL_JUMP 0 true 1018:157f Code4 LAB_1018_157f 1018:155a FUN_1018_1547 UNCONDITIONAL_CALL 0 true 1228:01e4 EXTERNAL ISWINDOW ISWINDOW 1018:1561 FUN_1018_1547 CONDITIONAL_JUMP 0 true 1018:157f Code4 LAB_1018_157f 1018:1563 FUN_1018_1547 DATA 1 true Stack[0x4] - 1018:156a FUN_1018_1547 UNCONDITIONAL_CALL 0 true 1228:01bc EXTERNAL ISICONIC ISICONIC 1018:1571 FUN_1018_1547 CONDITIONAL_JUMP 0 true 1018:157f Code4 LAB_1018_157f 1018:1573 FUN_1018_1547 DATA 1 true Stack[0x4] - 1018:157a FUN_1018_1547 UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1018:158e FUN_1018_1586 UNCONDITIONAL_CALL 0 true 1228:01a8 EXTERNAL GETFOCUS GETFOCUS 1018:1593 FUN_1018_1586 DATA 0 true Stack[-0x6] - 1018:1596 FUN_1018_1586 DATA 0 true Stack[-0x6] - 1018:159a FUN_1018_1586 CONDITIONAL_JUMP 0 true 1018:15b9 Code4 LAB_1018_15b9 1018:159c FUN_1018_1586 DATA 1 true Stack[0x4] - 1018:15a3 FUN_1018_1586 DATA 0 true Stack[-0x6] - 1018:15a6 FUN_1018_1586 UNCONDITIONAL_CALL 0 true 1228:01e8 EXTERNAL ISCHILD ISCHILD 1018:15ad FUN_1018_1586 CONDITIONAL_JUMP 0 true 1018:15b9 Code4 LAB_1018_15b9 1018:15af FUN_1018_1586 DATA 1 true Stack[-0x6] - 1018:15b2 FUN_1018_1586 DATA 1 true Stack[0x4] - 1018:15c8 FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:15cf FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1228:01bc EXTERNAL ISICONIC ISICONIC 1018:15d6 FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:15db Code4 LAB_1018_15db 1018:15d8 FUN_1018_15c0 UNCONDITIONAL_JUMP 0 true 1018:1696 Code4 LAB_1018_1696 1018:15db FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:15e2 FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1228:0298 EXTERNAL ISZOOMED ISZOOMED 1018:15e9 FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:15ee Code4 LAB_1018_15ee 1018:15eb FUN_1018_15c0 UNCONDITIONAL_JUMP 0 true 1018:1696 Code4 LAB_1018_1696 1018:15ee FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:15f5 FUN_1018_15c0 DATA 0 true Stack[-0xc] - 1018:15fa FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1228:01c0 EXTERNAL GETWINDOWRECT GETWINDOWRECT 1018:15ff FUN_1018_15c0 DATA 1 true Stack[-0x8] - 1018:1602 FUN_1018_15c0 DATA 1 true Stack[-0xc] - 1018:1605 FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:160c FUN_1018_15c0 DATA 1 true Stack[-0x6] - 1018:160f FUN_1018_15c0 DATA 1 true Stack[-0xa] - 1018:161e FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:1685 Code4 LAB_1018_1685 1018:162c FUN_1018_15c0 DATA 0 true Stack[-0x10] - 1018:162f FUN_1018_15c0 DATA 0 true Stack[-0xe] - 1018:1632 FUN_1018_15c0 DATA 1 true Stack[-0x10] - 1018:1635 FUN_1018_15c0 DATA 1 true Stack[-0xe] - 1018:1638 FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:165d Code4 LAB_1018_165d 1018:163c FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:1641 FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:1648 FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:165d Code4 LAB_1018_165d 1018:164a FUN_1018_15c0 DATA 1 true Stack[-0x10] - 1018:1651 FUN_1018_15c0 DATA 0 true Stack[-0xc] - 1018:1656 FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1228:01b8 EXTERNAL SCREENTOCLIENT SCREENTOCLIENT 1018:165b FUN_1018_15c0 UNCONDITIONAL_JUMP 0 true 1018:1685 Code4 LAB_1018_1685 1018:165d FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:1671 FUN_1018_15c0 CONDITIONAL_JUMP 0 true 1018:1685 Code4 LAB_1018_1685 1018:167b FUN_1018_15c0 DATA 0 true Stack[-0xc] - 1018:1680 FUN_1018_15c0 UNCONDITIONAL_CALL 0 true 1228:01b8 EXTERNAL SCREENTOCLIENT SCREENTOCLIENT 1018:1685 FUN_1018_15c0 DATA 1 true Stack[-0xc] - 1018:1688 FUN_1018_15c0 DATA 1 true Stack[0x4] - 1018:168f FUN_1018_15c0 DATA 1 true Stack[-0xa] - 1018:16a5 FUN_1018_169d DATA 1 true Stack[0x8] - 1018:16aa FUN_1018_169d DATA 1 true Stack[0x4] - 1018:16af FUN_1018_169d UNCONDITIONAL_CALL 0 true 1018:0ffd Code4 FUN_1018_0ffd FUN_1018_0ffd 1018:16b6 FUN_1018_169d DATA 1 true Stack[0x4] - 1018:16bb FUN_1018_169d UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:16c2 FUN_1018_169d CONDITIONAL_JUMP 0 true 1018:16e4 Code4 LAB_1018_16e4 1018:16c4 FUN_1018_169d DATA 1 true Stack[0x8] - 1018:16cc FUN_1018_169d CONDITIONAL_JUMP 0 true 1018:16da Code4 LAB_1018_16da 1018:16ce FUN_1018_169d DATA 1 true Stack[0x4] - 1018:16d3 FUN_1018_169d UNCONDITIONAL_CALL 0 true 1018:1547 Code4 FUN_1018_1547 FUN_1018_1547 1018:16d8 FUN_1018_169d UNCONDITIONAL_JUMP 0 true 1018:16e4 Code4 LAB_1018_16e4 1018:16da FUN_1018_169d DATA 1 true Stack[0x4] - 1018:16df FUN_1018_169d UNCONDITIONAL_CALL 0 true 1018:1586 Code4 FUN_1018_1586 FUN_1018_1586 1018:16f0 FUN_1018_16eb DATA 1 true Stack[0x8] - 1018:16f5 FUN_1018_16eb DATA 1 true Stack[0x4] - 1018:1700 FUN_1018_16eb UNCONDITIONAL_CALL 0 true 1020:16e1 Code5 FUN_1020_16e1 FUN_1020_16e1 1018:1711 FUN_1018_170c DATA 1 true Stack[0x4] - 1018:1716 FUN_1018_170c UNCONDITIONAL_CALL 0 true 1018:0d9b Code4 FUN_1018_0d9b FUN_1018_0d9b 1018:171d FUN_1018_170c DATA 1 true Stack[0x4] - 1018:1722 FUN_1018_170c UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:1729 FUN_1018_170c CONDITIONAL_JUMP 0 true 1018:1737 Code4 LAB_1018_1737 1018:172b FUN_1018_170c DATA 1 true Stack[0x4] - 1018:1732 FUN_1018_170c UNCONDITIONAL_CALL 0 true 1228:01a4 EXTERNAL SETFOCUS SETFOCUS 1018:1737 FUN_1018_170c DATA 1 true Stack[0x4] - 1018:1742 FUN_1018_170c CONDITIONAL_JUMP 0 true 1018:1750 Code4 LAB_1018_1750 1018:1750 FUN_1018_170c DATA 1 true Stack[0x4] - 1018:1755 FUN_1018_170c UNCONDITIONAL_CALL 0 true 1018:15c0 Code4 FUN_1018_15c0 FUN_1018_15c0 1018:1766 FUN_1018_1761 DATA 1 true Stack[0x4] - 1018:1771 FUN_1018_1761 DATA 1 true Stack[0x8] - 1018:1776 FUN_1018_1761 DATA 1 true Stack[0x4] - 1018:178d FUN_1018_1788 DATA 1 true Stack[0x4] - 1018:1796 FUN_1018_1788 UNCONDITIONAL_CALL 0 true 1228:0258 EXTERNAL GETWINDOWLONG GETWINDOWLONG 1018:17a4 FUN_1018_1788 CONDITIONAL_JUMP 0 true 1018:17b8 Code4 LAB_1018_17b8 1018:17a6 FUN_1018_1788 DATA 1 true Stack[0x8] - 1018:17ab FUN_1018_1788 DATA 1 true Stack[0x4] - 1018:17b6 FUN_1018_1788 UNCONDITIONAL_JUMP 0 true 1018:17f1 Code4 LAB_1018_17f1 1018:17b8 FUN_1018_1788 DATA 1 true Stack[0x4] - 1018:17c3 FUN_1018_1788 CONDITIONAL_JUMP 0 true 1018:17e1 Code4 LAB_1018_17e1 1018:17c5 FUN_1018_1788 DATA 1 true Stack[0x8] - 1018:17d0 FUN_1018_1788 DATA 1 true Stack[0x4] - 1018:17df FUN_1018_1788 UNCONDITIONAL_JUMP 0 true 1018:17f1 Code4 LAB_1018_17f1 1018:17e1 FUN_1018_1788 DATA 1 true Stack[0x8] - 1018:17e6 FUN_1018_1788 DATA 1 true Stack[0x4] - 1018:17fd FUN_1018_17f8 DATA 1 true Stack[0x4] - 1018:1806 FUN_1018_17f8 UNCONDITIONAL_CALL 0 true 1228:0258 EXTERNAL GETWINDOWLONG GETWINDOWLONG 1018:1814 FUN_1018_17f8 CONDITIONAL_JUMP 0 true 1018:1828 Code4 LAB_1018_1828 1018:1816 FUN_1018_17f8 DATA 1 true Stack[0x8] - 1018:181b FUN_1018_17f8 DATA 1 true Stack[0x4] - 1018:1826 FUN_1018_17f8 UNCONDITIONAL_JUMP 0 true 1018:1861 Code4 LAB_1018_1861 1018:1828 FUN_1018_17f8 DATA 1 true Stack[0x4] - 1018:1833 FUN_1018_17f8 CONDITIONAL_JUMP 0 true 1018:1851 Code4 LAB_1018_1851 1018:1835 FUN_1018_17f8 DATA 1 true Stack[0x8] - 1018:1840 FUN_1018_17f8 DATA 1 true Stack[0x4] - 1018:184f FUN_1018_17f8 UNCONDITIONAL_JUMP 0 true 1018:1861 Code4 LAB_1018_1861 1018:1851 FUN_1018_17f8 DATA 1 true Stack[0x8] - 1018:1856 FUN_1018_17f8 DATA 1 true Stack[0x4] - 1018:1870 FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:1877 FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:187c FUN_1018_1868 UNCONDITIONAL_CALL 0 true 1228:01d0 EXTERNAL BEGINPAINT BEGINPAINT 1018:1881 FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:188c FUN_1018_1868 CONDITIONAL_JUMP 0 true 1018:18a5 Code4 LAB_1018_18a5 1018:188e FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:1891 FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:1896 FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:18a5 FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:18a8 FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:18ad FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:18b8 FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:18c3 FUN_1018_1868 CONDITIONAL_JUMP 0 true 1018:18d1 Code4 LAB_1018_18d1 1018:18d1 FUN_1018_1868 DATA 1 true Stack[0x4] - 1018:18d8 FUN_1018_1868 DATA 0 true Stack[-0x24] - 1018:18dd FUN_1018_1868 UNCONDITIONAL_CALL 0 true 1228:01d4 EXTERNAL ENDPAINT ENDPAINT 1018:18f1 FUN_1018_18e9 DATA 1 true Stack[0x4] - 1018:18fc FUN_1018_18e9 CONDITIONAL_JUMP 0 true 1018:1917 Code4 LAB_1018_1917 1018:18fe FUN_1018_18e9 DATA 1 true Stack[0x8] - 1018:1906 FUN_1018_18e9 CONDITIONAL_JUMP 0 true 1018:1917 Code4 LAB_1018_1917 1018:1908 FUN_1018_18e9 DATA 1 true Stack[0x4] - 1018:1917 FUN_1018_18e9 DATA 1 true Stack[0x8] - 1018:191f FUN_1018_18e9 CONDITIONAL_JUMP 0 true 1018:1949 Code4 LAB_1018_1949 1018:1921 FUN_1018_18e9 DATA 1 true Stack[0x4] - 1018:1928 FUN_1018_18e9 DATA 0 true Stack[-0xc] - 1018:192d FUN_1018_18e9 UNCONDITIONAL_CALL 0 true 1228:01c0 EXTERNAL GETWINDOWRECT GETWINDOWRECT 1018:1932 FUN_1018_18e9 DATA 1 true Stack[-0x6] - 1018:1935 FUN_1018_18e9 DATA 1 true Stack[-0xa] - 1018:1938 FUN_1018_18e9 DATA 1 true Stack[0x4] - 1018:193f FUN_1018_18e9 DATA 1 true Stack[-0x8] - 1018:1942 FUN_1018_18e9 DATA 1 true Stack[-0xc] - 1018:1949 FUN_1018_18e9 DATA 1 true Stack[0x8] - 1018:194e FUN_1018_18e9 DATA 1 true Stack[0x4] - 1018:1965 FUN_1018_1960 DATA 1 true Stack[0x4] - 1018:196a FUN_1018_1960 UNCONDITIONAL_CALL 0 true 1018:15c0 Code4 FUN_1018_15c0 FUN_1018_15c0 1018:196f FUN_1018_1960 DATA 1 true Stack[0x8] - 1018:1974 FUN_1018_1960 DATA 1 true Stack[0x4] - 1018:198e FUN_1018_1986 DATA 1 true Stack[0x4] - 1018:1999 FUN_1018_1986 CONDITIONAL_JUMP 0 true 1018:19f7 Code4 LAB_1018_19f7 1018:19a4 FUN_1018_1986 CONDITIONAL_JUMP 0 true 1018:19f7 Code4 LAB_1018_19f7 1018:19a6 FUN_1018_1986 DATA 1 true Stack[0x4] - 1018:19ad FUN_1018_1986 UNCONDITIONAL_CALL 0 true 1228:019c EXTERNAL SETCAPTURE SETCAPTURE 1018:19b2 FUN_1018_1986 DATA 0 true Stack[-0x16] - 1018:19bf FUN_1018_1986 UNCONDITIONAL_CALL 0 true 1228:0234 EXTERNAL PEEKMESSAGE PEEKMESSAGE 1018:19c6 FUN_1018_1986 CONDITIONAL_JUMP 0 true 1018:19dc Code4 LAB_1018_19dc 1018:19c8 FUN_1018_1986 DATA 0 true Stack[-0x16] - 1018:19cd FUN_1018_1986 UNCONDITIONAL_CALL 0 true 1228:0240 EXTERNAL TRANSLATEMESSAGE TRANSLATEMESSAGE 1018:19d2 FUN_1018_1986 DATA 0 true Stack[-0x16] - 1018:19d7 FUN_1018_1986 UNCONDITIONAL_CALL 0 true 1228:0244 EXTERNAL DISPATCHMESSAGE DISPATCHMESSAGE 1018:19dc FUN_1018_1986 DATA 1 true Stack[0x4] - 1018:19eb FUN_1018_1986 DATA 0 true Stack[-0x14] - 1018:19f0 FUN_1018_1986 CONDITIONAL_JUMP 0 true 1018:19b2 Code4 LAB_1018_19b2 1018:19f2 FUN_1018_1986 UNCONDITIONAL_CALL 0 true 1228:01a0 EXTERNAL RELEASECAPTURE RELEASECAPTURE 1018:19f7 FUN_1018_1986 DATA 1 true Stack[0x8] - 1018:19fc FUN_1018_1986 DATA 1 true Stack[0x4] - 1018:1a15 FUN_1018_1a0e DATA 1 true Stack[0x4] - 1018:1a1a FUN_1018_1a0e UNCONDITIONAL_CALL 0 true 1018:0673 Code4 FUN_1018_0673 FUN_1018_0673 1018:1a21 FUN_1018_1a0e CONDITIONAL_JUMP 0 true 1018:1a4a Code4 LAB_1018_1a4a 1018:1a23 FUN_1018_1a0e DATA 1 true Stack[0x8] - 1018:1a2d FUN_1018_1a0e CONDITIONAL_JUMP 0 true 1018:1a3b Code4 LAB_1018_1a3b 1018:1a2f FUN_1018_1a0e DATA 1 true Stack[0x4] - 1018:1a34 FUN_1018_1a0e UNCONDITIONAL_CALL 0 true 1018:1586 Code4 FUN_1018_1586 FUN_1018_1586 1018:1a39 FUN_1018_1a0e UNCONDITIONAL_JUMP 0 true 1018:1a4a Code4 LAB_1018_1a4a 1018:1a3e FUN_1018_1a0e CONDITIONAL_JUMP 0 true 1018:1a4a Code4 LAB_1018_1a4a 1018:1a40 FUN_1018_1a0e DATA 1 true Stack[0x4] - 1018:1a45 FUN_1018_1a0e UNCONDITIONAL_CALL 0 true 1018:1547 Code4 FUN_1018_1547 FUN_1018_1547 1018:1a4a FUN_1018_1a0e DATA 1 true Stack[0x8] - 1018:1a4f FUN_1018_1a0e DATA 1 true Stack[0x4] - 1018:1a68 FUN_1018_1a61 UNCONDITIONAL_CALL 0 true 1020:03ef Code5 FUN_1020_03ef FUN_1020_03ef 1018:1a6d FUN_1018_1a61 CONDITIONAL_JUMP 0 true 1018:1a72 Code4 LAB_1018_1a72 1018:1a6f FUN_1018_1a61 UNCONDITIONAL_JUMP 0 true 1018:1afc Code4 LAB_1018_1afc 1018:1a75 FUN_1018_1a61 DATA 1 true Stack[0x4] - 1018:1a7a FUN_1018_1a61 UNCONDITIONAL_CALL 0 true 1008:2d99 Code2 FUN_1008_2d99 FUN_1008_2d99 1018:1a7f FUN_1018_1a61 DATA 1 true Stack[0xa] - 1018:1a82 FUN_1018_1a61 DATA 1 true Stack[0xc] - 1018:1a85 FUN_1018_1a61 DATA 1 true Stack[0x4] - 1018:1a94 FUN_1018_1a61 WRITE 0 true 1028:064e Data6 DAT_1028_064e 1018:1a97 FUN_1018_1a61 WRITE 0 true 1028:0650 Data6 DAT_1028_064e+2 1018:1ac3 FUN_1018_1a61 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1018:1ac7 FUN_1018_1a61 UNCONDITIONAL_CALL 0 true 1228:0030 EXTERNAL MAKEPROCINSTANCE MAKEPROCINSTANCE 1018:1acc FUN_1018_1a61 WRITE 0 true 1028:0672 Data6 DAT_1028_0672 1018:1acf FUN_1018_1a61 WRITE 0 true 1028:0674 Data6 DAT_1028_0674 1018:1ad3 FUN_1018_1a61 UNCONDITIONAL_CALL 0 true 1008:2e76 Code2 FUN_1008_2e76 FUN_1008_2e76 1018:1ad8 FUN_1018_1a61 READ 0 true 1028:06fc Data6 DAT_1028_06fc 1018:1add FUN_1018_1a61 CONDITIONAL_JUMP 0 true 1018:1aea Code4 LAB_1018_1aea 1018:1adf FUN_1018_1a61 DATA 1 true Stack[0x4] - 1018:1aea FUN_1018_1a61 DATA 1 true Stack[0x4] - 1018:1af2 FUN_1018_1a61 CONDITIONAL_JUMP 0 true 1018:1afc Code4 LAB_1018_1afc 1018:1afc FUN_1018_1a61 DATA 1 true Stack[0x4] - 1018:1b0d FUN_1018_1b08 READ 0 true 1028:0674 Data6 DAT_1028_0674 1018:1b11 FUN_1018_1b08 READ 0 true 1028:0672 Data6 DAT_1028_0672 1018:1b15 FUN_1018_1b08 UNCONDITIONAL_CALL 0 true 1228:0034 EXTERNAL FREEPROCINSTANCE FREEPROCINSTANCE 1018:1b1d FUN_1018_1b08 DATA 1 true Stack[0x4] - 1018:1b22 FUN_1018_1b08 UNCONDITIONAL_CALL 0 true 1008:2dcd Code2 FUN_1008_2dcd FUN_1008_2dcd 1018:1b29 FUN_1018_1b08 UNCONDITIONAL_CALL 0 true 1020:0439 Code5 FUN_1020_0439 FUN_1020_0439 1018:1b3d FUN_1018_1b35 DATA 0 true Stack[-0x5] - 1018:1b41 FUN_1018_1b35 DATA 1 true Stack[-0x5] - 1018:1b5c FUN_1018_1b57 DATA 1 true Stack[0x4] - 1018:1b67 FUN_1018_1b57 DATA 1 true Stack[0x4] - 1018:1b7a FUN_1018_1b57 DATA 1 true Stack[0x4] - 1018:1b8d FUN_1018_1b57 CONDITIONAL_JUMP 0 true 1018:1ba0 Code4 LAB_1018_1ba0 1018:1b8f FUN_1018_1b57 READ 0 true 1028:0700 Data6 DAT_1028_0700 1018:1b99 FUN_1018_1b57 UNCONDITIONAL_CALL 0 true 1018:0e9e Code4 FUN_1018_0e9e FUN_1018_0e9e 1018:1b9e FUN_1018_1b57 UNCONDITIONAL_JUMP 0 true 1018:1ba9 Code4 LAB_1018_1ba9 1018:1ba0 FUN_1018_1b57 DATA 1 true Stack[0x4] - 1018:1bb5 FUN_1018_1bb0 DATA 1 true Stack[0x4] - 1018:1bbd FUN_1018_1bb0 CONDITIONAL_JUMP 0 true 1018:1bc9 Code4 LAB_1018_1bc9 1018:1bc7 FUN_1018_1bb0 UNCONDITIONAL_JUMP 0 true 1018:1bd8 Code4 LAB_1018_1bd8 1018:1bc9 FUN_1018_1bb0 DATA 1 true Stack[0x4] - 1018:1be4 FUN_1018_1bdf DATA 1 true Stack[0x8] - 1018:1be7 FUN_1018_1bdf DATA 1 true Stack[0xa] - 1018:1bea FUN_1018_1bdf DATA 1 true Stack[0x4] - 1018:1c04 FUN_1018_1bfc DATA 0 true Stack[-0x17] - 1018:1c08 FUN_1018_1bfc DATA 0 true Stack[-0x16] - 1018:1c15 FUN_1018_1bfc UNCONDITIONAL_CALL 0 true 1228:0234 EXTERNAL PEEKMESSAGE PEEKMESSAGE 1018:1c1c FUN_1018_1bfc CONDITIONAL_JUMP 0 true 1018:1c54 Code4 LAB_1018_1c54 1018:1c1e FUN_1018_1bfc DATA 0 true Stack[-0x14] - 1018:1c22 FUN_1018_1bfc CONDITIONAL_JUMP 0 true 1018:1c2a Code4 LAB_1018_1c2a 1018:1c24 FUN_1018_1bfc DATA 0 true Stack[-0x17] - 1018:1c28 FUN_1018_1bfc UNCONDITIONAL_JUMP 0 true 1018:1c52 Code4 LAB_1018_1c52 1018:1c2a FUN_1018_1bfc DATA 0 true Stack[-0x16] - 1018:1c2f FUN_1018_1bfc DATA 1 true Stack[0x4] - 1018:1c3c FUN_1018_1bfc CONDITIONAL_JUMP 0 true 1018:1c52 Code4 LAB_1018_1c52 1018:1c3e FUN_1018_1bfc DATA 0 true Stack[-0x16] - 1018:1c43 FUN_1018_1bfc UNCONDITIONAL_CALL 0 true 1228:0240 EXTERNAL TRANSLATEMESSAGE TRANSLATEMESSAGE 1018:1c48 FUN_1018_1bfc DATA 0 true Stack[-0x16] - 1018:1c4d FUN_1018_1bfc UNCONDITIONAL_CALL 0 true 1228:0244 EXTERNAL DISPATCHMESSAGE DISPATCHMESSAGE 1018:1c52 FUN_1018_1bfc UNCONDITIONAL_JUMP 0 true 1018:1c68 Code4 LAB_1018_1c68 1018:1c54 FUN_1018_1bfc DATA 1 true Stack[0x4] - 1018:1c61 FUN_1018_1bfc CONDITIONAL_JUMP 0 true 1018:1c68 Code4 LAB_1018_1c68 1018:1c63 FUN_1018_1bfc UNCONDITIONAL_CALL 0 true 1228:023c EXTERNAL WAITMESSAGE WAITMESSAGE 1018:1c68 FUN_1018_1bfc DATA 0 true Stack[-0x17] - 1018:1c6c FUN_1018_1bfc CONDITIONAL_JUMP 0 true 1018:1c08 Code4 LAB_1018_1c08 1018:1c6e FUN_1018_1bfc DATA 1 true Stack[-0x12] - 1018:1c71 FUN_1018_1bfc DATA 1 true Stack[0x4] - 1018:1c87 FUN_1018_1c7f DATA 1 true Stack[0x8] - 1018:1c8c FUN_1018_1c7f DATA 1 true Stack[0x4] - 1018:1c99 FUN_1018_1c7f CONDITIONAL_JUMP 0 true 1018:1cc7 Code4 LAB_1018_1cc7 1018:1c9b FUN_1018_1c7f DATA 1 true Stack[0x8] - 1018:1ca0 FUN_1018_1c7f DATA 1 true Stack[0x4] - 1018:1cad FUN_1018_1c7f CONDITIONAL_JUMP 0 true 1018:1cc7 Code4 LAB_1018_1cc7 1018:1caf FUN_1018_1c7f DATA 1 true Stack[0x8] - 1018:1cb4 FUN_1018_1c7f DATA 1 true Stack[0x4] - 1018:1cc1 FUN_1018_1c7f CONDITIONAL_JUMP 0 true 1018:1cc7 Code4 LAB_1018_1cc7 1018:1cc5 FUN_1018_1c7f UNCONDITIONAL_JUMP 0 true 1018:1cc9 Code4 LAB_1018_1cc9 1018:1cc9 FUN_1018_1c7f DATA 0 true Stack[-0x5] - 1018:1ccc FUN_1018_1c7f DATA 1 true Stack[-0x5] - 1018:1cde FUN_1018_1cd6 DATA 0 true Stack[-0x5] - 1018:1ce2 FUN_1018_1cd6 DATA 1 true Stack[0x4] - 1018:1ced FUN_1018_1cd6 CONDITIONAL_JUMP 0 true 1018:1d18 Code4 LAB_1018_1d18 1018:1cf8 FUN_1018_1cd6 CONDITIONAL_JUMP 0 true 1018:1d18 Code4 LAB_1018_1d18 1018:1cfa FUN_1018_1cd6 DATA 1 true Stack[0x4] - 1018:1d05 FUN_1018_1cd6 DATA 1 true Stack[0x8] - 1018:1d0a FUN_1018_1cd6 UNCONDITIONAL_CALL 0 true 1228:0210 EXTERNAL ISDIALOGMESSAGE ISDIALOGMESSAGE 1018:1d15 FUN_1018_1cd6 DATA 0 true Stack[-0x5] - 1018:1d18 FUN_1018_1cd6 DATA 1 true Stack[-0x5] - 1018:1d2a FUN_1018_1d22 DATA 1 true Stack[0x4] - 1018:1d32 FUN_1018_1d22 CONDITIONAL_JUMP 0 true 1018:1d51 Code4 LAB_1018_1d51 1018:1d3c FUN_1018_1d22 DATA 1 true Stack[0x4] - 1018:1d43 FUN_1018_1d22 DATA 1 true Stack[0x8] - 1018:1d48 FUN_1018_1d22 UNCONDITIONAL_CALL 0 true 1228:0284 EXTERNAL TRANSLATEACCELERATOR TRANSLATEACCELERATOR 1018:1d4f FUN_1018_1d22 CONDITIONAL_JUMP 0 true 1018:1d55 Code4 LAB_1018_1d55 1018:1d53 FUN_1018_1d22 UNCONDITIONAL_JUMP 0 true 1018:1d57 Code4 LAB_1018_1d57 1018:1d57 FUN_1018_1d22 DATA 0 true Stack[-0x5] - 1018:1d5a FUN_1018_1d22 DATA 1 true Stack[-0x5] - 1018:1d6c FUN_1018_1d64 DATA 1 true Stack[0x4] - 1018:1d7b FUN_1018_1d64 DATA 0 true Stack[-0xa] - 1018:1d7e FUN_1018_1d64 DATA 0 true Stack[-0x8] - 1018:1d81 FUN_1018_1d64 DATA 1 true Stack[-0xa] - 1018:1d84 FUN_1018_1d64 DATA 1 true Stack[-0x8] - 1018:1d87 FUN_1018_1d64 CONDITIONAL_JUMP 0 true 1018:1d9e Code4 LAB_1018_1d9e 1018:1d89 FUN_1018_1d64 DATA 1 true Stack[-0xa] - 1018:1d90 FUN_1018_1d64 DATA 1 true Stack[0x8] - 1018:1d95 FUN_1018_1d64 UNCONDITIONAL_CALL 0 true 1228:02b4 EXTERNAL TRANSLATEMDISYSACCEL TRANSLATEMDISYSACCEL 1018:1d9c FUN_1018_1d64 CONDITIONAL_JUMP 0 true 1018:1da2 Code4 LAB_1018_1da2 1018:1da0 FUN_1018_1d64 UNCONDITIONAL_JUMP 0 true 1018:1da4 Code4 LAB_1018_1da4 1018:1da4 FUN_1018_1d64 DATA 0 true Stack[-0x5] - 1018:1da7 FUN_1018_1d64 DATA 1 true Stack[-0x5] - 1018:1dbb FUN_1018_1db1 DATA 0 true Stack[-0x8] - 1018:1dbe FUN_1018_1db1 DATA 0 true Stack[-0x6] - 1018:1dc1 FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1dc4 FUN_1018_1db1 DATA 1 true Stack[0xa] - 1018:1dc7 FUN_1018_1db1 CONDITIONAL_JUMP 0 true 1018:1e2c Code4 LAB_1018_1e2c 1018:1dc9 FUN_1018_1db1 UNCONDITIONAL_CALL 0 true 1008:2de0 Code2 FUN_1008_2de0 FUN_1008_2de0 1018:1dd0 FUN_1018_1db1 CONDITIONAL_JUMP 0 true 1018:1df4 Code4 LAB_1018_1df4 1018:1dd4 FUN_1018_1db1 DATA 1 true Stack[0x4] - 1018:1de2 FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1ded FUN_1018_1db1 UNCONDITIONAL_CALL 0 true 1008:2dff Code2 FUN_1008_2dff FUN_1008_2dff 1018:1df2 FUN_1018_1db1 UNCONDITIONAL_JUMP 0 true 1018:1e2c Code4 LAB_1018_1e2c 1018:1df4 FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1dfc FUN_1018_1db1 CONDITIONAL_JUMP 0 true 1018:1e20 Code4 LAB_1018_1e20 1018:1dfe FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1e05 FUN_1018_1db1 DATA 1 true Stack[0x4] - 1018:1e13 FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1e1e FUN_1018_1db1 UNCONDITIONAL_JUMP 0 true 1018:1e2c Code4 LAB_1018_1e2c 1018:1e20 FUN_1018_1db1 DATA 1 true Stack[0x8] - 1018:1e23 FUN_1018_1db1 DATA 1 true Stack[0xa] - 1018:1e26 FUN_1018_1db1 DATA 0 true Stack[-0x8] - 1018:1e29 FUN_1018_1db1 DATA 0 true Stack[-0x6] - 1018:1e2c FUN_1018_1db1 DATA 1 true Stack[-0x8] - 1018:1e2f FUN_1018_1db1 DATA 1 true Stack[-0x6] - 1018:1e43 FUN_1018_1e39 DATA 0 true Stack[-0x8] - 1018:1e46 FUN_1018_1e39 DATA 0 true Stack[-0x6] - 1018:1e49 FUN_1018_1e39 DATA 1 true Stack[0x8] - 1018:1e4c FUN_1018_1e39 DATA 1 true Stack[0xa] - 1018:1e4f FUN_1018_1e39 CONDITIONAL_JUMP 0 true 1018:1ea3 Code4 LAB_1018_1ea3 1018:1e51 FUN_1018_1e39 DATA 0 true Stack[0xa] - 1018:1e54 FUN_1018_1e39 DATA 0 true Stack[0x8] - 1018:1e57 FUN_1018_1e39 DATA 1 true Stack[0x4] - 1018:1e64 FUN_1018_1e39 CONDITIONAL_JUMP 0 true 1018:1ea3 Code4 LAB_1018_1ea3 1018:1e66 FUN_1018_1e39 DATA 1 true Stack[0x8] - 1018:1e73 FUN_1018_1e39 CONDITIONAL_JUMP 0 true 1018:1e97 Code4 LAB_1018_1e97 1018:1e75 FUN_1018_1e39 DATA 1 true Stack[0x8] - 1018:1e7c FUN_1018_1e39 DATA 1 true Stack[0x4] - 1018:1e8a FUN_1018_1e39 DATA 1 true Stack[0x8] - 1018:1e95 FUN_1018_1e39 UNCONDITIONAL_JUMP 0 true 1018:1ea3 Code4 LAB_1018_1ea3 1018:1e97 FUN_1018_1e39 DATA 1 true Stack[0x8] - 1018:1e9a FUN_1018_1e39 DATA 1 true Stack[0xa] - 1018:1e9d FUN_1018_1e39 DATA 0 true Stack[-0x8] - 1018:1ea0 FUN_1018_1e39 DATA 0 true Stack[-0x6] - 1018:1ea3 FUN_1018_1e39 DATA 1 true Stack[-0x8] - 1018:1ea6 FUN_1018_1e39 DATA 1 true Stack[-0x6] - 1018:1eb8 FUN_1018_1eb0 DATA 0 true Stack[-0x6] - 1018:1ebd FUN_1018_1eb0 DATA 0 true Stack[0xa] - 1018:1ec0 FUN_1018_1eb0 DATA 0 true Stack[0x8] - 1018:1ec3 FUN_1018_1eb0 DATA 1 true Stack[0x4] - 1018:1ed0 FUN_1018_1eb0 CONDITIONAL_JUMP 0 true 1018:1f0a Code4 LAB_1018_1f0a 1018:1ed2 FUN_1018_1eb0 DATA 1 true Stack[0x8] - 1018:1edd FUN_1018_1eb0 DATA 0 true Stack[-0x8] - 1018:1ee0 FUN_1018_1eb0 DATA 0 true Stack[-0x8] - 1018:1ee4 FUN_1018_1eb0 CONDITIONAL_JUMP 0 true 1018:1ef6 Code4 LAB_1018_1ef6 1018:1ee6 FUN_1018_1eb0 DATA 0 true Stack[-0x8] - 1018:1ee9 FUN_1018_1eb0 DATA 1 true Stack[0x4] - 1018:1ef4 FUN_1018_1eb0 UNCONDITIONAL_JUMP 0 true 1018:1efc Code4 LAB_1018_1efc 1018:1ef6 FUN_1018_1eb0 DATA 1 true Stack[-0x8] - 1018:1ef9 FUN_1018_1eb0 DATA 0 true Stack[-0x6] - 1018:1eff FUN_1018_1eb0 DATA 1 true Stack[0x8] - 1018:1f0a FUN_1018_1eb0 DATA 1 true Stack[-0x6] - 1018:1f1c FUN_1018_1f14 DATA 0 true Stack[-0x24] - 1018:1f26 FUN_1018_1f14 DATA 0 true Stack[0x8] - 1018:1f2b FUN_1018_1f14 UNCONDITIONAL_CALL 0 true 1228:02ac EXTERNAL WVSPRINTF WVSPRINTF 1018:1f32 FUN_1018_1f14 DATA 0 true Stack[-0x24] - 1018:1f3e FUN_1018_1f14 READ 0 true 1028:0668 Data6 DAT_1028_0668 1018:1f3e FUN_1018_1f14 READ 0 false 1028:0666 Data6 DAT_1028_0666 1018:1f3e FUN_1018_1f14 COMPUTED_CALL -1 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1018:1f45 FUN_1018_1f14 CONDITIONAL_JUMP 0 true 1018:1f4f Code4 LAB_1018_1f4f 1018:1f47 FUN_1018_1f14 DATA 1 true Stack[0x8] - 1018:1f4a FUN_1018_1f14 UNCONDITIONAL_CALL 0 true 1020:0061 Code5 FUN_1020_0061 FUN_1020_0061 1018:1f5e FUN_1018_1f56 DATA 1 true Stack[0x4] - 1018:1f6d FUN_1018_1f56 DATA 0 true Stack[-0x5] - 1018:1f70 FUN_1018_1f56 DATA 1 true Stack[-0x5] - 1020:0009 FUN_1020_0002 CONDITIONAL_JUMP 0 true 1020:0058 Code5 LAB_1020_0058 1020:000b FUN_1020_0002 WRITE 0 true 1028:071c Data6 DAT_1028_071c 1020:000f FUN_1020_0002 WRITE 0 true 1028:06fc Data6 DAT_1028_06fc 1020:0013 FUN_1020_0002 WRITE 0 true 1028:06fe Data6 DAT_1028_06fe 1020:0017 FUN_1020_0002 WRITE 0 true 1028:0700 Data6 DAT_1028_0700 1020:001b FUN_1020_0002 WRITE 0 true 1028:0702 Data6 DAT_1028_0702 1020:001f FUN_1020_0002 WRITE 0 true 1028:0704 Data6 DAT_1028_0702+2 1020:0026 FUN_1020_0002 UNCONDITIONAL_CALL 0 true 1228:001c EXTERNAL WAITEVENT WAITEVENT 1020:002b FUN_1020_0002 READ 0 true 1028:06fe Data6 DAT_1028_06fe 1020:002f FUN_1020_0002 UNCONDITIONAL_CALL 0 true 1228:0190 EXTERNAL INITAPP INITAPP 1020:0036 FUN_1020_0002 CONDITIONAL_JUMP 0 true 1020:0058 Code5 LAB_1020_0058 1020:0038 FUN_1020_0002 UNCONDITIONAL_CALL 0 true 1228:0078 EXTERNAL GETWINFLAGS GETWINFLAGS 1020:0041 FUN_1020_0002 CONDITIONAL_JUMP 0 true 1020:0049 Code5 LAB_1020_0049 1020:0046 FUN_1020_0002 CONDITIONAL_JUMP 0 true 1020:0049 Code5 LAB_1020_0049 1020:0049 FUN_1020_0002 WRITE 0 true 1028:0726 Data6 DAT_1028_0726 1020:004d FUN_1020_0002 WRITE 0 true 1028:0724 Data6 DAT_1028_0724 1020:005f FUN_1020_005d UNCONDITIONAL_JUMP 0 true 1020:0065 Code5 LAB_1020_0065 1020:0065 FUN_1020_0061 WRITE 0 true 1028:0716 Data6 DAT_1028_0716 1020:006c FUN_1020_0061 CONDITIONAL_JUMP 0 true 1020:007a Code5 LAB_1020_007a 1020:0071 FUN_1020_0061 CONDITIONAL_JUMP 0 true 1020:007a Code5 LAB_1020_007a 1020:007a FUN_1020_0061 WRITE 0 true 1028:0718 Data6 DAT_1028_0718 1020:007e FUN_1020_0061 WRITE 0 true 1028:071a Data6 DAT_1028_071a 1020:0082 FUN_1020_0061 READ 0 true 1028:071c Data6 DAT_1028_071c 1020:0087 FUN_1020_0061 CONDITIONAL_JUMP 0 true 1020:008c Code5 LAB_1020_008c 1020:0089 FUN_1020_0061 UNCONDITIONAL_CALL 0 true 1020:00d2 Code5 FUN_1020_00d2 FUN_1020_00d2 1020:008c FUN_1020_0061 READ 1 true 1028:0718 Data6 DAT_1028_0718 1020:008f FUN_1020_0061 READ 1 true 1028:071a Data6 DAT_1028_071a 1020:0093 FUN_1020_0061 CONDITIONAL_JUMP 0 true 1020:00cb Code5 LAB_1020_00cb 1020:0098 FUN_1020_0061 READ 1 true 1028:0716 Data6 DAT_1028_0716 1020:00a0 FUN_1020_0061 UNCONDITIONAL_CALL 0 true 1020:00f0 Code5 FUN_1020_00f0 FUN_1020_00f0 1020:00a6 FUN_1020_0061 READ 1 true 1028:071a Data6 DAT_1028_071a 1020:00ac FUN_1020_0061 UNCONDITIONAL_CALL 0 true 1020:00f0 Code5 FUN_1020_00f0 FUN_1020_00f0 1020:00af FUN_1020_0061 READ 1 true 1028:0718 Data6 DAT_1028_0718 1020:00b5 FUN_1020_0061 UNCONDITIONAL_CALL 0 true 1020:00f0 Code5 FUN_1020_00f0 FUN_1020_00f0 1020:00c6 FUN_1020_0061 UNCONDITIONAL_CALL 0 true 1228:018c EXTERNAL MESSAGEBOX MESSAGEBOX 1020:00cb FUN_1020_0061 READ 1 true 1028:0716 Data6 DAT_1028_0716 1020:00d2 FUN_1020_00d2 READ 1 true 1028:0712 Data6 DAT_1028_0712 1020:00da FUN_1020_00d2 CONDITIONAL_JUMP 0 true 1020:00ef Code5 LAB_1020_00ef 1020:00de FUN_1020_00d2 WRITE 0 true 1028:0712 Data6 DAT_1028_0712 1020:00e1 FUN_1020_00d2 WRITE 0 true 1028:0714 Data6 DAT_1028_0714 1020:00e4 FUN_1020_00d2 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:00fa FUN_1020_00f0 CONDITIONAL_JUMP 0 true 1020:00ff Code5 LAB_1020_00ff 1020:0104 FUN_1020_00f0 CONDITIONAL_JUMP 0 true 1020:00f0 Code5 FUN_1020_00f0 FUN_1020_00f0 1020:0132 FUN_1020_012d DATA 1 true Stack[0x4] - 1020:0135 FUN_1020_012d UNCONDITIONAL_CALL 0 true 1020:01ca Code5 FUN_1020_01ca FUN_1020_01ca 1020:013c FUN_1020_012d CONDITIONAL_JUMP 0 true 1020:0141 Code5 LAB_1020_0141 1020:0144 FUN_1020_012d UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:014c FUN_1020_0147 DATA 1 true Stack[0x4] - 1020:014f FUN_1020_0147 DATA 1 true Stack[0x6] - 1020:0152 FUN_1020_0147 DATA 1 true Stack[0x8] - 1020:0155 FUN_1020_0147 UNCONDITIONAL_CALL 0 true 1020:02d7 Code5 FUN_1020_02d7 FUN_1020_02d7 1020:015c FUN_1020_0147 CONDITIONAL_JUMP 0 true 1020:0161 Code5 LAB_1020_0161 1020:0164 FUN_1020_0147 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:0170 FUN_1020_0167 UNCONDITIONAL_CALL 0 true 1228:0084 EXTERNAL GETFREESPACE GETFREESPACE 1020:0175 FUN_1020_0167 READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:0179 FUN_1020_0167 CONDITIONAL_JUMP 0 true 1020:0190 Code5 LAB_1020_0190 1020:018a FUN_1020_0167 READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:018e FUN_1020_0167 CONDITIONAL_JUMP 0 true 1020:017b Code5 LAB_1020_017b 1020:019e runtime_1020_0195 UNCONDITIONAL_CALL 0 true 1228:0018 EXTERNAL GLOBALCOMPACT GLOBALCOMPACT 1020:01a5 runtime_1020_0195 CONDITIONAL_JUMP 0 true 1020:01c5 Code5 LAB_1020_01c5 1020:01a7 runtime_1020_0195 READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:01ab runtime_1020_0195 CONDITIONAL_JUMP 0 true 1020:01c5 Code5 LAB_1020_01c5 1020:01b4 runtime_1020_0195 CONDITIONAL_JUMP 0 true 1020:01ba Code5 LAB_1020_01ba 1020:01bf runtime_1020_0195 READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:01c3 runtime_1020_0195 CONDITIONAL_JUMP 0 true 1020:01ad Code5 LAB_1020_01ad 1020:01cc FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:021e Code5 LAB_1020_021e 1020:01ce FUN_1020_01ca WRITE 0 true 1028:4d38 Data6 DAT_1028_4d38 1020:01d1 FUN_1020_01ca READ 1 true 1028:0708 Data6 DAT_1028_0708 1020:01d5 FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:01f6 Code5 LAB_1020_01f6 1020:01d7 FUN_1020_01ca UNCONDITIONAL_CALL 0 true 1020:0222 Code5 FUN_1020_0222 FUN_1020_0222 1020:01da FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0221 Code5 LAB_1020_0221 1020:01dc FUN_1020_01ca READ 0 true 1028:0708 Data6 DAT_1028_0708 1020:01e1 FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0203 Code5 LAB_1020_0203 1020:01e3 FUN_1020_01ca READ 1 true 1028:4d38 Data6 DAT_1028_4d38 1020:01e6 FUN_1020_01ca READ 1 true 1028:070a Data6 DAT_1028_070a 1020:01ef FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0203 Code5 LAB_1020_0203 1020:01f1 FUN_1020_01ca UNCONDITIONAL_CALL 0 true 1020:023c Code5 FUN_1020_023c FUN_1020_023c 1020:01f4 FUN_1020_01ca UNCONDITIONAL_JUMP 0 true 1020:0201 Code5 LAB_1020_0201 1020:01f6 FUN_1020_01ca UNCONDITIONAL_CALL 0 true 1020:023c Code5 FUN_1020_023c FUN_1020_023c 1020:01f9 FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0221 Code5 LAB_1020_0221 1020:01fb FUN_1020_01ca READ 1 true 1028:4d38 Data6 DAT_1028_4d38 1020:01fe FUN_1020_01ca UNCONDITIONAL_CALL 0 true 1020:0222 Code5 FUN_1020_0222 FUN_1020_0222 1020:0201 FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0221 Code5 LAB_1020_0221 1020:0203 FUN_1020_01ca READ 1 true 1028:070e Data6 DAT_1028_070e 1020:0206 FUN_1020_01ca READ 1 true 1028:0710 Data6 DAT_1028_0710 1020:020a FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0214 Code5 LAB_1020_0214 1020:020c FUN_1020_01ca READ 0 true 1028:4d38 Data6 DAT_1028_4d38 1020:0210 FUN_1020_01ca READ 0 true 1028:0710 Data6 DAT_1028_0710 1020:0210 FUN_1020_01ca READ 0 false 1028:070e Data6 DAT_1028_070e 1020:0217 FUN_1020_01ca READ 1 true 1028:4d38 Data6 DAT_1028_4d38 1020:021a FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:01d1 Code5 LAB_1020_01d1 1020:021c FUN_1020_01ca CONDITIONAL_JUMP 0 true 1020:0221 Code5 LAB_1020_0221 1020:0222 FUN_1020_0222 READ 0 true 1028:070c Data6 DAT_1028_070c 1020:022a FUN_1020_0222 UNCONDITIONAL_CALL 0 true 1228:0004 EXTERNAL GLOBALALLOC GLOBALALLOC 1020:0232 FUN_1020_0222 CONDITIONAL_JUMP 0 true 1020:023b Code5 LAB_1020_023b 1020:0235 FUN_1020_0222 UNCONDITIONAL_CALL 0 true 1228:000c EXTERNAL GLOBALLOCK GLOBALLOCK 1020:0241 FUN_1020_023c READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:0245 FUN_1020_023c CONDITIONAL_JUMP 0 true 1020:0259 Code5 LAB_1020_0259 1020:0249 FUN_1020_023c UNCONDITIONAL_CALL 0 true 1020:02a6 Code5 FUN_1020_02a6 FUN_1020_02a6 1020:024c FUN_1020_023c CONDITIONAL_JUMP 0 true 1020:0261 Code5 LAB_1020_0261 1020:0253 FUN_1020_023c READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:0257 FUN_1020_023c CONDITIONAL_JUMP 0 true 1020:0247 Code5 LAB_1020_0247 1020:0259 FUN_1020_023c UNCONDITIONAL_CALL 0 true 1020:026a Code5 FUN_1020_026a FUN_1020_026a 1020:025c FUN_1020_023c CONDITIONAL_JUMP 0 true 1020:0269 Code5 LAB_1020_0269 1020:025e FUN_1020_023c UNCONDITIONAL_CALL 0 true 1020:02a6 Code5 FUN_1020_02a6 FUN_1020_02a6 1020:0261 FUN_1020_023c WRITE 0 true 1028:0706 Data6 DAT_1028_0706 1020:026b FUN_1020_026a READ 1 true 1028:070a Data6 DAT_1028_070a 1020:026e FUN_1020_026a UNCONDITIONAL_CALL 0 true 1020:0222 Code5 FUN_1020_0222 FUN_1020_0222 1020:0271 FUN_1020_026a CONDITIONAL_JUMP 0 true 1020:02a4 Code5 LAB_1020_02a4 1020:0286 FUN_1020_026a READ 1 true 1028:070a Data6 DAT_1028_070a 1020:0290 FUN_1020_026a READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:0294 FUN_1020_026a CONDITIONAL_JUMP 0 true 1020:029e Code5 LAB_1020_029e 1020:02b1 FUN_1020_02a6 CONDITIONAL_JUMP 0 true 1020:02d6 Code5 LAB_1020_02d6 1020:02b9 FUN_1020_02a6 CONDITIONAL_JUMP 0 true 1020:02a9 Code5 LAB_1020_02a9 1020:02be FUN_1020_02a6 CONDITIONAL_JUMP 0 true 1020:02cd Code5 LAB_1020_02cd 1020:02d9 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0340 Code5 LAB_1020_0340 1020:02db FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0344 Code5 LAB_1020_0344 1020:02ed FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0342 Code5 LAB_1020_0342 1020:02f2 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0342 Code5 LAB_1020_0342 1020:02fe FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0306 Code5 LAB_1020_0306 1020:0302 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:02f7 Code5 LAB_1020_02f7 1020:0304 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0342 Code5 LAB_1020_0342 1020:0319 FUN_1020_02d7 READ 1 true 1028:070a Data6 DAT_1028_070a 1020:031d FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0362 Code5 LAB_1020_0362 1020:031f FUN_1020_02d7 UNCONDITIONAL_CALL 0 true 1020:0327 Code5 FUN_1020_0327 FUN_1020_0327 1020:0330 FUN_1020_0327 CONDITIONAL_JUMP 0 true 1020:0340 Code5 LAB_1020_0340 1020:0348 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0342 Code5 LAB_1020_0342 1020:034b FUN_1020_02d7 UNCONDITIONAL_CALL 0 true 1228:0014 EXTERNAL GLOBALHANDLE GLOBALHANDLE 1020:0352 FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0342 Code5 LAB_1020_0342 1020:0356 FUN_1020_02d7 UNCONDITIONAL_CALL 0 true 1228:0010 EXTERNAL GLOBALUNLOCK GLOBALUNLOCK 1020:035b FUN_1020_02d7 UNCONDITIONAL_CALL 0 true 1228:0008 EXTERNAL GLOBALFREE GLOBALFREE 1020:036d FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0383 Code5 LAB_1020_0383 1020:036f FUN_1020_02d7 READ 1 true 1028:0706 Data6 DAT_1028_0706 1020:037a FUN_1020_02d7 CONDITIONAL_JUMP 0 true 1020:0372 Code5 LAB_1020_0372 1020:0383 FUN_1020_02d7 WRITE 0 true 1028:0706 Data6 DAT_1028_0706 1020:0386 FUN_1020_02d7 UNCONDITIONAL_JUMP 0 true 1020:0344 Code5 LAB_1020_0344 1020:038a FUN_1020_0388 READ_WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:038f FUN_1020_038f READ 0 true 1028:071e Data6 DAT_1028_071e 1020:0394 FUN_1020_038f CONDITIONAL_JUMP 0 true 1020:0397 Code5 LAB_1020_0397 1020:0397 FUN_1020_038f READ 1 true 1028:071e Data6 DAT_1028_071e 1020:039a FUN_1020_038f UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:039f FUN_1020_039d DATA 1 true Stack[0x2] - 1020:03a7 FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03b0 Code5 LAB_1020_03b0 1020:03a9 FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03bf Code5 LAB_1020_03bf 1020:03ae FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03bf Code5 LAB_1020_03bf 1020:03b4 FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03be Code5 LAB_1020_03be 1020:03b6 FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03bf Code5 LAB_1020_03bf 1020:03bc FUN_1020_039d CONDITIONAL_JUMP 0 true 1020:03bf Code5 LAB_1020_03bf 1020:03c2 FUN_1020_039d UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:03c8 runtime_1020_03c5 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:03ce FUN_1020_03cb CONDITIONAL_JUMP 0 true 1020:03e9 Code5 LAB_1020_03e9 1020:03d2 FUN_1020_03cb CONDITIONAL_JUMP 0 true 1020:03e9 Code5 LAB_1020_03e9 1020:03db FUN_1020_03cb CONDITIONAL_JUMP 0 true 1020:03e9 Code5 LAB_1020_03e9 1020:03e2 FUN_1020_03cb CONDITIONAL_JUMP 0 true 1020:03e8 Code5 LAB_1020_03e8 1020:03ec FUN_1020_03cb UNCONDITIONAL_CALL 0 true 1020:005d ]YCode5 FUN_1020_005d FUN_1020_005d 1020:03f5 FUN_1020_03ef CONDITIONAL_JUMP 0 true 1020:0408 Code5 LAB_1020_0408 1020:03fe FUN_1020_03ef CONDITIONAL_JUMP 0 true 1020:0409 Code5 LAB_1020_0409 1020:0412 FUN_1020_03ef UNCONDITIONAL_CALL 0 true 1020:01ca Code5 FUN_1020_01ca FUN_1020_01ca 1020:041b FUN_1020_03ef CONDITIONAL_JUMP 0 true 1020:042f Code5 LAB_1020_042f 1020:0421 FUN_1020_03ef CONDITIONAL_JUMP 0 true 1020:0408 Code5 LAB_1020_0408 1020:042d FUN_1020_03ef UNCONDITIONAL_JUMP 0 true 1020:0405 Code5 LAB_1020_0405 1020:0436 FUN_1020_03ef UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:043d FUN_1020_0439 CONDITIONAL_JUMP 0 true 1020:0459 Code5 LAB_1020_0459 1020:0450 FUN_1020_0439 UNCONDITIONAL_CALL 0 true 1020:02d7 Code5 FUN_1020_02d7 FUN_1020_02d7 1020:0457 FUN_1020_0439 CONDITIONAL_JUMP 0 true 1020:0462 Code5 LAB_1020_0462 1020:0469 FUN_1020_0439 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:046f runtime_1020_046c DATA 1 true Stack[0x6] - 1020:0472 runtime_1020_046c DATA 1 true Stack[0x4] - 1020:0480 runtime_1020_046c DATA 1 true Stack[0xa] - 1020:0491 runtime_1020_048f CONDITIONAL_JUMP 0 true 1020:0499 Code5 LAB_1020_0499 1020:0496 runtime_1020_048f CONDITIONAL_JUMP 0 true 1020:0499 Code5 LAB_1020_0499 1020:049c runtime_1020_048f UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:04a5 runtime_1020_049f DATA 1 true Stack[0x8] - 1020:04a9 runtime_1020_049f DATA 1 true Stack[0x4] - 1020:04dd runtime_1020_049f CONDITIONAL_JUMP 0 true 1020:04e8 Code5 LAB_1020_04e8 1020:04e2 runtime_1020_049f CONDITIONAL_JUMP 0 true 1020:04e8 Code5 LAB_1020_04e8 1020:04e6 runtime_1020_049f CONDITIONAL_JUMP 0 true 1020:04f0 Code5 LAB_1020_04f0 1020:04eb runtime_1020_049f CONDITIONAL_JUMP 0 true 1020:04f0 Code5 LAB_1020_04f0 1020:04ee runtime_1020_049f CONDITIONAL_JUMP 0 true 1020:04e8 Code5 LAB_1020_04e8 1020:04f3 runtime_1020_049f UNCONDITIONAL_CALL 0 true 1228:02bc EXTERNAL Ordinal_5 Ordinal_5 1020:04fe runtime_1020_04fc DATA 1 true Stack[0xa] - 1020:0502 runtime_1020_04fc DATA 1 true Stack[0x4] - 1020:050a runtime_1020_04fc DATA 1 true Stack[0x6] - 1020:0512 runtime_1020_04fc DATA 1 true Stack[0x8] - 1020:052a FUN_1020_0527 UNCONDITIONAL_CALL 0 true 1020:0534 Code5 FUN_1020_0534 FUN_1020_0534 1020:052f FUN_1020_052c UNCONDITIONAL_CALL 0 true 1020:0534 Code5 FUN_1020_0534 FUN_1020_0534 1020:0539 FUN_1020_0534 DATA 1 true Stack[0x4] - 1020:0543 FUN_1020_0534 CONDITIONAL_JUMP 0 true 1020:0557 Code5 LAB_1020_0557 1020:0548 FUN_1020_0534 CONDITIONAL_JUMP 0 true 1020:0557 Code5 LAB_1020_0557 1020:054d FUN_1020_0534 CONDITIONAL_JUMP 0 true 1020:055f Code5 LAB_1020_055f 1020:054f FUN_1020_0534 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:0555 FUN_1020_0534 UNCONDITIONAL_JUMP 0 true 1020:057b Code5 LAB_1020_057b 1020:055b FUN_1020_0534 UNCONDITIONAL_CALL 0 true 1020:0586 Code5 FUN_1020_0586 FUN_1020_0586 1020:0570 FUN_1020_0534 UNCONDITIONAL_CALL 0 true 1020:05c7 Code5 FUN_1020_05c7 FUN_1020_05c7 1020:0573 FUN_1020_0534 CONDITIONAL_JUMP 0 true 1020:057b Code5 LAB_1020_057b 1020:0584 UNCONDITIONAL_JUMP 0 true 1020:0588 Code5 LAB_1020_0588 1020:058d FUN_1020_0586 DATA 1 true Stack[0x4] - 1020:0596 FUN_1020_0586 CONDITIONAL_JUMP 0 true 1020:05b0 Code5 LAB_1020_05b0 1020:059e FUN_1020_0586 CONDITIONAL_JUMP 0 true 1020:05a8 Code5 LAB_1020_05a8 1020:05a0 FUN_1020_0586 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:05a6 FUN_1020_0586 UNCONDITIONAL_JUMP 0 true 1020:05c0 Code5 LAB_1020_05c0 1020:05ac FUN_1020_0586 UNCONDITIONAL_CALL 0 true 1020:05c7 Code5 FUN_1020_05c7 FUN_1020_05c7 1020:05b2 FUN_1020_0586 CONDITIONAL_JUMP 0 true 1020:05c0 Code5 LAB_1020_05c0 1020:05b7 FUN_1020_0586 UNCONDITIONAL_CALL 0 true 1020:05c7 Code5 FUN_1020_05c7 FUN_1020_05c7 1020:05d0 FUN_1020_05c7 CONDITIONAL_JUMP 0 true 1020:05d5 Code5 LAB_1020_05d5 1020:05d2 FUN_1020_05c7 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:05db FUN_1020_05d8 DATA 1 true Stack[0x4] - 1020:05ee FUN_1020_05d8 CONDITIONAL_JUMP 0 true 1020:0600 Code5 LAB_1020_0600 1020:0606 FUN_1020_05d8 UNCONDITIONAL_JUMP 0 true 1020:05f6 Code5 LAB_1020_05f6 1020:060b FUN_1020_0608 DATA 1 true Stack[0x4] - 1020:0620 FUN_1020_0608 CONDITIONAL_JUMP 0 true 1020:0629 Code5 LAB_1020_0629 1020:0624 FUN_1020_0608 CONDITIONAL_JUMP 0 true 1020:0629 Code5 LAB_1020_0629 1020:0630 FUN_1020_062d DATA 1 true Stack[0x4] - 1020:0645 FUN_1020_062d CONDITIONAL_JUMP 0 true 1020:0649 Code5 LAB_1020_0649 1020:064f FUN_1020_064d DATA 1 true Stack[0x4] - 1020:0659 FUN_1020_064d CONDITIONAL_JUMP 0 true 1020:0661 Code5 LAB_1020_0661 1020:065f FUN_1020_064d CONDITIONAL_JUMP 0 true 1020:0663 Code5 LAB_1020_0663 1020:066c FUN_1020_0667 DATA 1 true Stack[0x8] - 1020:0670 FUN_1020_0667 DATA 1 true Stack[0x4] - 1020:068c FUN_1020_0667 CONDITIONAL_JUMP 0 true 1020:0697 Code5 LAB_1020_0697 1020:0691 FUN_1020_0667 CONDITIONAL_JUMP 0 true 1020:0697 Code5 LAB_1020_0697 1020:0695 FUN_1020_0667 CONDITIONAL_JUMP 0 true 1020:069f Code5 LAB_1020_069f 1020:069a FUN_1020_0667 CONDITIONAL_JUMP 0 true 1020:069f Code5 LAB_1020_069f 1020:069d FUN_1020_0667 CONDITIONAL_JUMP 0 true 1020:0697 Code5 LAB_1020_0697 1020:06a2 FUN_1020_0667 UNCONDITIONAL_CALL 0 true 1228:02bc EXTERNAL Ordinal_5 Ordinal_5 1020:06ab FUN_1020_06ab READ 1 true 1028:0727 Data6 DAT_1028_0727 1020:06b2 FUN_1020_06ab UNCONDITIONAL_JUMP 0 true 1020:06ba Code5 LAB_1020_06ba 1020:06bd FUN_1020_06ab DATA 1 true Stack[0x6] - 1020:06c6 FUN_1020_06ab CONDITIONAL_JUMP 0 true 1020:06e2 Code5 LAB_1020_06e2 1020:06ce FUN_1020_06ab CONDITIONAL_JUMP 0 true 1020:06d8 Code5 LAB_1020_06d8 1020:06d0 FUN_1020_06ab WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:06d6 FUN_1020_06ab UNCONDITIONAL_JUMP 0 true 1020:070c Code5 LAB_1020_070c 1020:06dd FUN_1020_06ab UNCONDITIONAL_CALL 0 true 1020:072c Code5 FUN_1020_072c FUN_1020_072c 1020:06e7 FUN_1020_06ab CONDITIONAL_JUMP 0 true 1020:06fb Code5 LAB_1020_06fb 1020:06f4 FUN_1020_06ab CONDITIONAL_JUMP 0 true 1020:06fc Code5 LAB_1020_06fc 1020:06f9 FUN_1020_06ab UNCONDITIONAL_JUMP 0 true 1020:070c Code5 LAB_1020_070c 1020:0705 FUN_1020_06ab DATA 1 true Stack[0x4] - 1020:0712 runtime_1020_0710 DATA 1 true Stack[0x4] - 1020:0716 runtime_1020_0710 UNCONDITIONAL_CALL 0 true 1020:0751 Code5 FUN_1020_0751 FUN_1020_0751 1020:0719 runtime_1020_0710 CONDITIONAL_JUMP 0 true 1020:0729 Code5 LAB_1020_0729 1020:0724 runtime_1020_0710 CONDITIONAL_JUMP 0 true 1020:0729 Code5 LAB_1020_0729 1020:0726 runtime_1020_0710 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:072e FUN_1020_072c DATA 1 true Stack[0x4] - 1020:0732 FUN_1020_072c UNCONDITIONAL_CALL 0 true 1020:0751 Code5 FUN_1020_0751 FUN_1020_0751 1020:0735 FUN_1020_072c CONDITIONAL_JUMP 0 true 1020:074e Code5 LAB_1020_074e 1020:073d FUN_1020_072c CONDITIONAL_JUMP 0 true 1020:0748 Code5 LAB_1020_0748 1020:0743 FUN_1020_072c CONDITIONAL_JUMP 0 true 1020:0748 Code5 LAB_1020_0748 1020:0745 FUN_1020_072c WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:0757 FUN_1020_0751 CONDITIONAL_JUMP 0 true 1020:075f Code5 LAB_1020_075f 1020:0759 FUN_1020_0751 WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:0765 runtime_1020_0760 UNCONDITIONAL_JUMP 0 true 1020:076c Code5 LAB_1020_076c 1020:076f runtime_1020_0760 DATA 1 true Stack[0x8] - 1020:0772 runtime_1020_0760 UNCONDITIONAL_CALL 0 true 1020:0751 Code5 FUN_1020_0751 FUN_1020_0751 1020:0775 runtime_1020_0760 CONDITIONAL_JUMP 0 true 1020:0792 Code5 LAB_1020_0792 1020:0779 runtime_1020_0760 DATA 1 true Stack[0x4] - 1020:0787 runtime_1020_0760 CONDITIONAL_JUMP 0 true 1020:078f Code5 LAB_1020_078f 1020:078b runtime_1020_0760 CONDITIONAL_JUMP 0 true 1020:0792 Code5 LAB_1020_0792 1020:079b runtime_1020_0796 UNCONDITIONAL_JUMP 0 true 1020:07a2 Code5 LAB_1020_07a2 1020:07a5 runtime_1020_0796 DATA 1 true Stack[0xe] - 1020:07a8 runtime_1020_0796 UNCONDITIONAL_CALL 0 true 1020:0751 Code5 FUN_1020_0751 FUN_1020_0751 1020:07ab runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07ec Code5 LAB_1020_07ec 1020:07ad runtime_1020_0796 DATA 1 true Stack[0x8] - 1020:07b2 runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07d0 Code5 LAB_1020_07d0 1020:07bc runtime_1020_0796 DATA 1 true Stack[0xa] - 1020:07c8 runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07e9 Code5 LAB_1020_07e9 1020:07d0 runtime_1020_0796 DATA 1 true Stack[0x4] - 1020:07d7 runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07de Code5 LAB_1020_07de 1020:07dc runtime_1020_0796 UNCONDITIONAL_JUMP 0 true 1020:07fa Code5 LAB_1020_07fa 1020:07de runtime_1020_0796 DATA 1 true Stack[0x8] - 1020:07e1 runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07fa Code5 LAB_1020_07fa 1020:07e7 runtime_1020_0796 UNCONDITIONAL_JUMP 0 true 1020:07fa Code5 LAB_1020_07fa 1020:07ec runtime_1020_0796 DATA 1 true Stack[0x4] - 1020:07f3 runtime_1020_0796 CONDITIONAL_JUMP 0 true 1020:07fa Code5 LAB_1020_07fa 1020:0801 FUN_1020_07fe DATA 1 true Stack[0x8] - 1020:0804 FUN_1020_07fe UNCONDITIONAL_CALL 0 true 1020:0751 Code5 FUN_1020_0751 FUN_1020_0751 1020:0807 FUN_1020_07fe CONDITIONAL_JUMP 0 true 1020:082a Code5 LAB_1020_082a 1020:0809 FUN_1020_07fe DATA 1 true Stack[0x6] - 1020:0812 FUN_1020_07fe DATA 1 true Stack[0x4] - 1020:0825 FUN_1020_07fe CONDITIONAL_JUMP 0 true 1020:082a Code5 LAB_1020_082a 1020:0827 FUN_1020_07fe WRITE 0 true 1028:071e Data6 DAT_1028_071e 1020:0833 FUN_1020_082e DATA 1 true Stack[0x4] - 1020:0836 FUN_1020_082e CONDITIONAL_JUMP 0 true 1020:0848 Code5 LAB_1020_0848 1020:0839 FUN_1020_082e UNCONDITIONAL_CALL 0 true 1020:0871 Code5 FUN_1020_0871 FUN_1020_0871 1020:083e FUN_1020_082e DATA 1 true Stack[0x6] - 1020:0846 FUN_1020_082e UNCONDITIONAL_JUMP 0 true 1020:085f Code5 LAB_1020_085f 1020:0848 FUN_1020_082e READ 0 true 1028:06fe Data6 DAT_1028_06fe 1020:084c FUN_1020_082e DATA 1 true Stack[0x6] - 1020:0856 FUN_1020_082e UNCONDITIONAL_CALL 0 true 1228:0028 EXTERNAL GETMODULEFILENAME GETMODULEFILENAME 1020:085b FUN_1020_082e DATA 1 true Stack[0x6] - 1020:0869 runtime_1020_0866 UNCONDITIONAL_CALL 0 true 1020:0871 Code5 FUN_1020_0871 FUN_1020_0871 1020:0871 FUN_1020_0871 READ 1 true 1028:0702 Data6 DAT_1028_0702 1020:0879 FUN_1020_0871 CONDITIONAL_JUMP 0 true 1020:087f Code5 LAB_1020_087f 1020:087d FUN_1020_0871 CONDITIONAL_JUMP 0 true 1020:0876 Code5 LAB_1020_0876 1020:0885 FUN_1020_0871 CONDITIONAL_JUMP 0 true 1020:0882 Code5 LAB_1020_0882 1020:088c FUN_1020_0871 CONDITIONAL_JUMP 0 true 1020:0890 Code5 LAB_1020_0890 1020:088e FUN_1020_0871 CONDITIONAL_JUMP 0 true 1020:0876 Code5 LAB_1020_0876 1020:0895 FUN_1020_0891 DATA 1 true Stack[0xa] - 1020:0899 FUN_1020_0891 DATA 1 true Stack[0x6] - 1020:089d FUN_1020_0891 DATA 1 true Stack[0x4] - 1020:08a9 FUN_1020_08a9 READ 0 true 1028:0726 Data6 DAT_1028_0726 1020:08ae FUN_1020_08a9 CONDITIONAL_JUMP 0 true 1020:08cb Code5 LAB_1020_08cb 1020:08e6 FUN_1020_08e6 READ 0 true 1028:0726 Data6 DAT_1028_0726 1020:08eb FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0914 Code5 LAB_1020_0914 1020:08ff FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:095f Code5 LAB_1020_095f 1020:0919 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0923 Code5 LAB_1020_0923 1020:0925 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0965 Code5 LAB_1020_0965 1020:0927 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0934 Code5 LAB_1020_0934 1020:0932 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0967 Code5 LAB_1020_0967 1020:0951 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0958 Code5 LAB_1020_0958 1020:0959 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0944 Code5 LAB_1020_0944 1020:095c FUN_1020_08e6 UNCONDITIONAL_JUMP 0 true 1020:0974 Code5 LAB_1020_0974 1020:0962 FUN_1020_08e6 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:0965 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:095e Code5 LAB_1020_095e 1020:0976 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:0980 Code5 LAB_1020_0980 1020:0981 FUN_1020_08e6 CONDITIONAL_JUMP 0 true 1020:098a Code5 LAB_1020_098a 1020:098c runtime_1020_098c READ 0 true 1028:0726 Data6 DAT_1028_0726 1020:0991 runtime_1020_098c CONDITIONAL_JUMP 0 true 1020:09a3 Code5 LAB_1020_09a3 1020:09a6 runtime_1020_098c CONDITIONAL_JUMP 0 true 1020:09ae Code5 LAB_1020_09ae 1020:09ac runtime_1020_098c CONDITIONAL_JUMP 0 true 1020:09a8 Code5 LAB_1020_09a8 1020:09af runtime_1020_09af READ 0 true 1028:0726 Data6 DAT_1028_0726 1020:09b4 runtime_1020_09af CONDITIONAL_JUMP 0 true 1020:09c6 Code5 LAB_1020_09c6 1020:09c9 runtime_1020_09af CONDITIONAL_JUMP 0 true 1020:09d1 Code5 LAB_1020_09d1 1020:09cf runtime_1020_09af CONDITIONAL_JUMP 0 true 1020:09cb Code5 LAB_1020_09cb 1020:09d7 runtime_1020_09d2 DATA 1 true Stack[0x8] - 1020:09db runtime_1020_09d2 DATA 1 true Stack[0x4] - 1020:09f1 FUN_1020_09ec DATA 1 true Stack[0xa] - 1020:09f5 FUN_1020_09ec DATA 1 true Stack[0x6] - 1020:09f9 FUN_1020_09ec DATA 1 true Stack[0x4] - 1020:0a00 FUN_1020_09ec CONDITIONAL_JUMP 0 true 1020:0a04 Code5 LAB_1020_0a04 1020:0a15 FUN_1020_0a10 DATA 1 true Stack[0xc] - 1020:0a19 FUN_1020_0a10 DATA 1 true Stack[0x8] - 1020:0a21 FUN_1020_0a10 DATA 1 true Stack[0x6] - 1020:0a27 FUN_1020_0a10 CONDITIONAL_JUMP 0 true 1020:0a2c Code5 LAB_1020_0a2c 1020:0a30 FUN_1020_0a10 CONDITIONAL_JUMP 0 true 1020:0a45 Code5 LAB_1020_0a45 1020:0a33 FUN_1020_0a10 DATA 1 true Stack[0x4] - 1020:0a39 FUN_1020_0a10 CONDITIONAL_JUMP 0 true 1020:0a3d Code5 LAB_1020_0a3d 1020:0a3f FUN_1020_0a10 CONDITIONAL_JUMP 0 true 1020:0a47 Code5 LAB_1020_0a47 1020:0a43 FUN_1020_0a10 UNCONDITIONAL_JUMP 0 true 1020:0a47 Code5 LAB_1020_0a47 1020:0a56 FUN_1020_0a51 DATA 1 true Stack[0x8] - 1020:0a5a FUN_1020_0a51 DATA 1 true Stack[0x4] - 1020:0a67 FUN_1020_0a51 CONDITIONAL_JUMP 0 true 1020:0a71 Code5 LAB_1020_0a71 1020:0a81 FUN_1020_0a7d DATA 1 true Stack[0x8] - 1020:0a88 FUN_1020_0a7d CONDITIONAL_JUMP 0 true 1020:0ab6 Code5 LAB_1020_0ab6 1020:0a8e FUN_1020_0a7d DATA 1 true Stack[0x4] - 1020:0a98 FUN_1020_0a7d CONDITIONAL_JUMP 0 true 1020:0ab6 Code5 LAB_1020_0ab6 1020:0a9f FUN_1020_0a7d CONDITIONAL_JUMP 0 true 1020:0ab6 Code5 LAB_1020_0ab6 1020:0aaa FUN_1020_0a7d CONDITIONAL_JUMP 0 true 1020:0aba Code5 LAB_1020_0aba 1020:0ab0 FUN_1020_0a7d DATA 1 true Stack[0x8] - 1020:0ab4 FUN_1020_0a7d UNCONDITIONAL_JUMP 0 true 1020:0a9c Code5 LAB_1020_0a9c 1020:0ab8 FUN_1020_0a7d UNCONDITIONAL_JUMP 0 true 1020:0abe Code5 LAB_1020_0abe 1020:0abb FUN_1020_0a7d DATA 1 true Stack[0x4] - 1020:0ac8 FUN_1020_0ac3 DATA 1 true Stack[0x8] - 1020:0acc FUN_1020_0ac3 DATA 1 true Stack[0x4] - 1020:0ad9 FUN_1020_0ac3 CONDITIONAL_JUMP 0 true 1020:0add Code5 LAB_1020_0add 1020:0adf FUN_1020_0ac3 CONDITIONAL_JUMP 0 true 1020:0ae7 Code5 LAB_1020_0ae7 1020:0ae5 FUN_1020_0ac3 CONDITIONAL_JUMP 0 true 1020:0ae9 Code5 LAB_1020_0ae9 1020:0af1 runtime_1020_0aee DATA 1 true Stack[0x6] - 1020:0af8 runtime_1020_0aee DATA 1 true Stack[0x4] - 1020:0b05 FUN_1020_0b00 DATA 1 true Stack[0xa] - 1020:0b09 FUN_1020_0b00 DATA 1 true Stack[0x6] - 1020:0b0d FUN_1020_0b00 DATA 1 true Stack[0x4] - 1020:0b22 FUN_1020_0b1b DATA 0 true Stack[0x4] - 1020:0b26 FUN_1020_0b1b CONDITIONAL_JUMP 0 true 1020:0b2d Code5 LAB_1020_0b2d 1020:0b28 FUN_1020_0b1b DATA 0 true Stack[0x4] - 1020:0b2d FUN_1020_0b1b DATA 0 true Stack[-0x102] - 1020:0b33 FUN_1020_0b1b DATA 1 true Stack[0x8] - 1020:0b3c FUN_1020_0b1b DATA 1 true Stack[0x4] - 1020:0b42 FUN_1020_0b1b UNCONDITIONAL_CALL 0 true 1020:0a10 Code5 FUN_1020_0a10 FUN_1020_0a10 1020:0b45 FUN_1020_0b1b DATA 1 true Stack[0xc] - 1020:0b4b FUN_1020_0b1b UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1020:0b4e FUN_1020_0b1b DATA 0 true Stack[-0x202] - 1020:0b54 FUN_1020_0b1b DATA 1 true Stack[0x8] - 1020:0b59 FUN_1020_0b1b DATA 0 true Stack[0x4] - 1020:0b61 FUN_1020_0b1b UNCONDITIONAL_CALL 0 true 1020:0a10 Code5 FUN_1020_0a10 FUN_1020_0a10 1020:0b65 FUN_1020_0b1b UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1020:0b68 FUN_1020_0b1b DATA 1 true Stack[0x8] - 1020:0b6d FUN_1020_0b1b DATA 0 true Stack[0x6] - 1020:0b71 FUN_1020_0b1b UNCONDITIONAL_CALL 0 true 1020:09ec Code5 FUN_1020_09ec FUN_1020_09ec 1020:0b81 FUN_1020_0b7a DATA 0 true Stack[0x4] - 1020:0b85 FUN_1020_0b7a CONDITIONAL_JUMP 0 true 1020:0be3 Code5 LAB_1020_0be3 1020:0b87 FUN_1020_0b7a DATA 0 true Stack[0x6] - 1020:0b8b FUN_1020_0b7a CONDITIONAL_JUMP 0 true 1020:0be3 Code5 LAB_1020_0be3 1020:0b8d FUN_1020_0b7a DATA 0 true Stack[0x6] - 1020:0b92 FUN_1020_0b7a CONDITIONAL_JUMP 0 true 1020:0be3 Code5 LAB_1020_0be3 1020:0b94 FUN_1020_0b7a DATA 0 true Stack[0x4] - 1020:0b99 FUN_1020_0b7a CONDITIONAL_JUMP 0 true 1020:0ba0 Code5 LAB_1020_0ba0 1020:0b9b FUN_1020_0b7a DATA 0 true Stack[0x4] - 1020:0ba0 FUN_1020_0b7a DATA 0 true Stack[-0x102] - 1020:0ba6 FUN_1020_0b7a DATA 1 true Stack[0x8] - 1020:0baf FUN_1020_0b7a DATA 1 true Stack[0x6] - 1020:0bb5 FUN_1020_0b7a UNCONDITIONAL_CALL 0 true 1020:0a10 Code5 FUN_1020_0a10 FUN_1020_0a10 1020:0bb8 FUN_1020_0b7a DATA 0 true Stack[-0x202] - 1020:0bbe FUN_1020_0b7a DATA 1 true Stack[0x8] - 1020:0bc3 FUN_1020_0b7a DATA 1 true Stack[0x6] - 1020:0bc6 FUN_1020_0b7a DATA 1 true Stack[0x4] - 1020:0bcf FUN_1020_0b7a UNCONDITIONAL_CALL 0 true 1020:0a10 Code5 FUN_1020_0a10 FUN_1020_0a10 1020:0bd3 FUN_1020_0b7a UNCONDITIONAL_CALL 0 true 1020:0a51 Code5 FUN_1020_0a51 FUN_1020_0a51 1020:0bd6 FUN_1020_0b7a DATA 1 true Stack[0x8] - 1020:0be0 FUN_1020_0b7a UNCONDITIONAL_CALL 0 true 1020:09ec Code5 FUN_1020_09ec FUN_1020_09ec 1020:0bec FUN_1020_0be9 DATA 1 true Stack[0x4] - 1020:0bfc FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c0b Code5 LAB_1020_0c0b 1020:0c07 FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c0b Code5 LAB_1020_0c0b 1020:0c0f FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c1a Code5 LAB_1020_0c1a 1020:0c16 FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c72 Code5 LAB_1020_0c72 1020:0c29 FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c5a Code5 LAB_1020_0c5a 1020:0c3f FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c55 Code5 LAB_1020_0c55 1020:0c46 FUN_1020_0be9 CONDITIONAL_JUMP 0 true 1020:0c4b Code5 LAB_1020_0c4b 1020:0c48 FUN_1020_0be9 UNCONDITIONAL_CALL 0 true 1020:0c76 Code5 FUN_1020_0c76 FUN_1020_0c76 1020:0c87 FUN_1020_0c76 CONDITIONAL_JUMP 0 true 1020:0c8d Code5 LAB_1020_0c8d 1020:0ca5 FUN_1020_0c76 CONDITIONAL_JUMP 0 true 1020:0ca9 Code5 LAB_1020_0ca9 1020:0cad FUN_1020_0c76 CONDITIONAL_JUMP 0 true 1020:0ccf Code5 LAB_1020_0ccf 1020:0cb4 FUN_1020_0c76 CONDITIONAL_JUMP 0 true 1020:0cb9 Code5 LAB_1020_0cb9 1020:0cb7 FUN_1020_0c76 UNCONDITIONAL_JUMP 0 true 1020:0cab Code5 LAB_1020_0cab 1020:0cd6 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d53 Code5 LAB_1020_0d53 1020:0cda FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d54 Code5 LAB_1020_0d54 1020:0cde FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0ce5 Code5 LAB_1020_0ce5 1020:0ceb FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d54 Code5 LAB_1020_0d54 1020:0d08 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d1b Code5 LAB_1020_0d1b 1020:0d19 FUN_1020_0cd4 UNCONDITIONAL_JUMP 0 true 1020:0d05 Code5 LAB_1020_0d05 1020:0d1d FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d29 Code5 LAB_1020_0d29 1020:0d27 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d1f Code5 LAB_1020_0d1f 1020:0d2a FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d63 Code5 LAB_1020_0d63 1020:0d35 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d41 Code5 LAB_1020_0d41 1020:0d3f FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d61 Code5 LAB_1020_0d61 1020:0d4a FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d5b Code5 LAB_1020_0d5b 1020:0d5f FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d4c Code5 LAB_1020_0d4c 1020:0d6c FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d7e Code5 LAB_1020_0d7e 1020:0d84 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d53 Code5 LAB_1020_0d53 1020:0d88 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d41 Code5 LAB_1020_0d41 1020:0d92 FUN_1020_0cd4 CONDITIONAL_JUMP 0 true 1020:0d86 Code5 LAB_1020_0d86 1020:0d94 FUN_1020_0cd4 UNCONDITIONAL_CALL 0 true 1020:0e93 Code5 FUN_1020_0e93 FUN_1020_0e93 1020:0d99 FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0d94 Code5 LAB_1020_0d94 1020:0d9d FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0d94 Code5 LAB_1020_0d94 1020:0dbb FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0dc1 Code5 LAB_1020_0dc1 1020:0dbf FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0dce Code5 LAB_1020_0dce 1020:0dc3 FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0deb Code5 LAB_1020_0deb 1020:0dc7 FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0deb Code5 LAB_1020_0deb 1020:0de8 FUN_1020_0d97 UNCONDITIONAL_JUMP 0 true 1020:0e66 Code5 LAB_1020_0e66 1020:0df5 FUN_1020_0d97 DATA 1 true Stack[-0xf] - 1020:0df8 FUN_1020_0d97 DATA 0 true Stack[-0x9] - 1020:0e01 FUN_1020_0d97 DATA 1 true Stack[-0x10] - 1020:0e04 FUN_1020_0d97 DATA 0 true Stack[-0x8] - 1020:0e0d FUN_1020_0d97 DATA 1 true Stack[-0xe] - 1020:0e10 FUN_1020_0d97 DATA 0 true Stack[-0xa] - 1020:0e1b FUN_1020_0d97 DATA 1 true Stack[-0x10] - 1020:0e1e FUN_1020_0d97 DATA 0 true Stack[-0x6] - 1020:0e27 FUN_1020_0d97 DATA 1 true Stack[-0xe] - 1020:0e2a FUN_1020_0d97 DATA 0 true Stack[-0x8] - 1020:0e33 FUN_1020_0d97 DATA 1 true Stack[-0xc] - 1020:0e36 FUN_1020_0d97 DATA 0 true Stack[-0xa] - 1020:0e41 FUN_1020_0d97 DATA 1 true Stack[-0xe] - 1020:0e44 FUN_1020_0d97 DATA 0 true Stack[-0x6] - 1020:0e4d FUN_1020_0d97 DATA 1 true Stack[-0xc] - 1020:0e50 FUN_1020_0d97 DATA 0 true Stack[-0x8] - 1020:0e59 FUN_1020_0d97 DATA 1 true Stack[-0xc] - 1020:0e5c FUN_1020_0d97 DATA 0 true Stack[-0x6] - 1020:0e6b FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0e74 Code5 LAB_1020_0e74 1020:0e81 FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0e86 Code5 LAB_1020_0e86 1020:0e89 FUN_1020_0d97 CONDITIONAL_JUMP 0 true 1020:0e93 Code5 FUN_1020_0e93 FUN_1020_0e93 1020:0e9c FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0e93 Code5 FUN_1020_0e93 FUN_1020_0e93 1020:0ebd FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ec5 Code5 LAB_1020_0ec5 1020:0ec1 FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ec5 Code5 LAB_1020_0ec5 1020:0ec5 FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ecd Code5 LAB_1020_0ecd 1020:0ecf FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ee2 Code5 LAB_1020_0ee2 1020:0ed7 FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ebb Code5 LAB_1020_0ebb 1020:0ee0 FUN_1020_0e9a UNCONDITIONAL_JUMP 0 true 1020:0ecd Code5 LAB_1020_0ecd 1020:0ee4 FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ef0 Code5 LAB_1020_0ef0 1020:0eea FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0ed1 Code5 LAB_1020_0ed1 1020:0eee FUN_1020_0e9a UNCONDITIONAL_JUMP 0 true 1020:0ed1 Code5 LAB_1020_0ed1 1020:0f01 FUN_1020_0e9a CONDITIONAL_JUMP 0 true 1020:0f0a Code5 LAB_1020_0f0a 1020:0f0e FUN_1020_0e9a UNCONDITIONAL_JUMP 0 true 1020:0e78 Code5 LAB_1020_0e78 1020:0f15 FUN_1020_0f11 CONDITIONAL_JUMP 0 true 1020:0f1c Code5 LAB_1020_0f1c 1020:0f1f FUN_1020_0f11 CONDITIONAL_JUMP 0 true 1020:0f28 Code5 FUN_1020_0f28 FUN_1020_0f28 1020:0f21 FUN_1020_0f11 UNCONDITIONAL_CALL 0 true 1020:0f28 Code5 FUN_1020_0f28 FUN_1020_0f28 1020:0f24 FUN_1020_0f11 CONDITIONAL_JUMP 0 true 1020:0f3a Code5 LAB_1020_0f3a 1020:0f2a FUN_1020_0f28 CONDITIONAL_JUMP 0 true 1020:0f3a Code5 LAB_1020_0f3a 1020:0f2e FUN_1020_0f28 CONDITIONAL_JUMP 0 true 1020:0f3a Code5 LAB_1020_0f3a 1020:0f32 FUN_1020_0f28 CONDITIONAL_JUMP 0 true 1020:0f3a Code5 LAB_1020_0f3a 1020:0f36 FUN_1020_0f28 CONDITIONAL_JUMP 0 true 1020:0f3a Code5 LAB_1020_0f3a 1020:0f3f FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f76 Code5 LAB_1020_0f76 1020:0f45 FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f4e Code5 LAB_1020_0f4e 1020:0f55 FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f63 Code5 LAB_1020_0f63 1020:0f5d FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f63 Code5 LAB_1020_0f63 1020:0f65 FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f6f Code5 LAB_1020_0f6f 1020:0f6d FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f67 Code5 LAB_1020_0f67 1020:0f71 FUN_1020_0f3b CONDITIONAL_JUMP 0 true 1020:0f76 Code5 LAB_1020_0f76 1020:0f7c FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fd9 Code5 LAB_1020_0fd9 1020:0f86 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fda Code5 LAB_1020_0fda 1020:0f8b FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0f96 Code5 LAB_1020_0f96 1020:0f99 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fa8 Code5 LAB_1020_0fa8 1020:0faa FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fb6 Code5 LAB_1020_0fb6 1020:0fb4 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fac Code5 LAB_1020_0fac 1020:0fb8 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fc4 Code5 LAB_1020_0fc4 1020:0fc2 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fd9 Code5 LAB_1020_0fd9 1020:0fc8 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fd9 Code5 LAB_1020_0fd9 1020:0fcc FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fd5 Code5 LAB_1020_0fd5 1020:0fe2 FUN_1020_0f77 CONDITIONAL_JUMP 0 true 1020:0fb6 Code5 LAB_1020_0fb6 1020:0fe5 FUN_1020_0fe5 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:0fe8 FUN_1020_0fe5 CONDITIONAL_JUMP 0 true 1020:1025 Code5 LAB_1020_1025 1020:0feb FUN_1020_0feb UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:0fee FUN_1020_0feb CONDITIONAL_JUMP 0 true 1020:1025 Code5 LAB_1020_1025 1020:0ff7 FUN_1020_0ff7 UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:0ffa FUN_1020_0ff7 CONDITIONAL_JUMP 0 true 1020:1025 Code5 LAB_1020_1025 1020:0fff FUN_1020_0ffd CONDITIONAL_JUMP 0 true 1020:102b Code5 LAB_1020_102b 1020:1001 FUN_1020_0ffd UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:1004 FUN_1020_0ffd CONDITIONAL_JUMP 0 true 1020:1025 Code5 LAB_1020_1025 1020:1007 FUN_1020_1007 UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:100b FUN_1020_100b UNCONDITIONAL_CALL 0 true 1020:0f3b Code5 FUN_1020_0f3b FUN_1020_0f3b 1020:1011 UNCONDITIONAL_CALL 0 true 1020:0f77 Code5 FUN_1020_0f77 FUN_1020_0f77 1020:1014 CONDITIONAL_JUMP 0 true 1020:101f Code5 LAB_1020_101f 1020:1019 FUN_1020_1017 UNCONDITIONAL_CALL 0 true 1020:0f77 Code5 FUN_1020_0f77 FUN_1020_0f77 1020:101c FUN_1020_1017 CONDITIONAL_JUMP 0 true 1020:101f Code5 LAB_1020_101f 1020:1022 FUN_1020_1017 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:1028 FUN_1020_0ffd UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:102e FUN_1020_0ffd UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:1034 FUN_1020_1031 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:103e runtime_1020_103b UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:1048 runtime_1020_1045 UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:1052 FUN_1020_104f UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:105b runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:10a6 Code5 LAB_1020_10a6 1020:106c runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:10a7 Code5 LAB_1020_10a7 1020:1071 runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:107f Code5 LAB_1020_107f 1020:107d runtime_1020_1059 UNCONDITIONAL_JUMP 0 true 1020:106e Code5 LAB_1020_106e 1020:1082 runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:1091 Code5 LAB_1020_1091 1020:1093 runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:10a0 Code5 LAB_1020_10a0 1020:109e runtime_1020_1059 CONDITIONAL_JUMP 0 true 1020:1095 Code5 LAB_1020_1095 1020:10ae runtime_1020_10aa UNCONDITIONAL_CALL 0 true 1020:1059 Code5 runtime_1020_1059 runtime_1020_1059 1020:10ba runtime_1020_10aa UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:10cc FUN_1020_10be CONDITIONAL_JUMP 0 true 1020:110a Code5 LAB_1020_110a 1020:10d1 FUN_1020_10be CONDITIONAL_JUMP 0 true 1020:1114 Code5 LAB_1020_1114 1020:10d3 FUN_1020_10be DATA 0 true Stack[-0xa] - 1020:10d6 FUN_1020_10be DATA 0 true Stack[-0x8] - 1020:10d9 FUN_1020_10be DATA 0 true Stack[-0x6] - 1020:10e8 FUN_1020_10be DATA 0 true Stack[-0x4] - 1020:10eb FUN_1020_10be DATA 1 true Stack[-0xa] - 1020:10ee FUN_1020_10be DATA 1 true Stack[-0x8] - 1020:10f1 FUN_1020_10be DATA 1 true Stack[-0x6] - 1020:10f4 FUN_1020_10be UNCONDITIONAL_CALL 0 true 1020:104f Code5 FUN_1020_104f FUN_1020_104f 1020:10f7 FUN_1020_10be UNCONDITIONAL_CALL 0 true 1020:1031 Code5 FUN_1020_1031 FUN_1020_1031 1020:10ff FUN_1020_10be UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:1102 FUN_1020_10be DATA 1 true Stack[-0x4] - 1020:1108 FUN_1020_10be CONDITIONAL_JUMP 0 true 1020:10eb Code5 LAB_1020_10eb 1020:111a FUN_1020_10be UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:1126 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:112b runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1130 Code5 LAB_1020_1130 1020:1132 runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1190 Code5 LAB_1020_1190 1020:1141 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:1145 runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1157 Code5 LAB_1020_1157 1020:1147 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:104f Code5 FUN_1020_104f FUN_1020_104f 1020:114e runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:10aa Code5 runtime_1020_10aa runtime_1020_10aa 1020:1154 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:1045 Code5 runtime_1020_1045 runtime_1020_1045 1020:115a runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:115f Code5 LAB_1020_115f 1020:115c runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:1031 Code5 FUN_1020_1031 FUN_1020_1031 1020:1161 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:1165 runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:116a Code5 LAB_1020_116a 1020:1167 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:103b Code5 runtime_1020_103b runtime_1020_103b 1020:116c runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:116f runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1179 Code5 LAB_1020_1179 1020:1176 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:117b runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1186 Code5 LAB_1020_1186 1020:1183 runtime_1020_111d UNCONDITIONAL_CALL 0 true 1020:143c Code5 FUN_1020_143c FUN_1020_143c 1020:1187 runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1190 Code5 LAB_1020_1190 1020:118b runtime_1020_111d CONDITIONAL_JUMP 0 true 1020:1190 Code5 LAB_1020_1190 1020:11bd runtime_1020_11bb CONDITIONAL_JUMP 0 true 1020:11c4 Code5 LAB_1020_11c4 1020:11c2 runtime_1020_11bb CONDITIONAL_JUMP 0 true 1020:11ca Code5 LAB_1020_11ca 1020:11c7 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:11da runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:11ea runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:1031 Code5 FUN_1020_1031 FUN_1020_1031 1020:11f8 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:11fe runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:1207 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:143c Code5 FUN_1020_143c FUN_1020_143c 1020:1215 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:1220 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0f3b Code5 FUN_1020_0f3b FUN_1020_0f3b 1020:122c runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:1232 runtime_1020_11bb UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:1237 runtime_1020_11bb CONDITIONAL_JUMP 0 true 1020:123f Code5 LAB_1020_123f 1020:1274 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:1279 runtime_1020_1264 CONDITIONAL_JUMP 0 true 1020:12d0 Code5 LAB_1020_12d0 1020:1282 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0f77 Code5 FUN_1020_0f77 FUN_1020_0f77 1020:128a runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0f3b Code5 FUN_1020_0f3b FUN_1020_0f3b 1020:1290 runtime_1020_1264 CONDITIONAL_JUMP 0 true 1020:1294 Code5 LAB_1020_1294 1020:1299 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:12a2 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:1455 Code5 FUN_1020_1455 FUN_1020_1455 1020:12a8 runtime_1020_1264 CONDITIONAL_JUMP 0 true 1020:12b8 Code5 LAB_1020_12b8 1020:12b4 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:12ba runtime_1020_1264 CONDITIONAL_JUMP 0 true 1020:12d0 Code5 LAB_1020_12d0 1020:12bd runtime_1020_1264 CONDITIONAL_JUMP 0 true 1020:12cf Code5 LAB_1020_12cf 1020:12cc runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:12d4 runtime_1020_1264 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d 1020:130f runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:1314 Code5 LAB_1020_1314 1020:1311 runtime_1020_1307 UNCONDITIONAL_JUMP 0 true 1020:13e4 Code5 LAB_1020_13e4 1020:1319 runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:131f Code5 LAB_1020_131f 1020:1327 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:132a runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:1338 Code5 LAB_1020_1338 1020:1331 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:1341 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:1344 runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:134b Code5 LAB_1020_134b 1020:1346 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:1436 Code5 runtime_1020_1436 runtime_1020_1436 1020:1349 runtime_1020_1307 UNCONDITIONAL_JUMP 0 true 1020:13c2 Code5 LAB_1020_13c2 1020:1353 runtime_1020_1307 READ 1 true 1020:13e8 Code5 real48_table_13e8 1020:1353 runtime_1020_1307 READ 1 false 1020:13fa Code5 real48_table_13e8[18] 1020:1356 runtime_1020_1307 READ 1 true 1020:13ea Code5 real48_table_13e8[2] 1020:1356 runtime_1020_1307 READ 1 false 1020:13fc Code5 real48_table_13e8[20] 1020:135a runtime_1020_1307 READ 1 true 1020:13ec Code5 real48_table_13e8[4] 1020:135a runtime_1020_1307 READ 1 false 1020:13fe Code5 real48_table_13e8[22] 1020:135e runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0f11 Code5 FUN_1020_0f11 FUN_1020_0f11 1020:1363 runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:136d Code5 LAB_1020_136d 1020:1368 runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:1351 Code5 LAB_1020_1351 1020:1370 runtime_1020_1307 DATA 0 true Stack[-0x8] - 1020:1373 runtime_1020_1307 DATA 0 true Stack[-0x6] - 1020:1376 runtime_1020_1307 DATA 0 true Stack[-0x4] - 1020:137a runtime_1020_1307 READ 1 true 1020:13fa Code5 real48_table_13e8[18] 1020:137a runtime_1020_1307 READ 1 false 1020:13ee Code5 real48_table_13e8[6] 1020:137d runtime_1020_1307 READ 1 true 1020:13fc Code5 real48_table_13e8[20] 1020:137d runtime_1020_1307 READ 1 false 1020:13f0 Code5 real48_table_13e8[8] 1020:1381 runtime_1020_1307 READ 1 true 1020:13fe Code5 real48_table_13e8[22] 1020:1381 runtime_1020_1307 READ 1 false 1020:13f2 Code5 real48_table_13e8[10] 1020:1385 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:103b Code5 runtime_1020_103b runtime_1020_103b 1020:138b runtime_1020_1307 DATA 1 true Stack[-0x8] - 1020:138e runtime_1020_1307 DATA 1 true Stack[-0x6] - 1020:1391 runtime_1020_1307 DATA 1 true Stack[-0x4] - 1020:1394 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:139e runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:13aa runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0e9a Code5 FUN_1020_0e9a FUN_1020_0e9a 1020:13ad runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:1436 Code5 runtime_1020_1436 runtime_1020_1436 1020:13bf runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:13c6 runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:13dc Code5 LAB_1020_13dc 1020:13d8 runtime_1020_1307 UNCONDITIONAL_CALL 0 true 1020:0cd0 Code5 FUN_1020_0cd0 FUN_1020_0cd0 1020:13df runtime_1020_1307 CONDITIONAL_JUMP 0 true 1020:13e4 Code5 LAB_1020_13e4 1020:1447 FUN_1020_143c UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:144c FUN_1020_143c UNCONDITIONAL_CALL 0 true 1020:1455 Code5 FUN_1020_1455 FUN_1020_1455 1020:1452 FUN_1020_143c UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:145b FUN_1020_1455 DATA 0 true Stack[-0x8] - 1020:145e FUN_1020_1455 DATA 0 true Stack[-0x6] - 1020:1461 FUN_1020_1455 DATA 0 true Stack[-0x4] - 1020:1471 FUN_1020_1455 UNCONDITIONAL_JUMP 0 true 1020:1483 Code5 LAB_1020_1483 1020:1480 FUN_1020_1455 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:1483 FUN_1020_1455 DATA 1 true Stack[-0x8] - 1020:1486 FUN_1020_1455 DATA 1 true Stack[-0x6] - 1020:1489 FUN_1020_1455 DATA 1 true Stack[-0x4] - 1020:148c FUN_1020_1455 UNCONDITIONAL_CALL 0 true 1020:0d97 Code5 FUN_1020_0d97 FUN_1020_0d97 1020:1494 FUN_1020_1455 CONDITIONAL_JUMP 0 true 1020:1473 Code5 LAB_1020_1473 1020:149d FUN_1020_1455 UNCONDITIONAL_CALL 0 true 1020:0cd4 Code5 FUN_1020_0cd4 FUN_1020_0cd4 1020:14a4 FUN_1020_14a4 UNCONDITIONAL_CALL 0 true 1020:1501 Code5 FUN_1020_1501 FUN_1020_1501 1020:14ab FUN_1020_14a4 DATA 0 true Stack[0x4] - 1020:14b3 FUN_1020_14a4 DATA 0 true Stack[0x4] - 1020:14c1 FUN_1020_14c1 UNCONDITIONAL_CALL 0 true 1020:1501 Code5 FUN_1020_1501 FUN_1020_1501 1020:14ce FUN_1020_14c1 CONDITIONAL_JUMP 0 true 1020:14da Code5 LAB_1020_14da 1020:14d6 FUN_1020_14c1 CONDITIONAL_JUMP 0 true 1020:14cb Code5 LAB_1020_14cb 1020:14de runtime_1020_14de UNCONDITIONAL_CALL 0 true 1020:1501 Code5 FUN_1020_1501 FUN_1020_1501 1020:14e2 runtime_1020_14de READ 0 true 1020:14ff Code5 DAT_1020_14ff 1020:14e8 runtime_1020_14de READ 0 true 1028:0720 Data6 DAT_1028_0720 1020:14ed runtime_1020_14de READ 0 true 1020:14fb Code5 DAT_1020_14fb 1020:1501 FUN_1020_1501 READ 1 true 1028:0720 Data6 DAT_1028_0720 1020:1504 FUN_1020_1501 READ 1 true 1028:0722 Data6 DAT_1028_0722 1020:150a FUN_1020_1501 READ 0 true 1020:1537 Code5 DAT_1020_1537 1020:152f FUN_1020_1501 WRITE 0 true 1028:0720 Data6 DAT_1028_0720 1020:1532 FUN_1020_1501 WRITE 0 true 1028:0722 Data6 DAT_1028_0722 1020:153d runtime_1020_1539 WRITE 0 true 1028:0720 Data6 DAT_1028_0720 1020:1541 runtime_1020_1539 WRITE 0 true 1028:0722 Data6 DAT_1028_0722 1020:154f FUN_1020_1546 CONDITIONAL_JUMP 0 true 1020:1562 Code5 FUN_1020_1562 FUN_1020_1562 1020:1558 FUN_1020_1546 UNCONDITIONAL_CALL 0 true 1020:1562 Code5 FUN_1020_1562 FUN_1020_1562 1020:1570 FUN_1020_1562 CONDITIONAL_JUMP 0 true 1020:1575 Code5 LAB_1020_1575 1020:157d FUN_1020_1562 CONDITIONAL_JUMP 0 true 1020:1562 Code5 FUN_1020_1562 FUN_1020_1562 1020:1588 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:158e FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:1597 Code5 LAB_1020_1597 1020:1594 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:159b Code5 LAB_1020_159b 1020:1599 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:159f FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e9 Code5 LAB_1020_15e9 1020:15aa FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15d1 Code5 LAB_1020_15d1 1020:15af FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:15cf FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15a1 Code5 LAB_1020_15a1 1020:15d5 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e6 Code5 LAB_1020_15e6 1020:15d9 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e2 Code5 LAB_1020_15e2 1020:15e4 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:15eb FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:15f3 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15f8 Code5 LAB_1020_15f8 1020:15fe FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:160b Code5 LAB_1020_160b 1020:1606 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15d1 Code5 LAB_1020_15d1 1020:1611 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15e7 Code5 LAB_1020_15e7 1020:1615 FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:160d Code5 LAB_1020_160d 1020:161a FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:15ed Code5 LAB_1020_15ed 1020:161e FUN_1020_1582 CONDITIONAL_JUMP 0 true 1020:1627 Code5 LAB_1020_1627 1020:162f FUN_1020_1629 DATA 1 true Stack[0xc] - 1020:1632 FUN_1020_1629 DATA 1 true Stack[0xe] - 1020:1635 FUN_1020_1629 DATA 0 true Stack[-0x2] - 1020:163a FUN_1020_1629 UNCONDITIONAL_CALL 0 true 1020:1546 Code5 FUN_1020_1546 FUN_1020_1546 1020:1642 FUN_1020_1629 DATA 1 true Stack[0x6] - 1020:1645 FUN_1020_1629 DATA 1 true Stack[0x4] - 1020:1648 FUN_1020_1629 DATA 1 true Stack[0xa] - 1020:164d FUN_1020_1629 CONDITIONAL_JUMP 0 true 1020:1651 Code5 LAB_1020_1651 1020:1653 FUN_1020_1629 CONDITIONAL_JUMP 0 true 1020:1657 Code5 LAB_1020_1657 1020:1659 FUN_1020_1629 CONDITIONAL_JUMP 0 true 1020:165d Code5 LAB_1020_165d 1020:1661 FUN_1020_1629 CONDITIONAL_JUMP 0 true 1020:166b Code5 LAB_1020_166b 1020:1677 FUN_1020_1674 DATA 1 true Stack[0x8] - 1020:1680 FUN_1020_1674 CONDITIONAL_JUMP 0 true 1020:168b Code5 LAB_1020_168b 1020:1686 FUN_1020_1674 CONDITIONAL_JUMP 0 true 1020:168b Code5 LAB_1020_168b 1020:1689 FUN_1020_1674 CONDITIONAL_JUMP 0 true 1020:1682 Code5 LAB_1020_1682 1020:168b FUN_1020_1674 UNCONDITIONAL_CALL 0 true 1020:1582 Code5 FUN_1020_1582 FUN_1020_1582 1020:168e FUN_1020_1674 CONDITIONAL_JUMP 0 true 1020:1692 Code5 LAB_1020_1692 1020:1690 FUN_1020_1674 CONDITIONAL_JUMP 0 true 1020:169b Code5 LAB_1020_169b 1020:1694 FUN_1020_1674 DATA 1 true Stack[0x8] - 1020:169b FUN_1020_1674 DATA 1 true Stack[0x4] - 1020:16a9 FUN_1020_16a5 DATA 1 true Stack[0xa] - 1020:16ad FUN_1020_16a5 DATA 1 true Stack[0x6] - 1020:16b1 FUN_1020_16a5 DATA 1 true Stack[0x4] - 1020:16b8 FUN_1020_16a5 CONDITIONAL_JUMP 0 true 1020:16c1 Code5 LAB_1020_16c1 1020:16cb FUN_1020_16c9 DATA 1 true Stack[0x8] - 1020:16cf FUN_1020_16c9 DATA 1 true Stack[0x6] - 1020:16d3 FUN_1020_16c9 DATA 1 true Stack[0x4] - 1020:16dd runtime_1020_16dd UNCONDITIONAL_CALL 0 true 1020:16e6 Code5 FUN_1020_16e6 FUN_1020_16e6 1020:16e1 FUN_1020_16e1 UNCONDITIONAL_CALL 0 true 1020:16e6 Code5 FUN_1020_16e6 FUN_1020_16e6 1020:16ec FUN_1020_16e6 CONDITIONAL_JUMP 0 true 1020:16f2 Code5 LAB_1020_16f2 1020:1703 FUN_1020_16e6 CONDITIONAL_JUMP 0 true 1020:1713 Code5 LAB_1020_1713 1020:170a FUN_1020_16e6 CONDITIONAL_JUMP 0 true 1020:16f9 Code5 LAB_1020_16f9 1020:1710 FUN_1020_16e6 UNCONDITIONAL_CALL 0 true 1020:005d Code5 FUN_1020_005d FUN_1020_005d :lxsegment record chain_index source_offset source_address source_type additive target_kind target target_address module import_ordinal import_name raw_flags 1 1 0 0x000a 1000:000a far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 2 0 0x0015 1000:0015 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 3 0 0x0020 1000:0020 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 4 0 0x002f 1000:002f far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 5 0 0x003e 1000:003e far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 6 0 0x0052 1000:0052 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 7 0 0x0060 1000:0060 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 8 0 0x007f 1000:007f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 9 0 0x009b 1000:009b far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 10 0 0x00b7 1000:00b7 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 11 0 0x00c2 1000:00c2 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 12 0 0x00cd 1000:00cd far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 13 0 0x00d8 1000:00d8 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 14 0 0x00e0 1000:00e0 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 15 0 0x00e8 1000:00e8 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 16 0 0x00f0 1000:00f0 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 17 0 0x00f8 1000:00f8 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 18 0 0x0109 1000:0109 far-pointer-32 False internal entry-ordinal:194 1018:1b57 0x00 1 19 0 0x0119 1000:0119 far-pointer-32 False internal entry-ordinal:101 1010:03af 0x00 1 20 0 0x013d 1000:013d far-pointer-32 False internal entry-ordinal:3 1000:01d3 0x00 1 21 0 0x0164 1000:0164 far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 1 22 0 0x017a 1000:017a far-pointer-32 False internal entry-ordinal:172 1018:1274 0x00 1 23 0 0x0190 1000:0190 far-pointer-32 False import-ordinal USER.ordinal:174 USER 174 0x01 1 24 0 0x01a3 1000:01a3 far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 25 0 0x01b1 1000:01b1 far-pointer-32 False import-ordinal GDI.ordinal:87 GDI 87 0x01 1 26 0 0x01da 1000:01da far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 1 27 0 0x01f8 1000:01f8 far-pointer-32 False internal entry-ordinal:170 1018:1106 0x00 1 28 0 0x0223 1000:0223 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 1 29 0 0x0245 1000:0245 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 1 30 0 0x029b 1000:029b far-pointer-32 False internal entry-ordinal:269 1020:0167 0x00 1 31 0 0x02c4 1000:02c4 far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 1 32 0 0x02cb 1000:02cb far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 1 33 0 0x02d5 1000:02d5 far-pointer-32 False internal entry-ordinal:180 1018:170c 0x00 1 34 0 0x02e1 1000:02e1 far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 35 0 0x02e7 1000:02e7 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 36 0 0x02f3 1000:02f3 far-pointer-32 False internal entry-ordinal:74 1008:0023 0x00 1 37 0 0x0306 1000:0306 far-pointer-32 False internal entry-ordinal:93 1008:1326 0x00 1 38 0 0x030b 1000:030b far-pointer-32 False internal entry-ordinal:92 1008:11c5 0x00 1 39 0 0x032d 1000:032d far-pointer-32 False import-ordinal USER.ordinal:13 USER 13 0x01 1 40 0 0x0540 1000:0540 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 41 0 0x0570 1000:0570 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 42 0 0x05b5 1000:05b5 far-pointer-32 False internal entry-ordinal:281 1020:082e 0x00 1 43 0 0x05ba 1000:05ba far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 1 44 0 0x05d7 1000:05d7 far-pointer-32 False internal entry-ordinal:281 1020:082e 0x00 1 45 0 0x05dc 1000:05dc far-pointer-32 False internal entry-ordinal:264 1020:0a7d 0x00 1 46 0 0x05e2 1000:05e2 far-pointer-32 False internal entry-ordinal:247 1008:2f07 0x00 1 47 0 0x05f2 1000:05f2 far-pointer-32 False internal entry-ordinal:249 1008:2f4d 0x00 1 48 0 0x0609 1000:0609 far-pointer-32 False import-ordinal KERNEL.ordinal:127 KERNEL 127 0x01 1 49 0 0x0637 1000:0637 far-pointer-32 False import-ordinal KERNEL.ordinal:127 KERNEL 127 0x01 1 50 0 0x077f 1000:077f far-pointer-32 False internal entry-ordinal:128 1008:28a3 0x00 1 51 0 0x07b0 1000:07b0 far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 1 52 0 0x0819 1000:0819 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 53 0 0x0883 1000:0883 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 54 0 0x08ed 1000:08ed far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 55 0 0x0959 1000:0959 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 56 0 0x09c4 1000:09c4 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 57 0 0x0a2d 1000:0a2d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 58 0 0x0a98 1000:0a98 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 59 0 0x0b02 1000:0b02 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 60 0 0x0b6d 1000:0b6d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 61 0 0x0bd6 1000:0bd6 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 62 0 0x0c41 1000:0c41 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 63 0 0x0cac 1000:0cac far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 64 0 0x0d16 1000:0d16 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 65 0 0x0d82 1000:0d82 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 66 0 0x0deb 1000:0deb far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 67 0 0x0e55 1000:0e55 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 68 0 0x0ebe 1000:0ebe far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 69 0 0x0f28 1000:0f28 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 70 0 0x0f91 1000:0f91 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 71 0 0x0ff9 1000:0ff9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 72 0 0x1063 1000:1063 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 73 0 0x10cc 1000:10cc far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 74 0 0x1135 1000:1135 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 75 0 0x119e 1000:119e far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 76 0 0x1207 1000:1207 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 77 0 0x1270 1000:1270 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 78 0 0x12da 1000:12da far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 79 0 0x1345 1000:1345 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 80 0 0x13ae 1000:13ae far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 81 0 0x1417 1000:1417 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 82 0 0x1480 1000:1480 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 83 0 0x14e9 1000:14e9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 84 0 0x1552 1000:1552 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 85 0 0x15bb 1000:15bb far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 86 0 0x1623 1000:1623 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 87 0 0x168a 1000:168a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 88 0 0x16f1 1000:16f1 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 89 0 0x1758 1000:1758 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 90 0 0x17bf 1000:17bf far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 91 0 0x1827 1000:1827 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 92 0 0x1890 1000:1890 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 93 0 0x18f8 1000:18f8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 94 0 0x1961 1000:1961 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 95 0 0x19c9 1000:19c9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 96 0 0x1a32 1000:1a32 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 97 0 0x1a9a 1000:1a9a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 98 0 0x1b02 1000:1b02 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 99 0 0x1b6a 1000:1b6a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 100 0 0x1bd3 1000:1bd3 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 101 0 0x1c3b 1000:1c3b far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 102 0 0x1ca4 1000:1ca4 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 103 0 0x1d0d 1000:1d0d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 104 0 0x1d81 1000:1d81 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 105 0 0x1df3 1000:1df3 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 106 0 0x1e67 1000:1e67 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 107 0 0x1ecd 1000:1ecd far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 108 0 0x1f38 1000:1f38 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 109 0 0x1f9d 1000:1f9d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 110 0 0x2002 1000:2002 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 111 0 0x2067 1000:2067 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 112 0 0x20cc 1000:20cc far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 113 0 0x2134 1000:2134 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 114 0 0x219b 1000:219b far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 115 0 0x2204 1000:2204 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 116 0 0x226d 1000:226d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 117 0 0x22d6 1000:22d6 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 118 0 0x233c 1000:233c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 119 0 0x23a4 1000:23a4 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 120 0 0x240b 1000:240b far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 121 0 0x2473 1000:2473 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 122 0 0x24da 1000:24da far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 123 0 0x253f 1000:253f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 124 0 0x25a4 1000:25a4 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 125 0 0x2609 1000:2609 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 126 0 0x266e 1000:266e far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 127 0 0x26d9 1000:26d9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 128 0 0x2742 1000:2742 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 129 0 0x27ab 1000:27ab far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 130 0 0x2816 1000:2816 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 131 0 0x287f 1000:287f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 132 0 0x28ea 1000:28ea far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 133 0 0x2951 1000:2951 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 134 0 0x29ba 1000:29ba far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 135 0 0x2a21 1000:2a21 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 136 0 0x2a8a 1000:2a8a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 137 0 0x2af1 1000:2af1 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 138 0 0x2b57 1000:2b57 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 139 0 0x2bbd 1000:2bbd far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 140 0 0x2c24 1000:2c24 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 141 0 0x2c8b 1000:2c8b far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 142 0 0x2cf0 1000:2cf0 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 143 0 0x2d5e 1000:2d5e far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 144 0 0x2dcc 1000:2dcc far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 145 0 0x2e3a 1000:2e3a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 146 0 0x2ea8 1000:2ea8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 147 0 0x2f16 1000:2f16 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 148 0 0x2f84 1000:2f84 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 149 0 0x2ff2 1000:2ff2 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 150 0 0x3060 1000:3060 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 151 0 0x30ce 1000:30ce far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 152 0 0x313c 1000:313c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 153 0 0x31a9 1000:31a9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 154 0 0x3216 1000:3216 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 155 0 0x3284 1000:3284 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 156 0 0x32f1 1000:32f1 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 157 0 0x335e 1000:335e far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 158 0 0x33c9 1000:33c9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 159 0 0x3432 1000:3432 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 160 0 0x34a3 1000:34a3 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 161 0 0x350c 1000:350c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 162 0 0x357a 1000:357a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 163 0 0x35e6 1000:35e6 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 164 0 0x3652 1000:3652 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 165 0 0x36c0 1000:36c0 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 166 0 0x372c 1000:372c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 167 0 0x3798 1000:3798 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 168 0 0x3806 1000:3806 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 169 0 0x3872 1000:3872 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 170 0 0x38de 1000:38de far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 171 0 0x394c 1000:394c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 172 0 0x39b8 1000:39b8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 173 0 0x3a24 1000:3a24 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 174 0 0x3a8c 1000:3a8c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 175 0 0x3af2 1000:3af2 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 176 0 0x3b58 1000:3b58 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 177 0 0x3bc1 1000:3bc1 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 178 0 0x3c29 1000:3c29 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 179 0 0x3c91 1000:3c91 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 180 0 0x3cf8 1000:3cf8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 181 0 0x3d61 1000:3d61 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 182 0 0x3dc6 1000:3dc6 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 183 0 0x3e2b 1000:3e2b far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 184 0 0x3e91 1000:3e91 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 185 0 0x3ef7 1000:3ef7 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 186 0 0x3f5c 1000:3f5c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 187 0 0x3fc4 1000:3fc4 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 188 0 0x402c 1000:402c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 189 0 0x4095 1000:4095 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 190 0 0x40fe 1000:40fe far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 191 0 0x4167 1000:4167 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 192 0 0x41cf 1000:41cf far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 193 0 0x4236 1000:4236 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 194 0 0x429d 1000:429d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 195 0 0x4304 1000:4304 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 196 0 0x436a 1000:436a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 197 0 0x43ce 1000:43ce far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 198 0 0x4432 1000:4432 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 199 0 0x4496 1000:4496 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 200 0 0x44fa 1000:44fa far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 201 0 0x455f 1000:455f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 202 0 0x45c3 1000:45c3 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 203 0 0x462a 1000:462a far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 204 0 0x4691 1000:4691 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 205 0 0x46f8 1000:46f8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 206 0 0x475f 1000:475f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 207 0 0x47ca 1000:47ca far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 208 0 0x4833 1000:4833 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 209 0 0x489d 1000:489d far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 210 0 0x4906 1000:4906 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 211 0 0x4970 1000:4970 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 212 0 0x49d9 1000:49d9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 213 0 0x4a43 1000:4a43 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 214 0 0x4aac 1000:4aac far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 215 0 0x4b16 1000:4b16 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 216 0 0x4b7f 1000:4b7f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 217 0 0x4be9 1000:4be9 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 218 0 0x4c52 1000:4c52 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 219 0 0x4cbc 1000:4cbc far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 220 0 0x4d23 1000:4d23 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 221 0 0x4d8c 1000:4d8c far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 222 0 0x4df7 1000:4df7 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 223 0 0x4e5f 1000:4e5f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 224 0 0x4ec8 1000:4ec8 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 225 0 0x4f2f 1000:4f2f far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 226 0 0x4f98 1000:4f98 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 227 0 0x4ffd 1000:4ffd far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 228 0 0x5062 1000:5062 far-pointer-32 False internal entry-ordinal:76 1008:0138 0x00 1 229 0 0x5073 1000:5073 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 230 0 0x5085 1000:5085 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 231 0 0x5098 1000:5098 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 232 0 0x50ab 1000:50ab far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 233 0 0x50be 1000:50be far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 234 0 0x50cd 1000:50cd far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 235 0 0x50dc 1000:50dc far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 236 0 0x50eb 1000:50eb far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 237 0 0x50fa 1000:50fa far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 238 0 0x5109 1000:5109 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 239 0 0x5118 1000:5118 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 240 0 0x5127 1000:5127 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 241 0 0x5136 1000:5136 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 242 0 0x5145 1000:5145 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 243 0 0x5154 1000:5154 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 244 0 0x5163 1000:5163 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 245 0 0x5174 1000:5174 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 246 0 0x5185 1000:5185 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 247 0 0x5194 1000:5194 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 248 0 0x51a3 1000:51a3 far-pointer-32 False internal entry-ordinal:77 1008:0787 0x00 1 249 0 0x5201 1000:5201 far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 250 0 0x5207 1000:5207 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 251 0 0x520f 1000:520f far-pointer-32 False internal entry-ordinal:88 1008:10e3 0x00 1 252 0 0x523c 1000:523c far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 253 0 0x5248 1000:5248 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 254 0 0x5251 1000:5251 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 255 0 0x525a 1000:525a far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 256 0 0x5263 1000:5263 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 257 0 0x526c 1000:526c far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 258 0 0x5275 1000:5275 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 259 0 0x527e 1000:527e far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 260 0 0x5287 1000:5287 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 261 0 0x529f 1000:529f far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 262 0 0x52bd 1000:52bd far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 263 0 0x52db 1000:52db far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 264 0 0x52e9 1000:52e9 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 265 0 0x52f0 1000:52f0 far-pointer-32 False import-ordinal USER.ordinal:6 USER 6 0x01 1 266 0 0x52fd 1000:52fd far-pointer-32 False internal entry-ordinal:171 1018:121b 0x00 1 267 0 0x530f 1000:530f far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 268 0 0x5316 1000:5316 far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 1 269 0 0x5329 1000:5329 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 270 0 0x533d 1000:533d far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 271 0 0x536c 1000:536c far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 272 0 0x537c 1000:537c far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 273 0 0x5388 1000:5388 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 274 0 0x539e 1000:539e far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 275 0 0x53aa 1000:53aa far-pointer-32 False import-ordinal GDI.ordinal:150 GDI 150 0x01 1 276 0 0x53b2 1000:53b2 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 277 0 0x53b7 1000:53b7 far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 278 0 0x53cf 1000:53cf far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 279 0 0x53da 1000:53da far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 280 0 0x53e8 1000:53e8 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 281 0 0x5409 1000:5409 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 282 0 0x5414 1000:5414 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 283 0 0x541c 1000:541c far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 284 0 0x5424 1000:5424 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 285 0 0x5432 1000:5432 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 286 0 0x543d 1000:543d far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 287 0 0x5442 1000:5442 far-pointer-32 False internal entry-ordinal:87 1008:0f2e 0x00 1 288 0 0x544a 1000:544a far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 289 0 0x5452 1000:5452 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 290 0 0x5460 1000:5460 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 291 0 0x546b 1000:546b far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 292 0 0x5479 1000:5479 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 293 0 0x5484 1000:5484 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 294 0 0x5492 1000:5492 far-pointer-32 False import-ordinal USER.ordinal:175 USER 175 0x01 1 295 0 0x54ac 1000:54ac far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 296 0 0x54be 1000:54be far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 297 0 0x54e4 1000:54e4 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 298 0 0x54f6 1000:54f6 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 299 0 0x551c 1000:551c far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 300 0 0x552e 1000:552e far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 301 0 0x5545 1000:5545 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 302 0 0x5552 1000:5552 far-pointer-32 False import-ordinal USER.ordinal:175 USER 175 0x01 1 303 0 0x5561 1000:5561 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 304 0 0x556f 1000:556f far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 305 0 0x557a 1000:557a far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 306 0 0x5587 1000:5587 far-pointer-32 False import-ordinal USER.ordinal:175 USER 175 0x01 1 307 0 0x5596 1000:5596 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 308 0 0x55a4 1000:55a4 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 309 0 0x55af 1000:55af far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 310 0 0x55bd 1000:55bd far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 311 0 0x55c8 1000:55c8 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 312 0 0x55d6 1000:55d6 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 313 0 0x55e1 1000:55e1 far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 314 0 0x55ee 1000:55ee far-pointer-32 False internal entry-ordinal:34 1000:531e 0x00 1 315 0 0x55f6 1000:55f6 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 316 0 0x5603 1000:5603 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 317 0 0x560f 1000:560f far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 318 0 0x5615 1000:5615 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 319 0 0x5631 1000:5631 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 320 0 0x563c 1000:563c far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 321 0 0x5650 1000:5650 far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 322 0 0x5662 1000:5662 far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 323 0 0x5671 1000:5671 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 324 0 0x567f 1000:567f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 325 0 0x56a0 1000:56a0 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 326 0 0x56be 1000:56be far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 327 0 0x56dc 1000:56dc far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 328 0 0x56e7 1000:56e7 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 329 0 0x56ef 1000:56ef far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 330 0 0x56f7 1000:56f7 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 331 0 0x5702 1000:5702 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 332 0 0x5752 1000:5752 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 333 0 0x5799 1000:5799 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 334 0 0x57a8 1000:57a8 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 335 0 0x57ec 1000:57ec far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 336 0 0x57f7 1000:57f7 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 337 0 0x57ff 1000:57ff far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 338 0 0x581f 1000:581f far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 339 0 0x582b 1000:582b far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 340 0 0x5831 1000:5831 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 341 0 0x5842 1000:5842 far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 342 0 0x584e 1000:584e far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 343 0 0x587b 1000:587b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 344 0 0x5885 1000:5885 far-pointer-32 False internal entry-ordinal:82 1008:0996 0x00 1 345 0 0x58b3 1000:58b3 far-pointer-32 False internal entry-ordinal:82 1008:0996 0x00 1 346 0 0x58cb 1000:58cb far-pointer-32 False internal entry-ordinal:83 1008:0b9e 0x00 1 347 0 0x58da 1000:58da far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 348 0 0x5910 1000:5910 far-pointer-32 False import-ordinal USER.ordinal:31 USER 31 0x01 1 349 0 0x592b 1000:592b far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 350 0 0x5937 1000:5937 far-pointer-32 False import-ordinal USER.ordinal:124 USER 124 0x01 1 351 0 0x597d 1000:597d far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 352 0 0x5989 1000:5989 far-pointer-32 False import-ordinal USER.ordinal:124 USER 124 0x01 1 353 0 0x59c1 1000:59c1 far-pointer-32 False import-ordinal USER.ordinal:46 USER 46 0x01 1 354 0 0x59d8 1000:59d8 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 355 0 0x59e9 1000:59e9 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 356 0 0x59f4 1000:59f4 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 357 0 0x59fc 1000:59fc far-pointer-32 False import-ordinal GDI.ordinal:366 GDI 366 0x01 1 358 0 0x5a09 1000:5a09 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 359 0 0x5a18 1000:5a18 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 360 0 0x5a43 1000:5a43 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 361 0 0x5a54 1000:5a54 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 362 0 0x5a5f 1000:5a5f far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 363 0 0x5a6f 1000:5a6f far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 364 0 0x5a7e 1000:5a7e far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 365 0 0x5a96 1000:5a96 far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 366 0 0x5ac5 1000:5ac5 far-pointer-32 False internal entry-ordinal:172 1018:1274 0x00 1 367 0 0x5acc 1000:5acc far-pointer-32 False import-ordinal GDI.ordinal:87 GDI 87 0x01 1 368 0 0x5af1 1000:5af1 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 1 369 0 0x5b0f 1000:5b0f far-pointer-32 False internal entry-ordinal:170 1018:1106 0x00 1 370 0 0x5b99 1000:5b99 far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 1 371 0 0x5bae 1000:5bae far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 372 0 0x5bd6 1000:5bd6 far-pointer-32 False internal entry-ordinal:171 1018:121b 0x00 1 373 0 0x5bdd 1000:5bdd far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 1 374 0 0x5bee 1000:5bee far-pointer-32 False internal entry-ordinal:180 1018:170c 0x00 1 375 0 0x5bfc 1000:5bfc far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 376 0 0x5c0b 1000:5c0b far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 1 377 0 0x5c21 1000:5c21 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 378 0 0x5c2d 1000:5c2d far-pointer-32 False import-ordinal GDI.ordinal:150 GDI 150 0x01 1 379 0 0x5c35 1000:5c35 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 380 0 0x5c3d 1000:5c3d far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 381 0 0x5c4e 1000:5c4e far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 382 0 0x5c5a 1000:5c5a far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 383 0 0x5c6c 1000:5c6c far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 384 0 0x5c7d 1000:5c7d far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 385 0 0x5c8a 1000:5c8a far-pointer-32 False import-ordinal GDI.ordinal:90 GDI 90 0x01 1 386 0 0x5c9b 1000:5c9b far-pointer-32 False import-ordinal GDI.ordinal:346 GDI 346 0x01 1 387 0 0x5ca9 1000:5ca9 far-pointer-32 False import-ordinal GDI.ordinal:2 GDI 2 0x01 1 388 0 0x5ccd 1000:5ccd far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 389 0 0x5ce5 1000:5ce5 far-pointer-32 False import-ordinal GDI.ordinal:9 GDI 9 0x01 1 390 0 0x5cf4 1000:5cf4 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 391 0 0x5d0c 1000:5d0c far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 1 392 0 0x5d12 1000:5d12 far-pointer-32 False import-ordinal GDI.ordinal:33 GDI 33 0x01 1 393 0 0x5d35 1000:5d35 far-pointer-32 False import-ordinal GDI.ordinal:346 GDI 346 0x01 1 394 0 0x5d4b 1000:5d4b far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 395 0 0x5d5c 1000:5d5c far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 396 0 0x5d73 1000:5d73 far-pointer-32 False internal entry-ordinal:283 1020:1629 0x00 1 397 0 0x5d83 1000:5d83 far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 1 398 0 0x5d92 1000:5d92 far-pointer-32 False internal entry-ordinal:249 1008:2f4d 0x00 1 399 0 0x5da1 1000:5da1 far-pointer-32 False internal entry-ordinal:249 1008:2f4d 0x00 1 400 0 0x5dbe 1000:5dbe far-pointer-32 False internal entry-ordinal:266 1020:0b00 0x00 1 401 0 0x5dc3 1000:5dc3 far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 1 402 0 0x5dd2 1000:5dd2 far-pointer-32 False internal entry-ordinal:249 1008:2f4d 0x00 1 403 0 0x5deb 1000:5deb far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 1 404 0 0x5df1 1000:5df1 far-pointer-32 False import-ordinal GDI.ordinal:33 GDI 33 0x01 1 405 0 0x5dfc 1000:5dfc far-pointer-32 False import-ordinal GDI.ordinal:346 GDI 346 0x01 1 406 0 0x5e1b 1000:5e1b far-pointer-32 False internal entry-ordinal:283 1020:1629 0x00 1 407 0 0x5e2b 1000:5e2b far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 1 408 0 0x5e45 1000:5e45 far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 1 409 0 0x5e4b 1000:5e4b far-pointer-32 False import-ordinal GDI.ordinal:33 GDI 33 0x01 1 410 0 0x5e74 1000:5e74 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 411 0 0x5e83 1000:5e83 far-pointer-32 False import-ordinal GDI.ordinal:9 GDI 9 0x01 1 412 0 0x5e8f 1000:5e8f far-pointer-32 False import-ordinal GDI.ordinal:346 GDI 346 0x01 1 413 0 0x5e9c 1000:5e9c far-pointer-32 False import-ordinal GDI.ordinal:2 GDI 2 0x01 1 414 0 0x5ea9 1000:5ea9 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 415 0 0x5eb2 1000:5eb2 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 416 0 0x5ebb 1000:5ebb far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 417 0 0x5ec8 1000:5ec8 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 418 0 0x5ed1 1000:5ed1 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 419 0 0x5ede 1000:5ede far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 420 0 0x5eea 1000:5eea far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 421 0 0x5ef4 1000:5ef4 far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 1 422 0 0x5f14 1000:5f14 far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 423 0 0x5f1e 1000:5f1e far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 1 424 0 0x5f4a 1000:5f4a far-pointer-32 False import-ordinal USER.ordinal:46 USER 46 0x01 1 425 0 0x5f61 1000:5f61 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 426 0 0x5f72 1000:5f72 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 427 0 0x5f7d 1000:5f7d far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 428 0 0x5f85 1000:5f85 far-pointer-32 False import-ordinal GDI.ordinal:366 GDI 366 0x01 1 429 0 0x5f92 1000:5f92 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 430 0 0x5fa1 1000:5fa1 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 431 0 0x5fcc 1000:5fcc far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 432 0 0x5fdd 1000:5fdd far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 433 0 0x5fe8 1000:5fe8 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 434 0 0x5ff8 1000:5ff8 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 435 0 0x6007 1000:6007 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 436 0 0x601f 1000:601f far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 437 0 0x604e 1000:604e far-pointer-32 False internal entry-ordinal:172 1018:1274 0x00 1 438 0 0x6055 1000:6055 far-pointer-32 False import-ordinal GDI.ordinal:87 GDI 87 0x01 1 439 0 0x607a 1000:607a far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 1 440 0 0x6095 1000:6095 far-pointer-32 False internal entry-ordinal:170 1018:1106 0x00 1 441 0 0x60da 1000:60da far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 1 442 0 0x610d 1000:610d far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 443 0 0x611a 1000:611a far-pointer-32 False internal entry-ordinal:171 1018:121b 0x00 1 444 0 0x6121 1000:6121 far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 1 445 0 0x6132 1000:6132 far-pointer-32 False internal entry-ordinal:180 1018:170c 0x00 1 446 0 0x613e 1000:613e far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 447 0 0x6144 1000:6144 far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 448 0 0x6157 1000:6157 far-pointer-32 False internal entry-ordinal:95 1008:149d 0x00 1 449 0 0x6166 1000:6166 far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 1 450 0 0x617c 1000:617c far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 451 0 0x6188 1000:6188 far-pointer-32 False import-ordinal GDI.ordinal:150 GDI 150 0x01 1 452 0 0x6190 1000:6190 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 453 0 0x6198 1000:6198 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 454 0 0x61a7 1000:61a7 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 455 0 0x61c8 1000:61c8 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 456 0 0x61d3 1000:61d3 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 457 0 0x61db 1000:61db far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 458 0 0x61e8 1000:61e8 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 459 0 0x61f4 1000:61f4 far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 1 460 0 0x61fa 1000:61fa far-pointer-32 False import-ordinal USER.ordinal:69 USER 69 0x01 1 461 0 0x6206 1000:6206 far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 462 0 0x6210 1000:6210 far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 1 463 0 0x6230 1000:6230 far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 464 0 0x623a 1000:623a far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 1 465 0 0x6266 1000:6266 far-pointer-32 False import-ordinal USER.ordinal:46 USER 46 0x01 1 466 0 0x627d 1000:627d far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 467 0 0x628e 1000:628e far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 468 0 0x6299 1000:6299 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 469 0 0x62a1 1000:62a1 far-pointer-32 False import-ordinal GDI.ordinal:366 GDI 366 0x01 1 470 0 0x62ae 1000:62ae far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 471 0 0x62bd 1000:62bd far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 472 0 0x62e8 1000:62e8 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 473 0 0x62f9 1000:62f9 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 474 0 0x6304 1000:6304 far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 1 475 0 0x6314 1000:6314 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 1 476 0 0x6323 1000:6323 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 477 0 0x633b 1000:633b far-pointer-32 False import-ordinal USER.ordinal:125 USER 125 0x01 1 478 0 0x6372 1000:6372 far-pointer-32 False internal entry-ordinal:78 1008:07b6 0x00 1 479 0 0x6386 1000:6386 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 480 0 0x6454 1000:6454 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 481 0 0x6459 1000:6459 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 482 0 0x645e 1000:645e far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 483 0 0x64a8 1000:64a8 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 484 0 0x64e7 1000:64e7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 485 0 0x64f5 1000:64f5 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 486 0 0x64fa 1000:64fa far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 487 0 0x6520 1000:6520 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 488 0 0x656f 1000:656f far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 489 0 0x657b 1000:657b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 490 0 0x6594 1000:6594 far-pointer-32 False internal entry-ordinal:35 1000:635c 0x00 1 491 0 0x65a3 1000:65a3 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 492 0 0x65f0 1000:65f0 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 493 0 0x65fd 1000:65fd far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 494 0 0x6616 1000:6616 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 495 0 0x6645 1000:6645 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 496 0 0x665e 1000:665e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 497 0 0x6691 1000:6691 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 498 0 0x6699 1000:6699 far-pointer-32 False internal entry-ordinal:293 1020:14c1 0x00 1 499 0 0x66a6 1000:66a6 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 500 0 0x66b3 1000:66b3 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 501 0 0x66bb 1000:66bb far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 502 0 0x66c0 1000:66c0 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 503 0 0x66de 1000:66de far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 504 0 0x66f7 1000:66f7 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 505 0 0x673b 1000:673b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 506 0 0x6766 1000:6766 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 507 0 0x679a 1000:679a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 508 0 0x67be 1000:67be far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 509 0 0x67e0 1000:67e0 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 510 0 0x67f5 1000:67f5 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 511 0 0x67ff 1000:67ff far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 512 0 0x6814 1000:6814 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 513 0 0x681f 1000:681f far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 514 0 0x6883 1000:6883 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 515 0 0x6896 1000:6896 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 516 0 0x68b3 1000:68b3 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 517 0 0x68c8 1000:68c8 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 518 0 0x68da 1000:68da far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 519 0 0x68e9 1000:68e9 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 520 0 0x6942 1000:6942 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 521 0 0x69f0 1000:69f0 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 522 0 0x6a2d 1000:6a2d far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 523 0 0x6a4a 1000:6a4a far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 524 0 0x6a54 1000:6a54 far-pointer-32 False internal entry-ordinal:84 1008:0dbd 0x00 1 525 0 0x6a63 1000:6a63 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 526 0 0x6a75 1000:6a75 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 527 0 0x6a8b 1000:6a8b far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 528 0 0x6a9e 1000:6a9e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 529 0 0x6aaa 1000:6aaa far-pointer-32 False internal entry-ordinal:82 1008:0996 0x00 1 530 0 0x6ab4 1000:6ab4 far-pointer-32 False internal entry-ordinal:83 1008:0b9e 0x00 1 531 0 0x6ac3 1000:6ac3 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 532 0 0x6b42 1000:6b42 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 533 0 0x6b52 1000:6b52 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 534 0 0x6b66 1000:6b66 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 535 0 0x6b7a 1000:6b7a far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 536 0 0x6ba2 1000:6ba2 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 537 0 0x6bb2 1000:6bb2 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 538 0 0x6bc2 1000:6bc2 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 539 0 0x6bce 1000:6bce far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 540 0 0x6bda 1000:6bda far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 541 0 0x6bf0 1000:6bf0 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 542 0 0x6c0d 1000:6c0d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 543 0 0x6c5a 1000:6c5a far-pointer-32 False internal entry-ordinal:24 1000:6073 0x00 1 544 0 0x6c80 1000:6c80 far-pointer-32 False internal entry-ordinal:152 1018:0e9e 0x00 1 545 0 0x6cb5 1000:6cb5 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 546 0 0x6cf3 1000:6cf3 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 547 0 0x6d1e 1000:6d1e far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 548 0 0x6d32 1000:6d32 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 549 0 0x6d4d 1000:6d4d far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 550 0 0x6d61 1000:6d61 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 551 0 0x6d7c 1000:6d7c far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 552 0 0x6d90 1000:6d90 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 553 0 0x6dab 1000:6dab far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 554 0 0x6dbf 1000:6dbf far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 555 0 0x6dda 1000:6dda far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 556 0 0x6dee 1000:6dee far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 557 0 0x6e09 1000:6e09 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 558 0 0x6e1d 1000:6e1d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 559 0 0x6e39 1000:6e39 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 560 0 0x6e4d 1000:6e4d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 561 0 0x6e69 1000:6e69 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 562 0 0x6e7c 1000:6e7c far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 563 0 0x6e98 1000:6e98 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 564 0 0x6eab 1000:6eab far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 565 0 0x6ec7 1000:6ec7 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 566 0 0x6ed2 1000:6ed2 far-pointer-32 False internal entry-ordinal:36 1000:6b37 0x00 1 567 0 0x6ee1 1000:6ee1 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 568 0 0x6f37 1000:6f37 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 569 0 0x6f42 1000:6f42 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 570 0 0x6f4d 1000:6f4d far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 571 0 0x6f5c 1000:6f5c far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 572 0 0x6f6b 1000:6f6b far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 573 0 0x6f79 1000:6f79 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 574 0 0x6fb1 1000:6fb1 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 575 0 0x6fbe 1000:6fbe far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 576 0 0x6fcd 1000:6fcd far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 577 0 0x6fe9 1000:6fe9 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 578 0 0x6ff5 1000:6ff5 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 579 0 0x7111 1000:7111 far-pointer-32 False internal entry-ordinal:46 1000:7e92 0x00 1 580 0 0x7126 1000:7126 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 581 0 0x729f 1000:729f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 582 0 0x72bf 1000:72bf far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 583 0 0x72e6 1000:72e6 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 584 0 0x7306 1000:7306 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 585 0 0x732d 1000:732d far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 586 0 0x734d 1000:734d far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 587 0 0x7374 1000:7374 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 588 0 0x7394 1000:7394 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 589 0 0x73bb 1000:73bb far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 590 0 0x73db 1000:73db far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 591 0 0x73f7 1000:73f7 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 592 0 0x7402 1000:7402 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 593 0 0x740d 1000:740d far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 594 0 0x7415 1000:7415 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 595 0 0x741d 1000:741d far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 596 0 0x7425 1000:7425 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 597 0 0x7438 1000:7438 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 598 0 0x7450 1000:7450 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 599 0 0x745b 1000:745b far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 600 0 0x746a 1000:746a far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 601 0 0x7475 1000:7475 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 602 0 0x7484 1000:7484 far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 603 0 0x7492 1000:7492 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 604 0 0x74b1 1000:74b1 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 605 0 0x74bd 1000:74bd far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 606 0 0x74e5 1000:74e5 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 607 0 0x74f1 1000:74f1 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 608 0 0x750e 1000:750e far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 609 0 0x7519 1000:7519 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 610 0 0x7533 1000:7533 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 611 0 0x7550 1000:7550 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 612 0 0x7562 1000:7562 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 613 0 0x757c 1000:757c far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 614 0 0x7599 1000:7599 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 615 0 0x75ab 1000:75ab far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 616 0 0x75cb 1000:75cb far-pointer-32 False internal entry-ordinal:90 1008:118f 0x00 1 617 0 0x75e8 1000:75e8 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 618 0 0x7605 1000:7605 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 619 0 0x7627 1000:7627 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 620 0 0x7645 1000:7645 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 621 0 0x7662 1000:7662 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 622 0 0x768a 1000:768a far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 623 0 0x76a7 1000:76a7 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 624 0 0x76d3 1000:76d3 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 625 0 0x76eb 1000:76eb far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 626 0 0x7707 1000:7707 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 627 0 0x771f 1000:771f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 628 0 0x7742 1000:7742 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 629 0 0x7760 1000:7760 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 630 0 0x7772 1000:7772 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 631 0 0x7792 1000:7792 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 632 0 0x77b0 1000:77b0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 633 0 0x77c2 1000:77c2 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 634 0 0x77f8 1000:77f8 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 635 0 0x7816 1000:7816 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 636 0 0x7828 1000:7828 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 637 0 0x7848 1000:7848 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 638 0 0x7865 1000:7865 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 639 0 0x7877 1000:7877 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 640 0 0x7898 1000:7898 far-pointer-32 False internal entry-ordinal:90 1008:118f 0x00 1 641 0 0x78b5 1000:78b5 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 642 0 0x78de 1000:78de far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 643 0 0x78fb 1000:78fb far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 644 0 0x7932 1000:7932 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 645 0 0x7950 1000:7950 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 646 0 0x7962 1000:7962 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 647 0 0x7982 1000:7982 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 648 0 0x79a0 1000:79a0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 649 0 0x79b2 1000:79b2 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 650 0 0x79d0 1000:79d0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 651 0 0x79e8 1000:79e8 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 652 0 0x7a04 1000:7a04 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 653 0 0x7a1c 1000:7a1c far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 654 0 0x7a60 1000:7a60 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 655 0 0x7a7d 1000:7a7d far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 656 0 0x7aa0 1000:7aa0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 657 0 0x7abe 1000:7abe far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 658 0 0x7ad0 1000:7ad0 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 659 0 0x7af0 1000:7af0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 660 0 0x7b0d 1000:7b0d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 661 0 0x7b1f 1000:7b1f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 662 0 0x7b46 1000:7b46 far-pointer-32 False internal entry-ordinal:90 1008:118f 0x00 1 663 0 0x7b64 1000:7b64 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 664 0 0x7b82 1000:7b82 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 665 0 0x7ba0 1000:7ba0 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 666 0 0x7bbd 1000:7bbd far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 667 0 0x7be6 1000:7be6 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 668 0 0x7c04 1000:7c04 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 669 0 0x7c22 1000:7c22 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 670 0 0x7c3f 1000:7c3f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 671 0 0x7c5c 1000:7c5c far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 672 0 0x7c85 1000:7c85 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 673 0 0x7ca3 1000:7ca3 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 674 0 0x7cc1 1000:7cc1 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 675 0 0x7ce1 1000:7ce1 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 676 0 0x7cfe 1000:7cfe far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 677 0 0x7d10 1000:7d10 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 678 0 0x7d30 1000:7d30 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 679 0 0x7d4d 1000:7d4d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 680 0 0x7d5f 1000:7d5f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 681 0 0x7d7a 1000:7d7a far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 682 0 0x7d86 1000:7d86 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 683 0 0x7da2 1000:7da2 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 684 0 0x7dad 1000:7dad far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 685 0 0x7dc9 1000:7dc9 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 686 0 0x7dd4 1000:7dd4 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 687 0 0x7ddf 1000:7ddf far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 688 0 0x7de7 1000:7de7 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 689 0 0x7def 1000:7def far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 690 0 0x7df7 1000:7df7 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 691 0 0x7e0a 1000:7e0a far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 692 0 0x7e45 1000:7e45 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 693 0 0x7e53 1000:7e53 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 694 0 0x7e7c 1000:7e7c far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 695 0 0x7e8a 1000:7e8a far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 696 0 0x7ebf 1000:7ebf far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 697 0 0x7ed1 1000:7ed1 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 698 0 0x7ee0 1000:7ee0 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 699 0 0x7f05 1000:7f05 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 700 0 0x8008 1000:8008 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 701 0 0x80f7 1000:80f7 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 702 0 0x80fc 1000:80fc far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 703 0 0x8101 1000:8101 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 704 0 0x8172 1000:8172 far-pointer-32 False internal entry-ordinal:44 1000:c36b 0x00 1 705 0 0x819c 1000:819c far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 706 0 0x81be 1000:81be far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 707 0 0x81e2 1000:81e2 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 708 0 0x81fe 1000:81fe far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 709 0 0x8215 1000:8215 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 710 0 0x8228 1000:8228 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 711 0 0x8250 1000:8250 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 712 0 0x8274 1000:8274 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 713 0 0x828b 1000:828b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 714 0 0x829e 1000:829e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 715 0 0x82c5 1000:82c5 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 716 0 0x82e7 1000:82e7 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 717 0 0x830b 1000:830b far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 718 0 0x8327 1000:8327 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 719 0 0x833e 1000:833e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 720 0 0x8351 1000:8351 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 721 0 0x8379 1000:8379 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 722 0 0x839d 1000:839d far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 723 0 0x83b4 1000:83b4 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 724 0 0x83c7 1000:83c7 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 725 0 0x8463 1000:8463 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 726 0 0x8470 1000:8470 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 727 0 0x8475 1000:8475 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 728 0 0x848a 1000:848a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 729 0 0x8497 1000:8497 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 730 0 0x849c 1000:849c far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 731 0 0x84a4 1000:84a4 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 732 0 0x84a9 1000:84a9 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 733 0 0x84b6 1000:84b6 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 734 0 0x84bb 1000:84bb far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 735 0 0x8583 1000:8583 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 736 0 0x8588 1000:8588 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 737 0 0x858d 1000:858d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 738 0 0x8592 1000:8592 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 739 0 0x85b9 1000:85b9 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 740 0 0x85be 1000:85be far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 741 0 0x85c3 1000:85c3 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 742 0 0x85c8 1000:85c8 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 743 0 0x863d 1000:863d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 744 0 0x864b 1000:864b far-pointer-32 False internal entry-ordinal:288 1020:1007 0x00 1 745 0 0x86ce 1000:86ce far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 746 0 0x86dc 1000:86dc far-pointer-32 False internal entry-ordinal:288 1020:1007 0x00 1 747 0 0x86ef 1000:86ef far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 748 0 0x871a 1000:871a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 749 0 0x871f 1000:871f far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 750 0 0x8727 1000:8727 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 751 0 0x872c 1000:872c far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 752 0 0x8793 1000:8793 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 753 0 0x8798 1000:8798 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 754 0 0x879d 1000:879d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 755 0 0x87d5 1000:87d5 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 756 0 0x87ee 1000:87ee far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 757 0 0x87fc 1000:87fc far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 758 0 0x8815 1000:8815 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 759 0 0x8823 1000:8823 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 760 0 0x882b 1000:882b far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 761 0 0x8837 1000:8837 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 762 0 0x883f 1000:883f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 763 0 0x8844 1000:8844 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 764 0 0x885d 1000:885d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 765 0 0x8876 1000:8876 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 766 0 0x8884 1000:8884 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 767 0 0x889d 1000:889d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 768 0 0x88ab 1000:88ab far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 769 0 0x88b3 1000:88b3 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 770 0 0x88bb 1000:88bb far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 771 0 0x88c0 1000:88c0 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 772 0 0x88d1 1000:88d1 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 773 0 0x88df 1000:88df far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 774 0 0x88e7 1000:88e7 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 775 0 0x88ec 1000:88ec far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 776 0 0x88f8 1000:88f8 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 777 0 0x8906 1000:8906 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 778 0 0x891a 1000:891a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 779 0 0x8939 1000:8939 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 780 0 0x8941 1000:8941 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 781 0 0x8946 1000:8946 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 782 0 0x8960 1000:8960 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 783 0 0x896e 1000:896e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 784 0 0x8973 1000:8973 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 785 0 0x898a 1000:898a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 786 0 0x8998 1000:8998 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 787 0 0x89a6 1000:89a6 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 788 0 0x89b4 1000:89b4 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 789 0 0x89c2 1000:89c2 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 790 0 0x89ca 1000:89ca far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 791 0 0x89d2 1000:89d2 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 792 0 0x89d7 1000:89d7 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 793 0 0x89fd 1000:89fd far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 794 0 0x8a0b 1000:8a0b far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 795 0 0x8a19 1000:8a19 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 796 0 0x8a27 1000:8a27 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 797 0 0x8a35 1000:8a35 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 798 0 0x8a3d 1000:8a3d far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 799 0 0x8a45 1000:8a45 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 800 0 0x8a4a 1000:8a4a far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 801 0 0x8a74 1000:8a74 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 802 0 0x8a95 1000:8a95 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 803 0 0x8a9a 1000:8a9a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 804 0 0x8aa2 1000:8aa2 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 805 0 0x8aa7 1000:8aa7 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 806 0 0x8ac8 1000:8ac8 far-pointer-32 False internal entry-ordinal:38 1000:beff 0x00 1 807 0 0x8aed 1000:8aed far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 808 0 0x8b21 1000:8b21 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 809 0 0x8b83 1000:8b83 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 810 0 0x8b88 1000:8b88 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 811 0 0x8b8d 1000:8b8d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 812 0 0x8bc7 1000:8bc7 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 813 0 0x8bcc 1000:8bcc far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 814 0 0x8bd1 1000:8bd1 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 815 0 0x8c0b 1000:8c0b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 816 0 0x8c10 1000:8c10 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 817 0 0x8c15 1000:8c15 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 818 0 0x8c4f 1000:8c4f far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 819 0 0x8c54 1000:8c54 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 820 0 0x8c59 1000:8c59 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 821 0 0x8e27 1000:8e27 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 822 0 0x8e2c 1000:8e2c far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 823 0 0x8e31 1000:8e31 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 824 0 0x8e6d 1000:8e6d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 825 0 0x8e72 1000:8e72 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 826 0 0x8e77 1000:8e77 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 827 0 0x8eb3 1000:8eb3 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 828 0 0x8eb8 1000:8eb8 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 829 0 0x8ebd 1000:8ebd far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 830 0 0x8ef9 1000:8ef9 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 831 0 0x8efe 1000:8efe far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 832 0 0x8f03 1000:8f03 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 833 0 0x8f3f 1000:8f3f far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 834 0 0x8f44 1000:8f44 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 835 0 0x8f49 1000:8f49 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 836 0 0x8f85 1000:8f85 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 837 0 0x8f8a 1000:8f8a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 838 0 0x8f8f 1000:8f8f far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 839 0 0x8fcb 1000:8fcb far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 840 0 0x8fd0 1000:8fd0 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 841 0 0x8fd5 1000:8fd5 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 842 0 0x9013 1000:9013 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 843 0 0x9018 1000:9018 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 844 0 0x901d 1000:901d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 845 0 0x905b 1000:905b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 846 0 0x9060 1000:9060 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 847 0 0x9065 1000:9065 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 848 0 0x90a3 1000:90a3 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 849 0 0x90a8 1000:90a8 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 850 0 0x90ad 1000:90ad far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 851 0 0x92bb 1000:92bb far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 852 0 0x92ce 1000:92ce far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 853 0 0x92df 1000:92df far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 854 0 0x92fe 1000:92fe far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 855 0 0x933c 1000:933c far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 856 0 0x937a 1000:937a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 857 0 0x93b8 1000:93b8 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 858 0 0x95b2 1000:95b2 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 859 0 0x95ee 1000:95ee far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 860 0 0x962a 1000:962a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 861 0 0x9666 1000:9666 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 862 0 0x96a2 1000:96a2 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 863 0 0x96de 1000:96de far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 864 0 0x971a 1000:971a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 865 0 0x9754 1000:9754 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 866 0 0x978e 1000:978e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 867 0 0x97c8 1000:97c8 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 868 0 0x99ab 1000:99ab far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 869 0 0x99bf 1000:99bf far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 870 0 0x99d1 1000:99d1 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 871 0 0x99e8 1000:99e8 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 872 0 0x9a1d 1000:9a1d far-pointer-32 False internal entry-ordinal:49 1000:7ed9 0x00 1 873 0 0x9a29 1000:9a29 far-pointer-32 False internal entry-ordinal:51 1000:8b0d 0x00 1 874 0 0x9a58 1000:9a58 far-pointer-32 False internal entry-ordinal:49 1000:7ed9 0x00 1 875 0 0x9a64 1000:9a64 far-pointer-32 False internal entry-ordinal:51 1000:8b0d 0x00 1 876 0 0x9a91 1000:9a91 far-pointer-32 False internal entry-ordinal:49 1000:7ed9 0x00 1 877 0 0x9a9d 1000:9a9d far-pointer-32 False internal entry-ordinal:51 1000:8b0d 0x00 1 878 0 0x9acc 1000:9acc far-pointer-32 False internal entry-ordinal:49 1000:7ed9 0x00 1 879 0 0x9ad8 1000:9ad8 far-pointer-32 False internal entry-ordinal:51 1000:8b0d 0x00 1 880 0 0x9be2 1000:9be2 far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 881 0 0x9bf2 1000:9bf2 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 882 0 0x9c02 1000:9c02 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 883 0 0x9c12 1000:9c12 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 884 0 0x9c22 1000:9c22 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 885 0 0x9c36 1000:9c36 far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 886 0 0x9c54 1000:9c54 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 887 0 0x9c82 1000:9c82 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 888 0 0x9cf3 1000:9cf3 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 889 0 0x9d07 1000:9d07 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 890 0 0x9d34 1000:9d34 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 891 0 0x9d4b 1000:9d4b far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 892 0 0x9d71 1000:9d71 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 893 0 0x9d88 1000:9d88 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 894 0 0x9dae 1000:9dae far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 895 0 0x9e06 1000:9e06 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 896 0 0x9e16 1000:9e16 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 897 0 0x9e26 1000:9e26 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 898 0 0x9e36 1000:9e36 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 899 0 0x9e42 1000:9e42 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 900 0 0x9e4e 1000:9e4e far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 901 0 0x9e5a 1000:9e5a far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 902 0 0x9e66 1000:9e66 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 903 0 0x9e7d 1000:9e7d far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 904 0 0x9f6b 1000:9f6b far-pointer-32 False internal entry-ordinal:54 1000:9bca 0x00 1 905 0 0x9f8b 1000:9f8b far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 906 0 0x9f9b 1000:9f9b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 907 0 0x9fab 1000:9fab far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 908 0 0x9fbb 1000:9fbb far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 909 0 0x9fcb 1000:9fcb far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 910 0 0x9fdf 1000:9fdf far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 911 0 0x9ffd 1000:9ffd far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 912 0 0xa02b 1000:a02b far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 913 0 0xa05d 1000:a05d far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 914 0 0xa089 1000:a089 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 915 0 0xa1fc 1000:a1fc far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 916 0 0xa210 1000:a210 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 917 0 0xa23d 1000:a23d far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 918 0 0xa254 1000:a254 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 919 0 0xa27a 1000:a27a far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 920 0 0xa291 1000:a291 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 921 0 0xa2b7 1000:a2b7 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 922 0 0xa30f 1000:a30f far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 923 0 0xa31f 1000:a31f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 924 0 0xa32f 1000:a32f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 925 0 0xa33f 1000:a33f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 926 0 0xa34b 1000:a34b far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 927 0 0xa357 1000:a357 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 928 0 0xa363 1000:a363 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 929 0 0xa36f 1000:a36f far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 930 0 0xa386 1000:a386 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 931 0 0xa3a6 1000:a3a6 far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 932 0 0xa3b6 1000:a3b6 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 933 0 0xa3c6 1000:a3c6 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 934 0 0xa3d6 1000:a3d6 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 935 0 0xa3e6 1000:a3e6 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 936 0 0xa3fa 1000:a3fa far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 937 0 0xa422 1000:a422 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 938 0 0xa453 1000:a453 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 939 0 0xa4e6 1000:a4e6 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 940 0 0xa4fa 1000:a4fa far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 941 0 0xa527 1000:a527 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 942 0 0xa585 1000:a585 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 943 0 0xa595 1000:a595 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 944 0 0xa5a5 1000:a5a5 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 945 0 0xa5b5 1000:a5b5 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 946 0 0xa5c1 1000:a5c1 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 947 0 0xa5cd 1000:a5cd far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 948 0 0xa5d9 1000:a5d9 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 949 0 0xa5e5 1000:a5e5 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 950 0 0xa5fc 1000:a5fc far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 951 0 0xa614 1000:a614 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 952 0 0xa641 1000:a641 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 953 0 0xa6a3 1000:a6a3 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 954 0 0xa6c3 1000:a6c3 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 955 0 0xa6e1 1000:a6e1 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 956 0 0xa706 1000:a706 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 957 0 0xa744 1000:a744 far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 958 0 0xa7a2 1000:a7a2 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 959 0 0xa7b5 1000:a7b5 far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 960 0 0xa825 1000:a825 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 961 0 0xa860 1000:a860 far-pointer-32 False internal entry-ordinal:58 1000:a604 0x00 1 962 0 0xa8dc 1000:a8dc far-pointer-32 False internal entry-ordinal:46 1000:7e92 0x00 1 963 0 0xa8f6 1000:a8f6 far-pointer-32 False import-ordinal KERNEL.ordinal:83 KERNEL 83 0x01 1 964 0 0xa912 1000:a912 far-pointer-32 False internal entry-ordinal:279 1020:16c9 0x00 1 965 0 0xa957 1000:a957 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 966 0 0xa96c 1000:a96c far-pointer-32 False import-ordinal KERNEL.ordinal:86 KERNEL 86 0x01 1 967 0 0xa97b 1000:a97b far-pointer-32 False import-ordinal KERNEL.ordinal:86 KERNEL 86 0x01 1 968 0 0xa98c 1000:a98c far-pointer-32 False import-ordinal KERNEL.ordinal:86 KERNEL 86 0x01 1 969 0 0xa994 1000:a994 far-pointer-32 False import-ordinal KERNEL.ordinal:81 KERNEL 81 0x01 1 970 0 0xa9ac 1000:a9ac far-pointer-32 False import-ordinal KERNEL.ordinal:85 KERNEL 85 0x01 1 971 0 0xa9c1 1000:a9c1 far-pointer-32 False import-ordinal KERNEL.ordinal:85 KERNEL 85 0x01 1 972 0 0xa9dc 1000:a9dc far-pointer-32 False import-ordinal KERNEL.ordinal:82 KERNEL 82 0x01 1 973 0 0xa9ee 1000:a9ee far-pointer-32 False internal entry-ordinal:266 1020:0b00 0x00 1 974 0 0xaa00 1000:aa00 far-pointer-32 False internal entry-ordinal:266 1020:0b00 0x00 1 975 0 0xaa05 1000:aa05 far-pointer-32 False internal entry-ordinal:265 1020:0ac3 0x00 1 976 0 0xaa1a 1000:aa1a far-pointer-32 False import-ordinal KERNEL.ordinal:82 KERNEL 82 0x01 1 977 0 0xaa2a 1000:aa2a far-pointer-32 False import-ordinal KERNEL.ordinal:82 KERNEL 82 0x01 1 978 0 0xaa64 1000:aa64 far-pointer-32 False import-ordinal KERNEL.ordinal:81 KERNEL 81 0x01 1 979 0 0xaa8a 1000:aa8a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 980 0 0xaaad 1000:aaad far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 981 0 0xaabc 1000:aabc far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 982 0 0xaacb 1000:aacb far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 983 0 0xaada 1000:aada far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 984 0 0xaae9 1000:aae9 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 985 0 0xaaf8 1000:aaf8 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 986 0 0xab07 1000:ab07 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 987 0 0xab16 1000:ab16 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 988 0 0xab25 1000:ab25 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 989 0 0xab34 1000:ab34 far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 990 0 0xab5a 1000:ab5a far-pointer-32 False internal entry-ordinal:246 1008:2ee5 0x00 1 991 0 0xab8a 1000:ab8a far-pointer-32 False internal entry-ordinal:106 1008:1607 0x00 1 992 0 0xabb3 1000:abb3 far-pointer-32 False internal entry-ordinal:15 1000:5aea 0x00 1 993 0 0xabdd 1000:abdd far-pointer-32 False internal entry-ordinal:152 1018:0e9e 0x00 1 994 0 0xac6f 1000:ac6f far-pointer-32 False internal entry-ordinal:259 1020:0891 0x00 1 995 0 0xaca6 1000:aca6 far-pointer-32 False internal entry-ordinal:63 1000:ab3c 0x00 1 996 0 0xacaf 1000:acaf far-pointer-32 False internal entry-ordinal:61 1000:a8ea 0x00 1 997 0 0xacd2 1000:acd2 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 998 0 0xad18 1000:ad18 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 999 0 0xad37 1000:ad37 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1000 0 0xad58 1000:ad58 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1001 0 0xad84 1000:ad84 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1002 0 0xad8f 1000:ad8f far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1003 0 0xada6 1000:ada6 far-pointer-32 False internal entry-ordinal:33 1000:0002 0x00 1 1004 0 0xadb7 1000:adb7 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1005 0 0xadd5 1000:add5 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1006 0 0xadf3 1000:adf3 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1007 0 0xae02 1000:ae02 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1008 0 0xae20 1000:ae20 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1009 0 0xae3e 1000:ae3e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1010 0 0xae66 1000:ae66 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1011 0 0xae92 1000:ae92 far-pointer-32 False internal entry-ordinal:57 1000:a38e 0x00 1 1012 0 0xaef3 1000:aef3 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1013 0 0xaf00 1000:af00 far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1014 0 0xaf20 1000:af20 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1015 0 0xaf2e 1000:af2e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1016 0 0xaf33 1000:af33 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1017 0 0xaf88 1000:af88 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1018 0 0xaf93 1000:af93 far-pointer-32 False internal entry-ordinal:57 1000:a38e 0x00 1 1019 0 0xafe0 1000:afe0 far-pointer-32 False internal entry-ordinal:62 1000:a99c 0x00 1 1020 0 0xafe9 1000:afe9 far-pointer-32 False internal entry-ordinal:64 1000:abe5 0x00 1 1021 0 0xb12b 1000:b12b far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 1022 0 0xb151 1000:b151 far-pointer-32 False internal entry-ordinal:46 1000:7e92 0x00 1 1023 0 0xb183 1000:b183 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1024 0 0xb1de 1000:b1de far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1025 0 0xb1ec 1000:b1ec far-pointer-32 False internal entry-ordinal:84 1008:0dbd 0x00 1 1026 0 0xb1f8 1000:b1f8 far-pointer-32 False internal entry-ordinal:83 1008:0b9e 0x00 1 1027 0 0xb20b 1000:b20b far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1028 0 0xb214 1000:b214 far-pointer-32 False internal entry-ordinal:65 1000:acc2 0x00 1 1029 0 0xb23a 1000:b23a far-pointer-32 False internal entry-ordinal:55 1000:9e85 0x00 1 1030 0 0xb24a 1000:b24a far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1031 0 0xb25f 1000:b25f far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1032 0 0xb271 1000:b271 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1033 0 0xb284 1000:b284 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1034 0 0xb28d 1000:b28d far-pointer-32 False internal entry-ordinal:58 1000:a604 0x00 1 1035 0 0xb29d 1000:b29d far-pointer-32 False internal entry-ordinal:59 1000:a70e 0x00 1 1036 0 0xb2c0 1000:b2c0 far-pointer-32 False internal entry-ordinal:63 1000:ab3c 0x00 1 1037 0 0xb2e5 1000:b2e5 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1038 0 0xb303 1000:b303 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1039 0 0xb31b 1000:b31b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1040 0 0xb348 1000:b348 far-pointer-32 False internal entry-ordinal:68 1000:b2c8 0x00 1 1041 0 0xb36a 1000:b36a far-pointer-32 False internal entry-ordinal:84 1008:0dbd 0x00 1 1042 0 0xb395 1000:b395 far-pointer-32 False internal entry-ordinal:68 1000:b2c8 0x00 1 1043 0 0xb3a8 1000:b3a8 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1044 0 0xb3cd 1000:b3cd far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1045 0 0xb3eb 1000:b3eb far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1046 0 0xb403 1000:b403 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1047 0 0xb430 1000:b430 far-pointer-32 False internal entry-ordinal:69 1000:b3b0 0x00 1 1048 0 0xb45b 1000:b45b far-pointer-32 False internal entry-ordinal:69 1000:b3b0 0x00 1 1049 0 0xb46e 1000:b46e far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1050 0 0xb4d3 1000:b4d3 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1051 0 0xb4fe 1000:b4fe far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 1052 0 0xb55d 1000:b55d far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1053 0 0xb586 1000:b586 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1054 0 0xb5b5 1000:b5b5 far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 1055 0 0xb5e7 1000:b5e7 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1056 0 0xb5ff 1000:b5ff far-pointer-32 False internal entry-ordinal:33 1000:0002 0x00 1 1057 0 0xb60f 1000:b60f far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1058 0 0xb622 1000:b622 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1059 0 0xb637 1000:b637 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1060 0 0xb678 1000:b678 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1061 0 0xb694 1000:b694 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1062 0 0xb6e8 1000:b6e8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1063 0 0xb74e 1000:b74e far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 1064 0 0xb769 1000:b769 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1065 0 0xb7ed 1000:b7ed far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1066 0 0xb820 1000:b820 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1067 0 0xb832 1000:b832 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1068 0 0xb845 1000:b845 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1069 0 0xb878 1000:b878 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1070 0 0xb88a 1000:b88a far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1071 0 0xb8af 1000:b8af far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1072 0 0xb8d4 1000:b8d4 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1073 0 0xb8f6 1000:b8f6 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1074 0 0xb918 1000:b918 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1075 0 0xb93a 1000:b93a far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1076 0 0xb95c 1000:b95c far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1077 0 0xb97e 1000:b97e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1078 0 0xb991 1000:b991 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1079 0 0xb99b 1000:b99b far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1080 0 0xba02 1000:ba02 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1081 0 0xba0d 1000:ba0d far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1082 0 0xba82 1000:ba82 far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 1083 0 0xbab7 1000:bab7 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1084 0 0xbac8 1000:bac8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1085 0 0xbae8 1000:bae8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1086 0 0xbaf8 1000:baf8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1087 0 0xbb18 1000:bb18 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1088 0 0xbb29 1000:bb29 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1089 0 0xbb46 1000:bb46 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1090 0 0xbb5e 1000:bb5e far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1091 0 0xbb7c 1000:bb7c far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1092 0 0xbb8b 1000:bb8b far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1093 0 0xbba3 1000:bba3 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1094 0 0xbbc1 1000:bbc1 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1095 0 0xbbcf 1000:bbcf far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1096 0 0xbbe7 1000:bbe7 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1097 0 0xbc05 1000:bc05 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1098 0 0xbc2e 1000:bc2e far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1099 0 0xbc46 1000:bc46 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1100 0 0xbc79 1000:bc79 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1101 0 0xbc9e 1000:bc9e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1102 0 0xbd40 1000:bd40 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1103 0 0xbd6a 1000:bd6a far-pointer-32 False internal entry-ordinal:58 1000:a604 0x00 1 1104 0 0xbd76 1000:bd76 far-pointer-32 False internal entry-ordinal:83 1008:0b9e 0x00 1 1105 0 0xbd87 1000:bd87 far-pointer-32 False internal entry-ordinal:82 1008:0996 0x00 1 1106 0 0xbd9a 1000:bd9a far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1107 0 0xbdb2 1000:bdb2 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1108 0 0xbdc3 1000:bdc3 far-pointer-32 False internal entry-ordinal:82 1008:0996 0x00 1 1109 0 0xbdd6 1000:bdd6 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1110 0 0xbf17 1000:bf17 far-pointer-32 False import-ordinal USER.ordinal:33 USER 33 0x01 1 1111 0 0xbf27 1000:bf27 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1112 0 0xbf37 1000:bf37 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 1113 0 0xbf47 1000:bf47 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 1114 0 0xbf57 1000:bf57 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 1115 0 0xbf6b 1000:bf6b far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 1116 0 0xbfda 1000:bfda far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1117 0 0xc008 1000:c008 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1118 0 0xc03a 1000:c03a far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1119 0 0xc066 1000:c066 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1120 0 0xc1d9 1000:c1d9 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1121 0 0xc1ed 1000:c1ed far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1122 0 0xc21a 1000:c21a far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1123 0 0xc231 1000:c231 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1124 0 0xc257 1000:c257 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1125 0 0xc26e 1000:c26e far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1126 0 0xc294 1000:c294 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1127 0 0xc2ec 1000:c2ec far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1128 0 0xc2fc 1000:c2fc far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1129 0 0xc30c 1000:c30c far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1130 0 0xc31c 1000:c31c far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1131 0 0xc328 1000:c328 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 1132 0 0xc334 1000:c334 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 1133 0 0xc340 1000:c340 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 1134 0 0xc34c 1000:c34c far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 1135 0 0xc363 1000:c363 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1136 0 0xc54a 1000:c54a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1137 0 0xc555 1000:c555 far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1138 0 0xc5b5 1000:c5b5 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1139 0 0xc5c0 1000:c5c0 far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1140 0 0xc620 1000:c620 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1141 0 0xc62b 1000:c62b far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1142 0 0xc68b 1000:c68b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1143 0 0xc696 1000:c696 far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1144 0 0xc6f6 1000:c6f6 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1145 0 0xc701 1000:c701 far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1146 0 0xc733 1000:c733 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1147 0 0xc73e 1000:c73e far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1148 0 0xc75f 1000:c75f far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1149 0 0xc7ef 1000:c7ef far-pointer-32 False internal entry-ordinal:44 1000:c36b 0x00 1 1150 0 0xc867 1000:c867 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1151 0 0xc874 1000:c874 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1152 0 0xc879 1000:c879 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1153 0 0xc892 1000:c892 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1154 0 0xc89f 1000:c89f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1155 0 0xc8a4 1000:c8a4 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1156 0 0xc8ac 1000:c8ac far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1157 0 0xc8b1 1000:c8b1 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1158 0 0xc8be 1000:c8be far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1159 0 0xc8c3 1000:c8c3 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1160 0 0xc8f5 1000:c8f5 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1161 0 0xc912 1000:c912 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1162 0 0xc91a 1000:c91a far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1163 0 0xc933 1000:c933 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1164 0 0xc93b 1000:c93b far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1165 0 0xc940 1000:c940 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1166 0 0xc96e 1000:c96e far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1167 0 0xc98b 1000:c98b far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1168 0 0xc993 1000:c993 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1169 0 0xc9ac 1000:c9ac far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1170 0 0xc9b4 1000:c9b4 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1171 0 0xc9b9 1000:c9b9 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1172 0 0xca72 1000:ca72 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1173 0 0xca91 1000:ca91 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1174 0 0xcb43 1000:cb43 far-pointer-32 False internal entry-ordinal:67 1000:ae6e 0x00 1 1175 0 0xcbc5 1000:cbc5 far-pointer-32 False internal entry-ordinal:53 1000:9b69 0x00 1 1176 0 0xcc06 1000:cc06 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1177 0 0xcc13 1000:cc13 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1178 0 0xcc18 1000:cc18 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1179 0 0xcc3d 1000:cc3d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1180 0 0xcc4a 1000:cc4a far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1181 0 0xcc4f 1000:cc4f far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1182 0 0xcc57 1000:cc57 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1183 0 0xcc5c 1000:cc5c far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1184 0 0xcc69 1000:cc69 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1185 0 0xcc6e 1000:cc6e far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1186 0 0xcc94 1000:cc94 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1187 0 0xcd37 1000:cd37 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1188 0 0xcd50 1000:cd50 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1189 0 0xcd55 1000:cd55 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1190 0 0xcd5a 1000:cd5a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1191 0 0xcd86 1000:cd86 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1192 0 0xcd97 1000:cd97 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1193 0 0xcd9c 1000:cd9c far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1194 0 0xcda1 1000:cda1 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1195 0 0xcdd0 1000:cdd0 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1196 0 0xcde9 1000:cde9 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1197 0 0xcdee 1000:cdee far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1198 0 0xcdf3 1000:cdf3 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1199 0 0xce1f 1000:ce1f far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1200 0 0xce30 1000:ce30 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1201 0 0xce35 1000:ce35 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1202 0 0xce3a 1000:ce3a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1203 0 0xce96 1000:ce96 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1204 0 0xce9b 1000:ce9b far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1205 0 0xceb4 1000:ceb4 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1206 0 0xceb9 1000:ceb9 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1207 0 0xcec1 1000:cec1 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1208 0 0xcec6 1000:cec6 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1209 0 0xced3 1000:ced3 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1210 0 0xced8 1000:ced8 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1211 0 0xcef7 1000:cef7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1212 0 0xcf14 1000:cf14 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1213 0 0xcf2e 1000:cf2e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1214 0 0xcf36 1000:cf36 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1215 0 0xcf3e 1000:cf3e far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1216 0 0xcf43 1000:cf43 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1217 0 0xcfdc 1000:cfdc far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1218 0 0xd007 1000:d007 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1219 0 0xd014 1000:d014 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1220 0 0xd019 1000:d019 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1221 0 0xd035 1000:d035 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1222 0 0xd042 1000:d042 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1223 0 0xd047 1000:d047 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1224 0 0xd04f 1000:d04f far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1225 0 0xd054 1000:d054 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1226 0 0xd061 1000:d061 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1227 0 0xd066 1000:d066 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1228 0 0xd090 1000:d090 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1229 0 0xd09d 1000:d09d far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1230 0 0xd0a2 1000:d0a2 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1231 0 0xd0be 1000:d0be far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1232 0 0xd0cb 1000:d0cb far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1233 0 0xd0d0 1000:d0d0 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1234 0 0xd0d8 1000:d0d8 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1235 0 0xd0dd 1000:d0dd far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1236 0 0xd0ea 1000:d0ea far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1237 0 0xd0ef 1000:d0ef far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1238 0 0xd115 1000:d115 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1239 0 0xd14c 1000:d14c far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1240 0 0xd16c 1000:d16c far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1241 0 0xd177 1000:d177 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1242 0 0xd1b2 1000:d1b2 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1243 0 0xd1be 1000:d1be far-pointer-32 False internal entry-ordinal:71 1000:c4e1 0x00 1 1244 0 0xd1ce 1000:d1ce far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1245 0 0xd1ec 1000:d1ec far-pointer-32 False internal entry-ordinal:33 1000:0002 0x00 1 1246 0 0xd1fd 1000:d1fd far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1247 0 0xd211 1000:d211 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1248 0 0xd225 1000:d225 far-pointer-32 False internal entry-ordinal:70 1000:b476 0x00 1 1249 0 0xd22a 1000:d22a far-pointer-32 False internal entry-ordinal:293 1020:14c1 0x00 1 1250 0 0xd238 1000:d238 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1251 0 0xd24c 1000:d24c far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1252 0 0xd25a 1000:d25a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1253 0 0xd262 1000:d262 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1254 0 0xd267 1000:d267 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1255 0 0xd272 1000:d272 far-pointer-32 False internal entry-ordinal:293 1020:14c1 0x00 1 1256 0 0xd280 1000:d280 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1257 0 0xd294 1000:d294 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1258 0 0xd2a2 1000:d2a2 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1259 0 0xd2aa 1000:d2aa far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1260 0 0xd2af 1000:d2af far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1261 0 0xd2f6 1000:d2f6 far-pointer-32 False internal entry-ordinal:52 1000:9ae0 0x00 1 1262 0 0xd31f 1000:d31f far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1263 0 0xd32d 1000:d32d far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1264 0 0xd332 1000:d332 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1265 0 0xd34c 1000:d34c far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1266 0 0xd354 1000:d354 far-pointer-32 False internal entry-ordinal:293 1020:14c1 0x00 1 1267 0 0xd362 1000:d362 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1268 0 0xd374 1000:d374 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1269 0 0xd37c 1000:d37c far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1270 0 0xd381 1000:d381 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1271 0 0xd3e3 1000:d3e3 far-pointer-32 False internal entry-ordinal:53 1000:9b69 0x00 1 1272 0 0xd3fc 1000:d3fc far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1273 0 0xd41f 1000:d41f far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1274 0 0xd441 1000:d441 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1275 0 0xd460 1000:d460 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1276 0 0xd465 1000:d465 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1277 0 0xd47e 1000:d47e far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1278 0 0xd483 1000:d483 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1279 0 0xd48b 1000:d48b far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1280 0 0xd490 1000:d490 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1281 0 0xd49d 1000:d49d far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1282 0 0xd4a2 1000:d4a2 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1283 0 0xd4b3 1000:d4b3 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1284 0 0xd4c0 1000:d4c0 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1285 0 0xd4d9 1000:d4d9 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1286 0 0xd4fe 1000:d4fe far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1287 0 0xd506 1000:d506 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1288 0 0xd51f 1000:d51f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1289 0 0xd544 1000:d544 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1290 0 0xd54c 1000:d54c far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1291 0 0xd554 1000:d554 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1292 0 0xd55c 1000:d55c far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1293 0 0xd564 1000:d564 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1294 0 0xd575 1000:d575 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1295 0 0xd582 1000:d582 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1296 0 0xd59b 1000:d59b far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1297 0 0xd5ac 1000:d5ac far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1298 0 0xd5c5 1000:d5c5 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1299 0 0xd5d3 1000:d5d3 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1300 0 0xd5db 1000:d5db far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1301 0 0xd5e3 1000:d5e3 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1302 0 0xd5e8 1000:d5e8 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1303 0 0xd694 1000:d694 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1304 0 0xd6d3 1000:d6d3 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1305 0 0xd728 1000:d728 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1306 0 0xd767 1000:d767 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1307 0 0xd7a7 1000:d7a7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1308 0 0xd7b4 1000:d7b4 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1309 0 0xd7b9 1000:d7b9 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1310 0 0xd7d5 1000:d7d5 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1311 0 0xd7e2 1000:d7e2 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1312 0 0xd7e7 1000:d7e7 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1313 0 0xd7ef 1000:d7ef far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1314 0 0xd7f4 1000:d7f4 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1315 0 0xd801 1000:d801 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1316 0 0xd806 1000:d806 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1317 0 0xd82c 1000:d82c far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1318 0 0xd9af 1000:d9af far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1319 0 0xda23 1000:da23 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1320 0 0xda30 1000:da30 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1321 0 0xda3e 1000:da3e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1322 0 0xda43 1000:da43 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1323 0 0xda6a 1000:da6a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1324 0 0xda77 1000:da77 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1325 0 0xda85 1000:da85 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1326 0 0xda8a 1000:da8a far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1327 0 0xdac9 1000:dac9 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1328 0 0xdad6 1000:dad6 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1329 0 0xdae4 1000:dae4 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1330 0 0xdae9 1000:dae9 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1331 0 0xdb10 1000:db10 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1332 0 0xdb1d 1000:db1d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1333 0 0xdb2b 1000:db2b far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1334 0 0xdb30 1000:db30 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1335 0 0xdb5e 1000:db5e far-pointer-32 False internal entry-ordinal:280 1020:14a4 0x00 1 1336 0 0xdc22 1000:dc22 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1337 0 0xdca0 1000:dca0 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1338 0 0xdcab 1000:dcab far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1339 0 0xdce0 1000:dce0 far-pointer-32 False internal entry-ordinal:58 1000:a604 0x00 1 1340 0 0xdcf0 1000:dcf0 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1341 0 0xdd08 1000:dd08 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1342 0 0xdd78 1000:dd78 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1343 0 0xdda2 1000:dda2 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1344 0 0xddad 1000:ddad far-pointer-32 False internal entry-ordinal:40 1000:bda2 0x00 1 1345 0 0xddd9 1000:ddd9 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1346 0 0xde20 1000:de20 far-pointer-32 False internal entry-ordinal:67 1000:ae6e 0x00 1 1347 0 0xdef8 1000:def8 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1348 0 0xdefd 1000:defd far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1349 0 0xdf02 1000:df02 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1350 0 0xdf2d 1000:df2d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1351 0 0xdf32 1000:df32 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1352 0 0xdf37 1000:df37 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1353 0 0xdf56 1000:df56 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1354 0 0xdf5b 1000:df5b far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1355 0 0xdf74 1000:df74 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1356 0 0xdf79 1000:df79 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1357 0 0xdf81 1000:df81 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1358 0 0xdf86 1000:df86 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1359 0 0xdf93 1000:df93 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1360 0 0xdf98 1000:df98 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1361 0 0xdfb7 1000:dfb7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1362 0 0xdfd4 1000:dfd4 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1363 0 0xdfee 1000:dfee far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1364 0 0xdff6 1000:dff6 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1365 0 0xdffe 1000:dffe far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1366 0 0xe003 1000:e003 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1367 0 0xe1e1 1000:e1e1 far-pointer-32 False internal entry-ordinal:70 1000:b476 0x00 1 1368 0 0xe202 1000:e202 far-pointer-32 False internal entry-ordinal:288 1020:1007 0x00 1 1369 0 0xe215 1000:e215 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1370 0 0xe22e 1000:e22e far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1371 0 0xe233 1000:e233 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1372 0 0xe24f 1000:e24f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1373 0 0xe254 1000:e254 far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1374 0 0xe25c 1000:e25c far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1375 0 0xe261 1000:e261 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1376 0 0xe26e 1000:e26e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1377 0 0xe273 1000:e273 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1378 0 0xe284 1000:e284 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1379 0 0xe2a4 1000:e2a4 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1380 0 0xe2c1 1000:e2c1 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1381 0 0xe2c9 1000:e2c9 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1382 0 0xe2d1 1000:e2d1 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1383 0 0xe2d6 1000:e2d6 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1384 0 0xe2e7 1000:e2e7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1385 0 0xe304 1000:e304 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1386 0 0xe30c 1000:e30c far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1387 0 0xe32d 1000:e32d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1388 0 0xe33e 1000:e33e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1389 0 0xe382 1000:e382 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1390 0 0xe39e 1000:e39e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1391 0 0xe3a3 1000:e3a3 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1392 0 0xe3ab 1000:e3ab far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1393 0 0xe3ce 1000:e3ce far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1394 0 0xe3e7 1000:e3e7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1395 0 0xe3f5 1000:e3f5 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1396 0 0xe3fd 1000:e3fd far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1397 0 0xe417 1000:e417 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1398 0 0xe41f 1000:e41f far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1399 0 0xe430 1000:e430 far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1400 0 0xe435 1000:e435 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1401 0 0xe452 1000:e452 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1402 0 0xe460 1000:e460 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1403 0 0xe4a9 1000:e4a9 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1404 0 0xe4b9 1000:e4b9 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1405 0 0xe4ca 1000:e4ca far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1406 0 0xe4d2 1000:e4d2 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1407 0 0xe4d7 1000:e4d7 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1408 0 0xe516 1000:e516 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1409 0 0xe526 1000:e526 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1410 0 0xe537 1000:e537 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1411 0 0xe53f 1000:e53f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1412 0 0xe544 1000:e544 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1413 0 0xe599 1000:e599 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1414 0 0xe5a7 1000:e5a7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1415 0 0xe5c2 1000:e5c2 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1416 0 0xe5d0 1000:e5d0 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1417 0 0xe5d8 1000:e5d8 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1418 0 0xe5f3 1000:e5f3 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1419 0 0xe5fb 1000:e5fb far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1420 0 0xe603 1000:e603 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1421 0 0xe608 1000:e608 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1422 0 0xe62f 1000:e62f far-pointer-32 False internal entry-ordinal:288 1020:1007 0x00 1 1423 0 0xe648 1000:e648 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1424 0 0xe659 1000:e659 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1425 0 0xe65e 1000:e65e far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1426 0 0xe687 1000:e687 far-pointer-32 False internal entry-ordinal:39 1000:bc36 0x00 1 1427 0 0xe690 1000:e690 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1428 0 0xe6a4 1000:e6a4 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1429 0 0xe6b5 1000:e6b5 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1430 0 0xe6ba 1000:e6ba far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1431 0 0xe6d9 1000:e6d9 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1432 0 0xe6e7 1000:e6e7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1433 0 0xe6f8 1000:e6f8 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1434 0 0xe706 1000:e706 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1435 0 0xe717 1000:e717 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1436 0 0xe71f 1000:e71f far-pointer-32 False internal entry-ordinal:285 1020:0feb 0x00 1 1437 0 0xe727 1000:e727 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1438 0 0xe72c 1000:e72c far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1439 0 0xe73d 1000:e73d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1440 0 0xe74b 1000:e74b far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1441 0 0xe75c 1000:e75c far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1442 0 0xe76a 1000:e76a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1443 0 0xe77b 1000:e77b far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1444 0 0xe783 1000:e783 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1445 0 0xe78b 1000:e78b far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1446 0 0xe790 1000:e790 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1447 0 0xe82d 1000:e82d far-pointer-32 False internal entry-ordinal:67 1000:ae6e 0x00 1 1448 0 0xe88d 1000:e88d far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1449 0 0xe89a 1000:e89a far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1450 0 0xe89f 1000:e89f far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1451 0 0xe8b8 1000:e8b8 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1452 0 0xe8c5 1000:e8c5 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1453 0 0xe8ca 1000:e8ca far-pointer-32 False internal entry-ordinal:291 1020:0ff1 0x00 1 1454 0 0xe8d2 1000:e8d2 far-pointer-32 False internal entry-ordinal:284 1020:0fe5 0x00 1 1455 0 0xe8d7 1000:e8d7 far-pointer-32 False internal entry-ordinal:292 1020:10be 0x00 1 1456 0 0xe8e4 1000:e8e4 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1457 0 0xe8e9 1000:e8e9 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1458 0 0xe91b 1000:e91b far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1459 0 0xe942 1000:e942 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1460 0 0xe947 1000:e947 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1461 0 0xe94f 1000:e94f far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1462 0 0xe954 1000:e954 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1463 0 0xe982 1000:e982 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1464 0 0xe9a9 1000:e9a9 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1465 0 0xe9ae 1000:e9ae far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1466 0 0xe9b6 1000:e9b6 far-pointer-32 False internal entry-ordinal:287 1020:0ffd 0x00 1 1467 0 0xe9bb 1000:e9bb far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1468 0 0xea32 1000:ea32 far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1469 0 0xea7f 1000:ea7f far-pointer-32 False internal entry-ordinal:56 1000:9f73 0x00 1 1470 0 0xea9d 1000:ea9d far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1471 0 0xeb21 1000:eb21 far-pointer-32 False internal entry-ordinal:43 1000:7e12 0x00 1 1472 0 0xeb6b 1000:eb6b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1473 0 0xeb97 1000:eb97 far-pointer-32 False internal entry-ordinal:85 1008:0e08 0x00 1 1474 0 0xeba6 1000:eba6 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1475 0 0xebbc 1000:ebbc far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1476 0 0xebcb 1000:ebcb far-pointer-32 False internal entry-ordinal:85 1008:0e08 0x00 1 1477 0 0xebda 1000:ebda far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1478 0 0xec0e 1000:ec0e far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1479 0 0xec1f 1000:ec1f far-pointer-32 False internal entry-ordinal:85 1008:0e08 0x00 1 1480 0 0xec2e 1000:ec2e far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1481 0 0xec8f 1000:ec8f far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1482 0 0xec9d 1000:ec9d far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1483 0 0xeca2 1000:eca2 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1484 0 0xecbc 1000:ecbc far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1485 0 0xecc7 1000:ecc7 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1486 0 0xeccc 1000:eccc far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1487 0 0xed09 1000:ed09 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1488 0 0xed17 1000:ed17 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1489 0 0xed1c 1000:ed1c far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1490 0 0xed36 1000:ed36 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1491 0 0xed44 1000:ed44 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1492 0 0xed49 1000:ed49 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1493 0 0xed86 1000:ed86 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1494 0 0xed94 1000:ed94 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1495 0 0xed99 1000:ed99 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1496 0 0xedb3 1000:edb3 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1497 0 0xedc1 1000:edc1 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1498 0 0xedc6 1000:edc6 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1499 0 0xee03 1000:ee03 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1500 0 0xee11 1000:ee11 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1501 0 0xee16 1000:ee16 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1502 0 0xee30 1000:ee30 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1503 0 0xee3e 1000:ee3e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1504 0 0xee43 1000:ee43 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1505 0 0xee80 1000:ee80 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1506 0 0xee8e 1000:ee8e far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1507 0 0xee93 1000:ee93 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1508 0 0xeead 1000:eead far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1509 0 0xeebb 1000:eebb far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1510 0 0xeec0 1000:eec0 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1511 0 0xeefd 1000:eefd far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1512 0 0xef0b 1000:ef0b far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1513 0 0xef10 1000:ef10 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1514 0 0xef2a 1000:ef2a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1515 0 0xef38 1000:ef38 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1516 0 0xef3d 1000:ef3d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1517 0 0xef7a 1000:ef7a far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1518 0 0xef88 1000:ef88 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1519 0 0xef8d 1000:ef8d far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1520 0 0xefa7 1000:efa7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1521 0 0xefb5 1000:efb5 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1522 0 0xefba 1000:efba far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1523 0 0xeff7 1000:eff7 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1524 0 0xf005 1000:f005 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1525 0 0xf00a 1000:f00a far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1526 0 0xf024 1000:f024 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1527 0 0xf032 1000:f032 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1528 0 0xf037 1000:f037 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1529 0 0xf074 1000:f074 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1530 0 0xf082 1000:f082 far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1531 0 0xf087 1000:f087 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1532 0 0xf0a1 1000:f0a1 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1533 0 0xf0af 1000:f0af far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1534 0 0xf0b4 1000:f0b4 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1535 0 0xf107 1000:f107 far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1536 0 0xf10d 1000:f10d far-pointer-32 False internal entry-ordinal:54 1000:9bca 0x00 1 1537 0 0xf114 1000:f114 far-pointer-32 False internal entry-ordinal:73 1008:0002 0x00 1 1538 0 0xf15a 1000:f15a far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1539 0 0xf188 1000:f188 far-pointer-32 False internal entry-ordinal:47 1000:6f27 0x00 1 1540 0 0xf1d8 1000:f1d8 far-pointer-32 False internal entry-ordinal:57 1000:a38e 0x00 1 1541 0 0xf224 1000:f224 far-pointer-32 False internal entry-ordinal:67 1000:ae6e 0x00 1 1542 0 0xf28c 1000:f28c far-pointer-32 False internal entry-ordinal:44 1000:c36b 0x00 1 1543 0 0xf2cf 1000:f2cf far-pointer-32 False internal entry-ordinal:57 1000:a38e 0x00 1 1544 0 0xf2f1 1000:f2f1 far-pointer-32 False internal entry-ordinal:44 1000:c36b 0x00 1 1545 0 0xf30a 1000:f30a far-pointer-32 False internal entry-ordinal:37 1000:c79c 0x00 1 1546 0 0xf325 1000:f325 far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1547 0 0xf32f 1000:f32f far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1548 0 0xf335 1000:f335 far-pointer-32 False internal entry-ordinal:55 1000:9e85 0x00 1 1549 0 0xf341 1000:f341 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1550 0 0xf356 1000:f356 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1551 0 0xf368 1000:f368 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1552 0 0xf377 1000:f377 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1553 0 0xf381 1000:f381 far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1554 0 0xf38b 1000:f38b far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1555 0 0xf3a3 1000:f3a3 far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1556 0 0xf3ad 1000:f3ad far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1557 0 0xf3f6 1000:f3f6 far-pointer-32 False internal entry-ordinal:57 1000:a38e 0x00 1 1558 0 0xf412 1000:f412 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1559 0 0xf42e 1000:f42e far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 1 1560 0 0xf43c 1000:f43c far-pointer-32 False internal entry-ordinal:286 1020:0ff7 0x00 1 1561 0 0xf441 1000:f441 far-pointer-32 False internal entry-ordinal:290 1020:1017 0x00 1 1562 0 0xf47f 1000:f47f far-pointer-32 False internal entry-ordinal:45 1000:c426 0x00 1 1563 0 0xf489 1000:f489 far-pointer-32 False internal entry-ordinal:66 1000:bdde 0x00 1 1564 0 0xf4c4 1000:f4c4 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1565 0 0xf4dd 1000:f4dd far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1566 0 0xf4eb 1000:f4eb far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1567 0 0xf508 1000:f508 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1568 0 0xf521 1000:f521 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1569 0 0xf532 1000:f532 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1570 0 0xf54e 1000:f54e far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1571 0 0xf55c 1000:f55c far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1572 0 0xf570 1000:f570 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1573 0 0xf579 1000:f579 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1574 0 0xf592 1000:f592 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1575 0 0xf59f 1000:f59f far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1576 0 0xf5b8 1000:f5b8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1577 0 0xf5c5 1000:f5c5 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1578 0 0xf5d6 1000:f5d6 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1579 0 0xf5e8 1000:f5e8 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1580 0 0xf5f1 1000:f5f1 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1581 0 0xf5f9 1000:f5f9 far-pointer-32 False internal entry-ordinal:42 1000:b30b 0x00 1 1582 0 0xf609 1000:f609 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1583 0 0xf612 1000:f612 far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1584 0 0xf61a 1000:f61a far-pointer-32 False internal entry-ordinal:41 1000:b3f3 0x00 1 1585 0 0xf62b 1000:f62b far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1586 0 0xf642 1000:f642 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1587 0 0xf656 1000:f656 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1588 0 0xf664 1000:f664 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1589 0 0xf6ae 1000:f6ae far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1590 0 0xf6d7 1000:f6d7 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1591 0 0xf71d 1000:f71d far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1592 0 0xf746 1000:f746 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1593 0 0xf755 1000:f755 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1594 0 0xf766 1000:f766 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1595 0 0xf77d 1000:f77d far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1596 0 0xf791 1000:f791 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1597 0 0xf79f 1000:f79f far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1598 0 0xf7bc 1000:f7bc far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1599 0 0xf7ce 1000:f7ce far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1600 0 0xf7e0 1000:f7e0 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1601 0 0xf7f2 1000:f7f2 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1602 0 0xf80c 1000:f80c far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1603 0 0xf81e 1000:f81e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1604 0 0xf830 1000:f830 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1605 0 0xf842 1000:f842 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1606 0 0xf85c 1000:f85c far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1607 0 0xf86e 1000:f86e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1608 0 0xf880 1000:f880 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1609 0 0xf892 1000:f892 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1610 0 0xf8ab 1000:f8ab far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 1 1611 0 0xf8bd 1000:f8bd far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1612 0 0xf8cf 1000:f8cf far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1613 0 0xf8e1 1000:f8e1 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1614 0 0xf8f0 1000:f8f0 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1615 0 0xf901 1000:f901 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1616 0 0xf915 1000:f915 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1617 0 0xf929 1000:f929 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1618 0 0xf937 1000:f937 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1619 0 0xf94b 1000:f94b far-pointer-32 False internal entry-ordinal:84 1008:0dbd 0x00 1 1620 0 0xf95c 1000:f95c far-pointer-32 False internal entry-ordinal:84 1008:0dbd 0x00 1 1621 0 0xf96b 1000:f96b far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1622 0 0xf97c 1000:f97c far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1623 0 0xf99d 1000:f99d far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1624 0 0xf9a8 1000:f9a8 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 1625 0 0xf9b3 1000:f9b3 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 1 1626 0 0xf9c3 1000:f9c3 far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 1 1627 0 0xf9d2 1000:f9d2 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1628 0 0xf9e0 1000:f9e0 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1629 0 0xfa01 1000:fa01 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1630 0 0xfa20 1000:fa20 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1631 0 0xfa2c 1000:fa2c far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1632 0 0xfa3d 1000:fa3d far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1633 0 0xfa5e 1000:fa5e far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1634 0 0xfa8e 1000:fa8e far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1635 0 0xfaa2 1000:faa2 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1636 0 0xfab6 1000:fab6 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1637 0 0xfad1 1000:fad1 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1638 0 0xfae5 1000:fae5 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1639 0 0xfb09 1000:fb09 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1640 0 0xfb1d 1000:fb1d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1641 0 0xfb31 1000:fb31 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1642 0 0xfb45 1000:fb45 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1643 0 0xfb59 1000:fb59 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1644 0 0xfb7a 1000:fb7a far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 1 1645 0 0xfb8e 1000:fb8e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 1 1646 0 0xfba4 1000:fba4 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1647 0 0xfbc3 1000:fbc3 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 1 1648 0 0xfbce 1000:fbce far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1649 0 0xfbd9 1000:fbd9 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 1 1650 0 0xfbe1 1000:fbe1 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 1 1651 0 0xfbe9 1000:fbe9 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 1652 0 0xfbf1 1000:fbf1 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 1 1653 0 0xfc00 1000:fc00 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1654 0 0xfc68 1000:fc68 far-pointer-32 False internal entry-ordinal:48 1000:7440 0x00 1 1655 0 0xfc89 1000:fc89 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1656 0 0xfc9c 1000:fc9c far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1657 0 0xfcac 1000:fcac far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1658 0 0xfcbb 1000:fcbb far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1659 0 0xfcf9 1000:fcf9 far-pointer-32 False internal entry-ordinal:60 1000:a72c 0x00 1 1660 0 0xfcff 1000:fcff far-pointer-32 False internal entry-ordinal:65 1000:acc2 0x00 1 1661 0 0xfd05 1000:fd05 far-pointer-32 False internal entry-ordinal:58 1000:a604 0x00 1 1662 0 0xfd0b 1000:fd0b far-pointer-32 False internal entry-ordinal:55 1000:9e85 0x00 1 1663 0 0xfd17 1000:fd17 far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 1 1664 0 0xfd2c 1000:fd2c far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 1 1665 0 0xfd3e 1000:fd3e far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 1 1666 0 0xfd4d 1000:fd4d far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 1 1667 0 0xfd5b 1000:fd5b far-pointer-32 False internal entry-ordinal:50 1000:99f0 0x00 1 1668 0 0xfd60 1000:fd60 far-pointer-32 False internal entry-ordinal:75 1008:00e2 0x00 1 1669 0 0xfd86 1000:fd86 far-pointer-32 False import-ordinal KERNEL.ordinal:91 KERNEL 91 0x01 1 1670 0 0xfd8b 1000:fd8b far-pointer-32 False internal entry-ordinal:256 1020:0002 0x00 1 1671 0 0xfd90 1000:fd90 far-pointer-32 False internal entry-ordinal:132 1008:298a 0x00 1 1672 0 0xfd95 1000:fd95 far-pointer-32 False internal entry-ordinal:109 1008:2554 0x00 1 1673 0 0xfd9a 1000:fd9a far-pointer-32 False internal entry-ordinal:98 1010:0472 0x00 1 1674 0 0xfd9f 1000:fd9f far-pointer-32 False internal entry-ordinal:91 1008:15c2 0x00 1 1675 0 0xfda4 1000:fda4 far-pointer-32 False internal entry-ordinal:86 1008:11b8 0x00 1 1676 0 0xfda9 1000:fda9 far-pointer-32 False internal entry-ordinal:72 1008:0f27 0x00 1 1677 0 0xfdb1 1000:fdb1 far-pointer-32 False import-ordinal KERNEL.ordinal:3 KERNEL 3 0x01 1 1678 0 0xfe17 1000:fe17 far-pointer-32 False internal entry-ordinal:190 1018:1a61 0x00 1 1679 0 0xfe36 1000:fe36 far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 2 1 0 0x0018 1008:0018 far-pointer-32 False internal entry-ordinal:89 1008:1131 0x00 2 2 0 0x002b 1008:002b far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 3 0 0x008b 1008:008b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 2 4 0 0x009b 1008:009b far-pointer-32 False import-ordinal GDI.ordinal:360 GDI 360 0x01 2 5 0 0x00a3 1008:00a3 far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 2 6 0 0x00ae 1008:00ae far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 2 7 0 0x00bb 1008:00bb far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 2 8 0 0x00c1 1008:00c1 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 2 9 0 0x00cc 1008:00cc far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 2 10 0 0x00da 1008:00da far-pointer-32 False internal entry-ordinal:268 1020:0147 0x00 2 11 0 0x00f4 1008:00f4 far-pointer-32 False import-ordinal USER.ordinal:109 USER 109 0x01 2 12 0 0x0122 1008:0122 far-pointer-32 False import-ordinal USER.ordinal:113 USER 113 0x01 2 13 0 0x012c 1008:012c far-pointer-32 False import-ordinal USER.ordinal:114 USER 114 0x01 2 14 0 0x0234 1008:0234 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 15 0 0x024f 1008:024f far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 16 0 0x028d 1008:028d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 17 0 0x02a8 1008:02a8 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 18 0 0x02cb 1008:02cb far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 19 0 0x02ec 1008:02ec far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 20 0 0x0327 1008:0327 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 21 0 0x0342 1008:0342 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 22 0 0x0380 1008:0380 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 23 0 0x039b 1008:039b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 24 0 0x03be 1008:03be far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 25 0 0x03df 1008:03df far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 26 0 0x0404 1008:0404 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 27 0 0x041f 1008:041f far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 28 0 0x044e 1008:044e far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 29 0 0x0453 1008:0453 far-pointer-32 False internal entry-ordinal:289 1020:100b 0x00 2 30 0 0x04a3 1008:04a3 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 31 0 0x04fa 1008:04fa far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 32 0 0x0551 1008:0551 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 33 0 0x05a8 1008:05a8 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 34 0 0x064a 1008:064a far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 35 0 0x0665 1008:0665 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 36 0 0x0680 1008:0680 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 37 0 0x069b 1008:069b far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 38 0 0x07be 1008:07be far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 39 0 0x07c9 1008:07c9 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 40 0 0x07d8 1008:07d8 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 41 0 0x07e6 1008:07e6 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 42 0 0x0809 1008:0809 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 43 0 0x0814 1008:0814 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 44 0 0x081f 1008:081f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 45 0 0x0827 1008:0827 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 46 0 0x082f 1008:082f far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 47 0 0x083f 1008:083f far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 48 0 0x084a 1008:084a far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 49 0 0x0859 1008:0859 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 50 0 0x0868 1008:0868 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 51 0 0x088d 1008:088d far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 52 0 0x0898 1008:0898 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 53 0 0x08a3 1008:08a3 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 54 0 0x08ab 1008:08ab far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 55 0 0x08b3 1008:08b3 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 56 0 0x08c3 1008:08c3 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 57 0 0x08ce 1008:08ce far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 58 0 0x08dd 1008:08dd far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 59 0 0x08ec 1008:08ec far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 60 0 0x0911 1008:0911 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 61 0 0x091c 1008:091c far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 62 0 0x0927 1008:0927 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 63 0 0x092f 1008:092f far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 64 0 0x0937 1008:0937 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 65 0 0x0947 1008:0947 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 66 0 0x0956 1008:0956 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 67 0 0x097b 1008:097b far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 68 0 0x0986 1008:0986 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 69 0 0x098e 1008:098e far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 70 0 0x099e 1008:099e far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 71 0 0x09a9 1008:09a9 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 72 0 0x09b9 1008:09b9 far-pointer-32 False import-ordinal GDI.ordinal:51 GDI 51 0x01 2 73 0 0x0a73 1008:0a73 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 74 0 0x0a81 1008:0a81 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 75 0 0x0aa3 1008:0aa3 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 76 0 0x0abc 1008:0abc far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 2 77 0 0x0ad3 1008:0ad3 far-pointer-32 False internal entry-ordinal:261 1020:08e6 0x00 2 78 0 0x0b1b 1008:0b1b far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 79 0 0x0b40 1008:0b40 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 80 0 0x0b68 1008:0b68 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 81 0 0x0b73 1008:0b73 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 82 0 0x0b7e 1008:0b7e far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 83 0 0x0b86 1008:0b86 far-pointer-32 False import-ordinal GDI.ordinal:69 GDI 69 0x01 2 84 0 0x0b8e 1008:0b8e far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 85 0 0x0b96 1008:0b96 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 86 0 0x0c7e 1008:0c7e far-pointer-32 False internal entry-ordinal:78 1008:07b6 0x00 2 87 0 0x0c93 1008:0c93 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 2 88 0 0x0ca6 1008:0ca6 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 89 0 0x0cd4 1008:0cd4 far-pointer-32 False internal entry-ordinal:79 1008:0837 0x00 2 90 0 0x0cf0 1008:0cf0 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 91 0 0x0d0e 1008:0d0e far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 2 92 0 0x0d2a 1008:0d2a far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 93 0 0x0d54 1008:0d54 far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 2 94 0 0x0d67 1008:0d67 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 95 0 0x0d8d 1008:0d8d far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 2 96 0 0x0da9 1008:0da9 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 97 0 0x0ddc 1008:0ddc far-pointer-32 False internal entry-ordinal:78 1008:07b6 0x00 2 98 0 0x0def 1008:0def far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 2 99 0 0x0e00 1008:0e00 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 100 0 0x0e1f 1008:0e1f far-pointer-32 False internal entry-ordinal:80 1008:08bb 0x00 2 101 0 0x0e30 1008:0e30 far-pointer-32 False internal entry-ordinal:81 1008:093f 0x00 2 102 0 0x0e3b 1008:0e3b far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 103 0 0x0e46 1008:0e46 far-pointer-32 False import-ordinal GDI.ordinal:52 GDI 52 0x01 2 104 0 0x0e55 1008:0e55 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 105 0 0x0e64 1008:0e64 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 106 0 0x0ed7 1008:0ed7 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 107 0 0x0ef9 1008:0ef9 far-pointer-32 False import-ordinal GDI.ordinal:34 GDI 34 0x01 2 108 0 0x0f04 1008:0f04 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 109 0 0x0f0f 1008:0f0f far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 110 0 0x0f17 1008:0f17 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 111 0 0x0f1f 1008:0f1f far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 112 0 0x0f54 1008:0f54 far-pointer-32 False internal entry-ordinal:281 1020:082e 0x00 2 113 0 0x0f59 1008:0f59 far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 2 114 0 0x0f76 1008:0f76 far-pointer-32 False internal entry-ordinal:281 1020:082e 0x00 2 115 0 0x0f7b 1008:0f7b far-pointer-32 False internal entry-ordinal:264 1020:0a7d 0x00 2 116 0 0x0f81 1008:0f81 far-pointer-32 False internal entry-ordinal:247 1008:2f07 0x00 2 117 0 0x0f91 1008:0f91 far-pointer-32 False internal entry-ordinal:249 1008:2f4d 0x00 2 118 0 0x0fa8 1008:0fa8 far-pointer-32 False import-ordinal KERNEL.ordinal:127 KERNEL 127 0x01 2 119 0 0x0fb9 1008:0fb9 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:401 MMSYSTEM 401 0x01 2 120 0 0x0fd6 1008:0fd6 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:402 MMSYSTEM 402 0x01 2 121 0 0x1012 1008:1012 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:415 MMSYSTEM 415 0x01 2 122 0 0x1062 1008:1062 far-pointer-32 False import-ordinal KERNEL.ordinal:60 KERNEL 60 0x01 2 123 0 0x1068 1008:1068 far-pointer-32 False import-ordinal KERNEL.ordinal:61 KERNEL 61 0x01 2 124 0 0x1080 1008:1080 far-pointer-32 False internal entry-ordinal:96 1008:15c7 0x00 2 125 0 0x1096 1008:1096 far-pointer-32 False import-ordinal KERNEL.ordinal:62 KERNEL 62 0x01 2 126 0 0x10bc 1008:10bc far-pointer-32 False internal entry-ordinal:282 1020:16a5 0x00 2 127 0 0x10c4 1008:10c4 far-pointer-32 False import-ordinal KERNEL.ordinal:19 KERNEL 19 0x01 2 128 0 0x10cc 1008:10cc far-pointer-32 False import-ordinal KERNEL.ordinal:63 KERNEL 63 0x01 2 129 0 0x1100 1008:1100 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:2 MMSYSTEM 2 0x01 2 130 0 0x111d 1008:111d far-pointer-32 False internal entry-ordinal:97 1008:15e7 0x00 2 131 0 0x1165 1008:1165 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:2 MMSYSTEM 2 0x01 2 132 0 0x1178 1008:1178 far-pointer-32 False import-ordinal MMSYSTEM.ordinal:2 MMSYSTEM 2 0x01 2 133 0 0x11ac 1008:11ac far-pointer-32 False import-ordinal MMSYSTEM.ordinal:2 MMSYSTEM 2 0x01 2 134 0 0x11e9 1008:11e9 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 135 0 0x11fd 1008:11fd far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 136 0 0x125d 1008:125d far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 137 0 0x1282 1008:1282 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 138 0 0x12ad 1008:12ad far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 139 0 0x12f8 1008:12f8 far-pointer-32 False import-ordinal GDI.ordinal:360 GDI 360 0x01 2 140 0 0x130f 1008:130f far-pointer-32 False internal entry-ordinal:272 1020:039d 0x00 2 141 0 0x1315 1008:1315 far-pointer-32 False internal entry-ordinal:268 1020:0147 0x00 2 142 0 0x133d 1008:133d far-pointer-32 False import-ordinal KERNEL.ordinal:60 KERNEL 60 0x01 2 143 0 0x134b 1008:134b far-pointer-32 False import-ordinal KERNEL.ordinal:61 KERNEL 61 0x01 2 144 0 0x1356 1008:1356 far-pointer-32 False import-ordinal KERNEL.ordinal:62 KERNEL 62 0x01 2 145 0 0x1372 1008:1372 far-pointer-32 False internal entry-ordinal:272 1020:039d 0x00 2 146 0 0x1386 1008:1386 far-pointer-32 False internal entry-ordinal:272 1020:039d 0x00 2 147 0 0x139d 1008:139d far-pointer-32 False import-ordinal KERNEL.ordinal:19 KERNEL 19 0x01 2 148 0 0x13d6 1008:13d6 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 149 0 0x1404 1008:1404 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 150 0 0x1429 1008:1429 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 151 0 0x1454 1008:1454 far-pointer-32 False internal entry-ordinal:260 1020:08a9 0x00 2 152 0 0x14b4 1008:14b4 far-pointer-32 False import-ordinal KERNEL.ordinal:60 KERNEL 60 0x01 2 153 0 0x14c2 1008:14c2 far-pointer-32 False import-ordinal KERNEL.ordinal:61 KERNEL 61 0x01 2 154 0 0x14cd 1008:14cd far-pointer-32 False import-ordinal KERNEL.ordinal:62 KERNEL 62 0x01 2 155 0 0x14e4 1008:14e4 far-pointer-32 False internal entry-ordinal:259 1020:0891 0x00 2 156 0 0x1512 1008:1512 far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 157 0 0x1529 1008:1529 far-pointer-32 False internal entry-ordinal:259 1020:0891 0x00 2 158 0 0x1533 1008:1533 far-pointer-32 False internal entry-ordinal:94 1008:13a8 0x00 2 159 0 0x1549 1008:1549 far-pointer-32 False import-ordinal GDI.ordinal:53 GDI 53 0x01 2 160 0 0x155a 1008:155a far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 2 161 0 0x1566 1008:1566 far-pointer-32 False import-ordinal GDI.ordinal:150 GDI 150 0x01 2 162 0 0x156e 1008:156e far-pointer-32 False import-ordinal USER.ordinal:283 USER 283 0x01 2 163 0 0x158c 1008:158c far-pointer-32 False import-ordinal GDI.ordinal:442 GDI 442 0x01 2 164 0 0x159c 1008:159c far-pointer-32 False import-ordinal USER.ordinal:282 USER 282 0x01 2 165 0 0x15a4 1008:15a4 far-pointer-32 False import-ordinal GDI.ordinal:68 GDI 68 0x01 2 166 0 0x15ac 1008:15ac far-pointer-32 False import-ordinal KERNEL.ordinal:19 KERNEL 19 0x01 2 167 0 0x15b4 1008:15b4 far-pointer-32 False import-ordinal KERNEL.ordinal:63 KERNEL 63 0x01 2 168 0 0x15d6 1008:15d6 far-pointer-32 False import-ordinal KERNEL.ordinal:15 KERNEL 15 0x01 2 169 0 0x15dc 1008:15dc far-pointer-32 False import-ordinal KERNEL.ordinal:18 KERNEL 18 0x01 2 170 0 0x15f0 1008:15f0 far-pointer-32 False import-ordinal KERNEL.ordinal:21 KERNEL 21 0x01 2 171 0 0x15f7 1008:15f7 far-pointer-32 False import-ordinal KERNEL.ordinal:19 KERNEL 19 0x01 2 172 0 0x15fc 1008:15fc far-pointer-32 False import-ordinal KERNEL.ordinal:17 KERNEL 17 0x01 2 173 0 0x1612 1008:1612 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 2 174 0 0x164a 1008:164a far-pointer-32 False internal entry-ordinal:222 1008:2996 0x00 2 175 0 0x16ac 1008:16ac far-pointer-32 False import-ordinal USER.ordinal:93 USER 93 0x01 2 176 0 0x16c9 1008:16c9 far-pointer-32 False internal entry-ordinal:151 1018:0d9b 0x00 2 177 0 0x16dd 1008:16dd far-pointer-32 False import-ordinal USER.ordinal:37 USER 37 0x01 2 178 0 0x16f3 1008:16f3 far-pointer-32 False import-ordinal USER.ordinal:92 USER 92 0x01 2 179 0 0x1709 1008:1709 far-pointer-32 False import-ordinal USER.ordinal:92 USER 92 0x01 2 180 0 0x1724 1008:1724 far-pointer-32 False import-ordinal USER.ordinal:101 USER 101 0x01 2 181 0 0x178d 1008:178d far-pointer-32 False import-ordinal USER.ordinal:39 USER 39 0x01 2 182 0 0x179b 1008:179b far-pointer-32 False import-ordinal USER.ordinal:66 USER 66 0x01 2 183 0 0x17ab 1008:17ab far-pointer-32 False import-ordinal GDI.ordinal:87 GDI 87 0x01 2 184 0 0x17b1 1008:17b1 far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 185 0 0x17c1 1008:17c1 far-pointer-32 False import-ordinal USER.ordinal:180 USER 180 0x01 2 186 0 0x17c8 1008:17c8 far-pointer-32 False import-ordinal GDI.ordinal:9 GDI 9 0x01 2 187 0 0x17d5 1008:17d5 far-pointer-32 False import-ordinal USER.ordinal:180 USER 180 0x01 2 188 0 0x17dc 1008:17dc far-pointer-32 False import-ordinal GDI.ordinal:1 GDI 1 0x01 2 189 0 0x17ee 1008:17ee far-pointer-32 False import-ordinal GDI.ordinal:45 GDI 45 0x01 2 190 0 0x1803 1008:1803 far-pointer-32 False import-ordinal USER.ordinal:40 USER 40 0x01 2 191 0 0x1812 1008:1812 far-pointer-32 False import-ordinal USER.ordinal:68 USER 68 0x01 2 192 0 0x182b 1008:182b far-pointer-32 False import-ordinal USER.ordinal:163 USER 163 0x01 2 193 0 0x184c 1008:184c far-pointer-32 False import-ordinal USER.ordinal:165 USER 165 0x01 2 194 0 0x1855 1008:1855 far-pointer-32 False import-ordinal USER.ordinal:167 USER 167 0x01 2 195 0 0x185f 1008:185f far-pointer-32 False import-ordinal USER.ordinal:164 USER 164 0x01 2 196 0 0x1882 1008:1882 far-pointer-32 False import-ordinal USER.ordinal:64 USER 64 0x01 2 197 0 0x1896 1008:1896 far-pointer-32 False import-ordinal USER.ordinal:62 USER 62 0x01 2 198 0 0x18b5 1008:18b5 far-pointer-32 False import-ordinal USER.ordinal:64 USER 64 0x01 2 199 0 0x18ca 1008:18ca far-pointer-32 False import-ordinal USER.ordinal:62 USER 62 0x01 2 200 0 0x18e8 1008:18e8 far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 2 201 0 0x194f 1008:194f far-pointer-32 False import-ordinal USER.ordinal:62 USER 62 0x01 2 202 0 0x196c 1008:196c far-pointer-32 False import-ordinal USER.ordinal:62 USER 62 0x01 2 203 0 0x1997 1008:1997 far-pointer-32 False import-ordinal USER.ordinal:61 USER 61 0x01 2 204 0 0x19ac 1008:19ac far-pointer-32 False import-ordinal USER.ordinal:124 USER 124 0x01 2 205 0 0x19ef 1008:19ef far-pointer-32 False internal entry-ordinal:116 1008:18ee 0x00 2 206 0 0x1a77 1008:1a77 far-pointer-32 False import-ordinal GDI.ordinal:33 GDI 33 0x01 2 207 0 0x1ae2 1008:1ae2 far-pointer-32 False internal entry-ordinal:279 1020:16c9 0x00 2 208 0 0x1b00 1008:1b00 far-pointer-32 False import-ordinal USER.ordinal:61 USER 61 0x01 2 209 0 0x1b09 1008:1b09 far-pointer-32 False import-ordinal USER.ordinal:124 USER 124 0x01 2 210 0 0x1b1a 1008:1b1a far-pointer-32 False internal entry-ordinal:110 1008:2442 0x00 2 211 0 0x1bc0 1008:1bc0 far-pointer-32 False import-ordinal USER.ordinal:104 USER 104 0x01 2 212 0 0x1bde 1008:1bde far-pointer-32 False internal entry-ordinal:117 1008:19b7 0x00 2 213 0 0x1bf8 1008:1bf8 far-pointer-32 False internal entry-ordinal:111 1008:1b11 0x00 2 214 0 0x1c0c 1008:1c0c far-pointer-32 False internal entry-ordinal:110 1008:2442 0x00 2 215 0 0x1c23 1008:1c23 far-pointer-32 False import-ordinal USER.ordinal:109 USER 109 0x01 2 216 0 0x1c3a 1008:1c3a far-pointer-32 False import-ordinal USER.ordinal:113 USER 113 0x01 2 217 0 0x1c44 1008:1c44 far-pointer-32 False import-ordinal USER.ordinal:114 USER 114 0x01 2 218 0 0x1c68 1008:1c68 far-pointer-32 False internal entry-ordinal:117 1008:19b7 0x00 2 219 0 0x1c6d 1008:1c6d far-pointer-32 False internal entry-ordinal:113 1008:1c03 0x00 2 220 0 0x1c85 1008:1c85 far-pointer-32 False import-ordinal USER.ordinal:112 USER 112 0x01 2 221 0 0x1c8a 1008:1c8a far-pointer-32 False internal entry-ordinal:113 1008:1c03 0x00 2 222 0 0x1cba 1008:1cba far-pointer-32 False internal entry-ordinal:282 1020:16a5 0x00 2 223 0 0x1cd4 1008:1cd4 far-pointer-32 False internal entry-ordinal:114 1008:1c5f 0x00 2 224 0 0x1cef 1008:1cef far-pointer-32 False internal entry-ordinal:112 1008:1be9 0x00 2 225 0 0x1d1d 1008:1d1d far-pointer-32 False internal entry-ordinal:112 1008:1be9 0x00 2 226 0 0x1d5e 1008:1d5e far-pointer-32 False internal entry-ordinal:112 1008:1be9 0x00 2 227 0 0x1d63 1008:1d63 far-pointer-32 False internal entry-ordinal:117 1008:19b7 0x00 2 228 0 0x1d88 1008:1d88 far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 229 0 0x1da5 1008:1da5 far-pointer-32 False internal entry-ordinal:279 1020:16c9 0x00 2 230 0 0x1db8 1008:1db8 far-pointer-32 False import-ordinal USER.ordinal:156 USER 156 0x01 2 231 0 0x1dc6 1008:1dc6 far-pointer-32 False import-ordinal USER.ordinal:155 USER 155 0x01 2 232 0 0x1e75 1008:1e75 far-pointer-32 False import-ordinal GDI.ordinal:33 GDI 33 0x01 2 233 0 0x1f5e 1008:1f5e far-pointer-32 False internal entry-ordinal:116 1008:18ee 0x00 2 234 0 0x1ffb 1008:1ffb far-pointer-32 False import-ordinal GDI.ordinal:93 GDI 93 0x01 2 235 0 0x2019 1008:2019 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 236 0 0x2025 1008:2025 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 237 0 0x2039 1008:2039 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 238 0 0x204c 1008:204c far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 239 0 0x2058 1008:2058 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 240 0 0x2062 1008:2062 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 241 0 0x207a 1008:207a far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 242 0 0x20a1 1008:20a1 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 243 0 0x20ad 1008:20ad far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 244 0 0x20cb 1008:20cb far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 245 0 0x20d5 1008:20d5 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 246 0 0x20e1 1008:20e1 far-pointer-32 False import-ordinal USER.ordinal:179 USER 179 0x01 2 247 0 0x2162 1008:2162 far-pointer-32 False import-ordinal USER.ordinal:106 USER 106 0x01 2 248 0 0x21f6 1008:21f6 far-pointer-32 False internal entry-ordinal:268 1020:0147 0x00 2 249 0 0x220e 1008:220e far-pointer-32 False import-ordinal USER.ordinal:6 USER 6 0x01 2 250 0 0x22e1 1008:22e1 far-pointer-32 False import-ordinal USER.ordinal:107 USER 107 0x01 2 251 0 0x231b 1008:231b far-pointer-32 False internal entry-ordinal:111 1008:1b11 0x00 2 252 0 0x2329 1008:2329 far-pointer-32 False internal entry-ordinal:113 1008:1c03 0x00 2 253 0 0x2354 1008:2354 far-pointer-32 False internal entry-ordinal:115 1008:1cc6 0x00 2 254 0 0x239f 1008:239f offset-16 False internal entry-ordinal:121 1008:233c 0x00 2 255 0 0x23a2 1008:23a2 selector-16 False internal entry-ordinal:121 1008:233c 0x00 2 256 0 0x23c2 1008:23c2 offset-16 False internal entry-ordinal:120 1008:22fc 0x00 2 257 0 0x23c5 1008:23c5 selector-16 False internal entry-ordinal:120 1008:22fc 0x00 2 258 0 0x23d0 1008:23d0 offset-16 False internal entry-ordinal:120 1008:22fc 0x00 2 259 0 0x23d3 1008:23d3 selector-16 False internal entry-ordinal:120 1008:22fc 0x00 2 260 0 0x23de 1008:23de offset-16 False internal entry-ordinal:122 1008:2374 0x00 2 261 0 0x23e1 1008:23e1 selector-16 False internal entry-ordinal:122 1008:2374 0x00 2 262 0 0x2429 1008:2429 offset-16 False internal entry-ordinal:123 1008:238b 0x00 2 263 0 0x242c 1008:242c selector-16 False internal entry-ordinal:123 1008:238b 0x00 2 264 0 0x2483 1008:2483 far-pointer-32 False import-ordinal USER.ordinal:41 USER 41 0x01 2 265 0 0x2493 1008:2493 far-pointer-32 False import-ordinal USER.ordinal:42 USER 42 0x01 2 266 0 0x249c 1008:249c far-pointer-32 False import-ordinal USER.ordinal:124 USER 124 0x01 2 267 0 0x24f1 1008:24f1 far-pointer-32 False import-ordinal USER.ordinal:421 USER 421 0x01 2 268 0 0x2500 1008:2500 far-pointer-32 False import-ordinal USER.ordinal:37 USER 37 0x01 2 269 0 0x250c 1008:250c far-pointer-32 False import-ordinal USER.ordinal:156 USER 156 0x01 2 270 0 0x2519 1008:2519 far-pointer-32 False import-ordinal USER.ordinal:155 USER 155 0x01 2 271 0 0x2531 1008:2531 far-pointer-32 False import-ordinal USER.ordinal:108 USER 108 0x01 2 272 0 0x253f 1008:253f far-pointer-32 False import-ordinal USER.ordinal:113 USER 113 0x01 2 273 0 0x2549 1008:2549 far-pointer-32 False import-ordinal USER.ordinal:114 USER 114 0x01 2 274 0 0x256f 1008:256f far-pointer-32 False import-ordinal USER.ordinal:174 USER 174 0x01 2 275 0 0x2581 1008:2581 far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 2 276 0 0x2594 1008:2594 far-pointer-32 False import-ordinal USER.ordinal:57 USER 57 0x01 2 277 0 0x259e 1008:259e far-pointer-32 False internal entry-ordinal:118 1008:23fd 0x00 2 278 0 0x25a8 1008:25a8 far-pointer-32 False internal entry-ordinal:274 1020:0527 0x00 2 279 0 0x25ad 1008:25ad far-pointer-32 False internal entry-ordinal:271 1020:038f 0x00 2 280 0 0x25b7 1008:25b7 far-pointer-32 False internal entry-ordinal:118 1008:23fd 0x00 2 281 0 0x25c1 1008:25c1 far-pointer-32 False internal entry-ordinal:275 1020:052c 0x00 2 282 0 0x25c6 1008:25c6 far-pointer-32 False internal entry-ordinal:271 1020:038f 0x00 2 283 0 0x25d8 1008:25d8 far-pointer-32 False import-ordinal KERNEL.ordinal:49 KERNEL 49 0x01 2 284 0 0x25e7 1008:25e7 far-pointer-32 False import-ordinal KEYBOARD.ordinal:6 KEYBOARD 6 0x01 2 285 0 0x25fa 1008:25fa offset-16 False internal entry-ordinal:124 1008:24a5 0x00 2 286 0 0x25fd 1008:25fd selector-16 False internal entry-ordinal:124 1008:24a5 0x00 2 287 0 0x2631 1008:2631 far-pointer-32 False import-ordinal KEYBOARD.ordinal:5 KEYBOARD 5 0x01 2 288 0 0x26c2 1008:26c2 far-pointer-32 False internal entry-ordinal:252 1008:2fe3 0x00 2 289 0 0x26de 1008:26de far-pointer-32 False internal entry-ordinal:252 1008:2fe3 0x00 2 290 0 0x270b 1008:270b far-pointer-32 False internal entry-ordinal:251 1008:2fbb 0x00 2 291 0 0x2724 1008:2724 far-pointer-32 False internal entry-ordinal:244 1008:2ea9 0x00 2 292 0 0x2765 1008:2765 far-pointer-32 False internal entry-ordinal:251 1008:2fbb 0x00 2 293 0 0x2777 1008:2777 far-pointer-32 False internal entry-ordinal:251 1008:2fbb 0x00 2 294 0 0x27cc 1008:27cc far-pointer-32 False internal entry-ordinal:247 1008:2f07 0x00 2 295 0 0x27e8 1008:27e8 far-pointer-32 False internal entry-ordinal:247 1008:2f07 0x00 2 296 0 0x2805 1008:2805 far-pointer-32 False internal entry-ordinal:247 1008:2f07 0x00 2 297 0 0x2828 1008:2828 far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 2 298 0 0x2830 1008:2830 far-pointer-32 False import-ordinal KERNEL.ordinal:131 KERNEL 131 0x01 2 299 0 0x2853 1008:2853 far-pointer-32 False internal entry-ordinal:250 1008:2f70 0x00 2 300 0 0x2884 1008:2884 far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 2 301 0 0x28a9 1008:28a9 far-pointer-32 False internal entry-ordinal:273 1020:03cb 0x00 2 302 0 0x28b0 1008:28b0 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 2 303 0 0x28bf 1008:28bf far-pointer-32 False internal entry-ordinal:235 1008:2d99 0x00 2 304 0 0x28e0 1008:28e0 far-pointer-32 False internal entry-ordinal:131 1008:295c 0x00 2 305 0 0x28f9 1008:28f9 far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 2 306 0 0x290c 1008:290c far-pointer-32 False internal entry-ordinal:273 1020:03cb 0x00 2 307 0 0x2916 1008:2916 far-pointer-32 False internal entry-ordinal:130 1008:2932 0x00 2 308 0 0x2923 1008:2923 far-pointer-32 False internal entry-ordinal:237 1008:2dcd 0x00 2 309 0 0x292a 1008:292a far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 2 310 0 0x2938 1008:2938 far-pointer-32 False internal entry-ordinal:273 1020:03cb 0x00 2 311 0 0x294b 1008:294b far-pointer-32 False import-ordinal MMSYSTEM.ordinal:603 MMSYSTEM 603 0x01 2 312 0 0x2963 1008:2963 far-pointer-32 False internal entry-ordinal:273 1020:03cb 0x00 2 313 0 0x297c 1008:297c far-pointer-32 False import-ordinal MMTIMER.ordinal:1 MMTIMER 1 0x01 2 314 0 0x2990 1008:2990 far-pointer-32 False internal entry-ordinal:273 1020:03cb 0x00 2 315 0 0x299e 1008:299e far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 2 316 0 0x29b3 1008:29b3 far-pointer-32 False internal entry-ordinal:133 1018:0341 0x00 2 317 0 0x29bd 1008:29bd far-pointer-32 False internal entry-ordinal:144 1018:0627 0x00 2 318 0 0x29ce 1008:29ce far-pointer-32 False internal entry-ordinal:254 1008:302c 0x00 2 319 0 0x2a26 1008:2a26 far-pointer-32 False internal entry-ordinal:255 1008:3099 0x00 2 320 0 0x2a33 1008:2a33 far-pointer-32 False internal entry-ordinal:134 1018:03ff 0x00 2 321 0 0x2a3a 1008:2a3a far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 2 322 0 0x2a5a 1008:2a5a far-pointer-32 False internal entry-ordinal:144 1018:0627 0x00 2 323 0 0x2a64 1008:2a64 far-pointer-32 False internal entry-ordinal:142 1018:05f3 0x00 2 324 0 0x2afb 1008:2afb far-pointer-32 False internal entry-ordinal:144 1018:0627 0x00 2 325 0 0x2b05 1008:2b05 far-pointer-32 False internal entry-ordinal:142 1018:05f3 0x00 2 326 0 0x2bc6 1008:2bc6 far-pointer-32 False internal entry-ordinal:143 1018:060d 0x00 2 327 0 0x2be1 1008:2be1 offset-16 False internal entry-ordinal:234 1008:2bb1 0x00 2 328 0 0x2be4 1008:2be4 selector-16 False internal entry-ordinal:234 1008:2bb1 0x00 2 329 0 0x2bee 1008:2bee far-pointer-32 False internal entry-ordinal:141 1018:085a 0x00 2 330 0 0x2bfd 1008:2bfd far-pointer-32 False import-ordinal USER.ordinal:88 USER 88 0x01 2 331 0 0x2c93 1008:2c93 far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 2 332 0 0x2c9f 1008:2c9f far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 2 333 0 0x2d2f 1008:2d2f far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 2 334 0 0x2d5b 1008:2d5b far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 2 335 0 0x2d7c 1008:2d7c far-pointer-32 False internal entry-ordinal:296 1020:16e1 0x00 2 336 0 0x2d90 1008:2d90 far-pointer-32 False internal entry-ordinal:257 1020:005d 0x00 2 337 0 0x2da1 1008:2da1 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 2 338 0 0x2dd5 1008:2dd5 far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 2 339 0 0x2e05 1008:2e05 far-pointer-32 False internal entry-ordinal:240 1008:2de0 0x00 2 340 0 0x2e12 1008:2e12 far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 341 0 0x2e3f 1008:2e3f far-pointer-32 False internal entry-ordinal:240 1008:2de0 0x00 2 342 0 0x2e5b 1008:2e5b far-pointer-32 False internal entry-ordinal:268 1020:0147 0x00 2 343 0 0x2e7c 1008:2e7c far-pointer-32 False internal entry-ordinal:241 1008:2dff 0x00 2 344 0 0x2e81 1008:2e81 offset-16 False internal entry-ordinal:242 1008:2e22 0x00 2 345 0 0x2e84 1008:2e84 selector-16 False internal entry-ordinal:242 1008:2e22 0x00 2 346 0 0x3054 1008:3054 far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 2 347 0 0x3060 1008:3060 far-pointer-32 False internal entry-ordinal:267 1020:012d 0x00 2 348 0 0x3082 1008:3082 far-pointer-32 False internal entry-ordinal:245 1008:2ec0 0x00 2 349 0 0x30b3 1008:30b3 far-pointer-32 False internal entry-ordinal:243 1008:2e92 0x00 2 350 0 0x30ba 1008:30ba far-pointer-32 False internal entry-ordinal:268 1020:0147 0x00 3 1 0 0x0013 1010:0013 far-pointer-32 False import-ordinal KERNEL.ordinal:96 KERNEL 96 0x01 3 2 0 0x008f 1010:008f far-pointer-32 False import-ordinal KERNEL.ordinal:36 KERNEL 36 0x01 3 3 0 0x0099 1010:0099 far-pointer-32 False internal entry-ordinal:102 1010:0002 0x00 3 4 0 0x00c6 1010:00c6 far-pointer-32 False internal entry-ordinal:125 1008:2643 0x00 3 5 0 0x00e1 1010:00e1 far-pointer-32 False import-ordinal KERNEL.ordinal:134 KERNEL 134 0x01 3 6 0 0x00f7 1010:00f7 far-pointer-32 False internal entry-ordinal:125 1008:2643 0x00 3 7 0 0x0112 1010:0112 far-pointer-32 False import-ordinal KERNEL.ordinal:135 KERNEL 135 0x01 3 8 0 0x0128 1010:0128 far-pointer-32 False internal entry-ordinal:125 1008:2643 0x00 3 9 0 0x0140 1010:0140 far-pointer-32 False import-ordinal KERNEL.ordinal:47 KERNEL 47 0x01 3 10 0 0x014f 1010:014f far-pointer-32 False import-ordinal KERNEL.ordinal:49 KERNEL 49 0x01 3 11 0 0x016c 1010:016c far-pointer-32 False internal entry-ordinal:126 1008:26b0 0x00 3 12 0 0x0182 1010:0182 far-pointer-32 False internal entry-ordinal:125 1008:2643 0x00 3 13 0 0x01a3 1010:01a3 far-pointer-32 False internal entry-ordinal:127 1008:2819 0x00 3 14 0 0x01aa 1010:01aa far-pointer-32 False internal entry-ordinal:125 1008:2643 0x00 3 15 0 0x01eb 1010:01eb far-pointer-32 False internal entry-ordinal:103 1010:00a2 0x00 3 16 0 0x01f9 1010:01f9 far-pointer-32 False import-ordinal KERNEL.ordinal:95 KERNEL 95 0x01 3 17 0 0x020d 1010:020d far-pointer-32 False import-ordinal KERNEL.ordinal:107 KERNEL 107 0x01 3 18 0 0x0217 1010:0217 far-pointer-32 False import-ordinal KERNEL.ordinal:95 KERNEL 95 0x01 3 19 0 0x0221 1010:0221 far-pointer-32 False import-ordinal KERNEL.ordinal:107 KERNEL 107 0x01 3 20 0 0x0239 1010:0239 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 21 0 0x024e 1010:024e far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 22 0 0x0263 1010:0263 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 23 0 0x0278 1010:0278 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 24 0 0x028d 1010:028d far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 25 0 0x02a2 1010:02a2 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 26 0 0x02b7 1010:02b7 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 27 0 0x02cc 1010:02cc far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 28 0 0x02e8 1010:02e8 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 29 0 0x0307 1010:0307 far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 30 0 0x031c 1010:031c far-pointer-32 False import-ordinal KERNEL.ordinal:50 KERNEL 50 0x01 3 31 0 0x0328 1010:0328 far-pointer-32 False import-ordinal KERNEL.ordinal:36 KERNEL 36 0x01 3 32 0 0x0368 1010:0368 far-pointer-32 False internal entry-ordinal:102 1010:0002 0x00 3 33 0 0x03ca 1010:03ca far-pointer-32 False internal entry-ordinal:104 1010:01c2 0x00 3 34 0 0x03e6 1010:03e6 far-pointer-32 False internal entry-ordinal:100 1010:0079 0x00 3 35 0 0x03f3 1010:03f3 far-pointer-32 False internal entry-ordinal:191 1018:1b08 0x00 3 36 0 0x03fa 1010:03fa far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 3 37 0 0x0432 1010:0432 far-pointer-32 False internal entry-ordinal:276 1020:0667 0x00 3 38 0 0x043f 1010:043f far-pointer-32 False internal entry-ordinal:277 1020:06ab 0x00 3 39 0 0x0444 1010:0444 far-pointer-32 False internal entry-ordinal:270 1020:0388 0x00 3 40 0 0x0457 1010:0457 far-pointer-32 False internal entry-ordinal:278 1020:072c 0x00 3 41 0 0x045c 1010:045c far-pointer-32 False internal entry-ordinal:271 1020:038f 0x00 3 42 0 0x047f 1010:047f far-pointer-32 False import-ordinal KERNEL.ordinal:135 KERNEL 135 0x01 3 43 0 0x0492 1010:0492 far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 44 0 0x049c 1010:049c far-pointer-32 False internal entry-ordinal:263 1020:0a51 0x00 3 45 0 0x04ac 1010:04ac far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 46 0 0x04b1 1010:04b1 far-pointer-32 False internal entry-ordinal:263 1020:0a51 0x00 3 47 0 0x04be 1010:04be far-pointer-32 False internal entry-ordinal:262 1020:09ec 0x00 3 48 0 0x04ce 1010:04ce far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 49 0 0x04d8 1010:04d8 far-pointer-32 False internal entry-ordinal:263 1020:0a51 0x00 3 50 0 0x04e8 1010:04e8 far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 51 0 0x04ed 1010:04ed far-pointer-32 False internal entry-ordinal:263 1020:0a51 0x00 3 52 0 0x04fa 1010:04fa far-pointer-32 False internal entry-ordinal:262 1020:09ec 0x00 3 53 0 0x0516 1010:0516 far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 54 0 0x051b 1010:051b far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 3 55 0 0x0525 1010:0525 far-pointer-32 False internal entry-ordinal:105 1010:0405 0x00 3 56 0 0x0533 1010:0533 far-pointer-32 False internal entry-ordinal:105 1010:0405 0x00 3 57 0 0x054c 1010:054c far-pointer-32 False internal entry-ordinal:253 1008:300a 0x00 3 58 0 0x0551 1010:0551 far-pointer-32 False internal entry-ordinal:248 1008:2f2f 0x00 3 59 0 0x05ae 1010:05ae far-pointer-32 False import-ordinal KERNEL.ordinal:3 KERNEL 3 0x01 4 1 0 0x0056 1018:0056 far-pointer-32 False import-ordinal USER.ordinal:26 USER 26 0x01 4 2 0 0x0066 1018:0066 far-pointer-32 False import-ordinal USER.ordinal:26 USER 26 0x01 4 3 0 0x007f 1018:007f far-pointer-32 False import-ordinal USER.ordinal:24 USER 24 0x01 4 4 0 0x008c 1018:008c far-pointer-32 False import-ordinal USER.ordinal:24 USER 24 0x01 4 5 0 0x00a0 1018:00a0 far-pointer-32 False import-ordinal USER.ordinal:47 USER 47 0x01 4 6 0 0x00b1 1018:00b1 far-pointer-32 False import-ordinal USER.ordinal:135 USER 135 0x01 4 7 0 0x00e9 1018:00e9 far-pointer-32 False import-ordinal USER.ordinal:25 USER 25 0x01 4 8 0 0x00f7 1018:00f7 far-pointer-32 False import-ordinal USER.ordinal:25 USER 25 0x01 4 9 0 0x01a9 1018:01a9 far-pointer-32 False import-ordinal USER.ordinal:136 USER 136 0x01 4 10 0 0x01b7 1018:01b7 far-pointer-32 False internal entry-ordinal:208 1018:0045 0x00 4 11 0 0x01f8 1018:01f8 far-pointer-32 False import-ordinal KERNEL.ordinal:15 KERNEL 15 0x01 4 12 0 0x01fe 1018:01fe far-pointer-32 False import-ordinal KERNEL.ordinal:18 KERNEL 18 0x01 4 13 0 0x0222 1018:0222 far-pointer-32 False internal entry-ordinal:282 1020:16a5 0x00 4 14 0 0x029f 1018:029f far-pointer-32 False import-ordinal KERNEL.ordinal:177 KERNEL 177 0x01 4 15 0 0x02bb 1018:02bb far-pointer-32 False import-ordinal KERNEL.ordinal:170 KERNEL 170 0x01 4 16 0 0x02e9 1018:02e9 far-pointer-32 False import-ordinal KERNEL.ordinal:176 KERNEL 176 0x01 4 17 0 0x030c 1018:030c far-pointer-32 False import-ordinal KERNEL.ordinal:170 KERNEL 170 0x01 4 18 0 0x0329 1018:0329 far-pointer-32 False import-ordinal KERNEL.ordinal:176 KERNEL 176 0x01 4 19 0 0x0349 1018:0349 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 4 20 0 0x035b 1018:035b far-pointer-32 False internal entry-ordinal:235 1008:2d99 0x00 4 21 0 0x0395 1018:0395 far-pointer-32 False internal entry-ordinal:158 1018:069a 0x00 4 22 0 0x03c2 1018:03c2 far-pointer-32 False internal entry-ordinal:212 1018:01dc 0x00 4 23 0 0x03d9 1018:03d9 far-pointer-32 False internal entry-ordinal:143 1018:060d 0x00 4 24 0 0x03f4 1018:03f4 far-pointer-32 False internal entry-ordinal:236 1008:2db3 0x00 4 25 0 0x0410 1018:0410 offset-16 False internal entry-ordinal:214 1018:03e9 0x00 4 26 0 0x0413 1018:0413 selector-16 False internal entry-ordinal:214 1018:03e9 0x00 4 27 0 0x041d 1018:041d far-pointer-32 False internal entry-ordinal:141 1018:085a 0x00 4 28 0 0x0437 1018:0437 far-pointer-32 False internal entry-ordinal:159 1018:071c 0x00 4 29 0 0x0447 1018:0447 far-pointer-32 False internal entry-ordinal:213 1018:02fa 0x00 4 30 0 0x0454 1018:0454 far-pointer-32 False internal entry-ordinal:237 1008:2dcd 0x00 4 31 0 0x045b 1018:045b far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 4 32 0 0x04b4 1018:04b4 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 33 0 0x04e2 1018:04e2 far-pointer-32 False import-ordinal USER.ordinal:31 USER 31 0x01 4 34 0 0x04f9 1018:04f9 far-pointer-32 False import-ordinal USER.ordinal:36 USER 36 0x01 4 35 0 0x050a 1018:050a far-pointer-32 False import-ordinal USER.ordinal:37 USER 37 0x01 4 36 0 0x0541 1018:0541 far-pointer-32 False internal entry-ordinal:216 1018:049e 0x00 4 37 0 0x056e 1018:056e offset-16 False internal entry-ordinal:215 1018:0466 0x00 4 38 0 0x0571 1018:0571 selector-16 False internal entry-ordinal:215 1018:0466 0x00 4 39 0 0x057b 1018:057b far-pointer-32 False internal entry-ordinal:140 1018:080d 0x00 4 40 0 0x0595 1018:0595 far-pointer-32 False internal entry-ordinal:216 1018:049e 0x00 4 41 0 0x05b4 1018:05b4 offset-16 False internal entry-ordinal:217 1018:0524 0x00 4 42 0 0x05b7 1018:05b7 selector-16 False internal entry-ordinal:217 1018:0524 0x00 4 43 0 0x05c1 1018:05c1 far-pointer-32 False internal entry-ordinal:140 1018:080d 0x00 4 44 0 0x0602 1018:0602 far-pointer-32 False internal entry-ordinal:138 1018:0641 0x00 4 45 0 0x061c 1018:061c far-pointer-32 False internal entry-ordinal:138 1018:0641 0x00 4 46 0 0x0636 1018:0636 far-pointer-32 False internal entry-ordinal:138 1018:0641 0x00 4 47 0 0x0900 1018:0900 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 48 0 0x0924 1018:0924 far-pointer-32 False import-ordinal USER.ordinal:91 USER 91 0x01 4 49 0 0x093e 1018:093e far-pointer-32 False import-ordinal USER.ordinal:111 USER 111 0x01 4 50 0 0x096f 1018:096f far-pointer-32 False import-ordinal USER.ordinal:23 USER 23 0x01 4 51 0 0x097a 1018:097a far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 52 0 0x09a2 1018:09a2 far-pointer-32 False import-ordinal USER.ordinal:46 USER 46 0x01 4 53 0 0x09ad 1018:09ad far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 54 0 0x09e4 1018:09e4 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 55 0 0x0a0c 1018:0a0c far-pointer-32 False import-ordinal USER.ordinal:91 USER 91 0x01 4 56 0 0x0a12 1018:0a12 far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 57 0 0x0a42 1018:0a42 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 58 0 0x0a68 1018:0a68 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 59 0 0x0a9c 1018:0a9c far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 60 0 0x0ac4 1018:0ac4 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 61 0 0x0ad4 1018:0ad4 far-pointer-32 False import-ordinal USER.ordinal:133 USER 133 0x01 4 62 0 0x0af6 1018:0af6 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 63 0 0x0b34 1018:0b34 far-pointer-32 False import-ordinal USER.ordinal:135 USER 135 0x01 4 64 0 0x0b7b 1018:0b7b far-pointer-32 False import-ordinal USER.ordinal:135 USER 135 0x01 4 65 0 0x0bf8 1018:0bf8 far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 66 0 0x0c32 1018:0c32 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 67 0 0x0c91 1018:0c91 far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 68 0 0x0cb1 1018:0cb1 far-pointer-32 False import-ordinal USER.ordinal:133 USaER 133 0x01 4 69 0 0x0cbc 1018:0cbc far-pointer-32 False internal entry-ordinal:218 1018:08c3 0x00 4 70 0 0x0cdc 1018:0cdc far-pointer-32 False internal entry-ordinal:143 1018:060d 0x00 4 71 0 0x0cf7 1018:0cf7 offset-16 False internal entry-ordinal:219 1018:0cc7 0x00 4 72 0 0x0cfa 1018:0cfa selector-16 False internal entry-ordinal:219 1018:0cc7 0x00 4 73 0 0x0d04 1018:0d04 far-pointer-32 False internal entry-ordinal:141 1018:085a 0x00 4 74 0 0x0d10 1018:0d10 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 75 0 0x0d51 1018:0d51 far-pointer-32 False import-ordinal USER.ordinal:111 USER 111 0x01 4 76 0 0x0d5f 1018:0d5f far-pointer-32 False import-ordinal USER.ordinal:53 USER 53 0x01 4 77 0 0x0d90 1018:0d90 far-pointer-32 False internal entry-ordinal:238 1008:2d87 0x00 4 78 0 0x0da6 1018:0da6 far-pointer-32 False internal entry-ordinal:160 1018:055c 0x00 4 79 0 0x0dda 1018:0dda far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 80 0 0x0e2e 1018:0e2e offset-16 False internal entry-ordinal:220 1018:0dcd 0x00 4 81 0 0x0e31 1018:0e31 selector-16 False internal entry-ordinal:220 1018:0dcd 0x00 4 82 0 0x0e3b 1018:0e3b far-pointer-32 False internal entry-ordinal:141 1018:085a 0x00 4 83 0 0x0e69 1018:0e69 far-pointer-32 False import-ordinal USER.ordinal:404 USER 404 0x01 4 84 0 0x0e87 1018:0e87 far-pointer-32 False import-ordinal USER.ordinal:57 USER 57 0x01 4 85 0 0x0eb5 1018:0eb5 far-pointer-32 False import-ordinal USER.ordinal:42 USER 42 0x01 4 86 0 0x0efd 1018:0efd offset-16 False internal entry-ordinal:221 1018:0ec0 0x00 4 87 0 0x0f00 1018:0f00 selector-16 False internal entry-ordinal:221 1018:0ec0 0x00 4 88 0 0x0f0a 1018:0f0a far-pointer-32 False internal entry-ordinal:140 1018:080d 0x00 4 89 0 0x0f2d 1018:0f2d far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 4 90 0 0x0f82 1018:0f82 far-pointer-32 False internal entry-ordinal:236 1008:2db3 0x00 4 91 0 0x0fb1 1018:0fb1 far-pointer-32 False import-ordinal USER.ordinal:6 USER 6 0x01 4 92 0 0x0fd9 1018:0fd9 far-pointer-32 False internal entry-ordinal:209 1018:0071 0x00 4 93 0 0x1024 1018:1024 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 94 0 0x1038 1018:1038 far-pointer-32 False internal entry-ordinal:196 1018:1bdf 0x00 4 95 0 0x1049 1018:1049 far-pointer-32 False internal entry-ordinal:196 1018:1bdf 0x00 4 96 0 0x10cc 1018:10cc far-pointer-32 False internal entry-ordinal:157 1018:0f38 0x00 4 97 0 0x1111 1018:1111 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 4 98 0 0x1129 1018:1129 far-pointer-32 False internal entry-ordinal:133 1018:0341 0x00 4 99 0 0x1141 1018:1141 far-pointer-32 False internal entry-ordinal:254 1008:302c 0x00 4 100 0 0x1150 1018:1150 offset-16 False import-ordinal USER.ordinal:107 USER 107 0x01 4 101 0 0x1153 1018:1153 selector-16 False import-ordinal USER.ordinal:107 USER 107 0x01 4 102 0 0x1192 1018:1192 far-pointer-32 False internal entry-ordinal:138 1018:0641 0x00 4 103 0 0x1197 1018:1197 offset-16 False import-ordinal USER.ordinal:447 USER 447 0x01 4 104 0 0x119a 1018:119a selector-16 False import-ordinal USER.ordinal:447 USER 447 0x01 4 105 0 0x122c 1018:122c far-pointer-32 False internal entry-ordinal:255 1008:3099 0x00 4 106 0 0x1262 1018:1262 far-pointer-32 False internal entry-ordinal:134 1018:03ff 0x00 4 107 0 0x1269 1018:1269 far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 4 108 0 0x1297 1018:1297 far-pointer-32 False import-ordinal USER.ordinal:174 USER 174 0x01 4 109 0 0x12aa 1018:12aa far-pointer-32 False import-ordinal USER.ordinal:173 USER 173 0x01 4 110 0 0x12e1 1018:12e1 offset-16 False internal entry-ordinal:211 1018:018b 0x00 4 111 0 0x12e4 1018:12e4 selector-16 False internal entry-ordinal:211 1018:018b 0x00 4 112 0 0x1339 1018:1339 far-pointer-32 False import-ordinal USER.ordinal:122 USER 122 0x01 4 113 0 0x1367 1018:1367 far-pointer-32 False internal entry-ordinal:144 1018:0627 0x00 4 114 0 0x1395 1018:1395 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 115 0 0x13c5 1018:13c5 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 116 0 0x1425 1018:1425 far-pointer-32 False import-ordinal USER.ordinal:452 USER 452 0x01 4 117 0 0x14b1 1018:14b1 far-pointer-32 False import-ordinal USER.ordinal:111 USER 111 0x01 4 118 0 0x14c9 1018:14c9 far-pointer-32 False import-ordinal USER.ordinal:91 USER 91 0x01 4 119 0 0x14ee 1018:14ee far-pointer-32 False internal entry-ordinal:207 1018:0097 0x00 4 120 0 0x1500 1018:1500 far-pointer-32 False internal entry-ordinal:208 1018:0045 0x00 4 121 0 0x1516 1018:1516 far-pointer-32 False import-ordinal USER.ordinal:136 USER 136 0x01 4 122 0 0x155b 1018:155b far-pointer-32 False import-ordinal USER.ordinal:47 USER 47 0x01 4 123 0 0x156b 1018:156b far-pointer-32 False import-ordinal USER.ordinal:31 USER 31 0x01 4 124 0 0x157b 1018:157b far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 4 125 0 0x158f 1018:158f far-pointer-32 False import-ordinal USER.ordinal:23 USER 23 0x01 4 126 0 0x15a7 1018:15a7 far-pointer-32 False import-ordinal USER.ordinal:48 USER 48 0x01 4 127 0 0x15d0 1018:15d0 far-pointer-32 False import-ordinal USER.ordinal:31 USER 31 0x01 4 128 0 0x15e3 1018:15e3 far-pointer-32 False import-ordinal USER.ordinal:272 USER 272 0x01 4 129 0 0x15fb 1018:15fb far-pointer-32 False import-ordinal USER.ordinal:32 USER 32 0x01 4 130 0 0x1642 1018:1642 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 131 0 0x1657 1018:1657 far-pointer-32 False import-ordinal USER.ordinal:29 USER 29 0x01 4 132 0 0x1681 1018:1681 far-pointer-32 False import-ordinal USER.ordinal:29 USER 29 0x01 4 133 0 0x16b0 1018:16b0 far-pointer-32 False internal entry-ordinal:167 1018:0ffd 0x00 4 134 0 0x16bc 1018:16bc far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 135 0 0x16d4 1018:16d4 far-pointer-32 False internal entry-ordinal:173 1018:1547 0x00 4 136 0 0x16e0 1018:16e0 far-pointer-32 False internal entry-ordinal:174 1018:1586 0x00 4 137 0 0x1701 1018:1701 far-pointer-32 False internal entry-ordinal:296 1020:16e1 0x00 4 138 0 0x1717 1018:1717 far-pointer-32 False internal entry-ordinal:151 1018:0d9b 0x00 4 139 0 0x1723 1018:1723 far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 140 0 0x1733 1018:1733 far-pointer-32 False import-ordinal USER.ordinal:22 USER 22 0x01 4 141 0 0x1756 1018:1756 far-pointer-32 False internal entry-ordinal:189 1018:15c0 0x00 4 142 0 0x1797 1018:1797 far-pointer-32 False import-ordinal USER.ordinal:135 USER 135 0x01 4 143 0 0x1807 1018:1807 far-pointer-32 False import-ordinal USER.ordinal:135 USER 135 0x01 4 144 0 0x187d 1018:187d far-pointer-32 False import-ordinal USER.ordinal:39 USER 39 0x01 4 145 0 0x18de 1018:18de far-pointer-32 False import-ordinal USER.ordinal:40 USER 40 0x01 4 146 0 0x192e 1018:192e far-pointer-32 False import-ordinal USER.ordinal:32 USER 32 0x01 4 147 0 0x196b 1018:196b far-pointer-32 False internal entry-ordinal:189 1018:15c0 0x00 4 148 0 0x19ae 1018:19ae far-pointer-32 False import-ordinal USER.ordinal:18 USER 18 0x01 4 149 0 0x19c0 1018:19c0 far-pointer-32 False import-ordinal USER.ordinal:109 USER 109 0x01 4 150 0 0x19ce 1018:19ce far-pointer-32 False import-ordinal USER.ordinal:113 USER 113 0x01 4 151 0 0x19d8 1018:19d8 far-pointer-32 False import-ordinal USER.ordinal:114 USER 114 0x01 4 152 0 0x19f3 1018:19f3 far-pointer-32 False import-ordinal USER.ordinal:19 USER 19 0x01 4 153 0 0x1a1b 1018:1a1b far-pointer-32 False internal entry-ordinal:139 1018:0673 0x00 4 154 0 0x1a35 1018:1a35 far-pointer-32 False internal entry-ordinal:174 1018:1586 0x00 4 155 0 0x1a46 1018:1a46 far-pointer-32 False internal entry-ordinal:173 1018:1547 0x00 4 156 0 0x1a69 1018:1a69 far-pointer-32 False internal entry-ordinal:294 1020:03ef 0x00 4 157 0 0x1a7b 1018:1a7b far-pointer-32 False internal entry-ordinal:235 1008:2d99 0x00 4 158 0 0x1abc 1018:1abc offset-16 False internal entry-ordinal:210 1018:0133 0x00 4 159 0 0x1abf 1018:1abf selector-16 False internal entry-ordinal:210 1018:0133 0x00 4 160 0 0x1ac8 1018:1ac8 far-pointer-32 False import-ordinal KERNEL.ordinal:51 KERNEL 51 0x01 4 161 0 0x1ad4 1018:1ad4 far-pointer-32 False internal entry-ordinal:239 1008:2e76 0x00 4 162 0 0x1b16 1018:1b16 far-pointer-32 False import-ordinal KERNEL.ordinal:52 KERNEL 52 0x01 4 163 0 0x1b23 1018:1b23 far-pointer-32 False internal entry-ordinal:237 1008:2dcd 0x00 4 164 0 0x1b2a 1018:1b2a far-pointer-32 False internal entry-ordinal:295 1020:0439 0x00 4 165 0 0x1b9a 1018:1b9a far-pointer-32 False internal entry-ordinal:152 1018:0e9e 0x00 4 166 0 0x1c16 1018:1c16 far-pointer-32 False import-ordinal USER.ordinal:109 USER 109 0x01 4 167 0 0x1c44 1018:1c44 far-pointer-32 False import-ordinal USER.ordinal:113 USER 113 0x01 4 168 0 0x1c4e 1018:1c4e far-pointer-32 False import-ordinal USER.ordinal:114 USER 114 0x01 4 169 0 0x1c64 1018:1c64 far-pointer-32 False import-ordinal USER.ordinal:112 USER 112 0x01 4 170 0 0x1d0b 1018:1d0b far-pointer-32 False import-ordinal USER.ordinal:90 USER 90 0x01 4 171 0 0x1d49 1018:1d49 far-pointer-32 False import-ordinal USER.ordinal:178 USER 178 0x01 4 172 0 0x1d96 1018:1d96 far-pointer-32 False import-ordinal USER.ordinal:451 USER 451 0x01 4 173 0 0x1dca 1018:1dca far-pointer-32 False internal entry-ordinal:240 1008:2de0 0x00 4 174 0 0x1dee 1018:1dee far-pointer-32 False internal entry-ordinal:241 1008:2dff 0x00 4 175 0 0x1f2c 1018:1f2c far-pointer-32 False import-ordinal USER.ordinal:421 USER 421 0x01 4 176 0 0x1f4b 1018:1f4b far-pointer-32 False internal entry-ordinal:258 1020:0061 0x00 5 1 0 0x0027 1020:0027 far-pointer-32 False import-ordinal KERNEL.ordinal:30 KERNEL 30 0x01 5 2 0 0x0030 1020:0030 far-pointer-32 False import-ordinal USER.ordinal:5 USER 5 0x01 5 3 0 0x0039 1020:0039 far-pointer-32 False import-ordinal KERNEL.ordinal:132 KERNEL 132 0x01 5 4 0 0x0051 1020:0051 offset-16 False import-ordinal KERNEL.ordinal:114 KERNEL 114 0x01 5 5 0 0x00c7 1020:00c7 far-pointer-32 False import-ordinal USER.ordinal:1 USER 1 0x01 5 6 0 0x0171 1020:0171 far-pointer-32 False import-ordinal KERNEL.ordinal:169 KERNEL 169 0x01 5 7 0 0x019f 1020:019f far-pointer-32 False import-ordinal KERNEL.ordinal:25 KERNEL 25 0x01 5 8 0 0x022b 1020:022b far-pointer-32 False import-ordinal KERNEL.ordinal:15 KERNEL 15 0x01 5 9 0 0x0236 1020:0236 far-pointer-32 False import-ordinal KERNEL.ordinal:18 KERNEL 18 0x01 5 10 0 0x034c 1020:034c far-pointer-32 False import-ordinal KERNEL.ordinal:21 KERNEL 21 0x01 5 11 0 0x0357 1020:0357 far-pointer-32 False import-ordinal KERNEL.ordinal:19 KERNEL 19 0x01 5 12 0 0x035c 1020:035c far-pointer-32 False import-ordinal KERNEL.ordinal:17 KERNEL 17 0x01 5 13 0 0x04c6 1020:04c6 offset-16 False internal entry-ordinal:297 1020:0be9 0x00 5 14 0 0x04ca 1020:04ca selector-16 False internal entry-ordinal:297 1020:0be9 0x00 5 15 0 0x04f4 1020:04f4 far-pointer-32 False import-ordinal KEYBOARD.ordinal:5 KEYBOARD 5 0x01 5 16 0 0x06a3 1020:06a3 far-pointer-32 False import-ordinal KEYBOARD.ordinal:5 KEYBOARD 5 0x01 5 17 0 0x0857 1020:0857 far-pointer-32 False import-ordinal KERNEL.ordinal:49 KERNEL 49 0x01 5 18 0 0x0c1b 1020:0c1b offset-16 False internal entry-ordinal:298 1020:05d8 0x00 5 19 0 0x0c1e 1020:0c1e selector-16 False internal entry-ordinal:298 1020:05d8 0x00 5 20 0 0x0c36 1020:0c36 offset-16 False internal entry-ordinal:300 1020:062d 0x00 5 21 0 0x0c39 1020:0c39 selector-16 False internal entry-ordinal:300 1020:062d 0x00 5 22 0 0x0c4c 1020:0c4c offset-16 False internal entry-ordinal:299 1020:0608 0x00 5 23 0 0x0c4f 1020:0c4f selector-16 False internal entry-ordinal:299 1020:0608 0x00 5 24 0 0x0c69 1020:0c69 offset-16 False internal entry-ordinal:301 1020:064d 0x00 5 25 0 0x0c6e 1020:0c6e selector-16 False internal entry-ordinal:301 1020:064d 0x00 5 26 0 0x14e1 1020:14e1 offset-16 True os-fixup os-fixup:3:0 0x07 5 27 0 0x14ec 1020:14ec offset-16 True os-fixup os-fixup:3:0 0x07 5 28 0 0x14e7 1020:14e7 offset-16 True os-fixup os-fixup:5:0 0x07 5 29 0 0x14f2 1020:14f2 offset-16 True os-fixup os-fixup:5:0 0x07 5 30 0 0x14f5 1020:14f5 offset-16 True os-fixup os-fixup:5:0 0x07 5 31 0 0x14f8 1020:14f8 offset-16 True os-fixup os-fixup:6:0 0x07 6 1 0 0x0038 1028:0038 far-pointer-32 False internal entry-ordinal:1 1000:0100 0x00 6 2 0 0x003c 1028:003c far-pointer-32 False internal entry-ordinal:2 1000:0121 0x00 6 3 0 0x002c 1028:002c far-pointer-32 False internal entry-ordinal:99 1010:03e0 0x00 6 4 0 0x0030 1028:0030 far-pointer-32 False internal entry-ordinal:192 1018:1b35 0x00 6 5 0 0x0034 1028:0034 far-pointer-32 False internal entry-ordinal:193 1018:1b4b 0x00 6 6 0 0x0040 1028:0040 far-pointer-32 False internal entry-ordinal:195 1018:1bb0 0x00 6 7 0 0x0044 1028:0044 far-pointer-32 False internal entry-ordinal:197 1018:1bfc 0x00 6 8 0 0x0048 1028:0048 far-pointer-32 False internal entry-ordinal:198 1018:1c7f 0x00 6 9 0 0x004c 1028:004c far-pointer-32 False internal entry-ordinal:199 1018:1cd6 0x00 6 10 0 0x0050 1028:0050 far-pointer-32 False internal entry-ordinal:200 1018:1d22 0x00 6 11 0 0x0054 1028:0054 far-pointer-32 False internal entry-ordinal:201 1018:1d64 0x00 6 12 0 0x0058 1028:0058 far-pointer-32 False internal entry-ordinal:202 1018:1e39 0x00 6 13 0 0x005c 1028:005c far-pointer-32 False internal entry-ordinal:203 1018:1eb0 0x00 6 14 0 0x0060 1028:0060 far-pointer-32 False internal entry-ordinal:204 1018:1db1 0x00 6 15 0 0x0064 1028:0064 far-pointer-32 False internal entry-ordinal:205 1018:1f14 0x00 6 16 0 0x0068 1028:0068 far-pointer-32 False internal entry-ordinal:206 1018:1f56 0x00 6 17 0 0x0082 1028:0082 far-pointer-32 False internal entry-ordinal:8 1000:6bf8 0x00 6 18 0 0x0086 1028:0086 far-pointer-32 False internal entry-ordinal:9 1000:638e 0x00 6 19 0 0x008a 1028:008a far-pointer-32 False internal entry-ordinal:10 1000:eab1 0x00 6 20 0 0x008e 1028:008e far-pointer-32 False internal entry-ordinal:11 1000:58e7 0x00 6 21 0 0x0092 1028:0092 far-pointer-32 False internal entry-ordinal:12 1000:5956 0x00 6 22 0 0x0096 1028:0096 far-pointer-32 False internal entry-ordinal:13 1000:59a0 0x00 6 23 0 0x009a 1028:009a far-pointer-32 False internal entry-ordinal:14 1000:5a37 0x00 6 24 0 0x00d2 1028:00d2 far-pointer-32 False internal entry-ordinal:4 1000:016c 0x00 6 25 0 0x00a6 1028:00a6 far-pointer-32 False internal entry-ordinal:5 1000:51f5 0x00 6 26 0 0x00d6 1028:00d6 far-pointer-32 False internal entry-ordinal:6 1000:0270 0x00 6 27 0 0x00ea 1028:00ea far-pointer-32 False internal entry-ordinal:7 1000:5390 0x00 6 28 0 0x00c6 1028:00c6 far-pointer-32 False internal entry-ordinal:175 1018:12f5 0x00 6 29 0 0x00be 1028:00be far-pointer-32 False internal entry-ordinal:176 1018:134f 0x00 6 30 0 0x00aa 1028:00aa far-pointer-32 False internal entry-ordinal:177 1018:1311 0x00 6 31 0 0x00ae 1028:00ae far-pointer-32 False internal entry-ordinal:135 1018:0bb3 0x00 6 32 0 0x00b2 1028:00b2 far-pointer-32 False internal entry-ordinal:136 1018:0c3d 0x00 6 33 0 0x00b6 1028:00b6 far-pointer-32 False internal entry-ordinal:137 1018:0c59 0x00 6 34 0 0x00ba 1028:00ba far-pointer-32 False internal entry-ordinal:145 1018:0e46 0x00 6 35 0 0x00c2 1028:00c2 far-pointer-32 False internal entry-ordinal:146 1018:0ce7 0x00 6 36 0 0x00ca 1028:00ca far-pointer-32 False internal entry-ordinal:148 1018:0d6a 0x00 6 37 0 0x00ce 1028:00ce far-pointer-32 False internal entry-ordinal:149 1018:10e9 0x00 6 38 0 0x00da 1028:00da far-pointer-32 False internal entry-ordinal:153 1018:0ef4 0x00 6 39 0 0x00de 1028:00de far-pointer-32 False internal entry-ordinal:154 1018:05dc 0x00 6 40 0 0x00e2 1028:00e2 far-pointer-32 False internal entry-ordinal:155 1018:0e0a 0x00 6 41 0 0x00e6 1028:00e6 far-pointer-32 False internal entry-ordinal:156 1018:0a85 0x00 6 42 0 0x00fe 1028:00fe far-pointer-32 False internal entry-ordinal:20 1000:5ee6 0x00 6 43 0 0x0102 1028:0102 far-pointer-32 False internal entry-ordinal:21 1000:5efc 0x00 6 44 0 0x0106 1028:0106 far-pointer-32 False internal entry-ordinal:22 1000:5f29 0x00 6 45 0 0x010a 1028:010a far-pointer-32 False internal entry-ordinal:23 1000:5fc0 0x00 6 46 0 0x0142 1028:0142 far-pointer-32 False internal entry-ordinal:16 1000:5ab7 0x00 6 47 0 0x0116 1028:0116 far-pointer-32 False internal entry-ordinal:17 1000:5ba6 0x00 6 48 0 0x0146 1028:0146 far-pointer-32 False internal entry-ordinal:18 1000:5be5 0x00 6 49 0 0x015a 1028:015a far-pointer-32 False internal entry-ordinal:19 1000:5c13 0x00 6 50 0 0x0136 1028:0136 far-pointer-32 False internal entry-ordinal:175 1018:12f5 0x00 6 51 0 0x012e 1028:012e far-pointer-32 False internal entry-ordinal:176 1018:134f 0x00 6 52 0 0x011a 1028:011a far-pointer-32 False internal entry-ordinal:177 1018:1311 0x00 6 53 0 0x011e 1028:011e far-pointer-32 False internal entry-ordinal:135 1018:0bb3 0x00 6 54 0 0x0122 1028:0122 far-pointer-32 False internal entry-ordinal:136 1018:0c3d 0x00 6 55 0 0x0126 1028:0126 far-pointer-32 False internal entry-ordinal:137 1018:0c59 0x00 6 56 0 0x012a 1028:012a far-pointer-32 False internal entry-ordinal:145 1018:0e46 0x00 6 57 0 0x0132 1028:0132 far-pointer-32 False internal entry-ordinal:146 1018:0ce7 0x00 6 58 0 0x013a 1028:013a far-pointer-32 False internal entry-ordinal:148 1018:0d6a 0x00 6 59 0 0x013e 1028:013e far-pointer-32 False internal entry-ordinal:149 1018:10e9 0x00 6 60 0 0x014a 1028:014a far-pointer-32 False internal entry-ordinal:153 1018:0ef4 0x00 6 61 0 0x014e 1028:014e far-pointer-32 False internal entry-ordinal:154 1018:05dc 0x00 6 62 0 0x0152 1028:0152 far-pointer-32 False internal entry-ordinal:155 1018:0e0a 0x00 6 63 0 0x0156 1028:0156 far-pointer-32 False internal entry-ordinal:156 1018:0a85 0x00 6 64 0 0x016e 1028:016e far-pointer-32 False internal entry-ordinal:29 1000:6202 0x00 6 65 0 0x0172 1028:0172 far-pointer-32 False internal entry-ordinal:30 1000:6218 0x00 6 66 0 0x0176 1028:0176 far-pointer-32 False internal entry-ordinal:31 1000:6245 0x00 6 67 0 0x017a 1028:017a far-pointer-32 False internal entry-ordinal:32 1000:62dc 0x00 6 68 0 0x01b2 1028:01b2 far-pointer-32 False internal entry-ordinal:25 1000:6040 0x00 6 69 0 0x0186 1028:0186 far-pointer-32 False internal entry-ordinal:26 1000:60e7 0x00 6 70 0 0x01b6 1028:01b6 far-pointer-32 False internal entry-ordinal:27 1000:6129 0x00 6 71 0 0x01ca 1028:01ca far-pointer-32 False internal entry-ordinal:28 1000:616e 0x00 6 72 0 0x01a6 1028:01a6 far-pointer-32 False internal entry-ordinal:175 1018:12f5 0x00 6 73 0 0x019e 1028:019e far-pointer-32 False internal entry-ordinal:176 1018:134f 0x00 6 74 0 0x018a 1028:018a far-pointer-32 False internal entry-ordinal:177 1018:1311 0x00 6 75 0 0x018e 1028:018e far-pointer-32 False internal entry-ordinal:135 1018:0bb3 0x00 6 76 0 0x0192 1028:0192 far-pointer-32 False internal entry-ordinal:136 1018:0c3d 0x00 6 77 0 0x0196 1028:0196 far-pointer-32 False internal entry-ordinal:137 1018:0c59 0x00 6 78 0 0x019a 1028:019a far-pointer-32 False internal entry-ordinal:145 1018:0e46 0x00 6 79 0 0x01a2 1028:01a2 far-pointer-32 False internal entry-ordinal:146 1018:0ce7 0x00 6 80 0 0x01aa 1028:01aa far-pointer-32 False internal entry-ordinal:148 1018:0d6a 0x00 6 81 0 0x01ae 1028:01ae far-pointer-32 False internal entry-ordinal:149 1018:10e9 0x00 6 82 0 0x01ba 1028:01ba far-pointer-32 False internal entry-ordinal:153 1018:0ef4 0x00 6 83 0 0x01be 1028:01be far-pointer-32 False internal entry-ordinal:154 1018:05dc 0x00 6 84 0 0x01c2 1028:01c2 far-pointer-32 False internal entry-ordinal:155 1018:0e0a 0x00 6 85 0 0x01c6 1028:01c6 far-pointer-32 False internal entry-ordinal:156 1018:0a85 0x00 6 86 0 0x020a 1028:020a far-pointer-32 False internal entry-ordinal:107 1008:168e 0x00 6 87 0 0x0206 1028:0206 far-pointer-32 False internal entry-ordinal:108 1008:16be 0x00 6 88 0 0x01d6 1028:01d6 far-pointer-32 False internal entry-ordinal:223 1008:2a0e 0x00 6 89 0 0x01ee 1028:01ee far-pointer-32 False internal entry-ordinal:224 1008:2a45 0x00 6 90 0 0x021a 1028:021a far-pointer-32 False internal entry-ordinal:225 1008:2ae3 0x00 6 91 0 0x021e 1028:021e far-pointer-32 False internal entry-ordinal:226 1008:2bd1 0x00 6 92 0 0x01da 1028:01da far-pointer-32 False internal entry-ordinal:233 1008:2cd9 0x00 6 93 0 0x01de 1028:01de far-pointer-32 False internal entry-ordinal:135 1018:0bb3 0x00 6 94 0 0x01e2 1028:01e2 far-pointer-32 False internal entry-ordinal:136 1018:0c3d 0x00 6 95 0 0x01e6 1028:01e6 far-pointer-32 False internal entry-ordinal:137 1018:0c59 0x00 6 96 0 0x01ea 1028:01ea far-pointer-32 False internal entry-ordinal:145 1018:0e46 0x00 6 97 0 0x01f2 1028:01f2 far-pointer-32 False internal entry-ordinal:146 1018:0ce7 0x00 6 98 0 0x01f6 1028:01f6 far-pointer-32 False internal entry-ordinal:147 1018:08ac 0x00 6 99 0 0x01fa 1028:01fa far-pointer-32 False internal entry-ordinal:148 1018:0d6a 0x00 6 100 0 0x01fe 1028:01fe far-pointer-32 False internal entry-ordinal:149 1018:10e9 0x00 6 101 0 0x0202 1028:0202 far-pointer-32 False internal entry-ordinal:150 1018:0d8a 0x00 6 102 0 0x020e 1028:020e far-pointer-32 False internal entry-ordinal:154 1018:05dc 0x00 6 103 0 0x0212 1028:0212 far-pointer-32 False internal entry-ordinal:155 1018:0e0a 0x00 6 104 0 0x0216 1028:0216 far-pointer-32 False internal entry-ordinal:156 1018:0a85 0x00 6 105 0 0x054c 1028:054c far-pointer-32 False internal segment:6:offset:0550 1028:0550 0x00 6 106 0 0x0564 1028:0564 far-pointer-32 False internal entry-ordinal:119 1008:2219 0x00 6 107 0 0x0578 1028:0578 far-pointer-32 False internal segment:6:offset:057c 1028:057c 0x00 6 108 0 0x05c8 1028:05c8 far-pointer-32 False internal entry-ordinal:129 1008:2906 0x00 6 109 0 0x06da 1028:06da far-pointer-32 False internal entry-ordinal:227 1008:2cf2 0x00 6 110 0 0x06de 1028:06de far-pointer-32 False internal entry-ordinal:228 1008:2d3a 0x00 6 111 0 0x06e2 1028:06e2 far-pointer-32 False internal entry-ordinal:229 1008:2c08 0x00 6 112 0 0x06e6 1028:06e6 far-pointer-32 False internal entry-ordinal:230 1008:2c1f 0x00 6 113 0 0x06ea 1028:06ea far-pointer-32 False internal entry-ordinal:231 1008:2d66 0x00 6 114 0 0x06ee 1028:06ee far-pointer-32 False internal entry-ordinal:232 1008:2c83 0x00 6 115 0 0x05e6 1028:05e6 far-pointer-32 False internal entry-ordinal:161 1018:0b25 0x00 6 116 0 0x05ea 1028:05ea far-pointer-32 False internal entry-ordinal:162 1018:0b6c 0x00 6 117 0 0x05ee 1028:05ee far-pointer-32 False internal entry-ordinal:163 1018:08f0 0x00 6 118 0 0x05f2 1028:05f2 far-pointer-32 False internal entry-ordinal:164 1018:0f22 0x00 6 119 0 0x05f6 1028:05f6 far-pointer-32 False internal entry-ordinal:165 1018:0f8d 0x00 6 120 0 0x05fa 1028:05fa far-pointer-32 False internal entry-ordinal:166 1018:0fcc 0x00 6 121 0 0x05fe 1028:05fe far-pointer-32 False internal entry-ordinal:167 1018:0ffd 0x00 6 122 0 0x0602 1028:0602 far-pointer-32 False internal entry-ordinal:168 1018:1054 0x00 6 123 0 0x0606 1028:0606 far-pointer-32 False internal entry-ordinal:169 1018:10aa 0x00 6 124 0 0x0626 1028:0626 far-pointer-32 False internal entry-ordinal:178 1018:169d 0x00 6 125 0 0x062a 1028:062a far-pointer-32 False internal entry-ordinal:179 1018:16eb 0x00 6 126 0 0x062e 1028:062e far-pointer-32 False internal entry-ordinal:181 1018:1761 0x00 6 127 0 0x0632 1028:0632 far-pointer-32 False internal entry-ordinal:182 1018:1788 0x00 6 128 0 0x0636 1028:0636 far-pointer-32 False internal entry-ordinal:183 1018:17f8 0x00 6 129 0 0x063a 1028:063a far-pointer-32 False internal entry-ordinal:184 1018:1868 0x00 6 130 0 0x063e 1028:063e far-pointer-32 False internal entry-ordinal:185 1018:18e9 0x00 6 131 0 0x0642 1028:0642 far-pointer-32 False internal entry-ordinal:186 1018:1960 0x00 6 132 0 0x0646 1028:0646 far-pointer-32 False internal entry-ordinal:187 1018:1986 0x00 6 133 0 0x064a 1028:064a far-pointer-32 False internal entry-ordinal:188 1018:1a0e 0x00 6 134 0 0x0652 1028:0652 far-pointer-32 False import-ordinal USER.ordinal:241 USER 241 0x01 6 135 0 0x0656 1028:0656 far-pointer-32 False import-ordinal USER.ordinal:239 USER 239 0x01 6 136 0 0x065a 1028:065a far-pointer-32 False import-ordinal USER.ordinal:107 USER 107 0x01 6 137 0 0x065e 1028:065e far-pointer-32 False import-ordinal USER.ordinal:447 USER 447 0x01 6 138 0 0x0662 1028:0662 far-pointer-32 False import-ordinal USER.ordinal:308 USER 308 0x01 6 139 0 0x0666 1028:0666 far-pointer-32 False import-ordinal USER.ordinal:1 USER 1 0x01 B x^otype id file_offset allocated_size raw_sha256 raw_path decoded_paths status stage users behavior notes DAT 400 118272 5632 ae9dbc3c6b2d559a17c5ccd5827d5e7b89bdebb48b3dbbd350696076d518a7da assets/raw/DAT/00400.bin assets/decoded/images/dat_00400.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 0. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 401 123904 5632 599086497dcc01ebc63d007ae3d0599d581b0434eb91333f42a5f099b92efd6e assets/raw/DAT/00401.bin assets/decoded/images/dat_00401.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 1. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 402 129536 5632 4bc9cf746a6c09f8a29a4a77c2e6b9288cd7b0688df81f18aad2b9f7182f1019 assets/raw/DAT/00402.bin assets/decoded/images/dat_00402.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 2. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 403 135168 5632 b21eb9ce2c8a27966ff9b762545ca6a468eec31add1fbdab0128ef58b450ede5 assets/raw/DAT/00403.bin assets/decoded/images/dat_00403.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 3. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 404 140800 5632 c5edea71429f419f688a49b2e494bb3b82b90912b38d59e0b5d6c15f10b75406 assets/raw/DAT/00404.bin assets/decoded/images/dat_00404.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 4. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 405 146432 5632 2302a4e768636fc3165a78e1c65f0f604f8db780d5ff2b4007773593945e5537 assets/raw/DAT/00405.bin assets/decoded/images/dat_00405.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 5. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 406 152064 5632 a785985480c2e4839d5a4e7aab24d9de67e7cb6f5c1f6b60539e154fc82100d7 assets/raw/DAT/00406.bin assets/decoded/images/dat_00406.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 6. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 407 157696 5632 b9b046bf77ac926cba371f1114693705b8b3b086f48a3d5697f1cd707e7a7735 assets/raw/DAT/00407.bin assets/decoded/images/dat_00407.png verified fully-mapped 1000:5390,1008:149d,1000:0002,1000:51f5 42x123 player-emblem sprite 7. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 600 163328 98048 b40c7f5cd5431ca29f238ac291f7c9c26d9823450acb77b14fed5d06748f5d3e assets/raw/DAT/00600.bin assets/decoded/images/dat_00600.png verified fully-mapped 1000:5390,1008:149d,1000:6f27,1000:7440,1000:51f5 544x180 rotating-target and panel-animation atlas. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 701 261376 21248 52143c98872d315408ba017aab36985939af1a54d6a2caac770c54b78d450da8 assets/raw/DAT/00701.bin assets/decoded/images/dat_00701.png verified fully-mapped 1000:5390,1008:149d,1008:0b9e,1000:51f5 146x142 score-status level 1. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 702 282624 21248 debd1d66cf09ad330408acaf19010dab75fcf5376ee55edd7e1d05e491bf974f assets/raw/DAT/00702.bin assets/decoded/images/dat_00702.png verified fully-mapped 1000:5390,1008:149d,1008:0b9e,1000:51f5 146x142 score-status level 2. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 703 303872 21248 b3972c40b7a3758e48ee1e4d24119a5d3cf9be032d83d4890e792aed2b9b9500 assets/raw/DAT/00703.bin assets/decoded/images/dat_00703.png verified fully-mapped 1000:5390,1008:149d,1008:0b9e,1000:51f5 146x142 score-status level 3. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 704 325120 21248 33aca071ff68e5e9a886b206122796c1c9027ef5bce6e7ea71442574597ee45f assets/raw/DAT/00704.bin assets/decoded/images/dat_00704.png verified fully-mapped 1000:5390,1008:149d,1008:0b9e,1000:51f5 146x142 score-status level 4. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 801 346368 4352 5bd5bd78a5f68b0f271337139a7e8cc8214a9c6ac5229f45fe351f2f33ad311f assets/raw/DAT/00801.bin assets/decoded/images/dat_00801.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 1. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 802 350720 4352 8296a852c3e068ff98697aa97feefbd0ba47909eb8f4b3365525b9948bac8f9c assets/raw/DAT/00802.bin assets/decoded/images/dat_00802.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 2. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 803 355072 4352 326f266c75b125bf9bf6af068efc8e7035ab14abe8da23188ab6765f64f7b47e assets/raw/DAT/00803.bin assets/decoded/images/dat_00803.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 3. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 804 359424 4352 5ff7c04e4e1d0ab63d140ee76997a67e12cfed331fa8c0548bd8bb41bd1a15bd assets/raw/DAT/00804.bin assets/decoded/images/dat_00804.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 4. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 805 363776 4352 a21cbbad25b01174ecce93a93e1a164913b50b926f8cbd2ceb207c99d1a4378f assets/raw/DAT/00805.bin assets/decoded/images/dat_00805.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 5. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 806 368128 4352 e4f340dca8dd79f8059ba75abe89cefd27ff8a14f53a8e3dc430787473f3d86b assets/raw/DAT/00806.bin assets/decoded/images/dat_00806.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 6. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 807 372480 4352 20000cf4ffa7174bbb6868a418ec8d0ea413e091d1d976d44f20e019bb71dd10 assets/raw/DAT/00807.bin assets/decoded/images/dat_00807.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 7. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 808 376832 4352 a605eb26f9a6f33d789a546993eb5fcb95109d11a4a6a429a1e03129d00b0243 assets/raw/DAT/00808.bin assets/decoded/images/dat_00808.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 8. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 809 381184 4352 f1aa5c93967908af758f23b711bde4026899cc467f13ddaf02249083b3fe007e assets/raw/DAT/00809.bin assets/decoded/images/dat_00809.png verified fully-mapped 1000:5390,1008:149d,1008:0dbd,1000:51f5 68x61 collected-item display count 9. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 900 385536 266496 25c31f3d3a628f2b102bbe07f09a91c038328fef19004e599bcc601bdbfd43bc assets/raw/DAT/00900.bin assets/decoded/images/dat_00900.png verified fully-mapped 1000:5390,1008:149d,1008:0e08,1000:51f5 900x296 18-frame claw atlas. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 901 652032 4096 7b4a732ef13e24c395209841aabcc16c4431096322627fa9beb95d945913b30d assets/raw/DAT/00901.bin assets/decoded/images/dat_00901.png verified fully-mapped 1000:5390,1008:149d,1000:638e,1000:6b37,1000:51f5 230x17 launcher and velocity-row decoration atlas. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 993 656128 108288 d8fa546a48c16750bb40715babc6b310a9e8012598fc4448fb4c622894b6afe2 assets/raw/DAT/00993.bin assets/decoded/images/dat_00993.png verified fully-mapped 1000:5be5,1008:149d,1000:5c13,1000:5ba6 360x300 high-score background. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 994 764416 3328 add4499d6497e08a41d2621a9edc5a9207db55ca7269344b186699023a058085 assets/raw/DAT/00994.bin assets/decoded/images/dat_00994.png verified fully-mapped 1000:5390,1000:531e,1008:149d 237x13 asset-loading progress strip. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 995 767744 294656 28d528340d536b7085c06be9da4d094450463b5b5bed5a6fc04a6e3ef8bae0af assets/raw/DAT/00995.bin assets/decoded/images/dat_00995.png verified fully-mapped 1000:5390,1008:149d 640x460 one-shot board splash. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 997 1062400 294656 8f353daefc21cd5dc13caff892d45bf8f119abe5570ec02cb5e65c5fac471417 assets/raw/DAT/00997.bin assets/decoded/images/dat_00997.png verified fully-mapped 1000:5390,1008:149d,1008:0837,1000:7440,1000:eab1,1000:51f5 640x460 immutable restore overlay A. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 998 1357056 294656 75a50e0fa18ee1fae783aeca89a08d23f9e58b4dc4a35d25dbb2677711cdf1ba assets/raw/DAT/00998.bin assets/decoded/images/dat_00998.png verified fully-mapped 1000:5390,1008:149d,1008:07b6,1008:08bb,1008:093f,1008:0996,1008:0e08,1000:51f5 640x460 restore overlay B and mutable background. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 1001 1651712 294656 2db3a4b5d33883c3d4e9687b03275e75f559b1e0ed57d91e286e6a97404c1be8 assets/raw/DAT/01001.bin assets/decoded/images/dat_01001.png verified fully-mapped 1000:6129,1008:149d,1000:616e,1000:60e7 640x460 board background selected by index 1. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 1002 1946368 294656 df11fbc3b043a540d0231804a01a106a5b5dfe48aff9b3d6bdeb83a4b13928c2 assets/raw/DAT/01002.bin assets/decoded/images/dat_01002.png verified fully-mapped 1000:6129,1008:149d,1000:616e,1000:60e7 640x460 board background selected by index 2. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 1003 2241024 294656 27cfcf709f21256135bfaf8bb506897b0996225ddcf69cab2cd934cbf0d9a2d9 assets/raw/DAT/01003.bin assets/decoded/images/dat_01003.png verified fully-mapped 1000:6129,1008:149d,1000:616e,1000:60e7 640x460 board background selected by index 3. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 1004 2535680 294656 12929d04af2525a10b621a135eedd17eea71ee3511adfd7f80359812fc43d668 assets/raw/DAT/01004.bin assets/decoded/images/dat_01004.png verified fully-mapped 1000:6129,1008:149d,1000:616e,1000:60e7 640x460 board background selected by index 4. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DAT 1005 2830336 294656 70cc938c97efe772759859524f3855bda4454c8bbf403ac0aa04a8d04a9ecf34 assets/raw/DAT/01005.bin assets/decoded/images/dat_01005.png verified fully-mapped 1000:6129,1008:149d,1000:616e,1000:60e7 640x460 board background selected by index 5. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. PAL 999 3124992 768 a116d7bbef4ee4f8228aa0fcaf5eea63057e460323d6ad9584fd1ffbc20d60d9 assets/raw/PAL/00999.bin assets/decoded/palettes/palette_0999.png,assets/decoded/palettes/palette_0999.gpl verified fully-mapped 1008:1326,1008:11c5,1008:13a8,1008:149d 256 RGB triples shared by all custom DAT DIBs. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2001 3125760 6400 751d21b1ed7d7f2acd4f8f52478dcf7d57be42ebc3059343c706a9253a84cdd8 assets/raw/WAV/02001.bin assets/decoded/audio/wav_02001.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:638e add-player cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2002 3132160 4608 ecc192f2d6bfd706f4d3f91cc6cbeb40fa91c50bd2f933da3e35c0258b637172 assets/raw/WAV/02002.bin assets/decoded/audio/wav_02002.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:638e launcher-release cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2004 3136768 7680 d84f7a3285fca2b40a219b7e796066bd0294692b2761f565d55b0deb6254f305 assets/raw/WAV/02004.bin assets/decoded/audio/wav_02004.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:c79c trigger-activation cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2006 3144448 3072 c803e22b0cfcc1dbd4ff8bfe966894d95b0f3217c4fc4954ca3ebf9dc5077e07 assets/raw/WAV/02006.bin assets/decoded/audio/wav_02006.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:b476 timed target 51..53 hit cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2007 3147520 30464 2e6d4a0ac436e0d5ceb508f4239e871081bf8319c8c44226e83d30dc780f90ab assets/raw/WAV/02007.bin assets/decoded/audio/wav_02007.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:b476,1000:bc36 score-marker or full-item-bank award cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2008 3177984 39168 b9a9af48f0794d51a8e3c0ee8c30e21382d35d8bbc76a28dc595940fbfe0eab1 assets/raw/WAV/02008.bin assets/decoded/audio/wav_02008.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:ae6e normal ball-end cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2011 3217152 6912 f7046a06ec0c990b334a1572d81a50d2215f31b112270c5a24344132dc805072 assets/raw/WAV/02011.bin assets/decoded/audio/wav_02011.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:6f27 rotating-target mechanism cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2012 3224064 512 c46c9b564f04eef86143875ece96f32171d0f9b788215e13f81738694403bb77 assets/raw/WAV/02012.bin assets/decoded/audio/wav_02012.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:b476,1000:7440 target and panel transition cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2013 3224576 46592 5dc24553391a2cc17e7388747f42ee63897c0e8f8cd74e18f83f60ff2986cacb assets/raw/WAV/02013.bin assets/decoded/audio/wav_02013.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:7440 panel-mechanism motion cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2015 3271168 8192 4e7fc9f71e187f7b89d5296583d400afc92cd84310c3b6e114a14c6c18cdd4db assets/raw/WAV/02015.bin assets/decoded/audio/wav_02015.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:c79c ball-capture cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2016 3279360 3584 72c76e72e9933d02dd4ca4c44434acd1a79591fe486f9bd6da73f59748ee0f1f assets/raw/WAV/02016.bin assets/decoded/audio/wav_02016.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:eab1 claw ball-release cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2017 3282944 35072 f7c91915c93302cb55cb703278e55ae3d08e3bb50b31ce50fbefe9a708f99926 assets/raw/WAV/02017.bin assets/decoded/audio/wav_02017.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:b476 completed target-bank/item award cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2019 3318016 5376 2b65c01e848225791efc58e9018f6b9e24e6da5cc753ca74c43b52cab1532cc6 assets/raw/WAV/02019.bin assets/decoded/audio/wav_02019.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:638e,1000:c79c table-nudge or kick-response cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2020 3323392 30208 45f03303ce04dc9dc470863bc2cbb638fa6b644afdd9792d8b47667130f71886 assets/raw/WAV/02020.bin assets/decoded/audio/wav_02020.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:638e tilt cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2021 3353600 3328 9f9be797898500c85a6494d2d157f535025f8858b4b085d52843f6605495a494 assets/raw/WAV/02021.bin assets/decoded/audio/wav_02021.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3,1000:7ed9 flipper-motion cue. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. WAV 2022 3356928 22272 e10196861e6eaf5656a5ba475c6226a9c2948b53ca7ee095a1fe7754d511410b assets/raw/WAV/02022.bin assets/decoded/audio/wav_02022.wav verified fully-mapped 1008:0f2e,1008:1131,1008:10e3 loaded and freed sound slot 22 with no in-image playback selector. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. BITMAP 101 3379200 256 828e3a3f570b6d5eb2406a4e751a1992b35f134138b22b3cda6f628eddc3268d assets/raw/BITMAP/00101.bin assets/decoded/images/bitmap_00101.bmp,assets/decoded/images/bitmap_00101.png verified fully-mapped 1000:5390,1000:9bca,1000:9f73,1000:a38e,1000:51f5 16x16 SRCPAINT object-composition image. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. BITMAP 102 3379456 256 8ddb45855da1a1edd14bf2a760f1ec87f77e107519821c9931097c9369f36fa9 assets/raw/BITMAP/00102.bin assets/decoded/images/bitmap_00102.bmp,assets/decoded/images/bitmap_00102.png verified fully-mapped 1000:5390,1000:9bca,1000:9f73,1000:a38e 16x16 SRCAND object-composition mask. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. BITMAP 500 3379712 13568 03bd8020f22a9d05abba8df794a9fedfdbbd3efe9c512d36aa3fdbfe939c73ed assets/raw/BITMAP/00500.bin assets/decoded/images/bitmap_00500.bmp,assets/decoded/images/bitmap_00500.png verified fully-mapped 1000:5390,1008:0996,1000:eab1,1000:51f5 944x28 score-digit and timer-indicator atlas. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. ICON 1 3393280 768 7700e0cb938f72c273919288a1d93f2d651d0fd1cc0aaf0fc6820ecb852a0cb5 assets/raw/ICON/00001.bin assets/decoded/icons/icon_00001.ico,assets/decoded/icons/icon_00001.png verified system-resolved GROUP_ICON:996 -> USER:LoadIcon 32x32 image selected by GROUP_ICON 996. Lossless extraction is verified; the Windows resource-system relationship and the absence of any additional in-image loader are fully accounted. GROUP_ICON 996 3394048 256 b6436bbb9fca95b8a94008d045bf87f404b0a02d7690a0191861d229841dc25b assets/raw/GROUP_ICON/00996.bin verified system-resolved 1000:016c main-window icon group loaded at 1000:016c. Lossless extraction is verified; the Windows resource-system relationship and the absence of any additional in-image loader are fully accounted. VERSION 1 3394304 512 95f627c29e452fff1032c16384f37128496a3bbc822c39247050f1382507dacc assets/raw/VERSION/00001.bin assets/decoded/metadata/version_00001.json verified system-resolved Windows resource/version consumers; no in-image call Windows version metadata with no image-code loader. Lossless extraction is verified; the Windows resource-system relationship and the absence of any additional in-image loader are fully accounted. DIALOG 32512 3394816 256 544570c3e1ac0cbcd690365d2191b71ffc1e6cb1fb525085cec317d41cac9be1 assets/raw/DIALOG/32512.bin assets/decoded/dialogs/dialog_32512.json verified linked-unused none (complete verified template-selector inventory) Borland 2D File Open template. Lossless extraction and decoded template structure are verified; the complete selector inventory across 391 verified functions has no user, so this Borland library template is explicitly retained as unused. DIALOG 32513 3395072 256 2e64029d822874a8a74c0ba1367c454d95d999ee8feda1465fe8b3f585d1b03d assets/raw/DIALOG/32513.bin assets/decoded/dialogs/dialog_32513.json verified linked-unused none (complete verified template-selector inventory) Borland 2D File Save As template. Lossless extraction and decoded template structure are verified; the complete selector inventory across 391 verified functions has no user, so this Borland library template is explicitly retained as unused. DIALOG 32514 3395328 256 f7f38c4f14d5fba42e370c438fc41e041e744aaef73c65a618070338b650cba1 assets/raw/DIALOG/32514.bin assets/decoded/dialogs/dialog_32514.json verified fully-mapped 1008:1607,1008:2996,1008:2a45,1008:2ae3 2D text-entry template selected at 1008:1607. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. DIALOG 32515 3395584 512 75a4de77aa549d3edbe4825c1345093ed8d6ae81559aad4514b0a853ec50921b assets/raw/DIALOG/32515.bin assets/decoded/dialogs/dialog_32515.json verified linked-unused none (complete verified template-selector inventory) Borland CTL3D File Open template. Lossless extraction and decoded template structure are verified; the complete selector inventory across 391 verified functions has no user, so this Borland library template is explicitly retained as unused. DIALOG 32516 3396096 512 dddb764f91fbd212481c1510c50875a289f9f525674c2bc7eefbf94b8ce892ef assets/raw/DIALOG/32516.bin assets/decoded/dialogs/dialog_32516.json verified linked-unused none (complete verified template-selector inventory) Borland CTL3D File Save As template. Lossless extraction and decoded template structure are verified; the complete selector inventory across 391 verified functions has no user, so this Borland library template is explicitly retained as unused. DIALOG 32517 3396608 256 be406a27876296e9ac46021d67b1591f9bffa0a98a9a55a53ecb9adddc660ef6 assets/raw/DIALOG/32517.bin assets/decoded/dialogs/dialog_32517.json verified fully-mapped 1008:1607,1008:2996,1008:2a45,1008:2ae3 CTL3D text-entry template selected at 1008:1607. Lossless extraction, decoded derivative, exact load/use/release lifecycle, and complete verified function closure are represented in reconstructed/tdkpin_resources.c and the cited reconstruction units. Ƙ+qxaddress containing_function status reconstructed_name evidence notes 1020:04a0 1020:049f verified borland_assign_text_short bytes 1020:049f-04a1 decode as MOV DX,0xd233 at 049f and XOR DX,DX at 04a0; common body 04a2-04fb Overlapping Borland runtime entry for Pascal ShortString names; containing ledger row accounts for the shared executable body. 1020:06b4 1020:06ab verified borland_create_generic_file bytes 1020:06ab-06b9 select AH=3d/global access and empty-name handle 0 at 06ab or AH=3c/attributes 0 and empty-name handle 1 at 06b4; common body 06ba-070f Overlapping Open/Create generic-file entry pair. 1020:0765 1020:0760 verified borland_file_write_record bytes 1020:0760-0769 select AH=3f/error 0x64 at 0760 or AH=40/error 0x65 at 0765; common body 076a-0795 Overlapping single-record Read/Write entry pair. 1020:079b 1020:0796 verified borland_file_block_write bytes 1020:0796-079f select BL=3f/error 0x64 at 0796 or BL=40/error 0x65 at 079b; common body 07a0-07fd Overlapping BlockRead/BlockWrite entry pair. 1020:100f 1020:1017 verified borland_real48_truncate_to_i32 bytes 1020:100f-1016 set CH=0, call conversion core 0f77, and RETF on success; bytes 101f-1024 are the Runtime Error 207 tail shared with Round entry 1017 disassembleOnly evidence was previously structural; readable Trunc semantics, overflow candidate, and shared error tail are now explicitly represented and DOSBox-differentially tested. 1020:1130 1020:111d verified borland_real48_sin bytes 1020:111d-112f form the Cos-only pi/2-x prelude; 1130-1190 are a complete shared Sin body ending RETF; table 1191-11ba contains -1/15! through -1/3! Exact modulo-2pi, quadrant folding, odd polynomial, small-argument bypass, half-cycle sign, and independent Sin entry are represented and differentially tested against original-offset bytes. 5[yMxaddress block name symbol_type source primary dynamic EXTERNAL:00000001 GETVERSION Function IMPORTED true false EXTERNAL:00000002 GLOBALALLOC Function IMPORTED true false EXTERNAL:00000003 GLOBALFREE Function IMPORTED true false EXTERNAL:00000004 GLOBALLOCK Function IMPORTED true false EXTERNAL:00000005 GLOBALUNLOCK Function IMPORTED true false EXTERNAL:00000006 GLOBALHANDLE Function IMPORTED true false EXTERNAL:00000007 GLOBALCOMPACT Function IMPORTED true false EXTERNAL:00000008 WAITEVENT Function IMPORTED true false EXTERNAL:00000009 GETCURRENTTASK Function IMPORTED true false EXTERNAL:0000000a GETMODULEHANDLE Function IMPORTED true false EXTERNAL:0000000b GETMODULEFILENAME Function IMPORTED true false EXTERNAL:0000000c GETPROCADDRESS Function IMPORTED true false EXTERNAL:0000000d MAKEPROCINSTANCE Function IMPORTED true false EXTERNAL:0000000e FREEPROCINSTANCE Function IMPORTED true false EXTERNAL:0000000f FINDRESOURCE Function IMPORTED true false EXTERNAL:00000010 LOADRESOURCE Function IMPORTED true false EXTERNAL:00000011 LOCKRESOURCE Function IMPORTED true false EXTERNAL:00000012 FREERESOURCE Function IMPORTED true false EXTERNAL:00000013 _LCLOSE Function IMPORTED true false EXTERNAL:00000014 _LREAD Function IMPORTED true false EXTERNAL:00000015 _LCREAT Function IMPORTED true false EXTERNAL:00000016 _LOPEN Function IMPORTED true false EXTERNAL:00000017 _LWRITE Function IMPORTED true false EXTERNAL:00000018 INITTASK Function IMPORTED true false EXTERNAL:00000019 LOADLIBRARY Function IMPORTED true false EXTERNAL:0000001a FREELIBRARY Function IMPORTED true false EXTERNAL:0000001b SETERRORMODE Function IMPORTED true false EXTERNAL:0000001c __AHINCR Function IMPORTED true false EXTERNAL:0000001d GETPRIVATEPROFILEINT Function IMPORTED true false EXTERNAL:0000001e GETDOSENVIRONMENT Function IMPORTED true false EXTERNAL:0000001f GETWINFLAGS Function IMPORTED true false EXTERNAL:00000020 GETWINDOWSDIRECTORY Function IMPORTED true false EXTERNAL:00000021 GETSYSTEMDIRECTORY Function IMPORTED true false EXTERNAL:00000022 GETFREESPACE Function IMPORTED true false EXTERNAL:00000023 ALLOCCSTODSALIAS Function IMPORTED true false EXTERNAL:00000024 FREESELECTOR Function IMPORTED true false EXTERNAL:00000025 PRESTOCHANGOSELECTOR Function IMPORTED true false EXTERNAL:00000026 SYSTEMTIMERMAKE Function IMPORTED true false EXTERNAL:00000027 SNDPLAYSOUND Function IMPORTED true false EXTERNAL:00000028 WAVEOUTGETNUMDEVS Function IMPORTED true false EXTERNAL:00000029 WAVEOUTGETDEVCAPS Function IMPORTED true false EXTERNAL:0000002a WAVEOUTGETVOLUME Function IMPORTED true false EXTERNAL:0000002b TIMEKILLEVENT Function IMPORTED true false EXTERNAL:0000002c SETBKCOLOR Function IMPORTED true false EXTERNAL:0000002d SETBKMODE Function IMPORTED true false EXTERNAL:0000002e SETTEXTCOLOR Function IMPORTED true false EXTERNAL:0000002f TEXTOUT Function IMPORTED true false EXTERNAL:00000030 BITBLT Function IMPORTED true false EXTERNAL:00000031 SELECTOBJECT Function IMPORTED true false EXTERNAL:00000032 CREATECOMPATIBLEBITMAP Function IMPORTED true false EXTERNAL:00000033 CREATECOMPATIBLEDC Function IMPORTED true false EXTERNAL:00000034 CREATEDC Function IMPORTED true false EXTERNAL:00000035 DELETEDC Function IMPORTED true false EXTERNAL:00000036 DELETEOBJECT Function IMPORTED true false EXTERNAL:00000037 GETSTOCKOBJECT Function IMPORTED true false EXTERNAL:00000038 GETTEXTCOLOR Function IMPORTED true false EXTERNAL:00000039 GETTEXTMETRICS Function IMPORTED true false EXTERNAL:0000003a UNREALIZEOBJECT Function IMPORTED true false EXTERNAL:0000003b SETTEXTALIGN Function IMPORTED true false EXTERNAL:0000003c CREATEPALETTE Function IMPORTED true false EXTERNAL:0000003d UPDATECOLORS Function IMPORTED true false EXTERNAL:0000003e CREATEDIBITMAP Function IMPORTED true false EXTERNAL:0000003f MESSAGEBOX Function IMPORTED true false EXTERNAL:00000040 INITAPP Function IMPORTED true false EXTERNAL:00000041 POSTQUITMESSAGE Function IMPORTED true false EXTERNAL:00000042 GETTICKCOUNT Function IMPORTED true false EXTERNAL:00000043 SETCAPTURE Function IMPORTED true false EXTERNAL:00000044 RELEASECAPTURE Function IMPORTED true false EXTERNAL:00000045 SETFOCUS Function IMPORTED true false EXTERNAL:00000046 GETFOCUS Function IMPORTED true false EXTERNAL:00000047 REMOVEPROP Function IMPORTED true false EXTERNAL:00000048 GETPROP Function IMPORTED true false EXTERNAL:00000049 SETPROP Function IMPORTED true false EXTERNAL:0000004a SCREENTOCLIENT Function IMPORTED true false EXTERNAL:0000004b ISICONIC Function IMPORTED true false EXTERNAL:0000004c GETWINDOWRECT Function IMPORTED true false EXTERNAL:0000004d GETCLIENTRECT Function IMPORTED true false EXTERNAL:0000004e GETWINDOWTEXT Function IMPORTED true false EXTERNAL:0000004f SETWINDOWTEXT Function IMPORTED true false EXTERNAL:00000050 BEGINPAINT Function IMPORTED true false EXTERNAL:00000051 ENDPAINT Function IMPORTED true false EXTERNAL:00000052 CREATEWINDOW Function IMPORTED true false EXTERNAL:00000053 SHOWWINDOW Function IMPORTED true false EXTERNAL:00000054 GETPARENT Function IMPORTED true false EXTERNAL:00000055 ISWINDOW Function IMPORTED true false EXTERNAL:00000056 ISCHILD Function IMPORTED true false EXTERNAL:00000057 DESTROYWINDOW Function IMPORTED true false EXTERNAL:00000058 REGISTERCLASS Function IMPORTED true false EXTERNAL:00000059 SCROLLWINDOW Function IMPORTED true false EXTERNAL:0000005a SETSCROLLPOS Function IMPORTED true false EXTERNAL:0000005b SETSCROLLRANGE Function IMPORTED true false EXTERNAL:0000005c GETDC Function IMPORTED true false EXTERNAL:0000005d RELEASEDC Function IMPORTED true false EXTERNAL:0000005e SETCURSOR Function IMPORTED true false EXTERNAL:0000005f ENDDIALOG Function IMPORTED true false EXTERNAL:00000060 ISDIALOGMESSAGE Function IMPORTED true false EXTERNAL:00000061 GETDLGITEM Function IMPORTED true false EXTERNAL:00000062 SETDLGITEMTEXT Function IMPORTED true false EXTERNAL:00000063 GETDLGITEMTEXT Function IMPORTED true false EXTERNAL:00000064 SENDDLGITEMMESSAGE Function IMPORTED true false EXTERNAL:00000065 MESSAGEBEEP Function IMPORTED true false EXTERNAL:00000066 GETKEYSTATE Function IMPORTED true false EXTERNAL:00000067 DEFWINDOWPROC Function IMPORTED true false EXTERNAL:00000068 GETMESSAGE Function IMPORTED true false EXTERNAL:00000069 PEEKMESSAGE Function IMPORTED true false EXTERNAL:0000006a SENDMESSAGE Function IMPORTED true false EXTERNAL:0000006b WAITMESSAGE Function IMPORTED true false EXTERNAL:0000006c TRANSLATEMESSAGE Function IMPORTED true false EXTERNAL:0000006d DISPATCHMESSAGE Function IMPORTED true false EXTERNAL:0000006e CALLWINDOWPROC Function IMPORTED true false EXTERNAL:0000006f UPDATEWINDOW Function IMPORTED true false EXTERNAL:00000070 INVALIDATERECT Function IMPORTED true false EXTERNAL:00000071 GETWINDOWWORD Function IMPORTED true false EXTERNAL:00000072 GETWINDOWLONG Function IMPORTED true false EXTERNAL:00000073 SETWINDOWLONG Function IMPORTED true false EXTERNAL:00000074 ENABLEMENUITEM Function IMPORTED true false EXTERNAL:00000075 GETSYSTEMMENU Function IMPORTED true false EXTERNAL:00000076 CREATECARET Function IMPORTED true false EXTERNAL:00000077 DESTROYCARET Function IMPORTED true false EXTERNAL:00000078 SETCARETPOS Function IMPORTED true false EXTERNAL:00000079 SHOWCARET Function IMPORTED true false EXTERNAL:0000007a LOADCURSOR Function IMPORTED true false EXTERNAL:0000007b LOADICON Function IMPORTED true false EXTERNAL:0000007c LOADBITMAP Function IMPORTED true false EXTERNAL:0000007d TRANSLATEACCELERATOR Function IMPORTED true false EXTERNAL:0000007e GETSYSTEMMETRICS Function IMPORTED true false EXTERNAL:0000007f GETSYSCOLOR Function IMPORTED true false EXTERNAL:00000080 DIALOGBOXPARAM Function IMPORTED true false EXTERNAL:00000081 CREATEDIALOGPARAM Function IMPORTED true false EXTERNAL:00000082 ISZOOMED Function IMPORTED true false EXTERNAL:00000083 SELECTPALETTE Function IMPORTED true false EXTERNAL:00000084 REALIZEPALETTE Function IMPORTED true false EXTERNAL:00000085 DEFDLGPROC Function IMPORTED true false EXTERNAL:00000086 GETCLASSINFO Function IMPORTED true false EXTERNAL:00000087 WVSPRINTF Function IMPORTED true false EXTERNAL:00000088 DEFMDICHILDPROC Function IMPORTED true false EXTERNAL:00000089 TRANSLATEMDISYSACCEL Function IMPORTED true false EXTERNAL:0000008a CREATEWINDOWEX Function IMPORTED true false EXTERNAL:0000008b Ordinal_5 Function IMPORTED true false EXTERNAL:0000008c Ordinal_6 Function IMPORTED true false 1000:0000 Code1 code_segment_1_tag Label USER_DEFINED true false 1000:0002 Code1 FUN_1000_0002 Function DEFAULT true false 1000:0100 Code1 FUN_1000_0100 Function DEFAULT true false 1000:0121 Code1 FUN_1000_0121 Function DEFAULT true false 1000:014e Code1 LAB_1000_014e Label DEFAULT true true 1000:0168 Code1 LAB_1000_0168 Label DEFAULT true true 1000:016c Code1 FUN_1000_016c Function DEFAULT true false 1000:01d3 Code1 FUN_1000_01d3 Function DEFAULT true false 1000:01e3 Code1 LAB_1000_01e3 Label DEFAULT true true 1000:0265 Code1 LAB_1000_0265 Label DEFAULT true true 1000:026e Code1 code1_embedded_word_026e Label USER_DEFINED true false 1000:0270 Code1 FUN_1000_0270 Function DEFAULT true false 1000:02ab Code1 LAB_1000_02ab Label DEFAULT true true 1000:02cf Code1 LAB_1000_02cf Label DEFAULT true true 1000:041c Code1 LAB_1000_041c Label DEFAULT true true 1000:041f Code1 LAB_1000_041f Label DEFAULT true true 1000:0464 Code1 LAB_1000_0464 Label DEFAULT true true 1000:0467 Code1 LAB_1000_0467 Label DEFAULT true true 1000:061e Code1 LAB_1000_061e Label DEFAULT true true 1000:0624 Code1 LAB_1000_0624 Label DEFAULT true true 1000:0650 Code1 LAB_1000_0650 Label DEFAULT true true 1000:0658 Code1 LAB_1000_0658 Label DEFAULT true true 1000:068a Code1 LAB_1000_068a Label DEFAULT true true 1000:06b8 Code1 LAB_1000_06b8 Label DEFAULT true true 1000:06e6 Code1 LAB_1000_06e6 Label DEFAULT true true 1000:0713 Code1 LAB_1000_0713 Label DEFAULT true true 1000:0740 Code1 LAB_1000_0740 Label DEFAULT true true 1000:0767 Code1 LAB_1000_0767 Label DEFAULT true true 1000:07b4 Code1 LAB_1000_07b4 Label DEFAULT true true 1000:51ae Code1 LAB_1000_51ae Label DEFAULT true true 1000:51b1 Code1 LAB_1000_51b1 Label DEFAULT true true 1000:51f5 Code1 FUN_1000_51f5 Function DEFAULT true false 1000:523b Code1 LAB_1000_523b Label DEFAULT true true 1000:5292 Code1 LAB_1000_5292 Label DEFAULT true true 1000:5295 Code1 LAB_1000_5295 Label DEFAULT true true 1000:52b0 Code1 LAB_1000_52b0 Label DEFAULT true true 1000:52b3 Code1 LAB_1000_52b3 Label DEFAULT true true 1000:52ce Code1 LAB_1000_52ce Label DEFAULT true true 1000:52d1 Code1 LAB_1000_52d1 Label DEFAULT true true 1000:531e Code1 FUN_1000_531e Function DEFAULT true false 1000:5390 Code1 FUN_1000_5390 Function DEFAULT true false 1000:53c5 Code1 LAB_1000_53c5 Label DEFAULT true true 1000:54a0 Code1 LAB_1000_54a0 Label DEFAULT true true 1000:54a3 Code1 LAB_1000_54a3 Label DEFAULT true true 1000:54d8 Code1 LAB_1000_54d8 Label DEFAULT true true 1000:54db Code1 LAB_1000_54db Label DEFAULT true true 1000:5510 Code1 LAB_1000_5510 Label DEFAULT true true 1000:5513 Code1 LAB_1000_5513 Label DEFAULT true true 1000:5619 Code1 LAB_1000_5619 Label DEFAULT true true 1000:5627 Code1 LAB_1000_5627 Label DEFAULT true true 1000:5716 Code1 LAB_1000_5716 Label DEFAULT true true 1000:5721 Code1 LAB_1000_5721 Label DEFAULT true true 1000:5731 Code1 LAB_1000_5731 Label DEFAULT true true 1000:573c Code1 LAB_1000_573c Label DEFAULT true true 1000:574a Code1 LAB_1000_574a Label DEFAULT true true 1000:57fb Code1 LAB_1000_57fb Label DEFAULT true true 1000:5890 Code1 LAB_1000_5890 Label DEFAULT true true 1000:5893 Code1 LAB_1000_5893 Label DEFAULT true true 1000:58a9 Code1 LAB_1000_58a9 Label DEFAULT true true 1000:58b7 Code1 LAB_1000_58b7 Label DEFAULT true true 1000:58e3 Code1 LAB_1000_58e3 Label DEFAULT true true 1000:58e7 Code1 FUN_1000_58e7 Function DEFAULT true false 1000:5901 Code1 LAB_1000_5901 Label DEFAULT true true 1000:594f Code1 LAB_1000_594f Label DEFAULT true true 1000:5956 Code1 FUN_1000_5956 Function DEFAULT true false 1000:599c Code1 LAB_1000_599c Label DEFAULT true true 1000:59a0 Code1 FUN_1000_59a0 Function DEFAULT true false 1000:59ce Code1 LAB_1000_59ce Label DEFAULT true true 1000:59d0 Code1 LAB_1000_59d0 Label DEFAULT true true 1000:5a30 Code1 LAB_1000_5a30 Label DEFAULT true true 1000:5a37 Code1 FUN_1000_5a37 Function DEFAULT true false 1000:5a9a Code1 LAB_1000_5a9a Label DEFAULT true true 1000:5ab7 Code1 FUN_1000_5ab7 Function DEFAULT true false 1000:5aea Code1 FUN_1000_5aea Function DEFAULT true false 1000:5afa Code1 LAB_1000_5afa Label DEFAULT true true 1000:5b9d Code1 LAB_1000_5b9d Label DEFAULT true true 1000:5ba6 Code1 FUN_1000_5ba6 Function DEFAULT true false 1000:5be5 Code1 FUN_1000_5be5 Function DEFAULT true false 1000:5c13 Code1 FUN_1000_5c13 Function DEFAULT true false 1000:5d1e Code1 LAB_1000_5d1e Label DEFAULT true true 1000:5d22 Code1 LAB_1000_5d22 Label DEFAULT true true 1000:5d51 Code1 LAB_1000_5d51 Label DEFAULT true true 1000:5d60 Code1 LAB_1000_5d60 Label DEFAULT true true 1000:5e59 Code1 LAB_1000_5e59 Label DEFAULT true true 1000:5ee6 Code1 FUN_1000_5ee6 Function DEFAULT true false 1000:5efc Code1 FUN_1000_5efc Function DEFAULT true false 1000:5f22 Code1 LAB_1000_5f22 Label DEFAULT true true 1000:5f29 Code1 FUN_1000_5f29 Function DEFAULT true false 1000:5f57 Code1 LAB_1000_5f57 Label DEFAULT true true 1000:5f59 Code1 LAB_1000_5f59 Label DEFAULT true true 1000:5fb9 Code1 LAB_1000_5fb9 Label DEFAULT true true 1000:5fc0 Code1 FUN_1000_5fc0 Function DEFAULT true false 1000:6023 Code1 LAB_1000_6023 Label DEFAULT true true 1000:6040 Code1 FUN_1000_6040 Function DEFAULT true false 1000:6073 Code1 FUN_1000_6073 Function DEFAULT true false 1000:60de Code1 LAB_1000_60de Label DEFAULT true true 1000:60e7 Code1 FUN_1000_60e7 Function DEFAULT true false 1000:6129 Code1 FUN_1000_6129 Function DEFAULT true false 1000:616e Code1 FUN_1000_616e Function DEFAULT true false 1000:6202 Code1 FUN_1000_6202 Function DEFAULT true false 1000:6218 Code1 FUN_1000_6218 Function DEFAULT true false 1000:623e Code1 LAB_1000_623e Label DEFAULT true true 1000:6245 Code1 FUN_1000_6245 Function DEFAULT true false 1000:6273 Code1 LAB_1000_6273 Label DEFAULT true true 1000:6275 Code1 LAB_1000_6275 Label DEFAULT true true 1000:62d5 Code1 LAB_1000_62d5 Label DEFAULT true true 1000:62dc Code1 FUN_1000_62dc Function DEFAULT true false 1000:633f Code1 LAB_1000_633f Label DEFAULT true true 1000:635c Code1 FUN_1000_635c Function DEFAULT true false 1000:638e Code1 FUN_1000_638e Function DEFAULT true false 1000:63a2 Code1 LAB_1000_63a2 Label DEFAULT true true 1000:63af Code1 LAB_1000_63af Label DEFAULT true true 1000:63d6 Code1 LAB_1000_63d6 Label DEFAULT true true 1000:641a Code1 LAB_1000_641a Label DEFAULT true true 1000:6428 Code1 LAB_1000_6428 Label DEFAULT true true 1000:6433 Code1 LAB_1000_6433 Label DEFAULT true true 1000:643c Code1 LAB_1000_643c Label DEFAULT true true 1000:6446 Code1 LAB_1000_6446 Label DEFAULT true true 1000:64a0 Code1 LAB_1000_64a0 Label DEFAULT true true 1000:64db Code1 LAB_1000_64db Label DEFAULT true true 1000:6518 Code1 LAB_1000_6518 Label DEFAULT true true 1000:654c Code1 LAB_1000_654c Label DEFAULT true true 1000:65aa Code1 LAB_1000_65aa Label DEFAULT true true 1000:65bc Code1 LAB_1000_65bc Label DEFAULT true true 1000:65ce Code1 LAB_1000_65ce Label DEFAULT true true 1000:65d8 Code1 LAB_1000_65d8 Label DEFAULT true true 1000:65ed Code1 LAB_1000_65ed Label DEFAULT true true 1000:663c Code1 LAB_1000_663c Label DEFAULT true true 1000:667c Code1 LAB_1000_667c Label DEFAULT true true 1000:6685 Code1 LAB_1000_6685 Label DEFAULT true true 1000:671a Code1 LAB_1000_671a Label DEFAULT true true 1000:6727 Code1 LAB_1000_6727 Label DEFAULT true true 1000:6783 Code1 LAB_1000_6783 Label DEFAULT true true 1000:67d4 Code1 LAB_1000_67d4 Label DEFAULT true true 1000:67dd Code1 LAB_1000_67dd Label DEFAULT true true 1000:6872 Code1 LAB_1000_6872 Label DEFAULT true true 1000:68ed Code1 LAB_1000_68ed Label DEFAULT true true 1000:68f0 Code1 LAB_1000_68f0 Label DEFAULT true true 1000:6909 Code1 LAB_1000_6909 Label DEFAULT true true 1000:690b Code1 LAB_1000_690b Label DEFAULT true true 1000:6910 Code1 LAB_1000_6910 Label DEFAULT true true 1000:6913 Code1 LAB_1000_6913 Label DEFAULT true true 1000:6921 Code1 LAB_1000_6921 Label DEFAULT true true 1000:6930 Code1 LAB_1000_6930 Label DEFAULT true true 1000:693a Code1 LAB_1000_693a Label DEFAULT true true 1000:696e Code1 LAB_1000_696e Label DEFAULT true true 1000:6971 Code1 LAB_1000_6971 Label DEFAULT true true 1000:6986 Code1 LAB_1000_6986 Label DEFAULT true true 1000:6989 Code1 LAB_1000_6989 Label DEFAULT true true 1000:6a4e Code1 LAB_1000_6a4e Label DEFAULT true true 1000:6ac7 Code1 LAB_1000_6ac7 Label DEFAULT true true 1000:6ad0 Code1 LAB_1000_6ad0 Label DEFAULT true true 1000:6ad6 Code1 LAB_1000_6ad6 Label DEFAULT true true 1000:6ad9 Code1 LAB_1000_6ad9 Label DEFAULT true true 1000:6b1c Code1 LAB_1000_6b1c Label DEFAULT true true 1000:6b37 Code1 FUN_1000_6b37 Function DEFAULT true false 1000:6bf8 Code1 FUN_1000_6bf8 Function DEFAULT true false 1000:6c27 Code1 LAB_1000_6c27 Label DEFAULT true true 1000:6c34 Code1 LAB_1000_6c34 Label DEFAULT true true 1000:6c87 Code1 LAB_1000_6c87 Label DEFAULT true true 1000:6c95 Code1 LAB_1000_6c95 Label DEFAULT true true 1000:6ca0 Code1 LAB_1000_6ca0 Label DEFAULT true true 1000:6ca9 Code1 LAB_1000_6ca9 Label DEFAULT true true 1000:6cee Code1 LAB_1000_6cee Label DEFAULT true true 1000:6d1a Code1 LAB_1000_6d1a Label DEFAULT true true 1000:6d25 Code1 LAB_1000_6d25 Label DEFAULT true true 1000:6d49 Code1 LAB_1000_6d49 Label DEFAULT true true 1000:6d54 Code1 LAB_1000_6d54 Label DEFAULT true true 1000:6d78 Code1 LAB_1000_6d78 Label DEFAULT true true 1000:6d83 Code1 LAB_1000_6d83 Label DEFAULT true true 1000:6da7 Code1 LAB_1000_6da7 Label DEFAULT true true 1000:6db2 Code1 LAB_1000_6db2 Label DEFAULT true true 1000:6dd6 Code1 LAB_1000_6dd6 Label DEFAULT true true 1000:6de1 Code1 LAB_1000_6de1 Label DEFAULT true true 1000:6e05 Code1 LAB_1000_6e05 Label DEFAULT true true 1000:6e10 Code1 LAB_1000_6e10 Label DEFAULT true true 1000:6e34 Code1 LAB_1000_6e34 Label DEFAULT true true 1000:6e40 Code1 LAB_1000_6e40 Label DEFAULT true true 1000:6e64 Code1 LAB_1000_6e64 Label DEFAULT true true 1000:6e6f Code1 LAB_1000_6e6f Label DEFAULT true true 1000:6e93 Code1 LAB_1000_6e93 Label DEFAULT true true 1000:6e9e Code1 LAB_1000_6e9e Label DEFAULT true true 1000:6ec2 Code1 LAB_1000_6ec2 Label DEFAULT true true 1000:6ecd Code1 LAB_1000_6ecd Label DEFAULT true true 1000:6ed6 Code1 LAB_1000_6ed6 Label DEFAULT true true 1000:6ee5 Code1 LAB_1000_6ee5 Label DEFAULT true true 1000:6ee7 Code1 LAB_1000_6ee7 Label DEFAULT true true 1000:6efd Code1 LAB_1000_6efd Label DEFAULT true true 1000:6f0c Code1 LAB_1000_6f0c Label DEFAULT true true 1000:6f20 Code1 LAB_1000_6f20 Label DEFAULT true true 1000:6f27 Code1 FUN_1000_6f27 Function DEFAULT true false 1000:6f90 Code1 LAB_1000_6f90 Label DEFAULT true true 1000:6fc5 Code1 LAB_1000_6fc5 Label DEFAULT true true 1000:7106 Code1 LAB_1000_7106 Label DEFAULT true true 1000:7109 Code1 LAB_1000_7109 Label DEFAULT true true 1000:711b Code1 LAB_1000_711b Label DEFAULT true true 1000:715f Code1 LAB_1000_715f Label DEFAULT true true 1000:7199 Code1 LAB_1000_7199 Label DEFAULT true true 1000:71d3 Code1 LAB_1000_71d3 Label DEFAULT true true 1000:720c Code1 LAB_1000_720c Label DEFAULT true true 1000:7245 Code1 LAB_1000_7245 Label DEFAULT true true 1000:727c Code1 LAB_1000_727c Label DEFAULT true true 1000:72c3 Code1 LAB_1000_72c3 Label DEFAULT true true 1000:730a Code1 LAB_1000_730a Label DEFAULT true true 1000:7351 Code1 LAB_1000_7351 Label DEFAULT true true 1000:7398 Code1 LAB_1000_7398 Label DEFAULT true true 1000:73df Code1 LAB_1000_73df Label DEFAULT true true 1000:7440 Code1 FUN_1000_7440 Function DEFAULT true false 1000:74cc Code1 LAB_1000_74cc Label DEFAULT true true 1000:74d4 Code1 LAB_1000_74d4 Label DEFAULT true true 1000:751d Code1 LAB_1000_751d Label DEFAULT true true 1000:75b2 Code1 LAB_1000_75b2 Label DEFAULT true true 1000:75cf Code1 LAB_1000_75cf Label DEFAULT true true 1000:760c Code1 LAB_1000_760c Label DEFAULT true true 1000:762b Code1 LAB_1000_762b Label DEFAULT true true 1000:7669 Code1 LAB_1000_7669 Label DEFAULT true true 1000:7671 Code1 LAB_1000_7671 Label DEFAULT true true 1000:7679 Code1 LAB_1000_7679 Label DEFAULT true true 1000:768e Code1 LAB_1000_768e Label DEFAULT true true 1000:76bb Code1 LAB_1000_76bb Label DEFAULT true true 1000:7726 Code1 LAB_1000_7726 Label DEFAULT true true 1000:77c6 Code1 LAB_1000_77c6 Label DEFAULT true true 1000:77d2 Code1 LAB_1000_77d2 Label DEFAULT true true 1000:77dc Code1 LAB_1000_77dc Label DEFAULT true true 1000:787b Code1 LAB_1000_787b Label DEFAULT true true 1000:787e Code1 LAB_1000_787e Label DEFAULT true true 1000:789c Code1 LAB_1000_789c Label DEFAULT true true 1000:78bc Code1 LAB_1000_78bc Label DEFAULT true true 1000:78c4 Code1 LAB_1000_78c4 Label DEFAULT true true 1000:78cc Code1 LAB_1000_78cc Label DEFAULT true true 1000:78e2 Code1 LAB_1000_78e2 Label DEFAULT true true 1000:790b Code1 LAB_1000_790b Label DEFAULT true true 1000:7916 Code1 LAB_1000_7916 Label DEFAULT true true 1000:79b8 Code1 LAB_1000_79b8 Label DEFAULT true true 1000:7a20 Code1 LAB_1000_7a20 Label DEFAULT true true 1000:7a2c Code1 LAB_1000_7a2c Label DEFAULT true true 1000:7a37 Code1 LAB_1000_7a37 Label DEFAULT true true 1000:7a84 Code1 LAB_1000_7a84 Label DEFAULT true true 1000:7b23 Code1 LAB_1000_7b23 Label DEFAULT true true 1000:7b26 Code1 LAB_1000_7b26 Label DEFAULT true true 1000:7b2e Code1 LAB_1000_7b2e Label DEFAULT true true 1000:7b36 Code1 LAB_1000_7b36 Label DEFAULT true true 1000:7b4a Code1 LAB_1000_7b4a Label DEFAULT true true 1000:7bc4 Code1 LAB_1000_7bc4 Label DEFAULT true true 1000:7bcc Code1 LAB_1000_7bcc Label DEFAULT true true 1000:7bd4 Code1 LAB_1000_7bd4 Label DEFAULT true true 1000:7bea Code1 LAB_1000_7bea Label DEFAULT true true 1000:7c63 Code1 LAB_1000_7c63 Label DEFAULT true true 1000:7c6b Code1 LAB_1000_7c6b Label DEFAULT true true 1000:7c73 Code1 LAB_1000_7c73 Label DEFAULT true true 1000:7c89 Code1 LAB_1000_7c89 Label DEFAULT true true 1000:7db1 Code1 LAB_1000_7db1 Label DEFAULT true true 1000:7e12 Code1 FUN_1000_7e12 Function DEFAULT true false 1000:7e4b Code1 LAB_1000_7e4b Label DEFAULT true true 1000:7e57 Code1 LAB_1000_7e57 Label DEFAULT true true 1000:7e59 Code1 LAB_1000_7e59 Label DEFAULT true true 1000:7e82 Code1 LAB_1000_7e82 Label DEFAULT true true 1000:7e8e Code1 LAB_1000_7e8e Label DEFAULT true true 1000:7e92 Code1 FUN_1000_7e92 Function DEFAULT true false 1000:7ec5 Code1 LAB_1000_7ec5 Label DEFAULT true true 1000:7ed5 Code1 LAB_1000_7ed5 Label DEFAULT true true 1000:7ed9 Code1 FUN_1000_7ed9 Function DEFAULT true false 1000:7eef Code1 LAB_1000_7eef Label DEFAULT true true 1000:7fe0 Code1 LAB_1000_7fe0 Label DEFAULT true true 1000:7fe7 Code1 LAB_1000_7fe7 Label DEFAULT true true 1000:7fea Code1 LAB_1000_7fea Label DEFAULT true true 1000:7ff2 Code1 LAB_1000_7ff2 Label DEFAULT true true 1000:80e1 Code1 LAB_1000_80e1 Label DEFAULT true true 1000:80ea Code1 LAB_1000_80ea Label DEFAULT true true 1000:8136 Code1 LAB_1000_8136 Label DEFAULT true true 1000:8141 Code1 LAB_1000_8141 Label DEFAULT true true 1000:8149 Code1 LAB_1000_8149 Label DEFAULT true true 1000:8151 Code1 LAB_1000_8151 Label DEFAULT true true 1000:8176 Code1 LAB_1000_8176 Label DEFAULT true true 1000:817f Code1 LAB_1000_817f Label DEFAULT true true 1000:8188 Code1 LAB_1000_8188 Label DEFAULT true true 1000:82b1 Code1 LAB_1000_82b1 Label DEFAULT true true 1000:83d7 Code1 LAB_1000_83d7 Label DEFAULT true true 1000:83f9 Code1 LAB_1000_83f9 Label DEFAULT true true 1000:8419 Code1 LAB_1000_8419 Label DEFAULT true true 1000:8433 Code1 LAB_1000_8433 Label DEFAULT true true 1000:843b Code1 LAB_1000_843b Label DEFAULT true true 1000:844d Code1 LAB_1000_844d Label DEFAULT true true 1000:8455 Code1 LAB_1000_8455 Label DEFAULT true true 1000:84d5 Code1 LAB_1000_84d5 Label DEFAULT true true 1000:84dd Code1 LAB_1000_84dd Label DEFAULT true true 1000:84f8 Code1 LAB_1000_84f8 Label DEFAULT true true 1000:8507 Code1 LAB_1000_8507 Label DEFAULT true true 1000:851a Code1 LAB_1000_851a Label DEFAULT true true 1000:8523 Code1 LAB_1000_8523 Label DEFAULT true true 1000:852c Code1 LAB_1000_852c Label DEFAULT true true 1000:8537 Code1 LAB_1000_8537 Label DEFAULT true true 1000:8541 Code1 LAB_1000_8541 Label DEFAULT true true 1000:854c Code1 LAB_1000_854c Label DEFAULT true true 1000:8556 Code1 LAB_1000_8556 Label DEFAULT true true 1000:8567 Code1 LAB_1000_8567 Label DEFAULT true true 1000:856f Code1 LAB_1000_856f Label DEFAULT true true 1000:85f1 Code1 LAB_1000_85f1 Label DEFAULT true true 1000:860a Code1 LAB_1000_860a Label DEFAULT true true 1000:8613 Code1 LAB_1000_8613 Label DEFAULT true true 1000:861c Code1 LAB_1000_861c Label DEFAULT true true 1000:8625 Code1 LAB_1000_8625 Label DEFAULT true true 1000:863c Code1 LAB_1000_863c Label DEFAULT true true 1000:8669 Code1 LAB_1000_8669 Label DEFAULT true true 1000:8687 Code1 LAB_1000_8687 Label DEFAULT true true 1000:869b Code1 LAB_1000_869b Label DEFAULT true true 1000:86b6 Code1 LAB_1000_86b6 Label DEFAULT true true 1000:86cd Code1 LAB_1000_86cd Label DEFAULT true true 1000:8748 Code1 LAB_1000_8748 Label DEFAULT true true 1000:875c Code1 LAB_1000_875c Label DEFAULT true true 1000:8774 Code1 LAB_1000_8774 Label DEFAULT true true 1000:8784 Code1 LAB_1000_8784 Label DEFAULT true true 1000:87b2 Code1 LAB_1000_87b2 Label DEFAULT true true 1000:87bc Code1 LAB_1000_87bc Label DEFAULT true true 1000:8acc Code1 LAB_1000_8acc Label DEFAULT true true 1000:8af1 Code1 LAB_1000_8af1 Label DEFAULT true true 1000:8b00 Code1 LAB_1000_8b00 Label DEFAULT true true 1000:8b09 Code1 LAB_1000_8b09 Label DEFAULT true true 1000:8b0d Code1 FUN_1000_8b0d Function DEFAULT true false 1000:8b4f Code1 LAB_1000_8b4f Label DEFAULT true true 1000:8b68 Code1 LAB_1000_8b68 Label DEFAULT true true 1000:8b72 Code1 LAB_1000_8b72 Label DEFAULT true true 1000:8caf Code1 LAB_1000_8caf Label DEFAULT true true 1000:8d01 Code1 LAB_1000_8d01 Label DEFAULT true true 1000:8d51 Code1 LAB_1000_8d51 Label DEFAULT true true 1000:8d79 Code1 LAB_1000_8d79 Label DEFAULT true true 1000:8dcb Code1 LAB_1000_8dcb Label DEFAULT true true 1000:8e1b Code1 LAB_1000_8e1b Label DEFAULT true true 1000:910b Code1 LAB_1000_910b Label DEFAULT true true 1000:9165 Code1 LAB_1000_9165 Label DEFAULT true true 1000:91bd Code1 LAB_1000_91bd Label DEFAULT true true 1000:91e9 Code1 LAB_1000_91e9 Label DEFAULT true true 1000:9243 Code1 LAB_1000_9243 Label DEFAULT true true 1000:929b Code1 LAB_1000_929b Label DEFAULT true true 1000:92c1 Code1 LAB_1000_92c1 Label DEFAULT true true 1000:92d2 Code1 LAB_1000_92d2 Label DEFAULT true true 1000:92e6 Code1 LAB_1000_92e6 Label DEFAULT true true 1000:92ed Code1 LAB_1000_92ed Label DEFAULT true true 1000:9416 Code1 LAB_1000_9416 Label DEFAULT true true 1000:9470 Code1 LAB_1000_9470 Label DEFAULT true true 1000:94c8 Code1 LAB_1000_94c8 Label DEFAULT true true 1000:94f4 Code1 LAB_1000_94f4 Label DEFAULT true true 1000:954e Code1 LAB_1000_954e Label DEFAULT true true 1000:95a6 Code1 LAB_1000_95a6 Label DEFAULT true true 1000:981e Code1 LAB_1000_981e Label DEFAULT true true 1000:9870 Code1 LAB_1000_9870 Label DEFAULT true true 1000:98c0 Code1 LAB_1000_98c0 Label DEFAULT true true 1000:98e8 Code1 LAB_1000_98e8 Label DEFAULT true true 1000:993a Code1 LAB_1000_993a Label DEFAULT true true 1000:998a Code1 LAB_1000_998a Label DEFAULT true true 1000:99b1 Code1 LAB_1000_99b1 Label DEFAULT true true 1000:99c3 Code1 LAB_1000_99c3 Label DEFAULT true true 1000:99d5 Code1 LAB_1000_99d5 Label DEFAULT true true 1000:99f0 Code1 FUN_1000_99f0 Function DEFAULT true false 1000:9a2f Code1 LAB_1000_9a2f Label DEFAULT true true 1000:9a68 Code1 LAB_1000_9a68 Label DEFAULT true true 1000:9aa3 Code1 LAB_1000_9aa3 Label DEFAULT true true 1000:9adc Code1 LAB_1000_9adc Label DEFAULT true true 1000:9ae0 Code1 FUN_1000_9ae0 Function DEFAULT true false 1000:9b01 Code1 LAB_1000_9b01 Label DEFAULT true true 1000:9b1e Code1 LAB_1000_9b1e Label DEFAULT true true 1000:9b3b Code1 LAB_1000_9b3b Label DEFAULT true true 1000:9b58 Code1 LAB_1000_9b58 Label DEFAULT true true 1000:9b5e Code1 LAB_1000_9b5e Label DEFAULT true true 1000:9b62 Code1 LAB_1000_9b62 Label DEFAULT true true 1000:9b69 Code1 FUN_1000_9b69 Function DEFAULT true false 1000:9b80 Code1 LAB_1000_9b80 Label DEFAULT true true 1000:9b93 Code1 LAB_1000_9b93 Label DEFAULT true true 1000:9ba6 Code1 LAB_1000_9ba6 Label DEFAULT true true 1000:9bb9 Code1 LAB_1000_9bb9 Label DEFAULT true true 1000:9bbf Code1 LAB_1000_9bbf Label DEFAULT true true 1000:9bc3 Code1 LAB_1000_9bc3 Label DEFAULT true true 1000:9bca Code1 FUN_1000_9bca Function DEFAULT true false 1000:9dd2 Code1 LAB_1000_9dd2 Label DEFAULT true true 1000:9de1 Code1 LAB_1000_9de1 Label DEFAULT true true 1000:9e85 Code1 FUN_1000_9e85 Function DEFAULT true false 1000:9ec5 Code1 LAB_1000_9ec5 Label DEFAULT true true 1000:9f73 Code1 FUN_1000_9f73 Function DEFAULT true false 1000:a0b0 Code1 LAB_1000_a0b0 Label DEFAULT true true 1000:a0f8 Code1 LAB_1000_a0f8 Label DEFAULT true true 1000:a11c Code1 LAB_1000_a11c Label DEFAULT true true 1000:a135 Code1 LAB_1000_a135 Label DEFAULT true true 1000:a17d Code1 LAB_1000_a17d Label DEFAULT true true 1000:a1a1 Code1 LAB_1000_a1a1 Label DEFAULT true true 1000:a1bd Code1 LAB_1000_a1bd Label DEFAULT true true 1000:a1e6 Code1 LAB_1000_a1e6 Label DEFAULT true true 1000:a2db Code1 LAB_1000_a2db Label DEFAULT true true 1000:a2ea Code1 LAB_1000_a2ea Label DEFAULT true true 1000:a38e Code1 FUN_1000_a38e Function DEFAULT true false 1000:a54b Code1 LAB_1000_a54b Label DEFAULT true true 1000:a55a Code1 LAB_1000_a55a Label DEFAULT true true 1000:a589 Code1 LAB_1000_a589 Label DEFAULT true true 1000:a604 Code1 FUN_1000_a604 Function DEFAULT true false 1000:a627 Code1 LAB_1000_a627 Label DEFAULT true true 1000:a62f Code1 LAB_1000_a62f Label DEFAULT true true 1000:a689 Code1 LAB_1000_a689 Label DEFAULT true true 1000:a6a9 Code1 LAB_1000_a6a9 Label DEFAULT true true 1000:a6c7 Code1 LAB_1000_a6c7 Label DEFAULT true true 1000:a6ee Code1 LAB_1000_a6ee Label DEFAULT true true 1000:a6f7 Code1 LAB_1000_a6f7 Label DEFAULT true true 1000:a70e Code1 FUN_1000_a70e Function DEFAULT true false 1000:a72c Code1 FUN_1000_a72c Function DEFAULT true false 1000:a736 Code1 LAB_1000_a736 Label DEFAULT true true 1000:a739 Code1 LAB_1000_a739 Label DEFAULT true true 1000:a74e Code1 LAB_1000_a74e Label DEFAULT true true 1000:a751 Code1 LAB_1000_a751 Label DEFAULT true true 1000:a791 Code1 LAB_1000_a791 Label DEFAULT true true 1000:a794 Code1 LAB_1000_a794 Label DEFAULT true true 1000:a7c4 Code1 LAB_1000_a7c4 Label DEFAULT true true 1000:a7c7 Code1 LAB_1000_a7c7 Label DEFAULT true true 1000:a7d3 Code1 LAB_1000_a7d3 Label DEFAULT true true 1000:a84c Code1 LAB_1000_a84c Label DEFAULT true true 1000:a85b Code1 LAB_1000_a85b Label DEFAULT true true 1000:a88c Code1 LAB_1000_a88c Label DEFAULT true true 1000:a88f Code1 LAB_1000_a88f Label DEFAULT true true 1000:a8b5 Code1 LAB_1000_a8b5 Label DEFAULT true true 1000:a8be Code1 LAB_1000_a8be Label DEFAULT true true 1000:a8ce Code1 LAB_1000_a8ce Label DEFAULT true true 1000:a8d1 Code1 LAB_1000_a8d1 Label DEFAULT true true 1000:a8ea Code1 FUN_1000_a8ea Function DEFAULT true false 1000:a906 Code1 LAB_1000_a906 Label DEFAULT true true 1000:a91d Code1 LAB_1000_a91d Label DEFAULT true true 1000:a920 Code1 LAB_1000_a920 Label DEFAULT true true 1000:a998 Code1 LAB_1000_a998 Label DEFAULT true true 1000:a99c Code1 FUN_1000_a99c Function DEFAULT true false 1000:a9c8 Code1 LAB_1000_a9c8 Label DEFAULT true true 1000:a9d1 Code1 LAB_1000_a9d1 Label DEFAULT true true 1000:aa35 Code1 LAB_1000_aa35 Label DEFAULT true true 1000:aa38 Code1 LAB_1000_aa38 Label DEFAULT true true 1000:aa60 Code1 LAB_1000_aa60 Label DEFAULT true true 1000:aa68 Code1 LAB_1000_aa68 Label DEFAULT true true 1000:aa71 Code1 LAB_1000_aa71 Label DEFAULT true true 1000:aa78 Code1 LAB_1000_aa78 Label DEFAULT true true 1000:aa7b Code1 LAB_1000_aa7b Label DEFAULT true true 1000:ab38 Code1 LAB_1000_ab38 Label DEFAULT true true 1000:ab3c Code1 FUN_1000_ab3c Function DEFAULT true false 1000:ab9c Code1 LAB_1000_ab9c Label DEFAULT true true 1000:abe5 Code1 FUN_1000_abe5 Function DEFAULT true false 1000:abf0 Code1 LAB_1000_abf0 Label DEFAULT true true 1000:abf3 Code1 LAB_1000_abf3 Label DEFAULT true true 1000:ac16 Code1 LAB_1000_ac16 Label DEFAULT true true 1000:ac1f Code1 LAB_1000_ac1f Label DEFAULT true true 1000:ac33 Code1 LAB_1000_ac33 Label DEFAULT true true 1000:ac36 Code1 LAB_1000_ac36 Label DEFAULT true true 1000:ac7b Code1 LAB_1000_ac7b Label DEFAULT true true 1000:acb5 Code1 LAB_1000_acb5 Label DEFAULT true true 1000:acbe Code1 LAB_1000_acbe Label DEFAULT true true 1000:acc2 Code1 FUN_1000_acc2 Function DEFAULT true false 1000:acf3 Code1 LAB_1000_acf3 Label DEFAULT true true 1000:acf9 Code1 LAB_1000_acf9 Label DEFAULT true true 1000:acfd Code1 LAB_1000_acfd Label DEFAULT true true 1000:ad4f Code1 LAB_1000_ad4f Label DEFAULT true true 1000:adf9 Code1 LAB_1000_adf9 Label DEFAULT true true 1000:ae42 Code1 LAB_1000_ae42 Label DEFAULT true true 1000:ae4f Code1 LAB_1000_ae4f Label DEFAULT true true 1000:ae6e Code1 FUN_1000_ae6e Function DEFAULT true false 1000:ae7c Code1 LAB_1000_ae7c Label DEFAULT true true 1000:ae86 Code1 LAB_1000_ae86 Label DEFAULT true true 1000:af80 Code1 LAB_1000_af80 Label DEFAULT true true 1000:afab Code1 LAB_1000_afab Label DEFAULT true true 1000:afed Code1 LAB_1000_afed Label DEFAULT true true 1000:b00f Code1 LAB_1000_b00f Label DEFAULT true true 1000:b012 Code1 LAB_1000_b012 Label DEFAULT true true 1000:b077 Code1 LAB_1000_b077 Label DEFAULT true true 1000:b0a3 Code1 LAB_1000_b0a3 Label DEFAULT true true 1000:b0b6 Code1 LAB_1000_b0b6 Label DEFAULT true true 1000:b0bc Code1 LAB_1000_b0bc Label DEFAULT true true 1000:b0bf Code1 LAB_1000_b0bf Label DEFAULT true true 1000:b12f Code1 LAB_1000_b12f Label DEFAULT true true 1000:b13b Code1 LAB_1000_b13b Label DEFAULT true true 1000:b13e Code1 LAB_1000_b13e Label DEFAULT true true 1000:b155 Code1 LAB_1000_b155 Label DEFAULT true true 1000:b161 Code1 LAB_1000_b161 Label DEFAULT true true 1000:b164 Code1 LAB_1000_b164 Label DEFAULT true true 1000:b187 Code1 LAB_1000_b187 Label DEFAULT true true 1000:b1a0 Code1 LAB_1000_b1a0 Label DEFAULT true true 1000:b1a3 Code1 LAB_1000_b1a3 Label DEFAULT true true 1000:b1cc Code1 LAB_1000_b1cc Label DEFAULT true true 1000:b20f Code1 LAB_1000_b20f Label DEFAULT true true 1000:b293 Code1 LAB_1000_b293 Label DEFAULT true true 1000:b2c4 Code1 LAB_1000_b2c4 Label DEFAULT true true 1000:b2c8 Code1 FUN_1000_b2c8 Function DEFAULT true false 1000:b30b Code1 FUN_1000_b30b Function DEFAULT true false 1000:b34e Code1 LAB_1000_b34e Label DEFAULT true true 1000:b370 Code1 LAB_1000_b370 Label DEFAULT true true 1000:b399 Code1 LAB_1000_b399 Label DEFAULT true true 1000:b3b0 Code1 FUN_1000_b3b0 Function DEFAULT true false 1000:b3f3 Code1 FUN_1000_b3f3 Function DEFAULT true false 1000:b436 Code1 LAB_1000_b436 Label DEFAULT true true 1000:b45f Code1 LAB_1000_b45f Label DEFAULT true true 1000:b476 Code1 FUN_1000_b476 Function DEFAULT true false 1000:b484 Code1 LAB_1000_b484 Label DEFAULT true true 1000:b4d7 Code1 LAB_1000_b4d7 Label DEFAULT true true 1000:b526 Code1 LAB_1000_b526 Label DEFAULT true true 1000:b54c Code1 LAB_1000_b54c Label DEFAULT true true 1000:b55a Code1 LAB_1000_b55a Label DEFAULT true true 1000:b5a2 Code1 LAB_1000_b5a2 Label DEFAULT true true 1000:b5b2 Code1 LAB_1000_b5b2 Label DEFAULT true true 1000:b5db Code1 LAB_1000_b5db Label DEFAULT true true 1000:b626 Code1 LAB_1000_b626 Label DEFAULT true true 1000:b634 Code1 LAB_1000_b634 Label DEFAULT true true 1000:b645 Code1 LAB_1000_b645 Label DEFAULT true true 1000:b648 Code1 LAB_1000_b648 Label DEFAULT true true 1000:b666 Code1 LAB_1000_b666 Label DEFAULT true true 1000:b66c Code1 LAB_1000_b66c Label DEFAULT true true 1000:b675 Code1 LAB_1000_b675 Label DEFAULT true true 1000:b69a Code1 LAB_1000_b69a Label DEFAULT true true 1000:b6b6 Code1 LAB_1000_b6b6 Label DEFAULT true true 1000:b6d1 Code1 LAB_1000_b6d1 Label DEFAULT true true 1000:b6ec Code1 LAB_1000_b6ec Label DEFAULT true true 1000:b6f2 Code1 LAB_1000_b6f2 Label DEFAULT true true 1000:b6f5 Code1 LAB_1000_b6f5 Label DEFAULT true true 1000:b758 Code1 LAB_1000_b758 Label DEFAULT true true 1000:b766 Code1 LAB_1000_b766 Label DEFAULT true true 1000:b777 Code1 LAB_1000_b777 Label DEFAULT true true 1000:b77a Code1 LAB_1000_b77a Label DEFAULT true true 1000:b798 Code1 LAB_1000_b798 Label DEFAULT true true 1000:b79e Code1 LAB_1000_b79e Label DEFAULT true true 1000:b7a7 Code1 LAB_1000_b7a7 Label DEFAULT true true 1000:b7b2 Code1 LAB_1000_b7b2 Label DEFAULT true true 1000:b7b5 Code1 LAB_1000_b7b5 Label DEFAULT true true 1000:b7de Code1 LAB_1000_b7de Label DEFAULT true true 1000:b839 Code1 LAB_1000_b839 Label DEFAULT true true 1000:b842 Code1 LAB_1000_b842 Label DEFAULT true true 1000:b998 Code1 LAB_1000_b998 Label DEFAULT true true 1000:ba13 Code1 LAB_1000_ba13 Label DEFAULT true true 1000:ba20 Code1 LAB_1000_ba20 Label DEFAULT true true 1000:ba26 Code1 LAB_1000_ba26 Label DEFAULT true true 1000:ba29 Code1 LAB_1000_ba29 Label DEFAULT true true 1000:ba8c Code1 LAB_1000_ba8c Label DEFAULT true true 1000:ba9a Code1 LAB_1000_ba9a Label DEFAULT true true 1000:bace Code1 LAB_1000_bace Label DEFAULT true true 1000:bafe Code1 LAB_1000_bafe Label DEFAULT true true 1000:bb2d Code1 LAB_1000_bb2d Label DEFAULT true true 1000:bb3b Code1 LAB_1000_bb3b Label DEFAULT true true 1000:bb83 Code1 LAB_1000_bb83 Label DEFAULT true true 1000:bbc7 Code1 LAB_1000_bbc7 Label DEFAULT true true 1000:bc0b Code1 LAB_1000_bc0b Label DEFAULT true true 1000:bc32 Code1 LAB_1000_bc32 Label DEFAULT true true 1000:bc36 Code1 FUN_1000_bc36 Function DEFAULT true false 1000:bc5c Code1 LAB_1000_bc5c Label DEFAULT true true 1000:bc66 Code1 LAB_1000_bc66 Label DEFAULT true true 1000:bc83 Code1 LAB_1000_bc83 Label DEFAULT true true 1000:bca8 Code1 LAB_1000_bca8 Label DEFAULT true true 1000:bd08 Code1 LAB_1000_bd08 Label DEFAULT true true 1000:bd3d Code1 LAB_1000_bd3d Label DEFAULT true true 1000:bd6e Code1 LAB_1000_bd6e Label DEFAULT true true 1000:bd7a Code1 LAB_1000_bd7a Label DEFAULT true true 1000:bda2 Code1 FUN_1000_bda2 Function DEFAULT true false 1000:bdde Code1 FUN_1000_bdde Function DEFAULT true false 1000:beff Code1 FUN_1000_beff Function DEFAULT true false 1000:c08d Code1 LAB_1000_c08d Label DEFAULT true true 1000:c0d5 Code1 LAB_1000_c0d5 Label DEFAULT true true 1000:c0f9 Code1 LAB_1000_c0f9 Label DEFAULT true true 1000:c112 Code1 LAB_1000_c112 Label DEFAULT true true 1000:c15a Code1 LAB_1000_c15a Label DEFAULT true true 1000:c17e Code1 LAB_1000_c17e Label DEFAULT true true 1000:c19a Code1 LAB_1000_c19a Label DEFAULT true true 1000:c1c3 Code1 LAB_1000_c1c3 Label DEFAULT true true 1000:c2b8 Code1 LAB_1000_c2b8 Label DEFAULT true true 1000:c2c7 Code1 LAB_1000_c2c7 Label DEFAULT true true 1000:c36b Code1 FUN_1000_c36b Function DEFAULT true false 1000:c426 Code1 FUN_1000_c426 Function DEFAULT true false 1000:c4e1 Code1 FUN_1000_c4e1 Function DEFAULT true false 1000:c55c Code1 LAB_1000_c55c Label DEFAULT true true 1000:c5c7 Code1 LAB_1000_c5c7 Label DEFAULT true true 1000:c632 Code1 LAB_1000_c632 Label DEFAULT true true 1000:c69d Code1 LAB_1000_c69d Label DEFAULT true true 1000:c708 Code1 LAB_1000_c708 Label DEFAULT true true 1000:c765 Code1 LAB_1000_c765 Label DEFAULT true true 1000:c786 Code1 LAB_1000_c786 Label DEFAULT true true 1000:c798 Code1 LAB_1000_c798 Label DEFAULT true true 1000:c79c Code1 FUN_1000_c79c Function DEFAULT true false 1000:c7cd Code1 LAB_1000_c7cd Label DEFAULT true true 1000:c7d2 Code1 LAB_1000_c7d2 Label DEFAULT true true 1000:c7d5 Code1 LAB_1000_c7d5 Label DEFAULT true true 1000:c7f3 Code1 LAB_1000_c7f3 Label DEFAULT true true 1000:c82f Code1 LAB_1000_c82f Label DEFAULT true true 1000:c835 Code1 LAB_1000_c835 Label DEFAULT true true 1000:c839 Code1 LAB_1000_c839 Label DEFAULT true true 1000:c8e5 Code1 LAB_1000_c8e5 Label DEFAULT true true 1000:c8ee Code1 LAB_1000_c8ee Label DEFAULT true true 1000:c9ee Code1 LAB_1000_c9ee Label DEFAULT true true 1000:cae8 Code1 LAB_1000_cae8 Label DEFAULT true true 1000:caf9 Code1 LAB_1000_caf9 Label DEFAULT true true 1000:cb09 Code1 LAB_1000_cb09 Label DEFAULT true true 1000:cb1a Code1 LAB_1000_cb1a Label DEFAULT true true 1000:cb3e Code1 LAB_1000_cb3e Label DEFAULT true true 1000:cb47 Code1 LAB_1000_cb47 Label DEFAULT true true 1000:cb58 Code1 LAB_1000_cb58 Label DEFAULT true true 1000:cb60 Code1 LAB_1000_cb60 Label DEFAULT true true 1000:cb66 Code1 LAB_1000_cb66 Label DEFAULT true true 1000:cb6d Code1 LAB_1000_cb6d Label DEFAULT true true 1000:cb70 Code1 LAB_1000_cb70 Label DEFAULT true true 1000:cb96 Code1 LAB_1000_cb96 Label DEFAULT true true 1000:cba0 Code1 LAB_1000_cba0 Label DEFAULT true true 1000:cbd0 Code1 LAB_1000_cbd0 Label DEFAULT true true 1000:cbde Code1 LAB_1000_cbde Label DEFAULT true true 1000:cbec Code1 LAB_1000_cbec Label DEFAULT true true 1000:cc7d Code1 LAB_1000_cc7d Label DEFAULT true true 1000:cccf Code1 LAB_1000_cccf Label DEFAULT true true 1000:ccdd Code1 LAB_1000_ccdd Label DEFAULT true true 1000:cd03 Code1 LAB_1000_cd03 Label DEFAULT true true 1000:cd0a Code1 LAB_1000_cd0a Label DEFAULT true true 1000:cd18 Code1 LAB_1000_cd18 Label DEFAULT true true 1000:cdb1 Code1 LAB_1000_cdb1 Label DEFAULT true true 1000:ce47 Code1 LAB_1000_ce47 Label DEFAULT true true 1000:ce62 Code1 LAB_1000_ce62 Label DEFAULT true true 1000:ce7b Code1 LAB_1000_ce7b Label DEFAULT true true 1000:ce84 Code1 LAB_1000_ce84 Label DEFAULT true true 1000:cef0 Code1 LAB_1000_cef0 Label DEFAULT true true 1000:cf4f Code1 LAB_1000_cf4f Label DEFAULT true true 1000:cf57 Code1 LAB_1000_cf57 Label DEFAULT true true 1000:cf65 Code1 LAB_1000_cf65 Label DEFAULT true true 1000:cf76 Code1 LAB_1000_cf76 Label DEFAULT true true 1000:cf91 Code1 LAB_1000_cf91 Label DEFAULT true true 1000:cf9b Code1 LAB_1000_cf9b Label DEFAULT true true 1000:cfb2 Code1 LAB_1000_cfb2 Label DEFAULT true true 1000:cfb5 Code1 LAB_1000_cfb5 Label DEFAULT true true 1000:cfbc Code1 LAB_1000_cfbc Label DEFAULT true true 1000:cfc6 Code1 LAB_1000_cfc6 Label DEFAULT true true 1000:cfea Code1 LAB_1000_cfea Label DEFAULT true true 1000:cff2 Code1 LAB_1000_cff2 Label DEFAULT true true 1000:d075 Code1 LAB_1000_d075 Label DEFAULT true true 1000:d0fe Code1 LAB_1000_d0fe Label DEFAULT true true 1000:d123 Code1 LAB_1000_d123 Label DEFAULT true true 1000:d12b Code1 LAB_1000_d12b Label DEFAULT true true 1000:d13e Code1 LAB_1000_d13e Label DEFAULT true true 1000:d185 Code1 LAB_1000_d185 Label DEFAULT true true 1000:d215 Code1 LAB_1000_d215 Label DEFAULT true true 1000:d2b9 Code1 LAB_1000_d2b9 Label DEFAULT true true 1000:d2bb Code1 LAB_1000_d2bb Label DEFAULT true true 1000:d2ca Code1 LAB_1000_d2ca Label DEFAULT true true 1000:d2cd Code1 LAB_1000_d2cd Label DEFAULT true true 1000:d301 Code1 LAB_1000_d301 Label DEFAULT true true 1000:d318 Code1 LAB_1000_d318 Label DEFAULT true true 1000:d3f4 Code1 LAB_1000_d3f4 Label DEFAULT true true 1000:d400 Code1 LAB_1000_d400 Label DEFAULT true true 1000:d403 Code1 LAB_1000_d403 Label DEFAULT true true 1000:d40a Code1 LAB_1000_d40a Label DEFAULT true true 1000:d608 Code1 LAB_1000_d608 Label DEFAULT true true 1000:d610 Code1 LAB_1000_d610 Label DEFAULT true true 1000:d61b Code1 LAB_1000_d61b Label DEFAULT true true 1000:d624 Code1 LAB_1000_d624 Label DEFAULT true true 1000:d64b Code1 LAB_1000_d64b Label DEFAULT true true 1000:d654 Code1 LAB_1000_d654 Label DEFAULT true true 1000:d65b Code1 LAB_1000_d65b Label DEFAULT true true 1000:d6e7 Code1 LAB_1000_d6e7 Label DEFAULT true true 1000:d6ef Code1 LAB_1000_d6ef Label DEFAULT true true 1000:d77d Code1 LAB_1000_d77d Label DEFAULT true true 1000:d782 Code1 LAB_1000_d782 Label DEFAULT true true 1000:d785 Code1 LAB_1000_d785 Label DEFAULT true true 1000:d78c Code1 LAB_1000_d78c Label DEFAULT true true 1000:d815 Code1 LAB_1000_d815 Label DEFAULT true true 1000:d84f Code1 LAB_1000_d84f Label DEFAULT true true 1000:d859 Code1 LAB_1000_d859 Label DEFAULT true true 1000:d879 Code1 LAB_1000_d879 Label DEFAULT true true 1000:d892 Code1 LAB_1000_d892 Label DEFAULT true true 1000:d899 Code1 LAB_1000_d899 Label DEFAULT true true 1000:d8aa Code1 LAB_1000_d8aa Label DEFAULT true true 1000:d8be Code1 LAB_1000_d8be Label DEFAULT true true 1000:d8ca Code1 LAB_1000_d8ca Label DEFAULT true true 1000:d8f2 Code1 LAB_1000_d8f2 Label DEFAULT true true 1000:d8fc Code1 LAB_1000_d8fc Label DEFAULT true true 1000:d904 Code1 LAB_1000_d904 Label DEFAULT true true 1000:d92c Code1 LAB_1000_d92c Label DEFAULT true true 1000:d936 Code1 LAB_1000_d936 Label DEFAULT true true 1000:d93e Code1 LAB_1000_d93e Label DEFAULT true true 1000:d94f Code1 LAB_1000_d94f Label DEFAULT true true 1000:d959 Code1 LAB_1000_d959 Label DEFAULT true true 1000:d961 Code1 LAB_1000_d961 Label DEFAULT true true 1000:d972 Code1 LAB_1000_d972 Label DEFAULT true true 1000:d97e Code1 LAB_1000_d97e Label DEFAULT true true 1000:d9b3 Code1 LAB_1000_d9b3 Label DEFAULT true true 1000:d9d0 Code1 LAB_1000_d9d0 Label DEFAULT true true 1000:d9f1 Code1 LAB_1000_d9f1 Label DEFAULT true true 1000:d9f4 Code1 LAB_1000_d9f4 Label DEFAULT true true 1000:da0e Code1 LAB_1000_da0e Label DEFAULT true true 1000:da55 Code1 LAB_1000_da55 Label DEFAULT true true 1000:da9a Code1 LAB_1000_da9a Label DEFAULT true true 1000:dab4 Code1 LAB_1000_dab4 Label DEFAULT true true 1000:dafb Code1 LAB_1000_dafb Label DEFAULT true true 1000:db40 Code1 LAB_1000_db40 Label DEFAULT true true 1000:db43 Code1 LAB_1000_db43 Label DEFAULT true true 1000:db4c Code1 LAB_1000_db4c Label DEFAULT true true 1000:db56 Code1 LAB_1000_db56 Label DEFAULT true true 1000:db70 Code1 LAB_1000_db70 Label DEFAULT true true 1000:db7d Code1 LAB_1000_db7d Label DEFAULT true true 1000:db8a Code1 LAB_1000_db8a Label DEFAULT true true 1000:db95 Code1 LAB_1000_db95 Label DEFAULT true true 1000:dbbe Code1 LAB_1000_dbbe Label DEFAULT true true 1000:dbc2 Code1 LAB_1000_dbc2 Label DEFAULT true true 1000:dbd3 Code1 LAB_1000_dbd3 Label DEFAULT true true 1000:dbd6 Code1 LAB_1000_dbd6 Label DEFAULT true true 1000:dbe0 Code1 LAB_1000_dbe0 Label DEFAULT true true 1000:dbea Code1 LAB_1000_dbea Label DEFAULT true true 1000:dbfe Code1 LAB_1000_dbfe Label DEFAULT true true 1000:dc02 Code1 LAB_1000_dc02 Label DEFAULT true true 1000:dc2e Code1 LAB_1000_dc2e Label DEFAULT true true 1000:dc6f Code1 LAB_1000_dc6f Label DEFAULT true true 1000:dc7a Code1 LAB_1000_dc7a Label DEFAULT true true 1000:dd3b Code1 LAB_1000_dd3b Label DEFAULT true true 1000:dd42 Code1 LAB_1000_dd42 Label DEFAULT true true 1000:dd7c Code1 LAB_1000_dd7c Label DEFAULT true true 1000:ddb3 Code1 LAB_1000_ddb3 Label DEFAULT true true 1000:dddd Code1 LAB_1000_dddd Label DEFAULT true true 1000:de0a Code1 LAB_1000_de0a Label DEFAULT true true 1000:de14 Code1 LAB_1000_de14 Label DEFAULT true true 1000:de26 Code1 LAB_1000_de26 Label DEFAULT true true 1000:de33 Code1 LAB_1000_de33 Label DEFAULT true true 1000:de35 Code1 LAB_1000_de35 Label DEFAULT true true 1000:de5b Code1 LAB_1000_de5b Label DEFAULT true true 1000:de5e Code1 LAB_1000_de5e Label DEFAULT true true 1000:de6d Code1 LAB_1000_de6d Label DEFAULT true true 1000:dea3 Code1 LAB_1000_dea3 Label DEFAULT true true 1000:deb3 Code1 LAB_1000_deb3 Label DEFAULT true true 1000:debb Code1 LAB_1000_debb Label DEFAULT true true 1000:dec6 Code1 LAB_1000_dec6 Label DEFAULT true true 1000:ded0 Code1 LAB_1000_ded0 Label DEFAULT true true 1000:dede Code1 LAB_1000_dede Label DEFAULT true true 1000:dfb0 Code1 LAB_1000_dfb0 Label DEFAULT true true 1000:e00f Code1 LAB_1000_e00f Label DEFAULT true true 1000:e017 Code1 LAB_1000_e017 Label DEFAULT true true 1000:e025 Code1 LAB_1000_e025 Label DEFAULT true true 1000:e036 Code1 LAB_1000_e036 Label DEFAULT true true 1000:e051 Code1 LAB_1000_e051 Label DEFAULT true true 1000:e05b Code1 LAB_1000_e05b Label DEFAULT true true 1000:e060 Code1 LAB_1000_e060 Label DEFAULT true true 1000:e06a Code1 LAB_1000_e06a Label DEFAULT true true 1000:e08d Code1 LAB_1000_e08d Label DEFAULT true true 1000:e095 Code1 LAB_1000_e095 Label DEFAULT true true 1000:e1b9 Code1 LAB_1000_e1b9 Label DEFAULT true true 1000:e1c3 Code1 LAB_1000_e1c3 Label DEFAULT true true 1000:e1cd Code1 LAB_1000_e1cd Label DEFAULT true true 1000:e1e5 Code1 LAB_1000_e1e5 Label DEFAULT true true 1000:e219 Code1 LAB_1000_e219 Label DEFAULT true true 1000:e32c Code1 LAB_1000_e32c Label DEFAULT true true 1000:e35c Code1 LAB_1000_e35c Label DEFAULT true true 1000:e36f Code1 LAB_1000_e36f Label DEFAULT true true 1000:e37b Code1 LAB_1000_e37b Label DEFAULT true true 1000:e3e6 Code1 LAB_1000_e3e6 Label DEFAULT true true 1000:e480 Code1 LAB_1000_e480 Label DEFAULT true true 1000:e498 Code1 LAB_1000_e498 Label DEFAULT true true 1000:e4a2 Code1 LAB_1000_e4a2 Label DEFAULT true true 1000:e590 Code1 LAB_1000_e590 Label DEFAULT true true 1000:e5c1 Code1 LAB_1000_e5c1 Label DEFAULT true true 1000:e61c Code1 LAB_1000_e61c Label DEFAULT true true 1000:e638 Code1 LAB_1000_e638 Label DEFAULT true true 1000:e670 Code1 LAB_1000_e670 Label DEFAULT true true 1000:e68d Code1 LAB_1000_e68d Label DEFAULT true true 1000:e694 Code1 LAB_1000_e694 Label DEFAULT true true 1000:e6d2 Code1 LAB_1000_e6d2 Label DEFAULT true true 1000:e7d4 Code1 LAB_1000_e7d4 Label DEFAULT true true 1000:e7f3 Code1 LAB_1000_e7f3 Label DEFAULT true true 1000:e7fb Code1 LAB_1000_e7fb Label DEFAULT true true 1000:e7fd Code1 LAB_1000_e7fd Label DEFAULT true true 1000:e828 Code1 LAB_1000_e828 Label DEFAULT true true 1000:e831 Code1 LAB_1000_e831 Label DEFAULT true true 1000:e843 Code1 LAB_1000_e843 Label DEFAULT true true 1000:e90b Code1 LAB_1000_e90b Label DEFAULT true true 1000:e914 Code1 LAB_1000_e914 Label DEFAULT true true 1000:e9f0 Code1 LAB_1000_e9f0 Label DEFAULT true true 1000:ea36 Code1 LAB_1000_ea36 Label DEFAULT true true 1000:ea54 Code1 LAB_1000_ea54 Label DEFAULT true true 1000:ea56 Code1 LAB_1000_ea56 Label DEFAULT true true 1000:ea63 Code1 LAB_1000_ea63 Label DEFAULT true true 1000:ea83 Code1 LAB_1000_ea83 Label DEFAULT true true 1000:eaa1 Code1 LAB_1000_eaa1 Label DEFAULT true true 1000:eaad Code1 LAB_1000_eaad Label DEFAULT true true 1000:eab1 Code1 exported_ordinal_10 Function USER_DEFINED true false 1000:eac5 Code1 LAB_1000_eac5 Label DEFAULT true true 1000:ead2 Code1 LAB_1000_ead2 Label DEFAULT true true 1000:eadd Code1 LAB_1000_eadd Label DEFAULT true true 1000:eae8 Code1 LAB_1000_eae8 Label DEFAULT true true 1000:eaf2 Code1 LAB_1000_eaf2 Label DEFAULT true true 1000:eafc Code1 LAB_1000_eafc Label DEFAULT true true 1000:eb06 Code1 LAB_1000_eb06 Label DEFAULT true true 1000:eb19 Code1 LAB_1000_eb19 Label DEFAULT true true 1000:eb1c Code1 LAB_1000_eb1c Label DEFAULT true true 1000:eb31 Code1 LAB_1000_eb31 Label DEFAULT true true 1000:eb49 Code1 LAB_1000_eb49 Label DEFAULT true true 1000:eb53 Code1 LAB_1000_eb53 Label DEFAULT true true 1000:eb5d Code1 LAB_1000_eb5d Label DEFAULT true true 1000:eb84 Code1 LAB_1000_eb84 Label DEFAULT true true 1000:eb8b Code1 LAB_1000_eb8b Label DEFAULT true true 1000:ebad Code1 LAB_1000_ebad Label DEFAULT true true 1000:ebf1 Code1 LAB_1000_ebf1 Label DEFAULT true true 1000:ebf4 Code1 LAB_1000_ebf4 Label DEFAULT true true 1000:ec03 Code1 LAB_1000_ec03 Label DEFAULT true true 1000:ec06 Code1 LAB_1000_ec06 Label DEFAULT true true 1000:ece0 Code1 LAB_1000_ece0 Label DEFAULT true true 1000:ed5d Code1 LAB_1000_ed5d Label DEFAULT true true 1000:edda Code1 LAB_1000_edda Label DEFAULT true true 1000:ee57 Code1 LAB_1000_ee57 Label DEFAULT true true 1000:eed4 Code1 LAB_1000_eed4 Label DEFAULT true true 1000:ef51 Code1 LAB_1000_ef51 Label DEFAULT true true 1000:efce Code1 LAB_1000_efce Label DEFAULT true true 1000:f04b Code1 LAB_1000_f04b Label DEFAULT true true 1000:f0c7 Code1 LAB_1000_f0c7 Label DEFAULT true true 1000:f101 Code1 LAB_1000_f101 Label DEFAULT true true 1000:f121 Code1 LAB_1000_f121 Label DEFAULT true true 1000:f128 Code1 LAB_1000_f128 Label DEFAULT true true 1000:f12b Code1 LAB_1000_f12b Label DEFAULT true true 1000:f15e Code1 LAB_1000_f15e Label DEFAULT true true 1000:f17c Code1 LAB_1000_f17c Label DEFAULT true true 1000:f18e Code1 LAB_1000_f18e Label DEFAULT true true 1000:f193 Code1 LAB_1000_f193 Label DEFAULT true true 1000:f1a0 Code1 LAB_1000_f1a0 Label DEFAULT true true 1000:f1aa Code1 LAB_1000_f1aa Label DEFAULT true true 1000:f1de Code1 LAB_1000_f1de Label DEFAULT true true 1000:f1e7 Code1 LAB_1000_f1e7 Label DEFAULT true true 1000:f22a Code1 LAB_1000_f22a Label DEFAULT true true 1000:f295 Code1 LAB_1000_f295 Label DEFAULT true true 1000:f297 Code1 LAB_1000_f297 Label DEFAULT true true 1000:f2d5 Code1 LAB_1000_f2d5 Label DEFAULT true true 1000:f2de Code1 LAB_1000_f2de Label DEFAULT true true 1000:f2f5 Code1 LAB_1000_f2f5 Label DEFAULT true true 1000:f30e Code1 LAB_1000_f30e Label DEFAULT true true 1000:f38f Code1 LAB_1000_f38f Label DEFAULT true true 1000:f39d Code1 LAB_1000_f39d Label DEFAULT true true 1000:f4aa Code1 LAB_1000_f4aa Label DEFAULT true true 1000:f4ad Code1 LAB_1000_f4ad Label DEFAULT true true 1000:f4b7 Code1 LAB_1000_f4b7 Label DEFAULT true true 1000:f50e Code1 LAB_1000_f50e Label DEFAULT true true 1000:f525 Code1 LAB_1000_f525 Label DEFAULT true true 1000:f541 Code1 LAB_1000_f541 Label DEFAULT true true 1000:f57f Code1 LAB_1000_f57f Label DEFAULT true true 1000:f5a5 Code1 LAB_1000_f5a5 Label DEFAULT true true 1000:f5c9 Code1 LAB_1000_f5c9 Label DEFAULT true true 1000:f5ff Code1 LAB_1000_f5ff Label DEFAULT true true 1000:f61e Code1 LAB_1000_f61e Label DEFAULT true true 1000:f63a Code1 LAB_1000_f63a Label DEFAULT true true 1000:f6dd Code1 LAB_1000_f6dd Label DEFAULT true true 1000:f74a Code1 LAB_1000_f74a Label DEFAULT true true 1000:f759 Code1 LAB_1000_f759 Label DEFAULT true true 1000:f775 Code1 LAB_1000_f775 Label DEFAULT true true 1000:f7f9 Code1 LAB_1000_f7f9 Label DEFAULT true true 1000:f849 Code1 LAB_1000_f849 Label DEFAULT true true 1000:f898 Code1 LAB_1000_f898 Label DEFAULT true true 1000:f8e5 Code1 LAB_1000_f8e5 Label DEFAULT true true 1000:f8f4 Code1 LAB_1000_f8f4 Label DEFAULT true true 1000:f951 Code1 LAB_1000_f951 Label DEFAULT true true 1000:f960 Code1 LAB_1000_f960 Label DEFAULT true true 1000:f96f Code1 LAB_1000_f96f Label DEFAULT true true 1000:f98b Code1 LAB_1000_f98b Label DEFAULT true true 1000:fa51 Code1 LAB_1000_fa51 Label DEFAULT true true 1000:fa72 Code1 LAB_1000_fa72 Label DEFAULT true true 1000:fabd Code1 LAB_1000_fabd Label DEFAULT true true 1000:fba8 Code1 LAB_1000_fba8 Label DEFAULT true true 1000:fc04 Code1 LAB_1000_fc04 Label DEFAULT true true 1000:fc0e Code1 LAB_1000_fc0e Label DEFAULT true true 1000:fc1c Code1 LAB_1000_fc1c Label DEFAULT true true 1000:fc33 Code1 LAB_1000_fc33 Label DEFAULT true true 1000:fc48 Code1 LAB_1000_fc48 Label DEFAULT true true 1000:fc4b Code1 LAB_1000_fc4b Label DEFAULT true true 1000:fc5c Code1 LAB_1000_fc5c Label DEFAULT true true 1000:fc6e Code1 LAB_1000_fc6e Label DEFAULT true true 1000:fcc6 Code1 LAB_1000_fcc6 Label DEFAULT true true 1000:fcc9 Code1 LAB_1000_fcc9 Label DEFAULT true true 1000:fce7 Code1 LAB_1000_fce7 Label DEFAULT true true 1000:fd59 Code1 LAB_1000_fd59 Label DEFAULT true true 1000:fd7a Code1 LAB_1000_fd7a Label DEFAULT true true 1000:fd81 Code1 LAB_1000_fd81 Label DEFAULT true true 1000:fd85 Code1 entry Label IMPORTED false false 1000:fd85 Code1 ne_program_entry Function USER_DEFINED true false 1000:fdf4 Code1 LAB_1000_fdf4 Label DEFAULT true true 1000:fe08 Code1 LAB_1000_fe08 Label DEFAULT true true 1000:fe32 Code1 LAB_1000_fe32 Label DEFAULT true true 1008:0000 Code2 code_segment_2_tag Label USER_DEFINED true false 1008:0002 Code2 FUN_1008_0002 Function DEFAULT true false 1008:001f Code2 LAB_1008_001f Label DEFAULT true true 1008:0023 Code2 FUN_1008_0023 Function DEFAULT true false 1008:0040 Code2 LAB_1008_0040 Label DEFAULT true true 1008:005b Code2 LAB_1008_005b Label DEFAULT true true 1008:005e Code2 LAB_1008_005e Label DEFAULT true true 1008:00de Code2 LAB_1008_00de Label DEFAULT true true 1008:00e2 Code2 FUN_1008_00e2 Function DEFAULT true false 1008:00e6 Code2 LAB_1008_00e6 Label DEFAULT true true 1008:0130 Code2 LAB_1008_0130 Label DEFAULT true true 1008:0138 Code2 FUN_1008_0138 Function DEFAULT true false 1008:0146 Code2 LAB_1008_0146 Label DEFAULT true true 1008:016a Code2 LAB_1008_016a Label DEFAULT true true 1008:016e Code2 LAB_1008_016e Label DEFAULT true true 1008:01c0 Code2 LAB_1008_01c0 Label DEFAULT true true 1008:0208 Code2 LAB_1008_0208 Label DEFAULT true true 1008:0216 Code2 LAB_1008_0216 Label DEFAULT true true 1008:0228 Code2 LAB_1008_0228 Label DEFAULT true true 1008:0261 Code2 LAB_1008_0261 Label DEFAULT true true 1008:026f Code2 LAB_1008_026f Label DEFAULT true true 1008:0281 Code2 LAB_1008_0281 Label DEFAULT true true 1008:02b9 Code2 LAB_1008_02b9 Label DEFAULT true true 1008:02fb Code2 LAB_1008_02fb Label DEFAULT true true 1008:0309 Code2 LAB_1008_0309 Label DEFAULT true true 1008:031b Code2 LAB_1008_031b Label DEFAULT true true 1008:0354 Code2 LAB_1008_0354 Label DEFAULT true true 1008:0362 Code2 LAB_1008_0362 Label DEFAULT true true 1008:0374 Code2 LAB_1008_0374 Label DEFAULT true true 1008:03ac Code2 LAB_1008_03ac Label DEFAULT true true 1008:03ee Code2 LAB_1008_03ee Label DEFAULT true true 1008:03f8 Code2 LAB_1008_03f8 Label DEFAULT true true 1008:047c Code2 LAB_1008_047c Label DEFAULT true true 1008:0497 Code2 LAB_1008_0497 Label DEFAULT true true 1008:04ba Code2 LAB_1008_04ba Label DEFAULT true true 1008:04d3 Code2 LAB_1008_04d3 Label DEFAULT true true 1008:04ee Code2 LAB_1008_04ee Label DEFAULT true true 1008:0511 Code2 LAB_1008_0511 Label DEFAULT true true 1008:052a Code2 LAB_1008_052a Label DEFAULT true true 1008:0545 Code2 LAB_1008_0545 Label DEFAULT true true 1008:0568 Code2 LAB_1008_0568 Label DEFAULT true true 1008:0581 Code2 LAB_1008_0581 Label DEFAULT true true 1008:059c Code2 LAB_1008_059c Label DEFAULT true true 1008:05bf Code2 LAB_1008_05bf Label DEFAULT true true 1008:05dc Code2 LAB_1008_05dc Label DEFAULT true true 1008:05e3 Code2 LAB_1008_05e3 Label DEFAULT true true 1008:06d6 Code2 LAB_1008_06d6 Label DEFAULT true true 1008:0783 Code2 LAB_1008_0783 Label DEFAULT true true 1008:0787 Code2 FUN_1008_0787 Function DEFAULT true false 1008:07b6 Code2 FUN_1008_07b6 Function DEFAULT true false 1008:0837 Code2 FUN_1008_0837 Function DEFAULT true false 1008:08bb Code2 FUN_1008_08bb Function DEFAULT true false 1008:093f Code2 FUN_1008_093f Function DEFAULT true false 1008:0996 Code2 FUN_1008_0996 Function DEFAULT true false 1008:09de Code2 LAB_1008_09de Label DEFAULT true true 1008:09ef Code2 LAB_1008_09ef Label DEFAULT true true 1008:0a00 Code2 LAB_1008_0a00 Label DEFAULT true true 1008:0a11 Code2 LAB_1008_0a11 Label DEFAULT true true 1008:0a1b Code2 LAB_1008_0a1b Label DEFAULT true true 1008:0a3b Code2 LAB_1008_0a3b Label DEFAULT true true 1008:0a49 Code2 LAB_1008_0a49 Label DEFAULT true true 1008:0a57 Code2 LAB_1008_0a57 Label DEFAULT true true 1008:0a6b Code2 LAB_1008_0a6b Label DEFAULT true true 1008:0aad Code2 LAB_1008_0aad Label DEFAULT true true 1008:0ab0 Code2 LAB_1008_0ab0 Label DEFAULT true true 1008:0af1 Code2 LAB_1008_0af1 Label DEFAULT true true 1008:0afd Code2 LAB_1008_0afd Label DEFAULT true true 1008:0b44 Code2 LAB_1008_0b44 Label DEFAULT true true 1008:0b4d Code2 LAB_1008_0b4d Label DEFAULT true true 1008:0b9e Code2 FUN_1008_0b9e Function DEFAULT true false 1008:0bb5 Code2 LAB_1008_0bb5 Label DEFAULT true true 1008:0bbe Code2 LAB_1008_0bbe Label DEFAULT true true 1008:0bc7 Code2 LAB_1008_0bc7 Label DEFAULT true true 1008:0be2 Code2 LAB_1008_0be2 Label DEFAULT true true 1008:0be9 Code2 LAB_1008_0be9 Label DEFAULT true true 1008:0c04 Code2 LAB_1008_0c04 Label DEFAULT true true 1008:0c0b Code2 LAB_1008_0c0b Label DEFAULT true true 1008:0c26 Code2 LAB_1008_0c26 Label DEFAULT true true 1008:0c2d Code2 LAB_1008_0c2d Label DEFAULT true true 1008:0c48 Code2 LAB_1008_0c48 Label DEFAULT true true 1008:0c4f Code2 LAB_1008_0c4f Label DEFAULT true true 1008:0c54 Code2 LAB_1008_0c54 Label DEFAULT true true 1008:0c60 Code2 LAB_1008_0c60 Label DEFAULT true true 1008:0c84 Code2 LAB_1008_0c84 Label DEFAULT true true 1008:0c97 Code2 LAB_1008_0c97 Label DEFAULT true true 1008:0cb1 Code2 LAB_1008_0cb1 Label DEFAULT true true 1008:0cb4 Code2 LAB_1008_0cb4 Label DEFAULT true true 1008:0cf6 Code2 LAB_1008_0cf6 Label DEFAULT true true 1008:0d2e Code2 LAB_1008_0d2e Label DEFAULT true true 1008:0d37 Code2 LAB_1008_0d37 Label DEFAULT true true 1008:0d3f Code2 LAB_1008_0d3f Label DEFAULT true true 1008:0d72 Code2 LAB_1008_0d72 Label DEFAULT true true 1008:0d75 Code2 LAB_1008_0d75 Label DEFAULT true true 1008:0db9 Code2 LAB_1008_0db9 Label DEFAULT true true 1008:0dbd Code2 FUN_1008_0dbd Function DEFAULT true false 1008:0de2 Code2 LAB_1008_0de2 Label DEFAULT true true 1008:0df3 Code2 LAB_1008_0df3 Label DEFAULT true true 1008:0e08 Code2 FUN_1008_0e08 Function DEFAULT true false 1008:0e37 Code2 LAB_1008_0e37 Label DEFAULT true true 1008:0e97 Code2 LAB_1008_0e97 Label DEFAULT true true 1008:0eaf Code2 LAB_1008_0eaf Label DEFAULT true true 1008:0f23 Code2 LAB_1008_0f23 Label DEFAULT true true 1008:0f27 Code2 FUN_1008_0f27 Function DEFAULT true false 1008:0f2c Code2 code2_embedded_word_0f2c Label USER_DEFINED true false 1008:0f2e Code2 FUN_1008_0f2e Function DEFAULT true false 1008:0fb8 Code2 LAB_1008_0fb8 Label DEFAULT true true 1008:0fca Code2 LAB_1008_0fca Label DEFAULT true true 1008:0fe6 Code2 LAB_1008_0fe6 Label DEFAULT true true 1008:1000 Code2 LAB_1008_1000 Label DEFAULT true true 1008:1029 Code2 LAB_1008_1029 Label DEFAULT true true 1008:102e Code2 LAB_1008_102e Label DEFAULT true true 1008:1035 Code2 LAB_1008_1035 Label DEFAULT true true 1008:1038 Code2 LAB_1008_1038 Label DEFAULT true true 1008:104b Code2 LAB_1008_104b Label DEFAULT true true 1008:10d0 Code2 LAB_1008_10d0 Label DEFAULT true true 1008:10d9 Code2 LAB_1008_10d9 Label DEFAULT true true 1008:10de Code2 LAB_1008_10de Label DEFAULT true true 1008:10e3 Code2 FUN_1008_10e3 Function DEFAULT true false 1008:1104 Code2 LAB_1008_1104 Label DEFAULT true true 1008:110b Code2 LAB_1008_110b Label DEFAULT true true 1008:110e Code2 LAB_1008_110e Label DEFAULT true true 1008:112c Code2 LAB_1008_112c Label DEFAULT true true 1008:1131 Code2 FUN_1008_1131 Function DEFAULT true false 1008:1169 Code2 LAB_1008_1169 Label DEFAULT true true 1008:1185 Code2 LAB_1008_1185 Label DEFAULT true true 1008:118f Code2 FUN_1008_118f Function DEFAULT true false 1008:11b0 Code2 LAB_1008_11b0 Label DEFAULT true true 1008:11b8 Code2 FUN_1008_11b8 Function DEFAULT true false 1008:11bd Code2 code2_embedded_words_11bd Label USER_DEFINED true false 1008:11c5 Code2 FUN_1008_11c5 Function DEFAULT true false 1008:1237 Code2 LAB_1008_1237 Label DEFAULT true true 1008:1241 Code2 LAB_1008_1241 Label DEFAULT true true 1008:1249 Code2 LAB_1008_1249 Label DEFAULT true true 1008:1251 Code2 LAB_1008_1251 Label DEFAULT true true 1008:12ea Code2 LAB_1008_12ea Label DEFAULT true true 1008:12f2 Code2 LAB_1008_12f2 Label DEFAULT true true 1008:131e Code2 code2_embedded_words_131e Label USER_DEFINED true false 1008:1326 Code2 FUN_1008_1326 Function DEFAULT true false 1008:1367 Code2 LAB_1008_1367 Label DEFAULT true true 1008:136a Code2 LAB_1008_136a Label DEFAULT true true 1008:13a8 Code2 FUN_1008_13a8 Function DEFAULT true false 1008:13f0 Code2 LAB_1008_13f0 Label DEFAULT true true 1008:13f8 Code2 LAB_1008_13f8 Label DEFAULT true true 1008:148c Code2 LAB_1008_148c Label DEFAULT true true 1008:1496 Code2 LAB_1008_1496 Label DEFAULT true true 1008:149d Code2 FUN_1008_149d Function DEFAULT true false 1008:15c2 Code2 FUN_1008_15c2 Function DEFAULT true false 1008:15c7 Code2 FUN_1008_15c7 Function DEFAULT true false 1008:15e7 Code2 FUN_1008_15e7 Function DEFAULT true false 1008:1607 Code2 FUN_1008_1607 Function DEFAULT true false 1008:162b Code2 LAB_1008_162b Label DEFAULT true true 1008:1635 Code2 LAB_1008_1635 Label DEFAULT true true 1008:1682 Code2 LAB_1008_1682 Label DEFAULT true true 1008:168e Code2 FUN_1008_168e Function DEFAULT true false 1008:16be Code2 FUN_1008_16be Function DEFAULT true false 1008:172f Code2 FUN_1008_172f Function DEFAULT true false 1008:1745 Code2 LAB_1008_1745 Label DEFAULT true true 1008:174b Code2 LAB_1008_174b Label DEFAULT true true 1008:1754 Code2 FUN_1008_1754 Function DEFAULT true false 1008:176a Code2 LAB_1008_176a Label DEFAULT true true 1008:1770 Code2 LAB_1008_1770 Label DEFAULT true true 1008:1779 Code2 FUN_1008_1779 Function DEFAULT true false 1008:1796 Code2 LAB_1008_1796 Label DEFAULT true true 1008:17a2 Code2 LAB_1008_17a2 Label DEFAULT true true 1008:17e2 Code2 FUN_1008_17e2 Function DEFAULT true false 1008:1809 Code2 LAB_1008_1809 Label DEFAULT true true 1008:1816 Code2 LAB_1008_1816 Label DEFAULT true true 1008:1818 Code2 FUN_1008_1818 Function DEFAULT true false 1008:185b Code2 FUN_1008_185b Function DEFAULT true false 1008:1865 Code2 FUN_1008_1865 Function DEFAULT true false 1008:18d0 Code2 FUN_1008_18d0 Function DEFAULT true false 1008:18e4 Code2 LAB_1008_18e4 Label DEFAULT true true 1008:18ee Code2 FUN_1008_18ee Function DEFAULT true false 1008:18fd Code2 LAB_1008_18fd Label DEFAULT true true 1008:1937 Code2 LAB_1008_1937 Label DEFAULT true true 1008:1953 Code2 LAB_1008_1953 Label DEFAULT true true 1008:1970 Code2 LAB_1008_1970 Label DEFAULT true true 1008:19b0 Code2 LAB_1008_19b0 Label DEFAULT true true 1008:19b7 Code2 FUN_1008_19b7 Function DEFAULT true false 1008:19f8 Code2 FUN_1008_19f8 Function DEFAULT true false 1008:1a13 Code2 LAB_1008_1a13 Label DEFAULT true true 1008:1a39 Code2 FUN_1008_1a39 Function DEFAULT true false 1008:1a7e Code2 LAB_1008_1a7e Label DEFAULT true true 1008:1a82 Code2 FUN_1008_1a82 Function DEFAULT true false 1008:1aca Code2 LAB_1008_1aca Label DEFAULT true true 1008:1b0d Code2 LAB_1008_1b0d Label DEFAULT true true 1008:1b11 Code2 FUN_1008_1b11 Function DEFAULT true false 1008:1b2a Code2 LAB_1008_1b2a Label DEFAULT true true 1008:1b33 Code2 LAB_1008_1b33 Label DEFAULT true true 1008:1b6d Code2 LAB_1008_1b6d Label DEFAULT true true 1008:1b7a Code2 LAB_1008_1b7a Label DEFAULT true true 1008:1b7c Code2 LAB_1008_1b7c Label DEFAULT true true 1008:1b86 Code2 LAB_1008_1b86 Label DEFAULT true true 1008:1bb6 Code2 LAB_1008_1bb6 Label DEFAULT true true 1008:1bb8 Code2 LAB_1008_1bb8 Label DEFAULT true true 1008:1bc4 Code2 LAB_1008_1bc4 Label DEFAULT true true 1008:1bcd Code2 LAB_1008_1bcd Label DEFAULT true true 1008:1be2 Code2 LAB_1008_1be2 Label DEFAULT true true 1008:1be9 Code2 FUN_1008_1be9 Function DEFAULT true false 1008:1c03 Code2 FUN_1008_1c03 Function DEFAULT true false 1008:1c10 Code2 LAB_1008_1c10 Label DEFAULT true true 1008:1c34 Code2 LAB_1008_1c34 Label DEFAULT true true 1008:1c4a Code2 LAB_1008_1c4a Label DEFAULT true true 1008:1c54 Code2 LAB_1008_1c54 Label DEFAULT true true 1008:1c5f Code2 FUN_1008_1c5f Function DEFAULT true false 1008:1c84 Code2 LAB_1008_1c84 Label DEFAULT true true 1008:1c9c Code2 LAB_1008_1c9c Label DEFAULT true true 1008:1ca1 Code2 LAB_1008_1ca1 Label DEFAULT true true 1008:1cc6 Code2 FUN_1008_1cc6 Function DEFAULT true false 1008:1cd3 Code2 LAB_1008_1cd3 Label DEFAULT true true 1008:1cf3 Code2 LAB_1008_1cf3 Label DEFAULT true true 1008:1cf5 Code2 LAB_1008_1cf5 Label DEFAULT true true 1008:1d21 Code2 LAB_1008_1d21 Label DEFAULT true true 1008:1d34 Code2 LAB_1008_1d34 Label DEFAULT true true 1008:1d62 Code2 LAB_1008_1d62 Label DEFAULT true true 1008:1d77 Code2 FUN_1008_1d77 Function DEFAULT true false 1008:1dca Code2 LAB_1008_1dca Label DEFAULT true true 1008:1dcc Code2 FUN_1008_1dcc Function DEFAULT true false 1008:1e3e Code2 LAB_1008_1e3e Label DEFAULT true true 1008:1e7e Code2 LAB_1008_1e7e Label DEFAULT true true 1008:1e8a Code2 FUN_1008_1e8a Function DEFAULT true false 1008:1ea5 Code2 LAB_1008_1ea5 Label DEFAULT true true 1008:1eb3 Code2 LAB_1008_1eb3 Label DEFAULT true true 1008:1ec3 Code2 LAB_1008_1ec3 Label DEFAULT true true 1008:1ed3 Code2 LAB_1008_1ed3 Label DEFAULT true true 1008:1edf Code2 LAB_1008_1edf Label DEFAULT true true 1008:1eec Code2 LAB_1008_1eec Label DEFAULT true true 1008:1efd Code2 LAB_1008_1efd Label DEFAULT true true 1008:1f03 Code2 LAB_1008_1f03 Label DEFAULT true true 1008:1f0c Code2 FUN_1008_1f0c Function DEFAULT true false 1008:1f40 Code2 LAB_1008_1f40 Label DEFAULT true true 1008:1f57 Code2 LAB_1008_1f57 Label DEFAULT true true 1008:1f68 Code2 FUN_1008_1f68 Function DEFAULT true false 1008:1f7c Code2 LAB_1008_1f7c Label DEFAULT true true 1008:1fe4 Code2 LAB_1008_1fe4 Label DEFAULT true true 1008:1fe8 Code2 FUN_1008_1fe8 Function DEFAULT true false 1008:211a Code2 FUN_1008_211a Function DEFAULT true false 1008:212d Code2 LAB_1008_212d Label DEFAULT true true 1008:2143 Code2 LAB_1008_2143 Label DEFAULT true true 1008:2147 Code2 FUN_1008_2147 Function DEFAULT true false 1008:215d Code2 LAB_1008_215d Label DEFAULT true true 1008:216d Code2 LAB_1008_216d Label DEFAULT true true 1008:2177 Code2 LAB_1008_2177 Label DEFAULT true true 1008:217a Code2 LAB_1008_217a Label DEFAULT true true 1008:21ae Code2 LAB_1008_21ae Label DEFAULT true true 1008:21b4 Code2 LAB_1008_21b4 Label DEFAULT true true 1008:21ba Code2 FUN_1008_21ba Function DEFAULT true false 1008:21cc Code2 LAB_1008_21cc Label DEFAULT true true 1008:21ce Code2 FUN_1008_21ce Function DEFAULT true false 1008:21db Code2 LAB_1008_21db Label DEFAULT true true 1008:21e2 Code2 FUN_1008_21e2 Function DEFAULT true false 1008:2219 Code2 FUN_1008_2219 Function DEFAULT true false 1008:2244 Code2 LAB_1008_2244 Label DEFAULT true true 1008:224f Code2 LAB_1008_224f Label DEFAULT true true 1008:2264 Code2 LAB_1008_2264 Label DEFAULT true true 1008:2277 Code2 LAB_1008_2277 Label DEFAULT true true 1008:2287 Code2 LAB_1008_2287 Label DEFAULT true true 1008:2297 Code2 LAB_1008_2297 Label DEFAULT true true 1008:22a5 Code2 LAB_1008_22a5 Label DEFAULT true true 1008:22b3 Code2 LAB_1008_22b3 Label DEFAULT true true 1008:22bd Code2 LAB_1008_22bd Label DEFAULT true true 1008:22c7 Code2 LAB_1008_22c7 Label DEFAULT true true 1008:22d1 Code2 LAB_1008_22d1 Label DEFAULT true true 1008:22eb Code2 LAB_1008_22eb Label DEFAULT true true 1008:22fc Code2 FUN_1008_22fc Function DEFAULT true false 1008:232d Code2 LAB_1008_232d Label DEFAULT true true 1008:233c Code2 FUN_1008_233c Function DEFAULT true false 1008:2374 Code2 FUN_1008_2374 Function DEFAULT true false 1008:238b Code2 FUN_1008_238b Function DEFAULT true false 1008:23b8 Code2 LAB_1008_23b8 Label DEFAULT true true 1008:23dd Code2 LAB_1008_23dd Label DEFAULT true true 1008:23fd Code2 FUN_1008_23fd Function DEFAULT true false 1008:2442 Code2 FUN_1008_2442 Function DEFAULT true false 1008:24a0 Code2 LAB_1008_24a0 Label DEFAULT true true 1008:24a5 Code2 FUN_1008_24a5 Function DEFAULT true false 1008:24c6 Code2 LAB_1008_24c6 Label DEFAULT true true 1008:24d2 Code2 LAB_1008_24d2 Label DEFAULT true true 1008:2522 Code2 LAB_1008_2522 Label DEFAULT true true 1008:254f Code2 LAB_1008_254f Label DEFAULT true true 1008:2554 Code2 FUN_1008_2554 Function DEFAULT true false 1008:2598 Code2 LAB_1008_2598 Label DEFAULT true true 1008:2608 Code2 FUN_1008_2608 Function DEFAULT true false 1008:261e Code2 LAB_1008_261e Label DEFAULT true true 1008:2626 Code2 LAB_1008_2626 Label DEFAULT true true 1008:2643 Code2 FUN_1008_2643 Function DEFAULT true false 1008:2651 Code2 LAB_1008_2651 Label DEFAULT true true 1008:2658 Code2 LAB_1008_2658 Label DEFAULT true true 1008:2660 Code2 LAB_1008_2660 Label DEFAULT true true 1008:2676 Code2 LAB_1008_2676 Label DEFAULT true true 1008:2683 Code2 LAB_1008_2683 Label DEFAULT true true 1008:268d Code2 LAB_1008_268d Label DEFAULT true true 1008:2693 Code2 LAB_1008_2693 Label DEFAULT true true 1008:26a4 Code2 LAB_1008_26a4 Label DEFAULT true true 1008:26a5 Code2 LAB_1008_26a5 Label DEFAULT true true 1008:26b0 Code2 FUN_1008_26b0 Function DEFAULT true false 1008:26e8 Code2 LAB_1008_26e8 Label DEFAULT true true 1008:26fe Code2 LAB_1008_26fe Label DEFAULT true true 1008:2701 Code2 LAB_1008_2701 Label DEFAULT true true 1008:272e Code2 LAB_1008_272e Label DEFAULT true true 1008:2742 Code2 LAB_1008_2742 Label DEFAULT true true 1008:2756 Code2 LAB_1008_2756 Label DEFAULT true true 1008:277f Code2 LAB_1008_277f Label DEFAULT true true 1008:2784 Code2 LAB_1008_2784 Label DEFAULT true true 1008:2793 Code2 LAB_1008_2793 Label DEFAULT true true 1008:27a2 Code2 LAB_1008_27a2 Label DEFAULT true true 1008:27b4 Code2 LAB_1008_27b4 Label DEFAULT true true 1008:27d0 Code2 LAB_1008_27d0 Label DEFAULT true true 1008:27ec Code2 LAB_1008_27ec Label DEFAULT true true 1008:2809 Code2 LAB_1008_2809 Label DEFAULT true true 1008:2819 Code2 FUN_1008_2819 Function DEFAULT true false 1008:283a Code2 LAB_1008_283a Label DEFAULT true true 1008:287d Code2 LAB_1008_287d Label DEFAULT true true 1008:288e Code2 LAB_1008_288e Label DEFAULT true true 1008:2896 Code2 LAB_1008_2896 Label DEFAULT true true 1008:28a3 Code2 FUN_1008_28a3 Function DEFAULT true false 1008:28f4 Code2 LAB_1008_28f4 Label DEFAULT true true 1008:28f6 Code2 LAB_1008_28f6 Label DEFAULT true true 1008:28fd Code2 LAB_1008_28fd Label DEFAULT true true 1008:2906 Code2 FUN_1008_2906 Function DEFAULT true false 1008:2932 Code2 FUN_1008_2932 Function DEFAULT true false 1008:294f Code2 LAB_1008_294f Label DEFAULT true true 1008:295c Code2 FUN_1008_295c Function DEFAULT true false 1008:298a Code2 FUN_1008_298a Function DEFAULT true false 1008:2996 Code2 FUN_1008_2996 Function DEFAULT true false 1008:29df Code2 LAB_1008_29df Label DEFAULT true true 1008:29f0 Code2 LAB_1008_29f0 Label DEFAULT true true 1008:2a02 Code2 LAB_1008_2a02 Label DEFAULT true true 1008:2a0e Code2 FUN_1008_2a0e Function DEFAULT true false 1008:2a2a Code2 LAB_1008_2a2a Label DEFAULT true true 1008:2a45 Code2 FUN_1008_2a45 Function DEFAULT true false 1008:2a81 Code2 LAB_1008_2a81 Label DEFAULT true true 1008:2a8f Code2 LAB_1008_2a8f Label DEFAULT true true 1008:2ac9 Code2 LAB_1008_2ac9 Label DEFAULT true true 1008:2ad6 Code2 LAB_1008_2ad6 Label DEFAULT true true 1008:2ae3 Code2 FUN_1008_2ae3 Function DEFAULT true false 1008:2af8 Code2 LAB_1008_2af8 Label DEFAULT true true 1008:2b22 Code2 LAB_1008_2b22 Label DEFAULT true true 1008:2b30 Code2 LAB_1008_2b30 Label DEFAULT true true 1008:2b8c Code2 LAB_1008_2b8c Label DEFAULT true true 1008:2b9d Code2 LAB_1008_2b9d Label DEFAULT true true 1008:2ba7 Code2 LAB_1008_2ba7 Label DEFAULT true true 1008:2bb1 Code2 FUN_1008_2bb1 Function DEFAULT true false 1008:2bca Code2 LAB_1008_2bca Label DEFAULT true true 1008:2bd1 Code2 FUN_1008_2bd1 Function DEFAULT true false 1008:2c01 Code2 LAB_1008_2c01 Label DEFAULT true true 1008:2c08 Code2 FUN_1008_2c08 Function DEFAULT true false 1008:2c1f Code2 FUN_1008_2c1f Function DEFAULT true false 1008:2c4e Code2 LAB_1008_2c4e Label DEFAULT true true 1008:2c5d Code2 LAB_1008_2c5d Label DEFAULT true true 1008:2c6f Code2 LAB_1008_2c6f Label DEFAULT true true 1008:2c7c Code2 LAB_1008_2c7c Label DEFAULT true true 1008:2c83 Code2 FUN_1008_2c83 Function DEFAULT true false 1008:2ccd Code2 LAB_1008_2ccd Label DEFAULT true true 1008:2cd9 Code2 FUN_1008_2cd9 Function DEFAULT true false 1008:2cf2 Code2 FUN_1008_2cf2 Function DEFAULT true false 1008:2d27 Code2 LAB_1008_2d27 Label DEFAULT true true 1008:2d29 Code2 LAB_1008_2d29 Label DEFAULT true true 1008:2d33 Code2 LAB_1008_2d33 Label DEFAULT true true 1008:2d3a Code2 FUN_1008_2d3a Function DEFAULT true false 1008:2d55 Code2 LAB_1008_2d55 Label DEFAULT true true 1008:2d5f Code2 LAB_1008_2d5f Label DEFAULT true true 1008:2d66 Code2 FUN_1008_2d66 Function DEFAULT true false 1008:2d87 Code2 FUN_1008_2d87 Function DEFAULT true false 1008:2d99 Code2 FUN_1008_2d99 Function DEFAULT true false 1008:2da7 Code2 LAB_1008_2da7 Label DEFAULT true true 1008:2db3 Code2 FUN_1008_2db3 Function DEFAULT true false 1008:2dcd Code2 FUN_1008_2dcd Function DEFAULT true false 1008:2de0 Code2 FUN_1008_2de0 Function DEFAULT true false 1008:2df4 Code2 LAB_1008_2df4 Label DEFAULT true true 1008:2dff Code2 FUN_1008_2dff Function DEFAULT true false 1008:2e1d Code2 LAB_1008_2e1d Label DEFAULT true true 1008:2e22 Code2 FUN_1008_2e22 Function DEFAULT true false 1008:2e3e Code2 LAB_1008_2e3e Label DEFAULT true true 1008:2e4e Code2 LAB_1008_2e4e Label DEFAULT true true 1008:2e6c Code2 LAB_1008_2e6c Label DEFAULT true true 1008:2e76 Code2 FUN_1008_2e76 Function DEFAULT true false 1008:2e92 Code2 FUN_1008_2e92 Function DEFAULT true false 1008:2ea9 Code2 FUN_1008_2ea9 Function DEFAULT true false 1008:2ec0 Code2 FUN_1008_2ec0 Function DEFAULT true false 1008:2edd Code2 LAB_1008_2edd Label DEFAULT true true 1008:2ee5 Code2 FUN_1008_2ee5 Function DEFAULT true false 1008:2f07 Code2 FUN_1008_2f07 Function DEFAULT true false 1008:2f2f Code2 FUN_1008_2f2f Function DEFAULT true false 1008:2f4d Code2 FUN_1008_2f4d Function DEFAULT true false 1008:2f70 Code2 FUN_1008_2f70 Function DEFAULT true false 1008:2f90 Code2 LAB_1008_2f90 Label DEFAULT true true 1008:2fa1 Code2 LAB_1008_2fa1 Label DEFAULT true true 1008:2fb2 Code2 LAB_1008_2fb2 Label DEFAULT true true 1008:2fb6 Code2 LAB_1008_2fb6 Label DEFAULT true true 1008:2fbb Code2 FUN_1008_2fbb Function DEFAULT true false 1008:2fdf Code2 LAB_1008_2fdf Label DEFAULT true true 1008:2fe3 Code2 FUN_1008_2fe3 Function DEFAULT true false 1008:3005 Code2 LAB_1008_3005 Label DEFAULT true true 1008:300a Code2 FUN_1008_300a Function DEFAULT true false 1008:302c Code2 FUN_1008_302c Function DEFAULT true false 1008:308c Code2 LAB_1008_308c Label DEFAULT true true 1008:3099 Code2 FUN_1008_3099 Function DEFAULT true false 1008:30be Code2 LAB_1008_30be Label DEFAULT true true 1010:0000 Code3 code_segment_3_tag Label USER_DEFINED true false 1010:0002 Code3 FUN_1010_0002 Function DEFAULT true false 1010:0017 Code3 LAB_1010_0017 Label DEFAULT true true 1010:0079 Code3 FUN_1010_0079 Function DEFAULT true false 1010:009d Code3 LAB_1010_009d Label DEFAULT true true 1010:00a2 Code3 FUN_1010_00a2 Function DEFAULT true false 1010:00d7 Code3 LAB_1010_00d7 Label DEFAULT true true 1010:0108 Code3 LAB_1010_0108 Label DEFAULT true true 1010:0139 Code3 LAB_1010_0139 Label DEFAULT true true 1010:0192 Code3 LAB_1010_0192 Label DEFAULT true true 1010:01b8 Code3 LAB_1010_01b8 Label DEFAULT true true 1010:01c2 Code3 FUN_1010_01c2 Function DEFAULT true false 1010:01d8 Code3 LAB_1010_01d8 Label DEFAULT true true 1010:0202 Code3 LAB_1010_0202 Label DEFAULT true true 1010:0207 Code3 LAB_1010_0207 Label DEFAULT true true 1010:0209 Code3 LAB_1010_0209 Label DEFAULT true true 1010:0225 Code3 LAB_1010_0225 Label DEFAULT true true 1010:022f Code3 LAB_1010_022f Label DEFAULT true true 1010:02f5 Code3 LAB_1010_02f5 Label DEFAULT true true 1010:02fd Code3 LAB_1010_02fd Label DEFAULT true true 1010:0357 Code3 LAB_1010_0357 Label DEFAULT true true 1010:035b Code3 LAB_1010_035b Label DEFAULT true true 1010:035d Code3 LAB_1010_035d Label DEFAULT true true 1010:0360 Code3 LAB_1010_0360 Label DEFAULT true true 1010:036e Code3 LAB_1010_036e Label DEFAULT true true 1010:039a Code3 LAB_1010_039a Label DEFAULT true true 1010:039f Code3 LAB_1010_039f Label DEFAULT true true 1010:03a5 Code3 LAB_1010_03a5 Label DEFAULT true true 1010:03af Code3 FUN_1010_03af Function DEFAULT true false 1010:03e0 Code3 FUN_1010_03e0 Function DEFAULT true false 1010:0405 Code3 FUN_1010_0405 Function DEFAULT true false 1010:0462 Code3 LAB_1010_0462 Label DEFAULT true true 1010:0466 Code3 LAB_1010_0466 Label DEFAULT true true 1010:0470 Code3 code3_embedded_word_0470 Label USER_DEFINED true false 1010:0472 Code3 FUN_1010_0472 Function DEFAULT true false 1010:0555 Code3 LAB_1010_0555 Label DEFAULT true true 1010:05c3 Code3 LAB_1010_05c3 Label DEFAULT true true 1010:05c7 Code3 LAB_1010_05c7 Label DEFAULT true true 1010:05c9 Code3 LAB_1010_05c9 Label DEFAULT true true 1018:0000 Code4 code_segment_4_tag Label USER_DEFINED true false 1018:0002 Code4 FUN_1018_0002 Function DEFAULT true false 1018:0013 Code4 LAB_1018_0013 Label DEFAULT true true 1018:0018 Code4 LAB_1018_0018 Label DEFAULT true true 1018:0029 Code4 LAB_1018_0029 Label DEFAULT true true 1018:002f Code4 LAB_1018_002f Label DEFAULT true true 1018:0044 Code4 LAB_1018_0044 Label DEFAULT true true 1018:0045 Code4 FUN_1018_0045 Function DEFAULT true false 1018:0071 Code4 FUN_1018_0071 Function DEFAULT true false 1018:0097 Code4 FUN_1018_0097 Function DEFAULT true false 1018:00e0 Code4 LAB_1018_00e0 Label DEFAULT true true 1018:00fc Code4 LAB_1018_00fc Label DEFAULT true true 1018:0103 Code4 FUN_1018_0103 Function DEFAULT true false 1018:0133 Code4 FUN_1018_0133 Function DEFAULT true false 1018:016d Code4 LAB_1018_016d Label DEFAULT true true 1018:0173 Code4 LAB_1018_0173 Label DEFAULT true true 1018:017c Code4 LAB_1018_017c Label DEFAULT true true 1018:018b Code4 FUN_1018_018b Function DEFAULT true false 1018:01dc Code4 FUN_1018_01dc Function DEFAULT true false 1018:01f0 Code4 LAB_1018_01f0 Label DEFAULT true true 1018:0247 Code4 LAB_1018_0247 Label DEFAULT true true 1018:02a3 Code4 LAB_1018_02a3 Label DEFAULT true true 1018:02fa Code4 FUN_1018_02fa Function DEFAULT true false 1018:0341 Code4 FUN_1018_0341 Function DEFAULT true false 1018:0352 Code4 LAB_1018_0352 Label DEFAULT true true 1018:039b Code4 LAB_1018_039b Label DEFAULT true true 1018:03a8 Code4 LAB_1018_03a8 Label DEFAULT true true 1018:03dd Code4 LAB_1018_03dd Label DEFAULT true true 1018:03e9 Code4 FUN_1018_03e9 Function DEFAULT true false 1018:03ff Code4 FUN_1018_03ff Function DEFAULT true false 1018:043b Code4 LAB_1018_043b Label DEFAULT true true 1018:0466 Code4 FUN_1018_0466 Function DEFAULT true false 1018:048b Code4 LAB_1018_048b Label DEFAULT true true 1018:048f Code4 LAB_1018_048f Label DEFAULT true true 1018:0491 Code4 LAB_1018_0491 Label DEFAULT true true 1018:049e Code4 FUN_1018_049e Function DEFAULT true false 1018:04cf Code4 LAB_1018_04cf Label DEFAULT true true 1018:04d1 Code4 LAB_1018_04d1 Label DEFAULT true true 1018:050e Code4 LAB_1018_050e Label DEFAULT true true 1018:0517 Code4 LAB_1018_0517 Label DEFAULT true true 1018:0524 Code4 FUN_1018_0524 Function DEFAULT true false 1018:0549 Code4 LAB_1018_0549 Label DEFAULT true true 1018:054d Code4 LAB_1018_054d Label DEFAULT true true 1018:054f Code4 LAB_1018_054f Label DEFAULT true true 1018:055c Code4 FUN_1018_055c Function DEFAULT true false 1018:056d Code4 LAB_1018_056d Label DEFAULT true true 1018:059c Code4 LAB_1018_059c Label DEFAULT true true 1018:05ad Code4 LAB_1018_05ad Label DEFAULT true true 1018:05c9 Code4 LAB_1018_05c9 Label DEFAULT true true 1018:05cd Code4 LAB_1018_05cd Label DEFAULT true true 1018:05cf Code4 LAB_1018_05cf Label DEFAULT true true 1018:05dc Code4 FUN_1018_05dc Function DEFAULT true false 1018:05f3 Code4 FUN_1018_05f3 Function DEFAULT true false 1018:060d Code4 FUN_1018_060d Function DEFAULT true false 1018:0627 Code4 FUN_1018_0627 Function DEFAULT true false 1018:0641 Code4 FUN_1018_0641 Function DEFAULT true false 1018:065c Code4 LAB_1018_065c Label DEFAULT true true 1018:066c Code4 LAB_1018_066c Label DEFAULT true true 1018:0673 Code4 FUN_1018_0673 Function DEFAULT true false 1018:068d Code4 LAB_1018_068d Label DEFAULT true true 1018:069a Code4 FUN_1018_069a Function DEFAULT true false 1018:06d5 Code4 LAB_1018_06d5 Label DEFAULT true true 1018:0715 Code4 LAB_1018_0715 Label DEFAULT true true 1018:071c Code4 FUN_1018_071c Function DEFAULT true false 1018:0734 Code4 LAB_1018_0734 Label DEFAULT true true 1018:074e Code4 LAB_1018_074e Label DEFAULT true true 1018:0763 Code4 LAB_1018_0763 Label DEFAULT true true 1018:0778 Code4 LAB_1018_0778 Label DEFAULT true true 1018:078b Code4 LAB_1018_078b Label DEFAULT true true 1018:07c4 Code4 LAB_1018_07c4 Label DEFAULT true true 1018:07ec Code4 LAB_1018_07ec Label DEFAULT true true 1018:0806 Code4 LAB_1018_0806 Label DEFAULT true true 1018:080d Code4 FUN_1018_080d Function DEFAULT true false 1018:0828 Code4 LAB_1018_0828 Label DEFAULT true true 1018:084f Code4 LAB_1018_084f Label DEFAULT true true 1018:085a Code4 FUN_1018_085a Function DEFAULT true false 1018:0879 Code4 LAB_1018_0879 Label DEFAULT true true 1018:0885 Code4 LAB_1018_0885 Label DEFAULT true true 1018:089c Code4 LAB_1018_089c Label DEFAULT true true 1018:08a5 Code4 LAB_1018_08a5 Label DEFAULT true true 1018:08ac Code4 FUN_1018_08ac Function DEFAULT true false 1018:08c3 Code4 FUN_1018_08c3 Function DEFAULT true false 1018:08e7 Code4 LAB_1018_08e7 Label DEFAULT true true 1018:08f0 Code4 FUN_1018_08f0 Function DEFAULT true false 1018:0959 Code4 LAB_1018_0959 Label DEFAULT true true 1018:0966 Code4 LAB_1018_0966 Label DEFAULT true true 1018:0984 Code4 LAB_1018_0984 Label DEFAULT true true 1018:09b9 Code4 LAB_1018_09b9 Label DEFAULT true true 1018:09ce Code4 LAB_1018_09ce Label DEFAULT true true 1018:09ea Code4 LAB_1018_09ea Label DEFAULT true true 1018:09fa Code4 LAB_1018_09fa Label DEFAULT true true 1018:09fd Code4 LAB_1018_09fd Label DEFAULT true true 1018:0a48 Code4 LAB_1018_0a48 Label DEFAULT true true 1018:0a6e Code4 LAB_1018_0a6e Label DEFAULT true true 1018:0a7e Code4 LAB_1018_0a7e Label DEFAULT true true 1018:0a85 Code4 FUN_1018_0a85 Function DEFAULT true false 1018:0aca Code4 LAB_1018_0aca Label DEFAULT true true 1018:0afc Code4 LAB_1018_0afc Label DEFAULT true true 1018:0b0c Code4 LAB_1018_0b0c Label DEFAULT true true 1018:0b0e Code4 LAB_1018_0b0e Label DEFAULT true true 1018:0b1e Code4 LAB_1018_0b1e Label DEFAULT true true 1018:0b25 Code4 FUN_1018_0b25 Function DEFAULT true false 1018:0b55 Code4 LAB_1018_0b55 Label DEFAULT true true 1018:0b65 Code4 LAB_1018_0b65 Label DEFAULT true true 1018:0b6c Code4 FUN_1018_0b6c Function DEFAULT true false 1018:0b9c Code4 LAB_1018_0b9c Label DEFAULT true true 1018:0bac Code4 LAB_1018_0bac Label DEFAULT true true 1018:0bb3 Code4 FUN_1018_0bb3 Function DEFAULT true false 1018:0bd4 Code4 LAB_1018_0bd4 Label DEFAULT true true 1018:0bf1 Code4 LAB_1018_0bf1 Label DEFAULT true true 1018:0c02 Code4 LAB_1018_0c02 Label DEFAULT true true 1018:0c1c Code4 LAB_1018_0c1c Label DEFAULT true true 1018:0c36 Code4 LAB_1018_0c36 Label DEFAULT true true 1018:0c3d Code4 FUN_1018_0c3d Function DEFAULT true false 1018:0c59 Code4 FUN_1018_0c59 Function DEFAULT true false 1018:0c97 Code4 LAB_1018_0c97 Label DEFAULT true true 1018:0cc0 Code4 LAB_1018_0cc0 Label DEFAULT true true 1018:0cc7 Code4 FUN_1018_0cc7 Function DEFAULT true false 1018:0ce0 Code4 LAB_1018_0ce0 Label DEFAULT true true 1018:0ce7 Code4 FUN_1018_0ce7 Function DEFAULT true false 1018:0d57 Code4 LAB_1018_0d57 Label DEFAULT true true 1018:0d63 Code4 LAB_1018_0d63 Label DEFAULT true true 1018:0d6a Code4 FUN_1018_0d6a Function DEFAULT true false 1018:0d8a Code4 FUN_1018_0d8a Function DEFAULT true false 1018:0d9b Code4 FUN_1018_0d9b Function DEFAULT true false 1018:0db9 Code4 LAB_1018_0db9 Label DEFAULT true true 1018:0dc6 Code4 LAB_1018_0dc6 Label DEFAULT true true 1018:0dcd Code4 FUN_1018_0dcd Function DEFAULT true false 1018:0e03 Code4 LAB_1018_0e03 Label DEFAULT true true 1018:0e0a Code4 FUN_1018_0e0a Function DEFAULT true false 1018:0e3f Code4 LAB_1018_0e3f Label DEFAULT true true 1018:0e46 Code4 FUN_1018_0e46 Function DEFAULT true false 1018:0e94 Code4 LAB_1018_0e94 Label DEFAULT true true 1018:0e9e Code4 FUN_1018_0e9e Function DEFAULT true false 1018:0eb9 Code4 LAB_1018_0eb9 Label DEFAULT true true 1018:0ec0 Code4 FUN_1018_0ec0 Function DEFAULT true false 1018:0ee1 Code4 LAB_1018_0ee1 Label DEFAULT true true 1018:0ee5 Code4 LAB_1018_0ee5 Label DEFAULT true true 1018:0ee7 Code4 LAB_1018_0ee7 Label DEFAULT true true 1018:0ef4 Code4 FUN_1018_0ef4 Function DEFAULT true false 1018:0f15 Code4 LAB_1018_0f15 Label DEFAULT true true 1018:0f22 Code4 FUN_1018_0f22 Function DEFAULT true false 1018:0f38 Code4 FUN_1018_0f38 Function DEFAULT true false 1018:0f68 Code4 LAB_1018_0f68 Label DEFAULT true true 1018:0f76 Code4 LAB_1018_0f76 Label DEFAULT true true 1018:0f86 Code4 LAB_1018_0f86 Label DEFAULT true true 1018:0f8d Code4 FUN_1018_0f8d Function DEFAULT true false 1018:0fb5 Code4 LAB_1018_0fb5 Label DEFAULT true true 1018:0fcc Code4 FUN_1018_0fcc Function DEFAULT true false 1018:0ffd Code4 FUN_1018_0ffd Function DEFAULT true false 1018:103e Code4 LAB_1018_103e Label DEFAULT true true 1018:104d Code4 LAB_1018_104d Label DEFAULT true true 1018:1054 Code4 FUN_1018_1054 Function DEFAULT true false 1018:108b Code4 LAB_1018_108b Label DEFAULT true true 1018:10a3 Code4 LAB_1018_10a3 Label DEFAULT true true 1018:10aa Code4 FUN_1018_10aa Function DEFAULT true false 1018:10d2 Code4 LAB_1018_10d2 Label DEFAULT true true 1018:10e2 Code4 LAB_1018_10e2 Label DEFAULT true true 1018:10e9 Code4 FUN_1018_10e9 Function DEFAULT true false 1018:1106 Code4 FUN_1018_1106 Function DEFAULT true false 1018:111a Code4 LAB_1018_111a Label DEFAULT true true 1018:1179 Code4 LAB_1018_1179 Label DEFAULT true true 1018:11b8 Code4 LAB_1018_11b8 Label DEFAULT true true 1018:11c7 Code4 LAB_1018_11c7 Label DEFAULT true true 1018:120f Code4 LAB_1018_120f Label DEFAULT true true 1018:121b Code4 FUN_1018_121b Function DEFAULT true false 1018:1259 Code4 LAB_1018_1259 Label DEFAULT true true 1018:1274 Code4 FUN_1018_1274 Function DEFAULT true false 1018:12f5 Code4 FUN_1018_12f5 Function DEFAULT true false 1018:1311 Code4 FUN_1018_1311 Function DEFAULT true false 1018:134f Code4 FUN_1018_134f Function DEFAULT true false 1018:1364 Code4 LAB_1018_1364 Label DEFAULT true true 1018:137f Code4 LAB_1018_137f Label DEFAULT true true 1018:138d Code4 LAB_1018_138d Label DEFAULT true true 1018:13a0 Code4 LAB_1018_13a0 Label DEFAULT true true 1018:13b2 Code4 LAB_1018_13b2 Label DEFAULT true true 1018:1433 Code4 LAB_1018_1433 Label DEFAULT true true 1018:14bc Code4 LAB_1018_14bc Label DEFAULT true true 1018:14be Code4 LAB_1018_14be Label DEFAULT true true 1018:14d4 Code4 LAB_1018_14d4 Label DEFAULT true true 1018:14e6 Code4 LAB_1018_14e6 Label DEFAULT true true 1018:152d Code4 LAB_1018_152d Label DEFAULT true true 1018:153a Code4 LAB_1018_153a Label DEFAULT true true 1018:1547 Code4 FUN_1018_1547 Function DEFAULT true false 1018:157f Code4 LAB_1018_157f Label DEFAULT true true 1018:1586 Code4 FUN_1018_1586 Function DEFAULT true false 1018:15b9 Code4 LAB_1018_15b9 Label DEFAULT true true 1018:15c0 Code4 FUN_1018_15c0 Function DEFAULT true false 1018:15db Code4 LAB_1018_15db Label DEFAULT true true 1018:15ee Code4 LAB_1018_15ee Label DEFAULT true true 1018:165d Code4 LAB_1018_165d Label DEFAULT true true 1018:1685 Code4 LAB_1018_1685 Label DEFAULT true true 1018:1696 Code4 LAB_1018_1696 Label DEFAULT true true 1018:169d Code4 FUN_1018_169d Function DEFAULT true false 1018:16da Code4 LAB_1018_16da Label DEFAULT true true 1018:16e4 Code4 LAB_1018_16e4 Label DEFAULT true true 1018:16eb Code4 FUN_1018_16eb Function DEFAULT true false 1018:170c Code4 FUN_1018_170c Function DEFAULT true false 1018:1737 Code4 LAB_1018_1737 Label DEFAULT true true 1018:1750 Code4 LAB_1018_1750 Label DEFAULT true true 1018:1761 Code4 FUN_1018_1761 Function DEFAULT true false 1018:1788 Code4 FUN_1018_1788 Function DEFAULT true false 1018:17b8 Code4 LAB_1018_17b8 Label DEFAULT true true 1018:17e1 Code4 LAB_1018_17e1 Label DEFAULT true true 1018:17f1 Code4 LAB_1018_17f1 Label DEFAULT true true 1018:17f8 Code4 FUN_1018_17f8 Function DEFAULT true false 1018:1828 Code4 LAB_1018_1828 Label DEFAULT true true 1018:1851 Code4 LAB_1018_1851 Label DEFAULT true true 1018:1861 Code4 LAB_1018_1861 Label DEFAULT true true 1018:1868 Code4 FUN_1018_1868 Function DEFAULT true false 1018:18a5 Code4 LAB_1018_18a5 Label DEFAULT true true 1018:18d1 Code4 LAB_1018_18d1 Label DEFAULT true true 1018:18e9 Code4 FUN_1018_18e9 Function DEFAULT true false 1018:1917 Code4 LAB_1018_1917 Label DEFAULT true true 1018:1949 Code4 LAB_1018_1949 Label DEFAULT true true 1018:1960 Code4 FUN_1018_1960 Function DEFAULT true false 1018:1986 Code4 FUN_1018_1986 Function DEFAULT true false 1018:19b2 Code4 LAB_1018_19b2 Label DEFAULT true true 1018:19dc Code4 LAB_1018_19dc Label DEFAULT true true 1018:19f7 Code4 LAB_1018_19f7 Label DEFAULT true true 1018:1a0e Code4 FUN_1018_1a0e Function DEFAULT true false 1018:1a3b Code4 LAB_1018_1a3b Label DEFAULT true true 1018:1a4a Code4 LAB_1018_1a4a Label DEFAULT true true 1018:1a61 Code4 FUN_1018_1a61 Function DEFAULT true false 1018:1a72 Code4 LAB_1018_1a72 Label DEFAULT true true 1018:1aea Code4 LAB_1018_1aea Label DEFAULT true true 1018:1afc Code4 LAB_1018_1afc Label DEFAULT true true 1018:1b08 Code4 FUN_1018_1b08 Function DEFAULT true false 1018:1b35 Code4 FUN_1018_1b35 Function DEFAULT true false 1018:1b4b Code4 FUN_1018_1b4b Function DEFAULT true false 1018:1b57 Code4 FUN_1018_1b57 Function DEFAULT true false 1018:1ba0 Code4 LAB_1018_1ba0 Label DEFAULT true true 1018:1ba9 Code4 LAB_1018_1ba9 Label DEFAULT true true 1018:1bb0 Code4 FUN_1018_1bb0 Function DEFAULT true false 1018:1bc9 Code4 LAB_1018_1bc9 Label DEFAULT true true 1018:1bd8 Code4 LAB_1018_1bd8 Label DEFAULT true true 1018:1bdf Code4 FUN_1018_1bdf Function DEFAULT true false 1018:1bfc Code4 FUN_1018_1bfc Function DEFAULT true false 1018:1c08 Code4 LAB_1018_1c08 Label DEFAULT true true 1018:1c2a Code4 LAB_1018_1c2a Label DEFAULT true true 1018:1c52 Code4 LAB_1018_1c52 Label DEFAULT true true 1018:1c54 Code4 LAB_1018_1c54 Label DEFAULT true true 1018:1c68 Code4 LAB_1018_1c68 Label DEFAULT true true 1018:1c7f Code4 FUN_1018_1c7f Function DEFAULT true false 1018:1cc7 Code4 LAB_1018_1cc7 Label DEFAULT true true 1018:1cc9 Code4 LAB_1018_1cc9 Label DEFAULT true true 1018:1cd6 Code4 FUN_1018_1cd6 Function DEFAULT true false 1018:1d18 Code4 LAB_1018_1d18 Label DEFAULT true true 1018:1d22 Code4 FUN_1018_1d22 Function DEFAULT true false 1018:1d51 Code4 LAB_1018_1d51 Label DEFAULT true true 1018:1d55 Code4 LAB_1018_1d55 Label DEFAULT true true 1018:1d57 Code4 LAB_1018_1d57 Label DEFAULT true true 1018:1d64 Code4 FUN_1018_1d64 Function DEFAULT true false 1018:1d9e Code4 LAB_1018_1d9e Label DEFAULT true true 1018:1da2 Code4 LAB_1018_1da2 Label DEFAULT true true 1018:1da4 Code4 LAB_1018_1da4 Label DEFAULT true true 1018:1db1 Code4 FUN_1018_1db1 Function DEFAULT true false 1018:1df4 Code4 LAB_1018_1df4 Label DEFAULT true true 1018:1e20 Code4 LAB_1018_1e20 Label DEFAULT true true 1018:1e2c Code4 LAB_1018_1e2c Label DEFAULT true true 1018:1e39 Code4 FUN_1018_1e39 Function DEFAULT true false 1018:1e97 Code4 LAB_1018_1e97 Label DEFAULT true true 1018:1ea3 Code4 LAB_1018_1ea3 Label DEFAULT true true 1018:1eb0 Code4 FUN_1018_1eb0 Function DEFAULT true false 1018:1ef6 Code4 LAB_1018_1ef6 Label DEFAULT true true 1018:1efc Code4 LAB_1018_1efc Label DEFAULT true true 1018:1f0a Code4 LAB_1018_1f0a Label DEFAULT true true 1018:1f14 Code4 FUN_1018_1f14 Function DEFAULT true false 1018:1f4f Code4 LAB_1018_1f4f Label DEFAULT true true 1018:1f56 Code4 FUN_1018_1f56 Function DEFAULT true false 1020:0000 Code5 code_segment_5_tag Label USER_DEFINED true false 1020:0002 Code5 FUN_1020_0002 Function DEFAULT true false 1020:0049 Code5 LAB_1020_0049 Label DEFAULT true true 1020:0058 Code5 LAB_1020_0058 Label DEFAULT true true 1020:005d Code5 FUN_1020_005d Function DEFAULT true false 1020:0061 Code5 FUN_1020_0061 Function DEFAULT true false 1020:0065 Code5 LAB_1020_0065 Label DEFAULT true true 1020:007a Code5 LAB_1020_007a Label DEFAULT true true 1020:008c Code5 LAB_1020_008c Label DEFAULT true true 1020:00cb Code5 LAB_1020_00cb Label DEFAULT true true 1020:00d2 Code5 FUN_1020_00d2 Function DEFAULT true false 1020:00ef Code5 LAB_1020_00ef Label DEFAULT true true 1020:00f0 Code5 FUN_1020_00f0 Function DEFAULT true false 1020:00ff Code5 LAB_1020_00ff Label DEFAULT true true 1020:0107 Code5 borland_runtime_copyright Label USER_DEFINED true false 1020:012d Code5 FUN_1020_012d Function DEFAULT true false 1020:0141 Code5 LAB_1020_0141 Label DEFAULT true true 1020:0147 Code5 FUN_1020_0147 Function DEFAULT true false 1020:0161 Code5 LAB_1020_0161 Label DEFAULT true true 1020:0167 Code5 FUN_1020_0167 Function DEFAULT true false 1020:017b Code5 LAB_1020_017b Label DEFAULT true true 1020:0190 Code5 LAB_1020_0190 Label DEFAULT true true 1020:0195 Code5 runtime_1020_0195 Function USER_DEFINED true false 1020:01ad Code5 LAB_1020_01ad Label DEFAULT true true 1020:01ba Code5 LAB_1020_01ba Label DEFAULT true true 1020:01c5 Code5 LAB_1020_01c5 Label DEFAULT true true 1020:01ca Code5 FUN_1020_01ca Function DEFAULT true false 1020:01d1 Code5 LAB_1020_01d1 Label DEFAULT true true 1020:01f6 Code5 LAB_1020_01f6 Label DEFAULT true true 1020:0201 Code5 LAB_1020_0201 Label DEFAULT true true 1020:0203 Code5 LAB_1020_0203 Label DEFAULT true true 1020:0214 Code5 LAB_1020_0214 Label DEFAULT true true 1020:021e Code5 LAB_1020_021e Label DEFAULT true true 1020:0221 Code5 LAB_1020_0221 Label DEFAULT true true 1020:0222 Code5 FUN_1020_0222 Function DEFAULT true false 1020:023b Code5 LAB_1020_023b Label DEFAULT true true 1020:023c Code5 FUN_1020_023c Function DEFAULT true false 1020:0247 Code5 LAB_1020_0247 Label DEFAULT true true 1020:0259 Code5 LAB_1020_0259 Label DEFAULT true true 1020:0261 Code5 LAB_1020_0261 Label DEFAULT true true 1020:0269 Code5 LAB_1020_0269 Label DEFAULT true true 1020:026a Code5 FUN_1020_026a Function DEFAULT true false 1020:029e Code5 LAB_1020_029e Label DEFAULT true true 1020:02a4 Code5 LAB_1020_02a4 Label DEFAULT true true 1020:02a6 Code5 FUN_1020_02a6 Function DEFAULT true false 1020:02a9 Code5 LAB_1020_02a9 Label DEFAULT true true 1020:02cd Code5 LAB_1020_02cd Label DEFAULT true true 1020:02d6 Code5 LAB_1020_02d6 Label DEFAULT true true 1020:02d7 Code5 FUN_1020_02d7 Function DEFAULT true false 1020:02f7 Code5 LAB_1020_02f7 Label DEFAULT true true 1020:0306 Code5 LAB_1020_0306 Label DEFAULT true true 1020:0327 Code5 FUN_1020_0327 Function DEFAULT true false 1020:0340 Code5 LAB_1020_0340 Label DEFAULT true true 1020:0342 Code5 LAB_1020_0342 Label DEFAULT true true 1020:0344 Code5 LAB_1020_0344 Label DEFAULT true true 1020:0362 Code5 LAB_1020_0362 Label DEFAULT true true 1020:0372 Code5 LAB_1020_0372 Label DEFAULT true true 1020:0383 Code5 LAB_1020_0383 Label DEFAULT true true 1020:0388 Code5 FUN_1020_0388 Function DEFAULT true false 1020:038f Code5 FUN_1020_038f Function DEFAULT true false 1020:0397 Code5 LAB_1020_0397 Label DEFAULT true true 1020:039d Code5 FUN_1020_039d Function DEFAULT true false 1020:03b0 Code5 LAB_1020_03b0 Label DEFAULT true true 1020:03be Code5 LAB_1020_03be Label DEFAULT true true 1020:03bf Code5 LAB_1020_03bf Label DEFAULT true true 1020:03c5 Code5 runtime_1020_03c5 Function USER_DEFINED true false 1020:03cb Code5 FUN_1020_03cb Function DEFAULT true false 1020:03e8 Code5 LAB_1020_03e8 Label DEFAULT true true 1020:03e9 Code5 LAB_1020_03e9 Label DEFAULT true true 1020:03ef Code5 FUN_1020_03ef Function DEFAULT true false 1020:0405 Code5 LAB_1020_0405 Label DEFAULT true true 1020:0408 Code5 LAB_1020_0408 Label DEFAULT true true 1020:0409 Code5 LAB_1020_0409 Label DEFAULT true true 1020:042f Code5 LAB_1020_042f Label DEFAULT true true 1020:0439 Code5 FUN_1020_0439 Function DEFAULT true false 1020:0459 Code5 LAB_1020_0459 Label DEFAULT true true 1020:0462 Code5 LAB_1020_0462 Label DEFAULT true true 1020:046c Code5 runtime_1020_046c Function USER_DEFINED true false 1020:048f Code5 runtime_1020_048f Function USER_DEFINED true false 1020:0499 Code5 LAB_1020_0499 Label DEFAULT true true 1020:049f Code5 runtime_1020_049f Function USER_DEFINED true false 1020:04e8 Code5 LAB_1020_04e8 Label DEFAULT true true 1020:04f0 Code5 LAB_1020_04f0 Label DEFAULT true true 1020:04fc Code5 runtime_1020_04fc Function USER_DEFINED true false 1020:0527 Code5 FUN_1020_0527 Function DEFAULT true false 1020:052c Code5 FUN_1020_052c Function DEFAULT true false 1020:0534 Code5 FUN_1020_0534 Function DEFAULT true false 1020:0557 Code5 LAB_1020_0557 Label DEFAULT true true 1020:055f Code5 LAB_1020_055f Label DEFAULT true true 1020:057b Code5 LAB_1020_057b Label DEFAULT true true 1020:0586 Code5 FUN_1020_0586 Function DEFAULT true false 1020:0588 Code5 LAB_1020_0588 Label DEFAULT true true 1020:05a8 Code5 LAB_1020_05a8 Label DEFAULT true true 1020:05b0 Code5 LAB_1020_05b0 Label DEFAULT true true 1020:05c0 Code5 LAB_1020_05c0 Label DEFAULT true true 1020:05c7 Code5 FUN_1020_05c7 Function DEFAULT true false 1020:05d5 Code5 LAB_1020_05d5 Label DEFAULT true true 1020:05d8 Code5 FUN_1020_05d8 Function DEFAULT true false 1020:05f6 Code5 LAB_1020_05f6 Label DEFAULT true true 1020:0600 Code5 LAB_1020_0600 Label DEFAULT true true 1020:0608 Code5 FUN_1020_0608 Function DEFAULT true false 1020:0629 Code5 LAB_1020_0629 Label DEFAULT true true 1020:062d Code5 FUN_1020_062d Function DEFAULT true false 1020:0649 Code5 LAB_1020_0649 Label DEFAULT true true 1020:064d Code5 FUN_1020_064d Function DEFAULT true false 1020:0661 Code5 LAB_1020_0661 Label DEFAULT true true 1020:0663 Code5 LAB_1020_0663 Label DEFAULT true true 1020:0667 Code5 FUN_1020_0667 Function DEFAULT true false 1020:0697 Code5 LAB_1020_0697 Label DEFAULT true true 1020:069f Code5 LAB_1020_069f Label DEFAULT true true 1020:06ab Code5 FUN_1020_06ab Function DEFAULT true false 1020:06ba Code5 LAB_1020_06ba Label DEFAULT true true 1020:06d8 Code5 LAB_1020_06d8 Label DEFAULT true true 1020:06e2 Code5 LAB_1020_06e2 Label DEFAULT true true 1020:06fb Code5 LAB_1020_06fb Label DEFAULT true true 1020:06fc Code5 LAB_1020_06fc Label DEFAULT true true 1020:070c Code5 LAB_1020_070c Label DEFAULT true true 1020:0710 Code5 runtime_1020_0710 Function USER_DEFINED true false 1020:0729 Code5 LAB_1020_0729 Label DEFAULT true true 1020:072c Code5 FUN_1020_072c Function DEFAULT true false 1020:0748 Code5 LAB_1020_0748 Label DEFAULT true true 1020:074e Code5 LAB_1020_074e Label DEFAULT true true 1020:0751 Code5 FUN_1020_0751 Function DEFAULT true false 1020:075f Code5 LAB_1020_075f Label DEFAULT true true 1020:0760 Code5 runtime_1020_0760 Function USER_DEFINED true false 1020:076c Code5 LAB_1020_076c Label DEFAULT true true 1020:078f Code5 LAB_1020_078f Label DEFAULT true true 1020:0792 Code5 LAB_1020_0792 Label DEFAULT true true 1020:0796 Code5 runtime_1020_0796 Function USER_DEFINED true false 1020:07a2 Code5 LAB_1020_07a2 Label DEFAULT true true 1020:07d0 Code5 LAB_1020_07d0 Label DEFAULT true true 1020:07de Code5 LAB_1020_07de Label DEFAULT true true 1020:07e9 Code5 LAB_1020_07e9 Label DEFAULT true true 1020:07ec Code5 LAB_1020_07ec Label DEFAULT true true 1020:07fa Code5 LAB_1020_07fa Label DEFAULT true true 1020:07fe Code5 FUN_1020_07fe Function DEFAULT true false 1020:082a Code5 LAB_1020_082a Label DEFAULT true true 1020:082e Code5 FUN_1020_082e Function DEFAULT true false 1020:0848 Code5 LAB_1020_0848 Label DEFAULT true true 1020:085f Code5 LAB_1020_085f Label DEFAULT true true 1020:0866 Code5 runtime_1020_0866 Function USER_DEFINED true false 1020:0871 Code5 FUN_1020_0871 Function DEFAULT true false 1020:0876 Code5 LAB_1020_0876 Label DEFAULT true true 1020:087f Code5 LAB_1020_087f Label DEFAULT true true 1020:0882 Code5 LAB_1020_0882 Label DEFAULT true true 1020:0890 Code5 LAB_1020_0890 Label DEFAULT true true 1020:0891 Code5 FUN_1020_0891 Function DEFAULT true false 1020:08a9 Code5 FUN_1020_08a9 Function DEFAULT true false 1020:08cb Code5 LAB_1020_08cb Label DEFAULT true true 1020:08e6 Code5 FUN_1020_08e6 Function DEFAULT true false 1020:0914 Code5 LAB_1020_0914 Label DEFAULT true true 1020:0923 Code5 LAB_1020_0923 Label DEFAULT true true 1020:0934 Code5 LAB_1020_0934 Label DEFAULT true true 1020:0944 Code5 LAB_1020_0944 Label DEFAULT true true 1020:0958 Code5 LAB_1020_0958 Label DEFAULT true true 1020:095e Code5 LAB_1020_095e Label DEFAULT true true 1020:095f Code5 LAB_1020_095f Label DEFAULT true true 1020:0965 Code5 LAB_1020_0965 Label DEFAULT true true 1020:0967 Code5 LAB_1020_0967 Label DEFAULT true true 1020:0974 Code5 LAB_1020_0974 Label DEFAULT true true 1020:0980 Code5 LAB_1020_0980 Label DEFAULT true true 1020:098a Code5 LAB_1020_098a Label DEFAULT true true 1020:098c Code5 runtime_1020_098c Function USER_DEFINED true false 1020:09a3 Code5 LAB_1020_09a3 Label DEFAULT true true 1020:09a8 Code5 LAB_1020_09a8 Label DEFAULT true true 1020:09ae Code5 LAB_1020_09ae Label DEFAULT true true 1020:09af Code5 runtime_1020_09af Function USER_DEFINED true false 1020:09c6 Code5 LAB_1020_09c6 Label DEFAULT true true 1020:09cb Code5 LAB_1020_09cb Label DEFAULT true true 1020:09d1 Code5 LAB_1020_09d1 Label DEFAULT true true 1020:09d2 Code5 runtime_1020_09d2 Function USER_DEFINED true false 1020:09ec Code5 FUN_1020_09ec Function DEFAULT true false 1020:0a04 Code5 LAB_1020_0a04 Label DEFAULT true true 1020:0a10 Code5 FUN_1020_0a10 Function DEFAULT true false 1020:0a2c Code5 LAB_1020_0a2c Label DEFAULT true true 1020:0a3d Code5 LAB_1020_0a3d Label DEFAULT true true 1020:0a45 Code5 LAB_1020_0a45 Label DEFAULT true true 1020:0a47 Code5 LAB_1020_0a47 Label DEFAULT true true 1020:0a51 Code5 FUN_1020_0a51 Function DEFAULT true false 1020:0a71 Code5 LAB_1020_0a71 Label DEFAULT true true 1020:0a7d Code5 FUN_1020_0a7d Function DEFAULT true false 1020:0a9c Code5 LAB_1020_0a9c Label DEFAULT true true 1020:0ab6 Code5 LAB_1020_0ab6 Label DEFAULT true true 1020:0aba Code5 LAB_1020_0aba Label DEFAULT true true 1020:0abe Code5 LAB_1020_0abe Label DEFAULT true true 1020:0ac3 Code5 FUN_1020_0ac3 Function DEFAULT true false 1020:0add Code5 LAB_1020_0add Label DEFAULT true true 1020:0ae7 Code5 LAB_1020_0ae7 Label DEFAULT true true 1020:0ae9 Code5 LAB_1020_0ae9 Label DEFAULT true true 1020:0aee Code5 runtime_1020_0aee Function USER_DEFINED true false 1020:0b00 Code5 FUN_1020_0b00 Function DEFAULT true false 1020:0b1b Code5 FUN_1020_0b1b Function DEFAULT true false 1020:0b2d Code5 LAB_1020_0b2d Label DEFAULT true true 1020:0b7a Code5 FUN_1020_0b7a Function DEFAULT true false 1020:0ba0 Code5 LAB_1020_0ba0 Label DEFAULT true true 1020:0be3 Code5 LAB_1020_0be3 Label DEFAULT true true 1020:0be9 Code5 FUN_1020_0be9 Function DEFAULT true false 1020:0c0b Code5 LAB_1020_0c0b Label DEFAULT true true 1020:0c1a Code5 LAB_1020_0c1a Label DEFAULT true true 1020:0c4b Code5 LAB_1020_0c4b Label DEFAULT true true 1020:0c55 Code5 LAB_1020_0c55 Label DEFAULT true true 1020:0c5a Code5 LAB_1020_0c5a Label DEFAULT true true 1020:0c72 Code5 LAB_1020_0c72 Label DEFAULT true true 1020:0c76 Code5 FUN_1020_0c76 Function DEFAULT true false 1020:0c8d Code5 LAB_1020_0c8d Label DEFAULT true true 1020:0ca9 Code5 LAB_1020_0ca9 Label DEFAULT true true 1020:0cab Code5 LAB_1020_0cab Label DEFAULT true true 1020:0cb9 Code5 LAB_1020_0cb9 Label DEFAULT true true 1020:0ccf Code5 LAB_1020_0ccf Label DEFAULT true true 1020:0cd0 Code5 FUN_1020_0cd0 Function DEFAULT true false 1020:0cd4 Code5 FUN_1020_0cd4 Function DEFAULT true false 1020:0ce5 Code5 LAB_1020_0ce5 Label DEFAULT true true 1020:0d05 Code5 LAB_1020_0d05 Label DEFAULT true true 1020:0d1b Code5 LAB_1020_0d1b Label DEFAULT true true 1020:0d1f Code5 LAB_1020_0d1f Label DEFAULT true true 1020:0d29 Code5 LAB_1020_0d29 Label DEFAULT true true 1020:0d41 Code5 LAB_1020_0d41 Label DEFAULT true true 1020:0d4c Code5 LAB_1020_0d4c Label DEFAULT true true 1020:0d53 Code5 LAB_1020_0d53 Label DEFAULT true true 1020:0d54 Code5 LAB_1020_0d54 Label DEFAULT true true 1020:0d5b Code5 LAB_1020_0d5b Label DEFAULT true true 1020:0d61 Code5 LAB_1020_0d61 Label DEFAULT true true 1020:0d63 Code5 LAB_1020_0d63 Label DEFAULT true true 1020:0d7e Code5 LAB_1020_0d7e Label DEFAULT true true 1020:0d86 Code5 LAB_1020_0d86 Label DEFAULT true true 1020:0d94 Code5 LAB_1020_0d94 Label DEFAULT true true 1020:0d97 Code5 FUN_1020_0d97 Function DEFAULT true false 1020:0dc1 Code5 LAB_1020_0dc1 Label DEFAULT true true 1020:0dce Code5 LAB_1020_0dce Label DEFAULT true true 1020:0deb Code5 LAB_1020_0deb Label DEFAULT true true 1020:0e66 Code5 LAB_1020_0e66 Label DEFAULT true true 1020:0e74 Code5 LAB_1020_0e74 Label DEFAULT true true 1020:0e78 Code5 LAB_1020_0e78 Label DEFAULT true true 1020:0e86 Code5 LAB_1020_0e86 Label DEFAULT true true 1020:0e93 Code5 FUN_1020_0e93 Function DEFAULT true false 1020:0e9a Code5 FUN_1020_0e9a Function DEFAULT true false 1020:0ebb Code5 LAB_1020_0ebb Label DEFAULT true true 1020:0ec5 Code5 LAB_1020_0ec5 Label DEFAULT true true 1020:0ecd Code5 LAB_1020_0ecd Label DEFAULT true true 1020:0ed1 Code5 LAB_1020_0ed1 Label DEFAULT true true 1020:0ee2 Code5 LAB_1020_0ee2 Label DEFAULT true true 1020:0ef0 Code5 LAB_1020_0ef0 Label DEFAULT true true 1020:0f0a Code5 LAB_1020_0f0a Label DEFAULT true true 1020:0f11 Code5 FUN_1020_0f11 Function DEFAULT true false 1020:0f1c Code5 LAB_1020_0f1c Label DEFAULT true true 1020:0f28 Code5 FUN_1020_0f28 Function DEFAULT true false 1020:0f3a Code5 LAB_1020_0f3a Label DEFAULT true true 1020:0f3b Code5 FUN_1020_0f3b Function DEFAULT true false 1020:0f4e Code5 LAB_1020_0f4e Label DEFAULT true true 1020:0f63 Code5 LAB_1020_0f63 Label DEFAULT true true 1020:0f67 Code5 LAB_1020_0f67 Label DEFAULT true true 1020:0f6f Code5 LAB_1020_0f6f Label DEFAULT true true 1020:0f76 Code5 LAB_1020_0f76 Label DEFAULT true true 1020:0f77 Code5 FUN_1020_0f77 Function DEFAULT true false 1020:0f96 Code5 LAB_1020_0f96 Label DEFAULT true true 1020:0fa8 Code5 LAB_1020_0fa8 Label DEFAULT true true 1020:0fac Code5 LAB_1020_0fac Label DEFAULT true true 1020:0fb6 Code5 LAB_1020_0fb6 Label DEFAULT true true 1020:0fc4 Code5 LAB_1020_0fc4 Label DEFAULT true true 1020:0fd5 Code5 LAB_1020_0fd5 Label DEFAULT true true 1020:0fd9 Code5 LAB_1020_0fd9 Label DEFAULT true true 1020:0fda Code5 LAB_1020_0fda Label DEFAULT true true 1020:0fe5 Code5 FUN_1020_0fe5 Function DEFAULT true false 1020:0feb Code5 FUN_1020_0feb Function DEFAULT true false 1020:0ff1 Code5 FUN_1020_0ff1 Function DEFAULT true false 1020:0ff7 Code5 FUN_1020_0ff7 Function DEFAULT true false 1020:0ffd Code5 FUN_1020_0ffd Function DEFAULT true false 1020:1007 Code5 FUN_1020_1007 Function DEFAULT true false 1020:100b Code5 FUN_1020_100b Function DEFAULT true false 1020:1017 Code5 FUN_1020_1017 Function DEFAULT true false 1020:101f Code5 LAB_1020_101f Label DEFAULT true true 1020:1025 Code5 LAB_1020_1025 Label DEFAULT true true 1020:102b Code5 LAB_1020_102b Label DEFAULT true true 1020:1031 Code5 FUN_1020_1031 Function DEFAULT true false 1020:103b Code5 runtime_1020_103b Function USER_DEFINED true false 1020:1045 Code5 runtime_1020_1045 Function USER_DEFINED true false 1020:104f Code5 FUN_1020_104f Function DEFAULT true false 1020:1059 Code5 runtime_1020_1059 Function USER_DEFINED true false 1020:106e Code5 LAB_1020_106e Label DEFAULT true true 1020:107f Code5 LAB_1020_107f Label DEFAULT true true 1020:1091 Code5 LAB_1020_1091 Label DEFAULT true true 1020:1095 Code5 LAB_1020_1095 Label DEFAULT true true 1020:10a0 Code5 LAB_1020_10a0 Label DEFAULT true true 1020:10a6 Code5 LAB_1020_10a6 Label DEFAULT true true 1020:10a7 Code5 LAB_1020_10a7 Label DEFAULT true true 1020:10aa Code5 runtime_1020_10aa Function USER_DEFINED true false 1020:10be Code5 FUN_1020_10be Function DEFAULT true false 1020:10eb Code5 LAB_1020_10eb Label DEFAULT true true 1020:110a Code5 LAB_1020_110a Label DEFAULT true true 1020:1114 Code5 LAB_1020_1114 Label DEFAULT true true 1020:111d Code5 runtime_1020_111d Function USER_DEFINED true false 1020:1130 Code5 LAB_1020_1130 Label DEFAULT true true 1020:1157 Code5 LAB_1020_1157 Label DEFAULT true true 1020:115f Code5 LAB_1020_115f Label DEFAULT true true 1020:116a Code5 LAB_1020_116a Label DEFAULT true true 1020:1179 Code5 LAB_1020_1179 Label DEFAULT true true 1020:1186 Code5 LAB_1020_1186 Label DEFAULT true true 1020:1190 Code5 LAB_1020_1190 Label DEFAULT true true 1020:1191 Code5 real48_table_1191 Label USER_DEFINED true false 1020:11bb Code5 runtime_1020_11bb Function USER_DEFINED true false 1020:11c4 Code5 LAB_1020_11c4 Label DEFAULT true true 1020:11ca Code5 LAB_1020_11ca Label DEFAULT true true 1020:123f Code5 LAB_1020_123f Label DEFAULT true true 1020:1240 Code5 real48_table_1240 Label USER_DEFINED true false 1020:1264 Code5 runtime_1020_1264 Function USER_DEFINED true false 1020:1294 Code5 LAB_1020_1294 Label DEFAULT true true 1020:12b8 Code5 LAB_1020_12b8 Label DEFAULT true true 1020:12cf Code5 LAB_1020_12cf Label DEFAULT true true 1020:12d0 Code5 LAB_1020_12d0 Label DEFAULT true true 1020:12d7 Code5 real48_table_12d7 Label USER_DEFINED true false 1020:1307 Code5 runtime_1020_1307 Function USER_DEFINED true false 1020:1314 Code5 LAB_1020_1314 Label DEFAULT true true 1020:131f Code5 LAB_1020_131f Label DEFAULT true true 1020:1338 Code5 LAB_1020_1338 Label DEFAULT true true 1020:134b Code5 LAB_1020_134b Label DEFAULT true true 1020:1351 Code5 LAB_1020_1351 Label DEFAULT true true 1020:136d Code5 LAB_1020_136d Label DEFAULT true true 1020:13c2 Code5 LAB_1020_13c2 Label DEFAULT true true 1020:13dc Code5 LAB_1020_13dc Label DEFAULT true true 1020:13e4 Code5 LAB_1020_13e4 Label DEFAULT true true 1020:13e8 Code5 real48_table_13e8 Label USER_DEFINED true false 1020:13ea Code5 real48_table_13e8[2] Label DEFAULT true true 1020:13ec Code5 real48_table_13e8[4] Label DEFAULT true true 1020:13ee Code5 real48_table_13e8[6] Label DEFAULT true true 1020:13f0 Code5 real48_table_13e8[8] Label DEFAULT true true 1020:13f2 Code5 real48_table_13e8[10] Label DEFAULT true true 1020:13fa Code5 real48_table_13e8[18] Label DEFAULT true true 1020:13fc Code5 real48_table_13e8[20] Label DEFAULT true true 1020:13fe Code5 real48_table_13e8[22] Label DEFAULT true true 1020:1436 Code5 runtime_1020_1436 Function USER_DEFINED true false 1020:143c Code5 FUN_1020_143c Function DEFAULT true false 1020:1455 Code5 FUN_1020_1455 Function DEFAULT true false 1020:1473 Code5 LAB_1020_1473 Label DEFAULT true true 1020:1483 Code5 LAB_1020_1483 Label DEFAULT true true 1020:14a4 Code5 FUN_1020_14a4 Function DEFAULT true false 1020:14c1 Code5 FUN_1020_14c1 Function DEFAULT true false 1020:14cb Code5 LAB_1020_14cb Label DEFAULT true true 1020:14da Code5 LAB_1020_14da Label DEFAULT true true 1020:14de Code5 runtime_1020_14de Function USER_DEFINED true false 1020:14fb Code5 DAT_1020_14fb Label DEFAULT true true 1020:14ff Code5 DAT_1020_14ff Label DEFAULT true true 1020:1501 Code5 FUN_1020_1501 Function DEFAULT true false 1020:1537 Code5 DAT_1020_1537 Label DEFAULT true true 1020:1539 Code5 runtime_1020_1539 Function USER_DEFINED true false 1020:1546 Code5 FUN_1020_1546 Function DEFAULT true false 1020:1562 Code5 FUN_1020_1562 Function DEFAULT true false 1020:1575 Code5 LAB_1020_1575 Label DEFAULT true true 1020:1582 Code5 FUN_1020_1582 Function DEFAULT true false 1020:1597 Code5 LAB_1020_1597 Label DEFAULT true true 1020:159b Code5 LAB_1020_159b Label DEFAULT true true 1020:15a1 Code5 LAB_1020_15a1 Label DEFAULT true true 1020:15d1 Code5 LAB_1020_15d1 Label DEFAULT true true 1020:15e2 Code5 LAB_1020_15e2 Label DEFAULT true true 1020:15e6 Code5 LAB_1020_15e6 Label DEFAULT true true 1020:15e7 Code5 LAB_1020_15e7 Label DEFAULT true true 1020:15e9 Code5 LAB_1020_15e9 Label DEFAULT true true 1020:15ed Code5 LAB_1020_15ed Label DEFAULT true true 1020:15f8 Code5 LAB_1020_15f8 Label DEFAULT true true 1020:160b Code5 LAB_1020_160b Label DEFAULT true true 1020:160d Code5 LAB_1020_160d Label DEFAULT true true 1020:1627 Code5 LAB_1020_1627 Label DEFAULT true true 1020:1629 Code5 FUN_1020_1629 Function DEFAULT true false 1020:1651 Code5 LAB_1020_1651 Label DEFAULT true true 1020:1657 Code5 LAB_1020_1657 Label DEFAULT true true 1020:165d Code5 LAB_1020_165d Label DEFAULT true true 1020:166b Code5 LAB_1020_166b Label DEFAULT true true 1020:1674 Code5 FUN_1020_1674 Function DEFAULT true false 1020:1682 Code5 LAB_1020_1682 Label DEFAULT true true 1020:168b Code5 LAB_1020_168b Label DEFAULT true true 1020:1692 Code5 LAB_1020_1692 Label DEFAULT true true 1020:169b Code5 LAB_1020_169b Label DEFAULT true true 1020:16a5 Code5 FUN_1020_16a5 Function DEFAULT true false 1020:16c1 Code5 LAB_1020_16c1 Label DEFAULT true true 1020:16c9 Code5 FUN_1020_16c9 Function DEFAULT true false 1020:16dd Code5 runtime_1020_16dd Function USER_DEFINED true false 1020:16e1 Code5 FUN_1020_16e1 Function DEFAULT true false 1020:16e6 Code5 FUN_1020_16e6 Function DEFAULT true false 1020:16f2 Code5 LAB_1020_16f2 Label DEFAULT true true 1020:16f9 Code5 LAB_1020_16f9 Label DEFAULT true true 1020:1713 Code5 LAB_1020_1713 Label DEFAULT true true 1028:0010 Data6 s_IWIKTDK_Highscores_1028_0010 Label DEFAULT true true 1028:0012 Data6 s_IKTDK_Highscores_1028_0010+2 Label DEFAULT true true 1028:03ea Data6 DAT_1028_03ea Label DEFAULT true true 1028:03ec Data6 DAT_1028_03ec Label DEFAULT true true 1028:03ee Data6 DAT_1028_03ee Label DEFAULT true true 1028:03f0 Data6 DAT_1028_03f0 Label DEFAULT true true 1028:0538 Data6 DAT_1028_0538 Label DEFAULT true true 1028:053a Data6 DAT_1028_053a Label DEFAULT true true 1028:053c Data6 DAT_1028_053c Label DEFAULT true true 1028:053e Data6 DAT_1028_053e Label DEFAULT true true 1028:0540 Data6 DAT_1028_0540 Label DEFAULT true true 1028:0542 Data6 DAT_1028_0542 Label DEFAULT true true 1028:0544 Data6 DAT_1028_0544 Label DEFAULT true true 1028:0546 Data6 DAT_1028_0546 Label DEFAULT true true 1028:0548 Data6 DAT_1028_0548 Label DEFAULT true true 1028:054a Data6 DAT_1028_054a Label DEFAULT true true 1028:054c Data6 DAT_1028_054c Label DEFAULT true true 1028:054e Data6 DAT_1028_054e Label DEFAULT true true 1028:055e Data6 DAT_1028_055e Label DEFAULT true true 1028:055f Data6 DAT_1028_055f Label DEFAULT true true 1028:0560 Data6 DAT_1028_0560 Label DEFAULT true true 1028:056c Data6 DAT_1028_056c Label DEFAULT true true 1028:056e Data6 DAT_1028_056e Label DEFAULT true true 1028:0570 Data6 DAT_1028_0570 Label DEFAULT true true 1028:0572 Data6 DAT_1028_0572 Label DEFAULT true true 1028:0578 Data6 DAT_1028_0578 Label DEFAULT true true 1028:057a Data6 DAT_1028_057a Label DEFAULT true true 1028:0586 Data6 DAT_1028_0586 Label DEFAULT true true 1028:0588 Data6 DAT_1028_0588 Label DEFAULT true true 1028:058a Data6 DAT_1028_058a Label DEFAULT true true 1028:058c Data6 DAT_1028_058c Label DEFAULT true true 1028:058d Data6 DAT_1028_058d Label DEFAULT true true 1028:058e Data6 DAT_1028_058e Label DEFAULT true true 1028:058f Data6 DAT_1028_058f Label DEFAULT true true 1028:0590 Data6 DAT_1028_0590 Label DEFAULT true true 1028:0591 Data6 DAT_1028_0591 Label DEFAULT true true 1028:0592 Data6 DAT_1028_0592 Label DEFAULT true true 1028:0593 Data6 DAT_1028_0593 Label DEFAULT true true 1028:0594 Data6 DAT_1028_0594 Label DEFAULT true true 1028:0595 Data6 DAT_1028_0595 Label DEFAULT true true 1028:0596 Data6 DAT_1028_0596 Label DEFAULT true true 1028:0597 Data6 DAT_1028_0597 Label DEFAULT true true 1028:064e Data6 DAT_1028_064e Label DEFAULT true true 1028:0650 Data6 DAT_1028_064e+2 Label DEFAULT true true 1028:0652 Data6 DAT_1028_0652 Label DEFAULT true true 1028:0654 Data6 DAT_1028_0654 Label DEFAULT true true 1028:0656 Data6 DAT_1028_0656 Label DEFAULT true true 1028:0658 Data6 DAT_1028_0658 Label DEFAULT true true 1028:0666 Data6 DAT_1028_0666 Label DEFAULT true true 1028:0668 Data6 DAT_1028_0668 Label DEFAULT true true 1028:066a Data6 DAT_1028_066a Label DEFAULT true true 1028:066c Data6 DAT_1028_066c Label DEFAULT true true 1028:066e Data6 DAT_1028_066e Label DEFAULT true true 1028:0670 Data6 DAT_1028_0670 Label DEFAULT true true 1028:0672 Data6 DAT_1028_0672 Label DEFAULT true true 1028:0674 Data6 DAT_1028_0674 Label DEFAULT true true 1028:0676 Data6 DAT_1028_0676 Label DEFAULT true true 1028:0678 Data6 DAT_1028_0678 Label DEFAULT true true 1028:0682 Data6 DAT_1028_0682 Label DEFAULT true true 1028:0684 Data6 DAT_1028_0684 Label DEFAULT true true 1028:06f2 Data6 DAT_1028_06f2 Label DEFAULT true true 1028:06f4 Data6 DAT_1028_06f4 Label DEFAULT true true 1028:06f6 Data6 DAT_1028_06f6 Label DEFAULT true true 1028:06f8 Data6 DAT_1028_06f8 Label DEFAULT true true 1028:06fa Data6 DAT_1028_06fa Label DEFAULT true true 1028:06fc Data6 DAT_1028_06fc Label DEFAULT true true 1028:06fe Data6 DAT_1028_06fe Label DEFAULT true true 1028:0700 Data6 DAT_1028_0700 Label DEFAULT true true 1028:0702 Data6 DAT_1028_0702 Label DEFAULT true true 1028:0704 Data6 DAT_1028_0702+2 Label DEFAULT true true 1028:0706 Data6 DAT_1028_0706 Label DEFAULT true true 1028:0708 Data6 DAT_1028_0708 Label DEFAULT true true 1028:070a Data6 DAT_1028_070a Label DEFAULT true true 1028:070c Data6 DAT_1028_070c Label DEFAULT true true 1028:070e Data6 DAT_1028_070e Label DEFAULT true true 1028:0710 Data6 DAT_1028_0710 Label DEFAULT true true 1028:0712 Data6 DAT_1028_0712 Label DEFAULT true true 1028:0714 Data6 DAT_1028_0714 Label DEFAULT true true 1028:0716 Data6 DAT_1028_0716 Label DEFAULT true true 1028:0718 Data6 DAT_1028_0718 Label DEFAULT true true 1028:071a Data6 DAT_1028_071a Label DEFAULT true true 1028:071c Data6 DAT_1028_071c Label DEFAULT true true 1028:071e Data6 DAT_1028_071e Label DEFAULT true true 1028:0720 Data6 DAT_1028_0720 Label DEFAULT true true 1028:0722 Data6 DAT_1028_0722 Label DEFAULT true true 1028:0724 Data6 DAT_1028_0724 Label DEFAULT true true 1028:0726 Data6 DAT_1028_0726 Label DEFAULT true true 1028:0727 Data6 DAT_1028_0727 Label DEFAULT true true 1028:0748 Data6 DAT_1028_0748 Label DEFAULT true true 1028:07bf Data6 DAT_1028_07bf Label DEFAULT true true 1028:07c1 Data6 DAT_1028_07c1 Label DEFAULT true true 1028:07c4 Data6 DAT_1028_07c4 Label DEFAULT true true 1028:07c5 Data6 DAT_1028_07c5 Label DEFAULT true true 1028:07c6 Data6 DAT_1028_07c6 Label DEFAULT true true 1028:07c7 Data6 DAT_1028_07c7 Label DEFAULT true true 1028:07c8 Data6 DAT_1028_07c8 Label DEFAULT true true 1028:07c9 Data6 DAT_1028_07c9 Label DEFAULT true true 1028:07ca Data6 DAT_1028_07ca Label DEFAULT true true 1028:07cb Data6 DAT_1028_07cb Label DEFAULT true true 1028:07cc Data6 DAT_1028_07cc Label DEFAULT true true 1028:07cd Data6 DAT_1028_07cd Label DEFAULT true true 1028:07cf Data6 DAT_1028_07cf Label DEFAULT true true 1028:07d0 Data6 DAT_1028_07d0 Label DEFAULT true true 1028:07d1 Data6 DAT_1028_07d1 Label DEFAULT true true 1028:07d2 Data6 DAT_1028_07d2 Label DEFAULT true true 1028:07d3 Data6 DAT_1028_07d3 Label DEFAULT true true 1028:07d5 Data6 DAT_1028_07d5 Label DEFAULT true true 1028:07d7 Data6 DAT_1028_07d7 Label DEFAULT true true 1028:07d9 Data6 DAT_1028_07d9 Label DEFAULT true true 1028:07db Data6 DAT_1028_07db Label DEFAULT true true 1028:07dd Data6 DAT_1028_07dd Label DEFAULT true true 1028:07df Data6 DAT_1028_07df Label DEFAULT true true 1028:07e1 Data6 DAT_1028_07e1 Label DEFAULT true true 1028:07e3 Data6 DAT_1028_07e3 Label DEFAULT true true 1028:07e5 Data6 DAT_1028_07e5 Label DEFAULT true true 1028:07e7 Data6 DAT_1028_07e7 Label DEFAULT true true 1028:07e9 Data6 DAT_1028_07e9 Label DEFAULT true true 1028:07eb Data6 DAT_1028_07eb Label DEFAULT true true 1028:07ed Data6 DAT_1028_07ed Label DEFAULT true true 1028:07ef Data6 DAT_1028_07ef Label DEFAULT true true 1028:07f1 Data6 DAT_1028_07f1 Label DEFAULT true true 1028:07f3 Data6 DAT_1028_07f3 Label DEFAULT true true 1028:07f5 Data6 DAT_1028_07f5 Label DEFAULT true true 1028:07f7 Data6 DAT_1028_07f7 Label DEFAULT true true 1028:07f9 Data6 DAT_1028_07f9 Label DEFAULT true true 1028:07fb Data6 DAT_1028_07fb Label DEFAULT true true 1028:07fd Data6 DAT_1028_07fd Label DEFAULT true true 1028:07ff Data6 DAT_1028_07ff Label DEFAULT true true 1028:0801 Data6 DAT_1028_0801 Label DEFAULT true true 1028:0803 Data6 DAT_1028_0803 Label DEFAULT true true 1028:0805 Data6 DAT_1028_0805 Label DEFAULT true true 1028:0807 Data6 DAT_1028_0807 Label DEFAULT true true 1028:0809 Data6 DAT_1028_0809 Label DEFAULT true true 1028:080b Data6 DAT_1028_080b Label DEFAULT true true 1028:080d Data6 DAT_1028_080d Label DEFAULT true true 1028:080f Data6 DAT_1028_080f Label DEFAULT true true 1028:0811 Data6 DAT_1028_0811 Label DEFAULT true true 1028:0813 Data6 DAT_1028_0813 Label DEFAULT true true 1028:0815 Data6 DAT_1028_0815 Label DEFAULT true true 1028:0817 Data6 DAT_1028_0817 Label DEFAULT true true 1028:0818 Data6 DAT_1028_0818 Label DEFAULT true true 1028:081b Data6 DAT_1028_081b Label DEFAULT true true 1028:081c Data6 DAT_1028_081c Label DEFAULT true true 1028:0821 Data6 DAT_1028_0821 Label DEFAULT true true 1028:0823 Data6 DAT_1028_0823 Label DEFAULT true true 1028:0829 Data6 DAT_1028_0829 Label DEFAULT true true 1028:082b Data6 DAT_1028_082b Label DEFAULT true true 1028:082d Data6 DAT_1028_082d Label DEFAULT true true 1028:082f Data6 DAT_1028_082f Label DEFAULT true true 1028:0831 Data6 DAT_1028_0831 Label DEFAULT true true 1028:0833 Data6 DAT_1028_0833 Label DEFAULT true true 1028:0835 Data6 DAT_1028_0835 Label DEFAULT true true 1028:0837 Data6 DAT_1028_0837 Label DEFAULT true true 1028:0839 Data6 DAT_1028_0839 Label DEFAULT true true 1028:083b Data6 DAT_1028_083b Label DEFAULT true true 1028:083d Data6 DAT_1028_083d Label DEFAULT true true 1028:083f Data6 DAT_1028_083f Label DEFAULT true true 1028:0849 Data6 DAT_1028_0849 Label DEFAULT true true 1028:084b Data6 DAT_1028_084b Label DEFAULT true true 1028:084d Data6 DAT_1028_084d Label DEFAULT true true 1028:084f Data6 DAT_1028_084f Label DEFAULT true true 1028:0851 Data6 DAT_1028_0851 Label DEFAULT true true 1028:0853 Data6 DAT_1028_0853 Label DEFAULT true true 1028:0855 Data6 DAT_1028_0855 Label DEFAULT true true 1028:0857 Data6 DAT_1028_0857 Label DEFAULT true true 1028:0859 Data6 DAT_1028_0859 Label DEFAULT true true 1028:085b Data6 DAT_1028_085b Label DEFAULT true true 1028:085d Data6 DAT_1028_085d Label DEFAULT true true 1028:085f Data6 DAT_1028_085f Label DEFAULT true true 1028:0861 Data6 DAT_1028_0861 Label DEFAULT true true 1028:0863 Data6 DAT_1028_0863 Label DEFAULT true true 1028:0865 Data6 DAT_1028_0865 Label DEFAULT true true 1028:0867 Data6 DAT_1028_0867 Label DEFAULT true true 1028:0869 Data6 DAT_1028_0869 Label DEFAULT true true 1028:086b Data6 DAT_1028_086b Label DEFAULT true true 1028:086d Data6 DAT_1028_086d Label DEFAULT true true 1028:086f Data6 DAT_1028_086f Label DEFAULT true true 1028:0871 Data6 DAT_1028_0871 Label DEFAULT true true 1028:0873 Data6 DAT_1028_0873 Label DEFAULT true true 1028:0874 Data6 DAT_1028_0874 Label DEFAULT true true 1028:0875 Data6 DAT_1028_0875 Label DEFAULT true true 1028:0876 Data6 DAT_1028_0876 Label DEFAULT true true 1028:0878 Data6 DAT_1028_0878 Label DEFAULT true true 1028:087a Data6 DAT_1028_087a Label DEFAULT true true 1028:087c Data6 DAT_1028_087c Label DEFAULT true true 1028:087e Data6 DAT_1028_087e Label DEFAULT true true 1028:0880 Data6 DAT_1028_0880 Label DEFAULT true true 1028:0882 Data6 DAT_1028_0882 Label DEFAULT true true 1028:0884 Data6 DAT_1028_0884 Label DEFAULT true true 1028:089a Data6 DAT_1028_089a Label DEFAULT true true 1028:089c Data6 DAT_1028_089c Label DEFAULT true true 1028:089e Data6 DAT_1028_089e Label DEFAULT true true 1028:08a0 Data6 DAT_1028_08a0 Label DEFAULT true true 1028:08a2 Data6 DAT_1028_08a2 Label DEFAULT true true 1028:08a4 Data6 DAT_1028_08a4 Label DEFAULT true true 1028:0982 Data6 DAT_1028_0982 Label DEFAULT true true 1028:0984 Data6 DAT_1028_0984 Label DEFAULT true true 1028:0986 Data6 DAT_1028_0986 Label DEFAULT true true 1028:0988 Data6 DAT_1028_0988 Label DEFAULT true true 1028:0992 Data6 DAT_1028_0992 Label DEFAULT true true 1028:0994 Data6 DAT_1028_0994 Label DEFAULT true true 1028:0996 Data6 DAT_1028_0996 Label DEFAULT true true 1028:0998 Data6 DAT_1028_0998 Label DEFAULT true true 1028:09a2 Data6 DAT_1028_09a2 Label DEFAULT true true 1028:09a3 Data6 DAT_1028_09a3 Label DEFAULT true true 1028:09a6 Data6 DAT_1028_09a6 Label DEFAULT true true 1028:09a8 Data6 DAT_1028_09a8 Label DEFAULT true true 1028:09e2 Data6 DAT_1028_09e2 Label DEFAULT true true 1028:09f1 Data6 DAT_1028_09f1 Label DEFAULT true true 1028:09f7 Data6 DAT_1028_09f7 Label DEFAULT true true 1028:0a01 Data6 DAT_1028_0a01 Label DEFAULT true true 1028:0a02 Data6 DAT_1028_0a02 Label DEFAULT true true 1028:0a03 Data6 DAT_1028_0a03 Label DEFAULT true true 1028:0a05 Data6 DAT_1028_0a05 Label DEFAULT true true 1028:0a07 Data6 DAT_1028_0a07 Label DEFAULT true true 1028:0a09 Data6 DAT_1028_0a09 Label DEFAULT true true 1028:0a0b Data6 DAT_1028_0a0b Label DEFAULT true true 1028:0a0d Data6 DAT_1028_0a0d Label DEFAULT true true 1028:0a0f Data6 DAT_1028_0a0f Label DEFAULT true true 1028:0a11 Data6 DAT_1028_0a11 Label DEFAULT true true 1028:0a13 Data6 DAT_1028_0a13 Label DEFAULT true true 1028:0a15 Data6 DAT_1028_0a15 Label DEFAULT true true 1028:0a17 Data6 DAT_1028_0a17 Label DEFAULT true true 1028:0a19 Data6 DAT_1028_0a19 Label DEFAULT true true 1028:0a1b Data6 DAT_1028_0a1b Label DEFAULT true true 1028:0a1d Data6 DAT_1028_0a1d Label DEFAULT true true 1028:0a1f Data6 DAT_1028_0a1f Label DEFAULT true true 1028:0a21 Data6 DAT_1028_0a21 Label DEFAULT true true 1028:0a23 Data6 DAT_1028_0a23 Label DEFAULT true true 1028:0a25 Data6 DAT_1028_0a25 Label DEFAULT true true 1028:0a27 Data6 DAT_1028_0a27 Label DEFAULT true true 1028:0a29 Data6 DAT_1028_0a29 Label DEFAULT true true 1028:0a2b Data6 DAT_1028_0a2b Label DEFAULT true true 1028:0a2d Data6 DAT_1028_0a2d Label DEFAULT true true 1028:0a2f Data6 DAT_1028_0a2f Label DEFAULT true true 1028:0a31 Data6 DAT_1028_0a31 Label DEFAULT true true 1028:0a33 Data6 DAT_1028_0a33 Label DEFAULT true true 1028:0a35 Data6 DAT_1028_0a35 Label DEFAULT true true 1028:0a36 Data6 DAT_1028_0a36 Label DEFAULT true true 1028:0a38 Data6 DAT_1028_0a38 Label DEFAULT true true 1028:0a3a Data6 DAT_1028_0a3a Label DEFAULT true true 1028:0a3c Data6 DAT_1028_0a3c Label DEFAULT true true 1028:0a3e Data6 DAT_1028_0a3e Label DEFAULT true true 1028:0a40 Data6 DAT_1028_0a40 Label DEFAULT true true 1028:0a42 Data6 DAT_1028_0a42 Label DEFAULT true true 1028:0a44 Data6 DAT_1028_0a44 Label DEFAULT true true 1028:0a46 Data6 DAT_1028_0a46 Label DEFAULT true true 1028:0a48 Data6 DAT_1028_0a48 Label DEFAULT true true 1028:0a4a Data6 DAT_1028_0a4a Label DEFAULT true true 1028:0b81 Data6 DAT_1028_0b81 Label DEFAULT true true 1028:0b98 Data6 DAT_1028_0b98 Label DEFAULT true true 1028:0b9a Data6 DAT_1028_0b9a Label DEFAULT true true 1028:0b9c Data6 DAT_1028_0b9c Label DEFAULT true true 1028:0b9e Data6 DAT_1028_0b9e Label DEFAULT true true 1028:0d73 Data6 DAT_1028_0d73 Label DEFAULT true true 1028:0dc6 Data6 DAT_1028_0dc6 Label DEFAULT true true 1028:1e80 Data6 DAT_1028_1e80 Label DEFAULT true true 1028:1e82 Data6 DAT_1028_1e82 Label DEFAULT true true 1028:1e84 Data6 DAT_1028_1e84 Label DEFAULT true true 1028:1e86 Data6 DAT_1028_1e86 Label DEFAULT true true 1028:1e90 Data6 DAT_1028_1e90 Label DEFAULT true true 1028:1e92 Data6 DAT_1028_1e92 Label DEFAULT true true 1028:1e94 Data6 DAT_1028_1e94 Label DEFAULT true true 1028:1ec3 Data6 DAT_1028_1ec3 Label DEFAULT true true 1028:1ec5 Data6 DAT_1028_1ec5 Label DEFAULT true true 1028:1ec7 Data6 DAT_1028_1ec7 Label DEFAULT true true 1028:1ec9 Data6 DAT_1028_1ec9 Label DEFAULT true true 1028:1ecb Data6 DAT_1028_1ecb Label DEFAULT true true 1028:1ecd Data6 DAT_1028_1ecd Label DEFAULT true true 1028:1ecf Data6 DAT_1028_1ecf Label DEFAULT true true 1028:1ed1 Data6 DAT_1028_1ed1 Label DEFAULT true true 1028:1ed3 Data6 DAT_1028_1ed3 Label DEFAULT true true 1028:1ed5 Data6 DAT_1028_1ed5 Label DEFAULT true true 1028:1ed7 Data6 DAT_1028_1ed7 Label DEFAULT true jYtrue 1028:1ed9 Data6 DAT_1028_1ed9 Label DEFAULT true true 1028:1edb Data6 DAT_1028_1edb Label DEFAULT true true 1028:1edd Data6 DAT_1028_1edd Label DEFAULT true true 1028:1edf Data6 DAT_1028_1edf Label DEFAULT true true 1028:1ee1 Data6 DAT_1028_1ee1 Label DEFAULT true true 1028:1f16 Data6 DAT_1028_1f16 Label DEFAULT true true 1028:1f18 Data6 DAT_1028_1f18 Label DEFAULT true true 1028:1f1a Data6 DAT_1028_1f1a Label DEFAULT true true 1028:1f1c Data6 DAT_1028_1f1c Label DEFAULT true true 1028:1f1e Data6 DAT_1028_1f1e Label DEFAULT true true 1028:1f20 Data6 DAT_1028_1f20 Label DEFAULT true true 1028:1f22 Data6 DAT_1028_1f22 Label DEFAULT true true 1028:1f24 Data6 DAT_1028_1f24 Label DEFAULT true true 1028:1f26 Data6 DAT_1028_1f26 Label DEFAULT true true 1028:1f28 Data6 DAT_1028_1f28 Label DEFAULT true true 1028:1f2a Data6 DAT_1028_1f2a Label DEFAULT true true 1028:1f2c Data6 DAT_1028_1f2c Label DEFAULT true true 1028:1f69 Data6 DAT_1028_1f69 Label DEFAULT true true 1028:1f6b Data6 DAT_1028_1f6b Label DEFAULT true true 1028:1f6d Data6 DAT_1028_1f6d Label DEFAULT true true 1028:1f6f Data6 DAT_1028_1f6f Label DEFAULT true true 1028:1f71 Data6 DAT_1028_1f71 Label DEFAULT true true 1028:1f73 Data6 DAT_1028_1f73 Label DEFAULT true true 1028:1f75 Data6 DAT_1028_1f75 Label DEFAULT true true 1028:1f77 Data6 DAT_1028_1f77 Label DEFAULT true true 1028:1f79 Data6 DAT_1028_1f79 Label DEFAULT true true 1028:1f7b Data6 DAT_1028_1f7b Label DEFAULT true true 1028:1f7d Data6 DAT_1028_1f7d Label DEFAULT true true 1028:1f7f Data6 DAT_1028_1f7f Label DEFAULT true true 1028:1f81 Data6 DAT_1028_1f81 Label DEFAULT true true 1028:1f83 Data6 DAT_1028_1f83 Label DEFAULT true true 1028:1f85 Data6 DAT_1028_1f85 Label DEFAULT true true 1028:1f87 Data6 DAT_1028_1f87 Label DEFAULT true true 1028:235d Data6 DAT_1028_235d Label DEFAULT true true 1028:235f Data6 DAT_1028_235f Label DEFAULT true true 1028:2361 Data6 DAT_1028_2361 Label DEFAULT true true 1028:2363 Data6 DAT_1028_2363 Label DEFAULT true true 1028:236d Data6 DAT_1028_236d Label DEFAULT true true 1028:236f Data6 DAT_1028_236f Label DEFAULT true true 1028:2371 Data6 DAT_1028_2371 Label DEFAULT true true 1028:23a0 Data6 DAT_1028_23a0 Label DEFAULT true true 1028:23a2 Data6 DAT_1028_23a2 Label DEFAULT true true 1028:23a4 Data6 DAT_1028_23a4 Label DEFAULT true true 1028:23a6 Data6 DAT_1028_23a6 Label DEFAULT true true 1028:23a8 Data6 DAT_1028_23a8 Label DEFAULT true true 1028:23aa Data6 DAT_1028_23aa Label DEFAULT true true 1028:23ac Data6 DAT_1028_23ac Label DEFAULT true true 1028:23ae Data6 DAT_1028_23ae Label DEFAULT true true 1028:23b0 Data6 DAT_1028_23b0 Label DEFAULT true true 1028:23b2 Data6 DAT_1028_23b2 Label DEFAULT true true 1028:23b4 Data6 DAT_1028_23b4 Label DEFAULT true true 1028:23b6 Data6 DAT_1028_23b6 Label DEFAULT true true 1028:23b8 Data6 DAT_1028_23b8 Label DEFAULT true true 1028:23ba Data6 DAT_1028_23ba Label DEFAULT true true 1028:23bc Data6 DAT_1028_23bc Label DEFAULT true true 1028:23be Data6 DAT_1028_23be Label DEFAULT true true 1028:23f3 Data6 DAT_1028_23f3 Label DEFAULT true true 1028:23f5 Data6 DAT_1028_23f5 Label DEFAULT true true 1028:23f7 Data6 DAT_1028_23f7 Label DEFAULT true true 1028:23f9 Data6 DAT_1028_23f9 Label DEFAULT true true 1028:23fb Data6 DAT_1028_23fb Label DEFAULT true true 1028:23fd Data6 DAT_1028_23fd Label DEFAULT true true 1028:23ff Data6 DAT_1028_23ff Label DEFAULT true true 1028:2401 Data6 DAT_1028_2401 Label DEFAULT true true 1028:2403 Data6 DAT_1028_2403 Label DEFAULT true true 1028:2405 Data6 DAT_1028_2405 Label DEFAULT true true 1028:2407 Data6 DAT_1028_2407 Label DEFAULT true true 1028:2409 Data6 DAT_1028_2409 Label DEFAULT true true 1028:2446 Data6 DAT_1028_2446 Label DEFAULT true true 1028:2448 Data6 DAT_1028_2448 Label DEFAULT true true 1028:244a Data6 DAT_1028_244a Label DEFAULT true true 1028:244c Data6 DAT_1028_244c Label DEFAULT true true 1028:244e Data6 DAT_1028_244e Label DEFAULT true true 1028:2450 Data6 DAT_1028_2450 Label DEFAULT true true 1028:2452 Data6 DAT_1028_2452 Label DEFAULT true true 1028:2454 Data6 DAT_1028_2454 Label DEFAULT true true 1028:2456 Data6 DAT_1028_2456 Label DEFAULT true true 1028:2458 Data6 DAT_1028_2458 Label DEFAULT true true 1028:245a Data6 DAT_1028_245a Label DEFAULT true true 1028:245c Data6 DAT_1028_245c Label DEFAULT true true 1028:245e Data6 DAT_1028_245e Label DEFAULT true true 1028:2460 Data6 DAT_1028_2460 Label DEFAULT true true 1028:2462 Data6 DAT_1028_2462 Label DEFAULT true true 1028:2464 Data6 DAT_1028_2464 Label DEFAULT true true 1028:2679 Data6 DAT_1028_2679 Label DEFAULT true true 1028:3340 Data6 DAT_1028_3340 Label DEFAULT true true 1028:3342 Data6 DAT_1028_3342 Label DEFAULT true true 1028:3344 Data6 DAT_1028_3344 Label DEFAULT true true 1028:3346 Data6 DAT_1028_3346 Label DEFAULT true true 1028:3371 Data6 DAT_1028_3371 Label DEFAULT true true 1028:33c4 Data6 DAT_1028_33c4 Label DEFAULT true true 1028:3417 Data6 DAT_1028_3417 Label DEFAULT true true 1028:346a Data6 DAT_1028_346a Label DEFAULT true true 1028:34bd Data6 DAT_1028_34bd Label DEFAULT true true 1028:3969 Data6 DAT_1028_3969 Label DEFAULT true true 1028:396b Data6 DAT_1028_396b Label DEFAULT true true 1028:396d Data6 DAT_1028_396d Label DEFAULT true true 1028:396f Data6 DAT_1028_396f Label DEFAULT true true 1028:399a Data6 DAT_1028_399a Label DEFAULT true true 1028:39de Data6 DAT_1028_39de Label DEFAULT true true 1028:3b2a Data6 DAT_1028_3b2a Label DEFAULT true true 1028:3b41 Data6 DAT_1028_3b41 Label DEFAULT true true 1028:3b43 Data6 DAT_1028_3b43 Label DEFAULT true true 1028:3b45 Data6 DAT_1028_3b45 Label DEFAULT true true 1028:3b47 Data6 DAT_1028_3b47 Label DEFAULT true true 1028:3b7d Data6 DAT_1028_3b7d Label DEFAULT true true 1028:3b94 Data6 DAT_1028_3b94 Label DEFAULT true true 1028:3b96 Data6 DAT_1028_3b96 Label DEFAULT true true 1028:3b98 Data6 DAT_1028_3b98 Label DEFAULT true true 1028:3b9a Data6 DAT_1028_3b9a Label DEFAULT true true 1028:41f9 Data6 DAT_1028_41f9 Label DEFAULT true true 1028:424c Data6 DAT_1028_424c Label DEFAULT true true 1028:431b Data6 DAT_1028_431b Label DEFAULT true true 1028:431d Data6 DAT_1028_431d Label DEFAULT true true 1028:4321 Data6 DAT_1028_4321 Label DEFAULT true true 1028:4323 Data6 DAT_1028_4323 Label DEFAULT true true 1028:4325 Data6 DAT_1028_4325 Label DEFAULT true true 1028:43ea Data6 DAT_1028_43ea Label DEFAULT true true 1028:43ec Data6 DAT_1028_43ec Label DEFAULT true true 1028:43ee Data6 DAT_1028_43ee Label DEFAULT true true 1028:43f0 Data6 DAT_1028_43f0 Label DEFAULT true true 1028:43f2 Data6 DAT_1028_43f2 Label DEFAULT true true 1028:43f3 Data6 DAT_1028_43f3 Label DEFAULT true true 1028:43f4 Data6 DAT_1028_43f4 Label DEFAULT true true 1028:43f6 Data6 DAT_1028_43f6 Label DEFAULT true true 1028:43f8 Data6 DAT_1028_43f8 Label DEFAULT true true 1028:43fa Data6 DAT_1028_43fa Label DEFAULT true true 1028:43fc Data6 DAT_1028_43fa+2 Label DEFAULT true true 1028:444e Data6 DAT_1028_444e Label DEFAULT true true 1028:4750 Data6 DAT_1028_4750 Label DEFAULT true true 1028:4752 Data6 DAT_1028_4752 Label DEFAULT true true 1028:4754 Data6 DAT_1028_4754 Label DEFAULT true true 1028:4756 Data6 DAT_1028_4756 Label DEFAULT true true 1028:4758 Data6 DAT_1028_4758 Label DEFAULT true true 1028:475a Data6 DAT_1028_475a Label DEFAULT true true 1028:475c Data6 DAT_1028_475c Label DEFAULT true true 1028:475e Data6 DAT_1028_475e Label DEFAULT true true 1028:4760 Data6 DAT_1028_4760 Label DEFAULT true true 1028:4762 Data6 DAT_1028_4762 Label DEFAULT true true 1028:4764 Data6 DAT_1028_4764 Label DEFAULT true true 1028:4766 Data6 DAT_1028_4766 Label DEFAULT true true 1028:4768 Data6 DAT_1028_4768 Label DEFAULT true true 1028:476a Data6 DAT_1028_476a Label DEFAULT true true 1028:476c Data6 DAT_1028_476c Label DEFAULT true true 1028:476e Data6 DAT_1028_476e Label DEFAULT true true 1028:4770 Data6 DAT_1028_4770 Label DEFAULT true true 1028:4772 Data6 DAT_1028_4772 Label DEFAULT true true 1028:4774 Data6 DAT_1028_4774 Label DEFAULT true true 1028:4776 Data6 DAT_1028_4776 Label DEFAULT true true 1028:4778 Data6 DAT_1028_4778 Label DEFAULT true true 1028:477a Data6 DAT_1028_477a Label DEFAULT true true 1028:477c Data6 DAT_1028_477c Label DEFAULT true true 1028:477e Data6 DAT_1028_477e Label DEFAULT true true 1028:477f Data6 DAT_1028_477f Label DEFAULT true true 1028:4780 Data6 DAT_1028_4780 Label DEFAULT true true 1028:4781 Data6 DAT_1028_4781 Label DEFAULT true true 1028:4783 Data6 DAT_1028_4783 Label DEFAULT true true 1028:4784 Data6 DAT_1028_4784 Label DEFAULT true true 1028:478a Data6 DAT_1028_478a Label DEFAULT true true 1028:478b Data6 DAT_1028_478b Label DEFAULT true true 1028:478c Data6 DAT_1028_478c Label DEFAULT true true 1028:47a2 Data6 DAT_1028_47a2 Label DEFAULT true true 1028:4abe Data6 DAT_1028_4abe Label DEFAULT true true 1028:4ac0 Data6 DAT_1028_4ac0 Label DEFAULT true true 1028:4ac2 Data6 DAT_1028_4ac2 Label DEFAULT true true 1028:4ac4 Data6 DAT_1028_4ac4 Label DEFAULT true true 1028:4ac6 Data6 DAT_1028_4ac6 Label DEFAULT true true 1028:4ac8 Data6 DAT_1028_4ac8 Label DEFAULT true true 1028:4aca Data6 DAT_1028_4aca Label DEFAULT true true 1028:4acc Data6 DAT_1028_4acc Label DEFAULT true true 1028:4ace Data6 DAT_1028_4ace Label DEFAULT true true 1028:4ad0 Data6 DAT_1028_4ad0 Label DEFAULT true true 1028:4ad2 Data6 DAT_1028_4ad2 Label DEFAULT true true 1028:4ad4 Data6 DAT_1028_4ad4 Label DEFAULT true true 1028:4ada Data6 DAT_1028_4ada Label DEFAULT true true 1028:4adc Data6 DAT_1028_4adc Label DEFAULT true true 1028:4ade Data6 DAT_1028_4ade Label DEFAULT true true 1028:4ae0 Data6 DAT_1028_4ae0 Label DEFAULT true true 1028:4af6 Data6 DAT_1028_4af6 Label DEFAULT true true 1028:4af8 Data6 DAT_1028_4af8 Label DEFAULT true true 1028:4d38 Data6 DAT_1028_4d38 Label DEFAULT true true 1228:0000 EXTERNAL GETVERSION Function DEFAULT true false 1228:0004 EXTERNAL GLOBALALLOC Function DEFAULT true false 1228:0008 EXTERNAL GLOBALFREE Function DEFAULT true false 1228:000c EXTERNAL GLOBALLOCK Function DEFAULT true false 1228:0010 EXTERNAL GLOBALUNLOCK Function DEFAULT true false 1228:0014 EXTERNAL GLOBALHANDLE Function DEFAULT true false 1228:0018 EXTERNAL GLOBALCOMPACT Function DEFAULT true false 1228:001c EXTERNAL WAITEVENT Function DEFAULT true false 1228:0020 EXTERNAL GETCURRENTTASK Function DEFAULT true false 1228:0024 EXTERNAL GETMODULEHANDLE Function DEFAULT true false 1228:0028 EXTERNAL GETMODULEFILENAME Function DEFAULT true false 1228:002c EXTERNAL GETPROCADDRESS Function DEFAULT true false 1228:0030 EXTERNAL MAKEPROCINSTANCE Function DEFAULT true false 1228:0034 EXTERNAL FREEPROCINSTANCE Function DEFAULT true false 1228:0038 EXTERNAL FINDRESOURCE Function DEFAULT true false 1228:003c EXTERNAL LOADRESOURCE Function DEFAULT true false 1228:0040 EXTERNAL LOCKRESOURCE Function DEFAULT true false 1228:0044 EXTERNAL FREERESOURCE Function DEFAULT true false 1228:0048 EXTERNAL _LCLOSE Function DEFAULT true false 1228:004c EXTERNAL _LREAD Function DEFAULT true false 1228:0050 EXTERNAL _LCREAT Function DEFAULT true false 1228:0054 EXTERNAL _LOPEN Function DEFAULT true false 1228:0058 EXTERNAL _LWRITE Function DEFAULT true false 1228:005c EXTERNAL INITTASK Function DEFAULT true false 1228:0060 EXTERNAL LOADLIBRARY Function DEFAULT true false 1228:0064 EXTERNAL FREELIBRARY Function DEFAULT true false 1228:0068 EXTERNAL SETERRORMODE Function DEFAULT true false 1228:006c EXTERNAL __AHINCR Function DEFAULT true false 1228:0070 EXTERNAL GETPRIVATEPROFILEINT Function DEFAULT true false 1228:0074 EXTERNAL GETDOSENVIRONMENT Function DEFAULT true false 1228:0078 EXTERNAL GETWINFLAGS Function DEFAULT true false 1228:007c EXTERNAL GETWINDOWSDIRECTORY Function DEFAULT true false 1228:0080 EXTERNAL GETSYSTEMDIRECTORY Function DEFAULT true false 1228:0084 EXTERNAL GETFREESPACE Function DEFAULT true false 1228:0088 EXTERNAL ALLOCCSTODSALIAS Function DEFAULT true false 1228:008c EXTERNAL FREESELECTOR Function DEFAULT true false 1228:0090 EXTERNAL PRESTOCHANGOSELECTOR Function DEFAULT true false 1228:0094 EXTERNAL SYSTEMTIMERMAKE Function DEFAULT true false 1228:0098 EXTERNAL SNDPLAYSOUND Function DEFAULT true false 1228:009c EXTERNAL WAVEOUTGETNUMDEVS Function DEFAULT true false 1228:00a0 EXTERNAL WAVEOUTGETDEVCAPS Function DEFAULT true false 1228:00a4 EXTERNAL WAVEOUTGETVOLUME Function DEFAULT true false 1228:00a8 EXTERNAL TIMEKILLEVENT Function DEFAULT true false 1228:00ac EXTERNAL GETVERSION Function DEFAULT true false 1228:00b0 EXTERNAL GLOBALALLOC Function DEFAULT true false 1228:00b4 EXTERNAL GLOBALFREE Function DEFAULT true false 1228:00b8 EXTERNAL GLOBALLOCK Function DEFAULT true false 1228:00bc EXTERNAL GLOBALUNLOCK Function DEFAULT true false 1228:00c0 EXTERNAL GLOBALHANDLE Function DEFAULT true false 1228:00c4 EXTERNAL GLOBALCOMPACT Function DEFAULT true false 1228:00c8 EXTERNAL WAITEVENT Function DEFAULT true false 1228:00cc EXTERNAL GETCURRENTTASK Function DEFAULT true false 1228:00d0 EXTERNAL GETMODULEHANDLE Function DEFAULT true false 1228:00d4 EXTERNAL GETMODULEFILENAME Function DEFAULT true false 1228:00d8 EXTERNAL GETPROCADDRESS Function DEFAULT true false 1228:00dc EXTERNAL MAKEPROCINSTANCE Function DEFAULT true false 1228:00e0 EXTERNAL FREEPROCINSTANCE Function DEFAULT true false 1228:00e4 EXTERNAL FINDRESOURCE Function DEFAULT true false 1228:00e8 EXTERNAL LOADRESOURCE Function DEFAULT true false 1228:00ec EXTERNAL LOCKRESOURCE Function DEFAULT true false 1228:00f0 EXTERNAL FREERESOURCE Function DEFAULT true false 1228:00f4 EXTERNAL _LCLOSE Function DEFAULT true false 1228:00f8 EXTERNAL _LREAD Function DEFAULT true false 1228:00fc EXTERNAL _LCREAT Function DEFAULT true false 1228:0100 EXTERNAL _LOPEN Function DEFAULT true false 1228:0104 EXTERNAL _LWRITE Function DEFAULT true false 1228:0108 EXTERNAL INITTASK Function DEFAULT true false 1228:010c EXTERNAL LOADLIBRARY Function DEFAULT true false 1228:0110 EXTERNAL FREELIBRARY Function DEFAULT true false 1228:0114 EXTERNAL SETERRORMODE Function DEFAULT true false 1228:0118 EXTERNAL __AHINCR Function DEFAULT true false 1228:011c EXTERNAL GETPRIVATEPROFILEINT Function DEFAULT true false 1228:0120 EXTERNAL GETDOSENVIRONMENT Function DEFAULT true false 1228:0124 EXTERNAL GETWINFLAGS Function DEFAULT true false 1228:0128 EXTERNAL GETWINDOWSDIRECTORY Function DEFAULT true false 1228:012c EXTERNAL GETSYSTEMDIRECTORY Function DEFAULT true false 1228:0130 EXTERNAL GETFREESPACE Function DEFAULT true false 1228:0134 EXTERNAL ALLOCCSTODSALIAS Function DEFAULT true false 1228:0138 EXTERNAL FREESELECTOR Function DEFAULT true false 1228:013c EXTERNAL PRESTOCHANGOSELECTOR Function DEFAULT true false 1228:0140 EXTERNAL SETBKCOLOR Function DEFAULT true false 1228:0144 EXTERNAL SETBKMODE Function DEFAULT true false 1228:0148 EXTERNAL SETTEXTCOLOR Function DEFAULT true false 1228:014c EXTERNAL TEXTOUT Function DEFAULT true false 1228:0150 EXTERNAL BITBLT Function DEFAULT true false 1228:0154 EXTERNAL SELECTOBJECT Function DEFAULT true false 1228:0158 EXTERNAL CREATECOMPATIBLEBITMAP Function DEFAULT true false 1228:015c EXTERNAL CREATECOMPATIBLEDC Function DEFAULT true false 1228:0160 EXTERNAL CREATEDC Function DEFAULT true false 1228:0164 EXTERNAL DELETEDC Function DEFAULT true false 1228:0168 EXTERNAL DELETEOBJECT Function DEFAULT true false 1228:016c EXTERNAL GETSTOCKOBJECT Function DEFAULT true false 1228:0170 EXTERNAL GETTEXTCOLOR Function DEFAULT true false 1228:0174 EXTERNAL GETTEXTMETRICS Function DEFAULT true false 1228:0178 EXTERNAL UNREALIZEOBJECT Function DEFAULT true false 1228:017c EXTERNAL SETTEXTALIGN Function DEFAULT true false 1228:0180 EXTERNAL CREATEPALETTE Function DEFAULT true false 1228:0184 EXTERNAL UPDATECOLORS Function DEFAULT true false 1228:0188 EXTERNAL CREATEDIBITMAP Function DEFAULT true false 1228:018c EXTERNAL MESSAGEBOX Function DEFAULT true false 1228:0190 EXTERNAL INITAPP Function DEFAULT true false 1228:0194 EXTERNAL POSTQUITMESSAGE Function DEFAULT true false 1228:0198 EXTERNAL GETTICKCOUNT Function DEFAULT true false 1228:019c EXTERNAL SETCAPTURE Function DEFAULT true false 1228:01a0 EXTERNAL RELEASECAPTURE Function DEFAULT true false 1228:01a4 EXTERNAL SETFOCUS Function DEFAULT true false 1228:01a8 EXTERNAL GETFOCUS Function DEFAULT true false 1228:01ac EXTERNAL REMOVEPROP Function DEFAULT true false 1228:01b0 EXTERNAL GETPROP Function DEFAULT true false 1228:01b4 EXTERNAL SETPROP Function DEFAULT true false 1228:01b8 EXTERNAL SCREENTOCLIENT Function DEFAULT true false 1228:01bc EXTERNAL ISICONIC Function DEFAULT true false 1228:01c0 EXTERNAL GETWINDOWRECT Function DEFAULT true false 1228:01c4 EXTERNAL GETCLIENTRECT Function DEFAULT true false 1228:01c8 EXTERNAL GETWINDOWTEXT Function DEFAULT true false 1228:01cc EXTERNAL SETWINDOWTEXT Function DEFAULT true false 1228:01d0 EXTERNAL BEGINPAINT Function DEFAULT true false 1228:01d4 EXTERNAL ENDPAINT Function DEFAULT true false 1228:01d8 EXTERNAL CREATEWINDOW Function DEFAULT true false 1228:01dc EXTERNAL SHOWWINDOW Function DEFAULT true false 1228:01e0 EXTERNAL GETPARENT Function DEFAULT true false 1228:01e4 EXTERNAL ISWINDOW Function DEFAULT true false 1228:01e8 EXTERNAL ISCHILD Function DEFAULT true false 1228:01ec EXTERNAL DESTROYWINDOW Function DEFAULT true false 1228:01f0 EXTERNAL REGISTERCLASS Function DEFAULT true false 1228:01f4 EXTERNAL SCROLLWINDOW Function DEFAULT true false 1228:01f8 EXTERNAL SETSCROLLPOS Function DEFAULT true false 1228:01fc EXTERNAL SETSCROLLRANGE Function DEFAULT true false 1228:0200 EXTERNAL GETDC Function DEFAULT true false 1228:0204 EXTERNAL RELEASEDC Function DEFAULT true false 1228:0208 EXTERNAL SETCURSOR Function DEFAULT true false 1228:020c EXTERNAL ENDDIALOG Function DEFAULT true false 1228:0210 EXTERNAL ISDIALOGMESSAGE Function DEFAULT true false 1228:0214 EXTERNAL GETDLGITEM Function DEFAULT true false 1228:0218 EXTERNAL SETDLGITEMTEXT Function DEFAULT true false 1228:021c EXTERNAL GETDLGITEMTEXT Function DEFAULT true false 1228:0220 EXTERNAL SENDDLGITEMMESSAGE Function DEFAULT true false 1228:0224 EXTERNAL MESSAGEBEEP Function DEFAULT true false 1228:0228 EXTERNAL GETKEYSTATE Function DEFAULT true false 1228:022c EXTERNAL DEFWINDOWPROC Function DEFAULT true false 1228:0230 EXTERNAL GETMESSAGE Function DEFAULT true false 1228:0234 EXTERNAL PEEKMESSAGE Function DEFAULT true false 1228:0238 EXTERNAL SENDMESSAGE Function DEFAULT true false 1228:023c EXTERNAL WAITMESSAGE Function DEFAULT true false 1228:0240 EXTERNAL TRANSLATEMESSAGE Function DEFAULT true false 1228:0244 EXTERNAL DISPATCHMESSAGE Function DEFAULT true false 1228:0248 EXTERNAL CALLWINDOWPROC Function DEFAULT true false 1228:024c EXTERNAL UPDATEWINDOW Function DEFAULT true false 1228:0250 EXTERNAL INVALIDATERECT Function DEFAULT true false 1228:0254 EXTERNAL GETWINDOWWORD Function DEFAULT true false 1228:0258 EXTERNAL GETWINDOWLONG Function DEFAULT true false 1228:025c EXTERNAL SETWINDOWLONG Function DEFAULT true false 1228:0260 EXTERNAL ENABLEMENUITEM Function DEFAULT true false 1228:0264 EXTERNAL GETSYSTEMMENU Function DEFAULT true false 1228:0268 EXTERNAL CREATECARET Function DEFAULT true false 1228:026c EXTERNAL DESTROYCARET Function DEFAULT true false 1228:0270 EXTERNAL SETCARETPOS Function DEFAULT true false 1228:0274 EXTERNAL SHOWCARET Function DEFAULT true false 1228:0278 EXTERNAL LOADCURSOR Function DEFAULT true false 1228:027c EXTERNAL LOADICON Function DEFAULT true false 1228:0280 EXTERNAL LOADBITMAP Function DEFAULT true false 1228:0284 EXTERNAL TRANSLATEACCELERATOR Function DEFAULT true false 1228:0288 EXTERNAL GETSYSTEMMETRICS Function DEFAULT true false 1228:028c EXTERNAL GETSYSCOLOR Function DEFAULT true false 1228:0290 EXTERNAL DIALOGBOXPARAM Function DEFAULT true false 1228:0294 EXTERNAL CREATEDIALOGPARAM Function DEFAULT true false 1228:0298 EXTERNAL ISZOOMED Function DEFAULT true false 1228:029c EXTERNAL SELECTPALETTE Function DEFAULT true false 1228:02a0 EXTERNAL REALIZEPALETTE Function DEFAULT true false 1228:02a4 EXTERNAL DEFDLGPROC Function DEFAULT true false 1228:02a8 EXTERNAL GETCLASSINFO Function DEFAULT true false 1228:02ac EXTERNAL WVSPRINTF Function DEFAULT true false 1228:02b0 EXTERNAL DEFMDICHILDPROC Function DEFAULT true false 1228:02b4 EXTERNAL TRANSLATEMDISYSACCEL Function DEFAULT true false 1228:02b8 EXTERNAL CREATEWINDOWEX Function DEFAULT true false 1228:02bc EXTERNAL Ordinal_5 Function DEFAULT true false 1228:02c0 EXTERNAL Ordinal_6 Function DEFAULT true false 1228:02c4 EXTERNAL GETVERSION Function DEFAULT true false 1228:02c8 EXTERNAL GLOBALALLOC Function DEFAULT true false 1228:02cc EXTERNAL GLOBALFREE Function DEFAULT true false 1228:02d0 EXTERNAL GLOBALLOCK Function DEFAULT true false 1228:02d4 EXTERNAL GLOBALUNLOCK Function DEFAULT true false 1228:02d8 EXTERNAL GLOBALHANDLE Function DEFAULT true false 1228:02dc EXTERNAL GLOBALCOMPACT Function DEFAULT true false 1228:02e0 EXTERNAL WAITEVENT Function DEFAULT true false 1228:02e4 EXTERNAL GETCURRENTTASK Function DEFAULT true false 1228:02e8 EXTERNAL GETMODULEHANDLE Function DEFAULT true false 1228:02ec EXTERNAL GETMODULEFILENAME Function DEFAULT true false 1228:02f0 EXTERNAL GETPROCADDRESS Function DEFAULT true false 1228:02f4 EXTERNAL MAKEPROCINSTANCE Function DEFAULT true false 1228:02f8 EXTERNAL FREEPROCINSTANCE Function DEFAULT true false 1228:02fc EXTERNAL FINDRESOURCE Function DEFAULT true false 1228:0300 EXTERNAL LOADRESOURCE Function DEFAULT true false 1228:0304 EXTERNAL LOCKRESOURCE Function DEFAULT true false 1228:0308 EXTERNAL FREERESOURCE Function DEFAULT true false 1228:030c EXTERNAL _LCLOSE Function DEFAULT true false 1228:0310 EXTERNAL _LREAD Function DEFAULT true false 1228:0314 EXTERNAL _LCREAT Function DEFAULT true false 1228:0318 EXTERNAL _LOPEN Function DEFAULT true false 1228:031c EXTERNAL _LWRITE Function DEFAULT true false 1228:0320 EXTERNAL INITTASK Function DEFAULT true false 1228:0324 EXTERNAL LOADLIBRARY Function DEFAULT true false 1228:0328 EXTERNAL FREELIBRARY Function DEFAULT true false 1228:032c EXTERNAL SETERRORMODE Function DEFAULT true false 1228:0330 EXTERNAL __AHINCR Function DEFAULT true false 1228:0334 EXTERNAL GETPRIVATEPROFILEINT Function DEFAULT true false 1228:0338 EXTERNAL GETDOSENVIRONMENT Function DEFAULT true false 1228:033c EXTERNAL GETWINFLAGS Function DEFAULT true false 1228:0340 EXTERNAL GETWINDOWSDIRECTORY Function DEFAULT true false 1228:0344 EXTERNAL GETSYSTEMDIRECTORY Function DEFAULT true false 1228:0348 EXTERNAL GETFREESPACE Function DEFAULT true false 1228:034c EXTERNAL ALLOCCSTODSALIAS Function DEFAULT true false 1228:0350 EXTERNAL FREESELECTOR Function DEFAULT true false 1228:0354 EXTERNAL PRESTOCHANGOSELECTOR Function DEFAULT true false 1228:0358 EXTERNAL MESSAGEBOX Function DEFAULT true false 1228:035c EXTERNAL INITAPP Function DEFAULT true false 1228:0360 EXTERNAL POSTQUITMESSAGE Function DEFAULT true false 1228:0364 EXTERNAL GETTICKCOUNT Function DEFAULT true false 1228:0368 EXTERNAL SETCAPTURE Function DEFAULT true false 1228:036c EXTERNAL RELEASECAPTURE Function DEFAULT true false 1228:0370 EXTERNAL SETFOCUS Function DEFAULT true false 1228:0374 EXTERNAL GETFOCUS Function DEFAULT true false 1228:0378 EXTERNAL REMOVEPROP Function DEFAULT true false 1228:037c EXTERNAL GETPROP Function DEFAULT true false 1228:0380 EXTERNAL SETPROP Function DEFAULT true false 1228:0384 EXTERNAL SCREENTOCLIENT Function DEFAULT true false 1228:0388 EXTERNAL ISICONIC Function DEFAULT true false 1228:038c EXTERNAL GETWINDOWRECT Function DEFAULT true false 1228:0390 EXTERNAL GETCLIENTRECT Function DEFAULT true false 1228:0394 EXTERNAL GETWINDOWTEXT Function DEFAULT true false 1228:0398 EXTERNAL SETWINDOWTEXT Function DEFAULT true false 1228:039c EXTERNAL BEGINPAINT Function DEFAULT true false 1228:03a0 EXTERNAL ENDPAINT Function DEFAULT true false 1228:03a4 EXTERNAL CREATEWINDOW Function DEFAULT true false 1228:03a8 EXTERNAL SHOWWINDOW Function DEFAULT true false 1228:03ac EXTERNAL GETPARENT Function DEFAULT true false 1228:03b0 EXTERNAL ISWINDOW Function DEFAULT true false 1228:03b4 EXTERNAL ISCHILD Function DEFAULT true false 1228:03b8 EXTERNAL DESTROYWINDOW Function DEFAULT true false 1228:03bc EXTERNAL REGISTERCLASS Function DEFAULT true false 1228:03c0 EXTERNAL SCROLLWINDOW Function DEFAULT true false 1228:03c4 EXTERNAL SETSCROLLPOS Function DEFAULT true false 1228:03c8 EXTERNAL SETSCROLLRANGE Function DEFAULT true false 1228:03cc EXTERNAL GETDC Function DEFAULT true false 1228:03d0 EXTERNAL RELEASEDC Function DEFAULT true false 1228:03d4 EXTERNAL SETCURSOR Function DEFAULT true false 1228:03d8 EXTERNAL ENDDIALOG Function DEFAULT true false 1228:03dc EXTERNAL ISDIALOGMESSAGE Function DEFAULT true false 1228:03e0 EXTERNAL GETDLGITEM Function DEFAULT true false 1228:03e4 EXTERNAL SETDLGITEMTEXT Function DEFAULT true false 1228:03e8 EXTERNAL GETDLGITEMTEXT Function DEFAULT true false 1228:03ec EXTERNAL SENDDLGITEMMESSAGE Function DEFAULT true false 1228:03f0 EXTERNAL MESSAGEBEEP Function DEFAULT true false 1228:03f4 EXTERNAL GETKEYSTATE Function DEFAULT true false 1228:03f8 EXTERNAL DEFWINDOWPROC Function DEFAULT true false 1228:03fc EXTERNAL GETMESSAGE Function DEFAULT true false 1228:0400 EXTERNAL PEEKMESSAGE Function DEFAULT true false 1228:0404 EXTERNAL SENDMESSAGE Function DEFAULT true false 1228:0408 EXTERNAL WAITMESSAGE Function DEFAULT true false 1228:040c EXTERNAL TRANSLATEMESSAGE Function DEFAULT true false 1228:0410 EXTERNAL DISPATCHMESSAGE Function DEFAULT true false 1228:0414 EXTERNAL CALLWINDOWPROC Function DEFAULT true false 1228:0418 EXTERNAL UPDATEWINDOW Function DEFAULT true false 1228:041c EXTERNAL INVALIDATERECT Function DEFAULT true false 1228:0420 EXTERNAL GETWINDOWWORD Function DEFAULT true false 1228:0424 EXTERNAL GETWINDOWLONG Function DEFAULT true false 1228:0428 EXTERNAL SETWINDOWLONG Function DEFAULT true false 1228:042c EXTERNAL ENABLEMENUITEM Function DEFAULT true false 1228:0430 EXTERNAL GETSYSTEMMENU Function DEFAULT true false 1228:0434 EXTERNAL CREATECARET Function DEFAULT true false 1228:0438 EXTERNAL DESTROYCARET Function DEFAULT true false 1228:043c EXTERNAL SETCARETPOS Function DEFAULT true false 1228:0440 EXTERNAL SHOWCARET Function DEFAULT true false 1228:0444 EXTERNAL LOADCURSOR Function DEFAULT true false 1228:0448 EXTERNAL LOADICON Function DEFAULT true false 1228:044c EXTERNAL LOADBITMAP Function DEFAULT true false 1228:0450 EXTERNAL TRANSLATEACCELERATOR Function DEFAULT true false 1228:0454 EXTERNAL GETSYSTEMMETRICS Function DEFAULT true false 1228:0458 EXTERNAL GETSYSCOLOR Function DEFAULT true false 1228:045c EXTERNAL DIALOGBOXPARAM Function DEFAULT true false 1228:0460 EXTERNAL CREATEDIALOGPARAM Function DEFAULT true false 1228:0464 EXTERNAL ISZOOMED Function DEFAULT true false 1228:0468 EXTERNAL SELECTPALETTE Function DEFAULT true false 1228:046c EXTERNAL REALIZEPALETTE Function DEFAULT true false 1228:0470 EXTERNAL DEFDLGPROC Function DEFAULT true false 1228:0474 EXTERNAL GETCLASSINFO Function DEFAULT true false 1228:0478 EXTERNAL WVSPRINTF Function DEFAULT true false 1228:047c EXTERNAL DEFMDICHILDPROC Function DEFAULT true false 1228:0480 EXTERNAL TRANSLATEMDISYSACCEL Function DEFAULT true false 1228:0484 EXTERNAL CREATEWINDOWEX Function DEFAULT true false 1228:0488 EXTERNAL Ordinal_5 Function DEFAULT true false 1228:048c EXTERNAL Ordinal_6 Function DEFAULT true false t xMZ@ !L!This program requires Microsoft Windows. $ NE @ @p0 - ::@00|Pzz#P #HA :M8"    & < R h ~ XS PS S S I !Z "k #| $ % & ' ( )     6  4  2" & 0+ </ @/pч/p҇/pԇ/ ` և0wpׇ~0p؇1` ۇ21` ܇41` ݇1 p߇ 2p2p2p2vp,3 p93Wp30 e30 f350 303030 303030303030DATPALWAVTFLIPPK $)29>KERNELMMTIMERMMSYSTEMKERNELGDIUSERKEYBOARDKERNELUSERKEYBOARD??!??l?Q?p?S?k?c??X?VY?Y?7Z?Z?Z?[?[?\?^?^?)_?_?s`?@`?`?)a?na?b?b?Eb?b??S?\c?7k???6??? ?~?k?&?~?'o?@t?~?? ??i?ʛ??s????,???<??¬?޽?n?Ȳ??v??'??#??8???7??? ? ? ? ???.??1????&?????r??y?????????T%?B$????_????#?"?"?<#?t#?#?$?C&?&?(?(?)?2)?\)?)?A?? ?= ?Y ?A?s? ?Z?? ?'?F? ??j ?? ? ???? ? ?8???\?% ?l ??"????T????t?G???O???? ?a???h??`????a??5?K?W??????"?d?9????V??E?q?3?????f??$?? ? ??)?*?E*?*?+?,?:-?,?,?f-?,?,?+?-?-?-?-?v.?-?-?".?.?.?.?.?/?//?M/?p/?/?/? 0?,0?0.??]?a???? ?Q ?} ? ? ?-?G?g?????'?,?g??,???.??)?????? ??????9?? ???-?M tflippk.EXEvFvFvFvjjFv6[Fv~ CFvvFvjjjjvjTjMhj vj7jOj*j{vjjhj vjTjMjjvjjhj vvvvvvvvvvU~W"WjjjU>u#jj,WP1PP~&E&U jEW,Wh f1U~ W~W~ &06jh~ &E jjh~ &Ej~ &E&E 1&E1&E1uvvvv 1P~W~~F&E&E&EPjZ+~&E &EPjZ+~&E&E&EʆF.tu~1&EA&EC1&EE&EG@|)=s$j`WWh f~W1~WjjhP~&u6jhPDW~1&EM&EO&EQ&ƅ "~1& m o s1& & &ƅ &Dž &Dž &Dž HM&Dž & & & & &ƅ &ƅ &ƅ &ƅ &ƅ &ƅ &ƅ &Eakc1i1vx1z|FFF~&ƅ{F~&ƅF~&ƅF~&ƅ~uFF~1~ ~1 ~ƅ ~1 ~Dž~ƅ~Dž5Dž7~ƅ~u)"+-/ 1 35 7=~1& & 1& & &Dž &Dž &Dž 1ۚ~& & 1& & 1ۚ~& & 1& & &ƅ &ƅ 1& 1& ~W0Wj2W~WnW0WjP2WWWWj2W>r>vWWj2W~&E`&}`r&}`v~&E`~&E`<u'&EZ&E\&EV&EXdž02q<u*~&EZ&E\&EV&EXdž0(q<u*~&EZ&E\&EV&EXdž0q<u)~&EZ&E\&EV&EXdž0qT<u)~&EZ&E\&EV&EXdž0 q'~&EZ&E\&EV&EXdž0q~&u0jjP1PP~&EI&UK&EI& EKu&uWWh f1jjjjjjjjhjj}jhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjj jhjh,jhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjxjhjjxjhjj}ͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjhjhjhjj}ͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjhjhjj}ͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjhjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjhjhjj111RSP111RSP111RSP111RSPhjjjjjjjjhhhhjjjjjjhjhjhjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj jjjjjhjhjhjhjj}ͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj jjjjjhjhjh0jhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj jjjjjh*jhjh*jj=jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj jjjjjh6jhjh*jhjjRSP}ͻ̺LRSP111RSP111RSPjjjhjjjjjjjjjj jjjjjh*jhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh#jhjh$jjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh,jjmjhjjdjjͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh"jj`jhjhjjͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh jhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjjsjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjhjhjjrjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjjrjhjj[jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjj[jhjj1jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjj3jhjj jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhjj*jh/jj0jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh.jj0jh@jjDjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh@jjDjh@jhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh;jhjhLjhjj}ͻ̺LRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhHjjNjhFjjCjjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhFjjCjhBjj9jjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjhBjj9jh<jj0jjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh<jj0jh3jj)jjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjh3jj)jh(jj$jjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj jjjjjh(jj$jhjj#jjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj!jjjjjhjj#jjpjj#jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj"jjjjjjyjj"jjcjj(jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj#jjjjjjdjj(jjNjj3jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj$jjjjjjOjj2jjBjjEjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj%jjjjjjDjjAjj9jj]jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj&jjjjjj;jjRjj;jhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj'jjjjjj:jhjjCjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj(jjjjjjjjjjjj%jhojjnjhjjͻ̺LRSP|ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj?jjjjjj\jhjjjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj@jjjjjjjhjjjh7jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjAjjjjjjgjhjjjjjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjBjjjjjjpjhjhjhjj11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjCjjjjjhjhjjjjjj 11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjDjjjjjhjhjjajhjj11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjEjjjjjhjh8jjjjjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjFjjjjjjjjjjjj-jj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjGjjjjjjjjjjjjjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjHjjjjjjjjjjjjjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjIjjjjjjjjjjjjjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjJjjjjjjjjjj2jjjj11RSP}ͻ̺LRSPͻ̺RSPͻ̺LRSPjjjjjjjjjjjjjjKjjjjjhjh8jjjjjj RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjLjjjjjh$jh7jh$jhjj11RSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjMjjjjjh$jhjhjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjNjjjjjhjhjhjhojj11RSP|ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjOjjjjjhjhojhjh8jjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjPjjjjjhjhjjjjjj11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjQjjjjjhjhjhjhjj11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjRjjjjjhjhjjjjjj 11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjSjjjjjhjhjhjhjj11RSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjTjjjjjjIjhjj(jhjjRSP111RSP111RSP111RSPjjjhjjjjjjjjjjUjjjjjjCjhjjIjhjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjjVjjjjjj(jhjj"jhjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjjWjjjjjjLjhjj*jhjjRSP111RSP111RSP111RSPjjUjhjjjjjjjjjjXjjjjjjOjhjj-jhjjRSP111RSP111RSP111RSPjjVjhjjjjjjjjjjYjjjjjh!jjrjjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjjZjjjjjh$jhjh$jhjjRSP111RSP111RSP111RSPh jZjhjjjjjhhh2hj[jjjjjh.jhjh$jhjjͻ̺LRSP111RSP111RSP111RSPh jZjhjjjjjhhh2hj\jjjjjh$jhjh.jhjjͻ̺LRSP111RSP111RSP111RSPh jZjhjjjjjhhh2hj]jjjjjh$jhjh$jhjjRSP111RSP111RSP111RSPh j]jhjjjjjhhh2hj^jjjjjh.jhjh$jhjjͻ̺LRSP111RSP111RSP111RSPh j]jhjjjjjhhh2hj_jjjjjh$jhjh.jhjjͻ̺LRSP111RSP111RSP111RSPh j]jhjjjjjhhh2hj`jjjjjh$jhjh$jhjjRSP111RSP111RSP111RSPh j`jhjjjjjhhh2hjajjjjjh.jhjh$jhjjͻ̺LRSP111RSP111RSP111RSPh j`jhjjjjjhhh2hjbjjjjjh$jhjh.jhjjͻ̺LRSP111RSP111RSP111RSPh j`jhjjjjjhhh2hjcjjjjjh$jhjh$jhjjRSP111RSP111RSP111RSPh jcjhjjjjjhhh2hjdjjjjjh.jhjh$jhjjͻ̺LRSP111RSP111RSP111RSPh jcjjjjjjjhhh2hjejjjjjh$jhjh.jhjjͻ̺LRSP111RSP111RSP111RSPh jcjjjjjjjhhh2hjfjjjjjh$jhjh$jhjjRSP111RSP111RSP111RSPh jfjhjjjjjhhh2hjgjjjjjh.jhjh$jhjjͻ̺LRSP111RSP111RSP111RSPh jfjjjjjjjhhh2hjhjjjjjh$jhjh.jhjjͻ̺LRSP111RSP111RSP111RSPh jfjjjjjjjhhh2hjijjjjjhjhjhjhjjRSP~ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjjhjhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjkjjjjjhjhjhjhjjRSP}ͻ̺LRSPͻ̺RSPRSPjjjjjjjjjjjjjjljjjjjhjhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjmjjjjjhjhjhjhjjRSP111RSP111RSP111RSPh jmjhjjjjjhhhhjnjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjojjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjpjjjjjhjhjhjhjjRSP111RSP111RSP111RSPh jpjhjjjjjhhhhjqjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjrjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjsjjjjjhjhjhjhjjRSP111RSP111RSP111RSPh jsjhjjjjjhhhhjtjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjujjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjvjjjjjhjhjhjhjjRSP111RSP111RSP111RSPh jvjhjjjjjhhhhjwjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjxjjjjjhjhjhjhjjRSP111RSP111RSP111RSPjjjjjjjjjhhhhjyjjjjjjijhjjTjhjjRSP111RSP111RSP111RSPhjjhjjjjjjjjjjzjjjjjjejhjjijhjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjj{jjjjjjTjhjjPjhjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjj|jjjjjjojhjjWjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj}jjjjjjTjhjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjj~jjjjjjMjhjjMjjljjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjjjjjjjjMjjljjWjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjWjjjjjnjhjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjj`jj`jjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjsjjEjjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjjPjjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjjpjjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjsjj{jjjjjjRSP111RSP111RSP111RSPjjjjjjjjjjjjjhjjjjjj|jj`jjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjdjjNjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjjDjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjj`jjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjhjj}jjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjdjjrjjjjjjRSP}ͻ̺LRSP111RSP111RSPjjjjjjjjjjjjjhjjjjjjjhjjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjjhjhhjjjjjjjhjjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjj hjhhjjjjjjjhjjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjj hjhhjjjjjjjhjjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjj jujhhjjjjjjjj~jjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjj jbjjphjjjjjjjjkjjjjjj 111RSP111RSP111RSP111RSPhjjhjjjjjj jOjj]hjjjjjjjjWjjjjjj 111RSP111RSP111RSP111RSPhjjh jjjjjj juT6jhFvFvvFvjjhhvjjhj vvvv6jhFjUjUjU6jh]jU6jh[jU6jha1FFFPU6FRP~牅 C~uFFFPU6FRP~牅C~uFFFPU6F RP~牅!C~ ujU6jjf~&ETjU6jhcjU6jje~&ERjU6jh_j U6jhej!U6jhXYj"Uj#UvvvjjjhP~& t&ƅ vFvF~&u~WvF@PF@PFv6[FvvFvjjvvvjjhj vjjvvvjjhj vjjvvvjjhj vvvvvv~& }& w~& }& w~& tv&uTFv~& & & & P& & Pvjjhhv~&uRv~& & & & P& & Pvjjhhvvv~1&EM&EO&ƅ vvjjjhP~&u~W~&uF0 01ҋȋڠ0 RPvFF~  |~ vFRPv~ukcvP~&uv ~ &}u 1FN>uG~&u u7~&ujjj~&u~ 1&E 1&E 1FFU~ &}u9>u2~&ujjj~&u~ 1&E 1&E F~ &E~&;Et~ &u~&;Eu`~&uFv6NDjFvvvvj~&uv~ 1&E 1&E 1FF~&uFv6NDjFvFvvj~&uv~~~&ujjjF~ &E 1&E FFFU~ W~Wj~ &E&   &1uvvvv 1P~WFV~&EA&UC&Eh&E,&Eи@+&E &Eи+&E&E&U @ ʀ   &E&U~&uFU6g~&}A1&EA&EC~1&EA&EC1PW1U~W6jhg~&ujv6NDjF6NDvv6gvvhhh,FVjFjjjhhh,jjhj jjjZ[X2RP~WWhj~W~WPdžk(j }~WW~WWRPjWh~WW~W~W~WW~WWkǐWj~W~Wj~W~WPj|zjWh~WWh@~W~WP tvjjhhh,jjhj vvvvvj U~W~ &E%F~t~WFF~ &E~&;Et~ &u~&;Eu`~&uFv6NDjFvvvvj~&uv~ 1&E 1&E 1FF~&uFv6NDjFvFvvj~&uv~~~&ujjjF~ &E 1&E FFFU~ W~Wj~ &E&   &1t^vvvv 1P~WFV~&EA&UC&E&E1&E 1&E&E&EF~&uFU~&}A1&EE&EG~1&EA&EC6g1P~W1U~WjjhP61RPg~&uv6NDjF6NDvvFv6gFvjjhhvjjhj vvvvvjjjhP U~W~ &E%F~;t~WFF~ &E~&;Et~ &u~&;Eu`~&uFv6NDjFvvvvj~&uv~ 1&E 1&E 1FF~&uFv6NDjFvFvvj~&uv~~~&ujjjF~ &E 1&E FFFUvvv v vvvvv v v ~&EA& ECtz&EE& EGtm~ &E%F>t~t=~Au7@3B3D3F3~1& & 1& & ~& t& tw~Ptn>wd&EZ&U\d1ۚȋ~& & +& & &EV&UX؃&;  |B&; v;~&uV1ҹ(1ҋȋ~&EV&UX؃& & q~&EV&UX؃~&; | ;&; w4~&uV1ҹ(1ҋȋ~& & +& & ~& & &ƅ &ƅ j~&uFvh:hjj6e~&uvr~u ~&ƅ `~u ~&ƅ N>t~*t~Qt ~9tj~*uBjи2+1~&MZ&]\ȋ~& & +& & ~Qu:jи2+1~&MZ&]\~& & & & ~9t~&EZ&U\RSP1 1 Y^_~& & & & jи<+1~&MZ&]\ȋ~& & +& & ~&}awK~*uV&EZ&U\(1ۚȋڡ+ӣ~&EZ&U\(1ۚȋڡ+ӣ~QuK~&EZ&U\(1ۚ~&EZ&U\(1ۚ~9tj- 1~&MZ&]\Fjd21~&MZ&]\FFFFF~&E^&E^j ~&;E^sZj~&ƅ &ƅ &uFvjThhjvjThhj~&uv,~Xu>Cu>CvCC ~& u~Nt ~t>rj~&ƅ &ƅ &EatFFF0DžFFF0~&F0ЊF0i~&MaF0~&B F0ЊF0i^~&l~u~&uFF:vNF01~ vh\F0Hk-Phj*vh\F0Hk-Phj*vj~&uv~uZ~&uFvhshhjvhshhjjjvvj~&uv~tFFF0~&F0kS F0~&B F0kS ~u~ 1&E 1&E 1FFU~6u~6E6u~6E6u6[~6E6u6e~6E6uh:hjj6uvjhj ~6u6u~6u6u~6u~6u~6uh:hjj~&EZ&U\21ۚFV~&EA& ECt&EE& EGt~ &E%F~;u@~WW~P1PPRP>NW&=]4~&EE&UGj&}EW~& tR& tG~Pt>FV1ۚȋ~& & +& & 1& & >w&uFFV؃~&; | &; s jUFV~&; | &; s j*UFV~&; | &; s j?USFV~&; | &; s jTU$FV~&; | &; s jiUFV~&; | &; s j~UFV~&; | &; s hUFV~&; | &; s hUgFV~&; | &; s hU8FV~&; | &; s hU hU~&uv%>u~u ~&ƅ ~u ~&ƅ ~ 1&E 1&E 1FF$~6}&uFvFvFvj[jZFv6YFvvF>W| <>Us5vjjj[jZvUW-[1ۚPjhj Vv6]vjjj[jZvjOj!hj v6Yq3F3q343j444j4F40k~6}&vFݠ0k~6}&w0k~6}&v0k~6}&x0k~6}&w0k~6}&y0k~6}&x0k~6}&z0k~6}&yVݠ0k~6}&zFFv~W~uU=u=u4FF7F FF'FF@FF2F;p=u4FF<F FF#FF>FF6F87=u2FF#FFF;FF;F2FF=>q3t@vvvjjvhjhhvvvjjvhjhh>3t@vvvjjvhjhhvvvjjvhjhh>4t@vvvjjvhjhhvvvjjvhjhh>j4t@vvvjjvhjhhvvvjjvhjhh>4t@vvvjjvhjhhvvvjjvhjhhvjOj!j[jZvjjhj vvvvvvv~6}&uv"~6}&uFvFv6_FvFvj[j{FvvFvjjj[j{vjOjhj v6YQ=}=,~>SuB>Qu;j v6[vjOjj[jZvhjZhj vvvjjj-QS1ۚPvj--1+QS1ۚYPhhvjjj-QS1ۚPvj-1+QS1ۚYPhh=-|U=9P>Su >Q-uvjjj-jXvj-jZhhvjjj-jXvjjZhh=:|X=AS>Su>Q:uj vjjj-jXvhjZhhvjjj-jXvjZjZhhH=B} =~>Su>QBuj vjj!j[jZvhjZhj >S| r>QSskvjR1+QS1ۚPj[jZvhjjZhhvjR1+QS1ۚPj[jZvhjZhhvjjj[1+QS1ۚPvhjQS-R1ۚZPhhvjjj[1+QS1ۚPvhQS-R1ۚZPhh>S|~>Qorvjjj-n1+QS1ۚPvhQS-B1ۚZPhhvjjj-n1+QS1ۚPvjZQS-B1ۚZPhh3=|9=4>Su >Quvjj!j[jZvhjZhj =}b=~Z>Su>Quj vjj!j[jZvhjZhj >S|~>Qrvjjj[QS-1ۚPvhj1+QS1ۚZPhhvjjj[QS-1ۚPvh1+QS1ۚZPhhhvjQS-1ۚPj[jZvhjjZhhvjQS-1ۚPj[jZvhjZhh>S}>Qw>SuF>Qu>vjjj-jXvhjZhhvjjj-jXvjZjZhhvjjj-QS-1ۚPvh1+QS1ۚYPhhvjjj-QS-1ۚPvjZ1+QS1ۚYPhh=}=~>Su >Quvjj!j[jZvhjjZhhvjj!j[jZvhjZhhvjjj-jXvhjZhhvjjj-jXvjZjZhh=}=~>Su>Quj vjj!j[jZvhjjZhhvjj!j[jZvhjZhhvjjj-jXvj-jZhhvjjj-jXvjjZhhN=}F=~>>Su>Quj vjj!j[jZvhjjZhhvjj!j[jZvhjZhhvjjj-1+QS1ۚPvj-QS-1ۚZPhhvjjj-1+QS1ۚPvjQS-1ۚZPhh>SuG>Qu?v6[v6]vjOjj[jZvjOjhj vvvjOjj[j{vjjhj vvvvvvv~6}&uvU~vs~slk~S %=u'k~S tv~W v~W5k~S %=u%k~S tv~W v~WUV0k~6}&gtFP~WFP~WjF =tFAk~S}  FVk~Sm o -'FVF@kSm o FVk~Sq s FVF@kSu w  NF؉VڋF@kSy { FԉV֋FkSu w F܉VދFkSm o  NFЉVҋFkSq s F̉V΃~ u~u FFF@F=tFPk~S}  FVk~Sm o 'FVk~Sq s FVFkSm o FVFkSm o - NF؉VڋFkSq s FԉV֋F@kSm o F܉VދF@kSu w - NFЉVҋF@kSy { F̉V΃~ u~u F@F FFFV N^FVFV~6}&Ea01҉+-1;-~ | ;+v FVFV~6}&}avFV-RP~W~ t2~t)F؋V+1ۚFVFԋV-+FV1ۚFVFԋV-+1ۚFVF؋V+FV1ۚFVFVN^RPFVN^Y[+ӉFVFԋV.+FV1ۚFVFԋV.+1ۚFVFVN^RPFVN^Y[+ӉFV&FЋV+1ۚFVF̋V-.+FV1ۚFVF̋V-.+1ۚFVFЋV+FV1ۚFVFVN^RPFVN^Y[+ӉFVF̋V+FV1ۚFVF̋V+1ۚFVFVN^RPFVN^Y[+ӉFVFF+FV y؃tv+FV y؃prtv;V| ~;Frpr;V| ~;Frw+FV1zRSP+FV1zY^_1zFVFV;V| ~;Fv~u7~ u1~ |)~v"~| ~s;V\|;FwU~t~ t~|~~r~}~wv;V| ~e;Fr]+FVN^ F^V¡+FVN^ F^V~u8~ u2F^VtF^V‹F^VtF^V~ t~tF؋V+FV y؃};̿Lv6+FV y؃ȋڋFV+|~FԋV-|~|~+|~FЋV+FV y؃};̿LvfFЋV+FVRSPF̋V+FVȋڡ+FVY^_ȋڋFV+Ӊ|~F̋V|~|~+|~~| 5|s.|~N^ ؃|~ 1|~FȋV-'FȉVʋFȋVʚRSP~6}& & Nv~RSP~6}& & Nv~šY^_11Y^_FV1FFFȋVʚRSP~6}& & Nv~šRSP~6}& & Nv~Y^_Y^_FVFȋVʚRSPFVY^_11;̿LF^VFVRSP11k~S Y^_FV~6}&EV&UXNv~FVFVFȋVʚRSPFVNv~RSPFVNv~šY^_Y^_~6}& & & & FȋVʚRSPFVNv~RSPFVNv~šY^_Y^_~6}& & & & & & RSP|~~6}& & Y^_xz~|zx~W~6}&}avFV-RP~WFV;-tI;+t@ x~6}6}&uF~ u!~u~16E6E6E6E~16E6E6EX6EF <ttFAFV 61ۚȋڋF@kSm o ӋȋڋF@kSm o FV 1ۚȋڋF@kSq s ӋȋڋF@kSq s FV '1ۚȋڋF@kSu w ӋȋڋF@kSu w FV 1ۚȋڋF@kSy { ӋȋڋF@kSy { F@kSm o F@kSu w ;|V;vRF@kSm o -ȋڋF@kS] _ F@kSu w ȋڋF@kSe g PF@kSu w -ȋڋF@kS] _ F@kSm o ȋڋF@kSe g F@kSq s F@kSy { ;|V;vRF@kSq s -ȋڋF@kSa c F@kSy { ȋڋF@kSi k PF@kSy { -ȋڋF@kSa c F@kSq s ȋڋF@kSi k FV 1ۚȋڋF@@kSm o ӋȋڋF@@kSm o FV 1ۚȋڋF@@kSq s ӋȋڋF@@kSq s FV 1ۚȋڋF@@kS] _ ӋȋڋF@@kS] _ FV 1ۚȋڋF@@kSa c ӋȋڋF@@kSa c FV 1ۚȋڋF@@kSe g +ӋȋڋF@@kSe g FV 1ۚȋڋF@@kSi k +ӋȋڋF@@kSi k FV X1ۚȋڋFkSm o +ӋȋڋFkSm o FV 1ۚȋڋFkSq s ӋȋڋFkSq s FV 8J1ۚȋڋFkSu w +ӋȋڋFkSu w FV p1ۚȋڋFkSy { ӋȋڋFkSy { FkSm o FkSu w ;|^;vZFkSm o -ȋڋFkS] _ FkSu w ȋڋFkSe g XFkSu w -ȋڋFkS] _ FkSm o ȋڋFkSe g FkSq s FkSy { ;|^;vZFkSq s -ȋڋFkSa c FkSy { ȋڋFkSi k XFkSy { -ȋڋFkSa c FkSq s ȋڋFkSi k ~6}6}& uvj]huj/j4vj]huj/j4vj]huj/j4<tFPFV >1ۚȋڋFkSu w +ӋȋڋFkSu w FV 1ۚȋڋFkSy { ӋȋڋFkSy { FV *1ۚȋڋFkSm o +ӋȋڋFkSm o FV ȯ1ۚȋڋFkSq s ӋȋڋFkSq s FkSm o FkSu w ;|^;vZFkSm o -ȋڋFkS] _ FkSu w ȋڋFkSe g XFkSu w -ȋڋFkS] _ FkSm o ȋڋFkSe g FkSq s FkSy { ;|^;vZFkSq s -ȋڋFkSa c FkSy { ȋڋFkSi k XFkSy { -ȋڋFkSa c FkSq s ȋڋFkSi k FV 1ۚȋڋF@@kSm o +ӋȋڋF@@kSm o FV 1ۚȋڋF@@kSq s ӋȋڋF@@kSq s FV 1ۚȋڋF@@kS] _ +ӋȋڋF@@kS] _ FV 1ۚȋڋF@@kSa c ӋȋڋF@@kSa c FV 1ۚȋڋF@@kSe g ӋȋڋF@@kSe g FV 1ۚȋڋF@@kSi k +ӋȋڋF@@kSi k FV p1ۚȋڋF@kSu w ӋȋڋF@kSu w FV h1ۚȋڋF@kSy { ӋȋڋF@kSy { FV 8J1ۚȋڋF@kSm o ӋȋڋF@kSm o FV p1ۚȋڋF@kSq s ӋȋڋF@kSq s F@kSm o F@kSu w ;|V;vRF@kSm o -ȋڋF@kS] _ F@kSu w ȋڋF@kSe g PF@kSu w -ȋڋF@kS] _ F@kSm o ȋڋF@kSe g F@kSq s F@kSy { ;|V;vRF@kSq s -ȋڋF@kSa c F@kSy { ȋڋF@kSi k PF@kSy { -ȋڋF@kSa c F@kSq s ȋڋF@kSi k ~6}6}& uvhhtj-j5vhhtj-j5vhhtj-j5~6}6}&uv~6}& t,& s$& jjjj~WjjjU9~6}& u*& v"& jjjj~WjjjU~6}& t,& s$& jjjj~WjjjU9~6}& u*& v"& jjjj~WjjjU~6}& & ;V|b;Fr]~6}& & ;V|E;Fr@~6}& & ;V|(;F w#~6}& & ;V | ;FwFFF;V|D;Fr?;V|1;Fr,;V|;F w;V | ;FwFFFU~6}&u~W~6}&u~6E6u~6E6u~6E6u~6E6ujdjd~6E1ۚ-~6}& & 1ۚ-~6}& & & & -~6E6E~6}& & -~6E6E6E6E6u6[~6E6u6u~6E6ujj6u6u6u6u6uhj ~6u~6}&uT~6u6u6ujj6ujjhh~6u~6}&uR~6u6u6ujj6ujjhh~6E6E=~6}޺~16E~6+E@6E֋~6u6u6u6u6u6ujjhj ~6u6u~6u6u~6u6u~6u~6u~6u~6u~6}&u~6uU>q3v6>3v/>4v(>j4v!>4v1QS~6}&ƅ ~6}1&E^HM&Dž &Dž &Dž HM&Dž &Dž &Dž &Dž HM&Dž 1& & 1& & &Dž &Dž &Dž 1& & &ƅ ~WU~6}&u~W~6}&u~6E6u~6E6u~6E6u~6E6ujdjd~6E1ۚ-~6}& & 1ۚ-~6}& & &+ & 1ۚ~6}& & &+ & 1ۚ~6}& & &  |P& vH~6}& & &+ & -~6E~6}& & ~6E$~6}& & -~6E6E~6}&  |P& vH~6}& & &+ & -~6Eދ~6}& & ~6E$~6}& & -~6E6E~6}& & y؃~6E؋~6}& & y؃~6E6u6[~6E6u6u~6E6ujj6u6u6u6u6uhj ~6u~6}&uT~6u6u6ujj6ujjhh~6u~6}&uR~6u6u6ujj6ujjhh~6E6E=~6}޺~16E~6+E@6E֋~6u6u6u6u6u6ujjhj ~6u6u~6u6u~6u6u~6u~6u~6u~6u~6}&u~6uU~6}&u~W~6}&u~6E6u~6E6u~6E6u~6E6ujdjd~6E~6}& & 1ۚ-~6}& & & & 1ۚ-~6}& & & & -~6E6E~6}& & -~6E6E6E6E~6}1& & 1& & ~6u6[~6E6u6u~6E6ujj6u6u6u6u6uhj ~6E6E=~6}޺~16E~6+E@6Eր~u)~6u6u6u6u6u6ujjhj ~6u6u~6u6u~6u6u~6u~6u~6u~6u~6}&u~6u~6}&uFFFFVFV-1ۚFFF0Hk,*FFF0狅;V|%;Fr vvvF+F@PF+F@PvvvF+F@PF+F@PvvvF+F@PF+F@P~t9~t0~6}&uvU~6}&ƅ FFF0P~WFFF0kS F0ЊF0i^~6}&l~uɀ~uFFF0P~W~ujj~WtFFF:vFF01~ F01 F0ƅ F01 jj~WF0ƅ~vF0DžF0Dž~WF0Dž5Dž7F0ƅFFF0ЊF0k~6}&ƅg~u׀~tFFF0P~W~uWjF~uWhjFF~z|33~CЉSk~Wk~ǐW~ uvWjv~Wj(vWhv>F WjF~u Wj@F~uv~WjW~WjWWjuUFv~Wj(vWhFF~CS33~z|~ uv~tFF +F1ҹ~z|~ uֿW-WW-WW-WW-WW-W W-W* W-W@ W-WV W-Wl W-WU>tV0kǐW6W~6}WIWsW0kǐWjP1PPRP>NW&=]8~6}WWP1PPRP>NW&=]4~6}&EA&UCj&}AWFF0~ ~;|};zwF@F ;FrMFNFHz|~z|FHkǐWk~ǐWjF;Fu0~ ~z|F~W~W ~ t2Z~6}&u:v\h0Hk,Phjh0Hk,Phj:tjj~W0 01ҋȋڊ0 RP~W0 j7jOj*j{ht0Hk,Pj j ht0Hk,Pj j Ijj~Wht0Hk,Pj j ht0Hk,Pj j :t~6}&u>tt>9utj~Wi9k9m9o9~6}& & & & 0k&ƅ{h~Wjj~W~6}1& & &EV&UX;̿L~6}& & 1& & &Dž &Dž &Dž 19uA&EaDujj~W>tu ~6}&ƅ ~6}&ƅ 0烽u%~6}&ƅ &ƅ ~W~W~6}&Dž &Dž &Dž FFF0kS F0Р0i~6}&MaF0kS F0Р0i^~6}&l~uF0Ƞ0@0烽:FuԠ0烽FFF0Р0i~6}&UaF0kS F0Р0i^~6}&lF0kS :FtF0P~W~uFF:FtF0P~W~uFF0:FrF0HP~W~uԠ:Ftz1FFFF0HР0k~6}&gtF~ u΋~6}&uFvvvP~6}&uv~W0狅HР0牕~W~6}&uFvjThhjvjThhj~6}&uv~W1~W>u~6}&ƅ &ƅ ~WUvvv F +F@PF+F @Pvvv F +F@PF+F @P ~6}&uF~w%k~S[ v&uK&uM&uO&uQUK~r~wvF--P)F-cBv&5&u&u&uU~6}&uvUvvv F +F@PF+F @Pvvv F +F@PF+F @P ~6}&uF~w%k~S[ v&uK&uM&uO&uQU)F-cBv&5&u&u&uU~6}&uv >tF%=uH~ rA~ s:F -Р0k~6}&ƅgF -P~WF%=uDk~ S Fk~Sƅ v~WF% = uF@kSƅ F@@kSƅ F%=u>u>u 1UWF%=tj 90i~6}&ƅh~W>9t0Dž 90狅 Fj@Р0牕 0狅 ;Ft׋~6}&uFv0 vj7jOj*j{~6}&uvF%=t$j FFFF0ZkS tF~uـ~uj0ujhPË~WR0u0ƅ00@Р000HP~WFFF0ZkSƅ F0Z@kSƅ F0Z@@kSƅ F0ZP~W~uF%=t&j FFFF0mkS tF~uـ~uFFFF0HР0k~6}&gtF~ u΃~ sOjFHР0k~6}&ƅgFHP~WiF'1RP~W~ tVjFHР0k~6}&ƅgFHP~WiF'1RP~W~6}&ƅ *; };&uFv6A;6C;E;+A;@PG;+C;@Pv6A;6C;E;+A;@PG;+C;@Pv6;6;;+;@P;+;@Pv6;6;;+;@P;+;@Pv6 6 + @P + @Pv6 6 + @P + @P~6}&uvj~6}& te0 ȋڠ0 0 01ҋȋڠ0 RP~W ~6}&ƅ FFF0mkSƅ F0m@kSƅ F0m@@kSƅ F0mP~W~uF%=tF =u,~6}&ƅ h~W*;h~W_=u+~6}&ƅ h~W j~W/=u*~6}&ƅ h~W};h~WF%@=@tF =3u@j~6}&ƅj3~W00HiRP~W=4u?j~6}&ƅj4~W00HiRP~Wk=5u?j~6}&ƅj5~W00HiRP~W'=r"=wF ~6}&Eav ~W~6}&uF~ u ~u>t>ttFV 1ۚFV ~6}& tFV 1ۚFV 0~ FV0~ FV ȋڠ0~ 07| m5wf05%'0~ ;|5;r1j0570~WvP01RPv~6}&uv~6}&uFv vv~6}&uvUFV -kSm o FV -kSq s ->-ȋڋFV -kS] _ ->-ȋڋFV -kSa c >ȋڋFV -kSe g >ȋڋFV -kSi k U~6}&u~W~6}&u~6E6u~6E6u~6E6u~6E6ujdjd~6E~6}& & & & F VFV 1ۚ-~6}& & 1ۚ-~6}& & &+ & 1ۚ~6}& & &+ & 1ۚ~6}& & &  |P& vH~6}& & &+ & -~6E~6}& & ~6E$~6}& & -~6E6E~6}&  |P& vH~6}& & &+ & -~6Eދ~6}& & ~6E$~6}& & -~6E6E~6}& & y؃~6E؋~6}& & y؃~6E6u6[~6E6u6u~6E6ujj6u6u6u6u6uhj ~6u~6}&uT~6u6u6ujj6ujjhh~6u~6}&uR~6u6u6ujj6ujjhh~6E6E=~6}޺~16E~6+E@6E֋~6u6u6u6u6u6ujjhj ~6u6u~6u6u~6u6u~6u~6u~6u~6u~6}&u~6u U~~~~6}& & ~~6}& & ~  ~6}& & & ~~6}& & U~~~6}& & ~~6}& & ~~6}& & & ~  ~6}& & ~U0狅 =uf0 'ȋڠ0 0 01ҋȋڠ0 RP~W<=uf0  Nȋڠ0 0 01ҋȋڠ0 RP~W=uf0 PÃȋڠ0 0 01ҋȋڠ0 RP~Wf=uf0 ȋڠ0 0 01ҋȋڠ0 RP~W=uf0 @ ȋڠ0 0 01ҋȋڠ0 RP~W=uX0 01ҋȋڠ0 RP~W01 jj~W3=u.>9t'Fȋڡ91;u;t~6}&ƅ tx'~6}&EM&UOqF&Ea0䉆ظ;~"FF~6}&}avFHRP~W~6}& & & & Fظ;v4"؋~6}& & &EZ&U\& & & & 1zRSP~6}& & 1zY^_1zFVFV~6}&;UX} &;EVwFVRSPFV~6}&+EV&UXY^_RSP~6}& & Y^_ȋڋ~6}& & +& & FVRSPFV~6}&+EV&UXY^_RSP~6}& & Y^_ȋڋ~6}& & +& & &EV&UXFV~6}& & & & & & & & & & FV& & FV& & F^V~6}& & z|~~6}& & & F‰^ĉV1F?BF1FF>|;>v2>+|> 0w!>|>v> |5>v-~6}&}avFHkSƅ t ~W>| >`sdždžFFk~S[ ،Ɔm&EI# u#&}4t&u&u&u&u&u &u &u&u~Wuľ&<t+F;Fu&E&U~6}&+ & 1zRSPľ&E&U~6}&+ & 1zY^_1z y؃FVľ&E"&]$&U&ȋڋFV+ӉFVľ&}uFV;VB|;Fs;ľ&}tFVȋڋFV؃;| ~;vľ&}t~6}& & 1ۚȋľ&E&U+ӚF^V~6}& & 1ۚľ&+E&UF^V~6}& & 1ۚȋľ&E&U+ӚF^V~6}& & 1ۚľ&+E&UF^Vľ&}u2F^VtF^VF^VtF^VF^V1zRSPF^V1zY^_1zFV~|e~v_FVRSPz|~Nv~RSPF^VNv~Y^_Y^_FV1FF~|S~sMFV y؃-ȋڋFV y؃;|;rFV FVƆm<tG>t:uľ&E"&]$&U& }=wľ&E&U+1zRSPľ&E&U+1zY^_1z y؃FVľ&E&U+1zRSPľ&E&U+1zY^_1z y؃FVľ&E"&]$&U&;V };Fsľ&EA%@=@u{&EA @&EAj001ľ&ME&]GRP~W~tk~Sƅ V0i~6}&Eav~Wv~W~6}&uؠ01 jj7jOj*j{~6}&uؚvľ&uA~W}q= #RSPq= Y^_RSPFVY^_FV}q= #RSPq= Y^_RSPFVY^_FVľ&EA%&EA3ľ&u&u&u&u&u&u&u &u~Wu~t~t ~tFVfffffFV~6}&EV&UXRSPRSP11Y^_Y^_؃FVFVFVľ&u&u&u&u&u&u&u &u~Wu k~Sƅ v~W] <t{ľ&E&U&+E&UF^Vľ&E&U &+E&UF^VF^V1zRSPF^V1zY^_1zFVFV1zRSPF^V1zRSP~6}& & ľ&+E&UY^_RSPF^V1zRSP~6}& & ľ&+E&UY^_Y^_Y^_FVFV1zRSPF^V1zz|~RSPF^V1zNv~Y^_Y^_FVFV;V }z;Fsr~|~g~ v^FV- -ȋڋFV y؃; }.;s'~6}& & ľ&+E&Uȋ&E&U+RP~6}& & ľ&+E&Uȋ&E&U+Y[+Ӄ }=s~6}& & ľ&+E&U ȋ&E&U+RP~6}& & ľ&+E&Uȋ&E&U +Y[+Ӄ| = wƆm<tľ&E&U+-1zRSPľ&E&U+1zY^_1z y؃FVľ&E"&]$&U&ȋڋFV+ӉFV~|~~vľ&}Ct5&}Cct~6}&}at Fȋľ&EC1;t;t~u >ut~6}& |~& ,ryľ&E&U~6}&+ & y؃| ~=rľ&E&U~6}&+ & y؃| ~=rFV y؃| ~=rFV y؃|{=sv1FF1FF~6}& & uFľ&ECj~Yu~6}&Dž ,&Dž !~6}& & & & Lľ&E&U;|M;vG~6}&EZ&U\ 1ۚRPFVfffffY[ӉFVE~6}&EZ&U\ 1ۚRPFVfffffY[+ӉFVľ&E&U;|M;vG~6}&EZ&U\ 1ۚRPFVfffffY[ӉFVE~6}&EZ&U\ 1ۚRPFVfffffY[+ӉFV~Yt>tt}j@=uo%=uo=uo =uos~6}&ƅ FFFdž kSƅ u~}~|dž؈dždž؋HkS t؋ع1ۚ؉؃uɠ0 ؋ȋڠ0 tqt0 01ҋȋڠ0 RP~W01 0 0~W~6}&u؋~6}&uؚ>u(>u!>tu1QS~6}&ƅ t:F-Р0k~6}&ƅgF-P~W0 01ҋȋڠ0 RP~W*~u#0k~6}&ƅ{h~W~6}1& & &}au>~u ľ&EC ľ&ECc>t ~W ~6}&ƅ &~6}&ƅ FHkSƅ ľ&EC~ |=~v6Fȋľ&EC1;u ;u1&EC~6}1& & FV;V| ~;Fv~}~sľ&}Cu&E&U~6}&+ & F^V~6}& & ľ&+E&UF^VF^V1zRSPF^V1zY^_1zFV~|e~v_FVRSPz|~Nv~RSPF^VNv~Y^_Y^_FV1FF~|A~s;FV y؃-ȋڋFV y؃;| ;rƆmmtO~6}1& & FV;V| ~,;Fv$FVFV@k4p،؋FV&E0&U2F&F^Vľ&E&]&UF^Vľ&E&] &U ľ&E.&]0&U2ľ&E&]&Uľ&E(&]*&U,ľ&E&]&UFV&E&Uľ&E5&]7&U9ľ&E&] &U"ľ&E;&]=&U?ľ&E$&]&&U(ľ&EAľ&E*ľ&EE&UGľ&E,&U.~t郾wdt؋~W t*؋؋111u؋~W؋؋ع1zRSP؋؋ع1zY^_1zFVFVRSPz|~؋؋ؚRSPF^V؋؋ؚY^_Y^_FVFVRSP{q= #؋؋ؚY^_F^V؋ y؃؋؋ؚ؉؉؃~|%~s؋؋t؉؉؋FVRSPF^V1 Y^_F^VFFFFVRSPFV y؃Nv~Y^_RSPͻ̺LN‹vċ~ƚY^_؋؋ؚFVN‹vċ~ƚNv~F‰^ĉVƁخt دt-|~vFVRSP؋ؚ؋؋ؚY^_ȋڋ-Ӌȋڋ-FVRSP؋ؚ؋؋ؚY^_ȋڋ-+Ӌȋڋ-؋-FV؋ؚRSPFVRSP؋ y؃Nv~Y^_RSP11ҋ؋؋ؚY^_Y^_FV>t؋؋111r~6}&EV&UX؋؋ؚ;|h;vb t؋~Wj~6}&EV&UX؋؋ؚȋڋFV+ӉFVFVRSPFV؋؋ؚRSPFV؋؋ؚY^_Y^_FVFVRSPFV؋؋ؚRSPFV؋؋ؚY^_Y^_FVFVFVFVFVFVFV򃾤u8~| &~s~6}&ƅ 1FF1FF1FF4u-~6}&}avFHkSƅ t ~W~6}& uF‹^ċVƋ~6}& & & FV& & FV& & & & 1zRSP~6}& & 1zY^_1zFVFV~6}&;UX}&;EVwFVRSPFV~6}&+EV&UX& & Y^_ȋڋ~6}& & +& & FVRSPFV~6}&+EV&UX& & Y^_ȋڋ~6}& & +& & &EV&UXFV~6}& & & & FRP~Ww~6}& t& u ;t݋~6}& t& u ~W~6}&}avFHRP~WF;t%L~&EA& ECt&EE& EGt& t& t>t&}Qt>u{&EQ>tFFvU~үuvx~& ud >u>ttm;otG&uFo;mv m@mmHmv6msP~&uvt>m uR~&uFvjj~&uv>suF Fk~Sƅ ~u~&uFv6mj~&uvo s1y&~1& & &Dž &Dž &Dž m=ur0&EV&UX~& & &EV&UX111~& & !=uxh<~&EV&UXffff~& & &EV&UX|;̿L~& & =ux0~&EV&UX3333~& & &EV&UX~& & '=uxO~&EV&UX~& & &EV&UX~;̿L~& & =ux_~&EV&UXq= ף~& & &EV&UX~{Ga~& & -=ux0o~&EV&UX;̿̚~& & &EV&UX~& & =ux82z~&EV&UXQ~& & &EV&UX33333~& & 3=ux=~~&EV&UX~;̿̚~& & &EV&UX;̿L~& & = uwM~&EV&UX};̿̚~& & &EV&UXfffff~& & :=u5`g~1& & &Dž &Dž jjUUj~&ƅ FFԋF~&}at$F~&MaF~&}au vU~ԯuÀ>t'>W| >UsUWU~&}awU>At& u,& & & & jU ~&ƅ ~&EatA>LBu*& & & & Uk   jjULB^>LBuW~& u,& & & & jU ~&ƅ ~&EatjjU~& u& uU~& uv&ƅ jjUjjUU~&uFvjThhjvjThhj~&uvjjUjjU~& t jjUjjUi9k9m9o9~& & & & jU0k~&ƅ{hU~1& & &EV&UX;̿L~& & 1& & &Dž &Dž &Dž 9jjUjjUALB~&Eat&ƅ >uMvx1ۚȉ uUvx 1ۚȉڹ1ۚFҋF=|=FPU=|= FPUvx1ۚȉ tvx 1ۚȉڹ1ۚFҋF=uhUhUJ=|!=FPUFPU$=|=+FPU+FPUvx 1ۚȉ=uhUhUjU=uhUhUjUvx1ۚȉ t~&uFvx(1ۚȉڹ1ۚF҃~}lFҋZkS[ ~Fv&uK&uM&EO&+EK- P&EQ&+EM@Pv~&uK&uM&EO&+EK- P&EQ&+EM@PmF-ZkS[ ~Fv&uK&uM&EO&+EK- P&EQ&+EM@Pv~&uK&uM&EO&+EK- P&EQ&+EM@P~&uvvx1ۚȉ t~&uFvx1ۚȉڹ1ۚFҋF=uKvhhj j vhhj j vhhj j vhhj j =uKvhhj j vhhj j vhhj j vhhj j =uJvhhj j vhhj j vhhj j vhhj j M=uHvhhj j vhhj j vhhj j vhhj j ~&uvvx1ۚȉ ub~&uFvx1ۚȉڹ1ۚF҃~ } vvҚv+FP~&uvvx1ۚȉ tyz|~&uFvFvFvhjFv6_FvvFvjjjdjvhhhj vjdjhjvhhhj v6az|11ۚȉڃ|q=vlz|11ۚȉڃ|P=sKvjjhjvz|11ۚȉ-1ۚPjhhvjjz|11ۚȉ-1ۚȋڸ1+Pjvz|11ۚȉ-1ۚPjhhvz|11ۚȉ-1ۚȋڸ1+Pjz|11ۚȉ-1ۚPjvhjhhvhthhjvjjhj vvvvvvv~&uv>u~& t&ƅ >S| C>Qs;>Su">QuFҁFk~S1 ~҅uQSUy~&ƅ 1QS&uFvjWj)jDjFvjWj)jDjF~&uvFFҋVҠ0k~&ƅg~uߠ0烽ubUUUU~&uFvjThhjvjThhj~&uv1vxU~&EQ&}^v>t~&M^U66XZPX2<r&66XZPX2<u(66XZPX2< sjWWjf*W$PHWHW=]1PHW=]1 44 4/3>-R-`-"""---EDDD e=dzW&#E EJ] \- @p 7LLLY L L- L L Lm L LA L L L L LULL(LLLcLL5LLLpLLELLLLLRLL#LLLXLL'LLLaLL2LLLjLL;LL LLLgLL8LL Lg L L4!L!L"Lm"L"L<#L#L $Ls$L$L?%L%L &Ln&L&LB'L'L(L(L(LQ)L)L!*L*L*LW+L+L$,L,L,L^-L-L:.L.L/L/L/L`0L0L<1L1L2L2L2L^3L3L24L4L 5Lz5L5LR6L6L,7L7L8Lr8L8LL9L9L$:L:L:LX;L;L)<L<L<La=L=L+>L>L>L\?L?L,@L@L@LgALAL6BLBLCLjCLCL2DLDLDL_ELEL*FLFLFL_GLGL3HLHLILpILILCJLJLKLKLKLRLLLL#MLMLML_NLNL/OLOLOLbPLsPMPMPMPMPMPMPMPMPM QMQM'QM6QMEQMTQMcQMtQMQMQMQMRRERXaDaEWa_fa|aaaa4a-a"a-aDaaaEbKb0bK:bfb.}bBbbbnbbDbBbcc#cD;c}rcNcQTdYd!^d"dd!dd" eoeI{eBe#eDeIefEf^ff!f%ffff"ff;gfgggggghhhhIhBhOhQhDBiIiB-jPJjQTjTcjDujBjOjQjRjSjDBk4Rk4fk-zk-k"k-k-kDkDkQ lZllllBm$2mMm$am|m$mm$mm$m n$n9n$Mnin$|nn$nn$n$nD7oBBo4Mo4\o3ko-yo-oo"o-o"o-q.&qIr"r"r"s"-s"Ms"ts"s"s"s"s"t- t-tEtD%tD8tDPtB[t4jt-ut4t3t-t"t-tIt-u"u-3uPubu"|uuu"uZu"v"'vIEv"bv"vIv"vv"ww"Bw`wrw"www"wx(x"Hxexwx"xZx"xIx"2yPyby"yyy"yy"zz"`z"}z"zzz"z {{"F{Zd{"{"{"{"{I|""|"?|"\|"|I|"|"||}"0}M}_}"z}-}-}"}-}"}-}-}E}D}D ~DE~)S~*|~*~)~*~)~I""!"r,(Ptł '>Qyǃc!pu#!#$"!"!!Å"ȅ!=!K Ά!܆ !!',"!"Շ!!!#+7?D"]!v!!"ш!߈!$!9AF"`!ns"!!!‰ʉ҉׉"! !'!5=EJ"t!!"Ȋ&-!B!"Nj̋!ы" !"OT!Y"',!1"mr!w"!"!"?D!I"!"ˏЏ!Տ"!"[`!e"!"PΒOߒQ<z*fޖTȗPOљQD1)3X1d313̚1ؚ3!B44"463T--4"K-q"-""-&-6-BENDZDfD}Dk6!B44˟4ߟ3+]--="T-z"-""-/-?-KEWDcDoDD!Bƣ4֣443"S--'""---EͥD٥DDDBAOæPQDD+)(%'`:ܨ.SWlV{VVQUUܩR   R*RdQ˪ڪ%4Zjݫo?=ҬBO7QX'(!QխOQ' P>QfD9)B !.3"I9>@++Q.*ޱBTS DA:7JB_PqQD:;?OQBHDjTDDͳPQB0E[EnDӴ*+]I*B!Q"D7IxI'*N+iII *2'EIx*'BԸOQO:Q\O~QDI (+*Ⱥ****)*FI^*|'I*'ϻI*'.*FBy@Ij:vSRDBýRֽD!'B74G4W4k3ڿ:f--"1-W"n-""- --(E4D@DLDcDJU(( +(((3>'_(,g!ty#!#$"!!3!;@"n!!!"r!!CC5!#=!JO#W\$in""7P!U"Z!!"!!"!0!5":!##$"!.6>C""!#5!BG#OT$af"!#!#$""LIlw')GB!QD%F*%8LZ!bg"r%!"4!-2"L!T%bt|"5)!A!`e#~#$"!!D!LT\d"u!"(g!#!#$","I#0!>C"jw!"!"!+0"^"':BDx*(* C!"!-!2"7!V[#ty#$"!"F '.3#OT#\a$ns"!"! -!>!$!!05"R`!!"!&!7?D"!!!"/ H!Y^"'I!"!!!',"=!K!\j!{"-C!#!#$"!BG!OT"!!"2B8-!+kBUDBUDBU.D!"!" !"6!DI"!"!"!"0!>C"!"!"! "*!8="z!"!"! "$!27"t!"!"- 6IZ)/9$C,9, %%-/B57ABVPhQwD-B-B9).!<A"-B*!)2N\p*y)*)*)*** )))+BBVdOQPFQUDf}BOQPQ OQ0PBQ\OnQPQOQPQDB)7KT\TkD|B443--" ",-=^" 1"EYz""--EDDDh0BPQD<A: 7B,P>QMD[2`K[mb[VH6>u>Ct vFhFVF Fu~~F&&E1FFF~&&E&E&E~uvFv~WPjFvvvjPvvvvh~Wjjj2j؈F~t)~t"~t~t~W~W~u ~Tv=k~TS[ ~FFP&F8 F:tFPFP~LuLIKFHVJFHVJMOFDVFFDVFFHVJF@VBFVFDVFF<V>FVHFHVJFHVJFDVFFDVFF@VBFVFFV~|Q~vKFV;VJ|>;FHv9FHVJ1ۚ~&E&UFV1ۚ~&E &U ~|P~vJFV;VJ|=;FHs8FV1ۚ~&E&UFHVJ1ۚ~&E &U BFHVJ+F8V:1ۚ~&E&UFHVJF8V:1ۚ~&E &U ~|Q~vKFV;VF|>;FDv9FDVF1ۚ~&E&UFV1ۚ~&E&U~|P~vJFV;VF|=;FDs8FV1ۚ~&E&UFDVF1ۚ~&E&UBFDVF+F8V:1ۚ~&E&UFDVFF8V:1ۚ~&E&UFP<tFHVJ1ۚ~&E&UFDVF1ۚ~&E&U1&E&E1&E&E F8V:1ۚ~&E"&]$&U&&E&U&;U|!&;Es~&E&U-&E&U#FV1ۚ~&E&U&E&U~&E&U&;U|!&;Es~&E&U-&E&U#FV1ۚ~&E&U&E&U~&E &U &;U|!&;Ev~&E &U &E &U #FV1ۚ~&E &U &E &U ~&E&U&;U|!&;Ev~&E&U&E&U#FV1ۚ~&E&U&E&UFHVJIKFDVFMO<t~&E&U-&E&U&E &U &E &U &E&U-&E&U&E&U&E&UFHVJ1ۚ~&E&UFDVF1ۚ~&E&UFV1ۚ~&E&UFV1ۚ~&E&U FVIKFVMO&E"&E$&E&F2^4V6~&E(&]*&U,F,^.V0~&E.&]0&U2FR&E4F&^(V*~&E5&]7&U9F ^"V$~&E;&]=&U?FN&EF&EAF&ECFV&EE&UGF&EIF &EKF &EMF&EOF&EQP~cBF &F &EF&EF&E vFvFv6[FvvFvvv v vvjjhj vvvvvv vFvFv6[Fv6_Fvv v vvvv v hj vvvvvv vFvFv6[Fv6]Fvv v vvvv v hj vvvvvv vFv6[Fvv v vvvv v hj vvv 2vFvFvhj(FFFF=u F)F==u FUF,=u FЁF=u FЭF FFFЋVFЉV҃~ |~r~ |~vFV FV~~ FVv6[FvvFvjjhj(vvvhj FFFV 1ۚȉڈFFV 1ۚFV~u~|~w ~uM~uGF0и+F܉Vv6avvjjjvF0Pjhh~t`vvvhj(vjjhj vvvvvvvF:t >kct~w~rxF0  |~ vFkF0  |~ vFIF0  |~ "vF'F0  |~ vF1FF;ku~vvh|jEhh~Cvh|jEhhvh|jEhh1FFF;Fu:vh +FkMPj j vh +FkMPj j 8vh +FkMPj j vh +FkMPj j ~tzFkz~utvh|jEhhvh|jEhh1FFvh +FkMPj j vh +FkMPj j ~ukcU~vvj{h,jDj=~!Cvj{h,jDj=vj{h,jDj=~u%v hj/jdjJv hj/jdjJv Fv Fv6[Fv6cFFF/FdFJ1F1F~uFF~ vFFFF- FFHfFvvvvvvvvhj v vvvvvvvhj vvvvvvU.EUCC1C~W$Wj$W~W,W$WjP$WBWFWOWj$WF~u&C>Cu6CCWj0 t1CCC%|.=v)1FF6C~WF0䙹 k CCFF~ u66FRPUWPFjB~~CCvFV~W~ĽCW~vv~t\C]MEU>Cv:>Ct jjjFF~CC~uC]MEU>CvE>Ct>~ t.>Ct jjj~ĽCWjآCF]MEU>Cv>Ct jjjF]MUEUFFFV-1ۚFVvFVF~&E~&FV-FV11;V~|;FvFVFVFV1ۚPDF~&UFV1ۚPDF~&UFV1ۚPDF~&UF~&EFV;Vt_;FtW~WNDvvFVP]MEU vv v ZWFvvFvFV1FFF~& F~& ~uv]M EU~&M1҉FVFV-1ۚFV1FFFVFV1ۚPDF~&U*FV1ۚPDF~&U)FV1ۚPDF~&U(F~&E+~td~tZ]MEUlv vv^WFv vFvFV~W~Wj(~&E(‰FȉVʋFމFN(FvšF̉V΍~W~Wj(~WbWjjjjjjFv6NDjF6NDvƚvƍ~Wjjvv~WjFvvjvƚvvF]MUEUv vvP]MEUvPP]MEU1tj>jt FF FFvvvv1P~WFV~&E&&U(FV&E*&U,FV&E.&U0F &E2F‰]MEU~&uje&u0&u.&u2FF]MEU~W~&u&u(&u&~&ujd&u,&u*~&uje&u0&u.~&ujeh&E2HPjj]MUF;F}FFFFF]UF;F~FFFFF]U>t6JWJ 6J6JPPJ6JPRP6JPRP]U6J6J>t6JW 66J]U61P6JPD+H&JPF+J&JJP6]U]U61P1PP6JP1P61P6HP6P1PP6JP1P6P6JP]U>t >tw]EU>u1Pv6J%PFF1Pv6JP2FF;Hu F;JtyF;Ht61PvPF;Jt6PvP6H+F&JPJ+F&JP11RP11RPFHFJ6]MEUD+J@P6H6D_PPF+J@P6J6FFPgP]MUFF;B|B)FF&@F>J‰FVFV]UF;F}:26JF+H&JPF+J&JPv6FRPF+FPd]U~6u6u~16E16E1DFF;BuYF;Bu11P6F$ǎW6@ P61PJP11RP11RP6]EUDFDF~w~&< r?<u.>D~%D6D6FXǎ& D;F}DF <u1PFN]vvc>^t]MEU~WP]MEU~W1P1P1PP t~u~W~Wƃ>~@FF]MEUu,>tt>tJFJWJW6F]MEU1FFF<u~v NP,< r(_t~uVF~&F~ uF~& F PFFF]MU@&BPJJ>JW@&BP P>`u61PP`PP]U1PJ>JHPgF6@JJH>JHP&F1PJ>JJP5F6BJJH>JJPFF;F}86JF+H&JPF+J&JPvvRPF+FPFa]U~6E=u F HF^=u F @FP=u F +FF@=u F FF0=u1F$=uFF=u ~6EFF FF]UHFJFF=uvJP6JUOF=uv6J6JU6Fvv]U>t >tF>JJF>JJ1P@+JPJ1PB+JPJ6H6JpH6J6JbJ>t >t4]U$6J~WFJFFJFޣJ PPPȡ@&JP1PPZ‰F!PPPPPȡB&JZPPPZ‰FF~&EF~&E PPPСJZ~&E PP!PPPСJZZ~&EF~&EF~&E]U>`t ~u>@}F>J]U>`t ~usP }@FFF~nj&:Fu&E:Fu&E0P&E0P1P`~ uÉ]U>tL]U>t]U6J6J@&BP1DF1HJ1P]ÌАEU؃VW1FFFF =u6=u=uPv v=u1Pv vt=u vvd=$u vvST=u F PwF=u F P8=u.=u $=uvv v vvFVFV_^f]M EU~&}t&u&u &u~1&E1FF]MEU~&u&u &u~&E 1&E1FF]MEU1FF]MEU~&}u&E&U1&E&E%~&E׸&E&U&E&U~&E&U1FF]MEU~&&E&E&&E &U&E&U&E0]MEU>uR6z6xnJW1RP686:6<6>1P1P611RP666]MEUJJ>u t}nJډFVhW6N6L~W6hW61PP`P1P`~W1P1P1P t~W~WӉ]MU>u:l1P1RPn1P1RPprbW8KW8KW8LW8LW6nJWPPnJWnJWJJ]UPQP~Ot0~WWXYV!]Uv~OV v t0~C^rt/~O0t!<;t ĪIuN㼀:t\8tI뭪FV] EUvv\PFVF Fuvv:PFVF FuFVFVFvv.PFVF FuvvFVF+FF~CvFCF+FF~vF1Fvv?P uvv*P tF~t F F~t F F~&=t F FF FtvvvvvF F tv v vvvF FtvvvvPFFF]MEU vvFFV~&=tKvvvvv u"F~&==uFVFFVvv@F1FFFV]MU11tG1P~W~1&EF&EvvF PW~&E&}u1FU1~W1P~W1U1~&}t &u~1&EU~&uvv F PFF U1EU1t^vv1P~W~W~tvv ~&E&UF V~&E&U~1&E!&E#&E%F‰]MEU~&}t &u&u1P~W1]MEU~&}urW~W~&E%&E& Eu1F~&}&EF6~&u&uv&u&u&u#&u!R~&E&}u&E~&}u@FF]MEU ~&}tW~W~&E%&E& Eu1F~&}&EF>N&E&UFV6~&u&uv&u&u&u#&u!VFFV>N&E&U~u ~&E~1&EFF ~&EFF]MEU~&}t ~W]MEU~&}%t!PW~W~&uv ]MEU~W&=]8]MEU~>N&;U u(&;Eu">NW&=]Du@~ &E &U ~W&=]<u@~ &E &U ]MEU~ &u~ &uFVF Ft~&EC& EEt~&}CW&=] ]MEU~ 1&E &E ]MEU~&}%t(W&=]<tj~W&=]Dj~W&=]P ~W]MEU~&}%t jW&=]P ~W]MEU~ W~W&=]MEU]MEU1tF‰]MEUP~W&=]]MEU1]MEU u@FF]MEUt6]MEU~t<>tF.t1F6661FF]MEU]MU~0)]U~0H]Uv~ ‹N9sNO] U~0v~ ]U~N0)ˉv~ 󤪓] Uv~ ¬00]Uv v ORPvvF V ]U~F51)ˉىv t"D?aex ]h =<K=V>r)T<=> )3^I5ZfnD?&J]%\ \$e'BW- -(D+LU_@>@>O>l>=|tw!= |nhuo n#m:qDrhumqpqrpp^pcu u!^t] % 9 L X b z      b!j! ""k#o)#qT#s#y#y#x#x#x#x#z#z)${,${$)$*$|$%% %%1%l?%qI%ro%%%9%v%%%v%%%1%%|%|1&&& '$'e'w'''(((0(S((((&(((' ))#)*)'8)K)[c)|)))&)))&*3*:*'Z*d**++++++X,,/-[-|-(--&-'.. ?.[. |...T0`0 000 EU>G r 6GG1PGRG1TGVG1XGZG1\G^G1`GbG1dGfG1hGjG1lGnG1pGrG1tGvG1xGzG]MEU>GtxG zGtPxG]MEU`FƆ~Wv v W~tFWh~Wv v W~tFWh~Wv v W~tFvvPWhWWWW~Wv v W~tF&~Wv v jWRP~tFF]MEUF>Gt>Gt*GWvv tGWG1GhGWGj>G sp6GpWPGRG6GWTGVG6GWXGZG6GW\G^G6GW`GbG6GWdGfG6GWhGjG6GWlGnG>Gu6GWpGrG1pGrG6GWtGvG6GWxGzGPhGآG>GtdG|G\G t>|G sG>Gu1FGFG>Gu~ t6PGآ~G~GGFF]M EUvv F PFPFPFGF]M EU1P~W1]MEUӎÌv0ۍ}WW}Wj uF}WFF]M\GWhGWGWpWW"WmHWhWGWpWW,WmIWh>GtPGWW,WmIWu(mHWtGWW"W1PGRG1TGVG1XGZG1\G^G1`GbG1dGfG1hGjG1lGnG1pGrG1tGvG1xGzGG>Gu>G rG~GGG1GGG;`$f}}(}@/O1l~}}g_ k_!k92N2c2x22222222($hfhd'2?DW\%i3iLQw t ;Du|1ߎL|t &4 uӉTJ)׋wD|EUv zPvv ~Pv]MEUvzPv~P]MEUv tSvPÎ1&?u)&;Ou&>[.u &G&WvzPPv~PZ]MUWv&4&t&t&t&t5VvV_]АEUVWV&W1P@Pvvv F PRRS& y߃   XZ_^]M АEUVWvP>v&}Wv>vWvv v vv>v&]_^]M EU n ptjjhPFVl~&W~Wjrt~&E&U ~&E ‰FV~&F1ҋȋڸ+~&Enp~&E&UFVnpF~uFlvvnpFVnF6pF~&E&UnpFV~&E&UvFV]MEUFFvFnp~&E&UvFVnp]MEU1u1P~W~1&E1&E1&EF V&E&U&E& EtW&}W ~1&E&E~1&E &E 1&E&EW~&E&U&EWF‰]M EU~W]MEU~W&=]$PW~W~&E& Et W&}W~&u&u1P~W1]MEU~6Eȋ~&E1;u;tFF]MEUX~~FjWt~W&=] uF~t4~&u t$~&u~WjQ~&u~W~u@FF]MEU~&}uv v~WuFF]MEU FFPW~WFVF FtvvUFF~uF Fu~uPW~W tFF]MEU1FF]M EUjj~W]MEUjj~W]MEUjj~W]MEU~ t~&E F &EF ~&"E&E]MEU~&E"F :F u@FF]MEUF F tn~&E & E u!F V &E &U F V ~ &E&U@~&} &E&U~ &E&UF V ~&} &E&UF V ~&E &U ]MEU~&E & E u&E &U FVFVFV~&E&U;Vu;Ft(~&E&U;V u;F t~&E&UFV~&E&U;V uk;F uf~&E&U;Vu;Fu~1&E &E B~&E&U~&;U u&;E uFV&E &U ~&}&E&U~&E&U]MEU~&} t-~F&}WWF$P^ _u;~u;Fu1lj‰]MEU~&} t6~F&};~u;Ft&u&uWF$P^ _݋F$P^ ]MEUFF]MEUVF~ W^S&$]M EUj~WtQ~ &E& EuD~&u~ &uF~t(vhjjj%0 tF~ &E1&E~ &}t&}`s|FvFVF Fu-~t'F~&;EtvFvFVˋF Fu ~‰FVvv~ W&EPj~ W~W&=] ~&u~ &uPFVF Ft$~ &}svvW&EPj6~ &}s~W~ W&EPj~ W~W&=]]MEU~ &}tw&uFVF Ftvv~ W&EPjB~ &ujF~s~W~ WFPj~ W~W&=]~ W~W&=] ]MEU~&uj% u~ W~W&=]H~ W~W&=] ]MEU~&uj% u~ W~W&=]H~ W~W&=] ]MEU~ &~&;Eu 1FF.~&E& Et&E&UFV~ &5FVF Fu~ W~W&=] vv~ W&EPj]MEU~ W~W&=] ]MEU~&E& EtU~ &}u!~&u&u~ W&EPj)~&u&u~ W~&ujPj]MEU~&}t ~W]MEU~&}tmPW~Wj~Wt?~&}W&=]0 t,~&}W&=]0ǎ&uh!~&ujj ~&u]MEUډFVFV]MEU]MEU~Wu ~&E j~W&=]D]MEUj~Wt!~6u6u6u ~W&=]@~6E]MEU~&E& Et &E&UFVPW~W]MEUF6~W&=],RP~W u#~W~W&=]4~W؈FF]MEU~&}t &uv ]MEU~&}t~W&=]<tFF]MEUPW~W аu@FF]MEU~W]MEU~>N&;U u&;Eu>NW&=]DF~W&=]N&;U u&;Eu ~&u~ W~W&=] ]MEU~&u~ W~W&=] ~1&E]MEU~ W~W&=] ~ &}t1j~Wt~W>NWjj>NW]MEU~>N&;U u!&;Eu>NW&=]D~ &E &U ~W&=]<~ &E &U ]MEU~>N&;U u&;Eu ~W~ W~W&=]]MEU1FFFV]MEU1uvv1P~W~~Fvv ~&&U~&E7&U9F Fu~&E&EN~W&=]0 t0jj~W~&E7&U9~&E&E~&E&E~1&E&E &E 1&E&E1&E1&E&E1&E~1&E;&E=1&E?F‰]MEU~&u&u~&E;& E=tP&};W&=]~1&E;&E=1P~W1]MEU~ 1&E1&E&E jjh~ &E jjh~ &E&E1&E&E~W&=],~ &E&U&&E&U]MEU~&E5FF]MEU~&u9&u7&u~ &u&u&u&u~ &E &U ]MEU&~&}tW~&E& Eu1F~&}&EFj~Wt~W&=]u ~£vxjWuf~~،F&u &u~W&=],RP~&u&5&u&u&u &u&u&uv&u6&u&u~&E~W&=],F܉V~&E&UFVF&E)F&E+F&E-F&E/F&E!&U#FV&}W&=]0FVF Ft~&uh j~W~&Ev~&u5~&E~&}u&EG~&u u7~&uW~&uj&u&u~&E7&U9W&=]8~&}u@FF]MEU~&}?t)&u? t~&u u ~&u?]MEUF~t~&uv t F~&E?]MEU ~&u t~&u t~&u~WF+F~&E-F+F&E/&E& Ete&}W&=]0FVF Ft#j~Wt~&u~W(~&E!&U#%@ t&}&u~WF~&E)F&E+]MEU~ W~Wj~Wt ~ &}t ~W ~W]MEU~ W~W&=]MEU~Wj~Wt ~&u~&E;& E=t &};W&=]~W]MEU~W&=]8~ W~W&=] ]MEU~&uj% u~ W~W&=]H9~&E;& E=t~ &u&u~&};W&=] ~ W~W&=] ]MEU~&uj% u~ W~W&=]H9~&E;& E=t~ &u&u~&};W&=]~ W~W&=] ]MEU ~&u~W~&E;& E=tvލ~W~&};W&=]vލ~W~W&=]L~&E;& E=t &};W&=]~&u~W]MEU~&E;& E=t~ &}t~&};W&=] ~ &}u(~&u~WF+F~&E/F+F&E-~ W~W&=] ]MEU~W~ W~W&=] ]MEU~&E;& E=t\&};&}"tQ~&u~Wjjjj t~W~W~&};W&=]$~u~ W~W&=] ]MEUj~Wt'~ &E= u ~W= u ~W~ W~W&=] ]MEU1u1P~WF V~&E&U£NP1&E 1&E1&E&E 1&E&EPW6rt>u ~W&=]~&}uW&=]F‰]M EU6t6r1P~W1]MEUFF]MEU]MEU~W&=]~&u &uW&=]4~&E&U &E& E t6&}W ~&E]MEU~&}u W&=] ~&uW&=]@]MEUF V ~&E&U]MEUF~Wjjjj t6~uF(~W~W&=]$u~W~W~W&=] u~tF~&E]MEU~ W~W&=](u,~ W~W&=]0u~ W~W&=],uFF]MEUF~&E& Et)&}&}t~&}&u~ W؈FF]MEU~&} t&}&u~&u ~ W uFF]MEU~&}W&=]0FVF Ft~&u~ W uFF]MEU1FFF F tct"j~W&=]@P~ W&=]8~ &}t"~ &u~W&=]@P~ W&=] F V FVFV]MEU1FFF F tRv v ~W&=]< t=~ W&=] u"~ &u~W&=]@P~ W&=] F V FVFV]MEUFv v ~W&=]< t8~ W&=]LF~}v~W&=]@FFP~ W&=]F]MEU ~WW~ Wj~WWjf=uF ]MEU~&}W&=] oo z  .   [ B h     4 {  2         Q o_ 5   .1;i9* -$8I&)APkSk,bi'9zg%o[[/k{0 BW(#3V}'(. kmqr5Fi&{34#*'mDqNrdp ZI,KEU tM6>3P6 t 3ҨuBuB&$]M˸L!Y[33ۣ t t&>tF t6 29MAAF83P(SPPPL! t3PS30:rK uPortions Copyright (c) 1983,92 BorlandEUF]MrEUFN^ ]MrEUP&& ;u]MEU3PP u&;s&& ;u]M tP8M;rHsE>t 8M  ;wH Cs&8M!s t68M=8Mwr36 3RP=rP$Zs& ;ur EÌP r13TP3 3 - Pه 3XXû&r#&W+r&t & &U& &) teg$Ë&>TPuSuN&4 t;wt<&7&G&& ; tC&ߋ&w&;7u&&&D&GÌ;tS tPP3& ;t& ;u& 3˃>uˡ6D&;U|&;r&;U|&;Ew˸r+s6; r 6;s6˸nv r^ t F &1ˋEUVW_^]Mr tFV‹֋]M$~ t^&1ˌEU]Mr 3FFˋ]MU~^& v &] Mu˸3ҋ66w3׫3Et3WWO u :v t26 6G&E6G&E 6G&E3&E&E EU~&E=t=t =tf$RW(Z3&U&E&E Tt&E׋]MEU~&}t&}tgPX t  &E׋]MWW& t_Ë6&U &M&?!r&E 3&E&E 6&U 3&M&@!r+te6&U 3&M&@!r36&v>!r33ҋ66w3׫3WWO u :v t2'=3<U~&}t&}tf4PRWLZX&}0tU03!s&E&F&E]68u3&@!s6u&v >!s&E&}tgô?d@eU~ uRV&M&!Zr;t£]?d@eU~u?F tQ&eV &!Yr3&u~ t&;F t~ t3&]U~ Ju!F&eȋF&eʋ&B!s]EUN5~6~GWP~]M36 t< vNެ< wN+tË܌6w 66O >&rffffffˋPR؋ZXˀ>&r'fffft^fffffU3 yE؃ t>y EEكt3U3ۋʋ3@+sHMu]]ʋ3sكEMu؃]ˀ>&rfff˃tˀ>&rfff˃t܌66w2܌6w 66O:v2 ܌6 6w26O +r@6O }3;v3܌66w& 2&s&GUv t,2~& 2+rAGuNjًItˋv F3H+F]܌6w6&%G:v t2u:Ď66G܌6 6w6GU~}FW~ WPFHP~WW~ WvP~ Wvx] U~~\~~V~O~~FW~ WPFHPXW~ WFFPP>{~ WP ]63ɉ =}t }t<}0t U0!rZ33ہ}t/D!€ȋu}u+33E׉EUM]EE333ɋB!-s33ҋʋЋB!?!s33;t tC+йB!3ɋ@!Á t{ tx:vއ*<)sgUP䀋3X΀rĊߊ2 t ux7׋]s t r Ëދu+׋]s t xu t tU3ׁȁR u t u& u"އڋ؃ʋ|WVQUSP3ɊFfًFfًFfًFf FfFfFf FfFf ׃ Y] xI遀sA@uA23؋ tU3ׁ*R;u;u:r*rs*x Ru@±[ZY]ӃxIgR3ZyRZƀtt:u t ;u;u:Ë t5 y؃ظ u Ӱ u xy xÓ*r[ހ΀ sRr 3Ҁr Ċ2 t u t r t y؃2Êtr;r5ˋȋr) t*r-˵cr ˵[r˸82,WVQY^_WVQY^_WVQLY^_WVQEY^_JNRVnrvz  klLPdwx|&*.26:>BFJRVZk^b4f(*{$EEE(*{$EEE(*{$EEE(*{$EEE(*{$EEE(*{$EEE(*{$EEE(*{$EEE( ~ֵֵֵֵֵֵֵֵֵEEEEEEEEEEEEEEEֵֵ(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐ְְ֐֐֐֐א֐֐֐֐ְְאאאאאאאאאְְאאאאאאאאאְאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאҰאאאאאאאאאҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐֐֐֐֐ҰҰ֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐ְְ֐֐֐א֐֐֐ְְ֐֐֐֐א֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐א֐֐֐ְְ֐֐֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְאאאאאאאְְאאאאאאאאְאאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאאאҰאאאאאאאאҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְҰ֐֐֐א֐֐֐֐Ұְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְאאאאאאאאְְאאאאאאאאְאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאҰאאאאאאאאҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐֐֐ҰҰ֐֐֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐א֐֐֐֐ְְ֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐ְҰ֐֐֐א֐֐֐֐Ұְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְאאאאאאאאְְאאאאאאאאְאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאҰאאאאאאאאҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵(D=4(D=4(D=4(D=4(D=4(D=4(D=4(D=4(D=4((صصصصصصصصصصصصصصصֵֵֵֵֵֵֵֵֵՎ֎صصصֵصصصصصصصصصصصصӎصصص֎ӎֵӵԎӎӵԎ֎ԎӵԎӵ֎ԎԎԎҎ׵׵صصصصصصصصصصֵֵֵֵֵֵֵֵֵصصصصصصصصصֵֵֵֵֵֵֵֵֵՎ֎صصصֵصصصصصصصصصصصصӎصصص֎ӎֵӵԎӎӵԎ֎ԎӵԎӵ֎ԎԎԎҎ׵׵صصصصصصصصصصֵֵֵֵֵֵֵֵֵ(h(h,ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صֵص׵ص׵صֵصֵصֵص׵ص׵صֵص׵ص׵ص׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵յص׵ص׵յ׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صԵ׵ص׵ص׵صԵ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵ص׵صصص׵ص׵صصص׵ص׵صصص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵ص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵صյص׵ص׵յص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵ص׵صصص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵׵׵׵( 0        (~ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵׵׵׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ӵ׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ҵص׵ص׵ҵص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵صֵ׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صյ׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صյص׵׵ص׵ص׵صյص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յ׵ص׵ص׵ص׵ص׵յص׵ص׵ص׵ص׵յص׵׵ص׵ص׵յص׵׵ص׵ص׵յص׵׵ص׵ص׵ص׵صص׵ص׵ص׵صصص׵ص׵ص׵صصص׵ص׵ص׵صصص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ֵص׵׵ص׵صֵص׵׵ص׵صֵص׵׵ص׵صֵص׵׵ص׵صֵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵص׵ص׵ص׵صֵӵصص׵ص׵ص׵ӵص׵صص׵ص׵ӵص׵ص׵ص׵ӵص׵׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵صص׵ص׵ӵصص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵׵صص׵ص׵ص׵׵صص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵صص׵صص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵׵ص׵صصص׵׵ص׵صص׵׵ص׵صصص׵ص׵ص׵صصص׵ص׵ص׵صصص׵ص׵ص׵صصص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵׵׵ص׵׵׵׵ص׵׵׵׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵صص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵ص׵ص׵׵ص׵ص׵׵صص׵ص׵׵صص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵صص׵ص׵ص׵׵صص׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵صյ׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵(~׵׵׵׵Վ׵֎׵׵Վ׵֎׵׵Վ׵ص׵ص׵ص׵ص׵֎׵ص׵ص׵׵ص׵صՎ׵ص׵ص׵ص֎׵׵ص׵׵صҵՎصҵصص֎׵͵׵ص׵صՎص׵صص׵صص׵صص׵صՎص׵صص׵صص׵׵ص׵׵ص׵ص׵ص׵صص]]]׵]]]aaaaaaaaaaaaa׵]]]׵aaaaaaaaaaa]]]aaaaaaaaaaa]]aaaaaaaaa]]aaaaaaaaa]]]aaaaaaa׵aaaaaaa׵ֵaaaaaص׵׵aaaaaص׵׵aaaص׵aaaص׵aص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵׵kkEkkkE׵]BB]===B<]====B<ص׵]BB]ص׵===B<]====B<ص׵]BB]ص׵===B<֎]====B<ص׵]BB]ص׵===B<]====B<ص׵]֎BB]ص׵===B<]====B<ص׵]BB]]]]===B<֎aaaaaaaaaaaaa]====B<]]]ص׵]aaaaaaaaaaaBB]]]]ص׵===B<aaaaaaaaaaaaaaaaaaaaaaaa]====B<]]]ص׵]aaaaaaaaaaa֎aaaaaaaaaBB]]]ص<aaaaaaaaaaaaaaaaaaaa]<]]aaaaaaaaaaaaaaaa]]]صkkEaaaaaaaaa֎aaaaaaakkkEaaaaaaaaaaaaص׵aaaaaaaaaaaaص׵aaaaa֎aaaص׵aaaaaaaaص׵aaaֵaص׵kkEaaa׵֎kkkEص׵a׵ص׵ص׵]BB]ص׵ص׵===B<֎]====B<׵]BB]׵===B<]====B<]BB]===B<յ]====B<]صBB]===B<ص]====B<]BB]===B<]====B<ص׵ص׵]BB]ص׵===B<]====B<ص׵]BB]ص׵===B<]====B<ص׵]BB]ص׵<<<صصkkEkkkE׵׵ص׵ص׵ص׵kkEkkkEص׵ص׵]BB]ص׵===B<]====B<ص׵]BB]ص׵===B<]====B<ص׵]BB]]]]׵===B<]====B<]]]ص׵]BB]ֵ]]]ص׵===B<]====B<ֵ]]]ص׵]BB]ֵ]]ص׵===B<]====B<ֵ]]ص׵]+ CƲnjwsgmbjA.`uć;0Qaf|ht}[Y~Т_OhqdbtvdiN:_tZ<0EyĬ`XXZ_hvʭfI>H]jrjZG:DcmYNJK[yqULYjrzıyiVOTc}k]ZX\jzR=BZqw]E=DZx`WPIJXqhL9>Zr_KBH^{}bUQT_q½jOCK_sqdSEFXvjSIOZfqpWFHXhz~pUDCRw~_NPXcvp^VYepyö~i^YWT_zvbOCKhxN6=]~}^TYYYexñiYUX\gq}qR46\}cSOPZqlTLWkvyxojXKUhyhQKPZvy[LQ_oo_VXdnywg]ZTXv{cTPTgo\OKWqrcZVYg{yg\VVd{odRDPk{eWNQbuo\VW_rxoeQHZwo]VW\frwaVWbnyxi[RYmtg]Y[dwweXZfpwui^V[jve[Y^izr\QWh{raXW`pxpmhb^fqVZtl[\oxkdkpZn]\sjUklihdw|zzs{cwpplgu~xU[s{w{|uYPb{{nr}kSUvzZObz~z|^Sdv~quxaX]onY_nxrj|}lWWwxmpxvjgvtZUk~~vkOPpwqxwjhu}g\dxx{wmfdky}xq^[n|kdoyz}oemy|z{}utwwskq|pjhn}}f_eswnqvtqsyrqvsptsuxlberrifir}tkku{{tolpu{vifmw}uplltzz~tfcfxwkkmrymjsx|{tqrwupvulliqtidi{qkry{ywxuow~tqurbf{tc`rrmowzvwsrwxspq{ylip{khsy{~sqvwrv~uw~zoku}~nllp~gfou~|vvyvry}{y||tjkz}pmlq}rppov}}zzurtuvzpkovvtnnyyvqnu|ytttw~ztrs~ylly}{sqvzwv{xwqn{~rkn|oiq{~upw||zy{wu|xty|rmt~~uqt{|xxy{}|||yxwy{y|woqu}{usswwrsy~}}~xux}|vv}zy|{qpyufhyvlkvpkrtvsw~}yqvx|ylis|sjpzvnu}wyy~yb_p~olim~ojlv~xops{wyvv|}{wtz}zuhhruimy~ww}~yx{}yzyxwy|wprw|ztprxvomr{|wros{zolpx}}uppsy{y{yrrxyvuv{}||vruz|xnks~usw}wmr~tu|oo{}~~~ngq~t~rfl~qknx~x}qgnwuz{uwwuvutyxyhaatzkaYaxfUbzwokqxrn{{icjsuu}|vgbj|ub]iw~~vniowy{zxxtomtvkciw~kahs}{{~|wqil|{truvx|}ibi{xqqont~zuxyrmr}zqc`vmefmzxrsx}zru|xo`^p}sjflytiju{~yrusnlq|zvrmnuz}rmlpz{rqtrov}wwslnx~sjjqzxpppot||y{wnkq}xlkpxwkks{}|tssttw}}ngmy{oiou~|ojpwy{~{wxz{vnsux~xuzv}}uw|ygkvprv|pdesznl{ux~~yu{zw|uruuuxyuqt{{zxoos|plw}w{xols~}}yuqot}x||lisulpoiux`[t{|x{vpslqsmiupfvwlu{|wr~zwt{~{vi_mpqrc`m||{mfryip~jo|svoynhl{to|~fanw}{qsy}zsqyvmruwtmrl_^[edRP]seafw~vym__nuvumnty|uozvebktxd_fot|zq\R\~zi^forym_hvztnwzjjuzngusmg^d{|p`ar~roljq|pikkmoy~zm`bs}u|wnjrr^bxyu}}tlijs~yvk]eyqgabuvc_crrwkgz|sjap{xncekzyoSLguhb^k~tllpxvjs|xta`er|ocht|vq]Yq}sx{swyjpvxs]b{va^n}v~deqx{{{tv}wmjm|qdgns~uidiqunlknxwken}}yqnwvp~{x{|slwsdkx|tir{z|z}xswxxzsswxvyzx|ujm|okr}kdjv|{vulot{w{xgf}ws|_gpkv{vy|xlt~r{jcsxxsquv{~utuv~ryrvxvvt~zupqw|kizzzxx~xw{vvx{}|}rv}wvwzz}zz~xww}~snrzxywy~xmr~z{~~~{vv~{vy|tt}~|xz~}~~}}~~~}}}}~~~}~~~~~~~~~~~~}~}}~~~~~~~~~~~~~~~~~~~~~sRIFFWAVEfmt VVdata~~~~~~~}{z|}zy~~}vw}zde|gzfeq~|~km~~mNF_U ډH9Oܴ|: _/٢l3#5ki5.l?te8k=rYA?q1m dnA[u@jPhkxa06KXpX2(7?OH8<:H4:hTD:TTABTNarvPAexpnZ^rxqZcuyȿƱmlclUbpeRF=JQWZ1(?/(1DV_j{{~οo\MIS_bYQPX[P:)&-31/6J^f`VQYeqx{vjghig`bn{zjSEHQQNRc|~|ȻvfWJB>=BKU\XL>:93($CHJHB;60)$'4FXgużvcTJDACFLPQOJA6/-,.28CR^fmrvy|ļzmbYQMOVajid^XTROKNWet|m^QF<747@CCA@BDC?=BLV_kz¶}oe\NA=>CFFEEC?===;:=DQ^diow~wj]VX[]\]_`^ZYY[]bhoxztohZMDCEEC?ADGFC@?BEGLR\ixpe_WNGDDFEDCBBA>;78?KV\^cmx|}~vla]^a`_^bdda[WUX_hqw~~|zvnbUJDBB@AEJMIECDCCEIR]ju»{naSIEGKJGEEEFC>98:>FOXaisz{xwwf^^bc_]bjpmd\XXWX^fstcSLJG>45@OWSKHIJGBBIXftķvjZH>>GOOJEGKIB:68>EKS]jv{|{z~p`[\ababgorlaYZ^aabiw~}zn^SMJF@<>GOQNJKMOMJJS`pz}qdVJDEJLKGEHLJC;8LVXQG<9>J`vujcgwɿƻ~|}pYJHNVbs}xgP>438CTdmpi^VTYey´sYJHPYcii^M;22339@DFFEA?=BRjwnlt{xzwg[WW[cmvujZK?:>HWbjli_VQS^qĹv`VU]beeaYOD<8>HUbksvtrwʿwtyp_OA;=CJNPKC==DQ^jprssspr{wgXQT[cmqnbVKD@AHU`efb``begm{k\UY`gjfZMEDFKOV_immlq~¾{tv|nb\VMEBFLMKECEKR]hqtrrqlhowj[RRZdknjc]WPHBBLYdgdaaeknt{zk^Z[\]\[XUUUUUW[bggejz¸{|vh]\__YRLJIFBADMZgorroomkhm|{xjZPR[gmnjcZSPPPORW^`\Y]fpsuzľxngfikg\PHHLU^cfffec`bqzhXPRWZ]]^WK=58CTdu}zslhgiq}w{raWW]dkomcXPPSUX^aa\UQU`ku}vnlmkc[TOLLQ[ekkgc_^_i{wk_VVZ_ab_WNE>CQcsvjXNP[jx}qkgefl{{aJ;:BJNOT_ikhddn|{}vpwxonolaTHBENYbikfaZVXZ`mwqs{xeTD96=N`msk^SQ[ix{slghnzjTFAAEHKNV_degiozxw}{y}yvslbTH@ALYempnhaZVU[h{~utxkUD;;BO\glje_\_ftyojkqyueUIC@CHPTY]`fmvz{xn]OGCGNW`hpttk`XWam|~t^LAAGPX]`beimoruzx{wttzztkbZVSMGBBITZ^bkv}nZKDGNW^adhnqnidciq{|{naVPOOSWYZ]aejry}~~~{xy|pbXTWYUOJGHMSYbmy|~tcQEAGRakprplhffinw}xwz}tbRJLS]fhd\X^gpv{{y}}qf`ZUOIGHNUVSQYj|zn`WTSPQV`kswxvpgbgt~xx|~yuyo`SLMT^ccbelrrnmt}z~wqmje\QFACJRSQS_p~|zmaZVROOValtz~~yrjgmvvoov~{}ygXOQW\\\ajv~}umoz|~y{~voklkcVIDFLQPMQ]o{|}wof^WSRU_jtyz}~yrnrz|xz}~|wrqv|{xzqcYVZ^abbdkrwwx|}}|yxojfb]VQOPSSPLLUetvqv}{rke]SMQ_nyzyz{zwtuy~~ytqqsw}}unoxwojgd```ababhqw~xuy}wxzpf]URV\`_ZQICEObvwkhp}wme_ZWV_m{~yplr|ztpmlptz~~ytrs~uljlnlhfdb^Z]ixxrt}wj\QPSZ`a^WQLIKVj~~tmmt|{rjea\Z_jzxoow~yqhegp{ytpor{}soqqlebdfecagr{sqtwog^XUY`db[SNNPRYgx{otwru{{unmwqdVQ[pn]_uunoyyk`evxmjnrz~vqszzk]X\`cgoz|yttwjghcTDDVjm`NIPUYar{r|wuorr]TW_cekv|plld[[et|zrlmqu~z|}h^_a^VWgy~~}z|x{tndUJFKTXVQMMQZfs}}}ump~}{~yh^]`a_bkxzsh[ST\ciosspnu}{|~~zodZSSVany}|~z}oZIABFNV[[WPNVguujimwyx}|rifffefipvy~mZRTY\_hrwusv~{ysaUPQV_n|qZIEGIJQ[``]]ckosytnmntzvwxyzxtmghlqusqryscVRTZdmuyzy{}}th^XUW_n|vfWJDELT\_a_`dkqru{xqou}xtstvxwtojjnsuuuy{pbYW\envy{z|~||tlgc`_ak{~wm_OHJRZ_a``_agmrv~zwwzyqosy|yusrpnptx{}~}}~yod^^cluyyxy{||~|||}~znd^[^ix|yzvgXKJQ\ab`_`bdegmxyoov~xqpv|zrmlosw}~vtw~yi[SVeu~xwy{{|wuy~}sdXV^l|~yvzxdQGJUbgc_`fhhhjpx{mgn{yqqu{zrjjov|~upou|p]QTbqzzxy||zrnu}{jXRZj|{z|}~}kXJKU`ecaagjkijpzwnpz~yuvz~}wnjkqzzqos{tdYYcouuuv{~soqy~zsh`cjsy{|~~~~~|ocYUWY\^^begikox~{{~}||}|}|wojkr~}uqqx|rkiklkjlqux{}tpqv}~tnlnqrqqrtwy{}{~xnfdcb]YY[]^bipux|z{}zyxz{{}{umjoyzxtvyuomprqpoqqmlp}|wtuzysqsvvrpruurpsx}z{oiillga]\[XX]it{{{}wopw~wrlimy}}|yusv}vqrsrnlptspnpw|ytrwvnotwyxuspoopry|y}vmijlha^^\ZX[co||{{{xxyyyww{xrnklr~~xqms~utuwytmgeiotv|{oimywttwxtokloqsuw}~~|uvzqnnmh_VQV^cdfkx|xw{}topuz|~zsppqqxynjmv}wstusmgehovwy|or|~zqfchrzkcaa`bekusnnpt}siksurs{s]G;?NX_eniUSa{phkwrbWPS^n|fUMLUiyeTNUbsr`M?Opx`[RJM]vpbUKJQi}iZWPS^r~j`UIPiwsh^RN[n}uihUPccrweYRNVksm^ONZlyl^UX[ft~i_UIJgxöle]KI_svmhWJ[kvzl\NRdp~znWRZ]kpdWMUhvvncPP_l~}uk]UV_tscYPSezvl_QV^m}qd\]`dvpcYPSgwob[TResic[PVln^[ZZ\wmaaUP_zwgY^\[iti_UQ[o~{gUSXXlo^WQIYpxkaYQYezpg`PL`p}wodYUP]ti`YOJXv{gf[KM^ozmcTLS\s{lc\OUamxm`^d_[kse_\PVo~wgWHHSlzogb^XZhv}m]TNJYu}ha\LLVmvdMHBJc}{jSCH^}ziSFCDRq¼n`SFBIc~|fWJBKVrwgVJKMZv~m^RGGVi~whZO@EZxŵp^RIELiõ{hWIFHYszbPFCI^z¹pbI=ANdþ}kYKBEUnĿ{gTLCGWr¼ydWMDJ\vybWHEL^|{gXQGCXtż}hXLIERlkWMEAMhŽt\J@@PjĸlWJDELazreRIFK\o}m_TNOTcvzqbVRSXgz}rb[VOVesqd\TQS`rsfYQNP_o~vi[SMGXkx}lXPKHRgzp`TIFN_nvbVKEHTgx|l^NEBI_pubSIBDUg}}k]RHBI]mzgVNHHRapxgXNFCPeuwbRFABRfxúmYKE>BUkĺygVG?BQ`qk[ODBHR`vugQ@>DO`sp^I9=CM[v~jXK?=FObvq[I:9DQbwjWG;;IYj{hVGAMTdyyi]PKEH[mqaODHS`m~}hXLDHN\oqaQF?EXkxwfWKEITcu}n^VMHP_tzk]TQOVit|ufXPKMYpymbVTQTcu|q^PJO[euxfYTMNXfvuk_VMLZevumaVONWgv}phbZNLTh|xodYOMNYirg\TOMTev|teYTQR\gzzl`ZW[Z[m{xpd^YY[co|nd`]UU]hoe[TQQ[kzqaTONQYjvj]QQPParwj[SNR[ctp^VRUSTn}yp`QRUT_txk\SNQY_tqaUNQSYrwlWMLNWdz|kZMIMU^x}hWGCJWdvfUKFNW_r}hTGEJR_um\KAFKXkq_O@>HXl½q]MCEIQiül[NIJK\w~k\NGLU^wscVOLR_n~m\ONP[m~vgXWWVd{tha_`biytidcfmt}ykdfjjs{kd^bhq~zj_^`dn~{og\\dkutf^_adp{ne]Z_jqvg]RT^fvwgZONTavzfWONR^qkYQOU]nzk[SR[fuviYSV[hysdYUW`n{}qe[SXbl{{mcWW]ivvlb^]eu~{phd[_kw|m`Z`ag|vf\XY`k}rb[YZ`p~k^\[_et}i\[a_f{{mc^^_ft|odbabizwkc`gjsrgelklz|pfafjr~zog]^hmzuia_beo|rcZX^jxvg^^_ar{h[XX_hzw`YSUYetr_QNU^k{}oaWSZapucXUYapl[RPXbuxfYNN\fsyjXMQ]ertaZY[dr}qbYZbnytg_ZUassd][Y^m|zjaZ\\hz~odb_clzzkb`aerse][_gv~~pdXSYblz{gWRPS^sn]URT_m|sg[VT^px|n^VY_j{{l`]Zaku|oi_V\gryyle]W`gq}zpg\Zcisywhgbcfo|~rljeejr|}uieeeioythc`^cittkcWW[brwi^XVV_jznaZTUZdtwg]TQ[_g|rf]YYV\m{tf\URU^kxxh\STX[gu{la_UTY`mncZTPU_l{qg[TPQ[kx}qe^X[_eo{|wrji`_gioypc[TW\fuym^KFPTZrugWGGKM\zuk`TFGR^pwiWHGKS]kn_PD?BUds¸zcRGB>K]jueOFCDScrxdTIFLP]n{|lZIGEHVfx}jXNC>GQbut`MB>BO^nz|cTKF>DT\ptbPB8?GTkzhWH=@DM[oziYG=AJ\wxkZGBVevkUGCCJT`qzgUMHCDR`npYLG?DSbr|laMBBGR^v}o]M@GRUbpi[NIHGPZmzm_SD=EReumYI@GPT_n{hZPIKIRcq~q]JCAHS_r|kUEHFIP_tveXNCDFOdxwgXD:AMVgwr`QC=BOVf|s\NC?FOYi~~hWKCBCP_nudSFCBFWgz~o_LADRbuwaODABIVex}l\PCBDL_o|jWDDEEParvkYLGEGPfvylZJFHMWgrxmbWQKMR^m|xk_RJHP\bqufXJDJOVfx|j[NDBLR\m~tbTJEFHUfszoaOLJHRao{yoaYVOPRYjxwo_SMKSZer~|mZOGGMO\kzxgYHDJGLZj~sgZMDDEN]pugZQHDIRao}}n`XLGLT_hureZNNRPT_m{wmdXQQNR[o~}tmcYUU_ckw}vncac_acemz}qicYVZ`hr|tiaXSW_diq|ofb\XYbfnz~tmh^[__ghq~rj_\XOXdlu~p`VSSV\kv~rj]YY[_biv}wld_YV\ckssdYURVU\gqsg_VNKPVdr{pd\QKPYfqxzmcUSTVZbjwvg_WMPNQ\h}|pc[SJFLYhx}o\SJNU[fmwsi]WXXSWcmx~sh\RNMMTevwm^RJGIQ^l~|mcWNKLT]iwzohZROOXeqw}wd\STSUX`my~qbWJBGMWjv{hXKABLT\gsnZQMLLQV\i|}n^\WLDGWaqtfUFDGNZeqzlWHBHIJT[nug\TLC=H[mjQD=>J_jlvjWMIGMPQ[rre[QKGFIViwhULB;ETdoylUGEGJO\^loeZTRFFP[p|qaPHEIQYdqqdXTRONQ[oyndZSMFM[hx~sbSNLNYdnr}{eWTTTUZajz|mb^[RJQ\cv~rcYMDL[bpyqYQKIPU^frncWTQLHR`nwlaUOFGR^qvaPMKJYghp~w`QVVSQT\iti_VLER_l|{l^QPST^co}q_QPPRZbmyrfXRSSUWdtvnbWSRHMbn{~veRLFHS^mxxhVOQUXS\istmk_WPGERn|tcKHKSX`ip}ldXMRQNTbrwpbVUVNOVgw}{oeUJFIYhsztfVMTTSW]n~}od]RLMS\ly|saVSRSY`jtxoaVPRXYgv~wh\USVT]em}~ujZUQMWbmxrcYTVZ]dpszjb][WVV]gz~tl`TNTakozp^WSTXbdgqyjeb[[[Z`nysi`UUW\bfp~ski^XTWZ`q|qf^TOU^dlx}nb]WYYW^en~qjcYXSOXgtvpgWOPU]_jy{sd\VPSXU]jvzl]XQQROY`rrg^UPILRWdx~pcXQIHJV_j{zm]SJIHNU\m{wh\PGFIPZ_k|vhZOKGFMT`o}wk_SMKLM[is{}pdZQOS[^clxtjbZY][_fjt}|qke`bc`afhwxupifcdfjsw{~tjiefhgkou|z}qnfcghikruuvpkhgdiijprz|rohjdachnsvxrjhdcbflpv}{rmjffinntwz{rqrqnmoorsv~|usnilqooqqv}zwqkhdbchqt|{uqia[WX^itu~vna^XPU\cns{~pja]]UZY[fpstjcb^]Z`feq|ynke`a^\`bejt|toib``_[Z[_l}|vrmga]WXY_fp|yqieaaZVZ\dnxxspihc^ZW\jnt~upmlde`YY_ir|xvuj\RUVWajs{}ukh^UVU_cow}zskc^XWZaiiv~{tnga^\]aegmx~ytihaT\badnv{zwmg^UX]biq{{}xh^XU\_intvw}~sj^[^\dmnoluzqki``hb\acivwmjaX[]SYdes|weg`SUVRU]co}te^YPLSQXbkt|xpe`_Z\^]]dntwjdd`][]YYbky{wpfb``ZUTZenzyvplaZQJPT`ou|wfZXOIKO`ho{|~{paWEHLT^alsv}xo^VOOTST^mmz{s`SOILOU[\lv{k`VNKONRV^lw}fZTKOMOTT[kxlc`YPPKIKVky}peZMJCGNWeq|wkZHEDGVU[ksxbYUNKHKMSav}rbWPMKILXcj~wqeZNFHKO^kn}}k_TLPPMRYapwh`YSTJJV^m{~nbWPJISWcgqvdXMHIHMWcix}k]QLIKJQ\ewudXIDCBJUamviWC?FILV]jzxj]OKEKHLXfyqcWKH@BOWfv}oWNI@ALUagqq[QLDFGK]ktshXHEDAGWgv¼zn^H;=CMXcn{wf[PH@BMSZiyyk[OIC>IX^jx}p`OFA?HTZfqq`QGCEKMW`j~qeYPKG?FT`p~{o^LFB@FU_juzoZOJD>FP[nyp^RIEGGP[er}ufTJFFCL^jqwjYGBDDM[gp|wj[MHGIOUamvzk[RLHKIO]i{~rhXMFDGP^itwk_PHJIJXdo|zpcSJJGPU\lwvm_TLGGLX`n{ugYQMGQW^hr|qg_UNONRZfxypg\UKJT\hp{zpaTNOV\ekoxwi]ZVV[]chmvyqd_[Y[[bksy~wkb_^^`dhnsx}skeb`bilkorzzunnmjgfgipw|zroihihjoqwyyqhihfgikkqvyrnjifb`\`iszpid\VPVZ_ktvl\UOLQU[dkuvnbSPNOQTYbl{pf\SNMOMR[`o~pd\SOOQOQYcq~uj_YRPOQUXamx{qf_YVTRSZ[cpz}tja[WURUVY`jtwoi_TRPQTY]gq}zme\TPOPPT\gn{}ne^URPMPW^enxwk`YSRSWaadkoxumea^\\]eddkpv~{slgcffa`]Z_do|yrkjf`YXWW[_fr}}pga^ZZ\VSQVco}tged`ZWQOT[eoxypnoh^[WVY\bmt}~tka]ZVZYZcmrw}uia\\WPQZ^bkrz}ld^WTSV\^cenxwmg`ZZY\ceejs}znhe[[\\__dmty{oe^[YWYacdhsx~ulc]WYY\abgnrzzph][Z\``cehmtvmc_``_``accku~qjdc_]`YZ]aelywqka_XUXXX\aiu{wnhcXTSQX[bhqw||tlj`[]YUU\dnu{xtoc[XPSXbkkmsy{rf^TQOS[_cjpx}vi[VSNQUY^dkoxyqhXPKMWY_cehszxk^YURVZ\^bhmt~wma[XTSVV\afot|}m^WTQRUY\Z`ho|kbaZQNRTSXbks~sibYSOLMSZagp}wm_XRKLMSV^hq~yj`XONNNTX`is|uf\TMKMRRW`hsp\WQMMMOUX_jywjaVMJLPSW^jtxk[SPOOQTTZgpymbZTQMMTW\gs{od^VPKNTY]fq~yobZYQLORW]cqwk`YTPNORTWct}sibWPOHGOV\kx{k_WMLGGHPX\j||pf[NJDCFHQ]hrtfZNGA@BGMUbm{{m]QGCDCDJQ[eu}kbVLHCCAALXewxj\THA<8AJVbm}{rdTI@99HV^krúxqd]TE>=BKR[hv}º~{vh`N=9/0?TfkaO9''>\y{ϷzY=/3CUbf^L5!'=]||x~ջrN7/7GXddWB.(@a}{wӸpO906I]fbT?*'Ba~wtͱIJpN7/:K[caR8 (DdtuεijoM94;HV][L6$(A_zvv˳°mO=8427CSds||y{¹rbYUW[]\TI=54;GVfs{|zz|re[XX\][TI?77=HXgtz{zy|Ľqd\\]_]YRH?99?JYhsyzyy|qd][^``ZPE<79@N\jrwxxy|qe_]_a_YQH?88@N]ktxxvw{pd^]ab`ZPG>89AO^jswxww{pd]]`ca\RH?8:CP_luyyvv{na]^`cb]SG=8:DQ`mvyxvvzÿ~mc]\_bc_UJ?88AN_mw|{wtxma\]bed^UH>7:DQ`nx{xuty½}mc`acdc_TG>;>FRanwxvtuz}pfbabed\QG@=@HTbltuuuw|rhccedaYQIB?CKUakruvwytjecbb_YQJDACJVakrtuwzujebcb_[SLDACJVajptuxztkfedb^YRKFDGMWaiosuwzwnifc_\WQMHGJOW_gnrvy}wojfc`\XRMJHIOV^elrv{~xpiec`\XSNKJMRX]dlrvzwpkgc`\YSNKJNQW_fmquzyrkeba]YSOMKLQX`gmrvz~yqifc`]ZUQMJLPV^houwz~xpieba^[VQLKKV`hosw|wohcba_[WRMJJMUhov{}}vlebcca]XRLGHMV`jxyz|vkebbbc_YRKGHMValsx{|tjcabddaZSJFHMWamu{|{~tbbbddaZSKFHMVbnv{{{{~sjcbbdb[SJGHLVcovz|{{sidbbc`YRKHHNXbmuz|{|tkebbcc[SMIJOWcnu{||}uib`bdda[OKIMWalu{~~shbabeec]UNJNWbmv|~~}ujcabdda]VPKJYbnv{}}~wkda`bca^XQLKPWmv|ujdaabba^XRNMQYcm}vleaaaba]YSOORYdnv|vmfb`a`_\WTQQU\emu{~tfddba_ZWSQSX^fov{~~umgbaa^[WTSUX_gotz~}tlgeca]YURSV[ahmsx}zrmjgec`XUSTU[bjpuy|zsmjhfc`[XUTW[biqv{}{slhffda]YUTX\cjquz|yqkhfeda]YWTUVcksy}zpjgeddc_[WSSV[dtz}wmgddeedb]WTRU[aluxngcbceeb^YTRSYclvpgccdedb_YTRU[cnw}xndccddb]XUTV[dmv{ypjdbbba^\YVX\dlt{{ridbaba_\XWY]ckt{{rjeaaab`\YXY\clt|zrjd``bba`ZXY\clu|{skea```a`][Z^cjs||skd`^_``_^[Z[cjrz|tld_^_```^\[Z]brz}tkd___`ba_\Z\^dks{qjfa```ba_]]]_dlu|skc^_`bcb`]\[_emv~{gb``bddd`\Z\`emvyog``aefc`][[]dnyymd_^eihea\YX^fqzxnd``cfie`[WY^fp|vkc_`chkja[WW]gsvkc^_ekmlg`UV]huvib_afillg`ZW^htujb`aejmkg`[WY^tvkcabeikkha[XY_htvB!Akq]V]hqm\PVnqk|úx}aQQ`teQSat~tlnteak{ucTNVnxfamx{yyoVEA?DR\]YW[dowyz˾s\NVUOA+:Tafgeftŭth_VJ7%&-17@HZuªmM0 ,38417JdȴnY@,#(.37724?Oczy?/1-!!,IWjǼw_I<:?EIG?635@TmVE:9?IQY^\XZ`kz~vj\RNNRUUUUT\kz}vvyyqcSB64:GXgmkkmoxmd]SLC=979@HQYdnxŸysjcXI8,$!4BLTY]ajzɽwkaXNE=3(""$*6DQku}p]K:,&'-1467:@KZmʼwo`N4.+-16=ENWbnu}scTLIGHHDAAEP]lwvj^SNLKLPUXZ`hns~qeYY]a`][XVZes{sfZPLNQUZdfiqw|tk`VLEEGJMQUUU[ft²}}wmM=3/07BLPRVZalzvmbTG=61245:@IWguǹ~gP;.).7>A>85CTiĴsbO@846888LX]ZTPT^ɻ~yveXK@8346:>DLVdpzɾlUB66<>BPYdlszvd[Y^bc\O>3/6F\q~~rvúpaW\_`]XRQTZbkqvy{nhgmtxsiZLM\o{ss|xdVQU^inmha]^fq}nc[V\aa]WOMQ]pƹoXD<>HRYZOJKScv¹vfWOIIJIE@<=DO`qµWGAEOWVMA3,0AWnȼxeXSSQKC;79BP^iprtxodadgg`SB728\nxyrihpndadjlh_SIEJUbnwyvv}soovsj]SPZhv~{ror|{j`]bkruo\WX`n{xmd^_`a_[WX`kxtaTMO\a`YPLLTbtuhRMKJHGHJLT^ouztXUWYZVNB84FUgvŽxj^UOLIIHHILQX^fq}yvutpg[B<=DP]fjkhjt}tolgd^XSQQUZ_eov}{qeZSRYbkqrmijq~pnqsuqld^]`mtyz|~~oopsrph^URbo|~xsxxh^\_ejjd\NQYgs}rligea[LGHNWbmsuuuzjb`chbWKB>BN[gpvwzzmid]WOHFIOWdffgmx{utuusk^PGCO[dklkjlq|zvusoiaUSW\aefhjnt}}{r]UU[emsusmltwrqswungb`agmvz~|xvsqmhd`adjt{~|zy~vbbfjonle^Z[lwxrke`]ZXWZchmpsvy~{necdilkdOIIP]jv}sha^\\ZXVVX]`fkxxvy}wn_RIGMXfrwnhfly}mmqtsog_XVYekptvz~}pbWV[t|~xmd`fswomt{t_]ckw~}z{{xxz|}zsb^bmx~to|~~zi_^fq||qdZW_kzxrpolhc\YZ`kv~xtu}o`bmw{xl]NGLY}|uvvokihfd`\Z_djnoprvwmls|xfIFN^p~|shcyvpqvzumd][^djnoosx~{}xi\WZesshacn}wpxvjcafnyvuyxz}}tjegmxsrx~riglt}vk_do{|~}wqnmnnmiffjow|}|xolmrvtmd[X[cnx{yzxqnmnmje`_`chruwz}~{wog_[\agrsqnlov{{|{zuoiedgjlnpsvz~yqkjlrvwtpljkq|{}{smkkoswz{yxx{~vpnptzyopv}zqor}tkefmwzx|zzwsqomlmrwzzxuvzwa^tj`fulWNmqr|y~yr{q]_q_PSh|eVWvr}}}edjquod\]co|vlfm~zd`loWKPbvl[U]rðl[`yyS6IeUazkxҾX@Jm{S?KljONioPT|C/IZ!2mh6,R߽I:`:-Sˡ+&L^Lڪo\ГN0_j0PlMN˱s{ӥoPZ]((TsA Oӷafώa^˃A$HwG%j̆OAhlIa1!Q| +gvVПsϿ]>]U,\pOH˧yègb{[A-3LkoWJTrƱ}SEFS`f^ADUpzͽ}MQbu{pZ=DXm|~zxus~^HGYv^QWl|sy|t{vfeuzaS[xbQ\}kTTmqXWkvhlnl{s`tiVkq`rzm{qyoo~qfetp`bw~e`pya\khX^ux]TfbYmĄ]P`H;MtEdF@XqgxkUeywg`|}tzxgicPRcvgdpw}s`d~|R9=ZqP@Mtudsu\`}S:NXXIUo{籍{|]A7:G`}ӾkLDNfV41ldŜbDEJJM[douw}ǷiTbrudE:Xtx̛XGM]mVFEYxz|Ų|qaXXURXg}̸{[?7`rkO9;ģz}tNB??A@[m|Ԗ{:/6EK+ *LvάqV?2- 0Ugyȧj`^O6 GOF>IǮʦigpumVAIWbedo|~qEJ`[[u’yt~cUZkzqe_d|vsrpg[Yex}}na[ddYF:XwϟaPD=8:FPXZ^бyd\_c\/#:ZrtkoųyoO;,&3HZZ\hþtlytcJ5EXdc]^yuri\OSbq{ujt|{n:4D^u{bavtnt}xeSLOemmov~{}bSXn}hctdes~{iVUk~lgc^WMPZdhiwtcdlvtD.+AeypzտseNC;67?O[kĠ}jjzoV7)CTWPL}uqndS12>M[^_huȶyNGJXbbRSezpxlXTw|ja{jai}}eVVh~t|nUN]lriVCSpwsi]O?@FR[`m~tvz>% 4X~tb[k°u_TUSKRcv}˾sbMJGB>9>Nat϶s]I>@^gd[TX{lffgfVONVdt\Y`inm`bmxvxz{zz|}{|ut{jbcjsxsovunpspfYPXgtz{ypXIO`nqj`jrkmomXMHNZx~~zZLDDKU\^ajxýwdPBFRiorvŷzSPWcl]NHRjyqnx{pnx{uvwnlozyuty{mruaXfzrp{|zj\Wbinmihm_`mynV=.3L||vzƸoUQPMF53;NcucI;DQWQEF[yògJ75F^tk^ZcwciszwXNRd}zszxtb]swdnyqx|leftuoilytq}|a_hsulgo~zpllojc]]p¯sg_26Lgqd\e|yf]`mg\L>CYqìQDFSej`[^}dTKLThllm{{smlh`KIP_p~zw~jVQ[}s`P_wy|~~rns||tsqxxons{y}{{o_WXezrVQSY_^]fwtos{tcOBIZksrjsǹXLIO`_[[_xxfTGKU^ccem|zpbNOWae^Y^nxjis{l_hv|yz~|}{mwmgtdhzwcX\w|tn}~zxwrke_cmw}~rd][`bcgo}~n^ST]fiilsvjedf_VQUq}}|cIN\ioa\anzvuoh`[\hptwx{rtssqnklp}wffjr{yrqull|xi\gz}{}nou~vs}plsob`kw}|{upnjcUTY`fos||rjg_YSPThqy{kOT`iaWT\n}x{|n_U^istnhtsnw~}g_^ep|~~rlnwyldu}rsuhzxdr}sv}jh|_Ybvvww{k\Wgnog\i|}~kMNWchd`dp~{qgZS_ny|vhqa_gqucXYh}w{~jYQhy|_]m{fkv}c[_mzuy~sorw}~zqsyyz~gfpzrxtrye\du{poykfv}kVbz}s||mxr`X[h~|unyvnmlhdcjs}~ypmjeUQVdvo_U^dfaZ\i~|{k^Zalwridy~spxzsoqw|}xvx{~~~}~qnpy|vvzneep~kW`tz}v}`W[fwskce}wxvncOS_r~uqv|uql]VT[w~wq{oimpog]`ivyjcgvvcYzyjkz}omu}zz~wtx}vlddmz}{~ypptx|}{x{utylimvvnjjosngctxwyZT[ix~vp~}vrrpjc_n}~z}j`\^gxzwt{|mifdmsusppyyupljmu{~wvv{~~tfazocp|po|t{~{||zxknu}sjm}|wphfqspico~yb_aiyzwqpoipr\Siwnvnfgkonieej}odit|{e`h{|yymltvmnwru~sjuinqgn}hi{ukm|zwmqz|necuz~pnyy_`oxu~y~widkw|tvtlnuaZp{mps}i_aj{yogez|}q[artfbn~~|{}wqot}{v~|}zplu~~mnu|{wkek{yic|vklxrnzu|{pp}mfqtpt~ywvvxvspkmu{ut{}th]dr|x|ldkxvdWVt~xxdhuuhdl|{y~wpp|}|y{~}yttz~||ywkkwxjukkuqjoxxsp{v\cupb_jv{yunmxyvrsy~~yvstx~rnr|xkg~wu}xsw}ilt|vv{pmspb_vpx{~rqtxyusru|sqxmr}{zy~|w}}xw||pqx}tpsw}wv}zv}|{|utzgdl}}lf}~~xoijy{yrnu~~~yslhqy|}yw|wvs`g|xhdm}|{}~zrp~zlr}qnyzkzxhgr{stxz{|xxzxzpmqzxq{wxos{ksegzvhgehtxnm{}ss~p`r`fvtpxz|z}~{y}wpvykhqksxtzvnzvdkzsmrvwymlmaqqgjxzuwzrkoqkwxrt~zxqpyqim}qv~ts~~plmfhtvp~xpmwqbosily}uuu{ztr}|}{}wox~jn{zz~pr{zmgjws{}y~or}lbfqvjru{w}olpyyohhy|z~|xvy~srxzx{{uu|ypwtjlw|lnojr}olkkw{rs}zwrtzxot~{uw}}{~vpqyysuvy{tqvuvyrw}nhc\g~i`osyt}rnr{zpnyxqt{~z{vqqsvttt|~}vqtwzyqmnt|z{tkw{lexxtxsxpixsmsuvpt}ns}~{z~}~{~|yy~|vstuyyx{~xtx}}}yy}ijt}oj{xxzqoqzxvsx~|uu}ilv{tz{{yzv}~tsrmnz~~wuyz|vdextb\~vqxzw~uoovw}vpt~|oo}{vytrx{lrxnzxlktxlx|nyvklyxltzon{hooal}xqsyrvrbiw}tnsuz~xpjhrxywv~zkcmvW`tylkxy~y|sskku~lcwvlpz||x{wmmxysuyzqqw{sqzx|qyhckxkvv|qmo{~zvrx||zw|zpr{wtw~~|}}|}~~|z{}yy~{qpzxw{~qk|helyy~nhktwlgq~~zv{usty~~~xuxyoge}spy{snv}~yiiq~z|rr~abp~qpy|qpswwsppvy{}ypkuzzvlnt|~~~sjzicixvtvrvnqmrukjhm~~twrw|sljm~}yyzymhhv{zvu}skhn{tv}yx~xlq~unr~}|uqz{onry~~zkdhuyms~{|vuw}yxwwz{|{{}y~pfm|wppx}z}{orzysz{srotyv|xy}xuwy{yxz~wuyzvjimz|zwot|qc[^xpt|pixzacotnypviny|tq~||y{zxyzzzrukn|uppqz~qmxztuzu}yfevm\Wywwqjmvzqf_ix~}}qjpwzqmowww~`cqqhyzx{uyzsowryqm|yhahrxxttxxwsuz{{wxultyw|}xqqytozywrtwgks~{xuttiekxyyz{{zyx{{|}|rtxznfbf{utv{vlaYet{y|~{hkt{sjfk{xuw||ytv|xzzuwz||rszzuw~|z{xlkn}{w~}|cao~hXiwy~}rhjs{skjs{y{b]al}zvs{~shjowxxwwz}~xx}}qquprnu~tmxzw}uotxafszst{yt}trux~{wss|{qt~tjhnzmmq}~ztqyumq{|mads{x{uttsoorxz{}}tqopsuxz~vihkx}}ytxyx{~ulq}tlnsr{x~|z}zprx~|smr}~ylhl|{sjgp{{rmrvwvkhlty~d\`nvkv}muxh]gwwu|{pmzwgmz|~{{ss{xtu|{w}sos~xp}uii}hn|xxqvzbep|yol~{pr}wjeux{|}powwrxxvz}tjfr~xw~xifzw[Zfw}nkpx}ukfx|~ztlkv|}z{|uplu|ts|x|zu~tt|zuzuwxz~~wxnm{|uy{wnjquwtrv{{vqiijmqnln}t|qe`lswwuzyvy}sfkwvzztx{ptz~}}~}}~yusu|z~{w}uprmtzkmzzpls}~sw}xmhj}oxztrhh|zopv~|~|woptz}{|~zz|zvuvxzwy}}rmry|tnnyxncatrs{xuw~schsyt}~}{}~|{}}zz~{z{{yvv||wwzswrkqz|wuwrt{ymebu{toqtvqmijos{wwtsrqmmrwymry}womqzxzukjrns}y~wu{r|srnnu~|vr~~}~~tqrx|pu}wvoxsmpw~uxzmgp{ypkz}}pnxehsxs{}sozxrpt~xqo{vtxzrq}vlny}xxxyhgrscp|pz{rsvpsvx|yx|yv}{uysuqpv}wt~wwwggky|{ux}sxpc_frtwrtwzxtpt{}llrz|upx}vuwzxusv~}zxrouqqy}tx{x{zz}}zvssv{~ywyvpkr|~xwrqtwurptz{rkt~mip}tvrpu|}wvz|qkm~zrw~}}xy{zvry{xwtyvw|{~{u{tp|ys}uuzniotnpxw~{{}yu|}zvv}vrqs~~wqklt~}wu{wwwuqnpv|~~qflyzmeh||}~wttuyz{z}zvxu||{{~~}z}|}{v}zuy~}}~poutnz{yw}sliqy}yy|{z|ysmjsz~wtv~upo}su|z~~ru~zpuvsvrvppzuvyq~ypv}vw~y|svzrxzw{xw}~tx{}}squojrtywxrji~uqsvz|pgqymyxuzuwz}xrw~~}|sonx||wsyyidledrtyv{zsu~to|tnswqwtyxqy{ww|wrv{~xpx}ynmu~von}|zkio}syzwxknw|||~~zwttvy||usvonwx}}|zw}zro||vu~~{wy|~|xz~|{||z|{{}zpu}|tx~yu}rln{vyz~xnu}pjk{{~~~vttvzyxz~~{qtyzu|}~zuv}|w{v{|ruxopytwx|{|}wtz}untxu}yxvurrvx{xz~|uututtuy|vv||qfp}vzzwz~~}ttw~{}xy~ss|~ur}|y~xy}yz|}||zxztsytt}sysmuxqw~{~nlr}vow~~~{{{}}~}}{sqrqv{z{yulj|yrpv~{~pqz|mgsss|{{wy{pt|yx~}}~z}yvyzw~~vz{suss{uuz|||yqppgjovu{tt|xsq{}xkqz~slv~{qtzyrov~|~|uopx{lp{{s|zsxqurrxtru|xz}~zywx{z{~|~}|{{{~|yz}tny}vty||x|xuz~|z{~|~{ttxxwz}}~uw{~z|}{~zwx~}~zwnuzrp}}zxz~zty||}xv{{vy~|yyz{}~stx}opw~yz|yqrz{nrzz~{{sry|xvy}yqrx~}{{}zyxyz|{{~~wz~sv}|x}yx{{wxwtxrtz~tw|{}w|zuuz{}z{~y{{qrw|~~yx{ww|xz|xz~~{}|vqu|knxvx~~{y|~zw|~}zx}}||ywrr~yvzzx|tqvynwzs~wuuszwru~squ}tw~}{z{qv~xs|}}~~wuvy{zvx}{sovgbynnw~~{~vqyytu|tu}qq{yv}}~wyxu|~wz~{~}{xx~su~yovxnpwuytv~usv|{yz{qotnowxz}y{}~|{|{}wx~yw}}z|zy||tx}wy{|xs}rnpyw{~}x}yuu}~|}}~~}x{}wz}}~~~~xw||x||y|xtxssz{{~}~|z|}~|{{zxy}|ytvz~{|w}xpmy~xu~zw|~yv{xwxuxs~xv~{y}{|z|truuty~~|}wsyzw|{~wv{~sv}|}|}~yuz~|xy{xywvx|||}|zz|{|}}}}~|~|xywpoyts}~{us}~wt{y}ww{vv|~{y{}~~}~|zx}zxzrp||vu~|sx{st||vyztx}}yy}{}}{y{{|}|}utzqt|xu~zx}uz~rw|pt|lrqxyxx~upv|~~zz|zvu||}{|}lp|{kq|z|{|yru~{pxtyps}{quz}|||x|~yz|zzu|}y{~{|}xyztt}wwyw|tq~ztu}{xw|plpvqs{yzzxw{yzxz|ux}~~~|vtsy}y~}}tt|{uq||}~}{vtz}yv~~zx||{z|}||}~|}~}}}~{|{|zwwsz}z}zz~{wx}{~yssz~~zw~~ror}wux{{spsvtz{y|utytt{{x||wxyx{{}|~~xz~}|~~~~}}}}z{{tu}}y}}~~zwy{z}zrw{w}|yxzz~}}}{yy~~{z}|}vrv||z|xy|~zsqx|vz~zx}}xwz~z|z{{~}}z~}||~}~{y}~zx{|~xx}ooxsy|~sxwloxzzuvz|vsy}xv{~xvv}uoquno}tuytvurvwrvwqswtw{y||wzwvv~|{}||y{}|||uw|u|}y{s|wos}y|{u|}so||x}{{vv|~||~~|tswxw{|yy}~xsz~z|~{ty|sxxzz||{|w{yx~~{~|}~}{yy|}~}}yywss{}~~yy}}ssu|}~|tw|~||~~~zwvz~}{|~xw|yx|zz~yx||{}~|~yz|vw~wv|xuwywyzyz|vz~}{~{z||zy|||y}|xz|~||wsz}yx}|~|wuw{}}~|wwy||}{|~~~||}}ux~w{z|||||}{y{}~}}xz}|zz{|}||zzz|{yz||vsz~xvw}~yut{~zx~~}zxy|z|~~~~}~~~~~~|z|{|||}z~|z|y~xsyyu}zxzxuy}~|z|z}~zw{~~~zz}}x|~z~xz{vx~~|~|{sxxryyz~zwy}~|}|~~zw~{z~{}y{xz~ux}wzz|vx~|rv}v|y{vw|~yzz}~yvy~}z~}~yvv{}|zz~{zzvu~}yz|~{z{zz|{{}zz}}z{}|~}}}{~~~||}~|{|{xx~|vv~z}z~|z{~~~~}yv{|yy~~~~}~{zy~}}}~}{}~|z~ww~~y||~zv{{tw}{~~~xz{x{|}zyz}z{}}}||~}zy|~~}zvv}zxz}}}{{}}}{}|zz}zz}zz|yz}}}|~~}}~z{}||z}}{z}}~~}yyz~|~zz}}}~zzzy{~}}}z|}|~|xz|yz~}||}}}~~}}~z}~uxxvzzy}xx|x{}}{}}wzxx}|z}}}}}}|{xz|}{|zrv}vvz}z~}x{zwz}}z}wyyx{|}}}~~}|{z}|{~{y}wy~z|}zyzvzz}}zz}zx{~~|zz{|||~~zx}|x{}|}|}|{~{|~|~~~}~}~~|{}{|~}~}~~~~~{{zx}~|||~~~}~|yy~|||yxy~~~xx{yxy}|}|{y~~{x}|~~}~~~||}~~~~~~~~~~|{~xx{~}~|{}~~~||~}~xx{~||}|{|~}}~~~}~~|}||~{|{{~~{~||~|}||{{~|{|{{~|~{w{||~~}y{~~~~}~~|}}~{x|{y~|}}z{zxy|w~|y||y{{|}||~|}{||z~}yxz{z~~~{{x}~|~~}|}~}}}}~}}~|}yz|z|}|~|~|}~{||{{~}}~~~~z|zz}~~~~~}~{|~~~~}~~|~~~}~}|~|{y|}}||~~}}z|~|}{{}~~~|}~~~~~}}~~~~~~~}}~{|~~~}}~}}}~|}}|~~~}~~~~~~~~~~|}|z|~}~}|~~~~~|{}~}}||~|}~}}~|~}{{~|{}|~~~}|~||~~~~~~~~~}}}}}|~||}~|~~|}{}}|~~||~~~~}|~}~}|}}}~~}}}~~~~~~||~}~}}~~~~}|~~~~~~~~}~}}}}~~}}~}|~~||~}~~~~~~~~}~~~~~~}~}}~~~}~}~}~}}~~}~~}~~~~~~~~~~~~~~}}}~}~~}}}}}~~~~~~~~~}}~~|}~}~~}~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sRIFFWAVEfmt VVdata|zxz|}||}vvyqzqjag{uddz~mnxywrZ]p|w{zmhrsgjcHIfuoil}gH=ZwY[jumUWzߔ 2;sf+ǻظqtACXHk4cYk}t%V 8c˧ZXWY@ΜrjtbfȜl\vט[Oh~K>hm˙p`l)G65u؝]/+aĂREVyyvvѽXOpَY]wcbwxnsvqtқY9C_tnUShpYHH[nwsdUJLRVRLFB>>GSZUG<76=KUVRJGLW^YK@@QknE4=SoyhZYjdeʑZ?Pɝq]b~{f_wƴeB9UƜ`6.?d|V@B`mQ?76?Sqx^D482)"#.<<,)87*#044:AD@:50+*:[upQ6.?^yw\@2BgtlgfplZ`{x^XiϪvtѹͮyun{}kgssp]djkpfo|~zxrouumjcbitui_ZUSYbeaXMLU[\\WOMRSQSWYZWSKGJQW]]WPMPZbfc`][]cjrvtnklkkosrsutruvtux{~wonsxxmjs~uu{{yyoyƺmirqkq~ug^bqyghtw_OWozWCMj|W;:Su~nXDI^pvp\JENYcjkhis|k`_ftydTS^pnVO[wyh\X^qdOUhtvwuspqzrei~~y{}~~}}}~}~~voloswytj`XX_df_TJGHKMKGB:59@EFA<77>GPUVRNMPW\]^YTOQV]cdcbelqrokkklopomnpqqoooqrroopprrtvwvtuwz}}~}~~zy|}tsx}wstx}}yvux{}yvx}~~}}}~}|{yxz|~~~~|{{}~}zyzz{~~}||{}~}{{||~~~~~~~zx{~|zz|~~{z}{{}|}|y|{uu{|xy||wux}}|~zst}xruyqr{|vw~wstx~|z{}~}{xy}xsu}}xy}~{z{{xz{~{xy|y}{trv~~ywz~{y{yuu{yvy}zz}{|{y|||}yx{~|~{y{|}~}|y{|vsxwstz}ww}~wx||y{|{~~}}~~{{z|}}|xwzz{ytu|}}}~}}~~~|{{}|{|}~}~zyz}~~|z}|{|~}zx||{|~}{|~zuru}~|}~||{|}}~|xuux~||}yx|vsyzqrzwu}ytw~{}~ytv~utxyvy|yvx||vtu||{}|z|~~zy{}~~|{}~~|yy}|{~~vsx~xw|zvx}}}|zz~{y{~zz}~||~zyz}~zy|~}~}vsv}|wv{{y|xtt}uqsz}yz~tpt|~~~zwy|~~~|z{}}|}}||~}~}~~~{|}||~~||||yy|{||xv|}|}}~~|{wuzzx|~|{}|yy|~~~~|yy||xy~{vy~}|||ww|}{z}~zz~}{z{~zy|}z|{wx~~~~}~~~}{z~}yz}{z}~xy}{z||z|~}zz}~{z{~~|{}~~{z|~||~|z}~}~~|~~yxz~zxz~{|~|}~~}~}|}~~~{{|}~|z{}|}~{z}~}}}~}|}~~}xw{}{}}|}~}}~}}}{}|z{~~|~yx{||~|xx{{{~|yy}{{}}zz||{{}~~||~|z|~~|~|{{{z|{xy}~~~~~~zvy~}{|~vtxzz|||~~}~~~}}~}|}}}~~~~}~~~~~||~}{|}}~}}~~~~~}~~~}|~~~~~~~~~~~~~|}}|~~~~~}||}}~~~~~~}~~~~~~~~}{|~}~}{|~}~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~sRIFF(uWAVEfmt VVdatau|}՞.jCC*5jxսV^t' z`OF*rpTT[C6vf xn?)l˜qGÉP/nQ*2{m+9}|T.SɝvkiN0Dæp"X#kp_qzttլfD]|q<KEnixe68t]SZXD^`gЊ*WГ6:ǚXEsľr Qf+>yp2 ihVlwTki19^L$0~ DswP 2m^-3}dL^)1lجbDU k߱ufLQSOc11}i|vjxzov{q[֨qVQgvmux\d̻gO~C .nϤ|spQXhrQ#?yp2+GcfVb܋:0mֺu3,YBiҶ_5ƚlV_m ԠT%&ic:;TxasUE^p^BGy՘[;8Ej؁."eY[jB0%)\<?սxFOsqo^`fep vפeT~nrr\lYGK`gdk~\cſ{ "O3`Ҧxz[?DqХD <:;Y-4Z|rX yՎ:#W8bԮ{tAyzSJ`ȣZ ՃZnS*Jܴv>,DsF(Q8 5vxhxܵq7#1]դP!z/LŸ|T71CnnWޫ]7Pjk}{w2_җH&B~Z 8xY8DŗS.Br|W;Gx×Y"xKThp}{eTb·wCQhPxxxZA38e>Rw_Wbs}xfy\ڸgKFTqdFL„- <_1&4XȫyzxbJRݦU+>zͮp=,2RgEK[YIXۭb*-faSUkֺq/$N|՗=Vr`]hήd2=of!+wL/3d¡d@M~rB/TF$uݓNAia[tcRxϤm;Jn6~v_pzX?6FvW,͠mRJazjbvɎ/If\WUaoVLY~б]#|ލC"#5Uǭp]TNVc#ls;1HpƤqE5DTZnsT׻}D1GuwD0IxӠ<;rNUtj80Y?(xZ!-^VFmƩwbqvS6Fވ8CE!Ce\uif۲e" Xw-Ýy|S>ZsQL^U|bkvlYX~ıs`U_ǟKMm44KY]nhSHT}|,S-Sɦ|ZKGISxӎ9D>$?qȸY3,Cc|сߝS2CsǰN8GqN4y=7WoE9SƤ|w\#]G&tңjHVPKmyWN}?=C^jew]oi"d& o~`pdNZ[E[[TLcvrelZCG^´t":i-cîYKUi„3:KWötF+0E_ڙA %H\ͭcB:S|ѿ{`r(*gϴK)2ab(-s2sYEWսljuiD)IQ$~g7;kbBScm6%C Pϒ`ebW~=(m'HVLoecÝb:?kϤYoD&?euqw`=@h˳}8 +f#oW12SB |f7ŝ}bH5;]ڪY[h?kRCHjl&_0D”bC5<]ǰn@5sԺhRW{ҾTK^l`MZq}٠\&EZUvx֨E/VJ֡bKdt[i^#-ts>]:Tfon:9gҬh%$3Y|yOHhªw=+u u¯vN05Zúf?=s ĔpYG=HQZ{8_\>Ec|XNd} W\5:_|RMnzh.'88}ȏXRxmxH.wV2@w{eqrƨ\"]Ѹ{F2FyD8ڨxo|wU7HԔV0+MנC^gJS^VOfܶyC&(Pi M|.!DmΜ^+ Tj AG;biL<@]aH2Nx|l__m̙35g/1U~peh{LV05}Ƭg_ppi\!r)RʖZ34Yƃ6 Y~ fԂ1!ie&EN4{Z~ɛe7(ZC ]ٷo'FcqC Hu"4R,F{yq J5'Q6q~^/'Ilutp5iρ(bO=cdl|J6Wdh) ;gRbW 2urRJauE(?OϮw[JLdV,0ui<ƈQ.#5`ǿP![i AzE-3WŘp`WA(5( ;Σf<0AmܴxQRbaS]b{ǎaMTuȿC+Hv~^(LGԛXCgAG݋> ;[/Csxrr@CSTa(3hyq<8j˻Y.9GtFBonD/Aڧxb?);oƯ^@Fvr ȀUIFEV|Üi8R9 9j9.;TwųmO;4Cx4 jФgDD[̷^@;DN`qܙaJTphIJimpP*/WzWXzzld8-=‚PMu}h|F&J[ \,D{yl}_7I]9}D>ÿK&oխj:2M(U۟qkse@)HԑS23^Ӎ-wYGWaUPqo2MXkeEm~“W&]VE?G<;®yf^cqr<,fEϞnK>If|9?$q{="Lr4gzXٍ9 j֬g@O|m'7j s݌KDk{gswK@eҗ@#>|jZlJOa#|rSK\znD4X48ƠcLAJfO0AH`tA(*Epþm;#pc^ܞW*"=nѸp`S:&A~@ϝ_88XɕZ?K^_XmUȆSAPyîs:1V۟;:E (ZĉQJsv|~< enST<[iipCFݚIxF1k|uzJCmS(A~ _űmB=`wN9Okԛwj\D7IwȳV16ki 2yK>AJ`Ƕg7"^<C]30Eg«gK5*={)u֫oIF`¾vPBFP\prٕZERtiNTrӲU L&,VtU[u_ Kz JȈUUyuh~}B+XQjdJw[7MڣQ<;N~E 6}ֱrE9O݄^ܦ|prbA4WÂH)0^Ҍ2$O@NWU\k3#ZG lf+-Rwͱ|D .pOX|?>cx\IDPq->M?Xym`]cs|iJ *Q{{ru{*IqWXkyvmxQ":q eǂD):hĩa%(pg2a&sM#i;AҒ?H껏~}oH$.u8+l٧T]ݓN6DVWPc$UaZߓI4Q{ОL %ro;ڐB*M~H%)R@,h@Y~}w[LWxٔ2AITxkhrt2Z7N·o`Z^nl2(i T͛nRHQid" C'"}j3(Uj*D:n؞[-#GɚxpiHOO \ϚY*HvRZmm\^*>~E-LZ3Bg~zux eu!tڭhEYh!.`|=2ToA̙Y11RϛdMUa[UlD.ʃM8Gvm93U<Dz4&c̏UMrtw5pn_ݏC1Sv|j=HؓAE9p|wg>Du’X+Fm diBDmg<+Mm /ƐpdR<2KͳQ3@{]0|TJIOdĭV)(n6L^4-?^­kN70KڭpJKeÿwSA?DQl} ҇N9InkTZs֫HG'7epPUtxyZVqQ|SX~|ti,RL(|]N~{vP4VN 55^r76֫f7.PeΛwrsaA9cw9.e%)YKUWPW٣^((j9ta*.SuոF-v9i~BAexYD9nmv='(K;dh<(.N{_+,Jeߡ[0'Ctʰn]M4-Xd H̕V01VʗaKS^ZWu62}J9M}Ūl95Yݖ0Os-&fƉTPwwp+wafݎE5Wr|d#4drTZyvzP_eW{RWzwth+![?-UN~||G/XHC( aj-9٩d61Ux qϙuonW86gq4.iz!1ۉPGSVO[ڝT 'o4}X'1Xyӱv;3/nxBEltU@=MwWہA9Vzue_dqշa>0\vlp|q!hTÙpZ\lwtq9=_zq6#;lʠR.S6S9v8$z߁/Ĩ+T崋kA#;{!(qٚE pׇF4ETPMjogL aԄC8\Β:*VM؅:*QwB&2b&:[>\tUGU{Ё ]9Uuhjxn%m[ɺjWPYm^*-}sbÎaE@PoU Q|.b+)\WZ-%zϏM#"LǗwoa;b7jїU'$RhKVifZeNq7&QޞT6Jn~xuط_{g&ڤ_C\Z >F+twZ6C}ϹL$"UVrñY8Ewöa7-WR@oaJ2/RͬwD,CKFnMEEOjɭ~J/&[ݖQ12Gg§^B//Vq&ԠeIOl»oM?@IWy`*JP|gw=;Y{sd_esձW 74aslq}i,Z^ٿkX^nxsq|3FR%j2"?pȘI4G?K @q1 +w*Qz#_ᯉh<"Ao.yԒ= #|B6GTPNoc$qCl|>:`ʈ13LW{5-Xq=&6jHT@boQGXxl/#\rgkzf|eȹfUQ[pW&3e m彉]EASqN]p8Z(.bPe$-ȆG!$Svn^5o. tˏO%&[ޤdLZieZh| Zi3(ZٖN5MqxwدS"]/֜XCbQ G=8k9FspjiBFvz @OYyRNiu9 s1F_INkX*)d g濘wYD@Rud2&W'|י\5&1V˿Q :5yґQ,+LǧfXG01iK ZĉN08_VIW`YZIrE:Sß`5AK[~R6wG=SwcS_|Ӓ$9t4#NumP>?Utun:=^rd_gvҩK2:eslr_ 9Ng׻hX_pxsrs-QF/b.$DwƏB;=KA Ij+ 3l$!Ypkܩ~d9$Id6ψ5 +v=7JUOPvX +z:vs;=e~(<@ cs1/_l9%:qVOAhlPH\l{&(aqgl}_ mǵ~dTR]rQ%9VxⷃZCBWvEhc BT%2iHo|5€A([Ἆtm[0"y%'~ƈH#)cڜ^J[jeZmofݧb0,bԍI6Rt~vyרI,S 8ғSDgIQ3Cc8Jxmkd@I}qNF `tPPlo3&%N}\IQoQ(,nys⺔sVC@Uy^0)_!ђV2'5[ʼLC-&̊K+/QŢ}dWD.4s@dؾI/:fڼSJY`Y]UlB;XY4?htvY4|۹vNY~w[6D*s9:dzqS:]o!Az)K}P5NͯxB (h<)O7NV23f:X鴄l]E/4^ǡk<.O6^dIDGSsģs@>iqІF/5LpƽzX>.4cU;˒\HStöfI?CK]EBpD?V{`Sb~ΆFl0$AteRcs; $D%pܦiM`r{R!,w߄%G;)`yo85o҄3 Yp$~ιUQΒQ18gT(缉oohL2A[)>\OrJKVTPfȄ?:{7ݒA%=eˠb-I|"a>QyiM>@Xgf8@cpb_hxѡ@$w.=kqlsVDBoշeX`rxrtl([;9[+&Jzˆ;C4T9Qd& :d"%aht֤|`5%PZ >ʀ/ 2n;9LVNQ|M3ގ2#k9@jv"D7mj.3de6&>wucICliNI_b /foglX!r$tų{cSS_uK#@J޲WBCYx@ sYKۓN"8nC#zr=x;*aඊsmX-).D!-kՕZL^kbYrco١\-/j΅E8Uw~uz՟@5JAΌPGkB Xދ*O[8O|km_>MhZ= &gpNRpi.-XzZHTsM&1wk޶qTBAX|Y-,f*ˋR/'8`ɺzGL$.ǂG*1VŸzcVC-8{6mغ{D/=kٷ}RKZaY_z`g?=\S3Cmj R:ڲqL]|wT><1l5=hysN;cfKo$ Q}L5T˫r=,q13|K7SR05m/d宀j[C.7cĜf9.Vߕ+jߘ`HDHUv m;E_%z~B.7OtƺvT<-7jJFƋYHVw³cG?DM`:MjC@Y}]Td}Sd-%FybRer~3 +;+wءcMcq~K1z Q5/fxi58wz, ae-ͶPXʋL/;nI3䷄oogJ2FT&CR XkGMWTPj~;AoA؉<'AiȚ\)Pq ,[>U|gK=A[Z_6Cfob`jzϙ61m) AopltNP7'wӳcXbsxrue#e1BܜU((Oɿ5K+ ]ڈ2Y^!BZ)h^ҟ{\1'XP Dw( :g9:NVNTD:؄*,d7Do׺m L-ya+7ia2&C~iqFFrgLJbYw 4kngnQ +d-}ıxaSTavD"F<'ڭzTAF]{8 !~N UԋHBKɅLHo; b׀"[U8TjoZ>Q_f4 +nkMSuc)4 avVIUwG%5^۲nSAC\U*/ow3ƄM/'>bN2Gq_ JA٬kMbyxMG4:d4@mwsJ-9SxŸrR:-;r=RVIY|°_E?EOc/ZeAB]yZTgr`\*'K^Ri|sw, 322ԙ^MgrE8oZ-5kxb3=q' &kY6˳IaĄH/?t>>ᰁnpeG1JܕN#!IާIdeHNXSRou4IdK8'ElŔV$Yd7T>YcI=CaMW7Fim``k|ː,@d&$Gt}omvD^-0ЭaXetxpv] q&L֔O&,Tʺx/Sޅ#h~+aWKQ-qU '̚yX.)`G Mn! D`7~I,)?jƶq<_uAs>)6aλt`S>-A"'֯n=.EvԫqMM^_Xf`xݚ[rU a[(]|uC7_ǟf57G¹qD:^wJ.>~|ۣzhX>.>pӽ\43cՀщWGEJ\ϼc2TK3oy1]ܻ~RH\[C?EOf"g_?DauYUkֿfnU()Q[Sl{to& =);ΒZOl~q?>ccy(:qx[1Ah! ,sM@ɰ~A$jܾ|C/C|2Jܪ}npcD2Q֍H!#Pڜ?p_FPYSStm/RY Vv2(KpO!"bXCO@^`G=Fe@(Q6Jn}kaalȆ PZ#&Kx{nmw:l"8ͩ~_YgvwpxU&}VЌI%.Yʵp)^zsu$ jQUH4zݢL0ƖvS+,j=UdMY6>QTMZ3 Kp=U6KwԭZ_)R)?uU,+NQv@N|~`INkߣD/]At|lgrABI?s]RVf|w9$Y#=ҢqN@Icp+18k{= Hp08O Yܧc/9zզqiMA\ Iۭl6 >~PPek^]>,ʋJ(b}|tʄ$Uފ1_޼uEO{v. &wk uI:^zhsQ?\ۢK$ 9{cLY}V EotpQI\t=$AB1ҩgN@GdH'8\IwE+*CoĴk7jjJm:(:f͸q^R<-G0ӧg:0K|ҥkLO^_XjSגW^y%NT2IwsvuCBzM mQ,c|p@:fę`0=QölAFfqWVn׸Z}N%,V~XVpxug F!BʋWPp{r{8FY mn"AuyV0H^ 2|CIǮy=*tܸt?0I(Uؤyno`@3VυB 'Vד6|[FQXQTzf*Z3*Oam/+OsԽI'kLOKAb|\F=Hj36K6Nr{i`bn|_R!)Q{ynmx2 z@ʥy]Zivvo{M, aɅC$2`˰g%"ho#}j'rI`A8יC;sO*/s4]ޯ[WT5@STM_*SfHO6P|ӥP iv3K)EzO++SEn?R|]IOoۙ:;R Gxzkhs:N=GɾpZRVh~p5%bH͜mL@Kgj$8/tt9"Mi*AEcؠ\+>Ѣ}ogHJQ R٧f2 BxNRfj]^36ńE'Bf9Af}{ty`؁)jݵoERo'-b EPUpA)+Ftðf2#u^ Tg7)>l͵n]P9-Nx9ѡa71NΠfJR_^XoG!ыR:Gr²w@4T}>@ց7Wϖ[Npu~|7ho WN2Nzryn?EۗDxH1i~j=inB-Hq &ϘueS9.G|ѶQ08sh ,|RFELaͶX*#f:C`61A^įgJ4.IsٯsMKc{UA@HSnےU>HjnVYqرO H$.[zVVswv`Qw JÄTRsyrs3NN#veFy~yP.MV88Sīt6/}۳n<0Maԟwno^=4]}=*^Ӌ/$WGRXRWݧ_%!bEkd,-SvԸE,sA[ۅGCgxZD>Jo'DG8Qtyh`cps nI,Uxmoy)|HǠu\Zjwup}F1t j}>$5dʩ_ &qd *a.yCj:?ӑ;D黐rJ'4}- eܧT`ߕN5CTRMb#[\ QܓK7UўI!rj<ߕC)J~K).Y:'g>VyYHRs֐1HH N{xjiuy3Y2NȽmYQXjj/(l RɗiJANja A'#l4&Sc%J=kәV( D̞{ofDSH[ա_.#IrMTgh]a(?|@(H^8Ei~{up jx"tݯiDUg"4W݂A>gvhywJ@eӓ8#mG\L_IXU-iMJbh4$O*HʢaJ?Kkt?%CE_k>(-Ky¯a-(R]ޤa4*Bq˰l\N7.Uk B͛\53S˚bJS`^Xs;,ʄO;JvĬq=6Yݚ5Kx2"^ˏXPtut0sfaI3R~q{h>I׏< A6oe;?r;U* Kl còa;Aoj>-Me0ȓsdP7/LβM.=z^5wQFFMd˲S&(o2LZ51CaìdF3/M~תnLMgvRA@IUqvՊQ>KmkUZt֩DC#2atUXvuwX[lQ~RUwwtm.!VE*[L||{J/TO>. \ëm16ڬh82Rށ kϚuno[;6ev8-dπ',ގSHTWPZ٠X!&j<u])2WxҴz?2|6g~DFjvXB>MsPޅC9Txwf`dqӻi}C0Zvlo{w!p QěrZ[lxup>:gsv:#9iʤW+{Z3Z5z<"t4FΉ3M涌nE&9%&mٟKjٌI6DTRNhtcS[֊F8Yϕ@(z^Fڋ?+P{F(1_/3`?[vWGUxч(U?T~uiiwr,f' XȻkXRZlc-+v}\ĒdHAPm[ K+f0)X\S4"uϒP&!IȘyoc?]=eҚZ+$PlLVhh[cIu<)NߢX7Im~yu׻f vn"}ڨbC[` ;N'y>Alrh}qGBkΊ0-bMYLcDaG6fLLeb1%VSŞ|^G?Oon;&J: jޣf;)/P[(/Hhٜ[1*Fvʭj[L5/\_KʕW34Wȓ^ITa]Zx/7~K:M|çj:9]ڐ+Wp,'gljUSyuo*!~]k݌D4Wq~cV{quzy}zx|rpvuw~~wy{~oo}~zz{vwrr|sy{{mu|ifv~{{wyz}|tuuwqqiODLejNJMlůs^P[PZ~dYOHev~nPR[`t~ڽ]fz}nE/Mq}~~}[RQZkifg}|`}weqgT|ʿЖxNTVor]Bfzνs[~zy1E~|igb}žxI;+BWZxkjkҷ~`ngin]_qҞZ@)`cbPqtV8'>CH=LbFZfʨ|oh{pRt͝]?, Ruƪrv{GD2CPLiFO^>WoʺvXYJ`dw[srƏgvtɬu{rY^/-GfeTc{~qZ7DAQ_k_tk{}ib\zze=PatCCQGci~h51Rkhtvzh{yǠeһ[mkr[myxY53O^obI?p[KC0@AXpjr{̹pozyrϢ^juWMs|uQLHHxx]SBABRdrfp|jvtsZ@TpǯepPZr{ra{SB5MlQTUhxRBFY~u{rcRWsjrhǨ}`Lxʨqrq^>?Q[zar{qL5J^o{fmiffZÜufhri{xeWwӮoa^nV^kƹwm}hO?Ciwegugk{P8..8Yc^͹kNPnntZTc~rYD@NtgPDNgaERn}laYz~t_h|zsvs^ULTlmNNgxU>>`pd`g}Ƨlolrqskdlwxk\[lp{kcB*0Q|ZVZhvdQ]myp̜|zdK@jd\XM]kcRRRcg~eL28]xrjlwy~~w^fuxzk;=Qm|tSVTxxm_b_tgZ[inn~{qroyvsRBCo{mecZVNSiyxM_|chspj{wmgz|^QRf\Zl}f8GWrxbVxue^Mvx|opkbtchhrVi^ynRFiwmhRToiLbu|sonkMfk|hZf|ot`EZzT_OkkQ_`hV_ervT_~qztrbEgt|ghboi^Wlkbcir{hGUtxn~dumbxr~e\Xi[c`}\_TZuH^tf`Ehzul~nfW]ns~wx[MdjOYms\9WyoMYNsl_Sz{dI_itcrvpkkfŔwSekU?\icSglqIQ[}}scNborngZwz`o{}zjZovNMTegfxQ>Rfy_TywlYdcewrbzmXGmwooewl[fmubB=n}[VVfnk]ghoaXW{SWb}NA``M@\ãw_ebf|QIKl}[_joqp\huùn~z[DNsifrl]S\lymDOl|vrWS`ypfogwf\xcWX{tdn~yFH\}u]k~sfYFRu|qsj]Sq^brs`Zg|iGKmsUY~k]K_jxtpo~fX]r|a]qwuW[qX^XiuRSeZRWrvqe[eu|su}|]SprfreY`hn}fenubCF_wr|vwn`bhvqV\vjskciykRZzxhfc_qtvtp{`NStrevt`WVl}Z]xfN\xud_cnps`g~}{dURg|j]o~^Y\sx[mwaVPhn^uaKHi~zri^{qd]TTxs\bnu]diXeXið|tzw\UKS`fviT]gcedLhmE@eslf_M`}zhP\wŮskgt{}oVYbwmRLvt`UFnklrhB@csu|kZl~rVFqi`ToydYRgqyUN^rHJnqwxjSMvojmrpfXVRiffp{I8Jqnl]lʨkWhnt]Xfzpv~zhna`ky[bnlR0Izr]STɷeJb~daeoehmf}}[Lj{{eQNkRWf{KGQx`g{xW]_`}l{oPPt}c`bwe\WmwjLUlq`Wu}ocvzfrkd^~xsvosn^EH]tOO{ʱqV^]i~k]vjdavwxs{rievwlDLsqcKhn`ShoXNe~ofn|qzx~{YfsugZmp]\[}xVO]~`\qpraetwre\w}}lXurf`_owOPbyuPRjfUimvihzmf~l`blhgll}tKNi{bVFaodf{g_b~nkytxwsxza\gtnT`o`Um|~`V\bGTszzofvvtvmrww[\pmcslca~dAOgr]Woqwyu_f}}pkam{vhfar~WTZx`E[ylmmf|ybkmbWkxocjxj\^ptUWd{fQc|uffovx[Mcmc`r~ofjy}aY^rx[azvaPEbo[[sfQQg}ibjqegn{xcjyjRWz~h`do_MWydPVirddim\_iwt^e{oXHQtf_nseVY|uVHWslityjV]qx]a~vlecgnl_ktPBV}ohcu{aW`ggRZuh\`{plikwyXPjlTMdxqosuP>Usnkrpg\\^thfnfOXosdYsĢdZalkRSmsa[ig]cm~hfs}oUTnrdbxaTUn{fakm`MWrw`^u}gXhzydW[}pnwzgNJaiZkqNLTc|zlxcNC]~{}su|kecjosT]||ogZmn[cvdV_qjX[h~xyxrvwJM[u~husaZOZ~mbjhS[fq\wsmumosvtjSg}ccrcUfughmqw`O]kwq{t|iHYs{hkfeUkf^e^]dpjgVhhk|zebPXvp|ibZjw}dn~mHOjeh{woTW|}pdehspgkwux_imzecswedWkzzpWPQ|qo}{_gtt|yp[fxZXm``sq{iXpnQU^{xumWVhj{kound`WZzvv~YGOtwejxuelkyiPKsogfnabestd_opSK_xwhkhPQesmccz}nb[plYjylVdyvpbTnßpdhscKA]tbe~x\][duzcvq]Oe|}njh¸fRYmqdLQscT^iM`roevz`SNjwr{~jPPaxfQb]UV]tj^sqXPm~tkdmuvuvqp~_P`zo\_xhS\cqy]QjpWP]~v{}~cR_o{_\{|hk^Zs|[DMnjTSvwofWWf~xjOQn~lg~u`\[gfUY}yWM]riactWNezbc}xmfls\[rg`laJWuc_kyiMX{u^h|srysp~rlevwb[k{YXZct`izsTG_tqutylknmpuykiyv`[fpj|wz{YIes_Ya}soy|c]]mjgy~rqm\crngwaFPvphkrĵr`\jxvZa|~dbm|}qpvrtz``|~wc]ZexrlrgKRlzg_xwxnbon_k~x}g\gztiff~~dclmQOntjkt`[hqyyqt}eUOi~{w||^Ufz{iWcukooz{[M^~sgkym]aosuwiVYqylgdX]rzhYkoWZrthmrrlkvxrUKdulovhKQimct|eX[byww}~}x\N_vj[gqrnnrx^LcnnjhXWhtzrmxyVCVukkzqRTVotaavf^RddknUPiqvs_d{xp\g~iKHizocstgVVkyYex}s\Jd}yqhsyXP`ftqaWfkSOazXRVqvevoifWiut~j`U\sx}k[gwbKEZ~xbl{~`BTtlioowiq~y{qcV]s\bt{_[RTsegwcNDhvtwzeabv}piv~ydUbm|edoxhCQx}gY\_zmevdLXlxv~qj_Tq}bfoTGZtilq­aVc}padu~vnq}o^exyvkp{aMFatjucILc{sjxwjhfgxkk{gTOszodrqfgyt\Of~rddy}\ZcoztnzpWNa}|yx_Tdvz\Rfmdehuifqoht|uokkoxzyuy|XGMmvddzj`_eo{x`_zxpfivws~z`[cp`Wdp`cqeYftujqwmhbdlf\fw}olx}iddn~oVSmoeh{sjhkxvmq~{poz~pny~cV`n|vcg{lZV`qfnwdhv~~zplyprqyr`\lo]bw{e^Xehdoua`lz{yznkrxx~njzqZN_p_eo~}aYfo^Vaxv{|pgiyj^kwoecki\cwlJMp~kelq}qp{|xb`rtmszpkddtvTSrcQG^tmrp|~]O_{vimxyzqghtf`hu~fV`|qe][up]YmgW_vtfg}vqqmyfZjycO]zhacqrSLaiW_wrdbxoelx~vfl~dT[zkfjtfNYwoUMlsenyj`l~waYozpens~cdp~|YGa~qffpg`immvZ^wpbc{uwvnsqY`s|iaZvpjnpxrWTigUfz~sop{ghhueYhnh]tobgsgQUpwlskdhlxzluyfXe~zljquXSoh^lqofcxg_ipdkwb]lvusz~t\atunjwrcdnyp_gyu^[lvutlxlmsz{iUa~qmn~qU\f||ek{qj\Zkr|}|o]_ssb`zxupwvgV`xye]rn]lourfl~pVKexsvza^]iuoevsi^auwlky~n[Vjwkhm~ymjieX`w}igyzlimltrffdPOb|thbuuf[Yhxvcf~w_]{n_an{nh|sqf]_wzwprgSVnxjup\U^|ljv~dOUo}xlmt^hx}~~~nYYoy^Zq}bTXjvjiyu\Qa{lx~g\]p~h^ln_XWenbht}aJXyyg]^gyry}}x_NVwyquxdefit~f^j{[LZtyrnk}iYZrj[h|xpij}m]_phYhzn\PPnogo~ZCHhurqe][l~o^i~jY_x}slillY^umVZuufamjY`ptn}r^STtvtvdQVj}tXVvyifbqk\h|s`k}pfkr{ojp{|`SYyl[d|fSWbsxcfnVOc~ux|d_j}|eYdyrpqcOUnqae}~lgaiw{rx|o_^q~wpxvjghu}\Sdn^Ypzgfimzait}sidu{rtzg_i{oeo~oaTZtocnxfW`z{ywqitytvz~t]ZntdbsvZZ`yn`g~m^[i~xpr|uiht~{}uqxme^olckub`xugYZloqtegt{zpgx~rssxrglv{`Yjrjgiz{jkx~~qdiuxq~}qqkkw{uil~gKK\}g{~nzfPNrrerz~sqYnuug^q}smag{uP]me\d|wwlirvvwo~sqyeRUi|i_dwxf`yobi}smoykPXn~oo~yne^lqjs}r`_kvf_qx`\cstf`t~iX_~|skkn~rks~|[GRmzmbjaPPauwhc}|gbk}t{||weao|iUXwjegltTBZwi]`{zlkhry{x|}_Ve{~unfmxb\_niQX}ufgu}g\`htshv{p]]r|obfoPEXvmetl\T_s}f^lra]p}||m_epmnrfU[swgc{lVVg}ubft`[a|{tzs^`mp~garubPZzfSSjq_d|xqc^cu~y{zfYdqykl|l`[`sibkkTUsnipw}ihmuz~t]_{qeh||e[\crueop_QMdz|bT\ousm^^jjdncOW~tkmmts`j{dU`z~xw~ud]ZgtowmTL[xysx}u\[u|tpjdhy{zsuwZVeznem{ykaZd~vmwgTO^~y~^[altyqzpSKd{jkppwcgxzj\Ypzx|u\Qe{|t}}l_Y]vxmw{mMDX|sdd~uhmtvx{}sd`~{jj|{i`bo{wmunYGX}{|yw`Ues}rbn{lhlktvpx_P]z|yqclrmipbHUyxw}}gcgfl}vvthUUm}{qyzZ_\pX^`l||bNao}YVvwvqrspeqq~upudPF]ojdzmQNUd|mcupi|{z`_ptr^OOfnQEUyvXWisikx~V>Pt}zv}xi`q{e^tlXDRlhS^pILosghgjyze^fra^hgZU[rmJQr^Ue|\Xgjg^nth]cuvcVXue]ukVLOfq`egut^Tg|qftyllam}r}}i`mu`\^h`IXptcWWmwvwsns}~|t}xhYTmynr{x_Wl}wm`]h}ohfoxpt{eVf}rqntmkxwdUbwljx|eaiv|{iiy|n^exierw}{hh{saWa}ss}n]`lk_i|ynrso{~~jVTjzyxxuecl|z`Sfxjjjlzqpsuolzxkjqyxos`U_upbVcvvtsxvgklcgzup~tdbjvn[R]{uoove_quhmqggzxib`mj`izjblurwo[bs~oim~{qf]dxpixxeanqdq}jbmx~t__k}kXSt|efmpop}j]_~xrqwpeeql[d|uhaljftz~hXl~ui`l~ronm}dPPh~ee~sodmymm~z^[h}~wnoywh_fus]bsss^j}rdu|Xxapv`hhjzrh{|pTU\|mjnqhgTa}eTbz]lp|{~jmfmwh]w~{mTZgnr{bc[gulf{}teLKoqhg~cS\dpxqp~ugqvugfbixzvquve]tbdd[ccy{yzwxzjvigj_pwZ\j|][v}mXYbrj`tr^sdciorxuialmuzTUirz}ycown^glYgqcf~mWY^byjhsvnkx{td]dqn^n~xVNa}yrvk[\kx~koyxmdjvxu~q_]ps[L\zuigm~fXc{opu|oc_kx~nUNYevzh\jllqzznkujfx~{z|~oiqsv{zyfWVm~wy{q`fq~f_i{oabu}fWZm|po}zskm~kXg|wii{ugciltvtttcYf}~y{wxqjjxvaWiysh^^pymmrnakzsyw|yzy~{b[evuidnpcYYe~q\jy~pmx|pgt}ve`kt`_uiX]ljgz}tgepunt}|ubXZbsqn~wigk~hi{x\Xtk`^gwdVapvb^f}|vnwxlov|kcjsWK[wvmty}kW^z~|~[k|o{zuWsiMzYga{ksPZgpmWoUwnslvccgd|b\e|nXPf|elcnv\]xvst{jmekshMZlv~|qeutrk{v[W_wvX`{}md]sprqjoyr[|is|}qq~{uKRgALMo}uhagRrvpn}cpkn|tvhz~}}rtaUJTvrqvy\P\g{|~i`kyutsp}tsv^\cwnbl}{eV[rbJ^ticjrekjtyowykk|smlnxt]O_}o_bv}}z~}kkv~ufdlusliuzzvyqntgOTuyu~nmp}|^Tivieny~ynks{pstjqrroIAUrpifx|yupjl~xs}zjiny{nuzcX_fx~mWWqtd`xokmt~t^[k}uxye_boxmgsodcqrdjysebiuyngp~vom{schvwt~f^aiu~tts`UYn~trsxu{~snhmvxmw~uw|oim{l`e~{okcgv{vxxy|fOViw{mbQOosxwqzsVk|}rlzvzrvgizn\kszbY^jqgl{zpdUexnw~b^co~~zvuggryiep~j]b{ocVQe|jpyj^]m}pgckpusYstbTIestxznhi|s\Yfottnw~xuhfq~qn~{WHbpy~yycW]qxljlz~qhaiywkq{q\`yun_btjYZjt[O]wtyvcam~yv|}lmjffiuvtuw]HPjzpovvnqkSWmnebm||rmjhhotmwye\kxwuXLXj|vv~ma^g}|smpzlfkz~k\d{zkbhzx[JWnwqxregm|vx}{fVS]t{ptmbWYdv}nl}m`h|{ifu~wtw~sfWVm}z{|sbX]ssdnrg[btttzq^[j~{rolq{e_mtecq~od[\gz~ku~g`fs}ockt||j`n|iiTkhqb{]W{|~oowk{mrz|y]ezufsklkhxck^OY|zlalu\dbjrm|}tuvnpkwngaujVdyv{w}}p`[^bowuzvptx}tnmtqYMct{p`acqwgVUitnpyyolnt~~xrghx|vv~rYPUlwcakuvtpwvjxwppzxxmnqk{qovhSTmyw}t`WYfr{no|rjegyxwuwz|gbupju~sihvs\S\qpcam}xlltvyzudhtqbeqhdgrva]ho^ctulit{rtxrgXg}vnr|bXcp{hd|ub]mpcfrun`gqxqc`z}xndpw`[hqhbjy|mgrykZZnzwtwrnmt}lYc~zjY^qldisobq~p`_i~~{urk^kwvyluP\wppjhtgna\uyoeujuzwn\dp{vhl~|l\X`wonq}ue`o|v~|mkt~}~nfgvoag|viow{|i\buma[dojz~ve]k}~vyvnmt}xtwz|hRSm{i`clywijvyc_rwrspp{xhbt~l_]f|||~hdrsfiwwrsjozj_fxuntysi`ezpt|xd]ezywqrx}vgiuxqejwsyxts{qejy}xtlbbqvmhfroVXr~ux|sidm{}mgkz~ypc]k|kmwrb]synonelwtmt{~kY]ruutzcYduwmuzmiq{qilsadvzndfs|qtzwu``tsjjwg[`nw|stzaNim~||j{petznnwsibsv~kfeourlymYb\^sxn\[yxpvzmlt~pbj}xh_Zhrx~neox~kZXtqhk{yb_fwyc^pzpjdjk]euvroj]]iwe]]nhXeyqjv{pns{ylh||rgagy|qgdvmYU_szmwfW^xziku~nlvwg[`w|ups{k[\fviY]z{ogmvhkv}p]cqukljlq}vnt}k\Zjye^dkwibnteap~|tnt}wlhxvk`boldaph\evslr}xmlosukq~ss|sgem|np}yhSUg~|so~u`bl}{qhq}tsrzitu~yl\l}j`hh^botct|r|unjqvv}{}n`Zm~xl]dwvfkz|g\jztqtpmqw~wtu|}pkt~vomvrjnzypmxtkqsztqr~tlvztlddqqhhl}j[wtsvreakw}pq{~{w{}zxpqz{geqzvklzvnjuv]Shvger|uot|qtyxsv{pln|qqzz`\duwofjzunot~y}zml{~ovz|k`gypeexujb`vrkq~qnpz~thhx|wrv|xdfrykm}|ghkzqhlvvjdj{~stxyttw|rc\t{intt^go|vmhqwrc`ozw{~kkrvhhlxxjhstekvi[izsohluoglk|}kamyt|l\XZlo`etjjyxrluxcamx|yrhgovs{{h_iwujssihvsegw~m^`o~}wythgl{qfgxrd_kqjmuvjxujY\oyljrzynjuycW[psrxm\Yj}rhi~vkkiqxww||das}skgcix}xv|ePPrzxy}zgflt~mq}~lfgw|unjrt_dsteal{uv|{g[f}vvy}ypgcbvy~}fYcjyvqvlfcoz~qb^nunyyrlowswy~n[\t~zzr[[dtvtt~ue^]j~~m__ht|}tnvxutzwe]dy}osvf^jt}su{tf]dz~~uhhlyujowlkuvnq{qowzuideftz~z~~fOYkxvneahn|y~sfal}~rcehsrfe}xrr}sads}wnvrnkmvzyy~jX^k||svpeY\p{livxikx|yuwyxosxoei{wt~oZOYgxugj}qheq|vwwji}rnzvzmrx}sf\gu~}n]kxd\jgzqr}vi][y}m^jnxsq|gVb~~uswsa`ix|ywpgYWx}|}wnju{rzvkgmxumjtoXSbzurt~vrs{~}nixslmxugfhjvqitr_Yg{vq{ybRZm|ps{rlnzrt~tio}ojcrtaXbpo\\qvvvnlt}vqx~~tj]Zf~uu{dY_o~limndrvihq}roq{~rlbc~jmu{ple~{igx~[[jowwtws_hyvyr}|~nhwv{tfco|vv}kbXcu|who}|sljr|zlp{xhfrzfe[[u}syr_]n~xvsnq~~ursuyniovy{opsxin}znehx{sgdgn}zvonz}pjiwk^`t}nfltg`as|uz{qs~uuxnjklr}}qjds|osqkmuwptxm]Xixvvsyyvvz~ttzukiq|uy~wc]hwyrnkxyouvuznv}quwl_elv|rou}lgqskvz|ot}pa_s~sro{|ormpxwgo|xsgYi}|scam}wqr{|tqou}z{jlwvmkkuse^jy~gZ\k{ytkks~zx|ogjvsjow}f_gz|sq|~qgjtt`V`p{oswk]cy{pxrdf}{on{iYXfr~~upr|shl||{~{pjms}j__rwtvn^`nzzpvvjfmtru|ujWbmtnktwuru|gcy~ren~}phlkmuuklpt^Zaxu{}o[\k|s{xkbdm|}wpjmwtot~zmm}wkgj~oZ]ptqytidfm~}thmt}qnvlYT\qtrf[\svien}vpoz}{xqfbq~|}omr{}nn}vf]gwzopw}h`bo|xu}y{|}mckzxgbqylghp}xtyjbjx}rqghu~qrtsdbkzwmt{rofvxus~{su|thjs{oq|tklisuu~nabm|zxxjmty|}ztlq|{sv|tnsx|omq~|ypdfrvqyzjky}w~}wmjjsywythdn~smwrs|~zlbgttljt~y~thfssstzd`krxor{}plps~wwy{iksyrlluwuz|eYgyxvopwpjy}~usxzwv~{vvuvvvnrvshqxuvwtmnwvnszwqnotz|l_gvztu~}qjmvwhj{~vvzzutvw}wnq~vmnuyolqngn~~rnu}qljuurzvnozwtvroqv~lfm{~qozwjgnzzrt~zsq~spqzwsvy~zljtwihsxmq{xlq{prs}~}}tpq|{olsrjmr}vpqxshlz}{tsv|~xzx{xquztu|rps}vdevvrr{ztrsxzsw~wtw~zqyxoot|olwzqqstqu|wqs{wsu}yvwzwrwyrtulhp}wovxqiq}xsu}{uvxz|vu|zqsxvqtxznlvsov~{xwxyyyzy|x~~|xuwv~sv|xmv~~wy{|{wx{~vquwv|~||||~yuu~}upp{~~xqpvzwy{xssv~}||trx~xvux~urx{xnlu}~|yxy|vv{zvrs|~|}~vs|yvw~|wusy~}xsu|{z{~yuu|~{snt}|xqsx|}xyyx|}{z}|wx{}xst{}y{~wswx}}yuu{~xrs{{y}wsux}||}yz{vvy|}|}|uqv~}xuy}|y{}{z|}}~yuz~zz}}zy|{xy|}}ywxz|}|{wtw~|utu{}xz~}ywx~|{|y|}|z{}||}|yy|~|~|yxz~}|}zz}~||}}{z|~~{z|~{y~}zyz{~}}yx|~{z|~~||}zxx|}|~~xwy}||~~~~|xz~}}~|yxx{}~{xz}~~~~{z|~|~~~~}}}z{~}||~~}~}zz|}{{|~~~}~{{~~}~~}|~~}}~~~~||}||}~~~}||~~~~~~}|~~~~~~~~~~~~~~~~~~~}|}~~~~}}~~~~~~~~~~~~~~~~~~~~~s(wwwxxwwwwwxxwwwwwxwwwwwxwwwwwxwwwwwp((3( @wwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwwwwp 4VS_VERSION_INFO4StringFileInfo 040904E4+CompanyNameLars Hammer / KIWI Hamburg(FileDescriptionTDK Pinball MachineFileVersion1.00InternalNameTDKPINC/LegalCopyrightDeveloped 1995 by KIWI Von Wendt Konzept GmbH.$ProductNameTDK Pinball Machine ProductVersion3.10.0.0$VarFileInfoTranslation  File OpenHelv$ PFile&name:*b dP$ PDirectory:*b eP @ P&Files:,@RfPL @ P&Directories:L,@RgP2POK2PCancelFile Save AsHelv$ PFile&name:*b dP$ PDirectory:*b eP,@RgP @ P&Directories:2POK2PCancel@@Helv  eP  dP/*(POK]*(PCancelȀBorDlgFile OpenHelv$ PFile&name:,h dP$ PDirectory:,h eP'P&Files:0@RfPT'(P&Directories:T0@RgPhPBorShade$H`iPBorShade$PBorBtnButton%$PBorBtnButtonjPBorShadeP$H`kPBorShadeȀ BorDlgFile Save AsHelv$ PFile&name:,` dP$PDirectory:,b eP0@RgP%@P&Directories:PBorShade$H`PBorShade PBorBtnButton PBorBtnButtoniPBorShadeȀKBorDlgHelv  eP  dP fPBorShade*,$PBorBtnButtonf,$PBorBtnButtonLI 8x~; Pinball INI-File by KIWI Hamburg [Settings] ; The speed setting defines the "time resolution" of the graphics. ; The higher the setting, the "smoother" the ball will run. ; However, if your hardware is too slow for the current speed setting, ; the pinball machine might "hang" or not react correctly. ; The speed setting DOES NOT influence game speed. ; In any case, try setting your Windows graphics resolution to ; 640x480 pixel in 256 colours before changing this setting. ; Speed=1 for slow graphics hardware ; Speed=5 for very fast graphics hardware ; Default: Speed=3 Speed=3 ; Sound=1 for Sounds on ; Sound=0 for Sounds off ; Default: Sounds=1 Sounds=1 ;Language=1 for english helpscreen ;Language=2 for german helpscreen ;Language=3 for french helpscreen ;Language=4 for italian helpscreen ;Language=5 for spanish helpscreen ;Default: Language=1 Language=2 r-`xKIWI Setup V1.06 at 06.01.1996 16:46:26 ========================================= OK copying A:\A00\BTIUnZIP.Dll --> C:\WINDOWS\BTIUnZIP.Dll, Attr=-R-H-S+A Externals/AtInit: *END Externals/AtInit General: Application = TDK Pinball Source drive = A: Dest drive = C: Dest dir = C:\TDKPIN Windows drive = C: Windows dir = C:\WINDOWS Windows system dir = C:\WINDOWS\SYSTEM System current drive/dir = A:\A00 Externals/AtBegin: *END Externals/AtBegin Disks: 1: TDK Pinball Diskette, TDKPINBALL, *END Disks Directories: Directories section terminated normally *END Directories Files: Number of files to copy = 4 OK copying A:\A00\CTL3DV2.DL_ --> C:\WINDOWS\SYSTEM\CTL3DV2.DLL, Attr=-R-H-S+A OK copying A:\A00\READGERM.TXT --> C:\TDKPIN\READGERM.TXT, Attr=-R-H-S+A OK copying A:\A00\TDK.001 --> C:\TDKPIN\TDK.ZIP (ZIP file) UnZIPed file C:\TDKPIN\MMTIMER.DLL, Attr=-R-H-S+A UnZIPed file C:\TDKPIN\TDKPIN.EXE, Attr=-R-H-S+A *deleting C:\TDKPIN\TDK.ZIP OK copying A:\A00\GERM.INI --> C:\TDKPIN\TDKPIN.INI, Attr=-R-H-S+A Files section terminated normally *END Files Externals/AfterCopy: *END Externals/AfterCopy INI-Files: Number of INI-File entries = 0 INI-Files section terminated normally *END INI-Files ProgramGroup DDE: [CreateGroup("TDK")] OK DDE create group command DDE: [DeleteItem("TDK Pinball Machine")] DDE: [DeleteItem("TDK Info")] OK DDE delete command DDE: [AddItem("C:\TDKPIN\TDKPIN.EXE","TDK Pinball Machine","C:\TDKPIN\TDKPIN.EXE",0,47,0,"C:\TDKPIN")] DDE: [AddItem("C:\WINDOWS\NOTEPAD.EXE C:\TDKPIN\READGERM.TXT","TDK Info","C:\WINDOWS\NOTEPAD.EXE",0,142,0,"C:\WINDOWS")] OK DDE add command ProgramGroup section terminated normally *END ProgramGroup Externals/AtEnd: executing/Wait NotePad.Exe C:\TDKPIN\readgerm.txt, WinExec= 0 *END Externals/AtEnd Deleting temporary files: OK deleting file: C:\WINDOWS\BTIUnZIP.Dll *END Deleting temporary files: Installation complete Yx/* * Raw Ghidra decompilation of TDKPIN.EXE. * Function boundaries and names are analysis artifacts, not original source symbols. */ /* ===== 1000:0002 FUN_1000_0002 ===== */ void __stdcall16far FUN_1000_0002(int param_1,undefined2 param_2) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; uVar6 = param_2; uVar1 = CREATECOMPATIBLEDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,param_2,uVar6); uVar3 = CREATECOMPATIBLEDC(0x1228,param_2); uVar4 = CREATECOMPATIBLEBITMAP(0x1228,0xe,0xe); uVar5 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar6 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 * 2 + 0x430b)); uVar7 = SELECTOBJECT(0x1228,uVar4); BITBLT(0x1228,0x20,0xcc,0x4d,0x54,uVar1,0xe,0xe,0,0); BITBLT(0x1228,0x20,0xcc,0,0,uVar2,0x7b,0x2a,0x4f,0x37); uVar9 = uVar1; BITBLT(0x1228,0x20,0xcc,0,0,uVar3,0xe,0xe,0x4d,0x54); uVar8 = uVar3; SELECTOBJECT(0x1228,uVar7); uVar7 = uVar2; SELECTOBJECT(0x1228,uVar6); uVar6 = uVar1; SELECTOBJECT(0x1228,uVar5); DELETEOBJECT(0x1228,uVar4,uVar6,uVar7,uVar8,uVar9); DELETEDC(0x1228,uVar3); DELETEDC(0x1228,uVar2); DELETEDC(0x1228,uVar1); return; } /* ===== 1000:0100 FUN_1000_0100 ===== */ void __stdcall16far FUN_1000_0100(undefined4 param_1) { FUN_1018_1b57((int)param_1,(int)((ulong)param_1 >> 0x10)); FUN_1010_03af(1,1,1,0x222,0x1028); return; } /* ===== 1000:0121 FUN_1000_0121 ===== */ void __stdcall16far FUN_1000_0121(undefined4 param_1) { undefined2 uVar1; undefined4 uVar2; if (DAT_1028_06fc == 0) { uVar2 = FUN_1000_01d3(0,0,0x9e,0x22c,0x1028,0,0); uVar1 = (undefined2)((ulong)param_1 >> 0x10); *(undefined2 *)((int)param_1 + 8) = (int)uVar2; *(undefined2 *)((int)param_1 + 10) = (int)((ulong)uVar2 >> 0x10); } else { (*DAT_1028_0666)(); FUN_1020_0061(); } return; } /* ===== 1000:016c FUN_1000_016c ===== */ void __stdcall16far FUN_1000_016c(undefined4 param_1,undefined2 *param_2) { undefined2 uVar1; undefined2 uVar2; undefined2 *puVar3; undefined2 uVar4; undefined2 uVar5; uVar4 = (undefined2)((ulong)param_2 >> 0x10); puVar3 = (undefined2 *)param_2; FUN_1018_1274((int)param_1,(int)((ulong)param_1 >> 0x10),puVar3,uVar4); *param_2 = 0x3000; uVar2 = DAT_1028_06fe; uVar1 = LOADICON(0x1018,0x3e4,0); puVar3[6] = uVar1; uVar5 = 0; uVar1 = LOADCURSOR(0x1228,0x7f00,0); puVar3[7] = uVar1; uVar2 = GETSTOCKOBJECT(0x1228,0,uVar5,uVar2); puVar3[8] = uVar2; puVar3[5] = DAT_1028_06fe; puVar3[3] = 0; puVar3[4] = 0; return; } /* ===== 1000:01d3 FUN_1000_01d3 ===== */ undefined4 __stdcall16far FUN_1000_01d3(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { int iVar1; int iVar2; undefined2 uVar3; bool bVar4; int iVar5; bVar4 = true; FUN_1020_03ef(); if (!bVar4) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; FUN_1018_1106(iVar2,uVar3,0,param_3,param_4,param_5,param_6); *(undefined2 *)(iVar2 + 0x2d) = 0x280; *(undefined2 *)(iVar2 + 0x2f) = 0x1e0; iVar5 = 0x1018; iVar1 = GETSYSTEMMETRICS(0x1018,0,*(int *)(iVar2 + 0x2d) / 2); *(int *)(iVar2 + 0x29) = iVar1 / 2 - iVar5; iVar5 = 0x1228; iVar1 = GETSYSTEMMETRICS(0x1228,1,*(int *)(iVar2 + 0x2f) / 2); *(int *)(iVar2 + 0x2b) = iVar1 / 2 - iVar5; *(undefined2 *)(iVar2 + 0x21) = 0; *(undefined2 *)(iVar2 + 0x23) = 0x86ca; } return param_1; } /* ===== 1000:0270 FUN_1000_0270 ===== */ void __stdcall16far FUN_1000_0270(undefined4 param_1) { char cVar1; undefined1 uVar2; undefined2 uVar3; int in_DX; int iVar4; int iVar5; undefined2 uVar6; undefined2 unaff_SS; undefined4 uVar7; undefined1 *puVar8; undefined2 uVar9; undefined2 uVar10; undefined1 *puVar11; undefined1 *puVar12; undefined2 uVar13; undefined2 uVar14; undefined1 local_2d2 [256]; undefined2 local_1d2; undefined1 local_d0 [101]; undefined1 local_6b [103]; int local_4; DAT_1028_07cf = 0; DAT_1028_0874 = 0; DAT_1028_0875 = 0; uVar6 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; *(undefined2 *)(iVar5 + 0x41) = 0; *(undefined2 *)(iVar5 + 0x43) = 0; *(undefined2 *)(iVar5 + 0x45) = 0; *(undefined2 *)(iVar5 + 0x47) = 0; FUN_1020_0167(); if (in_DX < 0x40) { (*DAT_1028_0666)(0x1020,0x2010,0x2aa,0x1028,0x260,0x1028,0); FUN_1018_0f38(iVar5,uVar6); FUN_1020_0061(0x1018); } FUN_1018_170c(iVar5,uVar6); uVar14 = 0; uVar3 = LOADCURSOR(0x1018,0x7f02,0); SETCURSOR(0x1228,uVar3,uVar14); FUN_1008_0023(*(undefined2 *)(iVar5 + 4)); FUN_1008_1326(0x4450,0x1028,999,0,DAT_1028_06fe); FUN_1008_11c5(); DAT_1028_07cc = 1; *(undefined2 *)(iVar5 + 0x4d) = 0; *(undefined2 *)(iVar5 + 0x4f) = 0; *(undefined1 *)(iVar5 + 0x51) = 0; *(undefined1 *)(iVar5 + 0xbd8) = 0; uVar7 = GETTICKCOUNT(0x1008); DAT_1028_0722 = (undefined2)((ulong)uVar7 >> 0x10); DAT_1028_0720 = (undefined2)uVar7; *(undefined2 *)(iVar5 + 0xbe3) = 0; DAT_1028_07c7 = 0; DAT_1028_07c8 = 0; DAT_1028_086d = 10; DAT_1028_086f = 10; DAT_1028_0873 = 0; DAT_1028_07ca = 0; DAT_1028_07cb = 0; DAT_1028_07c9 = 1; *(undefined2 *)(iVar5 + 0xbca) = 0; *(undefined2 *)(iVar5 + 0xbcc) = 0; *(undefined1 *)(iVar5 + 0xbd9) = 0; *(undefined2 *)(iVar5 + 0xbc2) = 0xf588; *(undefined2 *)(iVar5 + 0xbc4) = 4; *(undefined2 *)(iVar5 + 0xbc6) = 0x4d48; *(undefined2 *)(iVar5 + 0xbc8) = 6; DAT_1028_07d3 = *(uint *)(iVar5 + 0xbc2); DAT_1028_07d5 = *(int *)(iVar5 + 0xbc4); DAT_1028_07d7 = *(uint *)(iVar5 + 0xbc6); DAT_1028_07d9 = *(int *)(iVar5 + 0xbc8); *(undefined1 *)(iVar5 + 0xbdd) = 0; *(undefined1 *)(iVar5 + 0xbdf) = 0; *(undefined1 *)(iVar5 + 0xbdc) = 0; *(undefined1 *)(iVar5 + 0xbe0) = 0; *(undefined1 *)(iVar5 + 0xbe1) = 0; *(undefined1 *)(iVar5 + 0xbe2) = 0; DAT_1028_07c5 = 0; *(undefined1 *)(iVar5 + 0xbde) = 1; DAT_1028_07d0 = 0; DAT_1028_07d1 = 0; *(undefined1 *)(iVar5 + 0x61) = 1; DAT_1028_086b = 99; DAT_1028_0869 = 0; DAT_1028_0876 = 0; DAT_1028_0878 = 0; DAT_1028_087a = 0; DAT_1028_087c = 0; local_4 = 1; while( true ) { *(undefined1 *)(iVar5 + local_4 + 0x47b) = 0; *(undefined1 *)(iVar5 + local_4 + 0x48f) = 0; *(undefined1 *)(iVar5 + local_4 + 0x4a3) = 0; *(undefined1 *)(iVar5 + local_4 + 0x4b7) = 0; if (local_4 == 0x14) break; local_4 = local_4 + 1; } local_4 = 1; while( true ) { *(undefined2 *)(local_4 * 4 + 0x97e) = 0; *(undefined2 *)(local_4 * 4 + 0x980) = 0; *(undefined2 *)(local_4 * 4 + 0x98e) = 0; *(undefined2 *)(local_4 * 4 + 0x990) = 0; *(undefined1 *)(local_4 + 0x9a1) = 1; *(undefined2 *)(local_4 * 2 + 0x9a4) = 0; *(undefined2 *)(local_4 * 2 + 0x81f) = 0xffff; *(undefined1 *)(local_4 + 0x816) = 1; *(undefined2 *)(local_4 * 4 + 0x835) = 1; *(undefined2 *)(local_4 * 4 + 0x837) = 0; *(undefined1 *)(local_4 + 0x81a) = 1; if (local_4 == 4) break; local_4 = local_4 + 1; } DAT_1028_0829 = 0x22e0; DAT_1028_082b = 2; DAT_1028_082d = 0xeb10; DAT_1028_082f = 9; DAT_1028_0831 = 0xd620; DAT_1028_0833 = 0x13; DAT_1028_0835 = 0x900; DAT_1028_0837 = 0x3d; *(undefined2 *)(iVar5 + 0xbaa) = 0; *(undefined2 *)(iVar5 + 0xbac) = 0; *(undefined2 *)(iVar5 + 0xbae) = 0; *(undefined2 *)(iVar5 + 0xbb0) = 0; *(undefined2 *)(iVar5 + 0xbce) = 0; *(undefined2 *)(iVar5 + 0xbd0) = 0; *(undefined2 *)(iVar5 + 0xbd2) = 0; iVar4 = DAT_1028_07d5 + (uint)(0xfe0b < DAT_1028_07d3); uVar3 = FUN_1020_08e6(); *(undefined2 *)(iVar5 + 0xba2) = uVar3; *(int *)(iVar5 + 0xba4) = iVar4; *(undefined2 *)(iVar5 + 0xbb2) = 0; *(undefined2 *)(iVar5 + 0xbb4) = 0; iVar4 = DAT_1028_07d9 + (uint)(0xfe0b < DAT_1028_07d7); uVar3 = FUN_1020_08e6(); *(undefined2 *)(iVar5 + 0xba6) = uVar3; *(int *)(iVar5 + 0xba8) = iVar4; *(undefined2 *)(iVar5 + 0xbb6) = 0; *(undefined2 *)(iVar5 + 3000) = 0; *(undefined1 *)(iVar5 + 0xbda) = 0; *(undefined1 *)(iVar5 + 0xbdb) = 0; *(undefined2 *)(iVar5 + 0xbd4) = 0; *(undefined2 *)(iVar5 + 0xbd6) = 0; puVar12 = local_6b; puVar11 = local_2d2; uVar3 = unaff_SS; uVar14 = unaff_SS; FUN_1020_082e(0); FUN_1008_2f2f(puVar11,uVar3,puVar12,uVar14); puVar11 = local_d0; puVar12 = local_6b; uVar10 = 0x1008; uVar9 = 0x26e; puVar8 = local_2d2; uVar3 = unaff_SS; uVar14 = unaff_SS; uVar13 = unaff_SS; FUN_1020_082e(0); uVar3 = FUN_1020_0a7d(puVar8,uVar3,uVar9,uVar10); FUN_1008_2f07(uVar3,puVar12,uVar14,puVar11,uVar13); FUN_1008_2f4d(0x2c3,0x1028,local_d0,unaff_SS); uVar3 = 0x1028; DAT_1028_07cd = GETPRIVATEPROFILEINT(0x1008,local_d0,unaff_SS,1,0x2d0,0x1028,0x2c7); if ((DAT_1028_07cd == 0) || (5 < DAT_1028_07cd)) { DAT_1028_07cd = 1; } uVar14 = 0x1028; uVar2 = GETPRIVATEPROFILEINT(0x1228,local_d0,unaff_SS,3,0x2d9,0x1028,0x2c7); *(undefined1 *)(iVar5 + 0x60) = uVar2; if ((*(char *)(iVar5 + 0x60) == '\0') || (5 < *(byte *)(iVar5 + 0x60))) { *(undefined1 *)(iVar5 + 0x60) = 3; } cVar1 = *(char *)(iVar5 + 0x60); if (cVar1 == '\x01') { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 0x32; DAT_1028_0871 = 5; } else if (cVar1 == '\x02') { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 0x28; DAT_1028_0871 = 4; } else if (cVar1 == '\x03') { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 0x1e; DAT_1028_0871 = 3; } else if (cVar1 == '\x04') { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 0x14; DAT_1028_0871 = 2; } else if (cVar1 == '\x05') { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 10; DAT_1028_0871 = 1; } else { *(undefined2 *)(iVar5 + 0x5a) = 0xf; *(undefined2 *)(iVar5 + 0x5c) = 0; *(undefined2 *)(iVar5 + 0x56) = 0xed8; *(undefined2 *)(iVar5 + 0x58) = 0; local_1d2 = 0x1e; DAT_1028_0871 = 3; } uVar7 = FUN_1008_28a3(0,0,0x5c0,0,1,local_1d2,*(undefined2 *)(iVar5 + 4)); *(undefined2 *)(iVar5 + 0x49) = (int)uVar7; *(undefined2 *)(iVar5 + 0x4b) = (int)((ulong)uVar7 >> 0x10); if (*(int *)(iVar5 + 0x49) == 0 && *(int *)(iVar5 + 0x4b) == 0) { (*DAT_1028_0666)(0x1008,0x2010,0x2aa,0x1028,0x2df,0x1028,*(undefined2 *)(iVar5 + 4),uVar14,uVar3 ); FUN_1020_0061(0x1008); } FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1c9,0,0x7d,0,0x1a1,0,7,0,0,0,2,1,1); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1db,0,300,0,0x1db,0,10,0,0,0,2,1,2); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7d,0xcccc,0x4ccc,0,0, 0x1d8,0,0x78,0,0x1c4,0,0x78,0,0,0,2,1,0xa9); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7d,0xcccc,0x4ccc,0,0, 0x1c4,0,0xc3,0,0x1d8,0,0xc3,0,0,0,2,1,0xaa); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7d,0xcccc,0x4ccc,0,0, 0x1bd,0,0x86,0,0x1ce,0,0x86,0,0,0,2,1,3); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0x1be,0,0x8d,0,0,1,1,1,4); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1d3,0,0x94,0,0x1bd,0,0x94,0,0,0,2,1,5); FUN_1008_0138(0x1b5,0xa3,0x185,0x97,0,0,0,0,2,0,0,6,0x102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1d3,0,0xa4 ,0,0x1be,0,0x94,0,0,0,4,0,6); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1d2,0,0xa4,0,0x1bd,0,0xa5,0,0,0,2,1,7); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0x1be,0,0xac,0,0,1,1,1,8); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7d,0xcccc,0x4ccc,0,0, 0x1d3,0,0xb4,0,0x1bd,0,0xb3,0,0,0,2,1,9); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x19e,0,0x130,0,0x1c9,0,0xb7,0,0,0,2,1,10); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x3d,0,0x12a,0,0xa5,0,0x12a,0,0,0,2,1,0xb); FUN_1008_0138(0,0,0,0,0,0,0,0,1,5000,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0 ,0,0x8e,0,0x12a,0,0x8e,0,0x136,0,0,0,2,1,0xc); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,7,0, 0,0,0,0,0x88,0,0x12a,0,0,1,1,1,0xd); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x68,0,0x124,0,0x88,0,0x123,0,0,0,2,1,0xe); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7f,0xcccc,0x4ccc,0,0, 100,0,0x119,0,0x6d,0,300,0,0,0,2,1,0xf); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7f,0xcccc,0x4ccc,0,0, 0x87,0,0x113,0,0x60,0,0x122,0,0,0,2,1,0x10); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,7,0, 0,0,0,0,0x86,0,0x10d,0,0,1,1,1,0x11); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,7,0, 0,0,0,0,0x73,0,0x101,0,0,1,1,1,0x1a); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x72,0,0xf8,0,0x8b,0,0x108,0,0,0,2,1,0x12); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x5b,0,0x101,0,0x72,0,0xf9,0,0,0,2,1,0x13); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x31,0,0x115,0,0x5b,0,0x101,0,0,0,2,1,0x14); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x20,0,0x11f,0,0x33,0,0x115,0,0,0,2,1,0x15); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x30,0,0x12f,0,0x2a,0,0x11b,0,0,0,2,1,0x16); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x44,0,0x140,0,0x30,0,0x12e,0,0,0,2,1,0x17); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1c9,0,0x140,0,0x44,0,0x140,0,0,0,2,1,0x18); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7d,0xcccc,0x4ccc,0,0, 0x1b1,0,0x14c,0,0x1b1,0,0x13b,0,0,0,2,1,0x19); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x43,0,0x146,0,0x4e,0,0x148,0,0,0,2,1,0x1b); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x39,0,0x142,0,0x43,0,0x146,0,0,0,2,1,0x1c); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x30,0,0x13c,0,0x39,0,0x142,0,0,0,2,1,0x1d); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x29,0,0x133,0,0x30,0,0x13c,0,0,0,2,1,0x1e); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x24,0,0x128,0,0x29,0,0x133,0,0,0,2,1,0x1f); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x23,0,0x11d,0,0x24,0,0x128,0,0,0,2,1,0x20); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x23,0,0x70,0,0x23,0,0x11d,0,0,0,2,1,0x21); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x28,0,99,0,0x22,0,0x79,0,0,0,2,1,0x22); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x33,0,0x4e,0,0x28,0,100,0,0,0,2,1,0x23); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x45,0,0x42,0,0x32,0,0x4f,0,0,0,2,1,0x24); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x5d,0,0x39,0,0x41,0,0x44,0,0,0,2,1,0x25); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xae,0,0x3b,0,0x52,0,0x3b,0,0,0,2,1,0x26); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xbe,0,0x43,0,0xa7,0,0x3a,0,0,0,2,1,0x27); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0xc1,0,0x3c,0,0,1,1,1,0x28); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xd2,0,0x29,0,199,0,0x40,0,0,0,2,1,0x29); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0xcb,0,0x26,0,0,1,1,1,0x2a); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xb9,0,0x16,0,0xce,0,0x1f,0,0,0,2,1,0x2b); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1f,0,0x16,0,0xb9,0,0x16,0,0,0,2,1,0x2c); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0x86a0,1,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0xcd7f,0xcccc,0x4ccc ,0,0,0x21,0,0xb,0,0x21,0,0x17,0,0,0,2,1,0x2d); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xbe,0,0xd,0,0x1e,0,0xd,0,0,0,2,1,0x2e); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xfa,0,0x20,0,0xb9,0,0xc,0,0,0,2,1,0x2f); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0xfb,0,0x19,0,0,1,1,1,0x30); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x140,0,10,0,0xfb,0,0x21,0,0,0,2,1,0x31); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1ab,0,0xc,0,0x119,0,0xc,0,0,0,2,1,0x32); FUN_1008_0138(0xa3,0xb4,0x85,0x96,0,0,0,0,1,1000,0,0,0x40,0xcd7f,0xcccc,0x4ccc,0xcd7d,0xcccc, 0xcccc,0xcd7d,0xcccc,0x4ccc,0xcd80,0xcccc,0x4ccc,0x17,0,0,0,0,0,0xa8,0,0xa5,0,0,1,1, 1,0x33); FUN_1008_0138(0x7d,0xdd,0x5f,0xbf,0,0,0,0,1,1000,0,0,0x40,0xcd7f,0xcccc,0x4ccc,0xcd7d,0xcccc, 0xcccc,0xcd7d,0xcccc,0x4ccc,0xcd80,0xcccc,0x4ccc,0x17,0,0,0,0,0,0x82,0,0xce,0,0,1,1, 1,0x34); FUN_1008_0138(0xb4,0xea,0x96,0xcc,0,0,0,0,1,1000,0,0,0x40,0xcd7f,0xcccc,0x4ccc,0xcd7d,0xcccc, 0xcccc,0xcd7d,0xcccc,0x4ccc,0xcd80,0xcccc,0x4ccc,0x17,0,0,0,0,0,0xb9,0,0xdb,0,0,1,1, 1,0x35); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0, 0x138,0,0x35,0,0,1,1,1,0x36); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0xcd7f,0xcccc,0x4ccc,0xcd7f,0xcccc,0xcccc,0xcd7d,0xcccc, 0x4ccc,0x80,0,0,0,0,0x48,0,0x30,0,0xfffb,0xffff,6,0,1,0,2,1,0x37); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0,0,0, 0xfff7,0xffff,1,1,1,1,0x38); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0xffe6, 0xffff,0xffd1,0xffff,7,0,0xffff,0xffff,1,0,2,1,0x39); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0, 0xfff9,0xffff,3,0,1,1,1,1,0x3a); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0xffd3, 0xffff,0,0,0,0,0xfff8,0xffff,1,0,2,1,0x3b); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,10,0 ,0,0,0,0,0x13a,0,0x1d,0,0,1,1,1,0x3c); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0x16f,0,0x25 ,0,0x138,0,0x25,0,0,0,2,1,0x3d); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7c,0xcccc,0x4ccc,0xcd7f,0xcccc,0x4ccc,0,0, 0x194,0,0x6e,0,0x16f,0,0x25,0,0,0,2,1,0x3e); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x195,0,0x13,0,0x1ac,0,0x5c,0,0,0,2,1,0x3f); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x137,0,0x13,0,0x195,0,0x13,0,0,0,2,1,0x40); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0xf,0,0,0,0,0, 0x1a1,0,0x67,0,0,1,1,1,0x41); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,0,0,0x1b1,0,0x8d ,0,0x196,0,0x70,0,0,0,2,1,0x42); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,9,0,0,0,0,0, 0x1b7,0,0x86,0,0,1,1,1,0x43); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,0,0,0x1af,0,0x61 ,0,0x1bf,0,0x82,0,0,0,2,1,0x44); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0, 0x138,0,0x104,0,0,1,1,1,0x45); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0x2d,0,0,0,0 ,0,7,0,1,0,2,1,0x46); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0, 0xffff,0xffff,0xfff9,0xffff,1,1,1,1,0x47); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0x16,0, 0xffd1,0xffff,8,0,1,0,1,0,2,1,0x48); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,8,0,0,0,0,0, 0xfff8,0xffff,0,0,1,1,1,1,0x49); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0xcd7f,0xcccc,0x4ccc,0xcd7f,0xcccc,0xcccc,0xcd7d,0xcccc, 0x4ccc,0x80,0,0,0,0,0xffb9,0xffff,0x32,0,0xfffe,0xffff,0xfff7,0xffff,1,0,2,1,0x4a); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,9,0, 0,0,0,0,0x138,0,0x11c,0,0,1,1,1,0x4b); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x80,0,0,0,0,0x195,0, 0x124,0,0x137,0,0x124,0,0,0,2,1,0x4c); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x1ac,0,0xdd,0,0x195,0,0x124,0,0,0,2,1,0x4d); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7c,0xcccc,0x4ccc,0x80,0,0,0,0,0x16f,0, 0x113,0,0x194,0,0xcd,0,0,0,2,1,0x4e); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x138,0,0x113,0,0x16f,0,0x113,0,0,0,2,1,0x4f); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,0xf,0,0,0,0,0, 0x1a1,0,0xd2,0,0,1,1,1,0x50); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,0,0,0x1bf,0,0xb1 ,0,0x1af,0,0xd8,0,0,0,2,1,0x51); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,9,0,0,0,0,0, 0x1b7,0,0xb3,0,0,1,1,1,0x52); FUN_1008_0138(0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x80,0,0,0,0,0x196,0,0xc9 ,0,0x1b1,0,0xac,0,0,0,2,1,0x53); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0x5dc,0,0,4,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xdd,0,0x28 ,0,0xcd,0,0x49,0,0,0,2,1,0x54); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xcd,0,0x49,0, 0xc1,0,0x43,0,0,0,2,1,0x55); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xd1,0,0x22,0, 0xdd,0,0x28,0,0,0,2,1,0x56); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0x5dc,0,0x55,6,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xe7,0, 0x2a,0,0xd5,0,0x4c,0,0,0,2,0,0x57); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0x5dc,0,0x56,6,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xef,0, 0x2d,0,0xdd,0,0x4f,0,0,0,2,0,0x58); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x72 ,0,0x121,0,0,0,3,1,0x59); FUN_1008_0138(0xf6,0x132,0xe7,0x11a,0,0,0,0,3,0x5dc,0,0x5a,0x208a,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xf7,0,0x124,0,0x111,0,0x124,0,0,0,2,1,0x5a); FUN_1008_0138(0xf6,0x132,0xe7,0x11a,0,0,0,0,3,0x5dc,0,0x5a,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0x111,0,0x124,0,0x111,0,0x12e,0,0,0,2,1,0x5b); FUN_1008_0138(0xf6,0x132,0xe7,0x11a,0,0,0,0,3,0x5dc,0,0x5a,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xf7,0,0x12e,0,0xf7,0,0x124,0,0,0,2,1,0x5c); FUN_1008_0138(0xe7,0x132,0xd9,0x11a,0,0,0,0,3,0x5dc,0,0x5d,0x208a,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xe7,0,0x124,0,0x100,0,0x124,0,0,0,2,1,0x5d); FUN_1008_0138(0xe7,0x132,0xd9,0x11a,0,0,0,0,3,0x5dc,0,0x5d,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0x100,0,0x124,0,0x100,0,0x12e,0,0,0,2,1,0x5e); FUN_1008_0138(0xe7,0x132,0xd9,0x11a,0,0,0,0,3,0x5dc,0,0x5d,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xe7,0,0x12e,0,0xe7,0,0x124,0,0,0,2,1,0x5f); FUN_1008_0138(0xd8,0x132,0xca,0x11a,0,0,0,0,3,0x5dc,0,0x60,0x208a,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xd9,0,0x124,0,0xf1,0,0x124,0,0,0,2,1,0x60); FUN_1008_0138(0xd8,0x132,0xca,0x11a,0,0,0,0,3,0x5dc,0,0x60,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xf1,0,0x124,0,0xf1,0,0x12e,0,0,0,2,1,0x61); FUN_1008_0138(0xd8,0x132,0xca,0x11a,0,0,0,0,3,0x5dc,0,0x60,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xd9,0,0x12e,0,0xd9,0,0x124,0,0,0,2,1,0x62); FUN_1008_0138(0xc9,0x132,0xbb,0x11a,0,0,0,0,3,0x5dc,0,99,0x208a,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xc9,0,0x124,0,0xe2,0,0x124,0,0,0,2,1,99); FUN_1008_0138(0xc9,0x132,0xbb,0x11a,0,0,0,0,3,0,0,99,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc,0x4ccc ,0,0,0xe2,0,0x124,0,0xe2,0,0x12e,0,0,0,2,1,100); FUN_1008_0138(0xc9,0x132,0xbb,0x11a,0,0,0,0,3,0,0,99,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc,0x4ccc ,0,0,0xca,0,0x12e,0,0xca,0,0x124,0,0,0,2,1,0x65); FUN_1008_0138(0xba,0x132,0xae,0x11a,0,0,0,0,3,0x5dc,0,0x66,0x208a,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xbb,0,0x124,0,0xd2,0,0x124,0,0,0,2,1,0x66); FUN_1008_0138(0xba,0x132,0xae,0x11a,0,0,0,0,3,0,0,0x66,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xd1,0,0x124,0,0xd2,0,0x12e,0,0,0,2,1,0x67); FUN_1008_0138(0xba,0x132,0xae,0x11a,0,0,0,0,3,0,0,0x66,0x208a,0,0,0,0,0,0,0,0,0,0xcd7f,0xcccc, 0x4ccc,0,0,0xb7,0,0x12e,0,0xbc,0,0x124,0,0,0,2,1,0x68); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7e,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0xe0,0,0x94,0,0xf2,0,0xcb,0,0,0,2,1,0x69); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xe, 0,0,0,0,0,0xd4,0,0x9c,0,0,1,1,1,0x6a); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0x9a7f,0x9999,0x1999,0xcd7f,0xcccc,0xcccc,0xcd7d,0xcccc, 0x4ccc,0x9a80,0x9999,0x1999,0,0,0xd9,0,0xd7,0,0xc6,0,0x9e,0,0,0,2,1,0x6b); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xe, 0,0,0,0,0,0xe6,0,0xd2,0,0,1,1,1,0x6c); FUN_1008_0138(0xec,0xce,0xd6,0xc0,0,0,0,0,3,0x5dc,0,0x6d,0x2092,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xf6,0,0xbb,0,0xfd,0,0xd1,0,0,0,2,1,0x6d); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xfd,0,0xd1,0,0xee,0,0xd6,0,0,0,2,1,0x6e); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xea,0,0xbf,0,0xf6,0,0xbb,0,0,0,2,1,0x6f); FUN_1008_0138(0xe7,0xbf,0xd1,0xb2,0,0,0,0,3,0x5dc,0,0x70,0x2092,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xef,0,0xa9,0,0xf9,0,0xc6,0,0,0,2,1,0x70); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xf9,0,0xc6,0,0xed,0,0xca,0,0,0,2,1,0x71); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xe3,0,0xad,0,0xef,0,0xa9,0,0,0,2,1,0x72); FUN_1008_0138(0xe2,0xb1,0xcc,0xa3,0,0,0,0,3,0x5dc,0,0x73,0x2092,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xe9,0,0x99,0,0xf3,0,0xb6,0,0,0,2,1,0x73); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xf3,0,0xb6,0,0xe7,0,0xba,0,0,0,2,1,0x74); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xdd,0,0x9d,0,0xe9,0,0x99,0,0,0,2,1,0x75); FUN_1008_0138(0xdd,0xa3,0xc6,0x95,0,0,0,0,3,0x5dc,0,0x76,0x2092,0,0,0,0,0,0,0,0,0,0x9a80,0x9999, 0x1999,0,0,0xe2,0,0x8b,0,0xed,0,0xa3,0,0,0,2,1,0x76); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xed,0,0xa3,0,0xe1,0,0xa7,0,0,0,2,1,0x77); FUN_1008_0138(0xdc,0xcd,0xd6,0xc0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0, 0xd3,0,0x90,0,0xe2,0,0x8b,0,0,0,2,1,0x78); FUN_1008_0138(0,0,0,0,0,0,0,0,1,2000,0,0,0x400,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xa0,0, 0x54,0,0x95,0,0x69,0,0,0,2,1,0x79); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0x95,0,0x69,0, 0x8b,0,0x65,0,0,0,2,1,0x7a); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0x96,0,0x50,0, 0xa0,0,0x54,0,0,0,2,1,0x7b); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x97,0,0x57,0,0x8b,0,0x6f,0,0,0,2,1,0x7c); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,8,0, 0,0,0,0,0x92,0,0x54,0,0,1,1,1,0x7d); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x6c,0,0x4d,0,0x93,0,0x4d,0,0,0,2,1,0x7e); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x6a,0,0x57,0,0x6c,0,0x4d,0,0,0,2,1,0x7f); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x8d,0,0x6e,0,0x6a,0,0x57,0,0,0,2,1,0x80); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x60 ,0,0x60,0,0,0,3,1,0x81); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x45 ,0,0x73,0,0,0,3,1,0x82); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x50 ,0,0x93,0,0,0,3,1,0x83); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x70 ,0,0x93,0,0,0,3,1,0x84); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x7b ,0,0x73,0,0,0,3,1,0x85); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x14 ,0,0,0,0,0,0x60,0,0x7c,0,0,1,1,1,0x86); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x11 ,0,0,0,0,0,0x4e,0,100,0,0,1,1,1,0x87); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x11 ,0,0,0,0,0,0x44,0,0x85,0,0,1,1,1,0x88); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x11 ,0,0,0,0,0,0x60,0,0x9a,0,0,1,1,1,0x89); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x11 ,0,0,0,0,0,0x7d,0,0x85,0,0,1,1,1,0x8a); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0x11 ,0,0,0,0,0,0x72,0,100,0,0,1,1,1,0x8b); FUN_1008_0138(0xbc,0x1f,0xae,0x11,0,0,0,0,1,1000,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0, 0xca,0,0x18,0,0,0,4,1,0x8c); FUN_1008_0138(0xa9,0x19,0x9b,0xb,0,0,0,0,1,1000,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0, 0xb6,0,0x12,0,0,0,4,1,0x8d); FUN_1008_0138(0x96,0x18,0x88,10,0,0,0,0,1,0x5dc,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0, 0xa4,0,0x11,0,0,0,4,1,0x8e); FUN_1008_0138(0x83,0x18,0x75,10,0,0,0,0,1,0x5dc,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0, 0x91,0,0x11,0,0,0,4,1,0x8f); FUN_1008_0138(0x70,0x18,0x62,10,0,0,0,0,1,2000,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0,0x7e ,0,0x11,0,0,0,4,1,0x90); FUN_1008_0138(0x5d,0x18,0x4f,10,0,0,0,0,1,2000,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0,0x6b ,0,0x11,0,0,0,4,1,0x91); FUN_1008_0138(0x4f,0x18,0x3c,10,0,0,0,0,1,0x9c4,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0, 0x57,0,0x11,0,0,0,4,1,0x92); FUN_1008_0138(0x37,0x18,0x29,10,0,0,0,0,1,3000,0,0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,0,0x44 ,0,0x11,0,0,0,4,1,0x93); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0x13,0,0,0,0,0,0x2b ,0,0x11,0,0,0,3,1,0x94); FUN_1008_0138(0x49,0x4d,0x39,0x3c,0,0,0,0,1,500,0,0,0x140,0,0,0,0,0,0,0,0,0,0,0,0,0x10,0,0,0,0,0, 0x55,0,0x44,0,0,0,4,0,0x95); FUN_1008_0138(0x32,0xd3,0x28,199,0,0,0,0,1,500,0,0,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,0xb,0,0,0,0,0, 0x43,0,0xcd,0,0,0,4,1,0x96); FUN_1008_0138(0x33,0xf0,0x29,0xe4,0,0,0,0,1,500,0,0,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,0xb,0,0,0,0,0, 0x42,0,0xe9,0,0,0,4,1,0x97); FUN_1008_0138(0x34,0x10d,0x2a,0x101,0,0,0,0,1,500,0,0,0x1000,0,0,0,0,0,0,0,0,0,0,0,0,0xb,0,0,0,0,0 ,0x42,0,0x108,0,0,0,4,1,0x98); FUN_1008_0138(0x188,0x17,0x158,0xb,0,0,0,0,2,0,0,0,0x100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x194,0,0x1b, 0,0x154,0,6,0,0,0,4,0,0x99); FUN_1008_0138(0x18a,0x12f,0x15a,0x123,0,0,0,0,2,0,0,0,0x100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x192,0, 0x133,0,0x154,0,0x11b,0,0,0,4,0,0x9a); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x4f,0,0xb7,0,0,1,1,1,0x9b); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x34,0,0xb8,0,0x4b,0,0xac,0,0,0,2,1,0x9c); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x38,0,0xc3,0,0,1,1,1,0x9d); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x52,0,0xc1,0,0x3d,0,0xcd,0,0,0,2,1,0x9e); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x4f,0,0xd4,0,0,1,1,1,0x9f); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x34,0,0xd5,0,0x4b,0,0xc9,0,0,0,2,1,0xa0); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x38,0,0xe0,0,0,1,1,1,0xa1); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x52,0,0xde,0,0x3d,0,0xea,0,0,0,2,1,0xa2); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x4f,0,0xf1,0,0,1,1,1,0xa3); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x34,0,0xf2,0,0x4b,0,0xe6,0,0,0,2,1,0xa4); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0xb, 0,0,0,0,0,0x38,0,0xfd,0,0,1,1,1,0xa5); FUN_1008_0138(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x52,0,0xfb,0,0x3d,0,0x107,0,0,0,2,1,0xa6); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,9,0,0,0,0,0,0x10c,0 ,299,0,0,0,1,1,0xa7); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0x111,0,0x123,0 ,0x123,0,0x12a,0,0,0,2,1,0xa8); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0xcd7d,0xcccc,0x4ccc,0x9a80,0x9999,0x1999,0,0, 0x4e,0,0x148,0,0x1ba,0,0x148,0,0,0,2,1,0xa9); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,100,0,0x12a,0, 0x1a4,0,0x12a,0,0,0,2,1,0xaa); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xbe,0,0x12a,0, 0x10b,0,0x12a,0,0,0,2,1,0xab); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,9,0,0,0,0,0,0xbf,0, 299,0,0,0,1,1,0xac); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x9a80,0x9999,0x1999,0,0,0xa5,0,0x12a,0, 0xbc,0,0x123,0,0,0,2,1,0xad); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x6680,0x6666,0x6666,0x11,0,0,0,0,0,0,0, 0,0,0,1,1,1,0xae); FUN_1008_0138(0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0x6680,0x6666,0x6666,0x11,0,0,0,0,0,0,0, 0,0,0,1,1,0,0xaf); FUN_1008_0787(0x143,0x79,0x130,0x67,1); FUN_1008_0787(299,0x89,0x118,0x77,2); FUN_1008_0787(0x123,0xa6,0x110,0x94,3); FUN_1008_0787(299,0xc3,0x118,0xb1,4); FUN_1008_0787(0x142,0xd3,0x12f,0xc1,5); FUN_1008_0787(0x14,0,0x14,0,6); FUN_1008_0787(0x14,0,0x14,0,7); FUN_1008_0787(0x14,0,0x14,0,8); FUN_1008_0787(0x14,0,0x14,0,9); FUN_1008_0787(0x14,0,0x14,0,10); FUN_1008_0787(0x14,0,0x14,0,0xb); FUN_1008_0787(0x14,0,0x14,0,0xc); FUN_1008_0787(0x14,0,0x14,0,0xd); FUN_1008_0787(0x14,0,0x14,0,0xe); FUN_1008_0787(0x54,0x67,0x44,0x57,0xf); FUN_1008_0787(0x39,0x7b,0x29,0x69,0x10); FUN_1008_0787(0x43,0x9a,0x33,0x8a,0x11); FUN_1008_0787(99,0x9a,0x53,0x8a,0x12); FUN_1008_0787(0x6e,0x7a,0x5e,0x6a,0x13); FUN_1008_0787(0x1e,0x19,0xe,9,0x14); local_4 = 1; while( true ) { *(undefined1 *)(iVar5 + local_4 + 0x3cc) = *(undefined1 *)(local_4 * 0x53 + 0x98f); *(undefined2 *)(iVar5 + local_4 * 2 + 0xa42) = *(undefined2 *)(local_4 * 0x53 + 0x99e); *(undefined1 *)(iVar5 + local_4 + 0x61) = 0; if (local_4 == 0xaf) break; local_4 = local_4 + 1; } return; } /* ===== 1000:51f5 FUN_1000_51f5 ===== */ void __stdcall16far FUN_1000_51f5(undefined4 param_1) { int *piVar1; undefined2 uVar2; undefined2 uVar3; uint uVar4; int iVar5; undefined2 unaff_CS; undefined2 uVar6; int local_4; uVar6 = 0; uVar2 = LOADCURSOR(unaff_CS,0x7f02,0); uVar3 = SETCURSOR(0x1228,uVar2,uVar6); FUN_1008_10e3(uVar2,uVar6,uVar3); uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; *(undefined1 *)(iVar5 + 0xbd9) = 1; *(undefined1 *)(iVar5 + 0xbd8) = 1; uVar4 = *(uint *)(iVar5 + 0x49) | *(uint *)(iVar5 + 0x4b); if (uVar4 != 0) { piVar1 = (int *)*(undefined4 *)(iVar5 + 0x49); (*(code *)*(undefined2 *)(*piVar1 + 8)) (0x1008,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),CONCAT11((char)(uVar4 >> 8),1)); } FUN_1008_00e2(); DELETEOBJECT(0x1008,*(undefined2 *)(iVar5 + 0x52)); DELETEOBJECT(0x1228,DAT_1028_0859); DELETEOBJECT(0x1228,DAT_1028_0863); DELETEOBJECT(0x1228,DAT_1028_0865); DELETEOBJECT(0x1228,DAT_1028_085f); DELETEOBJECT(0x1228,DAT_1028_085b); DELETEOBJECT(0x1228,DAT_1028_0861); DELETEOBJECT(0x1228,DAT_1028_085d); local_4 = 0; while( true ) { DELETEOBJECT(0x1228,*(undefined2 *)(local_4 * 2 + 0x430b)); if (local_4 == 7) break; local_4 = local_4 + 1; } local_4 = 1; while( true ) { DELETEOBJECT(0x1228,*(undefined2 *)(local_4 * 2 + 0x4319)); if (local_4 == 4) break; local_4 = local_4 + 1; } local_4 = 1; while( true ) { DELETEOBJECT(0x1228,((undefined2 *)&DAT_1028_4321)[local_4]); if (local_4 == 9) break; local_4 = local_4 + 1; } SETCURSOR(0x1228,uVar3); POSTQUITMESSAGE(0x1228,0x12); FUN_1018_121b(iVar5,uVar2,0); INVALIDATERECT(0x1018,1,0,0,*(undefined2 *)(iVar5 + 4)); FUN_1020_0439(); return; } /* ===== 1000:531e FUN_1000_531e ===== */ void __stdcall16far FUN_1000_531e(int param_1,byte param_2) { undefined2 uVar1; undefined2 uVar2; undefined2 unaff_SS; undefined2 uVar3; undefined2 uVar4; uVar4 = *(undefined2 *)(param_1 + 0xe); uVar1 = CREATECOMPATIBLEDC(); *(undefined2 *)(param_1 + -0xc) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xc); uVar2 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -2)); *(undefined2 *)(param_1 + -4) = uVar2; uVar2 = *(undefined2 *)(param_1 + 0xe); BITBLT(0x1228,0x20,0xcc,0,0,*(undefined2 *)(param_1 + -0xc),0xd,(param_2 - 1) * 7,0x148,0xca); uVar3 = *(undefined2 *)(param_1 + -0xc); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -4)); DELETEOBJECT(0x1228,*(undefined2 *)(param_1 + -0xc),uVar3,uVar2,uVar1,uVar4); return; } /* ===== 1000:5390 FUN_1000_5390 ===== */ void __stdcall16far FUN_1000_5390(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4) { undefined2 uVar1; undefined2 uVar2; int iVar3; undefined2 unaff_CS; undefined2 uVar4; undefined2 unaff_SS; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; int local_20; undefined1 local_16 [4]; int local_12; int local_10; undefined2 local_e; undefined2 local_c; undefined2 local_a; undefined2 local_8; undefined2 local_6; undefined2 local_4; uVar2 = param_4; uVar1 = SELECTPALETTE(unaff_CS,0,DAT_1028_444e); UNREALIZEOBJECT(0x1228,DAT_1028_444e,uVar2); REALIZEPALETTE(0x1228,param_4); uVar4 = 0x1008; FUN_1008_00e2(); iVar3 = (int)param_1; uVar2 = (undefined2)((ulong)param_1 >> 0x10); if (DAT_1028_07cc != '\0') { local_4 = FUN_1008_149d(0x3e3,0,DAT_1028_06fe); uVar6 = CREATECOMPATIBLEDC(0x1008,param_4); local_e = uVar6; local_6 = SELECTOBJECT(0x1228,local_4); uVar5 = param_4; BITBLT(0x1228,0x20,0xcc,0,0,local_e,0x1e0,0x280,0,0); uVar4 = local_e; SELECTOBJECT(0x1228,local_6); DELETEOBJECT(0x1228,local_e,uVar4,uVar5,uVar6); DELETEOBJECT(0x1228,local_4); local_4 = FUN_1008_149d(0x3e2,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,2); FUN_1008_0f2e(); FUN_1000_531e(&stack0xfffe,3); FUN_1000_531e(&stack0xfffe,4); DAT_1028_085d = FUN_1008_149d(0x3e6,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,5); DAT_1028_085b = FUN_1008_149d(0x3e6,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,6); DAT_1028_0861 = LOADBITMAP(0x1000,500,0); local_20 = 0; while( true ) { FUN_1000_531e(&stack0xfffe,local_20 + 7); uVar4 = FUN_1008_149d(local_20 + 400,local_20 + 400 >> 0xf,DAT_1028_06fe); *(undefined2 *)(local_20 * 2 + 0x430b) = uVar4; if (local_20 == 7) break; local_20 = local_20 + 1; } local_20 = 1; while( true ) { FUN_1000_531e(&stack0xfffe,local_20 + 0xe); uVar4 = FUN_1008_149d(local_20 + 700,local_20 + 700 >> 0xf,DAT_1028_06fe); *(undefined2 *)(local_20 * 2 + 0x4319) = uVar4; if (local_20 == 4) break; local_20 = local_20 + 1; } local_20 = 1; while( true ) { FUN_1000_531e(&stack0xfffe,local_20 + 0x12); uVar4 = FUN_1008_149d(local_20 + 800,local_20 + 800 >> 0xf,DAT_1028_06fe); ((undefined2 *)&DAT_1028_4321)[local_20] = uVar4; if (local_20 == 9) break; local_20 = local_20 + 1; } FUN_1000_531e(&stack0xfffe,0x1c); uVar4 = LOADBITMAP(0x1000,0x66,0); *(undefined2 *)(iVar3 + 0x54) = uVar4; FUN_1000_531e(&stack0xfffe,0x1d); DAT_1028_0863 = FUN_1008_149d(900,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,0x1e); uVar4 = LOADBITMAP(0x1000,0x65,0); *(undefined2 *)(iVar3 + 0x52) = uVar4; FUN_1000_531e(&stack0xfffe,0x1f); DAT_1028_085f = FUN_1008_149d(0x3e5,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,0x20); DAT_1028_0865 = FUN_1008_149d(0x385,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,0x21); DAT_1028_0859 = FUN_1008_149d(600,0,DAT_1028_06fe); FUN_1000_531e(&stack0xfffe,0x22); DAT_1028_07cc = '\0'; FUN_1000_531e(&stack0xfffe,0x23); DELETEOBJECT(0x1000,local_4); uVar5 = param_4; SELECTPALETTE(0x1228,0,uVar1); uVar7 = 0; uVar6 = LOADCURSOR(0x1228,0x7f00,0); uVar4 = 0x1228; SETCURSOR(0x1228,uVar6,uVar7,uVar5); } if (*(char *)(iVar3 + 0xbd8) == '\0') { *(undefined1 *)(iVar3 + 0xbd9) = 1; local_c = CREATECOMPATIBLEDC(uVar4,param_4); local_e = CREATECOMPATIBLEDC(0x1228,param_4); GETCLIENTRECT(0x1228,local_16,unaff_SS); local_a = CREATECOMPATIBLEBITMAP(0x1228,local_10 + 1,local_12 + 1); local_6 = SELECTOBJECT(0x1228,DAT_1028_085b); local_8 = SELECTOBJECT(0x1228,local_a); uVar9 = local_e; BITBLT(0x1228,0x20,0xcc,0,0,local_c,local_10,local_12,0,0); uVar8 = local_c; BITBLT(0x1228,0x20,0xcc,0,0,local_e,local_10,local_12,0,0); uVar5 = 0xcc; uVar4 = 0x20; uVar7 = param_4; BITBLT(0x1228,0x20,0xcc,0,0,local_e,local_10,local_12,0,0); uVar6 = local_e; SELECTOBJECT(0x1228,local_8); DELETEOBJECT(0x1228,local_a,uVar6,uVar7,uVar8,uVar9); DELETEDC(0x1228,local_e); uVar7 = 0x1228; uVar6 = 0x5706; uVar8 = local_6; uVar9 = local_c; SELECTOBJECT(0x1228,local_6); if ((((0 < *(int *)(iVar3 + 0xba4)) || ((-1 < *(int *)(iVar3 + 0xba4) && (*(int *)(iVar3 + 0xba2) != 0)))) && ((0 < *(int *)(iVar3 + 0xba8) || ((-1 < *(int *)(iVar3 + 0xba8) && (*(int *)(iVar3 + 0xba6) != 0)))))) && (*(char *)(iVar3 + 0xbde) == '\0')) { uVar8 = local_c; local_6 = SELECTOBJECT(0x1228,*(undefined2 *)(iVar3 + 0x54)); uVar7 = param_4; BITBLT(0x1228,0xc6,0x88,0,0,local_c,*(int *)(iVar3 + 0xba6) + 0x13, *(int *)(iVar3 + 0xba2) + 0x13,*(undefined2 *)(iVar3 + 0xba6), *(undefined2 *)(iVar3 + 0xba2)); uVar6 = local_c; SELECTOBJECT(0x1228,*(undefined2 *)(iVar3 + 0x52)); uVar5 = param_4; BITBLT(0x1228,0x86,0xee,0,0,local_c,*(int *)(iVar3 + 0xba6) + 0x13, *(int *)(iVar3 + 0xba2) + 0x13,*(undefined2 *)(iVar3 + 0xba6), *(undefined2 *)(iVar3 + 0xba2)); uVar4 = local_c; SELECTOBJECT(0x1228,local_6); } DELETEDC(0x1228,local_c,uVar4,uVar5,uVar6,uVar7,uVar8,uVar9); *(undefined2 *)(iVar3 + 0x4d) = 0; *(undefined2 *)(iVar3 + 0x4f) = 0; *(undefined1 *)(iVar3 + 0xbd9) = 0; SELECTPALETTE(0x1228,0,uVar1); uVar4 = 0; uVar1 = LOADCURSOR(0x1228,0x7f00,0); SETCURSOR(0x1228,uVar1,uVar4,param_4); uVar1 = *(undefined2 *)(iVar3 + 4); GETCLIENTRECT(0x1228,local_16,unaff_SS); local_e = GETDC(0x1228,*(undefined2 *)(iVar3 + 4),uVar1); uVar2 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar1 = FUN_1020_08a9(); FUN_1008_0996(local_e,uVar1,uVar2); local_20 = 1; while( true ) { iVar3 = *(int *)(local_20 * 4 + 0x980); if ((0 < iVar3) || ((-1 < iVar3 && (*(int *)(local_20 * 4 + 0x97e) != 0)))) { FUN_1008_0996(local_e,local_20,local_20 >> 0xf); } if (local_20 == 4) break; local_20 = local_20 + 1; } DAT_1028_086b = 99; FUN_1008_0b9e(DAT_1028_07d1,local_e); RELEASEDC(0x1008,local_e); DAT_1028_07cb = 1; } return; } /* ===== 1000:58e7 FUN_1000_58e7 ===== */ undefined2 __stdcall16far FUN_1000_58e7(undefined4 param_1,undefined4 param_2) { int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; undefined2 local_4; uVar3 = (undefined2)((ulong)param_2 >> 0x10); iVar2 = (int)param_2; if (*(int *)(iVar2 + 4) == 0) { DAT_1028_07c4 = '\0'; local_4 = 0; } else if (DAT_1028_07c4 == '\0') { uVar4 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = ISICONIC(); if (iVar1 == 0) { DAT_1028_07c4 = '\x01'; INVALIDATERECT(0x1228,0,0,0,*(undefined2 *)((int)param_1 + 4)); UPDATEWINDOW(0x1228,*(undefined2 *)((int)param_1 + 4)); *(undefined2 *)(iVar2 + 10) = 0; *(undefined2 *)(iVar2 + 0xc) = 0; local_4 = 0; } } return local_4; } /* ===== 1000:5956 FUN_1000_5956 ===== */ void __stdcall16far FUN_1000_5956(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 uVar3; undefined2 unaff_CS; uVar2 = (undefined2)((ulong)param_2 >> 0x10); iVar1 = (int)param_2; if ((*(int *)(iVar1 + 4) == 0) && (DAT_1028_07c4 == '\0')) { DAT_1028_07c4 = '\x01'; uVar3 = (undefined2)((ulong)param_1 >> 0x10); INVALIDATERECT(unaff_CS,0,0,0,*(undefined2 *)((int)param_1 + 4)); UPDATEWINDOW(0x1228,*(undefined2 *)((int)param_1 + 4)); *(undefined2 *)(iVar1 + 10) = 0; *(undefined2 *)(iVar1 + 0xc) = 0; } return; } /* ===== 1000:59a0 FUN_1000_59a0 ===== */ undefined2 __stdcall16far FUN_1000_59a0(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 uVar3; int iVar4; int iVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; undefined2 local_4; local_4 = 1; uVar6 = (undefined2)((ulong)param_2 >> 0x10); iVar4 = (int)param_2; uVar7 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; if (*(int *)(iVar4 + 4) != *(int *)(iVar5 + 4)) { uVar9 = *(undefined2 *)(iVar4 + 4); iVar1 = GETPARENT(); if (iVar1 != *(int *)(iVar5 + 4)) { uVar7 = *(undefined2 *)(iVar5 + 4); uVar2 = GETDC(0x1228,uVar7,uVar9); uVar8 = uVar2; uVar3 = SELECTPALETTE(0x1228,1,DAT_1028_444e); REALIZEPALETTE(0x1228,uVar2,uVar8,uVar7,uVar9,uVar3); UPDATECOLORS(0x1228,uVar2); SELECTPALETTE(0x1228,0,uVar3); RELEASEDC(0x1228,uVar2); *(undefined2 *)(iVar4 + 10) = 0; *(undefined2 *)(iVar4 + 0xc) = 0; local_4 = 0; } } return local_4; } /* ===== 1000:5a37 FUN_1000_5a37 ===== */ int __stdcall16far FUN_1000_5a37(undefined4 param_1,undefined4 param_2) { undefined2 uVar1; undefined2 uVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; uVar4 = (undefined2)((ulong)param_1 >> 0x10); uVar5 = *(undefined2 *)((int)param_1 + 4); uVar1 = GETDC(); uVar6 = uVar1; uVar2 = SELECTPALETTE(0x1228,0,DAT_1028_444e); iVar3 = REALIZEPALETTE(0x1228,uVar1,uVar6,uVar5); SELECTPALETTE(0x1228,0,uVar2); RELEASEDC(0x1228,uVar1); if (0 < iVar3) { INVALIDATERECT(0x1228,0,0,0,*(undefined2 *)((int)param_1 + 4)); } uVar5 = (undefined2)((ulong)param_2 >> 0x10); *(int *)((int)param_2 + 10) = iVar3; *(undefined2 *)((int)param_2 + 0xc) = 0; return iVar3; } /* ===== 1000:5ab7 FUN_1000_5ab7 ===== */ void __stdcall16far FUN_1000_5ab7(undefined4 param_1,uint *param_2) { uint uVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_2 >> 0x10); FUN_1018_1274((int)param_1,(int)((ulong)param_1 >> 0x10),(uint *)param_2,uVar2); uVar1 = GETSTOCKOBJECT(0x1018,5); ((uint *)param_2)[8] = uVar1; *param_2 = *param_2 | 0x3800; return; } /* ===== 1000:5aea FUN_1000_5aea ===== */ undefined4 __stdcall16far FUN_1000_5aea(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { uint uVar1; int iVar2; undefined2 uVar3; bool bVar4; bVar4 = true; FUN_1020_03ef(); if (!bVar4) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; FUN_1018_1106(iVar2,uVar3,0,param_3,param_4,param_5,param_6); *(undefined2 *)(iVar2 + 0x41) = param_5; *(undefined2 *)(iVar2 + 0x43) = param_6; *(undefined2 *)(iVar2 + 0x2d) = 0x168; *(undefined2 *)(iVar2 + 0x2f) = 300; *(int *)(iVar2 + 0x29) = 0x140 - *(int *)(iVar2 + 0x2d) / 2; *(int *)(iVar2 + 0x2b) = 0xe6 - *(int *)(iVar2 + 0x2f) / 2; uVar1 = *(uint *)(iVar2 + 0x23); *(uint *)(iVar2 + 0x21) = *(uint *)(iVar2 + 0x21) | 2; *(uint *)(iVar2 + 0x23) = uVar1 | 0x4680; SETFOCUS(0x1018,*(undefined2 *)(iVar2 + 4)); } return param_1; } /* ===== 1000:5ba6 FUN_1000_5ba6 ===== */ void __stdcall16far FUN_1000_5ba6(undefined4 param_1) { int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; uVar5 = DAT_1028_0867; DELETEOBJECT(); uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; uVar4 = (undefined2)((ulong)*(undefined4 *)(iVar1 + 0x41) >> 0x10); iVar2 = (int)*(undefined4 *)(iVar1 + 0x41); *(undefined2 *)(iVar2 + 0x41) = 0; *(undefined2 *)(iVar2 + 0x43) = 0; *(undefined2 *)(iVar1 + 0x41) = 0; *(undefined2 *)(iVar1 + 0x43) = 0; FUN_1018_121b(iVar1,uVar3,0); FUN_1020_0439(uVar5); return; } /* ===== 1000:5be5 FUN_1000_5be5 ===== */ void __stdcall16far FUN_1000_5be5(undefined4 param_1) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_1 >> 0x10); FUN_1018_170c((int)param_1,uVar1); DAT_1028_0867 = FUN_1008_149d(0x3e1,0,DAT_1028_06fe); SETFOCUS(0x1008,*(undefined2 *)((int)param_1 + 4)); return; } /* ===== 1000:5c13 FUN_1000_5c13 ===== */ void __stdcall16far FUN_1000_5c13(void) { undefined2 uVar1; undefined2 uVar2; undefined2 unaff_CS; undefined2 unaff_SS; undefined2 in_stack_0000000c; undefined1 *puVar3; int iVar4; undefined1 *puVar5; undefined2 uVar6; undefined2 uVar7; undefined1 local_26c [256]; undefined2 local_16c; undefined2 local_16a; undefined2 local_168; undefined2 local_166; undefined2 local_164; undefined2 local_162; int local_160; int local_15e; undefined1 local_15c [256]; undefined1 local_5c [41]; undefined1 local_33 [41]; undefined2 local_a; undefined4 local_8; undefined2 local_4; uVar1 = in_stack_0000000c; local_4 = SELECTPALETTE(unaff_CS,0,DAT_1028_444e); UNREALIZEOBJECT(0x1228,DAT_1028_444e,uVar1); REALIZEPALETTE(0x1228,in_stack_0000000c); uVar1 = CREATECOMPATIBLEDC(0x1228,in_stack_0000000c); local_16a = uVar1; local_164 = SELECTOBJECT(0x1228,DAT_1028_0867); local_16c = CREATECOMPATIBLEDC(0x1228,in_stack_0000000c,uVar1); local_168 = CREATECOMPATIBLEBITMAP(0x1228,300,0x168); uVar1 = local_16c; local_166 = SELECTOBJECT(0x1228,local_168); local_8 = GETTEXTCOLOR(0x1228,local_16c,uVar1,in_stack_0000000c); local_a = SETTEXTALIGN(0x1228,6); local_162 = SETBKMODE(0x1228,1); BITBLT(0x1228,0x20,0xcc,0,0,local_16a,300,0x168,0,0); SETTEXTCOLOR(0x1228,0,0); FUN_1008_2ee5(0x2f4,0x1028,local_33,unaff_SS); uVar7 = 0xb4; uVar6 = 0x1b; puVar3 = local_33; uVar1 = unaff_SS; uVar2 = FUN_1008_2e92(local_33,unaff_SS); TEXTOUT(0x1008,uVar2,puVar3,uVar1,uVar6,uVar7); local_15e = 1; while( true ) { local_160 = local_15e * 0x14 + 0x28; SETTEXTALIGN(0x1228,0); if (local_15e < 10) { FUN_1008_2ee5(0x300,0x1028,local_33,unaff_SS); } else { FUN_1008_2ee5(0x2ff,0x1028,local_33,unaff_SS); } FUN_1020_1629(0xff,local_15c,unaff_SS,0,local_15e,local_15e >> 0xf); FUN_1008_2f2f(local_15c,unaff_SS,local_5c,unaff_SS); FUN_1008_2f4d(local_5c,unaff_SS,local_33,unaff_SS); FUN_1008_2f4d(0x303,0x1028,local_33,unaff_SS); puVar3 = local_5c; puVar5 = local_26c; uVar1 = unaff_SS; uVar2 = unaff_SS; FUN_1020_0b00(0x16,local_15e * 0x16 + 0x890,0x1028); FUN_1008_2f2f(puVar5,uVar1,puVar3,uVar2); FUN_1008_2f4d(local_5c,unaff_SS,local_33,unaff_SS); uVar6 = 0x1e; puVar3 = local_33; uVar1 = unaff_SS; iVar4 = local_160; uVar2 = FUN_1008_2e92(local_33,unaff_SS); TEXTOUT(0x1008,uVar2,puVar3,uVar1,iVar4,uVar6); SETTEXTALIGN(0x1228,2); FUN_1020_1629(0xff,local_15c,unaff_SS,0,*(undefined2 *)(local_15e * 4 + 0x87a), *(undefined2 *)(local_15e * 4 + 0x87c)); FUN_1008_2f2f(local_15c,unaff_SS,local_33,unaff_SS); uVar6 = 0x140; puVar3 = local_33; uVar1 = unaff_SS; iVar4 = local_160; uVar2 = FUN_1008_2e92(local_33,unaff_SS); TEXTOUT(0x1008,uVar2,puVar3,uVar1,iVar4,uVar6); if (local_15e == 10) break; local_15e = local_15e + 1; } BITBLT(0x1228,0x20,0xcc,0,0,local_16c,300,0x168,0,0); uVar7 = local_16c; SETTEXTCOLOR(0x1228,local_8); uVar6 = local_16c; SETTEXTALIGN(0x1228,local_a); uVar2 = local_16c; SETBKMODE(0x1228,local_162); uVar1 = local_16c; SELECTOBJECT(0x1228,local_166); DELETEOBJECT(0x1228,local_168,uVar1,uVar2,uVar6,uVar7); DELETEDC(0x1228,local_16c); uVar1 = local_16a; SELECTOBJECT(0x1228,local_164); DELETEDC(0x1228,local_16a,uVar1); SELECTPALETTE(0x1228,0,local_4); return; } /* ===== 1000:5ee6 FUN_1000_5ee6 ===== */ void __stdcall16far FUN_1000_5ee6(undefined4 param_1) { FUN_1008_00e2(); FUN_1018_0f38((int)param_1,(int)((ulong)param_1 >> 0x10)); return; } /* ===== 1000:5efc FUN_1000_5efc ===== */ undefined2 __stdcall16far FUN_1000_5efc(undefined4 param_1,undefined4 param_2) { undefined2 local_4; if ((*(uint *)((int)param_2 + 8) & 0xff) != 0x1c) { FUN_1008_00e2(); FUN_1018_0f38((int)param_1,(int)((ulong)param_1 >> 0x10)); } return local_4; } /* ===== 1000:5f29 FUN_1000_5f29 ===== */ undefined2 __stdcall16far FUN_1000_5f29(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 uVar3; int iVar4; int iVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; undefined2 local_4; local_4 = 1; uVar6 = (undefined2)((ulong)param_2 >> 0x10); iVar4 = (int)param_2; uVar7 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; if (*(int *)(iVar4 + 4) != *(int *)(iVar5 + 4)) { uVar9 = *(undefined2 *)(iVar4 + 4); iVar1 = GETPARENT(); if (iVar1 != *(int *)(iVar5 + 4)) { uVar7 = *(undefined2 *)(iVar5 + 4); uVar2 = GETDC(0x1228,uVar7,uVar9); uVar8 = uVar2; uVar3 = SELECTPALETTE(0x1228,1,DAT_1028_444e); REALIZEPALETTE(0x1228,uVar2,uVar8,uVar7,uVar9,uVar3); UPDATECOLORS(0x1228,uVar2); SELECTPALETTE(0x1228,0,uVar3); RELEASEDC(0x1228,uVar2); *(undefined2 *)(iVar4 + 10) = 0; *(undefined2 *)(iVar4 + 0xc) = 0; local_4 = 0; } } return local_4; } /* ===== 1000:5fc0 FUN_1000_5fc0 ===== */ int __stdcall16far FUN_1000_5fc0(undefined4 param_1,undefined4 param_2) { undefined2 uVar1; undefined2 uVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; uVar4 = (undefined2)((ulong)param_1 >> 0x10); uVar5 = *(undefined2 *)((int)param_1 + 4); uVar1 = GETDC(); uVar6 = uVar1; uVar2 = SELECTPALETTE(0x1228,0,DAT_1028_444e); iVar3 = REALIZEPALETTE(0x1228,uVar1,uVar6,uVar5); SELECTPALETTE(0x1228,0,uVar2); RELEASEDC(0x1228,uVar1); if (0 < iVar3) { INVALIDATERECT(0x1228,0,0,0,*(undefined2 *)((int)param_1 + 4)); } uVar5 = (undefined2)((ulong)param_2 >> 0x10); *(int *)((int)param_2 + 10) = iVar3; *(undefined2 *)((int)param_2 + 0xc) = 0; return iVar3; } /* ===== 1000:6040 FUN_1000_6040 ===== */ void __stdcall16far FUN_1000_6040(undefined4 param_1,uint *param_2) { uint uVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_2 >> 0x10); FUN_1018_1274((int)param_1,(int)((ulong)param_1 >> 0x10),(uint *)param_2,uVar2); uVar1 = GETSTOCKOBJECT(0x1018,5); ((uint *)param_2)[8] = uVar1; *param_2 = *param_2 | 0x3800; return; } /* ===== 1000:6073 FUN_1000_6073 ===== */ undefined4 __stdcall16far FUN_1000_6073(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { int iVar1; undefined2 uVar2; bool bVar3; bVar3 = true; FUN_1020_03ef(); if (!bVar3) { uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; FUN_1018_1106(iVar1,uVar2,0,param_3,param_4,param_5,param_6); *(undefined2 *)(iVar1 + 0x41) = param_5; *(undefined2 *)(iVar1 + 0x43) = param_6; *(undefined2 *)(iVar1 + 0x2d) = 0x280; *(undefined2 *)(iVar1 + 0x2f) = 0x1cc; *(undefined2 *)(iVar1 + 0x29) = 0; *(undefined2 *)(iVar1 + 0x2b) = 0; *(undefined2 *)(iVar1 + 0x21) = 2; *(undefined2 *)(iVar1 + 0x23) = 0x4600; SETFOCUS(0x1018,*(undefined2 *)(iVar1 + 4)); } return param_1; } /* ===== 1000:60e7 FUN_1000_60e7 ===== */ void __stdcall16far FUN_1000_60e7(undefined4 param_1) { int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; uVar4 = (undefined2)((ulong)*(undefined4 *)(iVar1 + 0x41) >> 0x10); iVar2 = (int)*(undefined4 *)(iVar1 + 0x41); *(undefined2 *)(iVar2 + 0x45) = 0; *(undefined2 *)(iVar2 + 0x47) = 0; *(undefined2 *)(iVar1 + 0x41) = 0; *(undefined2 *)(iVar1 + 0x43) = 0; uVar4 = DAT_1028_0867; DELETEOBJECT(); FUN_1018_121b(iVar1,uVar3,0); FUN_1020_0439(uVar4); return; } /* ===== 1000:6129 FUN_1000_6129 ===== */ void __stdcall16far FUN_1000_6129(undefined4 param_1) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; uVar2 = (undefined2)((ulong)param_1 >> 0x10); FUN_1018_170c((int)param_1,uVar2); uVar3 = 0; uVar1 = LOADCURSOR(0x1018,0x7f02,0); SETCURSOR(0x1228,uVar1,uVar3); DAT_1028_0867 = FUN_1008_149d(DAT_1028_07cd + 1000,0,DAT_1028_06fe); SETFOCUS(0x1008,*(undefined2 *)((int)param_1 + 4)); return; } /* ===== 1000:616e FUN_1000_616e ===== */ void __stdcall16far FUN_1000_616e(void) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 unaff_CS; undefined2 in_stack_0000000c; undefined2 uVar5; undefined2 uVar6; uVar4 = in_stack_0000000c; uVar1 = SELECTPALETTE(unaff_CS,0,DAT_1028_444e); UNREALIZEOBJECT(0x1228,DAT_1028_444e,uVar4); REALIZEPALETTE(0x1228,in_stack_0000000c); uVar2 = CREATECOMPATIBLEDC(0x1228,in_stack_0000000c); uVar6 = uVar2; uVar3 = SELECTOBJECT(0x1228,DAT_1028_0867); uVar5 = in_stack_0000000c; BITBLT(0x1228,0x20,0xcc,0,0,uVar2,0x1cc,0x280,0,0); uVar4 = uVar2; SELECTOBJECT(0x1228,uVar3); DELETEDC(0x1228,uVar2,uVar4,uVar5,uVar6); SELECTPALETTE(0x1228,0,uVar1); uVar5 = 0; uVar4 = LOADCURSOR(0x1228,0x7f00,0); SETCURSOR(0x1228,uVar4,uVar5,in_stack_0000000c); return; } /* ===== 1000:6202 FUN_1000_6202 ===== */ void __stdcall16far FUN_1000_6202(undefined4 param_1) { FUN_1008_00e2(); FUN_1018_0f38((int)param_1,(int)((ulong)param_1 >> 0x10)); return; } /* ===== 1000:6218 FUN_1000_6218 ===== */ undefined2 __stdcall16far FUN_1000_6218(undefined4 param_1,undefined4 param_2) { undefined2 local_4; if ((*(uint *)((int)param_2 + 8) & 0xff) != 0x3b) { FUN_1008_00e2(); FUN_1018_0f38((int)param_1,(int)((ulong)param_1 >> 0x10)); } return local_4; } /* ===== 1000:6245 FUN_1000_6245 ===== */ undefined2 __stdcall16far FUN_1000_6245(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 uVar3; int iVar4; int iVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; undefined2 local_4; local_4 = 1; uVar6 = (undefined2)((ulong)param_2 >> 0x10); iVar4 = (int)param_2; uVar7 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; if (*(int *)(iVar4 + 4) != *(int *)(iVar5 + 4)) { uVar9 = *(undefined2 *)(iVar4 + 4); iVar1 = GETPARENT(); if (iVar1 != *(int *)(iVar5 + 4)) { uVar7 = *(undefined2 *)(iVar5 + 4); uVar2 = GETDC(0x1228,uVar7,uVar9); uVar8 = uVar2; uVar3 = SELECTPALETTE(0x1228,1,DAT_1028_444e); REALIZEPALETTE(0x1228,uVar2,uVar8,uVar7,uVar9,uVar3); UPDATECOLORS(0x1228,uVar2); SELECTPALETTE(0x1228,0,uVar3); RELEASEDC(0x1228,uVar2); *(undefined2 *)(iVar4 + 10) = 0; *(undefined2 *)(iVar4 + 0xc) = 0; local_4 = 0; } } return local_4; } /* ===== 1000:62dc FUN_1000_62dc ===== */ int __stdcall16far FUN_1000_62dc(undefined4 param_1,undefined4 param_2) { undefined2 uVar1; undefined2 uVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; uVar4 = (undefined2)((ulong)param_1 >> 0x10); uVar5 = *(undefined2 *)((int)param_1 + 4); uVar1 = GETDC(); uVar6 = uVar1; uVar2 = SELECTPALETTE(0x1228,0,DAT_1028_444e); iVar3 = REALIZEPALETTE(0x1228,uVar1,uVar6,uVar5); SELECTPALETTE(0x1228,0,uVar2); RELEASEDC(0x1228,uVar1); if (0 < iVar3) { INVALIDATERECT(0x1228,0,0,0,*(undefined2 *)((int)param_1 + 4)); } uVar5 = (undefined2)((ulong)param_2 >> 0x10); *(int *)((int)param_2 + 10) = iVar3; *(undefined2 *)((int)param_2 + 0xc) = 0; return iVar3; } /* ===== 1000:635c FUN_1000_635c ===== */ void __stdcall16far FUN_1000_635c(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { FUN_1008_07b6(param_1,param_2,param_3,param_4,param_5,param_6); FUN_1008_093f(param_2,param_3,param_4,param_5,param_6); return; } /* ===== 1000:638e FUN_1000_638e ===== */ undefined2 __stdcall16far FUN_1000_638e(undefined4 param_1,undefined4 param_2) { uint uVar1; uint uVar2; uint uVar3; int iVar4; int iVar5; undefined2 in_BX; int iVar6; int iVar7; undefined2 uVar8; undefined2 uVar9; undefined2 uVar10; bool bVar11; undefined2 uVar12; byte local_a; byte local_9; uVar8 = (undefined2)((ulong)param_1 >> 0x10); iVar6 = (int)param_1; iVar7 = (int)param_2; uVar9 = (undefined2)((ulong)param_2 >> 0x10); if ((*(int *)(iVar6 + 0x41) == 0 && *(int *)(iVar6 + 0x43) == 0) && (*(int *)(iVar6 + 0x45) == 0 && *(int *)(iVar6 + 0x47) == 0)) { uVar1 = *(uint *)(iVar7 + 8) & 0xff; if ((DAT_1028_07cf != '\0') && (uVar1 == 0x3c)) { DAT_1028_0855 = 0; DAT_1028_0857 = 0; DAT_1028_07c7 = 1; } if ((DAT_1028_07cf != '\0') && (uVar1 == 0x41)) { DAT_1028_07d3 = DAT_1028_3340; DAT_1028_07d5 = DAT_1028_3342; DAT_1028_07d7 = DAT_1028_3344; DAT_1028_07d9 = DAT_1028_3346; *(undefined2 *)(iVar6 + 0xbaa) = 0; *(undefined2 *)(iVar6 + 0xbac) = 0; *(undefined2 *)(iVar6 + 0xbae) = 0; *(undefined2 *)(iVar6 + 0xbb0) = 0; } if ((((*(char *)(iVar6 + 0xbdd) == '\0') && (*(char *)(iVar6 + 0xbdf) == '\0')) && (uVar1 == 0x50)) && (DAT_1028_07d0 != 0)) { iVar4 = *(int *)(iVar6 + 0x5c); FUN_1020_08a9(); FUN_1020_100b(); uVar3 = FUN_1020_1017(); uVar1 = *(uint *)(iVar6 + 0xbae); iVar5 = *(int *)(iVar6 + 0xbb0); *(int *)(iVar6 + 0xbae) = uVar1 - uVar3; *(int *)(iVar6 + 0xbb0) = (iVar5 - iVar4) - (uint)(uVar1 < uVar3); iVar4 = *(int *)(iVar6 + 0x56); iVar5 = (~*(uint *)(iVar6 + 0x58) + 1) - (uint)(iVar4 != 0); if ((*(int *)(iVar6 + 0xbb0) < iVar5) || ((*(int *)(iVar6 + 0xbb0) <= iVar5 && (*(uint *)(iVar6 + 0xbae) <= (uint)-iVar4 && -*(uint *)(iVar6 + 0xbae) != iVar4)))) { uVar3 = FUN_1020_14a4(*(undefined2 *)(iVar6 + 0x56)); iVar4 = *(int *)(iVar6 + 0x56); uVar1 = *(uint *)(iVar6 + 0x58); uVar2 = -iVar4; *(int *)(iVar6 + 0xbae) = uVar2 + uVar3 / 0x28; *(int *)(iVar6 + 0xbb0) = ((~uVar1 + 1) - (uint)(iVar4 != 0)) + (uint)CARRY2(uVar2,uVar3 / 0x28); } else { uVar1 = *(uint *)(iVar6 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); iVar4 = FUN_1020_1017(); iVar5 = (~uVar1 + 1) - (uint)(iVar4 != 0); if ((iVar5 < *(int *)(iVar6 + 0xbb0)) || ((iVar5 <= *(int *)(iVar6 + 0xbb0) && ((uint)-iVar4 < *(uint *)(iVar6 + 0xbae) || -*(uint *)(iVar6 + 0xbae) == iVar4)))) { uVar3 = FUN_1020_14a4(*(undefined2 *)(iVar6 + 0x56)); uVar1 = *(uint *)(iVar6 + 0xbae); iVar4 = *(int *)(iVar6 + 0xbb0); *(int *)(iVar6 + 0xbae) = uVar1 - uVar3 / 0x28; *(int *)(iVar6 + 0xbb0) = iVar4 - (uint)(uVar1 < uVar3 / 0x28); } } DAT_1028_07fb = *(uint *)(iVar6 + 0xbae); DAT_1028_07fd = *(int *)(iVar6 + 0xbb0); *(undefined1 *)(iVar6 + 0xbdd) = 1; *(undefined1 *)(iVar6 + 0xbde) = 0; FUN_1008_0002(2); uVar8 = GETDC(0x1008,*(undefined2 *)(iVar6 + 4)); FUN_1000_635c(DAT_1028_0865,0x12,0x15,0x1aa,0x13a,uVar8); RELEASEDC(0x1000,uVar8); } else if (uVar1 == 0x1d) { *(undefined1 *)(iVar6 + 0xbda) = 0; } else if (uVar1 == 0x1c) { *(undefined1 *)(iVar6 + 0xbdb) = 0; } else if ((DAT_1028_07c6 == '\0') && (((uVar1 == 0x2a || (uVar1 == 0x51)) || (uVar1 == 0x39)))) { FUN_1008_0002(0x13); if (uVar1 == 0x2a) { FUN_1020_14a4(0x14); iVar5 = 0; uVar2 = FUN_1020_08a9(); uVar3 = *(uint *)(iVar6 + 0xbaa); iVar4 = *(int *)(iVar6 + 0xbac); *(int *)(iVar6 + 0xbaa) = uVar3 - uVar2; *(int *)(iVar6 + 0xbac) = (iVar4 - iVar5) - (uint)(uVar3 < uVar2); } else if (uVar1 == 0x51) { FUN_1020_14a4(0x14); iVar5 = 0; uVar2 = FUN_1020_08a9(); uVar3 = *(uint *)(iVar6 + 0xbaa); iVar4 = *(int *)(iVar6 + 0xbac); *(int *)(iVar6 + 0xbaa) = uVar2 + *(uint *)(iVar6 + 0xbaa); *(int *)(iVar6 + 0xbac) = iVar5 + iVar4 + (uint)CARRY2(uVar2,uVar3); } else if (uVar1 == 0x39) { iVar4 = *(int *)(iVar6 + 0x5c); uVar10 = FUN_1020_100b(); FUN_1020_14c1(uVar10,in_BX,iVar4); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ff7(); uVar2 = FUN_1020_1017(); uVar3 = *(uint *)(iVar6 + 0xbaa); iVar5 = *(int *)(iVar6 + 0xbac); *(int *)(iVar6 + 0xbaa) = uVar2 + *(uint *)(iVar6 + 0xbaa); *(int *)(iVar6 + 0xbac) = iVar4 + iVar5 + (uint)CARRY2(uVar2,uVar3); FUN_1020_14a4(0x14); iVar5 = 0; uVar2 = FUN_1020_08a9(); uVar3 = *(uint *)(iVar6 + 0xbae); iVar4 = *(int *)(iVar6 + 0xbb0); *(int *)(iVar6 + 0xbae) = uVar3 - uVar2; *(int *)(iVar6 + 0xbb0) = (iVar4 - iVar5) - (uint)(uVar3 < uVar2); } if (1 < *(byte *)(iVar6 + 0x61)) { if (uVar1 == 0x2a) { iVar4 = *(int *)(iVar6 + 0x5c); uVar1 = FUN_1020_08a9(); bVar11 = DAT_1028_07f3 < uVar1; DAT_1028_07f3 = DAT_1028_07f3 - uVar1; DAT_1028_07f5 = (DAT_1028_07f5 - iVar4) - (uint)bVar11; iVar4 = *(int *)(iVar6 + 0x5c); uVar1 = FUN_1020_08a9(); bVar11 = DAT_1028_07f7 < uVar1; DAT_1028_07f7 = DAT_1028_07f7 - uVar1; DAT_1028_07f9 = (DAT_1028_07f9 - iVar4) - (uint)bVar11; } else if (uVar1 == 0x51) { iVar4 = *(int *)(iVar6 + 0x5c); uVar1 = FUN_1020_08a9(); bVar11 = CARRY2(uVar1,DAT_1028_07f3); DAT_1028_07f3 = uVar1 + DAT_1028_07f3; DAT_1028_07f5 = iVar4 + DAT_1028_07f5 + (uint)bVar11; iVar4 = *(int *)(iVar6 + 0x5c); uVar1 = FUN_1020_08a9(); bVar11 = CARRY2(uVar1,DAT_1028_07f7); DAT_1028_07f7 = uVar1 + DAT_1028_07f7; DAT_1028_07f9 = iVar4 + DAT_1028_07f9 + (uint)bVar11; } else if (uVar1 == 0x39) { FUN_1020_14a4(0x15); uVar1 = FUN_1020_08a9(); FUN_1020_14a4(100); FUN_1020_08a9(); uVar3 = FUN_1020_08a9(); bVar11 = CARRY2(uVar1,DAT_1028_07f3); DAT_1028_07f3 = uVar1 + DAT_1028_07f3; DAT_1028_07f5 = ((int)uVar1 >> 0xf) + DAT_1028_07f5 + (uint)bVar11; bVar11 = CARRY2(uVar1,DAT_1028_07f7); DAT_1028_07f7 = uVar1 + DAT_1028_07f7; DAT_1028_07f9 = ((int)uVar1 >> 0xf) + DAT_1028_07f9 + (uint)bVar11; bVar11 = CARRY2(uVar3,DAT_1028_07fb); DAT_1028_07fb = uVar3 + DAT_1028_07fb; DAT_1028_07fd = ((int)uVar3 >> 0xf) + DAT_1028_07fd + (uint)bVar11; bVar11 = CARRY2(uVar3,DAT_1028_07ff); DAT_1028_07ff = uVar3 + DAT_1028_07ff; DAT_1028_0801 = ((int)uVar3 >> 0xf) + DAT_1028_0801 + (uint)bVar11; } } *(int *)(iVar6 + 0x5e) = *(int *)(iVar6 + 0x5e) + 0x19; iVar4 = FUN_1020_14a4(10); if (iVar4 + 0x1eU < *(uint *)(iVar6 + 0x5e)) { FUN_1008_0002(0x14); DAT_1028_07c6 = '\x01'; *(undefined1 *)(iVar6 + 0xbda) = 0; *(undefined1 *)(iVar6 + 0xbdb) = 0; uVar8 = GETDC(0x1008,*(undefined2 *)(iVar6 + 4)); FUN_1008_0837(0x14,0x94,0xf3,0x54,uVar8); FUN_1008_093f(0x14,0x94,0xf3,0x54,uVar8); RELEASEDC(0x1008,uVar8); } } else if (uVar1 == 0x58) { if (DAT_1028_43f2 == '\0') { if (DAT_1028_43ee != 0) { DAT_1028_43f2 = '\x01'; } } else { DAT_1028_43f2 = '\0'; } } else if (((*(char *)(iVar6 + 0xbde) != '\0') && ((uVar1 == 0x4e || (uVar1 == 0x1b)))) && (DAT_1028_07d0 < 4)) { DAT_1028_07c9 = 0; uVar10 = 0x1008; FUN_1008_0002(1); DAT_1028_07d0 = DAT_1028_07d0 + 1; *(undefined1 *)(iVar6 + 0xbdd) = 0; *(undefined1 *)(iVar6 + 0xbdf) = 0; DAT_1028_07c5 = 1; *(undefined1 *)(iVar6 + 0x61) = 1; DAT_1028_0874 = 0; local_9 = 1; while( true ) { *(undefined2 *)((uint)local_9 * 2 + 0x81f) = 0xffff; local_a = 1; while( true ) { *(undefined1 *)(iVar6 + (uint)local_9 * 0xaf + (uint)local_a + 0x61) = *(undefined1 *)(iVar6 + (uint)local_a + 0x3cc); *(undefined2 *)(iVar6 + (uint)local_9 * 0x15e + (uint)local_a * 2 + 0x36c) = *(undefined2 *)(iVar6 + (uint)local_a * 2 + 0xa42); if (local_a == 0xaf) break; local_a = local_a + 1; } uVar10 = GETDC(uVar10,*(undefined2 *)(iVar6 + 4)); if (DAT_1028_07d0 < local_9) { *(undefined2 *)((uint)local_9 * 4 + 0x97e) = 0; *(undefined2 *)((uint)local_9 * 4 + 0x980) = 0; FUN_1008_08bb(0x2a,0x11c,(local_9 - 1) * 0x2d + 0x10e,0x15c,uVar10); FUN_1008_093f(0x2a,0x11c,(local_9 - 1) * 0x2d + 0x10e,0x15c,uVar10); } FUN_1008_0dbd(0,uVar10); uVar12 = *(undefined2 *)(iVar6 + 4); RELEASEDC(0x1008,uVar10); if (local_9 == 1) { uVar10 = GETDC(0x1228,*(undefined2 *)(iVar6 + 4),uVar12); FUN_1008_0837(0x1e,0x11c,0xe8,0x173,uVar10); FUN_1008_093f(0x1e,0x11c,0xe8,0x173,uVar10); FUN_1008_0996(uVar10,0,0); FUN_1008_0b9e(1,uVar10); RELEASEDC(0x1008,uVar10); } uVar10 = 0x1228; if (local_9 == 4) break; local_9 = local_9 + 1; } local_a = 1; while( true ) { *(undefined1 *)((uint)local_a * 0x53 + 0x98f) = *(undefined1 *)(iVar6 + (uint)local_a + 0x3cc); *(undefined2 *)((uint)local_a * 0x53 + 0x99e) = *(undefined2 *)(iVar6 + (uint)local_a * 2 + 0xa42); if (local_a == 0xaf) break; local_a = local_a + 1; } DAT_1028_07d1 = 1; } } *(undefined2 *)(iVar7 + 10) = 0; *(undefined2 *)(iVar7 + 0xc) = 0; return 0; } /* ===== 1000:6b37 FUN_1000_6b37 ===== */ void __stdcall16far FUN_1000_6b37(int param_1,undefined2 param_2) { undefined2 uVar1; undefined2 uVar2; undefined2 unaff_SS; undefined2 uVar3; undefined2 uVar4; uVar2 = *(undefined2 *)(param_1 + -0xc); uVar1 = CREATECOMPATIBLEDC(); *(undefined2 *)(param_1 + -0xe) = uVar1; uVar2 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc),uVar2); *(undefined2 *)(param_1 + -0x10) = uVar2; uVar2 = SELECTOBJECT(0x1228,DAT_1028_085b); *(undefined2 *)(param_1 + -0x12) = uVar2; uVar2 = *(undefined2 *)(param_1 + -0x10); uVar1 = SELECTOBJECT(0x1228,DAT_1028_0865); *(undefined2 *)(param_1 + -0x14) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xe); BITBLT(0x1228,0x20,0xcc,0,param_2,*(undefined2 *)(param_1 + -0x10),0x12,0x15,0x1aa,0x13a); uVar4 = *(undefined2 *)(param_1 + -0x10); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -0x14)); uVar3 = *(undefined2 *)(param_1 + -0xe); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -0x12)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x10),uVar3,uVar4,uVar1,uVar2); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0xe)); FUN_1008_093f(0x12,0x15,0x1aa,0x13a,*(undefined2 *)(param_1 + -0xc)); return; } /* ===== 1000:6bf8 FUN_1000_6bf8 ===== */ undefined2 __stdcall16far FUN_1000_6bf8(undefined4 param_1,undefined4 param_2) { int iVar1; uint uVar2; uint uVar3; undefined2 uVar4; uint uVar5; uint uVar6; int iVar7; int iVar8; int iVar9; undefined2 uVar10; undefined2 uVar11; undefined4 uVar12; undefined2 local_4; uVar10 = (undefined2)((ulong)param_1 >> 0x10); iVar8 = (int)param_1; uVar6 = *(uint *)(iVar8 + 0x5c); iVar1 = FUN_1020_08a9(); iVar9 = (int)param_2; uVar11 = (undefined2)((ulong)param_2 >> 0x10); if ((*(int *)(iVar8 + 0x41) == 0 && *(int *)(iVar8 + 0x43) == 0) && (*(int *)(iVar8 + 0x45) == 0 && *(int *)(iVar8 + 0x47) == 0)) { uVar2 = *(uint *)(iVar9 + 8) & 0xff; if (uVar2 == 0x3b) { uVar12 = FUN_1000_6073(0,0,0x17e,0x306,0x1028,iVar8,uVar10); uVar12 = (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x34)) (0x1000,(int *)DAT_1028_064e,(int)((ulong)DAT_1028_064e >> 0x10),uVar12); *(undefined2 *)(iVar8 + 0x45) = (int)uVar12; *(undefined2 *)(iVar8 + 0x47) = (int)((ulong)uVar12 >> 0x10); FUN_1018_0e9e((int)*(undefined4 *)(iVar8 + 0x45), (int)((ulong)*(undefined4 *)(iVar8 + 0x45) >> 0x10),1); return local_4; } if (((*(char *)(iVar8 + 0xbdd) == '\0') && (*(char *)(iVar8 + 0xbdf) == '\0')) && (uVar2 == 0x50)) { uVar5 = uVar6; uVar3 = FUN_1020_08e6(); uVar2 = *(uint *)(iVar8 + 0xbae); iVar7 = *(int *)(iVar8 + 0xbb0); *(int *)(iVar8 + 0xbae) = uVar2 - uVar3; *(int *)(iVar8 + 0xbb0) = (iVar7 - uVar5) - (uint)(uVar2 < uVar3); *(undefined2 *)(iVar8 + 0xbaa) = 0; *(undefined2 *)(iVar8 + 0xbac) = 0; if (DAT_1028_07d0 != '\0') { uVar4 = GETDC(0x1020,*(undefined2 *)(iVar8 + 4)); iVar7 = (~uVar6 + 1) - (uint)(iVar1 != 0); if ((iVar7 < *(int *)(iVar8 + 0xbb0)) || ((iVar7 <= *(int *)(iVar8 + 0xbb0) && ((uint)-iVar1 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0x15); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0x2a); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0x3f); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0x54); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0x69); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae)))) ) { FUN_1000_6b37(&stack0xfffe,0x7e); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae)) ))) { FUN_1000_6b37(&stack0xfffe,0x93); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0xa8); } else { uVar2 = uVar6; uVar5 = FUN_1020_08a9(); if (((int)uVar2 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar2 <= *(int *)(iVar8 + 0xbb0) && (uVar5 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0xbd); } else { uVar2 = FUN_1020_08a9(); if (((int)uVar6 < *(int *)(iVar8 + 0xbb0)) || (((int)uVar6 <= *(int *)(iVar8 + 0xbb0) && (uVar2 < *(uint *)(iVar8 + 0xbae))))) { FUN_1000_6b37(&stack0xfffe,0xd2); } else { FUN_1000_6b37(&stack0xfffe,0xe7); } } } } } } } } } } RELEASEDC(0x1000,uVar4); } } else if (DAT_1028_07c6 == '\0') { if (uVar2 == 0x1d) { *(undefined1 *)(iVar8 + 0xbda) = 1; } if (uVar2 == 0x1c) { *(undefined1 *)(iVar8 + 0xbdb) = 1; } } } *(undefined2 *)(iVar9 + 10) = 0; *(undefined2 *)(iVar9 + 0xc) = 0; return 0; } /* ===== 1000:6f27 FUN_1000_6f27 ===== */ void __stdcall16far FUN_1000_6f27(int param_1) { undefined1 uVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; undefined2 uVar9; undefined2 uVar10; undefined2 unaff_SS; undefined2 uVar11; undefined2 uVar12; undefined2 uVar13; undefined2 uVar14; undefined2 uVar15; undefined2 uVar16; undefined2 local_24; undefined2 local_22; undefined2 local_20; undefined2 local_1e; undefined2 local_1c; undefined2 local_1a; undefined2 local_18; undefined2 local_16; undefined2 local_14; undefined2 local_12; undefined2 local_10; uVar10 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); uVar3 = GETDC(); uVar4 = CREATECOMPATIBLEDC(0x1228,uVar3,uVar10); uVar5 = CREATECOMPATIBLEDC(0x1228,uVar3); uVar14 = uVar3; uVar6 = CREATECOMPATIBLEBITMAP(0x1228,0x5a,0x5b); uVar9 = uVar4; uVar7 = SELECTOBJECT(0x1228,DAT_1028_0859); uVar10 = uVar5; uVar8 = SELECTOBJECT(0x1228,uVar6); if ((DAT_1028_0857 < 0) || ((DAT_1028_0857 < 1 && (DAT_1028_0855 < 6)))) { uVar16 = 0; uVar15 = 0; uVar13 = 0x5b; uVar12 = 0x5a; uVar11 = uVar4; uVar9 = FUN_1020_08a9(uVar4,0x5a,0x5b,0,0,uVar5,uVar10,uVar9,uVar14); uVar10 = 0x1228; BITBLT(0x1020,0x20,0xcc,0,uVar9,uVar11,uVar12,uVar13,uVar15,uVar16); } else { SELECTOBJECT(0x1228,DAT_1028_085d); BITBLT(0x1228,0x20,0xcc,0x21,0x4f,uVar4,0x5a,0x5b,0,0); SELECTOBJECT(0x1228,DAT_1028_0859); iVar2 = DAT_1028_3371; DAT_1028_3371 = DAT_1028_33c4; DAT_1028_33c4 = DAT_1028_3417; DAT_1028_3417 = DAT_1028_346a; DAT_1028_346a = DAT_1028_34bd; DAT_1028_34bd = iVar2; uVar1 = *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x476); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x476) = *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x477); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x477) = *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x478); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x478) = *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x479); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x479) = *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x47a); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x47a) = uVar1; local_10 = 0xf; while( true ) { uVar10 = 0x1000; FUN_1000_7e92(param_1,local_10); if (local_10 == 0x13) break; local_10 = local_10 + 1; } } if (DAT_1028_0855 == 1) { uVar10 = 0x1008; FUN_1008_0002(0xb); local_12 = 9; local_1c = 0x29; local_14 = 0x17; local_1e = 0xb; local_16 = 0x38; local_20 = 0xe; local_18 = 0x3f; local_22 = 0x2f; local_1a = 0x23; local_24 = 0x3f; } else if (DAT_1028_0855 == 2) { local_12 = 0xb; local_1c = 0x2d; local_14 = 0x12; local_1e = 0xd; local_16 = 0x34; local_20 = 0xb; local_18 = 0x3f; local_22 = 0x2a; local_1a = 0x27; local_24 = 0x40; } else if (DAT_1028_0855 == 3) { local_12 = 0xd; local_1c = 0x32; local_14 = 0xf; local_1e = 0x11; local_16 = 0x2e; local_20 = 9; local_18 = 0x40; local_22 = 0x25; local_1a = 0x2c; local_24 = 0x3e; } else if (DAT_1028_0855 == 4) { local_12 = 0x11; local_1c = 0x37; local_14 = 0xb; local_1e = 0x17; local_16 = 0x27; local_20 = 7; local_18 = 0x40; local_22 = 0x1e; local_1a = 0x32; local_24 = 0x3b; } else if (DAT_1028_0855 == 5) { local_12 = 0x15; local_1c = 0x3c; local_14 = 9; local_1e = 0x1c; local_16 = 0x23; local_20 = 7; local_18 = 0x3e; local_22 = 0x19; local_1a = 0x36; local_24 = 0x38; } else if (DAT_1028_0855 == 6) { local_12 = 8; local_1c = 0x23; local_14 = 0x1a; local_1e = 8; local_16 = 0x3b; local_20 = 0x12; local_18 = 0x3b; local_22 = 0x32; local_1a = 0x1b; local_24 = 0x3d; } if (DAT_1028_3371 != 0) { BITBLT(uVar10,0xc6,0x88,0x11,0x1c7,uVar4,0x11,0x11,local_1c,local_12); uVar10 = 0x1228; BITBLT(0x1228,0x86,0xee,0,0x1c7,uVar4,0x11,0x11,local_1c,local_12); } if (DAT_1028_33c4 != 0) { BITBLT(uVar10,0xc6,0x88,0x11,0x1c7,uVar4,0x11,0x11,local_1e,local_14); uVar10 = 0x1228; BITBLT(0x1228,0x86,0xee,0,0x1c7,uVar4,0x11,0x11,local_1e,local_14); } if (DAT_1028_3417 != 0) { BITBLT(uVar10,0xc6,0x88,0x11,0x1c7,uVar4,0x11,0x11,local_20,local_16); uVar10 = 0x1228; BITBLT(0x1228,0x86,0xee,0,0x1c7,uVar4,0x11,0x11,local_20,local_16); } if (DAT_1028_346a != 0) { BITBLT(uVar10,0xc6,0x88,0x11,0x1c7,uVar4,0x11,0x11,local_22,local_18); uVar10 = 0x1228; BITBLT(0x1228,0x86,0xee,0,0x1c7,uVar4,0x11,0x11,local_22,local_18); } if (DAT_1028_34bd != 0) { BITBLT(uVar10,0xc6,0x88,0x11,0x1c7,uVar4,0x11,0x11,local_24,local_1a); uVar10 = 0x1228; BITBLT(0x1228,0x86,0xee,0,0x1c7,uVar4,0x11,0x11,local_24,local_1a); } uVar14 = uVar3; BITBLT(uVar10,0x20,0xcc,0,0,uVar5,0x5a,0x5b,0x21,0x4f); uVar9 = uVar4; SELECTOBJECT(0x1228,uVar7); uVar10 = uVar5; SELECTOBJECT(0x1228,uVar8); DELETEOBJECT(0x1228,uVar6,uVar10,uVar9,uVar14); DELETEDC(0x1228,uVar5); DELETEDC(0x1228,uVar4); RELEASEDC(0x1228,uVar3); return; } /* ===== 1000:7440 FUN_1000_7440 ===== */ void __stdcall16far FUN_1000_7440(int param_1) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; int iVar8; undefined2 uVar9; undefined2 unaff_SS; undefined2 uVar10; undefined2 uVar11; undefined2 uVar12; undefined2 uVar13; undefined2 uVar14; undefined2 uVar15; undefined2 uVar16; undefined2 uVar17; undefined2 uVar18; undefined2 uVar19; uVar7 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); uVar1 = GETDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,uVar1,uVar7); uVar7 = uVar2; uVar3 = SELECTOBJECT(0x1228,DAT_1028_085f); uVar4 = CREATECOMPATIBLEDC(0x1228,uVar1,uVar7); uVar5 = CREATECOMPATIBLEBITMAP(0x1228,0x7b,0x5b); uVar19 = uVar4; uVar6 = SELECTOBJECT(0x1228,uVar5); uVar14 = 0x4f; uVar12 = 0; uVar7 = uVar2; uVar16 = uVar4; BITBLT(0x1228,0x20,0xcc,0,0x4f,uVar2,0x7b,0x5b,0,0); uVar18 = 0x1228; uVar9 = 0x1228; uVar17 = 0x74c1; uVar13 = DAT_1028_0859; uVar15 = uVar2; SELECTOBJECT(0x1228,DAT_1028_0859); if (((int)DAT_1028_0851 < 1) || (0x2c < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0x2d) || (0x39 < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0x3a) || (0x41 < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0x42) || (0x80 < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0x81) || (0x9e < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0x9f) || (0xdd < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0xde) || (0xe5 < (int)DAT_1028_0851)) { if (((int)DAT_1028_0851 < 0xe6) || (0xed < (int)DAT_1028_0851)) { if ((0xed < (int)DAT_1028_0851) && ((int)DAT_1028_0851 < 0x11a)) { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0xee)) { uVar9 = 0x1008; FUN_1008_0002(0xd); } uVar17 = uVar4; BITBLT(uVar9,0xc6,0x88,0x5a,0x16a,uVar2,0x5a,0x5b,0x21,0); uVar7 = uVar4; BITBLT(0x1228,0x86,0xee,0x5a,0x1c5,uVar2,0x5a,0x5b,0x21,0); uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4,uVar7,uVar17); uVar18 = 0x2d; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x2d,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x119)) { SELECTOBJECT(0x1228,DAT_1028_085b); SELECTOBJECT(0x1228,DAT_1028_085d); BITBLT(0x1228,0x20,0xcc,0,0x4f,uVar2,0x5a,0x5b,0,0x4f); SELECTOBJECT(0x1228,uVar5); } } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0xe6)) { uVar9 = 0x1008; FUN_1008_0002(0xc); } BITBLT(uVar9,0xc6,0x88,0x5a,0x16a,uVar2,0x5a,0x5b,0x21,0); BITBLT(0x1228,0x86,0xee,0x5a,0x1c5,uVar2,0x5a,0x5b,0x21,0); BITBLT(0x1228,0xc6,0x88,0x5a,0x2d,uVar2,0x58,0x2d,0,0x14); BITBLT(0x1228,0x86,0xee,0x5a,0,uVar2,0x58,0x2d,0,0x14); } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0xde)) { uVar9 = 0x1008; FUN_1008_118f(); } BITBLT(uVar9,0xc6,0x88,0x5a,0x16a,uVar2,0x5a,0x5b,0x21,0); BITBLT(0x1228,0x86,0xee,0x5a,0x1c5,uVar2,0x5a,0x5b,0x21,0); BITBLT(0x1228,0xc6,0x88,0x5a,0x87,uVar2,0x58,0x2d,0,0x14); BITBLT(0x1228,0x86,0xee,0x5a,0x5a,uVar2,0x58,0x2d,0,0x14); } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x9f)) { uVar9 = 0x1008; FUN_1008_0002(0xd); } uVar7 = uVar4; BITBLT(uVar9,0x20,0xcc,0x5a,0xb4,uVar2,0x5a,0x5b,0x21,0); if ((DAT_1028_0853 < 0) || ((DAT_1028_0853 < 1 && (DAT_1028_0851 < 0xcc)))) { uVar16 = 0; uVar15 = 0; uVar13 = 0x5b; uVar17 = FUN_1020_08a9(0x5b,0,0,uVar4,uVar7); uVar18 = 0x16a; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x16a,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); uVar16 = 0; uVar15 = 0; uVar13 = 0x5b; uVar17 = FUN_1020_08a9(0x5b,0,0,uVar4); uVar18 = 0x1c5; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x1c5,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); } else { uVar17 = 0; uVar7 = FUN_1020_08a9(0,uVar4); BITBLT(0x1020,0xc6,0x88,0x5a,0x16a,uVar2,0x5a,0x5b,uVar7,uVar17); uVar17 = 0; uVar7 = FUN_1020_08a9(0,uVar4); BITBLT(0x1020,0x86,0xee,0x5a,0x1c5,uVar2,0x5a,0x5b,uVar7,uVar17); } if ((0 < DAT_1028_0853) || ((-1 < DAT_1028_0853 && (0xb0 < DAT_1028_0851)))) { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0xdd)) { BITBLT(0x1228,0xc6,0x88,0x5a,0x87,uVar2,0x58,0x2d,0,0x14); BITBLT(0x1228,0x86,0xee,0x5a,0x5a,uVar2,0x58,0x2d,0,0x14); } else { uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0x87; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x87,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x59,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0x5a; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x5a,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x59,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); } } } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x81)) { uVar9 = 0x1008; FUN_1008_118f(); } BITBLT(uVar9,0x20,0xcc,0x5a,0xb4,uVar2,0x5a,0x5b,0x21,0); } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x42)) { uVar9 = 0x1008; FUN_1008_0002(0xd); } uVar7 = uVar4; BITBLT(uVar9,0x20,0xcc,0x5a,0xb4,uVar2,0x5a,0x5b,0x21,0); if ((DAT_1028_0853 < 0) || ((DAT_1028_0853 < 1 && (DAT_1028_0851 < 0x53)))) { uVar17 = 0; uVar7 = FUN_1020_08a9(0,uVar4); BITBLT(0x1020,0xc6,0x88,0x5a,0x16a,uVar2,0x5a,0x5b,uVar7,uVar17); uVar17 = 0; uVar7 = FUN_1020_08a9(0,uVar4); BITBLT(0x1020,0x86,0xee,0x5a,0x10f,uVar2,0x5a,0x5b,uVar7,uVar17); } else { uVar16 = 0; uVar15 = 0; uVar13 = 0x5b; uVar17 = FUN_1020_08a9(0x5b,0,0,uVar4,uVar7); uVar18 = 0x16a; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x16a,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); uVar16 = 0; uVar15 = 0; uVar13 = 0x5b; uVar17 = FUN_1020_08a9(0x5b,0,0,uVar4); uVar18 = 0x10f; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x10f,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); } if ((DAT_1028_0853 < 0) || ((DAT_1028_0853 < 1 && (DAT_1028_0851 < 0x6f)))) { uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0x87; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x87,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0x5a; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x5a,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x5a,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); } } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x3a)) { uVar9 = 0x1008; FUN_1008_0002(0xc); } BITBLT(uVar9,0xc6,0x88,0x5a,0x87,uVar2,0x58,0x2d,0,0x14); BITBLT(0x1228,0x86,0xee,0x5a,0x5a,uVar2,0x58,0x2d,0,0x14); } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 0x2d)) { uVar9 = 0x1008; FUN_1008_118f(); } BITBLT(uVar9,0xc6,0x88,0x5a,0x2d,uVar2,0x58,0x2d,0,0x14); BITBLT(0x1228,0x86,0xee,0x5a,0,uVar2,0x58,0x2d,0,0x14); } } else { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 1)) { FUN_1008_0002(0xd); uVar13 = uVar4; SELECTOBJECT(0x1008,DAT_1028_085b); uVar18 = uVar4; BITBLT(0x1228,0x20,0xcc,0x5a,0x10f,uVar2,0x5a,0x5b,0,0x4f); uVar14 = 0x1228; uVar12 = 0x751d; uVar7 = uVar5; uVar17 = uVar4; SELECTOBJECT(0x1228,uVar5); } uVar11 = 0x14; uVar10 = 0; uVar9 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4,uVar12,uVar14,uVar7,uVar17,uVar18,uVar13,uVar15,uVar16, uVar19); uVar18 = 0x2d; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0x2d,uVar2,uVar17); BITBLT(0x1020,0xc6,0x88,iVar8 + 0x59,uVar18,uVar7,uVar17,uVar9,uVar10,uVar11); uVar16 = 0x14; uVar15 = 0; uVar13 = 0x2d; uVar17 = FUN_1020_08a9(0x2d,0,0x14,uVar4); uVar18 = 0; uVar7 = uVar2; iVar8 = FUN_1020_08a9(0,uVar2,uVar17); BITBLT(0x1020,0x86,0xee,iVar8 + 0x59,uVar18,uVar7,uVar17,uVar13,uVar15,uVar16); } uVar18 = uVar1; BITBLT(0x1228,0x20,0xcc,0,0,uVar4,0x7b,0x5b,0,0x4f); uVar17 = uVar4; SELECTOBJECT(0x1228,uVar6); uVar7 = uVar2; SELECTOBJECT(0x1228,uVar3); DELETEOBJECT(0x1228,uVar5,uVar7,uVar17,uVar18); DELETEDC(0x1228,uVar4); DELETEDC(0x1228,uVar2); RELEASEDC(0x1228,uVar1); return; } /* ===== 1000:7e12 FUN_1000_7e12 ===== */ void __stdcall16far FUN_1000_7e12(undefined2 param_1,uint param_2) { if ((param_2 != 0) && (param_2 < 0xb0)) { if ((*(uint *)(param_2 * 0x53 + 0x99c) & 0x80) == 0x80) { if (*(char *)(param_2 * 0x53 + 0x98f) == '\0') { FUN_1000_b30b(param_1,param_2); } else { FUN_1000_b3f3(param_1,param_2); } } else if ((*(uint *)(param_2 * 0x53 + 0x99c) & 0x100) == 0x100) { if (*(char *)(param_2 * 0x53 + 0x98f) == '\0') { FUN_1000_b3f3(param_1,param_2); } else { FUN_1000_b30b(param_1,param_2); } } } return; } /* ===== 1000:7e92 FUN_1000_7e92 ===== */ void __stdcall16far FUN_1000_7e92(int param_1,int param_2) { undefined2 unaff_SS; if (*(char *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + param_2 + 0x467) == '\0') { FUN_1000_b3f3(param_1,param_2 + 1000); } else { FUN_1000_b30b(param_1,param_2 + 1000); } return; } /* ===== 1000:7ed9 FUN_1000_7ed9 ===== */ /* WARNING: Removing unreachable block (ram,0x10008133) */ void __stdcall16far FUN_1000_7ed9(int param_1,int param_2,uint param_3,int param_4,int param_5) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; int iVar9; int iVar10; int iVar11; int iVar12; uint uVar13; int extraout_DX; undefined2 uVar14; int iVar15; undefined2 unaff_SS; bool bVar16; undefined1 uVar17; undefined1 uVar18; undefined4 uVar19; uint local_86; uint local_84; uint local_76; int local_74; uint local_36; int local_34; uint local_32; int local_30; uint local_2e; int local_2c; uint local_2a; int local_28; uint local_1e; int local_1c; uint local_1a; int local_18; uint local_a; uint local_8; uint local_6; uint local_4; FUN_1008_0002(0x15); if (param_4 == 1) { FUN_1020_1017(); local_1a = DAT_1028_1e80 + 0xd8f0; local_18 = DAT_1028_1e82 - (uint)(DAT_1028_1e80 < 10000); local_1e = DAT_1028_1e84; local_1c = DAT_1028_1e86; local_2a = DAT_1028_1edb + 20000; local_28 = DAT_1028_1edd + (uint)(0xb1df < DAT_1028_1edb); local_2e = DAT_1028_1edf; local_2c = DAT_1028_1ee1; local_32 = DAT_1028_1f79 + 20000; local_30 = DAT_1028_1f7b + (uint)(0xb1df < DAT_1028_1f79); local_36 = DAT_1028_1f7d; local_34 = DAT_1028_1f7f; } else if (param_4 == 2) { FUN_1020_1017(); local_1a = DAT_1028_235d + 10000; local_18 = DAT_1028_235f + (uint)(0xd8ef < DAT_1028_235d); local_1e = DAT_1028_2361; local_1c = DAT_1028_2363; local_2a = DAT_1028_2456 + 0xb1e0; local_28 = DAT_1028_2458 - (uint)(DAT_1028_2456 < 20000); local_2e = DAT_1028_245a; local_2c = DAT_1028_245c; local_32 = DAT_1028_23b8 + 0xb1e0; local_30 = DAT_1028_23ba - (uint)(DAT_1028_23b8 < 20000); local_36 = DAT_1028_23bc; local_34 = DAT_1028_23be; } uVar3 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar1 = FUN_1020_1017(); uVar2 = uVar1 + local_1e; iVar9 = uVar3 + local_1c + (uint)CARRY2(uVar1,local_1e); uVar3 = (uint)*(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61); if (uVar3 != 0) { local_76 = 1; local_74 = 0; while( true ) { if (1 < *(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61)) { FUN_1000_c36b(param_1,local_76 - 1,local_74 - (uint)(local_76 == 0)); } if ((param_3 == 0xffff) && (param_2 == -1)) { iVar10 = (local_28 - DAT_1028_07d5) - (uint)(local_2a < DAT_1028_07d3); FUN_1020_08e6(); FUN_1020_08e6(); iVar11 = ((local_2c - (uint)(local_2e < 43000)) - DAT_1028_07d9) - (uint)(local_2e + 0x5808 < DAT_1028_07d7); FUN_1020_08e6(); FUN_1020_08e6(); uVar1 = FUN_1020_08a9(); iVar12 = iVar10; uVar4 = FUN_1020_08a9(); local_6 = uVar4 - uVar1; local_4 = (iVar12 - iVar11) - (uint)(uVar4 < uVar1); FUN_1020_08e6(); iVar12 = ((local_2c + (uint)(0xd11f < local_2e)) - DAT_1028_07d9) - (uint)(local_2e + 12000 < DAT_1028_07d7); FUN_1020_08e6(); uVar1 = FUN_1020_08a9(); uVar4 = FUN_1020_08a9(); local_a = uVar4 - uVar1; local_8 = (iVar10 - iVar12) - (uint)(uVar4 < uVar1); } else { iVar10 = (local_30 - DAT_1028_07d5) - (uint)(local_32 < DAT_1028_07d3); FUN_1020_08e6(); FUN_1020_08e6(); iVar11 = ((local_34 - (uint)(local_36 < 12000)) - DAT_1028_07d9) - (uint)(local_36 + 0xd120 < DAT_1028_07d7); FUN_1020_08e6(); FUN_1020_08e6(); uVar1 = FUN_1020_08a9(); iVar12 = iVar10; uVar4 = FUN_1020_08a9(); local_6 = uVar4 - uVar1; local_4 = (iVar12 - iVar11) - (uint)(uVar4 < uVar1); FUN_1020_08e6(); iVar12 = ((local_34 + (uint)(0x5807 < local_36)) - DAT_1028_07d9) - (uint)(local_36 + 43000 < DAT_1028_07d7); FUN_1020_08e6(); uVar1 = FUN_1020_08a9(); uVar4 = FUN_1020_08a9(); local_a = uVar4 - uVar1; local_8 = (iVar10 - iVar12) - (uint)(uVar4 < uVar1); } uVar1 = DAT_1028_07d3 - local_1a; uVar4 = (DAT_1028_07d5 - local_18) - (uint)(DAT_1028_07d3 < local_1a); if ((int)uVar4 < 0) { bVar16 = uVar1 != 0; uVar1 = -uVar1; uVar4 = (~uVar4 + 1) - (uint)bVar16; } uVar5 = DAT_1028_07d7 - uVar2; uVar13 = (DAT_1028_07d9 - iVar9) - (uint)(DAT_1028_07d7 < uVar2); if ((int)uVar13 < 0) { bVar16 = uVar5 != 0; uVar5 = -uVar5; uVar13 = (~uVar13 + 1) - (uint)bVar16; } if ((((int)uVar4 < 0) || (((int)uVar4 < 1 && (uVar1 < 54000)))) && (((int)uVar13 < 0 || (((int)uVar13 < 1 && (uVar5 < 54000)))))) { FUN_1020_100b(); FUN_1020_0ffd(); uVar19 = FUN_1020_0ff1(0x1020); FUN_1020_100b((int)uVar19,iVar12,(int)((ulong)uVar19 >> 0x10)); FUN_1020_0ffd(); FUN_1020_0ff1(0x1020); iVar12 = extraout_DX; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); uVar1 = FUN_1020_1017(); if (((iVar12 < 0) || ((iVar12 < 1 && (uVar1 < 0xd2f1)))) && (((((param_5 == 0 && ((param_4 == 1 && ((local_4 < 0x8000 || ((-2 < (int)local_4 && (0xfc18 < local_6))))) ))) && (((int)local_8 < 0 || (((int)local_8 < 1 && (local_a < 1000)))))) && ((local_18 < DAT_1028_07d5 || ((local_18 <= DAT_1028_07d5 && (local_1a < DAT_1028_07d3)))))) || (((((param_5 == 0 && (param_4 == 2)) && (((int)local_4 < 0 || (((int)local_4 < 1 && (local_6 < 1000)))))) && ((local_8 < 0x8000 || ((-2 < (int)local_8 && (0xfc18 < local_a)))))) && ((DAT_1028_07d5 < local_18 || ((DAT_1028_07d5 <= local_18 && (DAT_1028_07d3 < local_1a)))))))))) { FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_1017(); FUN_1020_100b(); uVar1 = param_3; FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_1017(); FUN_1020_100b(); if ((param_3 == 0xffff) && (param_2 == -1)) { uVar4 = (local_28 - local_18) - (uint)(local_2a < local_1a); uVar17 = false; uVar18 = uVar4 == 0; if ((int)uVar4 < 0) { uVar5 = ~uVar4 + 1; uVar17 = ~uVar4 != 0xffff || uVar5 < (local_2a != local_1a); uVar18 = uVar5 == (local_2a != local_1a); } FUN_1020_100b(); FUN_1020_1007(); if ((bool)uVar17 || (bool)uVar18) { local_86 = local_2e + 0x5808; local_84 = local_2c - (uint)(local_2e < 43000); } else { uVar4 = DAT_1028_07d3 - local_1a; uVar1 = (DAT_1028_07d5 - local_18) - (uint)(DAT_1028_07d3 < local_1a); if ((int)uVar1 < 0) { bVar16 = uVar4 != 0; uVar4 = -uVar4; uVar1 = (~uVar1 + 1) - (uint)bVar16; } local_86 = (uVar2 - uVar4) + 5000; local_84 = ((iVar9 - uVar1) - (uint)(uVar2 < uVar4)) + (uint)(0xec77 < uVar2 - uVar4); } local_84 = (local_84 - DAT_1028_07d9) - (uint)(local_86 < DAT_1028_07d7); } else { uVar4 = (local_30 - local_18) - (uint)(local_32 < local_1a); uVar17 = false; uVar18 = uVar4 == 0; if ((int)uVar4 < 0) { uVar5 = ~uVar4 + 1; uVar17 = ~uVar4 != 0xffff || uVar5 < (local_32 != local_1a); uVar18 = uVar5 == (local_32 != local_1a); } FUN_1020_100b(); FUN_1020_1007(); if ((bool)uVar17 || (bool)uVar18) { local_86 = local_36 + 43000; local_84 = local_34 + (uint)(0x5807 < local_36); } else { iVar12 = (local_30 - local_18) - (uint)(local_32 < local_1a); uVar6 = FUN_1020_100b(); uVar4 = (DAT_1028_07d5 - local_18) - (uint)(DAT_1028_07d3 < local_1a); FUN_1020_08a9(uVar6,uVar1,iVar12); FUN_1020_100b(); FUN_1020_0ffd(); uVar1 = FUN_1020_1017(); local_86 = uVar2 - uVar1; local_84 = (iVar9 - uVar4) - (uint)(uVar2 < uVar1); uVar1 = uVar4; } local_84 = (local_84 - DAT_1028_07d9) - (uint)(local_86 < DAT_1028_07d7); } if ((int)local_84 < 0) { uVar1 = param_3; FUN_1020_08a9(); FUN_1020_100b(); iVar12 = FUN_1020_1017(); local_86 = -iVar12; local_84 = (~local_84 + 1) - (uint)(iVar12 != 0); } else { local_86 = 0; local_84 = 0; } uVar14 = 0; uVar8 = uVar14; uVar7 = FUN_1020_100b(); uVar6 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0xbb0); FUN_1020_100b(uVar7,uVar1,uVar8); uVar8 = FUN_1020_0ff7(); FUN_1020_100b(uVar8,uVar1,uVar6); FUN_1020_0ff7(); FUN_1020_0fe5(); FUN_1020_0ff7(); FUN_1020_0ffd(); FUN_1020_1017(); uVar8 = uVar14; uVar7 = FUN_1020_100b(); uVar6 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0xbb0); FUN_1020_100b(uVar7,uVar1,uVar8); uVar7 = FUN_1020_0ff7(); uVar8 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0xbac); FUN_1020_100b(uVar7,uVar1,uVar6); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); FUN_1020_1017(); uVar6 = uVar14; uVar7 = FUN_1020_100b(); FUN_1020_100b(uVar7,uVar1,uVar6); FUN_1020_0ffd(); FUN_1020_10be(); FUN_1020_0ff7(); FUN_1020_0fe5(); uVar6 = FUN_1020_100b(); uVar7 = 0; iVar11 = 0; FUN_1020_0fe5(uVar6,uVar1,uVar8); FUN_1020_0ff7(); uVar1 = FUN_1020_1017(); iVar12 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar4 = FUN_1020_1017(); iVar10 = iVar12 + iVar11 + (uint)CARRY2(uVar4,uVar1); uVar6 = uVar14; uVar8 = FUN_1020_100b(); iVar11 = iVar10; FUN_1020_100b(uVar8,uVar7,uVar6); uVar6 = FUN_1020_0ff7(); iVar12 = 0; FUN_1020_100b(uVar6,uVar7,iVar11); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); uVar4 = FUN_1020_1017(); uVar6 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar15 + 0xbaa); iVar11 = *(int *)(iVar15 + 0xbac); *(int *)(iVar15 + 0xbaa) = uVar4 + *(uint *)(iVar15 + 0xbaa); *(int *)(iVar15 + 0xbac) = iVar12 + iVar11 + (uint)CARRY2(uVar4,uVar1); uVar8 = FUN_1020_100b(); uVar6 = 0; FUN_1020_100b(uVar8,uVar7,uVar14); uVar8 = FUN_1020_0ff7(); FUN_1020_100b(uVar8,uVar7,uVar6); FUN_1020_0ff7(); FUN_1020_0fe5(); FUN_1020_0ffd(); uVar4 = FUN_1020_1017(); uVar6 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar11 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar11 + 0xbae); iVar12 = *(int *)(iVar11 + 0xbb0); *(int *)(iVar11 + 0xbae) = uVar4 + *(uint *)(iVar11 + 0xbae); *(int *)(iVar11 + 0xbb0) = iVar10 + iVar12 + (uint)CARRY2(uVar4,uVar1); uVar6 = *(undefined2 *)(iVar11 + 0xbb0); uVar8 = FUN_1020_100b(); uVar1 = local_84; FUN_1020_08a9(uVar8,uVar7,uVar6); FUN_1020_100b(); FUN_1020_0ffd(); uVar6 = FUN_1020_1017(); FUN_1000_beff(param_1,uVar6,uVar1,local_86,local_84); } } if (1 < *(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61)) { FUN_1000_c426(param_1,local_76 - 1,local_74 - (uint)(local_76 == 0)); } if ((local_74 == 0) && (local_76 == uVar3)) break; bVar16 = 0xfffe < local_76; local_76 = local_76 + 1; local_74 = local_74 + (uint)bVar16; } } return; } /* ===== 1000:8b0d FUN_1000_8b0d ===== */ void __stdcall16far FUN_1000_8b0d(int param_1,int param_2,int param_3,char param_4) { undefined4 uVar1; uint uVar2; undefined2 uVar3; uint uVar4; int iVar5; undefined2 uVar6; undefined2 unaff_SS; bool bVar7; undefined2 uVar8; uVar1 = *(undefined4 *)(*(int *)(param_1 + 6) + 6); uVar8 = *(undefined2 *)((int)uVar1 + 4); uVar6 = 0x1228; uVar3 = GETDC(); if ((param_3 == 0) && (param_2 == 1)) { *(undefined2 *)(param_1 + -4) = 0; *(undefined2 *)(param_1 + -2) = 0; *(undefined2 *)(param_1 + -8) = 43000; *(undefined2 *)(param_1 + -6) = 0; } else { *(undefined2 *)(param_1 + -4) = 0; *(undefined2 *)(param_1 + -2) = 0; *(undefined2 *)(param_1 + -8) = 0x5808; *(undefined2 *)(param_1 + -6) = 0xffff; } if (param_4 == '\x01') { iVar5 = param_3; FUN_1020_08a9(uVar8); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1ed3,uVar4); DAT_1028_1ed3 = DAT_1028_1ed3 + uVar4; DAT_1028_1ed5 = DAT_1028_1ed5 + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1ed7,uVar4); DAT_1028_1ed7 = DAT_1028_1ed7 + uVar4; DAT_1028_1ed9 = DAT_1028_1ed9 + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1edb,uVar4); DAT_1028_1edb = DAT_1028_1edb + uVar4; DAT_1028_1edd = DAT_1028_1edd + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1edf,uVar4); DAT_1028_1edf = DAT_1028_1edf + uVar4; DAT_1028_1ee1 = DAT_1028_1ee1 + iVar5 + (uint)bVar7; if ((DAT_1028_1ed5 < DAT_1028_1edd) || ((DAT_1028_1ed5 <= DAT_1028_1edd && (DAT_1028_1ed3 < DAT_1028_1edb)))) { DAT_1028_1ec5 = DAT_1028_1ed5 - (uint)(DAT_1028_1ed3 < 5000); DAT_1028_1ecd = DAT_1028_1edd + (uint)(0xec77 < DAT_1028_1edb); uVar4 = DAT_1028_1ed3; uVar2 = DAT_1028_1edb; } else { DAT_1028_1ec5 = DAT_1028_1edd - (uint)(DAT_1028_1edb < 5000); DAT_1028_1ecd = DAT_1028_1ed5 + (uint)(0xec77 < DAT_1028_1ed3); uVar4 = DAT_1028_1edb; uVar2 = DAT_1028_1ed3; } DAT_1028_1ecb = uVar2 + 5000; DAT_1028_1ec3 = uVar4 + 0xec78; if ((DAT_1028_1ed9 < DAT_1028_1ee1) || ((DAT_1028_1ed9 <= DAT_1028_1ee1 && (DAT_1028_1ed7 < DAT_1028_1edf)))) { DAT_1028_1ec9 = DAT_1028_1ed9 - (uint)(DAT_1028_1ed7 < 5000); DAT_1028_1ed1 = DAT_1028_1ee1 + (uint)(0xec77 < DAT_1028_1edf); uVar4 = DAT_1028_1ed7; uVar2 = DAT_1028_1edf; } else { DAT_1028_1ec9 = DAT_1028_1ee1 - (uint)(DAT_1028_1edf < 5000); DAT_1028_1ed1 = DAT_1028_1ed9 + (uint)(0xec77 < DAT_1028_1ed7); uVar4 = DAT_1028_1edf; uVar2 = DAT_1028_1ed7; } DAT_1028_1ecf = uVar2 + 5000; DAT_1028_1ec7 = uVar4 + 0xec78; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f26,uVar4); DAT_1028_1f26 = DAT_1028_1f26 + uVar4; DAT_1028_1f28 = DAT_1028_1f28 + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f2a,uVar4); DAT_1028_1f2a = DAT_1028_1f2a + uVar4; DAT_1028_1f2c = DAT_1028_1f2c + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f16,uVar4); DAT_1028_1f16 = DAT_1028_1f16 + uVar4; DAT_1028_1f18 = DAT_1028_1f18 + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f1a,uVar4); DAT_1028_1f1a = DAT_1028_1f1a + uVar4; DAT_1028_1f1c = DAT_1028_1f1c + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = DAT_1028_1f1e < uVar4; DAT_1028_1f1e = DAT_1028_1f1e - uVar4; DAT_1028_1f20 = (DAT_1028_1f20 - iVar5) - (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = DAT_1028_1f22 < uVar4; DAT_1028_1f22 = DAT_1028_1f22 - uVar4; DAT_1028_1f24 = (DAT_1028_1f24 - iVar5) - (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = DAT_1028_1f79 < uVar4; DAT_1028_1f79 = DAT_1028_1f79 - uVar4; DAT_1028_1f7b = (DAT_1028_1f7b - iVar5) - (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f7d,uVar4); DAT_1028_1f7d = DAT_1028_1f7d + uVar4; DAT_1028_1f7f = DAT_1028_1f7f + iVar5 + (uint)bVar7; iVar5 = param_3; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = DAT_1028_1f81 < uVar4; DAT_1028_1f81 = DAT_1028_1f81 - uVar4; DAT_1028_1f83 = (DAT_1028_1f83 - iVar5) - (uint)bVar7; FUN_1020_08a9(); FUN_1020_100b(); uVar4 = FUN_1020_1017(); bVar7 = CARRY2(DAT_1028_1f85,uVar4); DAT_1028_1f85 = DAT_1028_1f85 + uVar4; DAT_1028_1f87 = DAT_1028_1f87 + param_3 + (uint)bVar7; if ((DAT_1028_1f7b < DAT_1028_1f83) || ((DAT_1028_1f7b <= DAT_1028_1f83 && (DAT_1028_1f79 < DAT_1028_1f81)))) { DAT_1028_1f6b = DAT_1028_1f7b - (uint)(DAT_1028_1f79 < 5000); DAT_1028_1f73 = DAT_1028_1f83 + (uint)(0xec77 < DAT_1028_1f81); uVar4 = DAT_1028_1f79; uVar2 = DAT_1028_1f81; } else { DAT_1028_1f6b = DAT_1028_1f83 - (uint)(DAT_1028_1f81 < 5000); DAT_1028_1f73 = DAT_1028_1f7b + (uint)(0xec77 < DAT_1028_1f79); uVar4 = DAT_1028_1f81; uVar2 = DAT_1028_1f79; } DAT_1028_1f71 = uVar2 + 5000; DAT_1028_1f69 = uVar4 + 0xec78; if ((DAT_1028_1f7f < DAT_1028_1f87) || ((DAT_1028_1f7f <= DAT_1028_1f87 && (DAT_1028_1f7d < DAT_1028_1f85)))) { DAT_1028_1f6f = DAT_1028_1f7f - (uint)(DAT_1028_1f7d < 5000); DAT_1028_1f77 = DAT_1028_1f87 + (uint)(0xec77 < DAT_1028_1f85); uVar4 = DAT_1028_1f7d; uVar2 = DAT_1028_1f85; } else { DAT_1028_1f6f = DAT_1028_1f87 - (uint)(DAT_1028_1f85 < 5000); DAT_1028_1f77 = DAT_1028_1f7f + (uint)(0xec77 < DAT_1028_1f7d); uVar4 = DAT_1028_1f85; uVar2 = DAT_1028_1f7d; } DAT_1028_1f75 = uVar2 + 5000; DAT_1028_1f6d = uVar4 + 0xec78; uVar1 = *(undefined4 *)(*(int *)(param_1 + 6) + 6); if (*(int *)((int)uVar1 + 0xbd4) == 0) { FUN_1008_08bb(0x34,0x2f,0x175,0x5d,uVar3); } else { FUN_1008_0837(0x34,0x2f,0x175,0x5d,uVar3); } uVar6 = 0x1008; FUN_1008_093f(0x34,0x2f,0x175,0x5d,uVar3); } else if (param_4 == '\x02') { iVar5 = param_3; uVar4 = FUN_1020_08a9(uVar8); bVar7 = DAT_1028_245e < uVar4; DAT_1028_245e = DAT_1028_245e - uVar4; DAT_1028_2460 = (DAT_1028_2460 - iVar5) - (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_2462,uVar4); DAT_1028_2462 = DAT_1028_2462 + uVar4; DAT_1028_2464 = DAT_1028_2464 + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = DAT_1028_2456 < uVar4; DAT_1028_2456 = DAT_1028_2456 - uVar4; DAT_1028_2458 = (DAT_1028_2458 - iVar5) - (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_245a,uVar4); DAT_1028_245a = DAT_1028_245a + uVar4; DAT_1028_245c = DAT_1028_245c + iVar5 + (uint)bVar7; if ((DAT_1028_2458 < DAT_1028_2460) || ((DAT_1028_2458 <= DAT_1028_2460 && (DAT_1028_2456 < DAT_1028_245e)))) { DAT_1028_2448 = DAT_1028_2458 - (uint)(DAT_1028_2456 < 5000); DAT_1028_2450 = DAT_1028_2460 + (uint)(0xec77 < DAT_1028_245e); uVar4 = DAT_1028_2456; uVar2 = DAT_1028_245e; } else { DAT_1028_2448 = DAT_1028_2460 - (uint)(DAT_1028_245e < 5000); DAT_1028_2450 = DAT_1028_2458 + (uint)(0xec77 < DAT_1028_2456); uVar4 = DAT_1028_245e; uVar2 = DAT_1028_2456; } DAT_1028_244e = uVar2 + 5000; DAT_1028_2446 = uVar4 + 0xec78; if ((DAT_1028_245c < DAT_1028_2464) || ((DAT_1028_245c <= DAT_1028_2464 && (DAT_1028_245a < DAT_1028_2462)))) { DAT_1028_244c = DAT_1028_245c - (uint)(DAT_1028_245a < 5000); DAT_1028_2454 = DAT_1028_2464 + (uint)(0xec77 < DAT_1028_2462); uVar4 = DAT_1028_245a; uVar2 = DAT_1028_2462; } else { DAT_1028_244c = DAT_1028_2464 - (uint)(DAT_1028_2462 < 5000); DAT_1028_2454 = DAT_1028_245c + (uint)(0xec77 < DAT_1028_245a); uVar4 = DAT_1028_2462; uVar2 = DAT_1028_245a; } DAT_1028_2452 = uVar2 + 5000; DAT_1028_244a = uVar4 + 0xec78; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = DAT_1028_2403 < uVar4; DAT_1028_2403 = DAT_1028_2403 - uVar4; DAT_1028_2405 = (DAT_1028_2405 - iVar5) - (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_2407,uVar4); DAT_1028_2407 = DAT_1028_2407 + uVar4; DAT_1028_2409 = DAT_1028_2409 + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = DAT_1028_23f3 < uVar4; DAT_1028_23f3 = DAT_1028_23f3 - uVar4; DAT_1028_23f5 = (DAT_1028_23f5 - iVar5) - (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23f7,uVar4); DAT_1028_23f7 = DAT_1028_23f7 + uVar4; DAT_1028_23f9 = DAT_1028_23f9 + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23fb,uVar4); DAT_1028_23fb = DAT_1028_23fb + uVar4; DAT_1028_23fd = DAT_1028_23fd + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = DAT_1028_23ff < uVar4; DAT_1028_23ff = DAT_1028_23ff - uVar4; DAT_1028_2401 = (DAT_1028_2401 - iVar5) - (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23b8,uVar4); DAT_1028_23b8 = DAT_1028_23b8 + uVar4; DAT_1028_23ba = DAT_1028_23ba + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23bc,uVar4); DAT_1028_23bc = DAT_1028_23bc + uVar4; DAT_1028_23be = DAT_1028_23be + iVar5 + (uint)bVar7; iVar5 = param_3; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23b0,uVar4); DAT_1028_23b0 = DAT_1028_23b0 + uVar4; DAT_1028_23b2 = DAT_1028_23b2 + iVar5 + (uint)bVar7; uVar4 = FUN_1020_08a9(); bVar7 = CARRY2(DAT_1028_23b4,uVar4); DAT_1028_23b4 = DAT_1028_23b4 + uVar4; DAT_1028_23b6 = DAT_1028_23b6 + param_3 + (uint)bVar7; if ((DAT_1028_23b2 < DAT_1028_23ba) || ((DAT_1028_23b2 <= DAT_1028_23ba && (DAT_1028_23b0 < DAT_1028_23b8)))) { DAT_1028_23a2 = DAT_1028_23b2 - (uint)(DAT_1028_23b0 < 5000); DAT_1028_23aa = DAT_1028_23ba + (uint)(0xec77 < DAT_1028_23b8); uVar4 = DAT_1028_23b0; uVar2 = DAT_1028_23b8; } else { DAT_1028_23a2 = DAT_1028_23ba - (uint)(DAT_1028_23b8 < 5000); DAT_1028_23aa = DAT_1028_23b2 + (uint)(0xec77 < DAT_1028_23b0); uVar4 = DAT_1028_23b8; uVar2 = DAT_1028_23b0; } DAT_1028_23a8 = uVar2 + 5000; DAT_1028_23a0 = uVar4 + 0xec78; if ((DAT_1028_23b6 < DAT_1028_23be) || ((DAT_1028_23b6 <= DAT_1028_23be && (DAT_1028_23b4 < DAT_1028_23bc)))) { DAT_1028_23a6 = DAT_1028_23b6 - (uint)(DAT_1028_23b4 < 5000); DAT_1028_23ae = DAT_1028_23be + (uint)(0xec77 < DAT_1028_23bc); uVar4 = DAT_1028_23b4; uVar2 = DAT_1028_23bc; } else { DAT_1028_23a6 = DAT_1028_23be - (uint)(DAT_1028_23bc < 5000); DAT_1028_23ae = DAT_1028_23b6 + (uint)(0xec77 < DAT_1028_23b4); uVar4 = DAT_1028_23bc; uVar2 = DAT_1028_23b4; } DAT_1028_23ac = uVar2 + 5000; DAT_1028_23a4 = uVar4 + 0xec78; uVar1 = *(undefined4 *)(*(int *)(param_1 + 6) + 6); if (*(int *)((int)uVar1 + 0xbd6) == 0) { FUN_1008_08bb(0x35,0x2d,0x174,0xaf,uVar3); } else { FUN_1008_0837(0x35,0x2d,0x174,0xaf,uVar3); } uVar6 = 0x1008; FUN_1008_093f(0x35,0x2d,0x174,0xaf,uVar3); } RELEASEDC(uVar6,uVar3); return; } /* ===== 1000:99f0 FUN_1000_99f0 ===== */ void __stdcall16far FUN_1000_99f0(int param_1) { int iVar1; undefined2 uVar2; undefined2 unaff_SS; uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); if ((*(char *)(iVar1 + 0xbda) == '\0') || (*(int *)(iVar1 + 0xbd4) != 0)) { uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); if ((*(char *)(iVar1 + 0xbda) == '\0') && (*(int *)(iVar1 + 0xbd4) != 0)) { *(int *)(iVar1 + 0xbd4) = *(int *)(iVar1 + 0xbd4) + -1; FUN_1000_7ed9(param_1,1,0,1,0); FUN_1000_8b0d(&stack0xfffe,1,0,1); } } else { *(int *)(iVar1 + 0xbd4) = *(int *)(iVar1 + 0xbd4) + 1; FUN_1000_7ed9(param_1,0xffff,0xffff,1,0); FUN_1000_8b0d(&stack0xfffe,0xffff,0xffff,1); } uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); if ((*(char *)(iVar1 + 0xbdb) == '\0') || (*(int *)(iVar1 + 0xbd6) != 0)) { uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); if ((*(char *)(iVar1 + 0xbdb) == '\0') && (*(int *)(iVar1 + 0xbd6) != 0)) { *(int *)(iVar1 + 0xbd6) = *(int *)(iVar1 + 0xbd6) + -1; FUN_1000_7ed9(param_1,1,0,2,0); FUN_1000_8b0d(&stack0xfffe,1,0,2); } } else { *(int *)(iVar1 + 0xbd6) = *(int *)(iVar1 + 0xbd6) + 1; FUN_1000_7ed9(param_1,0xffff,0xffff,2,0); FUN_1000_8b0d(&stack0xfffe,0xffff,0xffff,2); } return; } /* ===== 1000:9ae0 FUN_1000_9ae0 ===== */ undefined2 __stdcall16far FUN_1000_9ae0(int param_1,uint param_2,int param_3,uint param_4,int param_5,uint param_6,int param_7 ,uint param_8,int param_9) { uint uVar1; int iVar2; undefined2 uVar3; undefined2 unaff_SS; undefined1 local_3; uVar3 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar2 + 0xbba); iVar2 = *(int *)(iVar2 + 0xbbc); if ((param_9 < iVar2) || ((param_9 <= iVar2 && (param_8 <= uVar1)))) { uVar3 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar2 + 0xbbe); iVar2 = *(int *)(iVar2 + 0xbc0); if ((param_7 < iVar2) || ((param_7 <= iVar2 && (param_6 <= uVar1)))) { uVar3 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar2 + 0xbba); iVar2 = *(int *)(iVar2 + 0xbbc); if ((iVar2 < param_5) || ((iVar2 <= param_5 && (uVar1 <= param_4)))) { uVar3 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(uint *)(iVar2 + 0xbbe); iVar2 = *(int *)(iVar2 + 0xbc0); if ((iVar2 < param_3) || ((iVar2 <= param_3 && (uVar1 <= param_2)))) { local_3 = 1; goto LAB_1000_9b62; } } } } local_3 = 0; LAB_1000_9b62: return CONCAT11((char)(uVar1 >> 8),local_3); } /* ===== 1000:9b69 FUN_1000_9b69 ===== */ undefined2 __stdcall16far FUN_1000_9b69(undefined2 param_1,uint param_2,int param_3,uint param_4,int param_5,uint param_6, int param_7,uint param_8,int param_9) { uint uVar1; undefined1 local_3; uVar1 = DAT_1028_07db; if ((param_9 < DAT_1028_07dd) || ((param_9 <= DAT_1028_07dd && (param_8 <= DAT_1028_07db)))) { if ((param_7 < DAT_1028_07e1) || ((uVar1 = DAT_1028_07df, param_7 <= DAT_1028_07e1 && (uVar1 = DAT_1028_07df, param_6 <= DAT_1028_07df)))) { if ((DAT_1028_07dd < param_5) || ((uVar1 = DAT_1028_07db, DAT_1028_07dd <= param_5 && (DAT_1028_07db <= param_4)))) { uVar1 = DAT_1028_07df; if ((DAT_1028_07e1 < param_3) || ((DAT_1028_07e1 <= param_3 && (DAT_1028_07df <= param_2)))) { local_3 = 1; goto LAB_1000_9bc3; } } } } local_3 = 0; LAB_1000_9bc3: return CONCAT11((char)(uVar1 >> 8),local_3); } /* ===== 1000:9bca FUN_1000_9bca ===== */ void __stdcall16far FUN_1000_9bca(int param_1) { undefined2 uVar1; undefined2 uVar2; uint uVar3; int iVar4; int iVar5; undefined2 unaff_CS; undefined2 unaff_SS; undefined2 uVar6; undefined2 uVar7; uVar1 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); GETCLIENTRECT(unaff_CS,param_1 + -0x1a,unaff_SS); uVar1 = GETDC(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4),uVar1); *(undefined2 *)(param_1 + -0xc) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0xe) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x10) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x12) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xc); uVar2 = CREATECOMPATIBLEBITMAP(0x1228,100,100); *(undefined2 *)(param_1 + -8) = uVar2; iVar4 = DAT_1028_07d5 + (uint)(0xfe0b < DAT_1028_07d3); uVar3 = FUN_1020_08e6(uVar1); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba2) = uVar3 - 8; *(int *)(iVar5 + 0xba4) = iVar4 - (uint)(uVar3 < 8); iVar4 = DAT_1028_07d9 + (uint)(0xfe0b < DAT_1028_07d7); uVar3 = FUN_1020_08e6(); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba6) = uVar3 - 8; *(int *)(iVar5 + 0xba8) = iVar4 - (uint)(uVar3 < 8); *(int *)(param_1 + -0x20) = *(int *)(iVar5 + 0xba2) + -1; *(undefined2 *)(param_1 + -0x1c) = 1; *(int *)(param_1 + -0x22) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba6) + -1; *(undefined2 *)(param_1 + -0x1e) = 1; *(undefined2 *)(param_1 + -0x28) = 0x13; *(undefined2 *)(param_1 + -0x2a) = 0x13; uVar1 = SELECTOBJECT(0x1020,DAT_1028_085b); *(undefined2 *)(param_1 + -2) = uVar1; uVar1 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -8)); *(undefined2 *)(param_1 + -4) = uVar1; BITBLT(0x1228,0x20,0xcc,*(undefined2 *)(param_1 + -0x22),*(undefined2 *)(param_1 + -0x20), *(undefined2 *)(param_1 + -0xe),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),0,0); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x54)); BITBLT(0x1228,0xc6,0x88,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x52)); BITBLT(0x1228,0x86,0xee,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); if (0x1ba < *(int *)(param_1 + -0x22) + *(int *)(param_1 + -0x2a)) { if (*(int *)(param_1 + -0x22) < 0x1bb) { *(int *)(param_1 + -0x2a) = 0x1bb - *(int *)(param_1 + -0x22); } else { *(undefined2 *)(param_1 + -0x2a) = 0; } } uVar1 = *(undefined2 *)(param_1 + -0xc); BITBLT(0x1228,0x20,0xcc,0,0,*(undefined2 *)(param_1 + -0x10),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),*(undefined2 *)(param_1 + -0x22), *(undefined2 *)(param_1 + -0x20)); uVar2 = *(undefined2 *)(param_1 + -0xe); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -2)); uVar7 = *(undefined2 *)(param_1 + -0x10); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -4)); uVar6 = *(undefined2 *)(param_1 + -0x12); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -6)); DELETEOBJECT(0x1228,*(undefined2 *)(param_1 + -8),uVar6,uVar7,uVar2,uVar1); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0xe)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x10)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x12)); RELEASEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); return; } /* ===== 1000:9e85 FUN_1000_9e85 ===== */ void __stdcall16far FUN_1000_9e85(int param_1) { int iVar1; undefined2 uVar2; undefined2 unaff_SS; if ((((DAT_1028_3371 != 0) && (DAT_1028_33c4 != 0)) && (DAT_1028_3417 != 0)) && ((DAT_1028_346a != 0 && (DAT_1028_34bd != 0)))) { DAT_1028_0851 = 0; DAT_1028_0853 = 0; DAT_1028_07c8 = 1; *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdd) = 0; } DAT_1028_07c6 = 0; uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar1 + 0x5e) = 0; DAT_1028_07d3 = 0xf588; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x4d48; DAT_1028_07d9 = 6; *(undefined2 *)(iVar1 + 0xbba) = 0xf588; *(undefined2 *)(iVar1 + 0xbbc) = 4; *(undefined2 *)(iVar1 + 0xbbe) = 0x4d48; *(undefined2 *)(iVar1 + 0xbc0) = 6; *(undefined2 *)(iVar1 + 0xbc2) = 0xf588; *(undefined2 *)(iVar1 + 0xbc4) = 4; *(undefined2 *)(iVar1 + 0xbc6) = 0x4d48; *(undefined2 *)(iVar1 + 0xbc8) = 6; *(undefined2 *)(iVar1 + 0xbae) = 0; *(undefined2 *)(iVar1 + 0xbb0) = 0; *(undefined2 *)(iVar1 + 0xbaa) = 0; *(undefined2 *)(iVar1 + 0xbac) = 0; *(undefined2 *)(iVar1 + 0xbce) = 0; *(undefined2 *)(iVar1 + 0xbd0) = 0; *(undefined2 *)(iVar1 + 0xbd2) = 0; *(undefined2 *)(iVar1 + 0xbca) = 0; *(undefined2 *)(iVar1 + 0xbcc) = 0; *(undefined1 *)(iVar1 + 0xbdd) = 0; FUN_1000_9bca(param_1); return; } /* ===== 1000:9f73 FUN_1000_9f73 ===== */ void __stdcall16far FUN_1000_9f73(int param_1) { undefined2 uVar1; undefined2 uVar2; uint uVar3; int iVar4; int iVar5; undefined2 unaff_CS; undefined2 unaff_SS; undefined2 uVar6; undefined2 uVar7; uVar1 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); GETCLIENTRECT(unaff_CS,param_1 + -0x1a,unaff_SS); uVar1 = GETDC(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4),uVar1); *(undefined2 *)(param_1 + -0xc) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0xe) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x10) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x12) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xc); uVar2 = CREATECOMPATIBLEBITMAP(0x1228,100,100); *(undefined2 *)(param_1 + -8) = uVar2; iVar4 = DAT_1028_07d5 + (uint)(0xfe0b < DAT_1028_07d3); uVar3 = FUN_1020_08e6(uVar1); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba2) = uVar3 - 8; *(int *)(iVar5 + 0xba4) = iVar4 - (uint)(uVar3 < 8); iVar4 = DAT_1028_07d9 + (uint)(0xfe0b < DAT_1028_07d7); uVar3 = FUN_1020_08e6(); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba6) = uVar3 - 8; *(int *)(iVar5 + 0xba8) = iVar4 - (uint)(uVar3 < 8); iVar4 = (DAT_1028_07d5 - *(int *)(iVar5 + 0xbc4)) - (uint)(DAT_1028_07d3 < *(uint *)(iVar5 + 0xbc2)); uVar1 = FUN_1020_08e6(); uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar5 + 0xbb2) = uVar1; *(int *)(iVar5 + 0xbb4) = iVar4; iVar4 = (DAT_1028_07d9 - *(int *)(iVar5 + 0xbc8)) - (uint)(DAT_1028_07d7 < *(uint *)(iVar5 + 0xbc6)); uVar1 = FUN_1020_08e6(); uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar5 + 0xbb6) = uVar1; *(int *)(iVar5 + 3000) = iVar4; if ((*(int *)(iVar5 + 0xbb4) < 1) && ((*(int *)(iVar5 + 0xbb4) < 0 || (*(int *)(iVar5 + 0xbb2) == 0)))) { *(int *)(param_1 + -0x20) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba2) + -1; *(undefined2 *)(param_1 + -0x1c) = 1; } else { uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(int *)(param_1 + -0x20) = (*(int *)(iVar4 + 0xba2) - *(int *)(iVar4 + 0xbb2)) + -1; *(int *)(param_1 + -0x1c) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xbb2) + 1; } uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 3000); if ((iVar4 < 1) && ((iVar4 < 0 || (*(int *)(iVar5 + 0xbb6) == 0)))) { *(int *)(param_1 + -0x22) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba6) + -1; *(undefined2 *)(param_1 + -0x1e) = 1; } else { uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(int *)(param_1 + -0x22) = (*(int *)(iVar4 + 0xba6) - *(int *)(iVar4 + 0xbb6)) + -1; *(int *)(param_1 + -0x1e) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xbb6) + 1; } uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 0xbb2); if (*(int *)(iVar5 + 0xbb4) < 0) { iVar4 = -iVar4; } *(int *)(param_1 + -0x28) = iVar4 + 0x13; uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 0xbb6); if (*(int *)(iVar5 + 3000) < 0) { iVar4 = -iVar4; } *(int *)(param_1 + -0x2a) = iVar4 + 0x13; uVar1 = SELECTOBJECT(0x1020,DAT_1028_085b); *(undefined2 *)(param_1 + -2) = uVar1; uVar1 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -8)); *(undefined2 *)(param_1 + -4) = uVar1; BITBLT(0x1228,0x20,0xcc,*(undefined2 *)(param_1 + -0x22),*(undefined2 *)(param_1 + -0x20), *(undefined2 *)(param_1 + -0xe),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),0,0); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x54)); BITBLT(0x1228,0xc6,0x88,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x52)); BITBLT(0x1228,0x86,0xee,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); if (0x1ba < *(int *)(param_1 + -0x22) + *(int *)(param_1 + -0x2a)) { if (*(int *)(param_1 + -0x22) < 0x1bb) { *(int *)(param_1 + -0x2a) = 0x1bb - *(int *)(param_1 + -0x22); } else { *(undefined2 *)(param_1 + -0x2a) = 0; } } uVar1 = *(undefined2 *)(param_1 + -0xc); BITBLT(0x1228,0x20,0xcc,0,0,*(undefined2 *)(param_1 + -0x10),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),*(undefined2 *)(param_1 + -0x22), *(undefined2 *)(param_1 + -0x20)); uVar2 = *(undefined2 *)(param_1 + -0xe); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -2)); uVar7 = *(undefined2 *)(param_1 + -0x10); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -4)); uVar6 = *(undefined2 *)(param_1 + -0x12); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -6)); DELETEOBJECT(0x1228,*(undefined2 *)(param_1 + -8),uVar6,uVar7,uVar2,uVar1); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0xe)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x10)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x12)); RELEASEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); return; } /* ===== 1000:a38e FUN_1000_a38e ===== */ void __stdcall16far FUN_1000_a38e(int param_1,char param_2) { undefined2 uVar1; undefined2 uVar2; uint uVar3; int iVar4; int iVar5; undefined2 unaff_CS; undefined2 unaff_SS; undefined2 uVar6; uVar1 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); GETCLIENTRECT(unaff_CS,param_1 + -0x1a,unaff_SS); uVar1 = GETDC(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4),uVar1); *(undefined2 *)(param_1 + -0xc) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0xe) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x10) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x12) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xc); uVar2 = CREATECOMPATIBLEBITMAP(0x1228,100,100); *(undefined2 *)(param_1 + -8) = uVar2; uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar4 + 0xbc4) + (uint)(0xfe0b < *(uint *)(iVar4 + 0xbc2)); uVar3 = FUN_1020_08e6(uVar1); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba2) = uVar3 - 8; *(int *)(iVar5 + 0xba4) = iVar4 - (uint)(uVar3 < 8); iVar4 = *(int *)(iVar5 + 0xbc8) + (uint)(0xfe0b < *(uint *)(iVar5 + 0xbc6)); uVar3 = FUN_1020_08e6(); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba6) = uVar3 - 8; *(int *)(iVar5 + 0xba8) = iVar4 - (uint)(uVar3 < 8); *(int *)(param_1 + -0x20) = *(int *)(iVar5 + 0xba2) + -1; *(undefined2 *)(param_1 + -0x1c) = 1; *(int *)(param_1 + -0x22) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba6) + -1; *(undefined2 *)(param_1 + -0x1e) = 1; *(undefined2 *)(param_1 + -0x28) = 0x13; *(undefined2 *)(param_1 + -0x2a) = 0x13; uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar4 + 0xbaa) = 0; *(undefined2 *)(iVar4 + 0xbac) = 0; *(undefined2 *)(iVar4 + 0xbae) = 0; *(undefined2 *)(iVar4 + 0xbb0) = 0; uVar1 = SELECTOBJECT(0x1020,DAT_1028_085b); *(undefined2 *)(param_1 + -2) = uVar1; uVar1 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -8)); *(undefined2 *)(param_1 + -4) = uVar1; BITBLT(0x1228,0x20,0xcc,*(undefined2 *)(param_1 + -0x22),*(undefined2 *)(param_1 + -0x20), *(undefined2 *)(param_1 + -0xe),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),0,0); if (0x1ba < *(int *)(param_1 + -0x22) + *(int *)(param_1 + -0x2a)) { if (*(int *)(param_1 + -0x22) < 0x1bb) { *(int *)(param_1 + -0x2a) = 0x1bb - *(int *)(param_1 + -0x22); } else { *(undefined2 *)(param_1 + -0x2a) = 0; } } if (param_2 == '\0') { BITBLT(0x1228,0x20,0xcc,0,0,*(undefined2 *)(param_1 + -0x10),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),*(undefined2 *)(param_1 + -0x22), *(undefined2 *)(param_1 + -0x20)); } uVar1 = *(undefined2 *)(param_1 + -0xe); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -2)); uVar2 = *(undefined2 *)(param_1 + -0x10); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -4)); uVar6 = *(undefined2 *)(param_1 + -0x12); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -6)); DELETEOBJECT(0x1228,*(undefined2 *)(param_1 + -8),uVar6,uVar2,uVar1); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0xe)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x10)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x12)); RELEASEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); return; } /* ===== 1000:a604 FUN_1000_a604 ===== */ void __stdcall16far FUN_1000_a604(int param_1) { uint uVar1; undefined2 uVar2; int iVar3; int iVar4; int iVar5; int iVar6; int iVar7; undefined2 unaff_SS; bool bVar8; undefined2 uVar9; uint local_16; int local_14; uVar9 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); uVar2 = GETDC(); local_16 = 1; local_14 = 0; while( true ) { iVar3 = FUN_1020_08a9(uVar9,uVar2); iVar4 = iVar3 + 0x187; iVar3 = iVar3 + 0x18b; iVar5 = (DAT_1028_07d1 - 1) * 0x2c; iVar6 = iVar5 + 0x12a; iVar5 = iVar5 + 0x12e; uVar1 = *(uint *)((uint)DAT_1028_07d1 * 2 + 0x81f); iVar7 = (int)uVar1 >> 0xf; if ((local_14 < iVar7) || ((local_14 <= iVar7 && (local_16 <= uVar1)))) { FUN_1008_0837((iVar5 - iVar6) + 1,(iVar3 - iVar4) + 1,iVar6,iVar4,uVar2); } else { FUN_1008_08bb((iVar5 - iVar6) + 1,(iVar3 - iVar4) + 1,iVar6,iVar4,uVar2); } FUN_1008_093f((iVar5 - iVar6) + 1,(iVar3 - iVar4) + 1,iVar6,iVar4,uVar2); if ((local_14 == 0) && (local_16 == 6)) break; bVar8 = 0xfffe < local_16; local_16 = local_16 + 1; local_14 = local_14 + (uint)bVar8; } RELEASEDC(0x1008,uVar2); return; } /* ===== 1000:a70e FUN_1000_a70e ===== */ void __stdcall16far FUN_1000_a70e(int param_1) { undefined2 unaff_SS; DAT_1028_07d0 = 0; *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbde) = 1; DAT_1028_07c9 = 1; return; } /* ===== 1000:a72c FUN_1000_a72c ===== */ void __stdcall16far FUN_1000_a72c(int param_1) { undefined2 unaff_SS; byte local_4; byte local_3; local_3 = 1; while( true ) { FUN_1000_7e12(param_1,local_3); for (local_4 = 1; *(undefined2 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)local_4 * 0x15e + (uint)local_3 * 2 + 0x36c) = *(undefined2 *)((uint)local_3 * 0x53 + 0x99e), local_4 != 4; local_4 = local_4 + 1) { } if (local_3 == 0xaf) break; local_3 = local_3 + 1; } for (local_3 = 1; FUN_1000_b3f3(param_1,local_3 + 1000), local_3 != 5; local_3 = local_3 + 1) { } FUN_1000_bda2(param_1,0,0); DAT_1028_0874 = 0; local_3 = 1; while( true ) { if (local_3 <= DAT_1028_07d0) { DAT_1028_07d1 = local_3; *(undefined2 *)((uint)local_3 * 4 + 0x97e) = 0; *(undefined2 *)((uint)local_3 * 4 + 0x980) = 0; *(undefined2 *)((uint)local_3 * 4 + 0x98e) = 0; *(undefined2 *)((uint)local_3 * 4 + 0x990) = 0; *(undefined1 *)(local_3 + 0x9a1) = 1; *(undefined2 *)((uint)local_3 * 2 + 0x9a4) = 0; FUN_1000_bc36(param_1,0,0); *(undefined1 *)(local_3 + 0x816) = 1; if (local_3 < 2) { *(undefined2 *)((uint)local_3 * 2 + 0x81f) = 2; } else { *(undefined2 *)((uint)local_3 * 2 + 0x81f) = 3; } FUN_1000_a604(param_1); *(undefined2 *)((uint)local_3 * 4 + 0x835) = 1; *(undefined2 *)((uint)local_3 * 4 + 0x837) = 0; *(undefined1 *)(local_3 + 0x81a) = 1; for (local_4 = 1; *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)local_3 * 0x14 + (uint)local_4 + 0x467) = 0, local_4 != 0x14; local_4 = local_4 + 1) { } } if (local_3 == 4) break; local_3 = local_3 + 1; } DAT_1028_07d1 = 1; DAT_1028_07d2 = 0; for (local_4 = '\x01'; FUN_1000_7e92(param_1,local_4), local_4 != '\x14'; local_4 = local_4 + '\x01') { } return; } /* ===== 1000:a8ea FUN_1000_a8ea ===== */ void __stdcall16far FUN_1000_a8ea(void) { uint uVar1; int iVar2; void *unaff_SS; ushort in_stack_0000fef6; uint auStack_32 [22]; ushort local_6; int local_4; local_6 = _LCREAT((char *)0x3120000,0x1028); if (local_6 != 0xffff) { FUN_1020_16c9(); local_4 = 1; while( true ) { iVar2 = local_4; uVar1 = *(uint *)(local_4 * 4 + 0x87c); auStack_32[local_4 * 2] = *(uint *)(local_4 * 4 + 0x87a) ^ s_IWIKTDK_Highscores_1028_0010._0_2_; auStack_32[iVar2 * 2 + 1] = uVar1 ^ s_IWIKTDK_Highscores_1028_0010._2_2_; FUN_1008_2ee5(); if (local_4 == 10) break; local_4 = local_4 + 1; } _LWRITE(0x10,(void *)CONCAT22(local_6,(void *)0x1028),in_stack_0000fef6); _LWRITE(0x28,(void *)CONCAT22(local_6,unaff_SS),in_stack_0000fef6); _LWRITE(0xdc,(void *)CONCAT22(local_6,unaff_SS),in_stack_0000fef6); _LCLOSE(local_6); } return; } /* ===== 1000:a99c FUN_1000_a99c ===== */ void __stdcall16far FUN_1000_a99c(void) { undefined2 uVar1; uint uVar2; undefined2 uVar3; void *unaff_SS; undefined1 uVar4; undefined1 *puVar5; void *pvVar6; undefined1 *puVar7; void *pvVar8; ushort in_stack_0000fdc0; undefined1 local_13f [252]; uint auStack_43 [22]; undefined1 local_17 [16]; char local_7; ushort local_6; int local_4; local_7 = '\0'; local_6 = _LOPEN((char *)0x3200000,0x1028); if (local_6 == 0xffff) { local_6 = _LOPEN((char *)0x3200040,0x1028); } uVar4 = local_6 == 0xffff; if (!(bool)uVar4) { _LREAD(0x10,(void *)CONCAT22(local_6,unaff_SS),in_stack_0000fdc0); puVar7 = local_13f; pvVar8 = unaff_SS; FUN_1020_0b00(0x10,local_17,unaff_SS); puVar5 = &stack0xfdc1; pvVar6 = unaff_SS; FUN_1020_0b00(0x10,0x14,0x1028); FUN_1020_0ac3(puVar5,pvVar6,puVar7,pvVar8); if ((bool)uVar4) { local_7 = '\x01'; _LREAD(0x28,(void *)CONCAT22(local_6,unaff_SS),in_stack_0000fdc0); _LREAD(0xdc,(void *)CONCAT22(local_6,(void *)0x1028),in_stack_0000fdc0); local_4 = 1; while( true ) { uVar2 = auStack_43[local_4 * 2 + 1] ^ s_IWIKTDK_Highscores_1028_0010._2_2_; *(uint *)(local_4 * 4 + 0x87a) = auStack_43[local_4 * 2] ^ s_IWIKTDK_Highscores_1028_0010._0_2_; *(uint *)(local_4 * 4 + 0x87c) = uVar2; if (local_4 == 10) break; local_4 = local_4 + 1; } } _LCLOSE(local_6); } if (local_7 == '\0') { local_4 = 1; while( true ) { uVar3 = 0; uVar1 = FUN_1020_08a9(); *(undefined2 *)(local_4 * 4 + 0x87a) = uVar1; *(undefined2 *)(local_4 * 4 + 0x87c) = uVar3; if (local_4 == 10) break; local_4 = local_4 + 1; } FUN_1008_2ee5(0x32d,0x1028,0x8a6,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x8bc,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x8d2,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x8e8,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x8fe,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x914,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x92a,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x940,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x956,0x1028); FUN_1008_2ee5(0x32d,0x1028,0x96c,0x1028); } return; } /* ===== 1000:ab3c FUN_1000_ab3c ===== */ void __stdcall16far FUN_1000_ab3c(int param_1) { int iVar1; undefined2 uVar2; undefined2 unaff_SS; undefined4 uVar3; if (DAT_1028_07d2 != 0) { FUN_1008_2ee5(0x336,0x1028,(uint)DAT_1028_07d2 * 0x16 + 0x890,0x1028); uVar3 = FUN_1008_1607(0,0,0x1ce,0x16,(uint)DAT_1028_07d2 * 0x16 + 0x890,0x1028,0x373,0x1028, 0x349,0x1028,(int)*(undefined4 *)(param_1 + 6), (int)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10)); (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x38)) (0x1008,(int *)DAT_1028_064e,(int)((ulong)DAT_1028_064e >> 0x10),uVar3); } uVar3 = FUN_1000_5aea(0,0,0x10e,0x38b,0x1028,(int)*(undefined4 *)(param_1 + 6), (int)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10)); uVar3 = (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x34)) (0x1000,(int *)DAT_1028_064e,(int)((ulong)DAT_1028_064e >> 0x10),uVar3); uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar1 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar1 + 0x41) = (int)uVar3; *(undefined2 *)(iVar1 + 0x43) = (int)((ulong)uVar3 >> 0x10); FUN_1018_0e9e((int)*(undefined4 *)(iVar1 + 0x41), (int)((ulong)*(undefined4 *)(iVar1 + 0x41) >> 0x10),1); return; } /* ===== 1000:abe5 FUN_1000_abe5 ===== */ void __stdcall16far FUN_1000_abe5(undefined2 param_1) { int iVar1; undefined2 uVar2; int iVar3; uint local_8; int local_6; local_6 = 1; while( true ) { iVar3 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x980); iVar1 = *(int *)(local_6 * 4 + 0x87c); if ((iVar1 < iVar3) || ((iVar1 <= iVar3 && (*(uint *)(local_6 * 4 + 0x87a) < *(uint *)((uint)DAT_1028_07d1 * 4 + 0x97e))))) break; if (local_6 == 10) { return; } local_6 = local_6 + 1; } if (local_6 + 1U < 0xb) { local_8 = 10; while( true ) { iVar3 = (local_8 - 1) * 4; uVar2 = *(undefined2 *)(iVar3 + 0x87c); *(undefined2 *)(local_8 * 4 + 0x87a) = *(undefined2 *)(iVar3 + 0x87a); *(undefined2 *)(local_8 * 4 + 0x87c) = uVar2; FUN_1020_0891(0x16,local_8 * 0x16 + 0x890,0x1028,(local_8 - 1) * 0x16 + 0x890,0x1028); if (local_8 == local_6 + 1U) break; local_8 = local_8 - 1; } } uVar2 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x980); *(undefined2 *)(local_6 * 4 + 0x87a) = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x97e); *(undefined2 *)(local_6 * 4 + 0x87c) = uVar2; DAT_1028_07d2 = (undefined1)local_6; FUN_1000_ab3c(param_1); FUN_1000_a8ea(param_1); return; } /* ===== 1000:acc2 FUN_1000_acc2 ===== */ void __stdcall16far FUN_1000_acc2(undefined2 param_1) { byte bVar1; byte bVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined1 local_14c; uVar5 = 0x1228; uVar3 = GETDC(); bVar2 = DAT_1028_07d1; bVar1 = DAT_1028_07d0; if (DAT_1028_07d0 != 0) { local_14c = 1; while( true ) { FUN_1008_0837(0x1f,0x8b,(local_14c - 1) * 0x2c + 0x114,0x1d8,uVar3); FUN_1008_093f(0x1f,0x8b,(local_14c - 1) * 0x2c + 0x114,0x1d8,uVar3); DAT_1028_07d1 = local_14c; if (local_14c == bVar2) { FUN_1000_bc36(param_1,0,0); uVar5 = *(undefined2 *)((uint)local_14c * 4 + 0x990); uVar4 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar4,uVar5); FUN_1000_0002(*(undefined2 *)((uint)local_14c * 2 + 0x9a4),uVar3); FUN_1008_093f(0x7b,0x2a,0x4f,0x37,uVar3); FUN_1008_0837(0xb,0xb,(local_14c - 1) * 0x2c + 0x118,0x174,uVar3); FUN_1008_093f(0xb,0xb,(local_14c - 1) * 0x2c + 0x118,0x174,uVar3); } else { FUN_1000_bc36(param_1,0xffff,0xffff); FUN_1008_08bb(0xb,0xb,(local_14c - 1) * 0x2c + 0x118,0x174,uVar3); FUN_1008_093f(0xb,0xb,(local_14c - 1) * 0x2c + 0x118,0x174,uVar3); } uVar5 = 0x1008; if (local_14c == bVar1) break; local_14c = local_14c + 1; } } DAT_1028_07d1 = bVar2; RELEASEDC(uVar5,uVar3); return; } /* ===== 1000:ae6e FUN_1000_ae6e ===== */ void __stdcall16far FUN_1000_ae6e(int param_1) { byte bVar1; uint uVar2; undefined1 extraout_AH; int iVar3; int iVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 unaff_SS; int local_9; byte local_4; if ((DAT_1028_0874 == '\0') && (DAT_1028_399a != 0)) { DAT_1028_0874 = '\0'; FUN_1000_a38e(param_1,0); uVar7 = DAT_1028_396b; DAT_1028_07d3 = DAT_1028_3969; DAT_1028_07d5 = DAT_1028_396b; DAT_1028_07d7 = DAT_1028_396d; DAT_1028_07d9 = DAT_1028_396f; uVar5 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar3 + 0xbc2) = DAT_1028_3969; *(undefined2 *)(iVar3 + 0xbc4) = uVar7; uVar7 = DAT_1028_07d9; *(undefined2 *)(iVar3 + 0xbc6) = DAT_1028_07d7; *(undefined2 *)(iVar3 + 0xbc8) = uVar7; *(undefined1 *)(iVar3 + (uint)DAT_1028_07d1 * 0x14 + 0x47b) = 0; FUN_1000_b3f3(param_1,0x3fc); FUN_1000_bdde(param_1,1,0); uVar7 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar3 + 0xbaa) = 0; *(undefined2 *)(iVar3 + 0xbac) = 0; uVar7 = *(undefined2 *)(iVar3 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar5 = FUN_1020_1017(); uVar6 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar3 + 0xbae) = uVar5; *(undefined2 *)(iVar3 + 0xbb0) = uVar7; *(undefined2 *)(iVar3 + 0xbca) = 0; *(undefined2 *)(iVar3 + 0xbcc) = 0; *(undefined2 *)(iVar3 + 0xbce) = 0; *(undefined2 *)(iVar3 + 0xbd0) = 0; *(undefined2 *)(iVar3 + 0xbd2) = 0; DAT_1028_399a = 0; DAT_1028_0875 = 1; DAT_1028_41f9 = 1; *(undefined1 *)(iVar3 + 0x61) = 1; } else { DAT_1028_0875 = 0; FUN_1008_0002(8); iVar3 = param_1; FUN_1000_a38e(param_1,0); if (DAT_1028_0874 == '\0') { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdd) = 0; } *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdc) = 0; if (*(int *)((uint)DAT_1028_07d1 * 2 + 0x81f) == 0) { uVar7 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined1 *)(iVar3 + 0xbda) = 0; *(undefined1 *)(iVar3 + 0xbdb) = 0; FUN_1000_a99c(param_1); iVar3 = 0x1000; FUN_1000_abe5(param_1); } uVar7 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar4 + 0xbce) = 0; *(undefined2 *)(iVar4 + 0xbd0) = 0; *(undefined2 *)(iVar4 + 0xbd2) = 0; local_4 = 1; while( true ) { *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0xaf + (uint)local_4 + 0x61) = *(undefined1 *)((uint)local_4 * 0x53 + 0x98f); *(undefined2 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x15e + (uint)local_4 * 2 + 0x36c) = *(undefined2 *)((uint)local_4 * 0x53 + 0x99e); bVar1 = DAT_1028_07d1; if (local_4 == 0xaf) break; local_4 = local_4 + 1; } do { uVar2 = (uint)DAT_1028_07d1 % (uint)DAT_1028_07d0 + 1; DAT_1028_07d1 = (byte)uVar2; if (0 < *(int *)((uVar2 & 0xff) * 2 + 0x81f)) break; } while (DAT_1028_07d1 != bVar1); if (*(int *)((uVar2 & 0xff) * 2 + 0x81f) < 1) { DAT_1028_07d1 = 0; FUN_1000_a70e(param_1); if (DAT_1028_07d2 == '\0') { uVar7 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined1 *)(iVar3 + 0xbda) = 0; *(undefined1 *)(iVar3 + 0xbdb) = 0; FUN_1000_ab3c(param_1); } } else { local_4 = 1; while( true ) { *(undefined1 *)((uint)local_4 * 0x53 + 0x98f) = *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0xaf + (uint)local_4 + 0x61 ); *(undefined2 *)((uint)local_4 * 0x53 + 0x99e) = *(undefined2 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x15e + (uint)local_4 * 2 + 0x36c); if (DAT_1028_07d1 != bVar1) { iVar3 = param_1; FUN_1000_7e12(param_1,local_4); } if (local_4 == 0xaf) break; local_4 = local_4 + 1; } local_4 = '\x01'; while( true ) { if (DAT_1028_07d1 != bVar1) { iVar3 = param_1; FUN_1000_7e92(param_1,local_4); } if (local_4 == '\x14') break; local_4 = local_4 + '\x01'; } local_4 = 2; while( true ) { if (local_4 <= *(byte *)(DAT_1028_07d1 + 0x816)) { iVar3 = param_1; FUN_1000_b30b(param_1,local_4 + 999); } if (local_4 == 6) break; local_4 = local_4 + 1; } if (DAT_1028_07d1 != bVar1) { local_9 = 0; local_4 = 1; while( true ) { if (*(char *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + (uint)local_4 + 0x46c) != '\0') { local_9 = local_9 + 1; } if (local_4 == 9) break; local_4 = local_4 + 1; } uVar7 = GETDC(0x1000,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4)); FUN_1008_0dbd(local_9,uVar7); FUN_1008_0b9e(CONCAT11(extraout_AH,DAT_1028_07d1),uVar7); iVar3 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 4); RELEASEDC(0x1008,uVar7); } FUN_1000_acc2(param_1); *(int *)((uint)DAT_1028_07d1 * 2 + 0x81f) = *(int *)((uint)DAT_1028_07d1 * 2 + 0x81f) + -1; FUN_1000_9e85(param_1); uVar7 = GETDC(0x1000,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4),iVar3); FUN_1008_08bb(0x14,0x94,0xf3,0x54,uVar7); FUN_1008_093f(0x14,0x94,0xf3,0x54,uVar7); RELEASEDC(0x1008,uVar7); FUN_1000_a604(param_1); } } return; } /* ===== 1000:b2c8 FUN_1000_b2c8 ===== */ void __stdcall16far FUN_1000_b2c8(undefined2 param_1,int param_2,int param_3,int param_4,int param_5,undefined2 param_6) { FUN_1008_0837((param_2 - param_4) + 1,(param_3 - param_5) + 1,param_4,param_5,param_6); FUN_1008_093f((param_2 - param_4) + 1,(param_3 - param_5) + 1,param_4,param_5,param_6); return; } /* ===== 1000:b30b FUN_1000_b30b ===== */ void __stdcall16far FUN_1000_b30b(undefined2 param_1,uint param_2) { undefined2 uVar1; int iVar2; undefined2 uVar3; uVar1 = GETDC(); if (param_2 < 0xb0) { iVar2 = param_2 * 0x53; uVar3 = 0x1000; FUN_1000_b2c8(&stack0xfffe,*(undefined2 *)(iVar2 + 0x9ac),*(undefined2 *)(iVar2 + 0x9aa), *(undefined2 *)(iVar2 + 0x9a8),*(undefined2 *)(iVar2 + 0x9a6),uVar1); } else if ((param_2 < 0x3ee) || (0x3f6 < param_2)) { iVar2 = (param_2 - 1000) * 8; uVar3 = 0x1000; FUN_1000_b2c8(&stack0xfffe,*(undefined2 *)(iVar2 + 0x4269),*(undefined2 *)(iVar2 + 16999), *(undefined2 *)(iVar2 + 0x4265),*(undefined2 *)(iVar2 + 0x4263),uVar1); } else { uVar3 = 0x1008; FUN_1008_0dbd(param_2 - 0x3ed,uVar1); } RELEASEDC(uVar3,uVar1); return; } /* ===== 1000:b3b0 FUN_1000_b3b0 ===== */ void __stdcall16far FUN_1000_b3b0(undefined2 param_1,int param_2,int param_3,int param_4,int param_5,undefined2 param_6) { FUN_1008_08bb((param_2 - param_4) + 1,(param_3 - param_5) + 1,param_4,param_5,param_6); FUN_1008_093f((param_2 - param_4) + 1,(param_3 - param_5) + 1,param_4,param_5,param_6); return; } /* ===== 1000:b3f3 FUN_1000_b3f3 ===== */ void __stdcall16far FUN_1000_b3f3(undefined2 param_1,uint param_2) { undefined2 uVar1; int iVar2; uVar1 = GETDC(); if (param_2 < 0xb0) { iVar2 = param_2 * 0x53; FUN_1000_b3b0(&stack0xfffe,*(undefined2 *)(iVar2 + 0x9ac),*(undefined2 *)(iVar2 + 0x9aa), *(undefined2 *)(iVar2 + 0x9a8),*(undefined2 *)(iVar2 + 0x9a6),uVar1); } else { iVar2 = (param_2 - 1000) * 8; FUN_1000_b3b0(&stack0xfffe,*(undefined2 *)(iVar2 + 0x4269),*(undefined2 *)(iVar2 + 16999), *(undefined2 *)(iVar2 + 0x4265),*(undefined2 *)(iVar2 + 0x4263),uVar1); } RELEASEDC(0x1000,uVar1); return; } /* ===== 1000:b476 FUN_1000_b476 ===== */ void __stdcall16far FUN_1000_b476(int param_1,uint param_2,uint param_3) { uint uVar1; bool bVar2; int iVar3; uint uVar4; undefined2 uVar5; int iVar6; undefined2 uVar7; undefined2 unaff_SS; uint local_7; byte local_3; if (DAT_1028_07c6 == '\0') { if ((((param_2 & 1) == 1) && (0x80 < param_3)) && (param_3 < 0x86)) { *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + param_3 + 0x3f5) = 1; FUN_1000_b30b(param_1,param_3 + 0x376); } if ((param_2 & 2) == 2) { iVar6 = *(int *)(param_3 * 0x53 + 0x99e); *(undefined1 *)(iVar6 * 0x53 + 0x98f) = 0; FUN_1000_7e12(param_1,iVar6); if ((param_2 & 0x2000) == 0x2000) { *(undefined1 *)((iVar6 + 1) * 0x53 + 0x98f) = 0; *(undefined1 *)((iVar6 + 2) * 0x53 + 0x98f) = 0; } } if ((((param_2 & 0x400) == 0x400) && (DAT_1028_07c7 == '\0')) && (DAT_1028_07c8 == '\0')) { DAT_1028_0855 = 0; DAT_1028_0857 = 0; DAT_1028_07c7 = '\x01'; } if ((param_2 & 4) == 4) { FUN_1008_0002(0xc); DAT_1028_39de = 1; *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0xaf + 0xf6) = 1; uVar7 = 0x1000; FUN_1000_b30b(param_1,0x95); if (DAT_1028_399a == 0) { iVar6 = *(int *)((uint)DAT_1028_07d1 * 2 + 0x9a4); do { uVar7 = 0x1020; iVar3 = FUN_1020_14a4(6); *(int *)((uint)DAT_1028_07d1 * 2 + 0x9a4) = iVar3 + 1; } while (*(int *)((uint)DAT_1028_07d1 * 2 + 0x9a4) == iVar6); } else { *(undefined2 *)((uint)DAT_1028_07d1 * 2 + 0x9a4) = 7; } uVar7 = GETDC(uVar7,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4)); FUN_1000_0002(*(undefined2 *)((uint)DAT_1028_07d1 * 2 + 0x9a4),uVar7); FUN_1008_093f(0x7b,0x2a,0x4f,0x37,uVar7); RELEASEDC(0x1008,uVar7); } if ((param_2 & 8) == 8) { FUN_1008_0002(0xc); bVar2 = true; local_3 = 0; while (*(char *)(((uint)local_3 * 3 + 0x5a) * 0x53 + 0x98f) == '\0') { if (local_3 == 4) goto LAB_1000_b66c; local_3 = local_3 + 1; } bVar2 = false; LAB_1000_b66c: if (bVar2) { FUN_1008_0002(0x11); if (*(char *)(DAT_1028_07d1 + 0x816) == '\x06') { FUN_1000_bc36(param_1,50000,0); } else { if (*(char *)(DAT_1028_07d1 + 0x816) == '\x01') { *(undefined1 *)(DAT_1028_07d1 + 0x816) = 2; } else { *(char *)(DAT_1028_07d1 + 0x816) = *(char *)(DAT_1028_07d1 + 0x816) + '\x01'; } FUN_1000_b30b(param_1,*(byte *)(DAT_1028_07d1 + 0x816) + 999); } local_3 = 0; while( true ) { *(undefined1 *)(((uint)local_3 * 3 + 0x5a) * 0x53 + 0x98f) = 1; *(undefined1 *)(((uint)local_3 * 3 + 0x5b) * 0x53 + 0x98f) = 1; *(undefined1 *)(((uint)local_3 * 3 + 0x5c) * 0x53 + 0x98f) = 1; FUN_1000_7e12(param_1,(uint)local_3 * 3 + 0x5a); if (local_3 == 4) break; local_3 = local_3 + 1; } } } if ((param_2 & 0x10) == 0x10) { FUN_1008_0002(0xc); bVar2 = true; local_3 = 0; while (*(char *)(((uint)local_3 * 3 + 0x6d) * 0x53 + 0x98f) == '\0') { if (local_3 == 3) goto LAB_1000_b79e; local_3 = local_3 + 1; } bVar2 = false; LAB_1000_b79e: if (bVar2) { local_7 = 1; local_3 = 1; while( true ) { if (*(char *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + (uint)local_3 + 0x46c) != '\0') { local_7 = local_7 + 1; } if (local_3 == 9) break; local_3 = local_3 + 1; } if (local_7 < 9) { FUN_1008_0002(0x11); *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + local_7 + 0x46c) = 1; FUN_1000_b30b(param_1,local_7 + 0x3ed); FUN_1000_bc36(param_1,local_7 * 10000,0); } else if (local_7 == 9) { FUN_1008_0002(0x11); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x475) = 1; FUN_1000_b30b(param_1,0x3f6); FUN_1000_bc36(param_1,0x5f90,0); uVar7 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar6 = (int)*(undefined4 *)(param_1 + 6); *(undefined1 *)(iVar6 + 0xbdc) = 1; DAT_1028_3b2a = 1; DAT_1028_0b81 = 1; DAT_1028_3b7d = 1; uVar7 = GETDC(0x1000,*(undefined2 *)(iVar6 + 4)); FUN_1008_0837((DAT_1028_3b47 - DAT_1028_3b43) + 1,(DAT_1028_3b45 - DAT_1028_3b41) + 1, DAT_1028_3b43,DAT_1028_3b41,uVar7); FUN_1008_093f((DAT_1028_3b47 - DAT_1028_3b43) + 1,(DAT_1028_3b45 - DAT_1028_3b41) + 1, DAT_1028_3b43,DAT_1028_3b41,uVar7); FUN_1008_0837((DAT_1028_3b9a - DAT_1028_3b96) + 1,(DAT_1028_3b98 - DAT_1028_3b94) + 1, DAT_1028_3b96,DAT_1028_3b94,uVar7); FUN_1008_093f((DAT_1028_3b9a - DAT_1028_3b96) + 1,(DAT_1028_3b98 - DAT_1028_3b94) + 1, DAT_1028_3b96,DAT_1028_3b94,uVar7); FUN_1008_0837((DAT_1028_0b9e - DAT_1028_0b9a) + 1,(DAT_1028_0b9c - DAT_1028_0b98) + 1, DAT_1028_0b9a,DAT_1028_0b98,uVar7); FUN_1008_093f((DAT_1028_0b9e - DAT_1028_0b9a) + 1,(DAT_1028_0b9c - DAT_1028_0b98) + 1, DAT_1028_0b9a,DAT_1028_0b98,uVar7); RELEASEDC(0x1008,uVar7); } else { FUN_1008_0002(7); if (*(char *)((int)*(undefined4 *)(param_1 + 6) + 0xbdc) == '\0') { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdc) = 1; } else { uVar1 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar6 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar4 = (uint)DAT_1028_07d1; *(int *)(uVar4 * 4 + 0x98e) = uVar1 + 0x86a0; *(int *)(uVar4 * 4 + 0x990) = iVar6 + 1 + (uint)(0x795f < uVar1); uVar7 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar5 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar5,uVar7); } } local_3 = 0; while( true ) { *(undefined1 *)(((uint)local_3 * 3 + 0x6d) * 0x53 + 0x98f) = 1; *(undefined1 *)(((uint)local_3 * 3 + 0x6e) * 0x53 + 0x98f) = 1; *(undefined1 *)(((uint)local_3 * 3 + 0x6f) * 0x53 + 0x98f) = 1; FUN_1000_7e12(param_1,(uint)local_3 * 3 + 0x6d); if (local_3 == 3) break; local_3 = local_3 + 1; } } } if ((param_2 & 0x1000) == 0x1000) { if (param_3 == 0x96) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xf7) = 10; FUN_1000_b30b(param_1,0x96); DAT_1028_3b2a = 1; FUN_1000_b30b(param_1,0x99); } else if (param_3 == 0x97) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xf8) = 10; FUN_1000_b30b(param_1,0x97); DAT_1028_0b81 = 1; FUN_1000_b30b(param_1,6); } else if (param_3 == 0x98) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xf9) = 10; FUN_1000_b30b(param_1,0x98); DAT_1028_3b7d = 1; FUN_1000_b30b(param_1,0x9a); } } if ((param_2 & 0x40) == 0x40) { if (param_3 == 0x33) { FUN_1008_0002(6); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0x94) = 5; FUN_1000_b30b(param_1,0x33); iVar6 = (*(byte *)(DAT_1028_07d1 + 0x816) - 1) * 1000; FUN_1000_bc36(param_1,iVar6,iVar6 >> 0xf); } else if (param_3 == 0x34) { FUN_1008_0002(6); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0x95) = 5; FUN_1000_b30b(param_1,0x34); iVar6 = (*(byte *)(DAT_1028_07d1 + 0x816) - 1) * 1000; FUN_1000_bc36(param_1,iVar6,iVar6 >> 0xf); } else if (param_3 == 0x35) { FUN_1008_0002(6); *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0x96) = 5; FUN_1000_b30b(param_1,0x35); iVar6 = (*(byte *)(DAT_1028_07d1 + 0x816) - 1) * 1000; FUN_1000_bc36(param_1,iVar6,iVar6 >> 0xf); } else if ((0x8b < param_3) && (param_3 < 0x94)) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + param_3 + 0x61) = 0x14; FUN_1000_b30b(param_1,param_3); } } } return; } /* ===== 1000:bc36 FUN_1000_bc36 ===== */ void __stdcall16far FUN_1000_bc36(int param_1,uint param_2,int param_3) { uint *puVar1; int *piVar2; uint uVar3; int iVar4; int iVar5; undefined2 uVar6; uint uVar7; int iVar8; undefined2 unaff_SS; undefined2 uVar9; uVar9 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); uVar6 = GETDC(); if (((param_3 != -1) || (param_2 != 0xffff)) && (DAT_1028_07c6 == '\0')) { if (DAT_1028_0874 != '\0') { param_2 = FUN_1020_08a9(uVar9); } if (*(char *)((int)*(undefined4 *)(param_1 + 6) + 0xbdc) != '\0') { param_2 = FUN_1020_08a9(uVar9); } uVar3 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x97e); iVar4 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x980); uVar7 = (uint)DAT_1028_07d1; *(int *)(uVar7 * 4 + 0x97e) = uVar3 + param_2; *(int *)(uVar7 * 4 + 0x980) = iVar4 + param_3 + (uint)CARRY2(uVar3,param_2); iVar4 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x837); if ((iVar4 < 0) || ((iVar4 < 1 && (*(uint *)((uint)DAT_1028_07d1 * 4 + 0x835) < 5)))) { iVar8 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x835) * 4; iVar4 = *(int *)(iVar8 + 0x827); iVar5 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x980); if ((iVar4 < iVar5) || ((iVar4 <= iVar5 && (*(uint *)(iVar8 + 0x825) <= *(uint *)((uint)DAT_1028_07d1 * 4 + 0x97e))))) { FUN_1008_0002(7); uVar7 = (uint)DAT_1028_07d1; puVar1 = (uint *)(uVar7 * 4 + 0x835); uVar3 = *puVar1; *puVar1 = *puVar1 + 1; piVar2 = (int *)(uVar7 * 4 + 0x837); *piVar2 = *piVar2 + (uint)(0xfffe < uVar3); piVar2 = (int *)((uint)DAT_1028_07d1 * 2 + 0x81f); *piVar2 = *piVar2 + 1; FUN_1000_a604(param_1); } } FUN_1008_0b9e(DAT_1028_07d1,uVar6); } FUN_1008_0996(uVar6,DAT_1028_07d1,0); RELEASEDC(0x1008,uVar6); return; } /* ===== 1000:bda2 FUN_1000_bda2 ===== */ void __stdcall16far FUN_1000_bda2(undefined2 param_1,undefined2 param_2,undefined2 param_3) { undefined2 uVar1; uVar1 = GETDC(); FUN_1008_0996(uVar1,param_2,param_3); RELEASEDC(0x1008,uVar1); return; } /* ===== 1000:bdde FUN_1000_bdde ===== */ void __stdcall16far FUN_1000_bdde(undefined2 param_1,int param_2) { uint uVar1; int iVar2; int iVar3; iVar2 = DAT_1028_07d5; iVar3 = (param_2 + 0xad) * 0x53; *(uint *)(iVar3 + 0x96d) = DAT_1028_07d3; *(int *)(iVar3 + 0x96f) = iVar2; iVar2 = DAT_1028_07d9; iVar3 = (param_2 + 0xad) * 0x53; *(uint *)(iVar3 + 0x971) = DAT_1028_07d7; *(int *)(iVar3 + 0x973) = iVar2; uVar1 = DAT_1028_07d3 + 0xc180; iVar2 = DAT_1028_07d5 - (uint)(DAT_1028_07d3 < 16000); iVar3 = (param_2 + 0xad) * 0x53; *(int *)(iVar3 + 0x95d) = DAT_1028_07d3 + 0xadf8; *(int *)(iVar3 + 0x95f) = iVar2 - (uint)(uVar1 < 5000); uVar1 = DAT_1028_07d7 + 0xc180; iVar2 = DAT_1028_07d9 - (uint)(DAT_1028_07d7 < 16000); iVar3 = (param_2 + 0xad) * 0x53; *(int *)(iVar3 + 0x961) = DAT_1028_07d7 + 0xadf8; *(int *)(iVar3 + 0x963) = iVar2 - (uint)(uVar1 < 5000); uVar1 = DAT_1028_07d3 + 16000; iVar2 = DAT_1028_07d5 + (uint)(0xc17f < DAT_1028_07d3); iVar3 = (param_2 + 0xad) * 0x53; *(int *)(iVar3 + 0x965) = DAT_1028_07d3 + 21000; *(int *)(iVar3 + 0x967) = iVar2 + (uint)(0xec77 < uVar1); uVar1 = DAT_1028_07d7 + 16000; iVar2 = DAT_1028_07d9 + (uint)(0xc17f < DAT_1028_07d7); iVar3 = (param_2 + 0xad) * 0x53; *(int *)(iVar3 + 0x969) = DAT_1028_07d7 + 21000; *(int *)(iVar3 + 0x96b) = iVar2 + (uint)(0xec77 < uVar1); return; } /* ===== 1000:beff FUN_1000_beff ===== */ void __stdcall16far FUN_1000_beff(int param_1,uint param_2,int param_3,uint param_4,int param_5) { undefined2 uVar1; undefined2 uVar2; uint uVar3; int iVar4; int iVar5; undefined2 unaff_CS; undefined2 unaff_SS; bool bVar6; undefined2 uVar7; undefined2 uVar8; uVar1 = *(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4); GETCLIENTRECT(unaff_CS,param_1 + -0x1a,unaff_SS); uVar1 = GETDC(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 4),uVar1); *(undefined2 *)(param_1 + -0xc) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0xe) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x10) = uVar1; uVar1 = CREATECOMPATIBLEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); *(undefined2 *)(param_1 + -0x12) = uVar1; uVar1 = *(undefined2 *)(param_1 + -0xc); uVar2 = CREATECOMPATIBLEBITMAP(0x1228,100,100); *(undefined2 *)(param_1 + -8) = uVar2; iVar4 = DAT_1028_07d5; uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(uint *)(iVar5 + 0xbc2) = DAT_1028_07d3; *(int *)(iVar5 + 0xbc4) = iVar4; iVar4 = DAT_1028_07d9; *(uint *)(iVar5 + 0xbc6) = DAT_1028_07d7; *(int *)(iVar5 + 0xbc8) = iVar4; bVar6 = CARRY2(DAT_1028_07d7,param_4); DAT_1028_07d7 = DAT_1028_07d7 + param_4; DAT_1028_07d9 = DAT_1028_07d9 + param_5 + (uint)bVar6; bVar6 = CARRY2(DAT_1028_07d3,param_2); DAT_1028_07d3 = DAT_1028_07d3 + param_2; DAT_1028_07d5 = DAT_1028_07d5 + param_3 + (uint)bVar6; iVar4 = DAT_1028_07d5 + (uint)(0xfe0b < DAT_1028_07d3); uVar3 = FUN_1020_08e6(uVar1); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba2) = uVar3 - 8; *(int *)(iVar5 + 0xba4) = iVar4 - (uint)(uVar3 < 8); iVar4 = DAT_1028_07d9 + (uint)(0xfe0b < DAT_1028_07d7); uVar3 = FUN_1020_08e6(); uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(int *)(iVar5 + 0xba6) = uVar3 - 8; *(int *)(iVar5 + 0xba8) = iVar4 - (uint)(uVar3 < 8); iVar4 = (DAT_1028_07d5 - *(int *)(iVar5 + 0xbc4)) - (uint)(DAT_1028_07d3 < *(uint *)(iVar5 + 0xbc2)); uVar1 = FUN_1020_08e6(); uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar5 + 0xbb2) = uVar1; *(int *)(iVar5 + 0xbb4) = iVar4; iVar4 = (DAT_1028_07d9 - *(int *)(iVar5 + 0xbc8)) - (uint)(DAT_1028_07d7 < *(uint *)(iVar5 + 0xbc6)); uVar1 = FUN_1020_08e6(); uVar2 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar5 + 0xbb6) = uVar1; *(int *)(iVar5 + 3000) = iVar4; if ((*(int *)(iVar5 + 0xbb4) < 1) && ((*(int *)(iVar5 + 0xbb4) < 0 || (*(int *)(iVar5 + 0xbb2) == 0)))) { *(int *)(param_1 + -0x20) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba2) + -1; *(undefined2 *)(param_1 + -0x1c) = 1; } else { uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(int *)(param_1 + -0x20) = (*(int *)(iVar4 + 0xba2) - *(int *)(iVar4 + 0xbb2)) + -1; *(int *)(param_1 + -0x1c) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xbb2) + 1; } uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 3000); if ((iVar4 < 1) && ((iVar4 < 0 || (*(int *)(iVar5 + 0xbb6) == 0)))) { *(int *)(param_1 + -0x22) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xba6) + -1; *(undefined2 *)(param_1 + -0x1e) = 1; } else { uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar4 = (int)*(undefined4 *)(param_1 + 6); *(int *)(param_1 + -0x22) = (*(int *)(iVar4 + 0xba6) - *(int *)(iVar4 + 0xbb6)) + -1; *(int *)(param_1 + -0x1e) = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xbb6) + 1; } uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 0xbb2); if (*(int *)(iVar5 + 0xbb4) < 0) { iVar4 = -iVar4; } *(int *)(param_1 + -0x28) = iVar4 + 0x13; uVar1 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar5 = (int)*(undefined4 *)(param_1 + 6); iVar4 = *(int *)(iVar5 + 0xbb6); if (*(int *)(iVar5 + 3000) < 0) { iVar4 = -iVar4; } *(int *)(param_1 + -0x2a) = iVar4 + 0x13; uVar1 = SELECTOBJECT(0x1020,DAT_1028_085b); *(undefined2 *)(param_1 + -2) = uVar1; uVar1 = SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -8)); *(undefined2 *)(param_1 + -4) = uVar1; BITBLT(0x1228,0x20,0xcc,*(undefined2 *)(param_1 + -0x22),*(undefined2 *)(param_1 + -0x20), *(undefined2 *)(param_1 + -0xe),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),0,0); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x54)); BITBLT(0x1228,0xc6,0x88,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); SELECTOBJECT(0x1228,*(undefined2 *)((int)*(undefined4 *)(param_1 + 6) + 0x52)); BITBLT(0x1228,0x86,0xee,0,0,*(undefined2 *)(param_1 + -0xe),0x13,0x13, *(undefined2 *)(param_1 + -0x1e),*(undefined2 *)(param_1 + -0x1c)); if (0x1ba < *(int *)(param_1 + -0x22) + *(int *)(param_1 + -0x2a)) { if (*(int *)(param_1 + -0x22) < 0x1bb) { *(int *)(param_1 + -0x2a) = 0x1bb - *(int *)(param_1 + -0x22); } else { *(undefined2 *)(param_1 + -0x2a) = 0; } } uVar1 = *(undefined2 *)(param_1 + -0xc); BITBLT(0x1228,0x20,0xcc,0,0,*(undefined2 *)(param_1 + -0x10),*(undefined2 *)(param_1 + -0x2a), *(undefined2 *)(param_1 + -0x28),*(undefined2 *)(param_1 + -0x22), *(undefined2 *)(param_1 + -0x20)); uVar2 = *(undefined2 *)(param_1 + -0xe); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -2)); uVar8 = *(undefined2 *)(param_1 + -0x10); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -4)); uVar7 = *(undefined2 *)(param_1 + -0x12); SELECTOBJECT(0x1228,*(undefined2 *)(param_1 + -6)); DELETEOBJECT(0x1228,*(undefined2 *)(param_1 + -8),uVar7,uVar8,uVar2,uVar1); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0xe)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x10)); DELETEDC(0x1228,*(undefined2 *)(param_1 + -0x12)); RELEASEDC(0x1228,*(undefined2 *)(param_1 + -0xc)); return; } /* ===== 1000:c36b FUN_1000_c36b ===== */ void __stdcall16far FUN_1000_c36b(int param_1,int param_2) { undefined2 uVar1; int iVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 unaff_SS; DAT_1028_07d3 = *(undefined2 *)(param_2 * 4 + 0x7e3); DAT_1028_07d5 = *(undefined2 *)(param_2 * 4 + 0x7e5); DAT_1028_07d7 = *(undefined2 *)(param_2 * 4 + 0x7eb); DAT_1028_07d9 = *(undefined2 *)(param_2 * 4 + 0x7ed); uVar1 = *(undefined2 *)(param_2 * 4 + 0x7f5); uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar2 + 0xbaa) = *(undefined2 *)(param_2 * 4 + 0x7f3); *(undefined2 *)(iVar2 + 0xbac) = uVar1; uVar1 = *(undefined2 *)(param_2 * 4 + 0x7fd); uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar2 + 0xbae) = *(undefined2 *)(param_2 * 4 + 0x7fb); *(undefined2 *)(iVar2 + 0xbb0) = uVar1; iVar2 = param_2 * 6; uVar1 = *(undefined2 *)(iVar2 + 0x80d); uVar4 = *(undefined2 *)(iVar2 + 0x80f); uVar5 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar3 + 0xbce) = *(undefined2 *)(iVar2 + 0x80b); *(undefined2 *)(iVar3 + 0xbd0) = uVar1; *(undefined2 *)(iVar3 + 0xbd2) = uVar4; uVar1 = *(undefined2 *)(param_2 * 4 + 0x805); uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar2 + 0xbca) = *(undefined2 *)(param_2 * 4 + 0x803); *(undefined2 *)(iVar2 + 0xbcc) = uVar1; return; } /* ===== 1000:c426 FUN_1000_c426 ===== */ void __stdcall16far FUN_1000_c426(int param_1,int param_2) { undefined2 uVar1; int iVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 unaff_SS; uVar1 = DAT_1028_07d5; *(undefined2 *)(param_2 * 4 + 0x7e3) = DAT_1028_07d3; *(undefined2 *)(param_2 * 4 + 0x7e5) = uVar1; uVar1 = DAT_1028_07d9; *(undefined2 *)(param_2 * 4 + 0x7eb) = DAT_1028_07d7; *(undefined2 *)(param_2 * 4 + 0x7ed) = uVar1; uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(undefined2 *)(iVar2 + 0xbac); *(undefined2 *)(param_2 * 4 + 0x7f3) = *(undefined2 *)(iVar2 + 0xbaa); *(undefined2 *)(param_2 * 4 + 0x7f5) = uVar1; uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(undefined2 *)(iVar2 + 0xbb0); *(undefined2 *)(param_2 * 4 + 0x7fb) = *(undefined2 *)(iVar2 + 0xbae); *(undefined2 *)(param_2 * 4 + 0x7fd) = uVar1; uVar5 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar3 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(undefined2 *)(iVar3 + 0xbd0); uVar4 = *(undefined2 *)(iVar3 + 0xbd2); iVar2 = param_2 * 6; *(undefined2 *)(iVar2 + 0x80b) = *(undefined2 *)(iVar3 + 0xbce); *(undefined2 *)(iVar2 + 0x80d) = uVar1; *(undefined2 *)(iVar2 + 0x80f) = uVar4; uVar4 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar2 = (int)*(undefined4 *)(param_1 + 6); uVar1 = *(undefined2 *)(iVar2 + 0xbcc); *(undefined2 *)(param_2 * 4 + 0x803) = *(undefined2 *)(iVar2 + 0xbca); *(undefined2 *)(param_2 * 4 + 0x805) = uVar1; return; } /* ===== 1000:c4e1 FUN_1000_c4e1 ===== */ void __stdcall16far FUN_1000_c4e1(int param_1,int param_2) { int iVar1; uint uVar2; undefined2 uVar3; uint uVar4; undefined2 uVar5; undefined2 unaff_SS; iVar1 = *(int *)((uint)DAT_1028_07d1 * 2 + 0x9a4); if (iVar1 == 1) { uVar4 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar1 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar2 = (uint)DAT_1028_07d1; *(int *)(uVar2 * 4 + 0x98e) = uVar4 + 10000; *(int *)(uVar2 * 4 + 0x990) = iVar1 + (uint)(0xd8ef < uVar4); uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar3,uVar5); } else if (iVar1 == 2) { uVar4 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar1 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar2 = (uint)DAT_1028_07d1; *(int *)(uVar2 * 4 + 0x98e) = uVar4 + 20000; *(int *)(uVar2 * 4 + 0x990) = iVar1 + (uint)(0xb1df < uVar4); uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar3,uVar5); } else if (iVar1 == 3) { uVar4 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar1 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar2 = (uint)DAT_1028_07d1; *(int *)(uVar2 * 4 + 0x98e) = uVar4 + 50000; *(int *)(uVar2 * 4 + 0x990) = iVar1 + (uint)(0x3caf < uVar4); uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar3,uVar5); } else if (iVar1 == 4) { uVar4 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar1 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar2 = (uint)DAT_1028_07d1; *(int *)(uVar2 * 4 + 0x98e) = uVar4 + 0x86a0; *(int *)(uVar2 * 4 + 0x990) = iVar1 + 1 + (uint)(0x795f < uVar4); uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar3,uVar5); } else if (iVar1 == 5) { uVar4 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar1 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar2 = (uint)DAT_1028_07d1; *(int *)(uVar2 * 4 + 0x98e) = uVar4 + 0xd40; *(int *)(uVar2 * 4 + 0x990) = iVar1 + 3 + (uint)(0xf2bf < uVar4); uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bda2(param_1,uVar3,uVar5); } else if (iVar1 == 6) { uVar5 = *(undefined2 *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar3 = FUN_1020_08a9(); FUN_1000_bc36(param_1,uVar3,uVar5); uVar4 = (uint)DAT_1028_07d1; *(undefined2 *)(uVar4 * 4 + 0x98e) = 0; *(undefined2 *)(uVar4 * 4 + 0x990) = 0; FUN_1000_bda2(param_1,0,0); } else if ((iVar1 == 7) && (DAT_1028_399a != 0)) { if ((param_2 < 0) || (DAT_1028_399a != param_2)) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbe0) = 1; DAT_1028_0874 = 1; } } return; } /* ===== 1000:c79c FUN_1000_c79c ===== */ void __stdcall16far FUN_1000_c79c(int param_1) { uint *puVar1; int *piVar2; byte bVar3; undefined2 uVar4; int iVar5; char cVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; uint uVar11; uint extraout_DX; uint extraout_DX_00; int extraout_DX_01; uint extraout_DX_02; uint extraout_DX_03; uint extraout_DX_04; uint uVar12; int extraout_DX_05; int extraout_DX_06; uint in_BX; int iVar13; int iVar14; int iVar15; int iVar16; int iVar17; int iVar18; undefined2 uVar19; undefined2 unaff_SS; bool bVar20; bool bVar21; uint uVar22; int in_stack_0000d8a2; uint in_stack_0000d8b0; int in_stack_0000d8b2; uint in_stack_0000d8c2; int in_stack_0000d8cc; int in_stack_0000d8ce; int in_stack_0000d8d0; undefined2 local_7c; uint local_7a; uint local_78; undefined2 local_76; uint local_74; uint local_72; uint local_70; uint local_6e; uint local_68; uint local_66; uint local_64; uint local_62; undefined2 local_40; uint local_3e; undefined2 local_3c; uint local_16; uint local_14; uint local_12; uint local_10; uint local_e; uint local_c; uint local_8; int local_4; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar13 = (int)*(undefined4 *)(param_1 + 6); puVar1 = (uint *)(iVar13 + 0x4d); uVar10 = *puVar1; *puVar1 = *puVar1 + 1; *(int *)(iVar13 + 0x4f) = *(int *)(iVar13 + 0x4f) + (uint)(0xfffe < uVar10); iVar5 = DAT_1028_0871; bVar3 = *(byte *)(iVar13 + 0x61); if (bVar3 == 0) { return; } local_8 = 1; while( true ) { if (1 < *(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61)) { FUN_1000_c36b(); } iVar13 = DAT_1028_07d5; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar14 = (int)*(undefined4 *)(param_1 + 6); *(uint *)(iVar14 + 0xbc2) = DAT_1028_07d3; *(int *)(iVar14 + 0xbc4) = iVar13; iVar13 = DAT_1028_07d9; *(uint *)(iVar14 + 0xbc6) = DAT_1028_07d7; *(int *)(iVar14 + 0xbc8) = iVar13; if (iVar5 != 0) break; LAB_1000_ea63: uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar13 = (int)*(undefined4 *)(param_1 + 6); if ((*(char *)(iVar13 + 0xbdd) != '\0') && (*(char *)(iVar13 + 0xbe2) == '\0')) { FUN_1000_9f73(); } if (1 < *(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61)) { FUN_1000_c426(); } if (local_8 == bVar3) { return; } local_8 = local_8 + 1; } iVar13 = 1; LAB_1000_c839: uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); uVar10 = *(uint *)(iVar15 + 0xbae); iVar14 = *(int *)(iVar15 + 0xbb0); uVar11 = *(uint *)(iVar15 + 0x5a); iVar16 = *(int *)(iVar15 + 0x5c); *(int *)(iVar15 + 0xbae) = uVar10 + *(uint *)(iVar15 + 0x5a); *(int *)(iVar15 + 0xbb0) = iVar14 + iVar16 + (uint)CARRY2(uVar10,uVar11); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); local_14 = extraout_DX; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); local_16 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); iVar14 = *(int *)(iVar16 + 0x58); if ((iVar14 < (int)local_14) || ((uVar10 = in_BX, iVar14 <= (int)local_14 && (*(uint *)(iVar16 + 0x56) < local_16)))) { FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ffd(); iVar14 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0xbac); FUN_1020_100b(); FUN_1020_0ff7(); uVar11 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); uVar10 = *(uint *)(iVar15 + 0xbaa); iVar16 = *(int *)(iVar15 + 0xbac); *(int *)(iVar15 + 0xbaa) = uVar10 - uVar11; *(int *)(iVar15 + 0xbac) = (iVar16 - iVar14) - (uint)(uVar10 < uVar11); FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ffd(); uVar10 = *(uint *)((int)*(undefined4 *)(param_1 + 6) + 0xbb0); FUN_1020_100b(); FUN_1020_0ff7(); uVar22 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); uVar11 = *(uint *)(iVar16 + 0xbae); iVar14 = *(int *)(iVar16 + 0xbb0); *(int *)(iVar16 + 0xbae) = uVar11 - uVar22; *(int *)(iVar16 + 0xbb0) = (iVar14 - uVar10) - (uint)(uVar11 < uVar22); local_16 = *(uint *)(iVar16 + 0x56); local_14 = *(uint *)(iVar16 + 0x58); } iVar14 = DAT_1028_07d5; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); *(uint *)(iVar16 + 0xbba) = DAT_1028_07d3; *(int *)(iVar16 + 0xbbc) = iVar14; iVar14 = DAT_1028_07d9; *(uint *)(iVar16 + 0xbbe) = DAT_1028_07d7; *(int *)(iVar16 + 0xbc0) = iVar14; DAT_1028_07db = DAT_1028_07d3 + *(uint *)(iVar16 + 0xbaa); DAT_1028_07dd = DAT_1028_07d5 + *(int *)(iVar16 + 0xbac) + (uint)CARRY2(DAT_1028_07d3,*(uint *)(iVar16 + 0xbaa)); DAT_1028_07df = DAT_1028_07d7 + *(uint *)(iVar16 + 0xbae); DAT_1028_07e1 = DAT_1028_07d9 + *(int *)(iVar16 + 0xbb0) + (uint)CARRY2(DAT_1028_07d7,*(uint *)(iVar16 + 0xbae)); local_e = *(uint *)(iVar16 + 0xbaa); local_c = *(uint *)(iVar16 + 0xbac); local_12 = *(uint *)(iVar16 + 0xbae); local_10 = *(uint *)(iVar16 + 0xbb0); uVar11 = *(uint *)(iVar16 + 0xbac); FUN_1020_100b(); FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar14 = (int)*(undefined4 *)(param_1 + 6); local_40 = *(undefined2 *)(iVar14 + 0xbce); local_3e = *(uint *)(iVar14 + 0xbd0); local_3c = *(undefined2 *)(iVar14 + 0xbd2); iVar14 = 0; local_70 = 0x423f; local_6e = 0xf; in_BX = local_3e; if (((((DAT_1028_07dd < 0) || (((DAT_1028_07dd < 1 && (DAT_1028_07db == 0)) || (5 < DAT_1028_07dd)))) || (((4 < DAT_1028_07dd && (0x3020 < DAT_1028_07db)) || (DAT_1028_07e1 < 0)))) || ((DAT_1028_07e1 < 1 && (DAT_1028_07df == 0)))) || ((7 < DAT_1028_07e1 || ((6 < DAT_1028_07e1 && (0x4e0 < DAT_1028_07df)))))) { if (*(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61) < 2) { FUN_1000_ae6e(); } else { *(undefined1 *)((local_8 + 0xad) * 0x53 + 0x98f) = 0; DAT_1028_0874 = '\0'; } } if ((DAT_1028_07d9 < 3) || ((DAT_1028_07d9 < 4 && (DAT_1028_07d7 < 0xd860)))) { uVar22 = 1; } else { uVar22 = 2; } local_4 = 1; do { iVar16 = local_4 * 0x53; bVar21 = false; if ((((*(uint *)(iVar16 + 0x9a4) & uVar22) != 0) && (*(char *)(iVar16 + 0x98f) == '\x01')) && (cVar6 = FUN_1000_9b69(), cVar6 != '\0')) { cVar6 = *(char *)CONCAT22(0x1028,(char *)(iVar16 + 0x95b)); uVar12 = in_BX; if (cVar6 == '\x01') { if (0xaf - local_8 != local_4) { FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); uVar7 = extraout_DX_00; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); uVar9 = FUN_1020_1017(); if ((int)uVar7 < 0) { bVar20 = uVar9 != 0; uVar9 = -uVar9; uVar7 = (~uVar7 + 1) - (uint)bVar20; } uVar12 = *(uint *)(iVar16 + 0x981); uVar8 = FUN_1020_1017(); local_68 = uVar9 - uVar8; local_66 = (uVar7 - uVar12) - (uint)(uVar9 < uVar8); if ((*(char *)(iVar16 + 0x95c) == '\x01') && (((int)local_66 < (int)local_14 || (((int)local_66 <= (int)local_14 && (local_68 <= local_16)))))) { LAB_1000_cd0a: if (*(char *)(iVar16 + 0x95c) == '\x01') { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); local_74 = *(int *)(iVar15 + 0xbc0) + DAT_1028_07e1 + (uint)CARRY2(*(uint *)(iVar15 + 0xbbe),DAT_1028_07df); uVar12 = FUN_1020_08e6(); local_72 = (*(int *)(iVar16 + 0x973) - local_74) - (uint)(*(uint *)(iVar16 + 0x971) < uVar12); FUN_1020_100b(); FUN_1020_1017(); local_76 = FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); iVar15 = *(int *)(iVar15 + 0xbbc) + DAT_1028_07dd + (uint)CARRY2(*(uint *)(iVar15 + 0xbba),DAT_1028_07db); local_7a = 0; uVar12 = FUN_1020_08e6(); local_78 = (iVar15 - *(int *)(iVar16 + 0x96f)) - (uint)(uVar12 < *(uint *)(iVar16 + 0x96d)); FUN_1020_100b(); FUN_1020_1017(); local_7c = FUN_1020_100b(); } else { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); local_74 = *(int *)(iVar15 + 0xbc0) + DAT_1028_07e1 + (uint)CARRY2(*(uint *)(iVar15 + 0xbbe),DAT_1028_07df); uVar12 = FUN_1020_08e6(); local_72 = (*(int *)(iVar16 + 0x973) - local_74) - (uint)(*(uint *)(iVar16 + 0x971) < uVar12); FUN_1020_100b(); FUN_1020_1017(); local_76 = FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); iVar15 = *(int *)(iVar15 + 0xbbc) + DAT_1028_07dd + (uint)CARRY2(*(uint *)(iVar15 + 0xbba),DAT_1028_07db); local_7a = 0; uVar12 = FUN_1020_08e6(); local_78 = (iVar15 - *(int *)(iVar16 + 0x96f)) - (uint)(uVar12 < *(uint *)(iVar16 + 0x96d)); FUN_1020_100b(); FUN_1020_1017(); local_7c = FUN_1020_100b(); } if (*(char *)(iVar16 + 0x95c) == '\x02') { if ((char)local_76 != '\0') { local_72 = local_72 ^ 0x8000; } if ((char)local_7c != '\0') { local_78 = local_78 ^ 0x8000; } } FUN_1020_0ffd(); FUN_1020_0ff1(); uVar12 = local_74; FUN_1020_0ffd(); FUN_1020_0ff1(); iVar15 = extraout_DX_01; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); iVar17 = FUN_1020_1017(); if ((iVar15 < 1) && ((iVar15 < 0 || (iVar17 == 0)))) { local_64 = 0; local_62 = 0; } else { FUN_1020_100b(); FUN_1020_0ff7(); local_62 = uVar11; uVar12 = uVar10; FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); local_64 = FUN_1020_1017(); } if ((int)local_62 < 0) { uVar7 = local_68; uVar12 = local_66; if ((int)local_66 < 0) { uVar7 = -local_68; uVar12 = (~local_66 + 1) - (uint)(local_68 != 0); } uVar9 = local_64; uVar8 = local_62; if ((int)local_62 < 0) { uVar9 = -local_64; uVar8 = (~local_62 + 1) - (uint)(local_64 != 0); } if (((int)uVar12 < (int)uVar8) || (((int)uVar12 <= (int)uVar8 && (uVar7 <= uVar9)))) { bVar21 = 0xf447 < local_68; local_68 = local_68 + 3000; local_66 = local_66 + bVar21; bVar21 = true; } } } else if (*(char *)(iVar16 + 0x95c) == '\x02') { iVar15 = (~local_66 + 1) - (uint)(local_68 != 0); if ((iVar15 < (int)local_14) || ((uVar12 = local_14, iVar15 <= (int)local_14 && (-local_68 < local_16 || -local_16 == local_68)))) goto LAB_1000_cd0a; } } } else if (cVar6 == '\x04') { if (DAT_1028_07c6 == '\0') { DAT_1028_0875 = '\0'; uVar12 = *(uint *)(iVar16 + 0x97f); iVar15 = *(int *)(iVar16 + 0x981); iVar17 = FUN_1020_1017(); if ((iVar15 < 1) && ((iVar15 < 0 || (iVar17 == 0)))) { cVar6 = FUN_1000_9ae0(); if ((cVar6 != '\0') && (((local_4 == 0x99 || (local_4 == 0x9a)) || (local_4 == 6)))) { FUN_1020_100b(); FUN_1020_0ff7(); local_e = FUN_1020_1017(); FUN_1020_100b(); FUN_1020_14c1(); FUN_1020_0ff7(); uVar12 = 0; uVar7 = 0; FUN_1020_0feb(); FUN_1020_0ff7(); iVar15 = FUN_1020_1017(); local_12 = -iVar15; local_10 = (~uVar7 + 1) - (uint)(iVar15 != 0); DAT_1028_07db = DAT_1028_07d3 + local_e; DAT_1028_07dd = DAT_1028_07d5 + local_c + (uint)CARRY2(DAT_1028_07d3,local_e); DAT_1028_07df = DAT_1028_07d7 + local_12; DAT_1028_07e1 = DAT_1028_07d9 + local_10 + (uint)CARRY2(DAT_1028_07d7,local_12); cVar6 = FUN_1000_9b69(); if (cVar6 == '\0') { *(undefined1 *)(local_4 * 0x53 + 0x98f) = 0; } FUN_1000_b3f3(); } } else { FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); local_66 = extraout_DX_02; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); local_68 = FUN_1020_1017(); if ((int)local_66 < 0) { bVar20 = local_68 != 0; local_68 = -local_68; local_66 = (~local_66 + 1) - (uint)bVar20; } FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); uVar7 = extraout_DX_03; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); uVar9 = FUN_1020_1017(); if ((int)uVar7 < 0) { bVar20 = uVar9 != 0; uVar9 = -uVar9; uVar7 = (~uVar7 + 1) - (uint)bVar20; } uVar12 = *(uint *)(iVar16 + 0x97f); iVar15 = *(int *)(iVar16 + 0x981); uVar8 = FUN_1020_1017(); if (((int)uVar7 < iVar15) || (((int)uVar7 <= iVar15 && (uVar9 <= uVar8)))) { if ((*(uint *)(iVar16 + 0x99c) & 0x4000) != 0x4000) { *(uint *)(iVar16 + 0x99c) = *(uint *)(iVar16 + 0x99c) | 0x4000; FUN_1008_0002(); FUN_1020_08a9(); FUN_1000_bc36(); if (local_4 == 0x95) { DAT_1028_39de = 0; *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0xaf + 0xf6) = 0; FUN_1000_b3f3(); FUN_1000_c4e1(); GETDC(); *(undefined2 *)((uint)DAT_1028_07d1 * 2 + 0x9a4) = 0; FUN_1000_0002(); FUN_1008_093f(); RELEASEDC(); } FUN_1000_b476(); FUN_1020_14c1(); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_100b(); FUN_1020_0ff7(); local_e = FUN_1020_1017(); FUN_1020_14c1(); FUN_1020_0ff7(); uVar12 = 0xa3d; FUN_1020_0feb(); FUN_1020_100b(); FUN_1020_0ff7(); local_12 = FUN_1020_1017(); } } else { *(uint *)(iVar16 + 0x99c) = *(uint *)(iVar16 + 0x99c) & 0xbfff; } } } } else if (cVar6 == '\x02') { local_72 = (*(int *)(iVar16 + 0x977) - *(int *)(iVar16 + 0x96f)) - (uint)(*(uint *)(iVar16 + 0x975) < *(uint *)(iVar16 + 0x96d)); local_76 = FUN_1020_100b(); local_78 = (*(int *)(iVar16 + 0x97b) - *(int *)(iVar16 + 0x973)) - (uint)(*(uint *)(iVar16 + 0x979) < *(uint *)(iVar16 + 0x971)); local_7a = in_BX; local_7c = FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); FUN_1020_1017(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ffd(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ffd(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); uVar12 = (*(int *)(iVar15 + 0xbbc) - *(int *)(iVar16 + 0x96f)) - (uint)(*(uint *)(iVar15 + 0xbba) < *(uint *)(iVar16 + 0x96d)); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); local_66 = uVar12 & 0x7fff; local_68 = FUN_1020_1017(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ffd(); FUN_1020_0ff7(); local_62 = local_78; uVar12 = local_7a; FUN_1020_0ffd(); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); local_64 = FUN_1020_1017(); if ((((int)local_66 < (int)local_14) || ((local_74 = in_BX, (int)local_66 <= (int)local_14 && (local_74 = in_BX, local_68 <= local_16)))) && (((int)local_62 < 0 || ((local_74 = in_BX, (int)local_62 < 1 && (local_74 = in_BX, local_64 < 0xb)))))) { uVar12 = local_66 - (local_68 < 10); uVar7 = local_64; uVar9 = local_62; if ((int)local_62 < 0) { uVar7 = -local_64; uVar9 = (~local_62 + 1) - (uint)(local_64 != 0); } if (((int)uVar12 < (int)uVar9) || ((local_74 = in_BX, (int)uVar12 <= (int)uVar9 && (local_74 = in_BX, local_68 - 10 <= uVar7)))) { uVar12 = (*(int *)(iVar16 + 0x96f) - DAT_1028_07d5) - (uint)(*(uint *)(iVar16 + 0x96d) < DAT_1028_07d3); uVar7 = FUN_1020_08a9(); iVar15 = (*(int *)(iVar16 + 0x973) - DAT_1028_07d9) - (uint)(*(uint *)(iVar16 + 0x971) < DAT_1028_07d7); uVar9 = FUN_1020_08a9(); uVar8 = (iVar15 - uVar12) - (uint)(uVar9 < uVar7); if ((uVar8 < 0x8000) || ((local_74 = in_BX, -2 < (int)uVar8 && (local_74 = in_BX, 0xfff5 < uVar9 - uVar7)))) { uVar12 = (*(int *)(iVar16 + 0x977) - DAT_1028_07d5) - (uint)(*(uint *)(iVar16 + 0x975) < DAT_1028_07d3); uVar7 = FUN_1020_08a9(); iVar15 = (*(int *)(iVar16 + 0x97b) - DAT_1028_07d9) - (uint)(*(uint *)(iVar16 + 0x979) < DAT_1028_07d7); uVar9 = FUN_1020_08a9(); iVar15 = (iVar15 - uVar12) - (uint)(uVar9 < uVar7); if ((iVar15 < 0) || ((local_74 = in_BX, iVar15 < 1 && (local_74 = in_BX, uVar9 - uVar7 < 0xb)))) { bVar21 = true; local_74 = in_BX; } } } } } else if (cVar6 == '\x03') { FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); uVar12 = extraout_DX_04; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); uVar7 = FUN_1020_1017(); if ((int)uVar12 < 0) { bVar20 = uVar7 != 0; uVar7 = -uVar7; uVar12 = (~uVar12 + 1) - (uint)bVar20; } uVar9 = *(uint *)(iVar16 + 0x981); uVar8 = FUN_1020_1017(); local_68 = uVar7 - uVar8; local_66 = (uVar12 - uVar9) - (uint)(uVar7 < uVar8); uVar12 = (int)local_8 >> 0xf; if (((((int)local_66 < -1) || (((int)local_66 < 0 && (local_68 < 0xd509)))) && ((*(int *)(iVar16 + 0x99e) == 0 || (((*(int *)(iVar16 + 0x99e) != 99 && (*(char *)((int)*(undefined4 *)(param_1 + 6) + 0x61) == '\x01')) || ((uVar9 = uVar12, -1 < (int)local_8 && (*(uint *)(iVar16 + 0x99e) == local_8)))))))) && ((local_4 != 0x94 || (DAT_1028_0875 == '\0')))) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar17 = (int)*(undefined4 *)(param_1 + 6); iVar15 = *(int *)(iVar17 + 0xbcc); if ((iVar15 < 0) || ((iVar15 < 1 && (*(uint *)(iVar17 + 0xbca) < 300)))) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); puVar1 = (uint *)(iVar15 + 0xbba); uVar12 = *(uint *)(iVar16 + 0x96d) - *puVar1; uVar7 = (*(int *)(iVar16 + 0x96f) - *(int *)(iVar15 + 0xbbc)) - (uint)(*(uint *)(iVar16 + 0x96d) < *puVar1); if ((int)uVar7 < 0) { bVar20 = uVar12 != 0; uVar12 = -uVar12; uVar7 = (~uVar7 + 1) - (uint)bVar20; } if (((int)uVar7 < 0) || (((int)uVar7 < 1 && (uVar12 < 500)))) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); puVar1 = (uint *)(iVar15 + 0xbbe); uVar12 = *(uint *)(iVar16 + 0x971) - *puVar1; uVar7 = (*(int *)(iVar16 + 0x973) - *(int *)(iVar15 + 0xbc0)) - (uint)(*(uint *)(iVar16 + 0x971) < *puVar1); if ((int)uVar7 < 0) { bVar20 = uVar12 != 0; uVar12 = -uVar12; uVar7 = (~uVar7 + 1) - (uint)bVar20; } if (((int)uVar7 < 0) || (((int)uVar7 < 1 && (uVar12 < 500)))) { uVar12 = local_c; if ((int)local_c < 0) { bVar20 = local_e != 0; local_e = -local_e; uVar12 = (~local_c + 1) - (uint)bVar20; } if (((int)uVar12 < 0) || (((int)uVar12 < 1 && (local_e < 500)))) { uVar12 = local_10; if ((int)local_10 < 0) { bVar20 = local_12 != 0; local_12 = -local_12; uVar12 = (~local_10 + 1) - (uint)bVar20; } if (((int)uVar12 < 0) || (((int)uVar12 < 1 && (local_12 < 500)))) { local_e = 0; local_c = 0; local_12 = 0; local_10 = 0; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); if (*(int *)(iVar15 + 0xbca) == 0 && *(int *)(iVar15 + 0xbcc) == 0) { *(uint *)(iVar16 + 0x99e) = local_8; FUN_1008_0002(); } uVar12 = uVar9; if (local_4 == 0x59) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar15 + 0xbca) = 300; *(undefined2 *)(iVar15 + 0xbcc) = 0; } else { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar17 = (int)*(undefined4 *)(param_1 + 6); uVar7 = *(uint *)(iVar17 + 0xbca); iVar15 = *(int *)(iVar17 + 0xbcc); *(int *)(iVar17 + 0xbca) = uVar7 + 5; *(int *)(iVar17 + 0xbcc) = iVar15 + (uint)(0xfffa < uVar7); } goto LAB_1000_e060; } } } } if ((DAT_1028_07d5 < *(int *)(iVar16 + 0x96f)) || ((DAT_1028_07d5 <= *(int *)(iVar16 + 0x96f) && (DAT_1028_07d3 < *(uint *)(iVar16 + 0x96d))))) { iVar15 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0x5c); uVar12 = FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ff7(); uVar7 = FUN_1020_1017(); local_e = uVar7 + uVar12; local_c = local_c + iVar15 + (uint)CARRY2(uVar7,uVar12); } else { iVar15 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0x5c); uVar12 = FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ff7(); uVar7 = FUN_1020_1017(); local_e = uVar7 - uVar12; local_c = (local_c - iVar15) - (uint)(uVar7 < uVar12); } if ((DAT_1028_07d9 < *(int *)(iVar16 + 0x973)) || ((DAT_1028_07d9 <= *(int *)(iVar16 + 0x973) && (DAT_1028_07d7 < *(uint *)(iVar16 + 0x971))))) { uVar12 = *(uint *)((int)*(undefined4 *)(param_1 + 6) + 0x5c); uVar7 = FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ff7(); uVar9 = FUN_1020_1017(); local_12 = uVar9 + uVar7; local_10 = local_10 + uVar12 + (uint)CARRY2(uVar9,uVar7); } else { uVar12 = *(uint *)((int)*(undefined4 *)(param_1 + 6) + 0x5c); uVar7 = FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ff7(); uVar9 = FUN_1020_1017(); local_12 = uVar9 - uVar7; local_10 = (local_10 - uVar12) - (uint)(uVar9 < uVar7); } } else if (local_4 == 0x59) { uVar12 = uVar9; if (DAT_1028_0874 == '\0') { DAT_1028_07ca = 1; iVar15 = FUN_1020_14a4(); if (iVar15 == 0) { DAT_1028_086f = 1; } else if (iVar15 == 1) { DAT_1028_086f = 6; } else if (iVar15 == 2) { DAT_1028_086f = 7; } else if (iVar15 == 3) { DAT_1028_086f = 0x12; } DAT_1028_0873 = 1; *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdf) = 1; local_40 = 0; local_3e = 0; local_3c = 0; for (iVar15 = 0xc; *(undefined1 *)(iVar15 * 0x53 + 0x98f) = 0, uVar12 = uVar9, iVar15 != 0x14; iVar15 = iVar15 + 1) { } } } else { if ((local_4 < 0x81) || (0x85 < local_4)) { if (local_4 == 0x94) { *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + 0x47b) = 1; FUN_1000_b30b(); } } else { uVar12 = 5000; iVar17 = 0; iVar15 = 1; while( true ) { if (*(int *)((iVar15 + 0x80) * 0x53 + 0x99e) != 0) { uVar12 = FUN_1020_08a9(); } if (iVar15 == 5) break; iVar15 = iVar15 + 1; } uVar7 = *(uint *)((uint)DAT_1028_07d1 * 4 + 0x98e); iVar15 = *(int *)((uint)DAT_1028_07d1 * 4 + 0x990); uVar9 = (uint)DAT_1028_07d1; *(int *)(uVar9 * 4 + 0x98e) = uVar7 + uVar12; *(int *)(uVar9 * 4 + 0x990) = iVar15 + iVar17 + (uint)CARRY2(uVar7,uVar12); if ((iVar17 == 2) && (uVar12 == 0x7100)) { FUN_1020_08a9(); FUN_1000_bc36(); uVar12 = (uint)DAT_1028_07d1; *(undefined2 *)(uVar12 * 4 + 0x98e) = 0; *(undefined2 *)(uVar12 * 4 + 0x990) = 0; *(char *)(DAT_1028_07d1 + 0x9a1) = *(char *)(DAT_1028_07d1 + 0x9a1) + '\x01'; piVar2 = (int *)((uint)DAT_1028_07d1 * 2 + 0x81f); *piVar2 = *piVar2 + 1; FUN_1000_a604(); GETDC(); RELEASEDC(); if (((DAT_1028_07c7 == '\0') && (DAT_1028_07c8 == '\0')) && (DAT_1028_0874 == '\0')) { DAT_1028_0851 = 0; DAT_1028_0853 = 0; DAT_1028_07c8 = '\x01'; *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdd) = 0; } DAT_1028_0874 = '\0'; } else { *(undefined1 *) ((int)*(undefined4 *)(param_1 + 6) + (uint)DAT_1028_07d1 * 0x14 + local_4 + 0x3f5) = 1; FUN_1000_b30b(); } uVar9 = 0; FUN_1020_08a9(); FUN_1000_bda2(); } uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar15 + 0xbca) = 0; *(undefined2 *)(iVar15 + 0xbcc) = 0; uVar12 = uVar9; if (*(char *)(iVar15 + 0x61) == '\x01') { if (local_4 == 0x94) { DAT_1028_399a = 2; } else { *(undefined2 *)(iVar16 + 0x99e) = 99; } if (DAT_1028_07c6 == '\0') { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbe2) = 1; } else { FUN_1000_ae6e(); uVar12 = uVar9; } } else { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbe1) = 1; *(undefined1 *)((local_8 + 0xad) * 0x53 + 0x98f) = 0; *(undefined2 *)(iVar16 + 0x99e) = 2; } } } else if (((local_66 < 0x8000) || ((-2 < (int)local_66 && (0xd508 < local_68)))) && ((uVar9 = uVar12, -1 < (int)local_8 && (*(uint *)(iVar16 + 0x99e) == local_8)))) { *(undefined2 *)(iVar16 + 0x99e) = 0; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar15 + 0xbca) = 0; *(undefined2 *)(iVar15 + 0xbcc) = 0; } else { uVar12 = uVar9; if ((((int)local_66 < (int)local_14) || (((int)local_66 <= (int)local_14 && (local_68 <= local_16)))) && (((local_66 < 0x8000 || ((-2 < (int)local_66 && (0xd507 < local_68)))) && (*(int *)(iVar16 + 0x99e) != 0)))) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); local_72 = (*(int *)(iVar16 + 0x973) - *(int *)(iVar15 + 0xbc0)) - (uint)(*(uint *)(iVar16 + 0x971) < *(uint *)(iVar15 + 0xbbe)); FUN_1020_100b(); FUN_1020_1017(); local_76 = FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); local_78 = (*(int *)(iVar15 + 0xbbc) - *(int *)(iVar16 + 0x96f)) - (uint)(*(uint *)(iVar15 + 0xbba) < *(uint *)(iVar16 + 0x96d)); local_7a = uVar9; FUN_1020_100b(); FUN_1020_1017(); local_7c = FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); uVar12 = uVar9; FUN_1020_0ffd(); FUN_1020_0ff1(); iVar15 = extraout_DX_05; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); iVar17 = FUN_1020_1017(); if ((iVar15 < 1) && ((iVar15 < 0 || (iVar17 == 0)))) { local_64 = 0; local_62 = 0; } else { FUN_1020_100b(); FUN_1020_0ff7(); local_62 = uVar11; uVar12 = uVar10; FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); local_64 = FUN_1020_1017(); } local_74 = uVar9; if ((int)local_62 < 0) { uVar7 = local_68; uVar12 = local_66; if ((int)local_66 < 0) { uVar7 = -local_68; uVar12 = (~local_66 + 1) - (uint)(local_68 != 0); } uVar9 = local_64; uVar8 = local_62; if ((int)local_62 < 0) { uVar9 = -local_64; uVar8 = (~local_62 + 1) - (uint)(local_64 != 0); } if (((int)uVar12 < (int)uVar8) || (((int)uVar12 <= (int)uVar8 && (uVar7 <= uVar9)))) { bVar21 = true; } } } } } LAB_1000_e060: in_BX = uVar12; if (bVar21) { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar15 + 0xbca) = 0; *(undefined2 *)(iVar15 + 0xbcc) = 0; if (((int)local_66 < (int)local_6e) || (((int)local_66 <= (int)local_6e && (local_68 <= local_70)))) { local_70 = local_68; local_6e = local_66; iVar14 = iVar14 + 1; iVar15 = iVar14 * 0x34; *(uint *)(&stack0xd89e + iVar15) = local_68; *(uint *)(&stack0xd8a0 + iVar15) = local_66; *(int *)(&stack0xd86e + iVar15) = local_4; *(undefined2 *)(&stack0xd870 + iVar15) = local_76; *(uint *)(&stack0xd872 + iVar15) = local_74; *(uint *)(&stack0xd874 + iVar15) = local_72; *(undefined2 *)(&stack0xd876 + iVar15) = local_7c; *(uint *)(&stack0xd878 + iVar15) = local_7a; *(uint *)(&stack0xd87a + iVar15) = local_78; uVar19 = *(undefined2 *)(iVar16 + 0x98b); uVar4 = *(undefined2 *)(iVar16 + 0x98d); *(undefined2 *)(&stack0xd886 + iVar15) = *(undefined2 *)(iVar16 + 0x989); *(undefined2 *)(&stack0xd888 + iVar15) = uVar19; *(undefined2 *)(&stack0xd88a + iVar15) = uVar4; uVar19 = *(undefined2 *)(iVar16 + 0x985); uVar4 = *(undefined2 *)(iVar16 + 0x987); *(undefined2 *)(&stack0xd880 + iVar15) = *(undefined2 *)(iVar16 + 0x983); *(undefined2 *)(&stack0xd882 + iVar15) = uVar19; *(undefined2 *)(&stack0xd884 + iVar15) = uVar4; *(uint *)(&stack0xd87c + iVar15) = local_64; *(uint *)(&stack0xd87e + iVar15) = local_62; uVar19 = *(undefined2 *)(iVar16 + 0x992); uVar4 = *(undefined2 *)(iVar16 + 0x994); *(undefined2 *)(&stack0xd88c + iVar15) = *(undefined2 *)(iVar16 + 0x990); *(undefined2 *)(&stack0xd88e + iVar15) = uVar19; *(undefined2 *)(&stack0xd890 + iVar15) = uVar4; in_BX = *(uint *)(iVar16 + 0x998); uVar19 = *(undefined2 *)(iVar16 + 0x99a); *(undefined2 *)(&stack0xd892 + iVar15) = *(undefined2 *)(iVar16 + 0x996); *(uint *)(&stack0xd894 + iVar15) = in_BX; *(undefined2 *)(&stack0xd896 + iVar15) = uVar19; *(undefined2 *)(&stack0xd898 + iVar15) = *(undefined2 *)(iVar16 + 0x99c); uVar19 = *(undefined2 *)(iVar16 + 0x9a2); *(undefined2 *)(&stack0xd89a + iVar15) = *(undefined2 *)(iVar16 + 0x9a0); *(undefined2 *)(&stack0xd89c + iVar15) = uVar19; } } } if (local_4 == 0xaf) break; local_4 = local_4 + 1; } while( true ); if (iVar14 != 0) { if (in_stack_0000d8cc != 0) { FUN_1000_b476(); } if (in_stack_0000d8ce != 0 || in_stack_0000d8d0 != 0) { bVar21 = true; FUN_1020_1007(); if (bVar21) { FUN_1000_bc36(); } } FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); FUN_1020_1017(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ff7(); FUN_1020_0fe5(); FUN_1020_0ffd(); FUN_1020_1017(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ff7(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_10be(); FUN_1020_0ffd(); FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ffd(); iVar16 = 0x4ccc; FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0feb(); FUN_1020_1017(); local_3e = 0x9999; local_3c = 0x1999; FUN_1020_0ff7(); local_40 = FUN_1020_0fe5(); if ((in_stack_0000d8a2 == 0xae) || (in_stack_0000d8a2 == 0xaf)) { iVar17 = (in_stack_0000d8a2 + -0xae) * 4; iVar15 = *(int *)(iVar17 + 0x805); if ((iVar15 < 0) || ((iVar15 < 1 && (*(int *)(iVar17 + 0x803) == 0)))) { FUN_1020_100b(); iVar17 = in_stack_0000d8b2; FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ffd(); uVar11 = FUN_1020_1017(); iVar15 = (in_stack_0000d8a2 + -0xae) * 4; uVar10 = *(uint *)(iVar15 + 0x7f3); iVar15 = *(int *)(iVar15 + 0x7f5); iVar18 = (in_stack_0000d8a2 + -0xae) * 4; *(int *)(iVar18 + 0x7f3) = uVar10 + uVar11; *(int *)(iVar18 + 0x7f5) = iVar15 + iVar17 + (uint)CARRY2(uVar10,uVar11); FUN_1020_100b(); iVar17 = in_stack_0000d8b2; FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ffd(); uVar11 = FUN_1020_1017(); iVar15 = (in_stack_0000d8a2 + -0xae) * 4; uVar10 = *(uint *)(iVar15 + 0x7fb); iVar15 = *(int *)(iVar15 + 0x7fd); iVar18 = (in_stack_0000d8a2 + -0xae) * 4; *(int *)(iVar18 + 0x7fb) = uVar10 - uVar11; *(int *)(iVar18 + 0x7fd) = (iVar15 - iVar17) - (uint)(uVar10 < uVar11); } } FUN_1020_100b(); FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0ffd(); in_BX = 0; local_62 = 0; FUN_1020_0fe5(); FUN_1020_0feb(); FUN_1020_0ff7(); local_64 = FUN_1020_1017(); if (DAT_1028_07c6 == '\0') { bVar21 = false; in_BX = in_stack_0000d8c2; FUN_1020_1007(); if (bVar21) { iVar15 = *(int *)((int)*(undefined4 *)(param_1 + 6) + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar10 = FUN_1020_1017(); if ((in_stack_0000d8b2 < iVar15) || ((in_stack_0000d8b2 <= iVar15 && (in_stack_0000d8b0 < uVar10)))) { if (in_stack_0000d8ce == 0 && in_stack_0000d8d0 == 0) { FUN_1008_0002(); } else { FUN_1000_bc36(); } in_BX = *(uint *)((int)*(undefined4 *)(param_1 + 6) + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar10 = FUN_1020_1017(); bVar21 = local_64 < uVar10; local_64 = local_64 - uVar10; local_62 = (local_62 - in_BX) - (uint)bVar21; } } } FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0feb(); FUN_1020_0ffd(); uVar11 = FUN_1020_1017(); FUN_1020_100b(); FUN_1020_100b(); FUN_1020_0ff7(); uVar10 = local_62; FUN_1020_100b(); FUN_1020_0ff7(); FUN_1020_0fe5(); FUN_1020_0ffd(); uVar22 = FUN_1020_1017(); bVar21 = CARRY2(local_e,uVar11); local_e = local_e + uVar11; local_c = local_c + iVar16 + (uint)bVar21; bVar21 = CARRY2(local_12,uVar22); local_12 = local_12 + uVar22; local_10 = local_10 + uVar10 + (uint)bVar21; if (in_stack_0000d8a2 == 0x19) { if (((int)local_14 < 0) || (((int)local_14 < 1 && (local_16 < 1000)))) { *(undefined1 *)((int)*(undefined4 *)(param_1 + 6) + 0xbdd) = 0; local_12 = 0; local_10 = 0; } local_c = 0; local_e = 0; } else if (in_stack_0000d8a2 == 2) { if (*(byte *)((int)*(undefined4 *)(param_1 + 6) + 0x61) < 2) { FUN_1000_ae6e(); } else { *(undefined1 *)((local_8 + 0xad) * 0x53 + 0x98f) = 0; DAT_1028_0874 = '\0'; } } } if (*(char *)((int)*(undefined4 *)(param_1 + 6) + 0xbdd) != '\0') { uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); *(undefined2 *)(iVar16 + 0xbce) = local_40; *(uint *)(iVar16 + 0xbd0) = local_3e; *(undefined2 *)(iVar16 + 0xbd2) = local_3c; *(uint *)(iVar16 + 0xbaa) = local_e; *(uint *)(iVar16 + 0xbac) = local_c; *(uint *)(iVar16 + 0xbae) = local_12; *(uint *)(iVar16 + 0xbb0) = local_10; FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); FUN_1020_100b(); FUN_1020_0ffd(); FUN_1020_0ff1(); iVar15 = extraout_DX_06; FUN_1020_0fe5(); FUN_1020_10be(); FUN_1020_0ff7(); uVar10 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar17 = (int)*(undefined4 *)(param_1 + 6); iVar16 = *(int *)(iVar17 + 0x58); if ((iVar16 < iVar15) || ((in_BX = local_3e, iVar16 <= iVar15 && (*(uint *)(iVar17 + 0x56) < uVar10)))) { FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); iVar17 = (iVar15 - *(int *)(iVar16 + 0x58)) - (uint)(uVar10 < *(uint *)(iVar16 + 0x56)); FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ffd(); uVar22 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar18 = (int)*(undefined4 *)(param_1 + 6); uVar11 = *(uint *)(iVar18 + 0xbaa); iVar16 = *(int *)(iVar18 + 0xbac); *(int *)(iVar18 + 0xbaa) = uVar11 - uVar22; *(int *)(iVar18 + 0xbac) = (iVar16 - iVar17) - (uint)(uVar11 < uVar22); FUN_1020_100b(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); in_BX = (iVar15 - *(int *)(iVar16 + 0x58)) - (uint)(uVar10 < *(uint *)(iVar16 + 0x56)); FUN_1020_08a9(); FUN_1020_100b(); FUN_1020_0ffd(); uVar11 = FUN_1020_1017(); uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar15 = (int)*(undefined4 *)(param_1 + 6); uVar10 = *(uint *)(iVar15 + 0xbae); iVar16 = *(int *)(iVar15 + 0xbb0); *(int *)(iVar15 + 0xbae) = uVar10 - uVar11; *(int *)(iVar15 + 0xbb0) = (iVar16 - in_BX) - (uint)(uVar10 < uVar11); } uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar16 = (int)*(undefined4 *)(param_1 + 6); bVar21 = CARRY2(DAT_1028_07d3,*(uint *)(iVar16 + 0xbaa)); DAT_1028_07d3 = DAT_1028_07d3 + *(uint *)(iVar16 + 0xbaa); DAT_1028_07d5 = DAT_1028_07d5 + *(int *)(iVar16 + 0xbac) + (uint)bVar21; bVar21 = CARRY2(DAT_1028_07d7,*(uint *)(iVar16 + 0xbae)); DAT_1028_07d7 = DAT_1028_07d7 + *(uint *)(iVar16 + 0xbae); DAT_1028_07d9 = DAT_1028_07d9 + *(int *)(iVar16 + 0xbb0) + (uint)bVar21; FUN_1000_bdde(); } if (iVar14 != 0) goto LAB_1000_ea63; uVar19 = (undefined2)((ulong)*(undefined4 *)(param_1 + 6) >> 0x10); iVar14 = (int)*(undefined4 *)(param_1 + 6); if (((*(char *)(iVar14 + 0xbe2) == '\x01') || (*(char *)(iVar14 + 0xbe1) == '\x01')) || (iVar13 == iVar5)) goto LAB_1000_ea63; iVar13 = iVar13 + 1; goto LAB_1000_c839; } /* ===== 1000:eab1 exported_ordinal_10 ===== */ void __stdcall16far exported_ordinal_10(undefined4 param_1) { char *pcVar1; undefined1 uVar2; undefined1 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; int iVar9; uint uVar10; int iVar11; int iVar12; undefined2 uVar13; undefined2 unaff_CS; bool bVar14; undefined2 uVar15; undefined2 uVar16; undefined2 uVar17; undefined2 uVar18; undefined1 local_4d; int local_30; int local_2e; uVar13 = (undefined2)((ulong)param_1 >> 0x10); iVar12 = (int)param_1; if (*(int *)(iVar12 + 0x41) != 0 || *(int *)(iVar12 + 0x43) != 0) { return; } if (*(int *)(iVar12 + 0x45) != 0 || *(int *)(iVar12 + 0x47) != 0) { return; } if (*(char *)(iVar12 + 0xbd8) != '\0') { return; } if (*(char *)(iVar12 + 0xbd9) != '\0') { return; } if (DAT_1028_07cc != '\0') { return; } if (*(char *)(iVar12 + 0x51) != '\0') { return; } if (DAT_1028_07c4 == '\0') { return; } *(undefined1 *)(iVar12 + 0x51) = 1; if (DAT_1028_07c5 != '\0') { local_30 = 1; while( true ) { unaff_CS = 0x1000; FUN_1000_7e12(&stack0xfffe,local_30); if (local_30 == 0xaf) break; local_30 = local_30 + 1; } DAT_1028_07c5 = '\0'; } bVar14 = 0xfffe < DAT_1028_0876; DAT_1028_0876 = DAT_1028_0876 + 1; DAT_1028_0878 = DAT_1028_0878 + (uint)bVar14; if (*(char *)(iVar12 + 0xbdd) != '\0') { if ((DAT_1028_07ca != '\0') && (DAT_1028_0874 == '\0')) { if (DAT_1028_086d == DAT_1028_086f) { if (DAT_1028_086d == 10) { uVar8 = GETDC(unaff_CS,*(undefined2 *)(iVar12 + 4)); FUN_1008_0e08(0,0,uVar8); RELEASEDC(0x1008,uVar8); if (DAT_1028_0873 == '\0') { DAT_1028_07ca = '\0'; for (local_2e = 0xc; *(undefined1 *)(local_2e * 0x53 + 0x98f) = 1, local_2e != 0x14; local_2e = local_2e + 1) { } } } else { uVar18 = GETDC(unaff_CS,*(undefined2 *)(iVar12 + 4)); FUN_1008_0e08(0,DAT_1028_086d,uVar18); uVar8 = *(undefined2 *)(iVar12 + 4); RELEASEDC(0x1008,uVar18); DAT_1028_086f = 10; DAT_1028_0873 = '\0'; DAT_1028_2679 = 0; *(undefined2 *)(iVar12 + 0xbca) = 0; *(undefined2 *)(iVar12 + 0xbcc) = 0; *(undefined2 *)(iVar12 + 0xbce) = 0; *(undefined2 *)(iVar12 + 0xbd0) = 0; *(undefined2 *)(iVar12 + 0xbd2) = 0; if (DAT_1028_086d == 1) { DAT_1028_07d3 = 0xefd0; DAT_1028_07d5 = 3; DAT_1028_07d7 = 0x30b0; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 2) { DAT_1028_07d3 = 0xf3b8; DAT_1028_07d5 = 3; DAT_1028_07d7 = 0x3c68; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 3) { DAT_1028_07d3 = 0xefd0; DAT_1028_07d5 = 3; DAT_1028_07d7 = 0x30b0; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 4) { DAT_1028_07d3 = 0xfb88; DAT_1028_07d5 = 3; DAT_1028_07d7 = 0x4ff0; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 5) { DAT_1028_07d3 = 0xf10; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x5f90; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 6) { DAT_1028_07d3 = 0x1eb0; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x6f30; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 7) { DAT_1028_07d3 = 0x3238; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x7ae8; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 8) { DAT_1028_07d3 = 0x3df0; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x7ed0; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 9) { DAT_1028_07d3 = 0x4d90; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x8a88; DAT_1028_07d9 = 1; uVar18 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(uVar8); FUN_1020_0ff7(); uVar8 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbaa) = uVar8; *(undefined2 *)(iVar12 + 0xbac) = uVar18; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; } else if (DAT_1028_086d == 0x12) { DAT_1028_07d3 = 0xf588; DAT_1028_07d5 = 4; DAT_1028_07d7 = 0x6760; DAT_1028_07d9 = 1; *(undefined2 *)(iVar12 + 0xbaa) = 0; *(undefined2 *)(iVar12 + 0xbac) = 0; *(undefined2 *)(iVar12 + 0xbae) = 1000; *(undefined2 *)(iVar12 + 0xbb0) = 0; } FUN_1000_c426(&stack0xfffe,1,0); FUN_1000_9bca(&stack0xfffe); FUN_1008_0002(0x10); *(undefined1 *)(iVar12 + 0xbdf) = 0; } } else { uVar8 = GETDC(unaff_CS,*(undefined2 *)(iVar12 + 4)); if (DAT_1028_086d < DAT_1028_086f) { DAT_1028_086d = DAT_1028_086d + 1; } else { DAT_1028_086d = DAT_1028_086d - 1; } FUN_1008_0e08(CONCAT11((char)(DAT_1028_086d >> 8),DAT_1028_0873),DAT_1028_086d,uVar8); RELEASEDC(0x1008,uVar8); } } local_2e = 1; while( true ) { if ((*(char *)(iVar12 + local_2e + 0x61) != '\0') && (pcVar1 = (char *)(iVar12 + local_2e + 0x61), *pcVar1 = *pcVar1 + -1, *(char *)(iVar12 + local_2e + 0x61) == '\0')) { FUN_1000_b3f3(&stack0xfffe,local_2e); } if (local_2e == 0xaf) break; local_2e = local_2e + 1; } if (DAT_1028_07c7 != '\0') { if ((DAT_1028_0857 < 0) || ((DAT_1028_0857 < 1 && (DAT_1028_0855 < 6)))) { bVar14 = 0xfffe < DAT_1028_0855; DAT_1028_0855 = DAT_1028_0855 + 1; DAT_1028_0857 = DAT_1028_0857 + (uint)bVar14; FUN_1000_6f27(&stack0xfffe); } else { DAT_1028_07c7 = '\0'; } } uVar18 = DAT_1028_07e9; uVar8 = DAT_1028_07e5; if (1 < *(byte *)(iVar12 + 0x61)) { if (DAT_1028_41f9 == '\0') { if (*(char *)(iVar12 + 0xbe1) == '\0') { *(undefined2 *)(iVar12 + 0xbc2) = DAT_1028_07e3; *(undefined2 *)(iVar12 + 0xbc4) = uVar8; uVar8 = DAT_1028_07ed; *(undefined2 *)(iVar12 + 0xbc6) = DAT_1028_07eb; *(undefined2 *)(iVar12 + 0xbc8) = uVar8; FUN_1000_a38e(&stack0xfffe,0); } else { *(undefined1 *)(iVar12 + 0xbe1) = 0; } *(undefined1 *)(iVar12 + 0x61) = 1; uVar8 = DAT_1028_07e9; DAT_1028_0874 = '\0'; DAT_1028_41f9 = '\x01'; if (DAT_1028_424c == '\0') { *(undefined2 *)(iVar12 + 0xbc2) = DAT_1028_07e7; *(undefined2 *)(iVar12 + 0xbc4) = uVar8; uVar8 = DAT_1028_07f1; *(undefined2 *)(iVar12 + 0xbc6) = DAT_1028_07ef; *(undefined2 *)(iVar12 + 0xbc8) = uVar8; FUN_1000_ae6e(&stack0xfffe); } else { DAT_1028_07e3 = DAT_1028_07e7; DAT_1028_07e5 = DAT_1028_07e9; DAT_1028_07eb = DAT_1028_07ef; DAT_1028_07ed = DAT_1028_07f1; DAT_1028_07f3 = DAT_1028_07f7; DAT_1028_07f5 = DAT_1028_07f9; DAT_1028_07fb = DAT_1028_07ff; DAT_1028_07fd = DAT_1028_0801; DAT_1028_080b = DAT_1028_0811; DAT_1028_080d = DAT_1028_0813; DAT_1028_080f = DAT_1028_0815; DAT_1028_0803 = DAT_1028_0807; DAT_1028_0805 = DAT_1028_0809; FUN_1000_c36b(&stack0xfffe,0,0); DAT_1028_424c = '\0'; } } else if (DAT_1028_424c == '\0') { if (*(char *)(iVar12 + 0xbe1) == '\0') { *(undefined2 *)(iVar12 + 0xbc2) = DAT_1028_07e7; *(undefined2 *)(iVar12 + 0xbc4) = uVar18; uVar8 = DAT_1028_07f1; *(undefined2 *)(iVar12 + 0xbc6) = DAT_1028_07ef; *(undefined2 *)(iVar12 + 0xbc8) = uVar8; FUN_1000_a38e(&stack0xfffe,0); } else { *(undefined1 *)(iVar12 + 0xbe1) = 0; } *(undefined1 *)(iVar12 + 0x61) = 1; DAT_1028_0874 = '\0'; FUN_1000_c36b(&stack0xfffe,0,0); } } if ((*(char *)(iVar12 + 0xbd8) == '\0') && (*(char *)(iVar12 + 0xbdf) == '\0')) { FUN_1000_c79c(&stack0xfffe); } if (*(char *)(iVar12 + 0xbe2) == '\x01') { *(undefined1 *)(iVar12 + 0xbe2) = 0; FUN_1000_c426(&stack0xfffe,1,0); FUN_1000_bdde(&stack0xfffe,2,0); FUN_1000_9e85(&stack0xfffe); uVar8 = GETDC(0x1000,*(undefined2 *)(iVar12 + 4)); FUN_1008_08bb(0x14,0x94,0xf3,0x54,uVar8); FUN_1008_093f(0x14,0x94,0xf3,0x54,uVar8); RELEASEDC(0x1008,uVar8); FUN_1000_c426(&stack0xfffe,0,0); FUN_1000_bdde(&stack0xfffe,1,0); } if (*(char *)(iVar12 + 0xbe0) == '\x01') { FUN_1000_c426(&stack0xfffe,0,0); FUN_1000_bdde(&stack0xfffe,1,0); uVar8 = DAT_1028_396b; DAT_1028_07d3 = DAT_1028_3969; DAT_1028_07d5 = DAT_1028_396b; DAT_1028_07d7 = DAT_1028_396d; DAT_1028_07d9 = DAT_1028_396f; *(undefined2 *)(iVar12 + 0xbc2) = DAT_1028_3969; *(undefined2 *)(iVar12 + 0xbc4) = uVar8; uVar8 = DAT_1028_07d9; *(undefined2 *)(iVar12 + 0xbc6) = DAT_1028_07d7; *(undefined2 *)(iVar12 + 0xbc8) = uVar8; FUN_1000_a38e(&stack0xfffe,0); *(undefined1 *)(iVar12 + (uint)DAT_1028_07d1 * 0x14 + 0x47b) = 0; FUN_1000_b3f3(&stack0xfffe,0x3fc); *(undefined2 *)(iVar12 + 0xbaa) = 0; *(undefined2 *)(iVar12 + 0xbac) = 0; uVar8 = *(undefined2 *)(iVar12 + 0x58); FUN_1020_100b(); FUN_1020_0ff7(); uVar18 = FUN_1020_1017(); *(undefined2 *)(iVar12 + 0xbae) = uVar18; *(undefined2 *)(iVar12 + 0xbb0) = uVar8; *(undefined2 *)(iVar12 + 0xbca) = 0; *(undefined2 *)(iVar12 + 0xbcc) = 0; *(undefined2 *)(iVar12 + 0xbce) = 0; *(undefined2 *)(iVar12 + 0xbd0) = 0; *(undefined2 *)(iVar12 + 0xbd2) = 0; DAT_1028_399a = 2; FUN_1000_c426(&stack0xfffe,1,0); FUN_1000_bdde(&stack0xfffe,2,0); DAT_1028_41f9 = '\x01'; DAT_1028_424c = '\x01'; *(undefined1 *)(iVar12 + 0x61) = 2; DAT_1028_0874 = '\x01'; *(undefined1 *)(iVar12 + 0xbe0) = 0; } goto LAB_1000_fd59; } if (DAT_1028_07c9 != '\0') { iVar9 = 2; iVar11 = 0; FUN_1020_08e6(); if (iVar9 == 0 && iVar11 == 0) { FUN_1020_08e6(); iVar9 = FUN_1020_08e6(); if ((iVar9 < 0) || (7 < iVar9)) { if ((7 < iVar9) && (iVar9 < 0x10)) { FUN_1000_b3f3(&stack0xfffe,iVar9 + 0x84); } } else { FUN_1000_b30b(&stack0xfffe,iVar9 + 0x8c); } } iVar9 = 4; iVar11 = 0; FUN_1020_08e6(); if (iVar9 == 0 && iVar11 == 0) { FUN_1020_08e6(); iVar9 = FUN_1020_08e6(); if (iVar9 == 0) { FUN_1000_b30b(&stack0xfffe,0x3e9); FUN_1000_b3f3(&stack0xfffe,0x3ea); } else if ((iVar9 < 1) || (4 < iVar9)) { if ((4 < iVar9) && (iVar9 < 9)) { FUN_1000_b30b(&stack0xfffe,0x3f1 - iVar9); FUN_1000_b3f3(&stack0xfffe,0x3f2 - iVar9); } } else { FUN_1000_b30b(&stack0xfffe,iVar9 + 0x3e9); FUN_1000_b3f3(&stack0xfffe,iVar9 + 1000); } } iVar9 = 0x20; uVar8 = 0x1020; FUN_1020_08e6(); if (iVar9 == 0) { FUN_1000_b30b(&stack0xfffe,0x99); FUN_1000_b30b(&stack0xfffe,0x9a); uVar8 = 0x1000; FUN_1000_b30b(&stack0xfffe,6); } else if (iVar9 == 0x10) { FUN_1000_b3f3(&stack0xfffe,0x99); FUN_1000_b3f3(&stack0xfffe,0x9a); uVar8 = 0x1000; FUN_1000_b3f3(&stack0xfffe,6); } iVar9 = 4; iVar11 = 0; uVar18 = 0xf62f; FUN_1020_08e6(); if (iVar9 == 0 && iVar11 == 0) { uVar8 = *(undefined2 *)(iVar12 + 4); uVar15 = GETDC(0x1020,uVar8); FUN_1020_08e6(); iVar9 = FUN_1020_08e6(); if (iVar9 < 5) { iVar9 = (iVar9 * 3 + 0x5a) * 0x53; local_4d = (undefined1)(iVar9 + 0x95b); uVar2 = (undefined1)((uint)(iVar9 + 0x95b) >> 8); uVar3 = 0x10; FUN_1008_0837((*(int *)(iVar9 + 0x9ac) - *(int *)(iVar9 + 0x9a8)) + 1, (*(int *)(iVar9 + 0x9aa) - *(int *)(iVar9 + 0x9a6)) + -10, *(undefined2 *)(iVar9 + 0x9a8),*(undefined2 *)(iVar9 + 0x9a6),uVar15); iVar9 = CONCAT11(uVar2,local_4d); uVar18 = (undefined2)(CONCAT13(uVar3,CONCAT12(0x28,iVar9)) >> 0x10); FUN_1008_093f((*(int *)(iVar9 + 0x51) - *(int *)(iVar9 + 0x4d)) + 1, (*(int *)(iVar9 + 0x4f) - *(int *)(iVar9 + 0x4b)) + -10, *(undefined2 *)(iVar9 + 0x4d),*(undefined2 *)(iVar9 + 0x4b),uVar15); } else { iVar9 = ((iVar9 + -5) * 3 + 0x5a) * 0x53; local_4d = (undefined1)(iVar9 + 0x95b); uVar2 = (undefined1)((uint)(iVar9 + 0x95b) >> 8); uVar3 = 0x10; FUN_1008_08bb((*(int *)(iVar9 + 0x9ac) - *(int *)(iVar9 + 0x9a8)) + 1, (*(int *)(iVar9 + 0x9aa) - *(int *)(iVar9 + 0x9a6)) + -10, *(undefined2 *)(iVar9 + 0x9a8),*(undefined2 *)(iVar9 + 0x9a6),uVar15); iVar9 = CONCAT11(uVar2,local_4d); uVar18 = (undefined2)(CONCAT13(uVar3,CONCAT12(0x28,iVar9)) >> 0x10); FUN_1008_093f((*(int *)(iVar9 + 0x51) - *(int *)(iVar9 + 0x4d)) + 1, (*(int *)(iVar9 + 0x4f) - *(int *)(iVar9 + 0x4b)) + -10, *(undefined2 *)(iVar9 + 0x4d),*(undefined2 *)(iVar9 + 0x4b),uVar15); } uVar18 = *(undefined2 *)(iVar12 + 4); RELEASEDC(0x1008,uVar15); } iVar9 = 4; iVar11 = 0; FUN_1020_08e6(uVar18,uVar8); if (iVar9 == 0 && iVar11 == 0) { uVar15 = GETDC(0x1020,*(undefined2 *)(iVar12 + 4)); FUN_1020_08e6(); uVar16 = 0x1020; iVar9 = FUN_1020_08e6(); if (iVar9 == 0) { FUN_1008_0837(9,9,0xd1,0x96,uVar15); FUN_1008_093f(9,9,0xd1,0x96,uVar15); FUN_1008_08bb(9,9,0xe0,0xc0,uVar15); uVar16 = 0x1008; FUN_1008_093f(9,9,0xe0,0xc0,uVar15); } else if (iVar9 == 1) { FUN_1008_0837(9,9,0xd6,0xa4,uVar15); FUN_1008_093f(9,9,0xd6,0xa4,uVar15); FUN_1008_08bb(9,9,0xd1,0x96,uVar15); uVar16 = 0x1008; FUN_1008_093f(9,9,0xd1,0x96,uVar15); } else if (iVar9 == 2) { FUN_1008_0837(9,9,0xdb,0xb2,uVar15); FUN_1008_093f(9,9,0xdb,0xb2,uVar15); FUN_1008_08bb(9,9,0xd6,0xa4,uVar15); uVar16 = 0x1008; FUN_1008_093f(9,9,0xd6,0xa4,uVar15); } else if (iVar9 == 3) { FUN_1008_0837(9,9,0xe0,0xc0,uVar15); FUN_1008_093f(9,9,0xe0,0xc0,uVar15); FUN_1008_08bb(9,9,0xdb,0xb2,uVar15); uVar16 = 0x1008; FUN_1008_093f(9,9,0xdb,0xb2,uVar15); } RELEASEDC(uVar16,uVar15); } iVar9 = 8; iVar11 = 0; FUN_1020_08e6(uVar18,uVar8); if (iVar9 == 0 && iVar11 == 0) { uVar8 = GETDC(0x1020,*(undefined2 *)(iVar12 + 4)); FUN_1020_08e6(); iVar9 = FUN_1020_08e6(); if (iVar9 < 10) { FUN_1008_0dbd(iVar9,uVar8); } else { FUN_1008_0dbd(0x12 - iVar9,uVar8); } RELEASEDC(0x1008,uVar8); } iVar9 = 6; iVar11 = 0; unaff_CS = 0x1020; FUN_1020_08e6(); if (iVar9 == 0 && iVar11 == 0) { bVar14 = 0xfffe < DAT_1028_087a; DAT_1028_087a = DAT_1028_087a + 1; DAT_1028_087c = DAT_1028_087c + (uint)bVar14; uVar4 = GETDC(0x1020,*(undefined2 *)(iVar12 + 4)); uVar5 = CREATECOMPATIBLEDC(0x1228,uVar4); uVar6 = CREATECOMPATIBLEDC(0x1228,uVar4); uVar7 = CREATECOMPATIBLEBITMAP(0x1228,0x1e,0x11c); uVar2 = SELECTOBJECT(0x1228,DAT_1028_085f); uVar16 = uVar6; uVar3 = SELECTOBJECT(0x1228,uVar7); uVar15 = uVar6; BITBLT(0x1228,0x20,0xcc,0x115,0x1d9,uVar5,0x1e,100,0,0); uVar18 = uVar6; BITBLT(0x1228,0x20,0xcc,0xe9,0x1d8,uVar5,0x1e,0x89,0,100); uVar8 = uVar5; SELECTOBJECT(0x1228,DAT_1028_0861); iVar9 = 0x31; iVar11 = 0; FUN_1020_08e6(uVar8,uVar18,uVar15,uVar16); if ((iVar11 < 1) && ((iVar11 < 0 || (iVar9 == 0)))) { LAB_1000_fabd: uVar16 = 0; uVar15 = 0; FUN_1020_08e6(0,0,uVar6); iVar9 = FUN_1020_08a9(); iVar9 = 0xed - iVar9; uVar18 = 0x1e; uVar8 = uVar5; FUN_1020_08e6(uVar5,0x1e,iVar9); iVar11 = FUN_1020_08a9(); BITBLT(0x1020,0xc6,0x88,0,iVar11 + 400,uVar8,uVar18,iVar9,uVar15,uVar16); FUN_1020_08e6(uVar6); iVar9 = FUN_1020_08a9(); iVar9 = 0xed - iVar9; uVar18 = 0; FUN_1020_08e6(0,iVar9); uVar8 = FUN_1020_08a9(); BITBLT(0x1020,0xc6,0x88,0,0xa0,uVar5,0x1e,uVar8,uVar18,iVar9); } else { uVar10 = 0x31; iVar9 = 0; FUN_1020_08e6(uVar8,uVar18,uVar15); if ((-1 < iVar9) && ((0 < iVar9 || (0x15 < uVar10)))) goto LAB_1000_fabd; uVar17 = 0; uVar16 = 0; uVar15 = 0xed; uVar18 = 0x1e; uVar8 = uVar5; FUN_1020_08e6(uVar5,0x1e,0xed,0,0,uVar6); iVar9 = FUN_1020_08a9(); BITBLT(0x1020,0xc6,0x88,0,iVar9 + 400,uVar8,uVar18,uVar15,uVar16,uVar17); } uVar18 = uVar4; BITBLT(0x1228,0x20,0xcc,0,0,uVar6,0x1e,0xed,0xe9,0x174); uVar8 = uVar5; SELECTOBJECT(0x28,uVar2); uVar2 = (undefined1)uVar6; SELECTOBJECT(0x28,uVar3); DELETEOBJECT(0x28,(char)uVar7,uVar2,uVar8,uVar18); DELETEDC(0x1228,(char)uVar5); DELETEDC(0x1228,uVar6); unaff_CS = 0x1228; RELEASEDC(0x1228,uVar4); } } if ((DAT_1028_07c8 != '\0') && (*(char *)(iVar12 + 0xbdd) == '\0')) { *(undefined1 *)(iVar12 + 0xbdf) = 1; if ((DAT_1028_0853 < 0) || ((DAT_1028_0853 < 1 && (DAT_1028_0851 < 0x119)))) { if ((DAT_1028_0853 == 0) && (DAT_1028_0851 == 1)) { for (local_30 = 0x81; *(undefined2 *)(local_30 * 0x53 + 0x99e) = 0, local_30 != 0x85; local_30 = local_30 + 1) { } } bVar14 = 0xfffe < DAT_1028_0851; DAT_1028_0851 = DAT_1028_0851 + 1; DAT_1028_0853 = DAT_1028_0853 + (uint)bVar14; FUN_1000_7440(&stack0xfffe); } else { DAT_1028_07c8 = '\0'; *(undefined1 *)(iVar12 + 0xbdf) = 0; DAT_1028_0851 = 0; DAT_1028_0853 = 0; uVar8 = GETDC(unaff_CS,*(undefined2 *)(iVar12 + 4)); FUN_1008_08bb(0x46,0x44,0x29,0x57,uVar8); FUN_1008_093f(0x46,0x44,0x29,0x57,uVar8); RELEASEDC(0x1008,uVar8); for (local_30 = 0xf; *(undefined1 *)(iVar12 + (uint)DAT_1028_07d1 * 0x14 + local_30 + 0x467) = 0, local_30 != 0x13; local_30 = local_30 + 1) { } } } if (*(int *)((uint)DAT_1028_07d0 * 2 + 0x81f) == -1) { FUN_1000_a72c(&stack0xfffe); FUN_1000_acc2(&stack0xfffe); FUN_1000_a604(&stack0xfffe); FUN_1000_9e85(&stack0xfffe); uVar8 = GETDC(0x1000,*(undefined2 *)(iVar12 + 4)); FUN_1008_08bb(0x14,0x94,0xf3,0x54,uVar8); FUN_1008_093f(0x14,0x94,0xf3,0x54,uVar8); RELEASEDC(0x1008,uVar8); DAT_1028_0876 = 0; DAT_1028_0878 = 0; } LAB_1000_fd59: FUN_1000_99f0(&stack0xfffe); FUN_1008_00e2(); *(undefined1 *)(iVar12 + 0x51) = 0; if (*(int *)(iVar12 + 0x5e) != 0) { *(int *)(iVar12 + 0x5e) = *(int *)(iVar12 + 0x5e) + -1; } return; } /* ===== 1000:fd85 ne_program_entry ===== */ /* WARNING: Control flow encountered bad instruction data */ void ne_program_entry(void) { undefined2 extraout_DX; undefined2 uVar1; undefined2 uVar2; INITTASK(); uVar1 = extraout_DX; FUN_1020_0002(); FUN_1008_298a(); FUN_1008_2554(); FUN_1010_0472(); FUN_1008_15c2(); FUN_1008_11b8(); FUN_1008_0f27(); uVar2 = 0x1228; DAT_1028_07bf = GETVERSION(); DAT_1028_07c1 = uVar1; if ((byte)DAT_1028_07bf < 3) { LAB_1000_fdf4: (*DAT_1028_0666)(0x1228,0x10,0x3c8,0x1028,0x396,0x1028,0); } else { if ((byte)DAT_1028_07bf == 3) { if ((byte)(DAT_1028_07bf >> 8) < 10) goto LAB_1000_fdf4; } uVar2 = 0x1018; FUN_1018_1a61(0x748,0x1028,0x24,0x3e1,0x1028); (*(code *)*(undefined2 *)(DAT_1028_0748 + 0x1c))(0x1018,0x748,0x1028); (*(code *)*(undefined2 *)(DAT_1028_0748 + 8))(0x1018,0x748,0x1028,0); } FUN_1020_0061(uVar2); /* WARNING: Bad instruction - Truncating control flow here */ halt_baddata(); } /* ===== 1008:0002 FUN_1008_0002 ===== */ void __stdcall16far FUN_1008_0002(undefined2 param_1) { if ((DAT_1028_07c6 == '\0') && (DAT_1028_43f2 != '\0')) { FUN_1008_1131(param_1); } return; } /* ===== 1008:0023 FUN_1008_0023 ===== */ void __stdcall16far FUN_1008_0023(undefined2 param_1) { undefined2 *puVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 *puVar5; undefined2 uVar6; int local_8; puVar5 = (undefined2 *)FUN_1020_012d(0x404); uVar6 = (undefined2)((ulong)puVar5 >> 0x10); puVar1 = (undefined2 *)puVar5; if (puVar5 != (undefined2 *)0x0) { *puVar5 = 0x300; puVar1[1] = 0x100; local_8 = 0; while( true ) { *(undefined1 *)(puVar1 + local_8 * 2 + 2) = 0; *(undefined1 *)((int)puVar1 + local_8 * 4 + 5) = 0; *(undefined1 *)(puVar1 + local_8 * 2 + 3) = 0; *(undefined1 *)((int)puVar1 + local_8 * 4 + 7) = 4; if (local_8 == 0xff) break; local_8 = local_8 + 1; } uVar2 = GETDC(0x1020,param_1); uVar4 = uVar2; uVar3 = CREATEPALETTE(0x1228,puVar1); uVar3 = SELECTPALETTE(0x1228,0,uVar3); REALIZEPALETTE(0x1228,uVar2,uVar6,uVar4); uVar6 = uVar2; uVar4 = SELECTPALETTE(0x1228,1,uVar3); DELETEOBJECT(0x1228,uVar4,uVar6); RELEASEDC(0x1228,uVar2); FUN_1020_0147(0x404,puVar5); } return; } /* ===== 1008:00e2 FUN_1008_00e2 ===== */ void __cdecl16far FUN_1008_00e2(void) { int iVar1; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 local_14 [2]; int local_12; do { iVar1 = PEEKMESSAGE(unaff_CS,1,0x32,0,0,local_14,unaff_SS); if ((((iVar1 != 0) && (local_12 != 0x580)) && (local_12 != 0x100)) && (local_12 != 0x101)) { TRANSLATEMESSAGE(0x1228,local_14); DISPATCHMESSAGE(0x1228,local_14); } unaff_CS = 0x1228; } while (iVar1 != 0); return; } /* ===== 1008:0138 FUN_1008_0138 ===== */ void __stdcall16far FUN_1008_0138(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,int param_6,undefined2 param_7,int param_8,undefined2 param_9, undefined2 param_10,undefined2 param_11,undefined2 param_12,undefined2 param_13, undefined2 param_14,undefined2 param_15,undefined2 param_16,undefined2 param_17, undefined2 param_18,undefined2 param_19,undefined2 param_20,undefined2 param_21, undefined2 param_22,undefined2 param_23,undefined2 param_24,undefined2 param_25, uint param_26,int param_27,uint param_28,int param_29,uint param_30,int param_31, uint param_32,int param_33,uint param_34,int param_35,char param_36,undefined1 param_37 ,char param_38,undefined1 param_39,uint param_40) { uint uVar1; undefined2 uVar2; uint uVar3; int iVar4; int iVar5; undefined2 uVar6; int iVar7; bool bVar8; uint local_a; int local_8; uint local_6; int local_4; if (param_40 < 0xb0) { iVar7 = param_40 * 0x53; *(undefined1 *)(iVar7 + 0x95b) = param_38; if (param_26 == 0 && param_27 == 0) { param_38 = '\x02'; } else { param_38 = '\x01'; } if (param_36 == '\x01') { bVar8 = CARRY2(DAT_1028_0849,param_34); param_34 = DAT_1028_0849 + param_34; param_35 = DAT_1028_084b + param_35 + (uint)bVar8; bVar8 = CARRY2(DAT_1028_084d,param_32); param_32 = DAT_1028_084d + param_32; param_33 = DAT_1028_084f + param_33 + (uint)bVar8; local_6 = param_34 + param_30; local_4 = param_35 + param_31 + (uint)CARRY2(param_34,param_30); local_a = param_32 + param_28; local_8 = param_33 + param_29 + (uint)CARRY2(param_32,param_28); } else { bVar8 = 0x13 < param_32; param_32 = param_32 - 0x14; param_33 = param_33 + -1 + (uint)bVar8; local_6 = param_30; local_4 = param_31; local_a = param_28 - 0x14; local_8 = param_29 + -1 + (uint)(0x13 < param_28); } if (((local_4 < 1) && ((local_4 < 0 || (local_6 == 0)))) || ((local_4 <= param_35 && ((local_4 < param_35 || (local_6 <= param_34)))))) { if (((local_4 < 1) && ((local_4 < 0 || (local_6 == 0)))) || ((param_35 <= local_4 && ((param_35 < local_4 || (param_34 <= local_6)))))) { iVar4 = (param_35 - param_27) - (uint)(param_34 < param_26); uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x95d) = uVar2; *(int *)(iVar7 + 0x95f) = iVar4; iVar4 = param_35 + param_27 + (uint)CARRY2(param_34,param_26); uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x965) = uVar2; *(int *)(iVar7 + 0x967) = iVar4; } else { iVar4 = local_4; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x95d) = uVar2; *(int *)(iVar7 + 0x95f) = iVar4; iVar4 = param_35; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x965) = uVar2; *(int *)(iVar7 + 0x967) = iVar4; } } else { iVar4 = param_35; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x95d) = uVar2; *(int *)(iVar7 + 0x95f) = iVar4; iVar4 = local_4; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x965) = uVar2; *(int *)(iVar7 + 0x967) = iVar4; } if (((local_8 < 1) && ((local_8 < 0 || (local_a == 0)))) || ((local_8 <= param_33 && ((local_8 < param_33 || (local_a <= param_32)))))) { if (((local_8 < 1) && ((local_8 < 0 || (local_a == 0)))) || ((param_33 <= local_8 && ((param_33 < local_8 || (param_32 <= local_a)))))) { iVar4 = (param_33 - param_27) - (uint)(param_32 < param_26); uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x961) = uVar2; *(int *)(iVar7 + 0x963) = iVar4; iVar4 = param_33 + param_27 + (uint)CARRY2(param_32,param_26); uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x969) = uVar2; *(int *)(iVar7 + 0x96b) = iVar4; } else { iVar4 = local_8; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x961) = uVar2; *(int *)(iVar7 + 0x963) = iVar4; iVar4 = param_33; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x969) = uVar2; *(int *)(iVar7 + 0x96b) = iVar4; } } else { iVar4 = param_33; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x961) = uVar2; *(int *)(iVar7 + 0x963) = iVar4; iVar4 = local_8; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x969) = uVar2; *(int *)(iVar7 + 0x96b) = iVar4; } if (param_38 == '\x01') { iVar4 = param_35; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x96d) = uVar2; *(int *)(iVar7 + 0x96f) = iVar4; iVar4 = param_33; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x971) = uVar2; *(int *)(iVar7 + 0x973) = iVar4; *(undefined2 *)(iVar7 + 0x975) = 0; *(undefined2 *)(iVar7 + 0x977) = 0; *(undefined2 *)(iVar7 + 0x979) = 0; *(undefined2 *)(iVar7 + 0x97b) = 0; uVar6 = 0; FUN_1020_08a9(); uVar2 = FUN_1020_100b(); *(undefined2 *)(iVar7 + 0x97d) = uVar2; *(undefined2 *)(iVar7 + 0x97f) = uVar6; *(int *)(iVar7 + 0x981) = param_27; if ((*(int *)(iVar7 + 0x95f) < *(int *)(iVar7 + 0x96f)) || ((*(int *)(iVar7 + 0x95f) <= *(int *)(iVar7 + 0x96f) && (*(uint *)(iVar7 + 0x95d) < *(uint *)(iVar7 + 0x96d))))) { uVar1 = *(uint *)(iVar7 + 0x95d); iVar4 = *(int *)(iVar7 + 0x95f); *(int *)(iVar7 + 0x95d) = uVar1 + 0xec78; *(int *)(iVar7 + 0x95f) = iVar4 - (uint)(uVar1 < 5000); } else { iVar5 = param_8; uVar3 = FUN_1020_08a9(); uVar1 = *(uint *)(iVar7 + 0x95d); iVar4 = *(int *)(iVar7 + 0x95f); *(int *)(iVar7 + 0x95d) = uVar3 + *(uint *)(iVar7 + 0x95d); *(int *)(iVar7 + 0x95f) = iVar5 + iVar4 + (uint)CARRY2(uVar3,uVar1); } if ((*(int *)(iVar7 + 0x963) < *(int *)(iVar7 + 0x973)) || ((*(int *)(iVar7 + 0x963) <= *(int *)(iVar7 + 0x973) && (*(uint *)(iVar7 + 0x961) < *(uint *)(iVar7 + 0x971))))) { uVar1 = *(uint *)(iVar7 + 0x961); iVar4 = *(int *)(iVar7 + 0x963); *(int *)(iVar7 + 0x961) = uVar1 + 0xec78; *(int *)(iVar7 + 0x963) = iVar4 - (uint)(uVar1 < 5000); } else { iVar5 = param_6; uVar3 = FUN_1020_08a9(); uVar1 = *(uint *)(iVar7 + 0x961); iVar4 = *(int *)(iVar7 + 0x963); *(int *)(iVar7 + 0x961) = uVar3 + *(uint *)(iVar7 + 0x961); *(int *)(iVar7 + 0x963) = iVar5 + iVar4 + (uint)CARRY2(uVar3,uVar1); } if ((*(int *)(iVar7 + 0x96f) < *(int *)(iVar7 + 0x967)) || ((*(int *)(iVar7 + 0x96f) <= *(int *)(iVar7 + 0x967) && (*(uint *)(iVar7 + 0x96d) < *(uint *)(iVar7 + 0x965))))) { uVar1 = *(uint *)(iVar7 + 0x965); iVar4 = *(int *)(iVar7 + 0x967); *(int *)(iVar7 + 0x965) = uVar1 + 5000; *(int *)(iVar7 + 0x967) = iVar4 + (uint)(0xec77 < uVar1); } else { uVar3 = FUN_1020_08a9(); uVar1 = *(uint *)(iVar7 + 0x965); iVar4 = *(int *)(iVar7 + 0x967); *(int *)(iVar7 + 0x965) = uVar3 + *(uint *)(iVar7 + 0x965); *(int *)(iVar7 + 0x967) = param_8 + iVar4 + (uint)CARRY2(uVar3,uVar1); } if ((*(int *)(iVar7 + 0x973) < *(int *)(iVar7 + 0x96b)) || ((*(int *)(iVar7 + 0x973) <= *(int *)(iVar7 + 0x96b) && (*(uint *)(iVar7 + 0x971) < *(uint *)(iVar7 + 0x969))))) { uVar1 = *(uint *)(iVar7 + 0x969); iVar4 = *(int *)(iVar7 + 0x96b); *(int *)(iVar7 + 0x969) = uVar1 + 5000; *(int *)(iVar7 + 0x96b) = iVar4 + (uint)(0xec77 < uVar1); } else { uVar3 = FUN_1020_08a9(); uVar1 = *(uint *)(iVar7 + 0x969); iVar4 = *(int *)(iVar7 + 0x96b); *(int *)(iVar7 + 0x969) = uVar3 + *(uint *)(iVar7 + 0x969); *(int *)(iVar7 + 0x96b) = param_6 + iVar4 + (uint)CARRY2(uVar3,uVar1); } DAT_1028_0849 = param_34; DAT_1028_084b = param_35; DAT_1028_084d = param_32; DAT_1028_084f = param_33; } else if (param_38 == '\x02') { uVar1 = *(uint *)(iVar7 + 0x95d); iVar4 = *(int *)(iVar7 + 0x95f); *(int *)(iVar7 + 0x95d) = uVar1 + 0xec78; *(int *)(iVar7 + 0x95f) = iVar4 - (uint)(uVar1 < 5000); uVar1 = *(uint *)(iVar7 + 0x965); iVar4 = *(int *)(iVar7 + 0x967); *(int *)(iVar7 + 0x965) = uVar1 + 5000; *(int *)(iVar7 + 0x967) = iVar4 + (uint)(0xec77 < uVar1); uVar1 = *(uint *)(iVar7 + 0x961); iVar4 = *(int *)(iVar7 + 0x963); *(int *)(iVar7 + 0x961) = uVar1 + 0xec78; *(int *)(iVar7 + 0x963) = iVar4 - (uint)(uVar1 < 5000); uVar1 = *(uint *)(iVar7 + 0x969); iVar4 = *(int *)(iVar7 + 0x96b); *(int *)(iVar7 + 0x969) = uVar1 + 5000; *(int *)(iVar7 + 0x96b) = iVar4 + (uint)(0xec77 < uVar1); uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x96d) = uVar2; *(int *)(iVar7 + 0x96f) = param_35; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x971) = uVar2; *(int *)(iVar7 + 0x973) = param_33; iVar4 = local_4; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x975) = uVar2; *(int *)(iVar7 + 0x977) = iVar4; iVar4 = local_8; uVar2 = FUN_1020_08a9(); *(undefined2 *)(iVar7 + 0x979) = uVar2; *(int *)(iVar7 + 0x97b) = iVar4; DAT_1028_0849 = local_6; DAT_1028_084b = local_4; DAT_1028_084d = local_a; DAT_1028_084f = local_8; *(undefined2 *)(iVar7 + 0x97d) = 0; *(undefined2 *)(iVar7 + 0x97f) = 0; *(undefined2 *)(iVar7 + 0x981) = 0; } *(undefined2 *)(iVar7 + 0x983) = param_23; *(undefined2 *)(iVar7 + 0x985) = param_24; *(undefined2 *)(iVar7 + 0x987) = param_25; *(undefined2 *)(iVar7 + 0x989) = param_20; *(undefined2 *)(iVar7 + 0x98b) = param_21; *(undefined2 *)(iVar7 + 0x98d) = param_22; *(undefined1 *)(iVar7 + 0x98f) = param_39; *(undefined2 *)(iVar7 + 0x990) = param_17; *(undefined2 *)(iVar7 + 0x992) = param_18; *(undefined2 *)(iVar7 + 0x994) = param_19; *(undefined2 *)(iVar7 + 0x996) = param_14; *(undefined2 *)(iVar7 + 0x998) = param_15; *(undefined2 *)(iVar7 + 0x99a) = param_16; *(undefined1 *)(iVar7 + 0x95c) = param_37; *(undefined2 *)(iVar7 + 0x99c) = param_13; *(undefined2 *)(iVar7 + 0x99e) = param_12; *(undefined2 *)(iVar7 + 0x9a0) = param_10; *(undefined2 *)(iVar7 + 0x9a2) = param_11; *(undefined2 *)(iVar7 + 0x9a4) = param_9; *(undefined2 *)(iVar7 + 0x9a6) = param_4; *(undefined2 *)(iVar7 + 0x9a8) = param_3; *(undefined2 *)(iVar7 + 0x9aa) = param_2; *(undefined2 *)(iVar7 + 0x9ac) = param_1; } return; } /* ===== 1008:0787 FUN_1008_0787 ===== */ void __stdcall16far FUN_1008_0787(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, int param_5) { param_5 = param_5 * 8; *(undefined2 *)(param_5 + 0x4263) = param_4; *(undefined2 *)(param_5 + 0x4265) = param_3; *(undefined2 *)(param_5 + 16999) = param_2; *(undefined2 *)(param_5 + 0x4269) = param_1; return; } /* ===== 1008:07b6 FUN_1008_07b6 ===== */ void __stdcall16far FUN_1008_07b6(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; uVar4 = param_6; uVar1 = CREATECOMPATIBLEDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,param_6,uVar4); uVar3 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar7 = uVar2; uVar4 = SELECTOBJECT(0x1228,param_1); uVar6 = uVar1; BITBLT(0x1228,0x20,0xcc,0,0,uVar2,param_2,param_3,param_4,param_5); uVar5 = uVar2; SELECTOBJECT(0x1228,uVar4); uVar4 = uVar1; SELECTOBJECT(0x1228,uVar3); DELETEDC(0x1228,uVar2,uVar4,uVar5,uVar6,uVar7); DELETEDC(0x1228,uVar1); return; } /* ===== 1008:0837 FUN_1008_0837 ===== */ void __stdcall16far FUN_1008_0837(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; uVar4 = param_5; uVar1 = CREATECOMPATIBLEDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,param_5,uVar4); uVar3 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar7 = uVar2; uVar4 = SELECTOBJECT(0x1228,DAT_1028_085f); uVar6 = uVar1; BITBLT(0x1228,0x20,0xcc,param_3,param_4,uVar2,param_1,param_2,param_3,param_4); uVar5 = uVar2; SELECTOBJECT(0x1228,uVar4); uVar4 = uVar1; SELECTOBJECT(0x1228,uVar3); DELETEDC(0x1228,uVar2,uVar4,uVar5,uVar6,uVar7); DELETEDC(0x1228,uVar1); return; } /* ===== 1008:08bb FUN_1008_08bb ===== */ void __stdcall16far FUN_1008_08bb(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; uVar4 = param_5; uVar1 = CREATECOMPATIBLEDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,param_5,uVar4); uVar3 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar7 = uVar2; uVar4 = SELECTOBJECT(0x1228,DAT_1028_085d); uVar6 = uVar1; BITBLT(0x1228,0x20,0xcc,param_3,param_4,uVar2,param_1,param_2,param_3,param_4); uVar5 = uVar2; SELECTOBJECT(0x1228,uVar4); uVar4 = uVar1; SELECTOBJECT(0x1228,uVar3); DELETEDC(0x1228,uVar2,uVar4,uVar5,uVar6,uVar7); DELETEDC(0x1228,uVar1); return; } /* ===== 1008:093f FUN_1008_093f ===== */ void __stdcall16far FUN_1008_093f(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; uVar5 = param_5; uVar1 = CREATECOMPATIBLEDC(); uVar4 = uVar1; uVar2 = SELECTOBJECT(0x1228,DAT_1028_085b); BITBLT(0x1228,0x20,0xcc,param_3,param_4,uVar1,param_1,param_2,param_3,param_4); uVar3 = uVar1; SELECTOBJECT(0x1228,uVar2); DELETEDC(0x1228,uVar1,uVar3,param_5,uVar4,uVar5); return; } /* ===== 1008:0996 FUN_1008_0996 ===== */ void __stdcall16far FUN_1008_0996(undefined2 param_1,uint param_2,int param_3) { undefined2 uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; int iVar6; byte bVar7; undefined2 uVar8; undefined2 uVar9; undefined2 uVar10; undefined2 uVar11; undefined2 local_32; undefined2 local_1c; undefined1 local_4; uVar2 = param_1; uVar1 = CREATECOMPATIBLEDC(); uVar2 = CREATECOMPATIBLEDC(0x1228,param_1,uVar2); uVar3 = CREATECOMPATIBLEBITMAP(0x1228,0x28,0x96); if (param_2 == 1) { local_32 = 0x129; } else if (param_2 == 2) { local_32 = 0x155; } else if (param_2 == 3) { local_32 = 0x181; } else if (param_2 == 4) { local_32 = 0x1ad; } else { local_32 = 0xfd; } if ((param_3 < 0) || ((((param_3 < 1 && (param_2 == 0)) || (0 < param_3)) || ((-1 < param_3 && (4 < param_2)))))) { local_1c = param_3; } else { local_1c = *(int *)(param_2 * 4 + 0x980); } uVar11 = uVar1; uVar4 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar10 = uVar2; uVar5 = SELECTOBJECT(0x1228,uVar3); uVar9 = uVar2; BITBLT(0x1228,0x20,0xcc,local_32 + -0x14,0x1de,uVar1,0x28,0x82,0,0); local_4 = 0; while( true ) { bVar7 = 10; FUN_1020_08e6(uVar9,uVar10,uVar11); uVar8 = 0x1020; iVar6 = FUN_1020_08e6(); if ((((bVar7 != 0) || (0 < local_1c)) || ((-1 < local_1c && (iVar6 != 0)))) || (local_4 == 0)) { SELECTOBJECT(0x1020,DAT_1028_0861); uVar8 = 0x1228; BITBLT(0x1228,0xc6,0x88,0,(uint)bVar7 << 4,uVar1,0x1c,0x10,0,(7 - (uint)local_4) * 0x10); } if (local_4 == 7) break; local_4 = local_4 + 1; } BITBLT(uVar8,0x20,0xcc,0,0,uVar2,0x28,0x82,local_32 + -0x14,0x1de); uVar10 = uVar1; SELECTOBJECT(0x1228,uVar4); uVar9 = uVar2; SELECTOBJECT(0x1228,uVar5); DELETEOBJECT(0x1228,uVar3,uVar9,uVar10,param_1); DELETEDC(0x1228,uVar1); DELETEDC(0x1228,uVar2); return; } /* ===== 1008:0b9e FUN_1008_0b9e ===== */ void __stdcall16far FUN_1008_0b9e(byte param_1,undefined2 param_2) { int iVar1; int local_6; int local_4; if ((((param_1 == DAT_1028_07d1) || (DAT_1028_086b == 99)) && (param_1 != 0)) && (param_1 < 5)) { iVar1 = *(int *)((uint)param_1 * 4 + 0x980); if ((iVar1 < 0x14) && ((iVar1 < 0x13 || (*(uint *)((uint)param_1 * 4 + 0x97e) < 0xd621)))) { iVar1 = *(int *)((uint)param_1 * 4 + 0x980); if ((iVar1 < 10) && ((iVar1 < 9 || (*(uint *)((uint)param_1 * 4 + 0x97e) < 0xeb11)))) { iVar1 = *(int *)((uint)param_1 * 4 + 0x980); if ((iVar1 < 3) && ((iVar1 < 2 || (*(uint *)((uint)param_1 * 4 + 0x97e) < 0x22e1)))) { iVar1 = *(int *)((uint)param_1 * 4 + 0x980); if ((iVar1 < 1) && ((iVar1 < 0 || (*(uint *)((uint)param_1 * 4 + 0x97e) < 0x7d1)))) { local_4 = 0; } else { local_4 = 1; } } else { local_4 = 2; } } else { local_4 = 3; } } else { local_4 = 4; } if (local_4 != DAT_1028_086b) { if (local_4 == 0) { FUN_1008_0837(0x8e,0x92,0x45,0x17c,param_2); } else { FUN_1008_07b6(*(undefined2 *)(local_4 * 2 + 0x4319),0x8e,0x92,0x45,0x17c,param_2); } FUN_1008_093f(0x8e,0x92,0x45,0x17c,param_2); local_6 = 0; while( true ) { if (local_6 == local_4) { FUN_1008_0837(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); FUN_1008_093f(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); } else { FUN_1008_08bb(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); FUN_1008_093f(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); } if (local_6 == 4) break; local_6 = local_6 + 1; } } DAT_1028_086b = local_4; } else if (param_1 == 0) { FUN_1008_08bb(0x8e,0x92,0x45,0x17c,param_2); FUN_1008_093f(0x8e,0x92,0x45,0x17c,param_2); local_6 = 0; while( true ) { FUN_1008_08bb(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); FUN_1008_093f(0xb,0xb,(4 - local_6) * 0x17 + 0x4d,0x220,param_2); if (local_6 == 4) break; local_6 = local_6 + 1; } DAT_1028_086b = 99; } return; } /* ===== 1008:0dbd FUN_1008_0dbd ===== */ void __stdcall16far FUN_1008_0dbd(int param_1,undefined2 param_2) { if (param_1 == 0) { FUN_1008_08bb(0x3d,0x44,300,0x7b,param_2); } else { FUN_1008_07b6(((undefined2 *)&DAT_1028_4321)[param_1],0x3d,0x44,300,0x7b,param_2); } FUN_1008_093f(0x3d,0x44,300,0x7b,param_2); return; } /* ===== 1008:0e08 FUN_1008_0e08 ===== */ void __stdcall16far FUN_1008_0e08(char param_1,uint param_2,undefined2 param_3) { int iVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 local_16; if (param_2 == 0) { FUN_1008_08bb(0x4a,100,0x2f,0xee,param_3); FUN_1008_093f(0x4a,100,0x2f,0xee,param_3); } else { uVar3 = param_3; uVar2 = CREATECOMPATIBLEDC(); uVar3 = CREATECOMPATIBLEDC(0x1228,param_3,uVar3); uVar4 = SELECTOBJECT(0x1228,DAT_1028_085b); uVar5 = SELECTOBJECT(0x1228,DAT_1028_0863); local_16 = 0; if (param_1 == '\0') { local_16 = 0x94; } if (9 < param_2) { local_16 = local_16 + 0x4a; param_2 = param_2 - 9; } iVar1 = (param_2 - 1) * 100; uVar7 = uVar2; BITBLT(0x1228,0x20,0xcc,local_16,iVar1,uVar3,0x4a,100,0x2f,0xee); BITBLT(0x1228,0x20,0xcc,local_16,iVar1,uVar3,0x4a,100,0x2f,0xee); uVar6 = uVar2; SELECTOBJECT(0x1228,uVar4); uVar4 = uVar3; SELECTOBJECT(0x1228,uVar5); DELETEDC(0x1228,uVar3,uVar4,uVar6,param_3,uVar7); DELETEDC(0x1228,uVar2); } return; } /* ===== 1008:0f27 FUN_1008_0f27 ===== */ void __cdecl16far FUN_1008_0f27(void) { return; } /* ===== 1008:0f2e FUN_1008_0f2e ===== */ void __cdecl16far FUN_1008_0f2e(void) { int iVar1; ushort arg1; uint uVar2; int unaff_BP; undefined2 unaff_SS; undefined4 uVar3; undefined1 *puVar4; word *pwVar5; char *arg3; undefined1 *puVar6; undefined1 *puVar7; undefined2 uVar8; undefined2 uVar9; undefined1 local_2de [512]; undefined1 local_de [102]; undefined1 local_78 [102]; ushort local_12; uint local_10; undefined2 uStack_e; int local_c; int local_a; undefined2 local_8; undefined2 local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; DAT_1028_43f2 = 0; DAT_1028_43f3 = 0; DAT_1028_43ee = 0; puVar7 = local_78; puVar6 = local_2de; uVar9 = unaff_SS; uVar8 = unaff_SS; FUN_1020_082e(); FUN_1008_2f2f(puVar6,uVar9,puVar7,uVar8); pwVar5 = code2_embedded_word_0f2c; puVar4 = (undefined1 *)CONCAT22(unaff_SS,local_2de); FUN_1020_082e(0); FUN_1020_0a7d(puVar4,pwVar5); FUN_1008_2f07(); FUN_1008_2f4d(0x442,0x1028,local_de,unaff_SS); uVar9 = 0x1028; local_c = GETPRIVATEPROFILEINT(0x1008,local_de,unaff_SS,1,0x44f,0x1028,0x446); if ((local_c != 0) && (DAT_1028_43ee = WAVEOUTGETNUMDEVS(0x1228,uVar9), DAT_1028_43ee != 0)) { iVar1 = WAVEOUTGETDEVCAPS(); if (iVar1 == 0) { if ((DAT_1028_43ea & 4) == 0) { DAT_1028_43f4 = -1; } else { local_8 = 0; local_6 = 0; WAVEOUTGETVOLUME(); DAT_1028_43f4 = (local_8._1_1_ / 10) * '\n'; } local_a = 1; while( true ) { if (*(int *)(local_a * 4 + 0x3e6) != 0 || *(int *)(local_a * 4 + 1000) != 0) { arg3 = (char *)CONCAT22(DAT_1028_06fe,DAT_1028_06fe); arg1 = FINDRESOURCE(0x455,(char *)(long)(local_a + 2000),arg3); local_12 = LOADRESOURCE(arg1,(ushort)((ulong)arg3 >> 0x10)); uVar3 = FUN_1008_15c7(); uVar9 = (undefined2)((ulong)uVar3 >> 0x10); *(int *)((undefined1 *)&DAT_1028_43f2 + local_a * 4) = (int)uVar3; *(undefined2 *)((undefined1 *)&DAT_1028_43f4 + local_a * 4) = uVar9; uVar2 = LOCKRESOURCE(local_12); _local_10 = CONCAT22(uVar9,uVar2); FUN_1020_16a5(*(undefined2 *)(local_a * 4 + 0x3e6), (int)*(undefined4 *)((undefined1 *)&DAT_1028_43f2 + local_a * 4), (int)((ulong)*(undefined4 *)((undefined1 *)&DAT_1028_43f2 + local_a * 4) >> 0x10),uVar2,uVar9); GLOBALUNLOCK(local_12); FREERESOURCE(local_12); } if (local_a == 0x16) break; local_a = local_a + 1; } DAT_1028_43f2 = 1; } else { DAT_1028_43ee = 0; } } return; } /* ===== 1008:10e3 FUN_1008_10e3 ===== */ void __cdecl16far FUN_1008_10e3(void) { undefined2 unaff_CS; int local_6; if (DAT_1028_43ee != 0) { if (DAT_1028_43f3 != '\0') { SNDPLAYSOUND(unaff_CS,0,0); } local_6 = 1; while( true ) { FUN_1008_15e7(*(undefined2 *)((undefined1 *)&DAT_1028_43f2 + local_6 * 4), *(undefined2 *)((undefined1 *)&DAT_1028_43f4 + local_6 * 4)); if (local_6 == 0x16) break; local_6 = local_6 + 1; } DAT_1028_43f3 = '\0'; } return; } /* ===== 1008:1131 FUN_1008_1131 ===== */ undefined2 __stdcall16far FUN_1008_1131(int param_1) { int iVar1; undefined2 unaff_CS; undefined2 uVar2; undefined2 local_6; if (((DAT_1028_43ee != 0) && (DAT_1028_43f2 != '\0')) && (*(int *)(param_1 * 4 + 0x3e6) != 0 || *(int *)(param_1 * 4 + 1000) != 0)) { uVar2 = unaff_CS; if (DAT_1028_43f3 != '\0') { uVar2 = 0x1228; SNDPLAYSOUND(unaff_CS,0,0); } iVar1 = SNDPLAYSOUND(uVar2,5,(int)*(undefined4 *)((undefined1 *)&DAT_1028_43f2 + param_1 * 4)); DAT_1028_43f3 = iVar1 != 0; } return local_6; } /* ===== 1008:118f FUN_1008_118f ===== */ undefined2 __cdecl16far FUN_1008_118f(void) { undefined2 unaff_CS; undefined2 local_6; if ((DAT_1028_43ee != 0) && (DAT_1028_43f3 != '\0')) { SNDPLAYSOUND(unaff_CS,0,0); } return local_6; } /* ===== 1008:11b8 FUN_1008_11b8 ===== */ void __cdecl16far FUN_1008_11b8(void) { return; } /* ===== 1008:11c5 FUN_1008_11c5 ===== */ /* WARNING: Removing unreachable block (ram,0x1008123e) */ /* WARNING: Removing unreachable block (ram,0x10081234) */ void __cdecl16far FUN_1008_11c5(void) { int iVar1; undefined2 *puVar2; undefined2 uVar3; bool bVar4; undefined2 *puVar5; uint local_10; int local_e; iVar1 = FUN_1020_08a9(); puVar5 = (undefined2 *)FUN_1020_012d(iVar1 + 8); uVar3 = (undefined2)((ulong)puVar5 >> 0x10); puVar2 = (undefined2 *)puVar5; puVar2[1] = 0x100; *puVar5 = 0x300; local_10 = 0; local_e = 0; while( true ) { iVar1 = FUN_1020_08a9(); *(undefined1 *)(puVar2 + local_10 * 2 + 2) = *(undefined1 *)(iVar1 + 0x4450); iVar1 = FUN_1020_08a9(); *(undefined1 *)((int)puVar2 + local_10 * 4 + 5) = *(undefined1 *)(iVar1 + 0x4451); iVar1 = FUN_1020_08a9(); *(undefined1 *)(puVar2 + local_10 * 2 + 3) = *(undefined1 *)(iVar1 + 0x4452); *(undefined1 *)((int)puVar2 + local_10 * 4 + 7) = 0; if ((local_e == 0) && (local_10 == 0xff)) break; bVar4 = 0xfffe < local_10; local_10 = local_10 + 1; local_e = local_e + (uint)bVar4; } DAT_1028_444e = CREATEPALETTE(0x1020,puVar2); uVar3 = FUN_1020_039d(puVar5,uVar3); FUN_1020_0147(uVar3,puVar5); return; } /* ===== 1008:1326 FUN_1008_1326 ===== */ void __stdcall16far FUN_1008_1326(undefined4 param_1,char *param_2,undefined2 param_3,char *param_4) { ushort uVar1; uint uVar2; int iVar3; undefined1 uVar4; undefined2 in_DX; undefined4 in_stack_0000fff0; int iVar5; uVar1 = FINDRESOURCE(0x45a,(char *)CONCAT22(param_3,param_2), (char *)CONCAT22((int)((ulong)in_stack_0000fff0 >> 0x10),param_4)); uVar1 = LOADRESOURCE(uVar1,(ushort)param_4); uVar2 = LOCKRESOURCE(uVar1); iVar5 = 0; while( true ) { iVar3 = FUN_1020_039d(); uVar4 = *(undefined1 *)(uVar2 + iVar3); iVar3 = FUN_1020_039d(); *(undefined1 *)((int)param_1 + iVar3) = uVar4; if (iVar5 == 0x2ff) break; iVar5 = iVar5 + 1; } GLOBALUNLOCK(uVar1); return; } /* ===== 1008:13a8 FUN_1008_13a8 ===== */ void __stdcall16far FUN_1008_13a8(undefined4 param_1) { uint uVar1; int iVar2; int iVar3; int iVar4; int iVar5; undefined2 uVar6; bool bVar7; uint local_10; int local_e; uVar6 = (undefined2)((ulong)param_1 >> 0x10); iVar5 = (int)param_1; iVar4 = -(uint)(1 << ((byte)*(undefined2 *)(iVar5 + 0xe) & 0x1f) == 0); uVar1 = FUN_1020_08a9(); iVar2 = uVar1 + 8; iVar4 = iVar4 + (uint)(0xfff7 < uVar1); local_10 = 0; local_e = 0; while( true ) { iVar3 = FUN_1020_08a9(iVar2,iVar4); *(undefined1 *)(iVar5 + local_10 * 4 + 0x2a) = *(undefined1 *)(iVar3 + 0x4450); iVar3 = FUN_1020_08a9(); *(undefined1 *)(iVar5 + local_10 * 4 + 0x29) = *(undefined1 *)(iVar3 + 0x4451); iVar3 = FUN_1020_08a9(); *(undefined1 *)(iVar5 + local_10 * 4 + 0x28) = *(undefined1 *)(iVar3 + 0x4452); *(undefined1 *)(iVar5 + local_10 * 4 + 0x2b) = 0; if ((local_e == 0) && (local_10 == 0xff)) break; bVar7 = 0xfffe < local_10; local_10 = local_10 + 1; local_e = local_e + (uint)bVar7; } return; } /* ===== 1008:149d FUN_1008_149d ===== */ undefined2 __stdcall16far FUN_1008_149d(char *param_1,undefined2 param_2,char *param_3) { uint uVar1; undefined2 uVar2; undefined2 uVar3; undefined2 in_DX; int unaff_BP; undefined2 unaff_SS; undefined4 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 in_stack_0000ff90; undefined1 local_32 [14]; byte local_24; ushort local_a; ushort local_8; undefined2 local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; local_a = FINDRESOURCE(0x45e,(char *)CONCAT22(param_2,param_1), (char *)CONCAT22(in_stack_0000ff90,param_3)); local_8 = LOADRESOURCE(local_a,(ushort)param_3); uVar1 = LOCKRESOURCE(local_8); FUN_1020_0891(0x28,local_32,unaff_SS,uVar1,in_DX); uVar4 = FUN_1020_012d((1 << (local_24 & 0x1f)) * 4 + 0x28); FUN_1020_0891(0x28,uVar4,local_32,unaff_SS); FUN_1008_13a8(); uVar6 = 0x1028; uVar2 = CREATEDC(0x1008,0,0,0,0,0,0,0x462); uVar5 = uVar2; uVar3 = SELECTPALETTE(0x1228,0,DAT_1028_444e); UNREALIZEOBJECT(0x1228,DAT_1028_444e,uVar5,uVar6); REALIZEPALETTE(0x1228,uVar2); uVar6 = uVar2; local_6 = CREATEDIBITMAP(0x1228,0,uVar4,uVar1 + 0x28,in_DX,4,0,local_32,unaff_SS); uVar5 = uVar2; SELECTPALETTE(0x1228,0,uVar3); DELETEDC(0x1228,uVar2,uVar5,uVar6); GLOBALUNLOCK(local_8); FREERESOURCE(local_8); return local_6; } /* ===== 1008:15c2 FUN_1008_15c2 ===== */ void __cdecl16far FUN_1008_15c2(void) { return; } /* ===== 1008:15c7 FUN_1008_15c7 ===== */ void __stdcall16far FUN_1008_15c7(ushort param_1,uint param_2) { ushort arg1; arg1 = GLOBALALLOC(param_1,param_2); GLOBALLOCK(arg1); return; } /* ===== 1008:15e7 FUN_1008_15e7 ===== */ void __stdcall16far FUN_1008_15e7(undefined2 param_1,ushort param_2) { uint arg1; arg1 = GLOBALHANDLE(param_2); GLOBALUNLOCK(arg1); GLOBALFREE(arg1); return; } /* ===== 1008:1607 FUN_1008_1607 ===== */ undefined4 __stdcall16far FUN_1008_1607(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6,undefined2 param_7,undefined2 param_8, undefined2 param_9,undefined2 param_10,undefined2 param_11) { int iVar1; undefined2 uVar2; bool bVar3; undefined2 local_8; bVar3 = true; FUN_1020_03ef(); if (!bVar3) { if (DAT_1028_066a == '\0') { local_8 = 0x7f02; } else { local_8 = 0x7f05; } uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; FUN_1008_2996(iVar1,uVar2,0,local_8,0,param_10,param_11); *(undefined2 *)(iVar1 + 0x26) = param_8; *(undefined2 *)(iVar1 + 0x28) = param_9; *(undefined2 *)(iVar1 + 0x2a) = param_6; *(undefined2 *)(iVar1 + 0x2c) = param_7; *(undefined2 *)(iVar1 + 0x2e) = param_4; *(undefined2 *)(iVar1 + 0x30) = param_5; *(undefined2 *)(iVar1 + 0x32) = param_3; } return param_1; } /* ===== 1008:168e FUN_1008_168e ===== */ undefined1 __stdcall16far FUN_1008_168e(undefined4 param_1) { int iVar1; undefined2 uVar2; undefined2 unaff_CS; uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; GETDLGITEMTEXT(unaff_CS,*(undefined2 *)(iVar1 + 0x32),*(undefined2 *)(iVar1 + 0x2e), *(undefined2 *)(iVar1 + 0x30),0x65); return 1; } /* ===== 1008:16be FUN_1008_16be ===== */ void __stdcall16far FUN_1008_16be(undefined4 param_1) { int unaff_BP; int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; iVar1 = unaff_BP + 1; uVar4 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; FUN_1018_0d9b(iVar2,uVar3); SETWINDOWTEXT(0x1018,*(undefined2 *)(iVar2 + 0x26),*(undefined2 *)(iVar2 + 0x28), *(undefined2 *)(iVar2 + 4),uVar4,iVar1); SETDLGITEMTEXT(0x1228,*(undefined2 *)(iVar2 + 0x2a),*(undefined2 *)(iVar2 + 0x2c),100); SETDLGITEMTEXT(0x1228,*(undefined2 *)(iVar2 + 0x2e),*(undefined2 *)(iVar2 + 0x30),0x65); SENDDLGITEMMESSAGE(0x1228,0,0,*(int *)(iVar2 + 0x32) + -1,0x415,0x65); return; } /* ===== 1008:172f FUN_1008_172f ===== */ int FUN_1008_172f(int param_1,int param_2) { undefined2 local_4; if (param_2 < param_1) { local_4 = param_2; } else { local_4 = param_1; } return local_4; } /* ===== 1008:1754 FUN_1008_1754 ===== */ int FUN_1008_1754(int param_1,int param_2) { undefined2 local_4; if (param_1 < param_2) { local_4 = param_2; } else { local_4 = param_1; } return local_4; } /* ===== 1008:1779 FUN_1008_1779 ===== */ void __cdecl16near FUN_1008_1779(void) { undefined2 uVar1; undefined2 unaff_CS; undefined4 uVar2; uVar1 = DAT_1028_0586; if (DAT_1028_058f == '\0') { DAT_1028_4ad4 = GETDC(); } else { DAT_1028_4ad4 = BEGINPAINT(unaff_CS,0x4ad6,0x1028,DAT_1028_0586); } uVar1 = GETSTOCKOBJECT(0x1228,0x10,DAT_1028_4ad4,uVar1); DAT_1028_4af6 = SELECTOBJECT(0x1228,uVar1); uVar2 = GETSYSCOLOR(0x1228,8,DAT_1028_4ad4); SETTEXTCOLOR(0x1228,uVar2); uVar2 = GETSYSCOLOR(0x1228,5,DAT_1028_4ad4); SETBKCOLOR(0x1228,uVar2); return; } /* ===== 1008:17e2 FUN_1008_17e2 ===== */ void __cdecl16near FUN_1008_17e2(void) { undefined2 unaff_CS; SELECTOBJECT(unaff_CS,DAT_1028_4af6); if (DAT_1028_058f == '\0') { RELEASEDC(0x1228,DAT_1028_4ad4); } else { ENDPAINT(0x1228,0x4ad6,0x1028); } return; } /* ===== 1008:1818 FUN_1008_1818 ===== */ void __cdecl16near FUN_1008_1818(void) { undefined2 unaff_CS; int iVar1; undefined2 uVar2; uVar2 = DAT_1028_0586; CREATECARET(unaff_CS,2,DAT_1028_4ace,0); iVar1 = (DAT_1028_0544 - DAT_1028_0548) * DAT_1028_4ace; SETCARETPOS(0x1228,(DAT_1028_0546 - DAT_1028_054a) * DAT_1028_4ad0 + DAT_1028_4ad2); SHOWCARET(0x1228,DAT_1028_0586,iVar1,uVar2); return; } /* ===== 1008:185b FUN_1008_185b ===== */ void __cdecl16near FUN_1008_185b(void) { DESTROYCARET(); return; } /* ===== 1008:1865 FUN_1008_1865 ===== */ void __cdecl16near FUN_1008_1865(void) { undefined2 uVar1; undefined2 unaff_CS; undefined2 uVar2; undefined2 uVar3; uVar3 = 0; uVar2 = 0; uVar1 = FUN_1008_1754(DAT_1028_4aca,1); SETSCROLLRANGE(unaff_CS,0,uVar1,uVar2,uVar3); SETSCROLLPOS(0x1228,1,DAT_1028_0548,0); uVar3 = 1; uVar2 = 0; uVar1 = FUN_1008_1754(DAT_1028_4acc,1); SETSCROLLRANGE(0x1228,0,uVar1,uVar2,uVar3); SETSCROLLPOS(0x1228,1,DAT_1028_054a,1); return; } /* ===== 1008:18d0 FUN_1008_18d0 ===== */ void __cdecl16near FUN_1008_18d0(void) { if ((DAT_1028_058d != '\0') && (DAT_1028_058e != '\0')) { FUN_1008_185b(); } FUN_1020_0061(); return; } /* ===== 1008:18ee FUN_1008_18ee ===== */ void __stdcall16far FUN_1008_18ee(undefined2 param_1,undefined2 param_2) { undefined2 uVar1; int iVar2; int iVar3; undefined2 unaff_CS; undefined2 uVar4; undefined2 uVar5; if (DAT_1028_058c != '\0') { uVar5 = 0; uVar1 = FUN_1008_172f(DAT_1028_4aca,param_2); iVar2 = FUN_1008_1754(uVar1,uVar5); uVar1 = 0; uVar5 = FUN_1008_172f(DAT_1028_4acc,param_1); iVar3 = FUN_1008_1754(uVar5,uVar1); if ((iVar2 != DAT_1028_0548) || (iVar3 != DAT_1028_054a)) { uVar5 = unaff_CS; if (iVar2 != DAT_1028_0548) { uVar5 = 0x1228; uVar1 = DAT_1028_0586; SETSCROLLPOS(unaff_CS,1,iVar2,0); } uVar4 = uVar5; if (iVar3 != DAT_1028_054a) { uVar4 = 0x1228; SETSCROLLPOS(uVar5,1,iVar3,1); } uVar5 = DAT_1028_0586; SCROLLWINDOW(uVar4,0,0,0,0,(DAT_1028_054a - iVar3) * DAT_1028_4ad0, (DAT_1028_0548 - iVar2) * DAT_1028_4ace); DAT_1028_0548 = iVar2; DAT_1028_054a = iVar3; UPDATEWINDOW(0x1228,DAT_1028_0586,uVar5,uVar1); } } return; } /* ===== 1008:19b7 FUN_1008_19b7 ===== */ void __cdecl16far FUN_1008_19b7(void) { int iVar1; undefined2 uVar2; undefined2 uVar3; iVar1 = (DAT_1028_0544 - DAT_1028_4ac6) + 1; uVar2 = FUN_1008_172f(DAT_1028_0544,DAT_1028_0548); uVar2 = FUN_1008_1754(uVar2,iVar1); iVar1 = (DAT_1028_0546 - DAT_1028_4ac8) + 1; uVar3 = FUN_1008_172f(DAT_1028_0546,DAT_1028_054a); uVar3 = FUN_1008_1754(uVar3,iVar1); FUN_1008_18ee(uVar3,uVar2); return; } /* ===== 1008:19f8 FUN_1008_19f8 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ undefined4 FUN_1008_19f8(int param_1,int param_2) { param_1 = param_1 + DAT_1028_0588; if (DAT_1028_0542 <= param_1) { param_1 = param_1 - DAT_1028_0542; } return CONCAT22((int)((ulong)_DAT_1028_4ac2 >> 0x10), (int)_DAT_1028_4ac2 + param_1 * DAT_1028_0540 + param_2); } /* ===== 1008:1a39 FUN_1008_1a39 ===== */ void FUN_1008_1a39(int param_1,int param_2) { undefined2 unaff_CS; undefined4 uVar1; int iVar2; int iVar3; undefined2 uVar4; if (param_2 < param_1) { FUN_1008_1779(); iVar3 = (param_2 - DAT_1028_0548) * DAT_1028_4ace; iVar2 = (DAT_1028_0546 - DAT_1028_054a) * DAT_1028_4ad0; uVar4 = DAT_1028_4ad4; uVar1 = FUN_1008_19f8(DAT_1028_0546,param_2); TEXTOUT(unaff_CS,param_1 - param_2,uVar1,iVar2,iVar3); FUN_1008_17e2(uVar4); } return; } /* ===== 1008:1a82 FUN_1008_1a82 ===== */ void FUN_1008_1a82(int param_1) { int iVar1; undefined2 unaff_SS; undefined4 uVar2; undefined2 uVar3; FUN_1008_1a39(*(undefined2 *)(param_1 + -6),*(undefined2 *)(param_1 + -4)); *(undefined2 *)(param_1 + -4) = 0; *(undefined2 *)(param_1 + -6) = 0; DAT_1028_0544 = 0; iVar1 = DAT_1028_0546 + 1; if (DAT_1028_0546 + 1 == DAT_1028_0542) { DAT_1028_0588 = DAT_1028_0588 + 1; if (DAT_1028_0588 == DAT_1028_0542) { DAT_1028_0588 = 0; } uVar2 = FUN_1008_19f8(DAT_1028_0546,0); FUN_1020_16c9(0x20,DAT_1028_0540,uVar2); uVar3 = DAT_1028_0586; SCROLLWINDOW(0x1020,0,0,0,0,-DAT_1028_4ad0,0); UPDATEWINDOW(0x1228,DAT_1028_0586,uVar3); iVar1 = DAT_1028_0546; } DAT_1028_0546 = iVar1; return; } /* ===== 1008:1b11 FUN_1008_1b11 ===== */ void __stdcall16far FUN_1008_1b11(int param_1,byte *param_2) { int unaff_BP; undefined2 uVar1; byte *pbVar2; undefined1 *puVar3; byte bVar4; int iVar5; int iVar6; undefined2 uVar7; int iStack_2; iStack_2 = unaff_BP + 1; uVar7 = 0x1028; uVar1 = 0x1008; FUN_1008_2442(); iVar5 = DAT_1028_0544; iVar6 = DAT_1028_0544; for (; param_1 != 0; param_1 = param_1 + -1) { bVar4 = *param_2; if (bVar4 < 0x20) { if (bVar4 == 0xd) { FUN_1008_1a82(&iStack_2); } else if (bVar4 == 8) { if (0 < DAT_1028_0544) { DAT_1028_0544 = DAT_1028_0544 + -1; puVar3 = (undefined1 *)FUN_1008_19f8(DAT_1028_0546,DAT_1028_0544); *puVar3 = 0x20; if (DAT_1028_0544 < iVar6) { iVar6 = DAT_1028_0544; } } } else if (bVar4 == 7) { MESSAGEBEEP(uVar1,0,iVar5,iVar6,uVar7); uVar1 = 0x1228; } } else { bVar4 = *param_2; pbVar2 = (byte *)FUN_1008_19f8(DAT_1028_0546,DAT_1028_0544); *pbVar2 = bVar4; DAT_1028_0544 = DAT_1028_0544 + 1; if (iVar5 < DAT_1028_0544) { iVar5 = DAT_1028_0544; } if (DAT_1028_0544 == DAT_1028_0540) { FUN_1008_1a82(&iStack_2); } } param_2 = (byte *)CONCAT22(param_2._2_2_,(byte *)param_2 + 1); } FUN_1008_1a39(iVar5,iVar6); if (DAT_1028_055e != '\0') { FUN_1008_19b7(); } return; } /* ===== 1008:1be9 FUN_1008_1be9 ===== */ void __stdcall16far FUN_1008_1be9(void) { undefined2 unaff_SS; FUN_1008_1b11(1,&stack0x0004,unaff_SS); return; } /* ===== 1008:1c03 FUN_1008_1c03 ===== */ bool __cdecl16far FUN_1008_1c03(void) { int iVar1; int unaff_BP; undefined2 uVar2; undefined2 unaff_SS; undefined1 local_18 [2]; int local_16; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar2 = 0x1008; FUN_1008_2442(); while (iVar1 = PEEKMESSAGE(uVar2,1,0,0,0,local_18,unaff_SS), iVar1 != 0) { if (local_16 == 0x12) { FUN_1008_18d0(); } TRANSLATEMESSAGE(0x1228,local_18); uVar2 = 0x1228; DISPATCHMESSAGE(0x1228,local_18); } return 0 < DAT_1028_058a; } /* ===== 1008:1c5f FUN_1008_1c5f ===== */ undefined1 __cdecl16far FUN_1008_1c5f(void) { char cVar1; int unaff_BP; int iVar2; undefined2 uVar3; undefined1 uVar4; undefined2 uVar5; iVar2 = unaff_BP + 1; uVar5 = 0x1028; FUN_1008_19b7(); uVar3 = 0x1008; cVar1 = FUN_1008_1c03(); if (cVar1 == '\0') { DAT_1028_058e = 1; if (DAT_1028_058d != '\0') { uVar3 = 0x1c84; FUN_1008_1818(); } do { WAITMESSAGE(uVar3,0x1008,uVar5,iVar2); cVar1 = FUN_1008_1c03(); } while (cVar1 == '\0'); if (DAT_1028_058d != '\0') { FUN_1008_185b(); } DAT_1028_058e = 0; } DAT_1028_058a = DAT_1028_058a + -1; uVar4 = DAT_1028_4af8; FUN_1020_16a5(DAT_1028_058a,(undefined1 *)&DAT_1028_4af8,0x1028,0x4af9,0x1028); return uVar4; } /* ===== 1008:1cc6 FUN_1008_1cc6 ===== */ int __stdcall16far FUN_1008_1cc6(int param_1,undefined4 param_2) { uint uVar1; byte bVar2; int iVar3; undefined2 uVar4; uint local_a; local_a = 0; do { bVar2 = FUN_1008_1c5f(); iVar3 = (int)param_2; uVar4 = (undefined2)((ulong)param_2 >> 0x10); if (bVar2 == 8) { if (local_a != 0) { local_a = local_a - 1; FUN_1008_1be9(8); } } else if ((0x1f < bVar2) && (local_a < param_1 - 2U)) { *(byte *)(iVar3 + local_a) = bVar2; FUN_1008_1be9(CONCAT11((char)(local_a >> 8),bVar2)); local_a = local_a + 1; } } while ((bVar2 != 0xd) && ((DAT_1028_055f == '\0' || (bVar2 != 0x1a)))); *(byte *)(iVar3 + local_a) = bVar2; uVar1 = local_a + 1; if (bVar2 == 0xd) { *(undefined1 *)(iVar3 + uVar1) = 10; FUN_1008_1be9(CONCAT11((char)(uVar1 >> 8),0xd)); uVar1 = local_a + 2; } local_a = uVar1; FUN_1008_19b7(); return local_a; } /* ===== 1008:1d77 FUN_1008_1d77 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16near FUN_1008_1d77(void) { DAT_1028_058c = 1; _DAT_1028_4ac2 = FUN_1020_012d(DAT_1028_0540 * DAT_1028_0542); FUN_1020_16c9(CONCAT11((char)((uint)(DAT_1028_0540 * DAT_1028_0542) >> 8),0x20), DAT_1028_0540 * DAT_1028_0542,_DAT_1028_4ac2); if (DAT_1028_0560 == '\0') { GETSYSTEMMENU(0x1020,0); ENABLEMENUITEM(0x1228,3,0xf060); } return; } /* ===== 1008:1dcc FUN_1008_1dcc ===== */ void __cdecl16near FUN_1008_1dcc(void) { int iVar1; int iVar2; int iVar3; undefined2 unaff_CS; undefined4 uVar4; int iVar5; int iVar6; int local_8; DAT_1028_058f = 1; FUN_1008_1779(); iVar1 = FUN_1008_1754(DAT_1028_4ada / DAT_1028_4ace + DAT_1028_0548,0); iVar2 = FUN_1008_172f((DAT_1028_4ade + DAT_1028_4ace + -1) / DAT_1028_4ace + DAT_1028_0548, DAT_1028_0540); local_8 = FUN_1008_1754(DAT_1028_4adc / DAT_1028_4ad0 + DAT_1028_054a,0); iVar3 = FUN_1008_172f((DAT_1028_4ae0 + DAT_1028_4ad0 + -1) / DAT_1028_4ad0 + DAT_1028_054a, DAT_1028_0542); for (; local_8 < iVar3; local_8 = local_8 + 1) { iVar6 = (iVar1 - DAT_1028_0548) * DAT_1028_4ace; iVar5 = (local_8 - DAT_1028_054a) * DAT_1028_4ad0; uVar4 = FUN_1008_19f8(local_8,iVar1); TEXTOUT(unaff_CS,iVar2 - iVar1,uVar4,iVar5,iVar6); unaff_CS = 0x1228; } FUN_1008_17e2(); DAT_1028_058f = 0; return; } /* ===== 1008:1e8a FUN_1008_1e8a ===== */ int FUN_1008_1e8a(int param_1,int param_2,int param_3,int param_4) { int iVar1; undefined2 unaff_SS; undefined2 local_4; iVar1 = *(int *)(param_1 + 6); if (iVar1 == 0) { local_4 = param_4 + -1; } else if (iVar1 == 1) { local_4 = param_4 + 1; } else if (iVar1 == 2) { local_4 = param_4 - param_3; } else if (iVar1 == 3) { local_4 = param_4 + param_3; } else if (iVar1 == 6) { local_4 = 0; } else if (iVar1 == 7) { local_4 = param_2; } else if (iVar1 == 4) { local_4 = *(int *)(param_1 + 4); } else { local_4 = param_4; } return local_4; } /* ===== 1008:1f0c FUN_1008_1f0c ===== */ void FUN_1008_1f0c(undefined2 param_1,undefined2 param_2,int param_3) { undefined2 local_6; undefined2 local_4; local_4 = DAT_1028_0548; local_6 = DAT_1028_054a; if (param_3 == 0) { local_4 = FUN_1008_1e8a(&stack0xfffe,DAT_1028_4aca,DAT_1028_4ac6 / 2,DAT_1028_0548); } else if (param_3 == 1) { local_6 = FUN_1008_1e8a(&stack0xfffe,DAT_1028_4acc,DAT_1028_4ac8,DAT_1028_054a); } FUN_1008_18ee(local_6,local_4); return; } /* ===== 1008:1f68 FUN_1008_1f68 ===== */ void FUN_1008_1f68(int param_1,int param_2) { if ((DAT_1028_058d != '\0') && (DAT_1028_058e != '\0')) { FUN_1008_185b(); } DAT_1028_4ac6 = param_2 / DAT_1028_4ace; DAT_1028_4ac8 = param_1 / DAT_1028_4ad0; DAT_1028_4aca = FUN_1008_1754(DAT_1028_0540 - DAT_1028_4ac6,0); DAT_1028_4acc = FUN_1008_1754(DAT_1028_0542 - DAT_1028_4ac8,0); DAT_1028_0548 = FUN_1008_172f(DAT_1028_4aca,DAT_1028_0548); DAT_1028_054a = FUN_1008_172f(DAT_1028_4acc,DAT_1028_054a); FUN_1008_1865(); if ((DAT_1028_058d != '\0') && (DAT_1028_058e != '\0')) { FUN_1008_1818(); } return; } /* ===== 1008:1fe8 FUN_1008_1fe8 ===== */ void FUN_1008_1fe8(undefined4 param_1) { int iVar1; undefined2 uVar2; undefined2 unaff_CS; undefined2 unaff_SS; int iVar3; int iVar4; undefined2 uVar5; int iVar6; int local_26; undefined2 local_24; int local_1e; int local_1a; int local_6; int local_4; FUN_1008_1779(); uVar2 = DAT_1028_4ad4; GETTEXTMETRICS(unaff_CS,&local_26,unaff_SS); DAT_1028_4ace = local_1a; DAT_1028_4ad0 = local_26 + local_1e; DAT_1028_4ad2 = local_24; iVar1 = GETSYSTEMMETRICS(0x1228,0x20,uVar2); iVar1 = GETSYSTEMMETRICS(0x1228,2,iVar1 << 1); iVar6 = 0; uVar5 = 0x1228; uVar2 = GETSYSTEMMETRICS(0x1228,0,DAT_1028_0540 * DAT_1028_4ace + iVar1); local_4 = FUN_1008_172f(uVar2,uVar5); local_4 = local_4 + iVar6; iVar1 = GETSYSTEMMETRICS(0x1228,0x21); uVar2 = GETSYSTEMMETRICS(0x1228,4,iVar1 << 1); iVar4 = 0x1228; iVar1 = GETSYSTEMMETRICS(0x1228,3,uVar2); iVar6 = 1; uVar5 = 0x1228; uVar2 = GETSYSTEMMETRICS(0x1228,1,DAT_1028_0542 * DAT_1028_4ad0 + iVar1 + iVar4); local_6 = FUN_1008_172f(uVar2,uVar5); local_6 = local_6 + iVar6; uVar5 = (undefined2)((ulong)param_1 >> 0x10); iVar6 = (int)param_1; *(int *)(iVar6 + 4) = local_4; *(int *)(iVar6 + 6) = local_6; iVar1 = GETSYSTEMMETRICS(0x1228,0x20); iVar4 = 0x1228; iVar1 = GETSYSTEMMETRICS(0x1228,2,iVar1 << 1); *(int *)(iVar6 + 0xc) = DAT_1028_4ace * 0x10 + iVar1 + iVar4; uVar2 = GETSYSTEMMETRICS(0x1228,4); iVar1 = GETSYSTEMMETRICS(0x1228,0x21,uVar2); iVar3 = 3; iVar4 = 0x1228; iVar1 = GETSYSTEMMETRICS(0x1228,3,iVar1 << 1); *(int *)(iVar6 + 0xe) = DAT_1028_4ad0 * 4 + iVar1 + iVar4 + iVar3; *(int *)(iVar6 + 0x10) = local_4; *(int *)(iVar6 + 0x12) = local_6; FUN_1008_17e2(); return; } /* ===== 1008:211a FUN_1008_211a ===== */ void FUN_1008_211a(char param_1) { if ((DAT_1028_0560 != '\0') && (param_1 == '\x03')) { FUN_1008_18d0(); } if (DAT_1028_058a < 0x40) { ((undefined1 *)&DAT_1028_4af8)[DAT_1028_058a] = param_1; DAT_1028_058a = DAT_1028_058a + 1; } return; } /* ===== 1008:2147 FUN_1008_2147 ===== */ void FUN_1008_2147(char param_1) { int iVar1; int iVar2; int local_6; if ((DAT_1028_0560 != '\0') && (param_1 == '\x03')) { FUN_1008_18d0(); } iVar1 = GETKEYSTATE(); local_6 = 1; while ((iVar2 = local_6 * 4, *(char *)(iVar2 + 0x58c) != param_1 || ((bool)*(char *)(iVar2 + 0x58d) != iVar1 < 0))) { if (local_6 == 0xc) { return; } local_6 = local_6 + 1; } FUN_1008_1f0c(0,*(undefined1 *)(iVar2 + 0x58f),*(undefined1 *)(iVar2 + 0x58e)); return; } /* ===== 1008:21ba FUN_1008_21ba ===== */ void __cdecl16near FUN_1008_21ba(void) { DAT_1028_058d = 1; if (DAT_1028_058e != '\0') { FUN_1008_1818(); } return; } /* ===== 1008:21ce FUN_1008_21ce ===== */ void __cdecl16near FUN_1008_21ce(void) { if (DAT_1028_058e != '\0') { FUN_1008_185b(); } DAT_1028_058d = 0; return; } /* ===== 1008:21e2 FUN_1008_21e2 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16near FUN_1008_21e2(void) { FUN_1020_0147(DAT_1028_0540 * DAT_1028_0542,DAT_1028_4ac2,_DAT_1028_4ac4); DAT_1028_0544 = 0; DAT_1028_0546 = 0; DAT_1028_0548 = 0; DAT_1028_054a = 0; POSTQUITMESSAGE(0x1020,0); DAT_1028_058c = 0; return; } /* ===== 1008:2219 FUN_1008_2219 ===== */ undefined4 __stdcall16far FUN_1008_2219(undefined2 param_1,undefined2 param_2,undefined2 param_3,int param_4, undefined2 param_5) { undefined2 unaff_CS; undefined2 unaff_SS; undefined4 uVar1; uVar1 = 0; *(undefined2 *)&DAT_1028_0586 = param_5; if (param_4 == 1) { FUN_1008_1d77(); uVar1 = 0; } else if (param_4 == 0xf) { FUN_1008_1dcc(); uVar1 = 0; } else if (param_4 == 0x115) { FUN_1008_1f0c(param_1,param_3,1); uVar1 = 0; } else if (param_4 == 0x114) { FUN_1008_1f0c(param_1,param_3,0); uVar1 = 0; } else if (param_4 == 5) { FUN_1008_1f68(param_2,param_1); uVar1 = 0; } else if (param_4 == 0x24) { FUN_1008_1fe8(param_1,param_2); uVar1 = 0; } else if (param_4 == 0x102) { FUN_1008_211a(CONCAT11(1,(undefined1)param_3)); uVar1 = 0; } else if (param_4 == 0x100) { FUN_1008_2147(CONCAT11(1,(undefined1)param_3)); uVar1 = 0; } else if (param_4 == 7) { FUN_1008_21ba(); uVar1 = 0; } else if (param_4 == 8) { FUN_1008_21ce(); uVar1 = 0; } else if (param_4 == 2) { FUN_1008_21e2(); } else { uVar1 = DEFWINDOWPROC(unaff_CS,param_1,param_2,param_3,param_4); } return uVar1; } /* ===== 1008:22fc FUN_1008_22fc ===== */ undefined2 __stdcall16far FUN_1008_22fc(undefined4 param_1) { int iVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 8) != 0) { FUN_1008_1b11(*(undefined2 *)(iVar1 + 8),*(undefined2 *)(iVar1 + 0xc), *(undefined2 *)(iVar1 + 0xe)); *(undefined2 *)(iVar1 + 8) = 0; FUN_1008_1c03(); } return 0; } /* ===== 1008:233c FUN_1008_233c ===== */ undefined2 __stdcall16far FUN_1008_233c(undefined4 param_1) { undefined2 uVar1; int iVar2; undefined2 uVar3; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; uVar1 = FUN_1008_1cc6(*(undefined2 *)(iVar2 + 4),*(undefined2 *)(iVar2 + 0xc), *(undefined2 *)(iVar2 + 0xe)); *(undefined2 *)(iVar2 + 10) = uVar1; *(undefined2 *)(iVar2 + 8) = 0; return 0; } /* ===== 1008:2374 FUN_1008_2374 ===== */ undefined2 __stdcall16far FUN_1008_2374(void) { return 0; } /* ===== 1008:238b FUN_1008_238b ===== */ undefined2 __stdcall16far FUN_1008_238b(undefined4 param_1) { int iVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 2) == -0x284f) { *(undefined2 *)(iVar1 + 0x14) = 0x233c; *(undefined2 *)(iVar1 + 0x16) = 0x1008; *(undefined2 *)(iVar1 + 0x18) = 0; *(undefined2 *)(iVar1 + 0x1a) = 0; } else { *(undefined2 *)(iVar1 + 2) = 0xd7b2; *(undefined2 *)(iVar1 + 0x14) = 0x22fc; *(undefined2 *)(iVar1 + 0x16) = 0x1008; *(undefined2 *)(iVar1 + 0x18) = 0x22fc; *(undefined2 *)(iVar1 + 0x1a) = 0x1008; } *(undefined2 *)(iVar1 + 0x1c) = 0x2374; *(undefined2 *)(iVar1 + 0x1e) = 0x1008; return 0; } /* ===== 1008:23fd FUN_1008_23fd ===== */ void __stdcall16far FUN_1008_23fd(undefined2 *param_1) { undefined2 *puVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); puVar1 = (undefined2 *)param_1; *param_1 = 0xffff; puVar1[1] = 0xd7b0; puVar1[2] = 0x80; puVar1[6] = puVar1 + 0x40; puVar1[7] = uVar2; puVar1[8] = 0x238b; puVar1[9] = 0x1008; *(undefined1 *)(puVar1 + 0x18) = 0; return; } /* ===== 1008:2442 FUN_1008_2442 ===== */ void __cdecl16far FUN_1008_2442(void) { int unaff_BP; int iVar1; undefined2 unaff_CS; undefined2 uVar2; iVar1 = unaff_BP + 1; if (DAT_1028_058c == '\0') { DAT_1028_0586 = CREATEWINDOW(unaff_CS,0,0,DAT_1028_06fe,0,0,DAT_1028_053e,DAT_1028_053c,DAT_1028_053a, DAT_1028_0538,0,0xff,0x4a6e,0x1028,DAT_1028_0578,DAT_1028_057a,0x1028); uVar2 = DAT_1028_0586; SHOWWINDOW(0x1228,DAT_1028_0700); UPDATEWINDOW(0x1228,DAT_1028_0586,uVar2,iVar1); } return; } /* ===== 1008:24a5 FUN_1008_24a5 ===== */ void __cdecl16far FUN_1008_24a5(void) { undefined2 uVar1; int iVar2; int unaff_BP; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 local_9a [128]; undefined1 local_1a [18]; undefined2 local_8; undefined2 local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; DAT_1028_0712 = DAT_1028_4abe; DAT_1028_0714 = DAT_1028_4ac0; if ((DAT_1028_058c != '\0') && (DAT_1028_0718 == 0 && DAT_1028_071a == 0)) { local_8 = 0x4a6e; local_6 = 0x1028; WVSPRINTF(unaff_CS,&local_8,unaff_SS,DAT_1028_054c,DAT_1028_054e,local_9a); SETWINDOWTEXT(0x1228,local_9a); uVar1 = GETSYSTEMMENU(0x1228,0); ENABLEMENUITEM(0x1228,0,0xf060); DAT_1028_0560 = 0; while (iVar2 = GETMESSAGE(0x1228,0,0,0,local_1a,unaff_SS,uVar1), iVar2 != 0) { uVar1 = unaff_SS; TRANSLATEMESSAGE(0x1228,local_1a); DISPATCHMESSAGE(0x1228,local_1a); } } return; } /* ===== 1008:2554 FUN_1008_2554 ===== */ void __cdecl16far FUN_1008_2554(void) { undefined2 unaff_CS; short arg3; undefined2 uVar1; if (DAT_1028_06fc == 0) { DAT_1028_056c = DAT_1028_06fe; DAT_1028_056e = LOADICON(unaff_CS,0x7f00,0); DAT_1028_0570 = LOADCURSOR(0x1228,0x7f00,0); DAT_1028_0572 = 6; REGISTERCLASS(0x1228,0x562); } FUN_1008_23fd(0x4b38,0x1028); uVar1 = 0x1028; FUN_1020_0527(); FUN_1020_038f(uVar1); FUN_1008_23fd(); arg3 = 0x1028; FUN_1020_052c(0x1008,0x4c38); FUN_1020_038f(); GETMODULEFILENAME(0x50,(void *)CONCAT22(DAT_1028_06fe,(void *)0x1028),arg3); Ordinal_6(0x1228,0x4a6e,0x1028,0x4a6e,0x1028); DAT_1028_4abe = DAT_1028_0712; DAT_1028_4ac0 = DAT_1028_0714; DAT_1028_0712 = 0x24a5; DAT_1028_0714 = 0x1008; return; } /* ===== 1008:2608 FUN_1008_2608 ===== */ void __cdecl16near FUN_1008_2608(void) { char *pcVar1; char *pcVar2; code *pcVar3; int iVar4; char *unaff_DI; char *pcVar5; undefined2 unaff_ES; undefined2 unaff_SS; char local_52 [80]; pcVar5 = local_52; iVar4 = 0x4f; do { pcVar1 = unaff_DI; unaff_DI = unaff_DI + 1; if (*pcVar1 == '\0') break; pcVar2 = pcVar5; pcVar5 = pcVar5 + 1; *pcVar2 = *pcVar1; iVar4 = iVar4 + -1; } while (iVar4 != 0); *pcVar5 = '\0'; Ordinal_5(); pcVar3 = (code *)swi(0x21); (*pcVar3)(); return; } /* ===== 1008:2643 FUN_1008_2643 ===== */ char * __stdcall16far FUN_1008_2643(char *param_1,char *param_2,char *param_3) { char *pcVar1; char *pcVar2; char cVar3; char cVar4; uint uVar5; char *pcVar6; char *pcVar7; char *pcVar8; undefined2 uVar9; undefined2 uVar10; bool bVar11; undefined2 uVar12; uVar12 = 0x1028; uVar10 = (undefined2)((ulong)param_1 >> 0x10); pcVar6 = (char *)param_1; uVar9 = (undefined2)((ulong)param_3 >> 0x10); uVar5 = 0x4f; pcVar8 = (char *)param_3; do { if (uVar5 != 0) { pcVar7 = (char *)param_2; do { pcVar1 = pcVar7; pcVar7 = pcVar7 + 1; if (*pcVar1 == '\0') break; pcVar2 = pcVar8; pcVar8 = pcVar8 + 1; *pcVar2 = *pcVar1; uVar5 = uVar5 - 1; } while (uVar5 != 0); } bVar11 = false; *pcVar8 = '\0'; FUN_1008_2608(pcVar6,uVar10,uVar12); if ((!bVar11) && ((uVar5 & 0x18) == 0)) { return param_3; } uVar5 = 0x4f; cVar3 = *pcVar6; cVar4 = '\0'; pcVar8 = (char *)param_3; if (cVar3 == '\0') { *param_3 = '\0'; return param_3; } do { pcVar6 = pcVar6 + 1; if (cVar3 == ';') break; if (uVar5 != 0) { pcVar1 = pcVar8; pcVar8 = pcVar8 + 1; *pcVar1 = cVar3; uVar5 = uVar5 - 1; cVar4 = cVar3; } cVar3 = *pcVar6; } while (cVar3 != '\0'); if (((uVar5 != 0) && (cVar4 != ':')) && (cVar4 != '\\')) { pcVar1 = pcVar8; pcVar8 = pcVar8 + 1; *pcVar1 = '\\'; uVar5 = uVar5 - 1; } } while( true ); } /* ===== 1008:26b0 FUN_1008_26b0 ===== */ uint __stdcall16far FUN_1008_26b0(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6,int param_7, undefined2 param_8) { long lVar1; undefined4 local_14; int local_10; undefined2 local_e; uint local_c; uint local_a; uint local_8; lVar1 = FUN_1008_2fe3(0x5c,param_7,param_8); if (lVar1 == 0) { lVar1 = FUN_1008_2fe3(0x3a,param_7,param_8); } local_e = (undefined2)((ulong)lVar1 >> 0x10); local_10 = (int)lVar1; if (lVar1 == 0) { local_10 = param_7; local_e = param_8; } else { local_10 = local_10 + 1; } local_14 = (char *)FUN_1008_2fbb(0x2e,local_10,local_e); if (local_14 == (char *)0x0) { local_14 = (char *)FUN_1008_2ea9(local_10,local_e); } local_8 = local_10 - param_7; if (0x43 < local_8) { local_8 = 0x43; } local_a = (int)(char *)local_14 - local_10; if (8 < local_a) { local_a = 8; } local_c = 0; lVar1 = FUN_1008_2fbb(0x3f,local_10,local_e); if (lVar1 == 0) { lVar1 = FUN_1008_2fbb(0x2a,local_10,local_e); if (lVar1 == 0) goto LAB_1008_2784; } local_c = 8; LAB_1008_2784: if (local_8 != 0) { local_c = local_c | 4; } if (local_a != 0) { local_c = local_c | 2; } if (*local_14 != '\0') { local_c = local_c | 1; } if (param_5 != 0 || param_6 != 0) { FUN_1008_2f07(local_8,param_7,param_8,param_5,param_6); } if (param_3 != 0 || param_4 != 0) { FUN_1008_2f07(local_a,local_10,local_e,param_3,param_4); } if (param_1 != 0 || param_2 != 0) { FUN_1008_2f07(4,(char *)local_14,local_14._2_2_,param_1,param_2); } return local_c; } /* ===== 1008:2819 FUN_1008_2819 ===== */ char * __stdcall16far FUN_1008_2819(undefined2 param_1,undefined2 param_2) { int iVar1; int iVar2; undefined4 local_e; char *local_8; undefined2 local_6; iVar1 = FUN_1008_2e92(param_1,param_2); local_e = (char *)GETDOSENVIRONMENT(0x1008); do { if (*local_e == '\0') { local_8 = (char *)0x0; local_6 = 0; LAB_1008_2896: return (char *)CONCAT22(local_6,local_8); } iVar2 = FUN_1008_2f70(iVar1,param_1,param_2,(char *)local_e,local_e._2_2_); if ((iVar2 == 0) && (((char *)local_e)[iVar1] == '=')) { local_8 = (char *)local_e + iVar1 + 1; local_6 = local_e._2_2_; goto LAB_1008_2896; } iVar2 = FUN_1008_2e92((char *)local_e,local_e._2_2_); local_e = (char *)CONCAT22(local_e._2_2_,(char *)local_e + iVar2 + 1); } while( true ); } /* ===== 1008:28a3 FUN_1008_28a3 ===== */ undefined4 __stdcall16far FUN_1008_28a3(undefined4 param_1,undefined2 param_2,undefined1 param_3,undefined2 param_4, undefined2 param_5,undefined2 param_6) { undefined2 uVar1; int iVar2; undefined2 uVar3; bool bVar4; FUN_1020_03cb(); bVar4 = true; FUN_1020_03ef(); if (!bVar4) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; FUN_1008_2d99(iVar2,uVar3,0); *(undefined2 *)(iVar2 + 2) = 0; *(undefined2 *)(iVar2 + 4) = param_6; uVar1 = FUN_1008_295c(iVar2,uVar3,param_3,param_4,param_5); *(undefined2 *)(iVar2 + 2) = uVar1; if (*(int *)(iVar2 + 2) == 0) { FUN_1020_0439(); } } return param_1; } /* ===== 1008:2906 FUN_1008_2906 ===== */ void __stdcall16far FUN_1008_2906(undefined4 param_1) { undefined2 uVar1; FUN_1020_03cb(); uVar1 = (undefined2)((ulong)param_1 >> 0x10); FUN_1008_2932((int)param_1,uVar1); FUN_1008_2dcd((int)param_1,uVar1,0); FUN_1020_0439(); return; } /* ===== 1008:2932 FUN_1008_2932 ===== */ void __stdcall16far FUN_1008_2932(undefined4 param_1) { int iVar1; undefined2 uVar2; FUN_1020_03cb(); uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 2) != 0) { TIMEKILLEVENT(0x1020,*(undefined2 *)(iVar1 + 2)); } *(undefined2 *)(iVar1 + 2) = 0; return; } /* ===== 1008:295c FUN_1008_295c ===== */ undefined2 __stdcall16far FUN_1008_295c(undefined2 param_1,undefined2 param_2,undefined1 param_3,undefined2 param_4, undefined2 param_5) { undefined1 extraout_AH; undefined2 uVar1; FUN_1020_03cb(); uVar1 = SYSTEMTIMERMAKE(0x1020,CONCAT11(extraout_AH,param_3),param_4,param_5); return uVar1; } /* ===== 1008:298a FUN_1008_298a ===== */ void __cdecl16far FUN_1008_298a(void) { FUN_1020_03cb(); return; } /* ===== 1008:2996 FUN_1008_2996 ===== */ undefined4 __stdcall16far FUN_1008_2996(undefined4 param_1,undefined2 param_2,undefined2 param_3,int param_4, undefined2 param_5,undefined2 param_6) { int unaff_BP; int iVar1; undefined2 uVar2; bool bVar3; undefined4 uVar4; bVar3 = true; FUN_1020_03ef(0x1028,unaff_BP + 1); if (!bVar3) { uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; FUN_1018_0341(iVar1,uVar2,0,param_5,param_6); FUN_1018_0627(iVar1,uVar2); if (param_4 == 0) { *(undefined2 *)(iVar1 + 0x1d) = param_3; *(undefined2 *)(iVar1 + 0x1f) = 0; } else { uVar4 = FUN_1008_302c(param_3,param_4); *(undefined2 *)(iVar1 + 0x1d) = (int)uVar4; *(undefined2 *)(iVar1 + 0x1f) = (int)((ulong)uVar4 >> 0x10); } *(undefined2 *)(iVar1 + 0x21) = 0; *(undefined2 *)(iVar1 + 0x23) = 0; *(undefined1 *)(iVar1 + 0x25) = 0; } return param_1; } /* ===== 1008:2a0e FUN_1008_2a0e ===== */ void __stdcall16far FUN_1008_2a0e(undefined4 param_1) { int unaff_BP; int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; iVar1 = unaff_BP + 1; uVar4 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 0x1f) != 0) { FUN_1008_3099(*(undefined2 *)(iVar2 + 0x1d),*(undefined2 *)(iVar2 + 0x1f)); } FUN_1018_03ff(iVar2,uVar3,0); FUN_1020_0439(uVar4,iVar1); return; } /* ===== 1008:2a45 FUN_1008_2a45 ===== */ uint __stdcall16far FUN_1008_2a45(undefined4 param_1) { uint in_AX; uint uVar1; int iVar2; undefined2 uVar3; undefined2 local_8; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 2) == 0) { FUN_1018_0627(iVar2,uVar3); FUN_1018_05f3(iVar2,uVar3); *(undefined1 *)(iVar2 + 0x25) = 0; if (*(int *)(iVar2 + 6) == 0 && *(int *)(iVar2 + 8) == 0) { local_8 = 0; } else { local_8 = *(undefined2 *)((int)*(undefined4 *)(iVar2 + 6) + 4); } in_AX = (*DAT_1028_0652)(0x1018,*(undefined2 *)(iVar2 + 0x21),*(undefined2 *)(iVar2 + 0x23), *(undefined2 *)(iVar2 + 0x12),*(undefined2 *)(iVar2 + 0x14),local_8, *(undefined2 *)(iVar2 + 0x1d),*(undefined2 *)(iVar2 + 0x1f), DAT_1028_06fe); *(uint *)(iVar2 + 4) = in_AX; if (*(int *)(iVar2 + 4) == 0) { *(undefined2 *)(iVar2 + 2) = 0xffff; } } uVar1 = in_AX & 0xff00; if (*(int *)(iVar2 + 2) == 0) { uVar1 = uVar1 + 1; } return uVar1; } /* ===== 1008:2ae3 FUN_1008_2ae3 ===== */ int __stdcall16far FUN_1008_2ae3(undefined4 param_1) { undefined2 uVar1; int iVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 uVar6; undefined2 local_8; undefined2 local_6; uVar4 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 2) == 0) { FUN_1018_0627(iVar2,uVar4); FUN_1018_05f3(iVar2,uVar4); *(undefined1 *)(iVar2 + 0x25) = 1; if (*(int *)(iVar2 + 6) == 0 && *(int *)(iVar2 + 8) == 0) { local_8 = 0; } else { local_8 = *(undefined2 *)((int)*(undefined4 *)(iVar2 + 6) + 4); } uVar5 = (undefined2)((ulong)DAT_1028_064e >> 0x10); uVar1 = *(undefined2 *)((int)DAT_1028_064e + 0xe); uVar5 = *(undefined2 *)((int)DAT_1028_064e + 0x10); local_6 = (*DAT_1028_0656)(0x1018,*(undefined2 *)(iVar2 + 0x21),*(undefined2 *)(iVar2 + 0x23), *(undefined2 *)(iVar2 + 0x12),*(undefined2 *)(iVar2 + 0x14),local_8, *(undefined2 *)(iVar2 + 0x1d),*(undefined2 *)(iVar2 + 0x1f), DAT_1028_06fe); uVar6 = (undefined2)((ulong)DAT_1028_064e >> 0x10); iVar3 = (int)DAT_1028_064e; *(undefined2 *)(iVar3 + 0xe) = uVar1; *(undefined2 *)(iVar3 + 0x10) = uVar5; if (local_6 == -1) { *(undefined2 *)(iVar2 + 2) = 0xffff; } *(undefined2 *)(iVar2 + 4) = 0; } else { local_6 = *(int *)(iVar2 + 2); } return local_6; } /* ===== 1008:2bb1 FUN_1008_2bb1 ===== */ void __stdcall16far FUN_1008_2bb1(undefined2 param_1,undefined4 param_2) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_2 >> 0x10); if (*(int *)((int)param_2 + 4) != 0) { FUN_1018_060d((int)param_2,uVar1); } return; } /* ===== 1008:2bd1 FUN_1008_2bd1 ===== */ void __stdcall16far FUN_1008_2bd1(undefined4 param_1,undefined2 param_2) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_1 >> 0x10); if (*(char *)((int)param_1 + 0x25) != '\0') { FUN_1018_085a((int)param_1,uVar1,0x2bb1,0x1008); ENDDIALOG(0x1018,param_2); } return; } /* ===== 1008:2c08 FUN_1008_2c08 ===== */ void __stdcall16far FUN_1008_2c08(int *param_1) { (*(code *)*(undefined2 *)(*param_1 + 0x38))(); return; } /* ===== 1008:2c1f FUN_1008_2c1f ===== */ void __stdcall16far FUN_1008_2c1f(int *param_1,undefined4 param_2) { char cVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; uVar3 = (undefined2)((ulong)DAT_1028_064e >> 0x10); iVar2 = (int)param_2; uVar4 = (undefined2)((ulong)param_2 >> 0x10); if (((int)((ulong)param_1 >> 0x10) == ((int *)DAT_1028_064e)[5]) && ((int *)param_1 == (int *)((int *)DAT_1028_064e)[4])) { cVar1 = (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x44))(); *(int *)(iVar2 + 10) = (int)(cVar1 == '\0'); *(undefined2 *)(iVar2 + 0xc) = 0; } else { cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); *(int *)(iVar2 + 10) = (int)(cVar1 == '\0'); *(undefined2 *)(iVar2 + 0xc) = 0; } return; } /* ===== 1008:2c83 FUN_1008_2c83 ===== */ void __stdcall16far FUN_1008_2c83(undefined2 param_1,undefined2 param_2,undefined4 param_3) { int *piVar1; int iVar2; int unaff_BP; int iVar3; undefined2 uVar4; long lVar5; undefined2 uVar6; undefined2 uVar7; iVar3 = unaff_BP + 1; uVar7 = 0x1028; uVar4 = (undefined2)((ulong)param_3 >> 0x10); uVar6 = *(undefined2 *)((int)param_3 + 4); SETFOCUS(); lVar5 = FUN_1018_0097(*(undefined2 *)((int)param_3 + 4)); uVar4 = (undefined2)((ulong)lVar5 >> 0x10); iVar2 = (int)lVar5; if ((lVar5 != 0) && (*(int *)(iVar2 + 0x43) != 0 || *(int *)(iVar2 + 0x45) != 0)) { piVar1 = (int *)*(undefined4 *)(iVar2 + 0x43); (*(code *)*(undefined2 *)(*piVar1 + 0xc)) (0x1018,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),uVar6,lVar5,uVar7,iVar3); } DAT_1028_06f2 = 1; return; } /* ===== 1008:2cd9 FUN_1008_2cd9 ===== */ void __stdcall16far FUN_1008_2cd9(undefined2 param_1,undefined2 param_2,undefined4 param_3) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_3 >> 0x10); *(undefined2 *)((int)param_3 + 10) = 0; *(undefined2 *)((int)param_3 + 0xc) = 0; return; } /* ===== 1008:2cf2 FUN_1008_2cf2 ===== */ void __stdcall16far FUN_1008_2cf2(int *param_1) { char cVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); if (*(char *)((int)(int *)param_1 + 0x25) == '\0') { FUN_1018_0f38((int *)param_1,uVar2); } else { cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); if (cVar1 != '\0') { (*(code *)*(undefined2 *)(*param_1 + 0x44))(); (*(code *)*(undefined2 *)(*param_1 + 0x50))(); } } return; } /* ===== 1008:2d3a FUN_1008_2d3a ===== */ void __stdcall16far FUN_1008_2d3a(int *param_1) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_1 >> 0x10); if (*(char *)((int)(int *)param_1 + 0x25) == '\0') { FUN_1018_0f38((int *)param_1,uVar1); } else { (*(code *)*(undefined2 *)(*param_1 + 0x50))(); } return; } /* ===== 1008:2d66 FUN_1008_2d66 ===== */ void __stdcall16far FUN_1008_2d66(void) { FUN_1020_16e1(); return; } /* ===== 1008:2d87 FUN_1008_2d87 ===== */ void __cdecl16far FUN_1008_2d87(void) { FUN_1020_005d(); return; } /* ===== 1008:2d99 FUN_1008_2d99 ===== */ undefined4 __stdcall16far FUN_1008_2d99(undefined4 param_1) { int unaff_BP; FUN_1020_03ef(0x1028,unaff_BP + 1); return param_1; } /* ===== 1008:2db3 FUN_1008_2db3 ===== */ void __stdcall16far FUN_1008_2db3(int *param_1) { (*(code *)*(undefined2 *)(*param_1 + 8))(); return; } /* ===== 1008:2dcd FUN_1008_2dcd ===== */ void __stdcall16far FUN_1008_2dcd(void) { int unaff_BP; FUN_1020_0439(0x1028,unaff_BP + 1); return; } /* ===== 1008:2de0 FUN_1008_2de0 ===== */ uint __cdecl16far FUN_1008_2de0(void) { uint uVar1; uVar1 = (DAT_1028_06f6 | DAT_1028_06f8) & 0xff00; if ((DAT_1028_06f6 | DAT_1028_06f8) == 0) { uVar1 = 1; } return uVar1; } /* ===== 1008:2dff FUN_1008_2dff ===== */ void __cdecl16far FUN_1008_2dff(void) { char cVar1; int unaff_BP; undefined4 uVar2; cVar1 = FUN_1008_2de0(0x1028,unaff_BP + 1); uVar2 = CONCAT22(DAT_1028_06f8,DAT_1028_06f6); if (cVar1 != '\0') { uVar2 = FUN_1020_012d(DAT_1028_06f4); } DAT_1028_06f8 = (undefined2)((ulong)uVar2 >> 0x10); DAT_1028_06f6 = (undefined2)uVar2; return; } /* ===== 1008:2e22 FUN_1008_2e22 ===== */ undefined2 __stdcall16far FUN_1008_2e22(int param_1) { char cVar1; undefined2 local_6; if (param_1 != 0) { if (DAT_1028_06fa == '\0') { cVar1 = FUN_1008_2de0(); if (cVar1 == '\0') { FUN_1020_0147(DAT_1028_06f4,DAT_1028_06f6,DAT_1028_06f8); DAT_1028_06f6 = 0; DAT_1028_06f8 = 0; local_6 = 2; } else { local_6 = 0; } } else { local_6 = 1; } } return local_6; } /* ===== 1008:2e76 FUN_1008_2e76 ===== */ void __cdecl16far FUN_1008_2e76(void) { int unaff_BP; FUN_1008_2dff(0x1028,unaff_BP + 1); DAT_1028_070e = 0x2e22; DAT_1028_0710 = 0x1008; return; } /* ===== 1008:2e92 FUN_1008_2e92 ===== */ int __stdcall16far FUN_1008_2e92(char *param_1) { char *pcVar1; int iVar2; char *pcVar3; pcVar3 = (char *)param_1; iVar2 = -1; do { if (iVar2 == 0) break; iVar2 = iVar2 + -1; pcVar1 = pcVar3; pcVar3 = pcVar3 + 1; } while (*pcVar1 != '\0'); return -2 - iVar2; } /* ===== 1008:2ea9 FUN_1008_2ea9 ===== */ char * __stdcall16far FUN_1008_2ea9(char *param_1) { char *pcVar1; int iVar2; char *pcVar3; undefined2 uVar4; uVar4 = (undefined2)((ulong)param_1 >> 0x10); pcVar3 = (char *)param_1; iVar2 = -1; do { if (iVar2 == 0) break; iVar2 = iVar2 + -1; pcVar1 = pcVar3; pcVar3 = pcVar3 + 1; } while (*pcVar1 != '\0'); return (char *)CONCAT22(uVar4,pcVar3 + -1); } /* ===== 1008:2ec0 FUN_1008_2ec0 ===== */ undefined1 * __stdcall16far FUN_1008_2ec0(int param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; undefined1 *puVar3; undefined1 *puVar4; byte bVar5; bVar5 = 0; puVar3 = (undefined1 *)param_2; puVar4 = (undefined1 *)param_3; if (puVar3 < puVar4) { bVar5 = 1; puVar3 = puVar3 + param_1 + -1; puVar4 = puVar4 + param_1 + -1; } for (; param_1 != 0; param_1 = param_1 + -1) { puVar2 = puVar4; puVar4 = puVar4 + (uint)bVar5 * -2 + 1; puVar1 = puVar3; puVar3 = puVar3 + (uint)bVar5 * -2 + 1; *puVar2 = *puVar1; } return param_3; } /* ===== 1008:2ee5 FUN_1008_2ee5 ===== */ char * __stdcall16far FUN_1008_2ee5(char *param_1,char *param_2) { char *pcVar1; char *pcVar2; uint uVar3; char *pcVar4; char *pcVar5; undefined2 uVar6; uVar6 = (undefined2)((ulong)param_1 >> 0x10); pcVar4 = (char *)param_1; uVar3 = 0xffff; pcVar5 = pcVar4; do { if (uVar3 == 0) break; uVar3 = uVar3 - 1; pcVar1 = pcVar5; pcVar5 = pcVar5 + 1; } while (*pcVar1 != '\0'); pcVar5 = (char *)param_2; for (uVar3 = ~uVar3; uVar3 != 0; uVar3 = uVar3 - 1) { pcVar2 = pcVar5; pcVar5 = pcVar5 + 1; pcVar1 = pcVar4; pcVar4 = pcVar4 + 1; *pcVar2 = *pcVar1; } return param_2; } /* ===== 1008:2f07 FUN_1008_2f07 ===== */ char * __stdcall16far FUN_1008_2f07(int param_1,char *param_2,char *param_3) { char *pcVar1; char *pcVar2; int iVar3; char *pcVar4; char *pcVar5; undefined2 uVar6; undefined2 uVar7; uVar6 = (undefined2)((ulong)param_2 >> 0x10); pcVar4 = (char *)param_2; iVar3 = param_1; pcVar5 = pcVar4; do { if (iVar3 == 0) break; iVar3 = iVar3 + -1; pcVar1 = pcVar5; pcVar5 = pcVar5 + 1; } while (*pcVar1 != '\0'); uVar7 = (undefined2)((ulong)param_3 >> 0x10); pcVar5 = (char *)param_3; for (param_1 = param_1 - iVar3; param_1 != 0; param_1 = param_1 + -1) { pcVar2 = pcVar5; pcVar5 = pcVar5 + 1; pcVar1 = pcVar4; pcVar4 = pcVar4 + 1; *pcVar2 = *pcVar1; } *pcVar5 = '\0'; return param_3; } /* ===== 1008:2f2f FUN_1008_2f2f ===== */ byte * __stdcall16far FUN_1008_2f2f(byte *param_1,byte *param_2) { byte *pbVar1; uint uVar2; byte *pbVar3; byte *pbVar4; undefined2 uVar5; pbVar3 = (byte *)param_1; uVar5 = (undefined2)((ulong)param_2 >> 0x10); pbVar4 = (byte *)param_2; for (uVar2 = (uint)*param_1; pbVar3 = pbVar3 + 1, uVar2 != 0; uVar2 = uVar2 - 1) { pbVar1 = pbVar4; pbVar4 = pbVar4 + 1; *pbVar1 = *pbVar3; } *pbVar4 = 0; return param_2; } /* ===== 1008:2f4d FUN_1008_2f4d ===== */ undefined4 __stdcall16far FUN_1008_2f4d(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4) { undefined4 uVar1; uVar1 = FUN_1008_2ea9(param_3,param_4); FUN_1008_2ee5(param_1,param_2,uVar1); return CONCAT22(param_4,param_3); } /* ===== 1008:2f70 FUN_1008_2f70 ===== */ void __stdcall16far FUN_1008_2f70(int param_1,char *param_2,char *param_3) { char *pcVar1; char *pcVar2; byte bVar3; int iVar4; undefined1 uVar5; int iVar6; uint uVar7; char *pcVar8; char *pcVar9; undefined2 uVar10; undefined2 uVar11; bool bVar12; uVar10 = (undefined2)((ulong)param_2 >> 0x10); pcVar9 = (char *)param_2; if (param_1 != 0) { iVar4 = 0; iVar6 = param_1; pcVar8 = pcVar9; do { if (iVar6 == 0) break; iVar6 = iVar6 + -1; pcVar1 = pcVar8; pcVar8 = pcVar8 + 1; } while (*pcVar1 != '\0'); param_1 = param_1 - iVar6; bVar12 = param_1 == 0; uVar11 = (undefined2)((ulong)param_3 >> 0x10); pcVar8 = (char *)param_3; LAB_1008_2f90: do { if (param_1 != 0) { param_1 = param_1 + -1; pcVar2 = pcVar9; pcVar9 = pcVar9 + 1; pcVar1 = pcVar8; pcVar8 = pcVar8 + 1; bVar12 = *pcVar1 == *pcVar2; if (bVar12) goto LAB_1008_2f90; } if (bVar12) { return; } bVar3 = pcVar8[-1]; uVar5 = (undefined1)((uint)iVar4 >> 8); iVar4 = CONCAT11(uVar5,bVar3); if ((0x60 < bVar3) && (bVar3 < 0x7b)) { iVar4 = CONCAT11(uVar5,bVar3 - 0x20); } bVar3 = pcVar9[-1]; uVar7 = (uint)bVar3; if ((0x60 < bVar3) && (bVar3 < 0x7b)) { uVar7 = (uint)(byte)(bVar3 - 0x20); } iVar4 = iVar4 - uVar7; bVar12 = true; } while (iVar4 == 0); } return; } /* ===== 1008:2fbb FUN_1008_2fbb ===== */ char * __stdcall16far FUN_1008_2fbb(char param_1,char *param_2) { char *pcVar1; char *pcVar2; uint uVar3; undefined2 uVar4; char *pcVar5; undefined2 uVar6; bool bVar7; uVar6 = (undefined2)((ulong)param_2 >> 0x10); pcVar5 = (char *)param_2; uVar3 = 0xffff; bVar7 = true; pcVar2 = pcVar5; do { if (uVar3 == 0) break; uVar3 = uVar3 - 1; pcVar1 = pcVar2; pcVar2 = pcVar2 + 1; bVar7 = *pcVar1 == '\0'; } while (!bVar7); uVar3 = ~uVar3; do { if (uVar3 == 0) break; uVar3 = uVar3 - 1; pcVar1 = pcVar5; pcVar5 = pcVar5 + 1; bVar7 = param_1 == *pcVar1; } while (!bVar7); pcVar2 = (char *)0x0; uVar4 = 0; if (bVar7) { pcVar2 = pcVar5 + -1; uVar4 = uVar6; } return (char *)CONCAT22(uVar4,pcVar2); } /* ===== 1008:2fe3 FUN_1008_2fe3 ===== */ char * __stdcall16far FUN_1008_2fe3(char param_1,char *param_2) { char *pcVar1; char *pcVar2; uint uVar3; undefined2 uVar4; char *pcVar5; undefined2 uVar6; bool bVar7; uVar6 = (undefined2)((ulong)param_2 >> 0x10); pcVar5 = (char *)param_2; uVar3 = 0xffff; do { if (uVar3 == 0) break; uVar3 = uVar3 - 1; pcVar1 = pcVar5; pcVar5 = pcVar5 + 1; } while (*pcVar1 != '\0'); uVar3 = ~uVar3; pcVar5 = pcVar5 + -1; bVar7 = pcVar5 == (char *)0x0; do { if (uVar3 == 0) break; uVar3 = uVar3 - 1; pcVar1 = pcVar5; pcVar5 = pcVar5 + -1; bVar7 = param_1 == *pcVar1; } while (!bVar7); pcVar2 = (char *)0x0; uVar4 = 0; if (bVar7) { pcVar2 = pcVar5 + 1; uVar4 = uVar6; } return (char *)CONCAT22(uVar4,pcVar2); } /* ===== 1008:300a FUN_1008_300a ===== */ void __stdcall16far FUN_1008_300a(char *param_1,char *param_2) { char *pcVar1; uint uVar2; int iVar3; char *pcVar4; char *pcVar5; undefined2 uVar6; uVar6 = (undefined2)((ulong)param_1 >> 0x10); pcVar4 = (char *)param_1; uVar2 = 0xffff; pcVar5 = pcVar4; do { if (uVar2 == 0) break; uVar2 = uVar2 - 1; pcVar1 = pcVar5; pcVar5 = pcVar5 + 1; } while (*pcVar1 != '\0'); iVar3 = ~uVar2 - 1; pcVar5 = (char *)param_2; *param_2 = (char)iVar3; for (; pcVar5 = pcVar5 + 1, iVar3 != 0; iVar3 = iVar3 + -1) { pcVar1 = pcVar4; pcVar4 = pcVar4 + 1; *pcVar5 = *pcVar1; } return; } /* ===== 1008:302c FUN_1008_302c ===== */ undefined4 __stdcall16far FUN_1008_302c(char *param_1) { int iVar1; long lVar2; undefined4 uVar3; uVar3 = 0; if (((char *)param_1 != (char *)0x0 || param_1._2_2_ != 0) && (uVar3 = 0, *param_1 != '\0')) { iVar1 = FUN_1008_2e92((char *)param_1,param_1._2_2_); lVar2 = FUN_1020_012d(iVar1 + 1); uVar3 = 0; if (lVar2 != 0) { uVar3 = FUN_1008_2ec0(iVar1 + 1,(char *)param_1,param_1._2_2_,lVar2); } } return uVar3; } /* ===== 1008:3099 FUN_1008_3099 ===== */ void __stdcall16far FUN_1008_3099(int param_1,int param_2) { int iVar1; if (param_1 != 0 || param_2 != 0) { iVar1 = FUN_1008_2e92(param_1,param_2); FUN_1020_0147(iVar1 + 1,param_1,param_2); } return; } /* ===== 1010:0002 FUN_1010_0002 ===== */ void __cdecl16far FUN_1010_0002(void) { if (0x1f < DAT_1028_4781) { FREELIBRARY(DAT_1028_4781); } DAT_1028_4784 = 0; DAT_1028_4750 = 0; DAT_1028_4752 = 0; DAT_1028_4754 = 0; DAT_1028_4756 = 0; DAT_1028_4758 = 0; DAT_1028_475a = 0; DAT_1028_475c = 0; DAT_1028_475e = 0; DAT_1028_4760 = 0; DAT_1028_4762 = 0; DAT_1028_4764 = 0; DAT_1028_4766 = 0; DAT_1028_4768 = 0; DAT_1028_476a = 0; DAT_1028_476c = 0; DAT_1028_476e = 0; DAT_1028_4770 = 0; DAT_1028_4772 = 0; DAT_1028_4774 = 0; DAT_1028_4776 = 0; DAT_1028_4778 = 0; DAT_1028_477a = 0; return; } /* ===== 1010:0079 FUN_1010_0079 ===== */ void __cdecl16far FUN_1010_0079(void) { uint uVar1; int unaff_BP; int iVar2; undefined2 uVar3; iVar2 = unaff_BP + 1; uVar3 = 0x1028; if ((DAT_1028_4784 != '\0') && (DAT_1028_4778 != (code *)0x0 || DAT_1028_477a != 0)) { uVar1 = GETCURRENTTASK(); (*DAT_1028_4778)(0x1228,uVar1,uVar3,iVar2); FUN_1010_0002(); } return; } /* ===== 1010:00a2 FUN_1010_00a2 ===== */ undefined2 __stdcall16far FUN_1010_00a2(char *param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4) { undefined1 extraout_AH; undefined1 extraout_AH_00; undefined1 extraout_AH_01; uint uVar1; undefined1 extraout_AH_02; undefined1 extraout_AH_03; undefined1 uVar2; int unaff_BP; void *unaff_SS; undefined4 uVar3; char *pcVar4; void *arg3; undefined1 local_163 [9]; undefined1 local_15a [5]; undefined1 local_155 [256]; char local_55 [80]; undefined1 local_5; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; local_5 = 0; local_155[0] = 0; FUN_1008_2643(local_155,unaff_SS,param_3,param_4,local_55,unaff_SS); if (local_55[0] == '\0') { GETWINDOWSDIRECTORY(0x1008,0xff,local_155); FUN_1008_2643(local_155,unaff_SS,param_3,param_4,local_55,unaff_SS); if (local_55[0] == '\0') { arg3 = unaff_SS; GETSYSTEMDIRECTORY(0x1008,0xff,local_155); FUN_1008_2643(local_155,unaff_SS,param_3,param_4,local_55,unaff_SS); if (local_55[0] == '\0') { uVar1 = GETMODULEHANDLE((char *)CONCAT22(param_2,param_1)); GETMODULEFILENAME(0x100,(void *)CONCAT22(uVar1,unaff_SS),(short)arg3); FUN_1008_26b0(local_15a,unaff_SS,local_163,unaff_SS,local_155,unaff_SS,local_155,unaff_SS); FUN_1008_2643(local_155,unaff_SS,param_3,param_4,local_55,unaff_SS); if (local_55[0] == '\0') { pcVar4 = (char *)CONCAT22(unaff_SS,local_55); uVar3 = FUN_1008_2819(0x46a,0x1028); FUN_1008_2643(uVar3,param_3,param_4,pcVar4); uVar2 = extraout_AH_03; if (local_55[0] != '\0') { local_5 = 1; } } else { local_5 = 1; uVar2 = extraout_AH_02; } } else { local_5 = 1; uVar2 = extraout_AH_01; } } else { local_5 = 1; uVar2 = extraout_AH_00; } } else { local_5 = 1; uVar2 = extraout_AH; } return CONCAT11(uVar2,local_5); } /* ===== 1010:01c2 FUN_1010_01c2 ===== */ char __stdcall16far FUN_1010_01c2(undefined1 param_1,undefined1 param_2,char param_3,undefined2 param_4, undefined2 param_5) { char cVar1; uint uVar2; int iVar3; undefined2 in_DX; undefined2 extraout_DX; undefined1 in_stack_0000fffa; char cVar4; cVar4 = '\x01'; cVar1 = cVar4; if (DAT_1028_4784 == '\0') { if (DAT_1028_478c == '\0') { SETERRORMODE(0x8000); DAT_1028_4781 = LOADLIBRARY((char *)0x1028478d); SETERRORMODE(0); } else { cVar1 = FUN_1010_00a2(param_4,param_5,0x478d,0x1028); in_DX = extraout_DX; if (cVar1 == '\0') { DAT_1028_4781 = 0; } else { DAT_1028_4781 = LOADLIBRARY((char *)0x1028478d); } } cVar1 = DAT_1028_4784; if (0x1f < DAT_1028_4781) { DAT_1028_4750 = (code *)GETPROCADDRESS(0x470,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa, DAT_1028_4781))); DAT_1028_4752 = in_DX; DAT_1028_4754 = GETPROCADDRESS(0x482,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_4756 = in_DX; DAT_1028_4758 = GETPROCADDRESS(0x493,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_475a = in_DX; DAT_1028_475c = (code *)GETPROCADDRESS(0x4a3,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa, DAT_1028_4781))); DAT_1028_475e = in_DX; DAT_1028_4760 = GETPROCADDRESS(0x4b0,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_4762 = in_DX; DAT_1028_4764 = (code *)GETPROCADDRESS(0x4c3,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa, DAT_1028_4781))); DAT_1028_4766 = in_DX; DAT_1028_4768 = (code *)GETPROCADDRESS(0x4cf,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa, DAT_1028_4781))); DAT_1028_476a = in_DX; DAT_1028_476c = GETPROCADDRESS(0x4dd,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_476e = in_DX; if (DAT_1028_478c == '\0') { DAT_1028_4770 = GETPROCADDRESS(0x4ee,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))) ; DAT_1028_4772 = in_DX; } else { DAT_1028_4770 = 0; DAT_1028_4772 = 0; } DAT_1028_4774 = GETPROCADDRESS(0x501,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_4776 = in_DX; DAT_1028_4778 = GETPROCADDRESS(0x512,(char *)CONCAT13(cVar4,CONCAT12(in_stack_0000fffa,DAT_1028_4781))); DAT_1028_477a = in_DX; uVar2 = GETCURRENTTASK(); iVar3 = (*DAT_1028_4768)(0x1228,uVar2); DAT_1028_4784 = iVar3 != 0; if ((bool)DAT_1028_4784) { DAT_1028_477c = (*DAT_1028_4764)(0x1228); iVar3 = (*DAT_1028_475c)(0x1228); if ((iVar3 == 0) || (DAT_1028_477c < 9)) { DAT_1028_4784 = false; } else { DAT_1028_4784 = true; } } if ((bool)DAT_1028_4784 == false) { FUN_1010_0002(); cVar1 = DAT_1028_4784; } else { DAT_1028_477f = param_2; DAT_1028_4780 = param_1; if ((DAT_1028_478c == '\0') && (param_3 != '\0')) { iVar3 = (*DAT_1028_4750)(0x1228,DAT_1028_06fe); DAT_1028_477e = iVar3 != 0; cVar1 = DAT_1028_4784; } else { DAT_1028_477e = 0; cVar1 = DAT_1028_4784; } } } } return cVar1; } /* ===== 1010:03af FUN_1010_03af ===== */ undefined2 __stdcall16far FUN_1010_03af(undefined1 param_1,undefined1 param_2,undefined1 param_3,undefined2 param_4, undefined2 param_5) { undefined2 uVar1; uVar1 = FUN_1010_01c2(param_1,param_2,param_3,param_4,param_5); DAT_1028_4783 = 0; return uVar1; } /* ===== 1010:03e0 FUN_1010_03e0 ===== */ void __stdcall16far FUN_1010_03e0(undefined4 param_1) { int unaff_BP; FUN_1010_0079(0x1028,unaff_BP + 1); FUN_1018_1b08((int)param_1,(int)((ulong)param_1 >> 0x10),0); FUN_1020_0439(); return; } /* ===== 1010:0405 FUN_1010_0405 ===== */ undefined1 __stdcall16far FUN_1010_0405(byte *param_1) { byte *pbVar1; byte *pbVar2; int iVar3; uint uVar4; int unaff_BP; byte *pbVar5; undefined2 unaff_SS; undefined1 local_185 [128]; byte local_105; byte abStack_104 [255]; undefined1 local_5; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; pbVar5 = (byte *)param_1; local_105 = *param_1; pbVar2 = abStack_104; for (uVar4 = (uint)local_105; pbVar5 = pbVar5 + 1, uVar4 != 0; uVar4 = uVar4 - 1) { pbVar1 = pbVar2; pbVar2 = pbVar2 + 1; *pbVar1 = *pbVar5; } FUN_1020_0667(&local_105,unaff_SS,local_185,unaff_SS); FUN_1020_06ab(1,local_185,unaff_SS); iVar3 = FUN_1020_0388(); if (iVar3 == 0) { local_5 = 1; FUN_1020_072c(local_185,unaff_SS); FUN_1020_038f(); } else { local_5 = 0; } return local_5; } /* ===== 1010:0472 FUN_1010_0472 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16far FUN_1010_0472(void) { uint uVar1; char cVar2; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 *puVar3; undefined1 *puVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; undefined1 local_202 [256]; undefined1 local_102 [256]; DAT_1028_47a2 = GETSYSTEMDIRECTORY(unaff_CS,200,0x47a4); puVar4 = local_102; uVar5 = unaff_SS; FUN_1008_300a(0x47a4,0x1028); FUN_1020_0a51(0x470,0x1008); puVar3 = local_202; uVar6 = unaff_SS; FUN_1008_300a(0x522,0x1028); FUN_1020_0a51(puVar3,uVar6); FUN_1020_09ec(0xff,0x486d,0x1028,puVar4,uVar5); puVar4 = local_102; uVar5 = unaff_SS; FUN_1008_300a(0x47a4,0x1028); FUN_1020_0a51(0x470,0x1008); puVar3 = local_202; uVar6 = unaff_SS; FUN_1008_300a(0x52c,0x1028); FUN_1020_0a51(puVar3,uVar6); FUN_1020_09ec(0xff,0x496d,0x1028,puVar4,uVar5); if (DAT_1028_47a2 != 0) { uVar7 = 0x1028; uVar5 = 0x478d; puVar4 = local_102; uVar6 = unaff_SS; FUN_1008_300a(0x52c,0x1028); FUN_1008_2f2f(puVar4,uVar6,uVar5,uVar7); cVar2 = FUN_1010_0405(0x496d,0x1028); if (cVar2 == '\0') { cVar2 = FUN_1010_0405(0x486d,0x1028); if (cVar2 != '\0') { uVar5 = 0x1028; uVar6 = 0x478d; puVar4 = local_102; FUN_1008_300a(0x522,0x1028); FUN_1008_2f2f(puVar4,unaff_SS,uVar6,uVar5); } } } DAT_1028_4750 = 0; DAT_1028_4752 = 0; DAT_1028_4754 = 0; DAT_1028_4756 = 0; DAT_1028_4758 = 0; DAT_1028_475a = 0; DAT_1028_475c = 0; DAT_1028_475e = 0; DAT_1028_4760 = 0; DAT_1028_4762 = 0; DAT_1028_4764 = 0; DAT_1028_4766 = 0; DAT_1028_4768 = 0; DAT_1028_476a = 0; DAT_1028_476c = 0; DAT_1028_476e = 0; DAT_1028_4770 = 0; DAT_1028_4772 = 0; DAT_1028_4774 = 0; DAT_1028_4776 = 0; DAT_1028_4778 = 0; DAT_1028_477a = 0; _DAT_1028_478a = GETVERSION(); uVar1 = _DAT_1028_478a; if ((DAT_1028_478a == '\x03') && (DAT_1028_478b = (byte)(_DAT_1028_478a >> 8), DAT_1028_478b < 10) ) { DAT_1028_478c = 1; } else { DAT_1028_478c = 0; } DAT_1028_477e = 0; DAT_1028_477f = 0; DAT_1028_4780 = 1; DAT_1028_4781 = 0; DAT_1028_4783 = 0; DAT_1028_4784 = 0; _DAT_1028_478a = uVar1; return; } /* ===== 1018:0002 FUN_1018_0002 ===== */ void __cdecl16near FUN_1018_0002(void) { int *piVar1; int iVar2; int iVar3; int in_AX; int iVar4; int in_BX; int *piVar5; int *piVar6; bool bVar7; piVar5 = (int *)*(int *)(in_BX + 4); if ((piVar5 != (int *)0x0) && (in_AX != piVar5[1])) { bVar7 = false; do { iVar4 = piVar5[3]; piVar6 = piVar5 + 4; do { if (iVar4 == 0) break; iVar4 = iVar4 + -1; piVar1 = piVar6; piVar6 = piVar6 + 1; bVar7 = in_AX == *piVar1; } while (!bVar7); if (bVar7) { iVar2 = piVar5[3]; iVar3 = *(int *)(in_BX + 4); *(int *)(iVar3 + 2) = in_AX; *(undefined2 *)(iVar3 + 4) = piVar6 + ((iVar2 + -1) * 2 - iVar4); return; } piVar5 = (int *)*piVar5; bVar7 = piVar5 == (int *)0x0; } while (!bVar7); } return; } /* ===== 1018:0045 FUN_1018_0045 ===== */ void __stdcall16far FUN_1018_0045(undefined2 param_1,undefined2 param_2) { undefined2 unaff_CS; SETPROP(unaff_CS,param_2,0x67a,0x1028); SETPROP(0x1228,param_1,0x67e,0x1028); return; } /* ===== 1018:0071 FUN_1018_0071 ===== */ void __stdcall16far FUN_1018_0071(void) { undefined2 unaff_CS; REMOVEPROP(unaff_CS,0x67a,0x1028); REMOVEPROP(0x1228,0x67e,0x1028); return; } /* ===== 1018:0097 FUN_1018_0097 ===== */ undefined4 __stdcall16far FUN_1018_0097(int param_1) { int iVar1; char *pcVar2; undefined2 uVar3; int iVar4; undefined2 uVar5; char *pcVar6; iVar1 = ISWINDOW(); iVar4 = iVar1 >> 0xf; uVar3 = 0; if (iVar1 != 0) { pcVar6 = (char *)GETWINDOWLONG(0x1228,0xfffc); uVar5 = (undefined2)((ulong)pcVar6 >> 0x10); pcVar2 = (char *)pcVar6; if (((*pcVar6 == -0x18) && (-1 - (int)pcVar2 == *(int *)(pcVar2 + 1))) && (*(int *)0x2 == 0x2e5b)) { uVar3 = *(undefined2 *)(pcVar2 + 3); iVar4 = *(int *)(pcVar2 + 5); } else { GETPROP(0x1228,0x67a,0x1028); iVar4 = param_1; uVar3 = GETPROP(0x1228,0x67e,0x1028); } } return CONCAT22(iVar4,uVar3); } /* ===== 1018:0103 FUN_1018_0103 ===== */ void __cdecl16near FUN_1018_0103(void) { (*DAT_1028_0682)(); return; } /* ===== 1018:0133 FUN_1018_0133 ===== */ undefined4 __stdcall16far FUN_1018_0133(undefined2 param_1,undefined2 param_2,undefined2 param_3,int param_4,int param_5) { int *in_BX; undefined2 *unaff_DI; undefined2 unaff_ES; undefined2 unaff_SS; in_BX[2] = param_5; if (param_4 < 0) { unaff_DI = (undefined2 *)(*in_BX + 0xc); } else { FUN_1018_0002(); } if (*(int *)&DAT_1028_0684 != 0) { FUN_1018_0103(); } (*(code *)*unaff_DI)(); return CONCAT22(param_3,param_4); } /* ===== 1018:018b FUN_1018_018b ===== */ void __stdcall16far FUN_1018_018b(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, undefined2 param_5) { undefined2 *puVar1; undefined4 uVar2; undefined2 unaff_CS; undefined2 unaff_SS; undefined2 uVar3; uVar2 = *(undefined4 *)((int)*(undefined4 *)&DAT_1028_0676 + 0x12); uVar3 = param_5; SETWINDOWLONG(unaff_CS,(int)uVar2,(int)((ulong)uVar2 >> 0x10),0xfffc); FUN_1018_0045((int)*(undefined4 *)&DAT_1028_0676, (int)((ulong)*(undefined4 *)&DAT_1028_0676 >> 0x10),param_5); puVar1 = (undefined2 *)((int)*(undefined4 *)&DAT_1028_0676 + 0x12); (*(code *)*puVar1)(0x1018,param_1,param_2,param_3,param_4,param_5,uVar3); return; } /* ===== 1018:01dc FUN_1018_01dc ===== */ undefined1 * __stdcall16far FUN_1018_01dc(undefined2 param_1,undefined2 param_2) { undefined1 *puVar1; ushort arg1; undefined2 *puVar2; undefined2 uVar3; undefined2 in_DX; int iVar4; undefined2 unaff_CS; undefined4 local_10; undefined4 local_c; if (DAT_1028_066e == (undefined1 *)0x0 && DAT_1028_0670 == 0) { arg1 = GLOBALALLOC(0x100,0); puVar2 = (undefined2 *)GLOBALLOCK(arg1); local_c = (undefined2 *)CONCAT22(in_DX,puVar2); *local_c = DAT_1028_066c; FUN_1020_16a5(5,puVar2 + 1,in_DX,0x686,0x1028); uVar3 = DAT_1028_0674; *(undefined2 *)((int)puVar2 + 7) = DAT_1028_0672; *(undefined2 *)((int)puVar2 + 9) = uVar3; local_10 = (undefined1 *)CONCAT22(in_DX,(undefined1 *)((int)puVar2 + 0xb)); do { *local_10 = 0xe8; iVar4 = (int)((ulong)local_10 >> 0x10); *(int *)((undefined1 *)local_10 + 1) = -1 - (int)(undefined1 *)local_10; *(undefined1 **)((undefined1 *)local_10 + 3) = DAT_1028_066e; *(int *)((undefined1 *)local_10 + 5) = DAT_1028_0670; DAT_1028_066e = (undefined1 *)local_10; local_10._0_2_ = (undefined1 *)local_10 + 7; local_10 = (undefined1 *)CONCAT22(iVar4,(undefined1 *)local_10); DAT_1028_0670 = iVar4; } while ((undefined1 *)local_10 != (undefined1 *)0x100); unaff_CS = 0x1228; DAT_1028_066c = in_DX; PRESTOCHANGOSELECTOR(0x1020,in_DX); } iVar4 = DAT_1028_0670; puVar1 = DAT_1028_066e; uVar3 = ALLOCCSTODSALIAS(unaff_CS,DAT_1028_0670); DAT_1028_066e = *(undefined1 **)(puVar1 + 3); DAT_1028_0670 = *(int *)(puVar1 + 5); *(undefined2 *)(puVar1 + 3) = param_1; *(undefined2 *)(puVar1 + 5) = param_2; FREESELECTOR(0x1228,uVar3); return (undefined1 *)CONCAT22(iVar4,puVar1); } /* ===== 1018:02fa FUN_1018_02fa ===== */ void __stdcall16far FUN_1018_02fa(int param_1,undefined2 param_2) { undefined2 uVar1; undefined2 uVar2; int unaff_BP; int iVar3; undefined2 uVar4; int iVar5; undefined2 uVar6; iVar3 = unaff_BP + 1; uVar6 = 0x1028; uVar4 = param_2; iVar5 = param_1; uVar2 = ALLOCCSTODSALIAS(); uVar1 = DAT_1028_0670; *(undefined2 *)(iVar5 + 3) = DAT_1028_066e; *(undefined2 *)(iVar5 + 5) = uVar1; FREESELECTOR(0x1228,uVar2,uVar4,iVar5,uVar2,uVar6,iVar3); DAT_1028_066e = param_1; DAT_1028_0670 = param_2; return; } /* ===== 1018:0341 FUN_1018_0341 ===== */ undefined4 __stdcall16far FUN_1018_0341(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4) { int unaff_BP; int iVar1; undefined2 uVar2; bool bVar3; undefined4 uVar4; bVar3 = true; FUN_1020_03ef(0x1028,unaff_BP + 1); if (!bVar3) { uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; FUN_1008_2d99(iVar1,uVar2,0); *(undefined2 *)(iVar1 + 2) = 0; *(undefined2 *)(iVar1 + 4) = 0; *(undefined2 *)(iVar1 + 0x17) = 0; *(undefined2 *)(iVar1 + 6) = param_3; *(undefined2 *)(iVar1 + 8) = param_4; if (*(int *)(iVar1 + 6) == 0 && *(int *)(iVar1 + 8) == 0) { *(undefined2 *)(iVar1 + 0x19) = 0; *(undefined2 *)(iVar1 + 0x1b) = 0; } else { FUN_1018_069a((int)*(undefined4 *)(iVar1 + 6),(int)((ulong)*(undefined4 *)(iVar1 + 6) >> 0x10) ,iVar1,uVar2); } *(undefined2 *)(iVar1 + 10) = 0; *(undefined2 *)(iVar1 + 0xc) = 0; *(undefined2 *)(iVar1 + 0xe) = 0; *(undefined2 *)(iVar1 + 0x10) = 0; uVar4 = FUN_1018_01dc(iVar1,uVar2); *(undefined2 *)(iVar1 + 0x12) = (int)uVar4; *(undefined2 *)(iVar1 + 0x14) = (int)((ulong)uVar4 >> 0x10); *(undefined1 *)(iVar1 + 0x16) = 0; FUN_1018_060d(iVar1,uVar2); } return param_1; } /* ===== 1018:03e9 FUN_1018_03e9 ===== */ void __stdcall16far FUN_1018_03e9(undefined2 param_1,undefined4 param_2) { FUN_1008_2db3((int)param_2,(int)((ulong)param_2 >> 0x10)); return; } /* ===== 1018:03ff FUN_1018_03ff ===== */ void __stdcall16far FUN_1018_03ff(int *param_1) { int *piVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); piVar1 = (int *)param_1; (*(code *)*(undefined2 *)(*param_1 + 0x24))(); FUN_1018_085a(piVar1,uVar2,0x3e9,0x1018); if (piVar1[3] != 0 || piVar1[4] != 0) { FUN_1018_071c((int)*(undefined4 *)(piVar1 + 3),(int)((ulong)*(undefined4 *)(piVar1 + 3) >> 0x10) ,piVar1,uVar2); } FUN_1018_02fa(piVar1[9],piVar1[10]); FUN_1008_2dcd(piVar1,uVar2,0); FUN_1020_0439(); return; } /* ===== 1018:0466 FUN_1018_0466 ===== */ undefined2 __stdcall16far FUN_1018_0466(int param_1,undefined4 param_2) { int iVar1; undefined1 uVar2; undefined2 unaff_SS; iVar1 = *(int *)((int)param_2 + 0x17); if ((*(int *)(param_1 + -6) < 0) || (iVar1 != *(int *)(param_1 + -6))) { uVar2 = 0; } else { uVar2 = 1; } return CONCAT11((char)((uint)iVar1 >> 8),uVar2); } /* ===== 1018:049e FUN_1018_049e ===== */ uint __stdcall16far FUN_1018_049e(undefined2 param_1,int *param_2) { uint uVar1; int iVar2; int unaff_BP; int *piVar3; undefined2 uVar4; undefined1 local_58 [82]; char local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar4 = (undefined2)((ulong)param_2 >> 0x10); piVar3 = (int *)param_2; uVar1 = FUN_1018_0673(piVar3,uVar4,4); if ((char)uVar1 != '\0') { uVar1 = (*(code *)*(undefined2 *)(*param_2 + 0x20))(0x1018,piVar3,uVar4); if ((char)uVar1 == '\0') { uVar1 = uVar1 & 0xff00; goto LAB_1018_04d1; } } uVar1 = CONCAT11((char)(uVar1 >> 8),1); LAB_1018_04d1: local_6 = (char)uVar1; if (local_6 != '\0') { iVar2 = ISICONIC(0x1018,piVar3[2]); uVar1 = 0; if (iVar2 != 0) { GETWINDOWTEXT(0x1228,0x51,local_58); uVar1 = SETWINDOWTEXT(0x1228,local_58); } } uVar1 = uVar1 & 0xff00; if (local_6 == '\0') { uVar1 = uVar1 + 1; } return uVar1; } /* ===== 1018:0524 FUN_1018_0524 ===== */ undefined1 __stdcall16far FUN_1018_0524(undefined2 param_1,undefined4 param_2) { char cVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_2 >> 0x10); if ((*(int *)((int)param_2 + 0x17) == 0) && (cVar1 = FUN_1018_049e(param_1,(int)param_2,uVar2), cVar1 != '\0')) { return 1; } return 0; } /* ===== 1018:055c FUN_1018_055c ===== */ uint __stdcall16far FUN_1018_055c(undefined4 param_1) { uint uVar1; int unaff_BP; undefined2 uVar2; long lVar3; undefined4 uVar4; char local_d; int iStack_2; iStack_2 = unaff_BP + 1; local_d = '\0'; do { uVar2 = (undefined2)((ulong)param_1 >> 0x10); lVar3 = FUN_1018_080d((int)param_1,uVar2,0x466,0x1018); uVar1 = 0; if (lVar3 != 0) { uVar1 = FUN_1018_049e(&iStack_2,lVar3); local_d = (char)uVar1; } } while ((local_d == '\0') && (uVar1 = 0, lVar3 != 0)); if (local_d == '\0') { uVar4 = FUN_1018_080d((int)param_1,uVar2,0x524,0x1018); uVar1 = (uint)uVar4 | (uint)((ulong)uVar4 >> 0x10); if (uVar1 == 0) { return 1; } } return uVar1 & 0xff00; } /* ===== 1018:05dc FUN_1018_05dc ===== */ undefined2 __stdcall16far FUN_1018_05dc(void) { return 0; } /* ===== 1018:05f3 FUN_1018_05f3 ===== */ void __stdcall16far FUN_1018_05f3(undefined4 param_1) { FUN_1018_0641((int)param_1,(int)((ulong)param_1 >> 0x10),1,1); return; } /* ===== 1018:060d FUN_1018_060d ===== */ void __stdcall16far FUN_1018_060d(undefined4 param_1) { FUN_1018_0641((int)param_1,(int)((ulong)param_1 >> 0x10),1,4); return; } /* ===== 1018:0627 FUN_1018_0627 ===== */ void __stdcall16far FUN_1018_0627(undefined4 param_1) { FUN_1018_0641((int)param_1,(int)((ulong)param_1 >> 0x10),0,4); return; } /* ===== 1018:0641 FUN_1018_0641 ===== */ void __stdcall16far FUN_1018_0641(undefined4 param_1,char param_2,byte param_3) { int iVar1; undefined2 uVar2; iVar1 = (int)param_1; uVar2 = (undefined2)((ulong)param_1 >> 0x10); if (param_2 == '\0') { *(byte *)(iVar1 + 0x16) = ~param_3 & *(byte *)(iVar1 + 0x16); } else { *(byte *)(iVar1 + 0x16) = *(byte *)(iVar1 + 0x16) | param_3; } return; } /* ===== 1018:0673 FUN_1018_0673 ===== */ uint __stdcall16far FUN_1018_0673(undefined4 param_1,byte param_2) { uint in_AX; uint uVar1; uVar1 = in_AX & 0xff00; if ((*(byte *)((int)param_1 + 0x16) & param_2) == param_2) { uVar1 = uVar1 + 1; } return uVar1; } /* ===== 1018:069a FUN_1018_069a ===== */ void __stdcall16far FUN_1018_069a(undefined4 param_1,undefined4 param_2) { int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; undefined2 uVar5; if ((int)param_2 != 0 || param_2._2_2_ != 0) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 10) == 0 && *(int *)(iVar1 + 0xc) == 0) { *(int *)(iVar1 + 10) = (int)param_2; *(int *)(iVar1 + 0xc) = param_2._2_2_; *(int *)((int)param_2 + 0x19) = (int)param_2; *(int *)((int)param_2 + 0x1b) = param_2._2_2_; } else { uVar4 = (undefined2)((ulong)*(undefined4 *)(iVar1 + 10) >> 0x10); iVar2 = (int)*(undefined4 *)(iVar1 + 10); uVar5 = *(undefined2 *)(iVar2 + 0x1b); *(undefined2 *)((int)param_2 + 0x19) = *(undefined2 *)(iVar2 + 0x19); *(undefined2 *)((int)param_2 + 0x1b) = uVar5; uVar5 = (undefined2)((ulong)*(undefined4 *)(iVar1 + 10) >> 0x10); iVar2 = (int)*(undefined4 *)(iVar1 + 10); *(int *)(iVar2 + 0x19) = (int)param_2; *(int *)(iVar2 + 0x1b) = param_2._2_2_; *(int *)(iVar1 + 10) = (int)param_2; *(int *)(iVar1 + 0xc) = param_2._2_2_; } } return; } /* ===== 1018:071c FUN_1018_071c ===== */ void __stdcall16far FUN_1018_071c(undefined4 param_1,int param_2,int param_3) { int *piVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; int local_c; int iStack_a; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 10) != 0 || *(int *)(iVar2 + 0xc) != 0) { local_c = *(int *)(iVar2 + 10); iStack_a = *(int *)(iVar2 + 0xc); while (((*(int *)(local_c + 0x1b) != *(int *)(iVar2 + 0xc) || (*(int *)(local_c + 0x19) != *(int *)(iVar2 + 10))) && ((*(int *)(local_c + 0x1b) != param_3 || (*(int *)(local_c + 0x19) != param_2))))) { piVar1 = (int *)(local_c + 0x19); iStack_a = *(int *)(local_c + 0x1b); local_c = *piVar1; } if ((*(int *)(local_c + 0x1b) == param_3) && (*(int *)(local_c + 0x19) == param_2)) { if ((*(int *)(local_c + 0x1b) == iStack_a) && (*(int *)(local_c + 0x19) == local_c)) { *(undefined2 *)(iVar2 + 10) = 0; *(undefined2 *)(iVar2 + 0xc) = 0; } else { if ((*(int *)(local_c + 0x1b) == *(int *)(iVar2 + 0xc)) && (*(int *)(local_c + 0x19) == *(int *)(iVar2 + 10))) { *(int *)(iVar2 + 10) = local_c; *(int *)(iVar2 + 0xc) = iStack_a; } uVar4 = (undefined2)((ulong)*(undefined4 *)(local_c + 0x19) >> 0x10); iVar2 = (int)*(undefined4 *)(local_c + 0x19); uVar3 = *(undefined2 *)(iVar2 + 0x1b); *(undefined2 *)(local_c + 0x19) = *(undefined2 *)(iVar2 + 0x19); *(undefined2 *)(local_c + 0x1b) = uVar3; } } } return; } /* ===== 1018:080d FUN_1018_080d ===== */ undefined4 __stdcall16far FUN_1018_080d(undefined4 param_1,code *param_2) { undefined4 uVar1; char cVar2; int iVar3; int iVar4; int iVar5; int iVar6; int iVar7; uVar1 = *(undefined4 *)((int)param_1 + 10); iVar5 = (int)((ulong)uVar1 >> 0x10); iVar3 = (int)uVar1; iVar4 = iVar3; iVar6 = iVar5; iVar7 = iVar5; if (iVar5 != 0 || iVar3 != 0) { do { iVar6 = (int)((ulong)*(undefined4 *)(iVar4 + 0x19) >> 0x10); iVar4 = (int)*(undefined4 *)(iVar4 + 0x19); cVar2 = (*param_2)(); if (cVar2 != '\0') goto LAB_1018_084f; iVar7 = iVar6; } while ((iVar4 != iVar3) || (iVar6 != iVar5)); iVar4 = 0; iVar6 = 0; } LAB_1018_084f: return CONCAT22(iVar6,iVar4); } /* ===== 1018:085a FUN_1018_085a ===== */ void __stdcall16far FUN_1018_085a(undefined4 param_1,code *param_2) { int iVar1; undefined4 uVar2; int iVar3; int iVar4; int iVar5; int iVar6; uVar2 = *(undefined4 *)((int)param_1 + 10); iVar5 = (int)((ulong)uVar2 >> 0x10); iVar3 = (int)uVar2; if (iVar5 != 0 || iVar3 != 0) { iVar4 = (int)*(undefined4 *)(iVar3 + 0x19); iVar6 = (int)((ulong)*(undefined4 *)(iVar3 + 0x19) >> 0x10); while ((iVar4 != iVar3 || (iVar6 != iVar5))) { iVar1 = *(int *)(iVar4 + 0x1b); iVar4 = *(int *)(iVar4 + 0x19); (*param_2)(); iVar6 = iVar1; } (*param_2)(); } return; } /* ===== 1018:08ac FUN_1018_08ac ===== */ undefined2 __stdcall16far FUN_1018_08ac(void) { return 0xffff; } /* ===== 1018:08c3 FUN_1018_08c3 ===== */ void __stdcall16far FUN_1018_08c3(undefined2 param_1,undefined2 param_2,undefined2 *param_3,undefined4 param_4) { undefined2 *puVar1; int unaff_BP; FUN_1018_0002((int)param_4,(int)((ulong)param_4 >> 0x10),(undefined2 *)param_3, (int)((ulong)param_3 >> 0x10),0x1028,unaff_BP + 1); if (DAT_1028_0684 != 0) { FUN_1018_0103(); } puVar1 = (undefined2 *)param_3; (*(code *)*puVar1)(); return; } /* ===== 1018:08f0 FUN_1018_08f0 ===== */ void __stdcall16far FUN_1018_08f0(int *param_1,undefined4 param_2) { char cVar1; int iVar2; uint uVar3; int *piVar4; int iVar5; int iVar6; undefined2 uVar7; undefined2 uVar8; int *piVar9; long lVar10; int iVar11; int iVar12; int local_6; iVar12 = 1; iVar6 = (int)((ulong)param_1 >> 0x10); piVar4 = (int *)param_1; uVar8 = 0x1018; iVar11 = iVar6; cVar1 = FUN_1018_0673(param_1,1); iVar5 = (int)param_2; uVar7 = (undefined2)((ulong)param_2 >> 0x10); if ((cVar1 != '\0') && (*(int *)(iVar5 + 6) == 0 && *(int *)(iVar5 + 8) == 0)) { iVar12 = piVar4[2]; iVar11 = *(int *)(iVar5 + 4); uVar8 = 0x1228; iVar2 = GETDLGITEM(0x1018,iVar11); if (iVar2 != 0) { uVar8 = 0x1228; iVar11 = iVar2; uVar3 = SENDMESSAGE(0x1228,0,0,0,0x87); if ((uVar3 & 0x30) != 0) { *(int *)(iVar5 + 6) = iVar2; *(undefined2 *)(iVar5 + 8) = 0; } } } if (*(int *)(iVar5 + 6) == 0) { if (*(uint *)(iVar5 + 4) < 0x6000) { local_6 = GETFOCUS(uVar8); piVar9 = (int *)FUN_1018_0097(local_6); while (((piVar9 == (int *)0x0 && (local_6 != 0)) && (local_6 != piVar4[2]))) { local_6 = GETPARENT(0x1018,local_6); piVar9 = (int *)FUN_1018_0097(local_6); } if (piVar9 == (int *)0x0) { piVar9 = param_1; } FUN_1018_08c3(0x10,*(int *)(iVar5 + 4) + -0x6000,iVar5,uVar7,piVar9); } else { (*(code *)*(undefined2 *)(*param_1 + 0xc))(uVar8,param_1,iVar5,uVar7,iVar11,iVar12); } } else { iVar12 = piVar4[2]; uVar8 = GETDLGITEM(uVar8,*(undefined2 *)(iVar5 + 4)); lVar10 = FUN_1018_0097(uVar8); if ((lVar10 == 0) || (0xfff < *(uint *)(iVar5 + 8))) { if (*(uint *)(iVar5 + 4) < 0x1000) { FUN_1018_08c3(0x14,*(int *)(iVar5 + 4) + -0x8000,iVar5,uVar7,param_1); } else { (*(code *)*(undefined2 *)(*param_1 + 0x14))(0x1018,param_1,iVar5,uVar7,iVar12); } } else { FUN_1018_08c3(0x18,*(int *)(iVar5 + 8) + -0x7000,iVar5,uVar7,lVar10); } } return; } /* ===== 1018:0a85 FUN_1018_0a85 ===== */ void __stdcall16far FUN_1018_0a85(int *param_1,undefined4 param_2) { uint uVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; long lVar5; undefined2 uVar6; uVar3 = (undefined2)((ulong)param_2 >> 0x10); iVar2 = (int)param_2; uVar4 = (undefined2)((ulong)param_1 >> 0x10); if (*(int *)(iVar2 + 8) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0xc))(); } else { lVar5 = FUN_1018_0097(*(undefined2 *)(iVar2 + 8)); if (lVar5 == 0) { uVar6 = *(undefined2 *)(iVar2 + 8); uVar1 = GETWINDOWWORD(0x1018,0xfff4); if (uVar1 < 0x1000) { FUN_1018_08c3(0x14,uVar1 + 0x8000,iVar2,uVar3,(int *)param_1,uVar4); } else { (*(code *)*(undefined2 *)(*param_1 + 0x14))(0x1228,(int *)param_1,uVar4,iVar2,uVar3,uVar6); } } else { FUN_1018_08c3(0x18,*(int *)(iVar2 + 4) + -0x7000,iVar2,uVar3,lVar5); } } return; } /* ===== 1018:0b25 FUN_1018_0b25 ===== */ void __stdcall16far FUN_1018_0b25(int *param_1,undefined4 param_2) { uint extraout_DX; int unaff_BP; int iVar1; int *piVar2; undefined2 uVar3; undefined2 uVar4; undefined2 unaff_CS; int iVar5; undefined2 uVar6; iVar1 = unaff_BP + 1; uVar6 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; iVar5 = piVar2[2]; GETWINDOWLONG(unaff_CS,0xfff0); uVar4 = (undefined2)((ulong)param_2 >> 0x10); if ((extraout_DX & 0x20) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x48))(0x1228,piVar2,uVar3,(int)param_2,uVar4); } else { (*(code *)*(undefined2 *)(*param_1 + 0xc)) (0x1228,piVar2,uVar3,(int)param_2,uVar4,iVar5,uVar6,iVar1); } return; } /* ===== 1018:0b6c FUN_1018_0b6c ===== */ void __stdcall16far FUN_1018_0b6c(int *param_1,undefined4 param_2) { uint extraout_DX; int unaff_BP; int iVar1; int *piVar2; undefined2 uVar3; undefined2 uVar4; undefined2 unaff_CS; int iVar5; undefined2 uVar6; iVar1 = unaff_BP + 1; uVar6 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; iVar5 = piVar2[2]; GETWINDOWLONG(unaff_CS,0xfff0); uVar4 = (undefined2)((ulong)param_2 >> 0x10); if ((extraout_DX & 0x10) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x48))(0x1228,piVar2,uVar3,(int)param_2,uVar4); } else { (*(code *)*(undefined2 *)(*param_1 + 0xc)) (0x1228,piVar2,uVar3,(int)param_2,uVar4,iVar5,uVar6,iVar1); } return; } /* ===== 1018:0bb3 FUN_1018_0bb3 ===== */ void __stdcall16far FUN_1018_0bb3(int *param_1,int *param_2) { int unaff_BP; int iVar1; int *piVar2; int *piVar3; undefined2 uVar4; undefined2 uVar5; undefined2 unaff_CS; long lVar6; undefined2 uVar7; iVar1 = unaff_BP + 1; uVar7 = 0x1028; uVar4 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; if (*param_2 == piVar2[2]) { lVar6 = 0; } else if (piVar2[3] == 0 && piVar2[4] == 0) { unaff_CS = 0x1018; lVar6 = FUN_1018_0097(*param_2); } else { lVar6 = CONCAT22(piVar2[4],piVar2[3]); } piVar3 = (int *)param_2; uVar5 = (undefined2)((ulong)param_2 >> 0x10); if (lVar6 == 0) { (*(code *)*(undefined2 *)(*param_1 + 0xc))(unaff_CS,piVar2,uVar4,piVar3,uVar5,0,0,uVar7,iVar1); } else { FUN_1018_08c3(0x10,piVar3[2] + -0x6000,piVar3,uVar5,lVar6); } return; } /* ===== 1018:0c3d FUN_1018_0c3d ===== */ void __stdcall16far FUN_1018_0c3d(int *param_1) { (*(code *)*(undefined2 *)(*param_1 + 0xc))(); return; } /* ===== 1018:0c59 FUN_1018_0c59 ===== */ void __stdcall16far FUN_1018_0c59(undefined4 param_1,undefined4 param_2) { int iVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; undefined2 unaff_CS; undefined2 uVar5; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 6) != 0 || *(int *)(iVar1 + 8) != 0) { uVar4 = (undefined2)((ulong)param_2 >> 0x10); iVar2 = (int)param_2; if (*(int *)(iVar2 + 2) == 0x111) { FUN_1018_08c3(0x14,*(int *)(iVar2 + 4) + -0x8000,iVar2,uVar4,*(undefined2 *)(iVar1 + 6), *(undefined2 *)(iVar1 + 8)); } else { uVar5 = *(undefined2 *)(iVar1 + 6); uVar3 = *(undefined2 *)(iVar1 + 4); iVar1 = GETWINDOWWORD(unaff_CS,0xfff4); FUN_1018_08c3(0x14,iVar1 + -0x8000,uVar3,iVar2,uVar4,uVar5); } } return; } /* ===== 1018:0cc7 FUN_1018_0cc7 ===== */ void __stdcall16far FUN_1018_0cc7(undefined2 param_1,undefined4 param_2) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_2 >> 0x10); if (*(int *)((int)param_2 + 4) != 0) { FUN_1018_060d((int)param_2,uVar1); } return; } /* ===== 1018:0ce7 FUN_1018_0ce7 ===== */ void __stdcall16far FUN_1018_0ce7(undefined4 param_1) { int *piVar1; char cVar2; int unaff_BP; int iVar3; int iVar4; undefined2 uVar5; long lVar6; undefined2 uVar7; iVar3 = unaff_BP + 1; uVar7 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); iVar4 = (int)param_1; if (*(int *)(iVar4 + 4) != 0) { FUN_1018_085a(iVar4,uVar5,0xcc7,0x1018); cVar2 = FUN_1018_0673(iVar4,uVar5,8); if (cVar2 != '\0') { piVar1 = (int *)*(undefined4 *)(iVar4 + 6); lVar6 = (*(code *)*(undefined2 *)(*piVar1 + 0x30)) (0x1018,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),uVar7,iVar3); if (lVar6 != 0) { piVar1 = (int *)*(undefined4 *)(iVar4 + 6); (*(code *)*(undefined2 *)(*piVar1 + 0x30)) (0x1018,(int *)piVar1,(int)((ulong)piVar1 >> 0x10)); SENDMESSAGE(0x1018,0,0,*(undefined2 *)(iVar4 + 4),0x221); return; } } DESTROYWINDOW(0x1018,*(undefined2 *)(iVar4 + 4)); } return; } /* ===== 1018:0d6a FUN_1018_0d6a ===== */ char * __stdcall16far FUN_1018_0d6a(void) { return s_TurboWindow_1028_068c; } /* ===== 1018:0d8a FUN_1018_0d8a ===== */ void __stdcall16far FUN_1018_0d8a(void) { int unaff_BP; FUN_1008_2d87(0x1028,unaff_BP + 1); return; } /* ===== 1018:0d9b FUN_1018_0d9b ===== */ void __stdcall16far FUN_1018_0d9b(int *param_1) { char cVar1; int unaff_BP; int iVar2; int *piVar3; undefined2 uVar4; undefined2 uVar5; iVar2 = unaff_BP + 1; uVar5 = 0x1028; uVar4 = (undefined2)((ulong)param_1 >> 0x10); piVar3 = (int *)param_1; cVar1 = FUN_1018_055c(piVar3,uVar4); if (cVar1 == '\0') { piVar3[1] = -4; } else { (*(code *)*(undefined2 *)(*param_1 + 0x44))(0x1018,piVar3,uVar4,2,uVar5,iVar2); } return; } /* ===== 1018:0dcd FUN_1018_0dcd ===== */ void __stdcall16far FUN_1018_0dcd(int param_1,int *param_2) { char cVar1; int unaff_BP; int iVar2; undefined2 uVar3; undefined2 unaff_SS; undefined2 uVar4; iVar2 = unaff_BP + 1; uVar4 = 0x1028; uVar3 = (undefined2)((ulong)param_2 >> 0x10); cVar1 = FUN_1018_0673((int *)param_2,uVar3,0x10); if (cVar1 != '\0') { iVar2 = (*(code *)*(undefined2 *)(*param_2 + 0x40)) (0x1018,(int *)param_2,uVar3,*(undefined2 *)(param_1 + 10), *(undefined2 *)(param_1 + -6),*(undefined2 *)(param_1 + -4),uVar4,iVar2); *(int *)(param_1 + -6) = *(int *)(param_1 + -6) + iVar2; } return; } /* ===== 1018:0e0a FUN_1018_0e0a ===== */ void __stdcall16far FUN_1018_0e0a(undefined4 param_1) { int iVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_1 >> 0x10); iVar1 = (int)param_1; if (*(int *)(iVar1 + 0xe) != 0 || *(int *)(iVar1 + 0x10) != 0) { FUN_1018_085a(iVar1,uVar2,0xdcd,0x1018); } return; } /* ===== 1018:0e46 FUN_1018_0e46 ===== */ undefined1 __stdcall16far FUN_1018_0e46(int *param_1) { int iVar1; int unaff_BP; undefined2 unaff_CS; undefined2 unaff_SS; undefined4 uVar2; undefined1 local_20 [27]; undefined1 local_5; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; local_5 = 1; uVar2 = (*(code *)*(undefined2 *)(*param_1 + 0x2c))(); iVar1 = GETCLASSINFO(unaff_CS,local_20,unaff_SS,uVar2); if (iVar1 == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x34)) (0x1228,(int *)param_1,(int)((ulong)param_1 >> 0x10),local_20); iVar1 = REGISTERCLASS(0x1228,local_20); local_5 = iVar1 != 0; } return local_5; } /* ===== 1018:0e9e FUN_1018_0e9e ===== */ void __stdcall16far FUN_1018_0e9e(undefined4 param_1,undefined2 param_2) { undefined2 unaff_CS; if (*(int *)((int)param_1 + 4) != 0) { SHOWWINDOW(unaff_CS,param_2); } return; } /* ===== 1018:0ec0 FUN_1018_0ec0 ===== */ undefined1 __stdcall16far FUN_1018_0ec0(undefined2 param_1,int *param_2) { char cVar1; if ((((int *)param_2)[2] != 0) && (cVar1 = (*(code *)*(undefined2 *)(*param_2 + 0x3c))(), cVar1 == '\0')) { return 1; } return 0; } /* ===== 1018:0ef4 FUN_1018_0ef4 ===== */ uint __stdcall16far FUN_1018_0ef4(undefined4 param_1) { uint uVar1; uint uVar2; undefined4 uVar3; uVar3 = FUN_1018_080d((int)param_1,(int)((ulong)param_1 >> 0x10),0xec0,0x1018); uVar1 = (uint)uVar3 | (uint)((ulong)uVar3 >> 0x10); uVar2 = uVar1 & 0xff00; if (uVar1 == 0) { uVar2 = 1; } return uVar2; } /* ===== 1018:0f22 FUN_1018_0f22 ===== */ void __stdcall16far FUN_1018_0f22(undefined4 param_1) { FUN_1018_0f38((int)param_1,(int)((ulong)param_1 >> 0x10)); return; } /* ===== 1018:0f38 FUN_1018_0f38 ===== */ void __stdcall16far FUN_1018_0f38(int *param_1) { int iVar1; undefined2 uVar2; char local_5; iVar1 = (int)((ulong)param_1 >> 0x10); uVar2 = (undefined2)((ulong)DAT_1028_064e >> 0x10); if ((iVar1 == ((int *)DAT_1028_064e)[5]) && ((int *)param_1 == (int *)((int *)DAT_1028_064e)[4])) { local_5 = (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x44))(); } else { local_5 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); } if (local_5 != '\0') { FUN_1008_2db3((int *)param_1,iVar1); } return; } /* ===== 1018:0f8d FUN_1018_0f8d ===== */ void __stdcall16far FUN_1018_0f8d(int *param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 unaff_CS; iVar1 = (int)((ulong)param_1 >> 0x10); uVar2 = (undefined2)((ulong)DAT_1028_064e >> 0x10); if ((iVar1 == *(int *)((int)DAT_1028_064e + 10)) && ((int *)param_1 == (int *)*(int *)((int)DAT_1028_064e + 8))) { unaff_CS = 0x1228; POSTQUITMESSAGE(); } (*(code *)*(undefined2 *)(*param_1 + 0xc)) (unaff_CS,(int *)param_1,iVar1,(int)param_2,(int)((ulong)param_2 >> 0x10)); return; } /* ===== 1018:0fcc FUN_1018_0fcc ===== */ void __stdcall16far FUN_1018_0fcc(int *param_1,undefined4 param_2) { int unaff_BP; int iVar1; int *piVar2; undefined2 uVar3; undefined2 uVar4; iVar1 = unaff_BP + 1; uVar4 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; FUN_1018_0071(piVar2[2]); (*(code *)*(undefined2 *)(*param_1 + 0xc)) (0x1018,piVar2,uVar3,(int)param_2,(int)((ulong)param_2 >> 0x10),uVar4,iVar1); piVar2[2] = 0; return; } /* ===== 1018:0ffd FUN_1018_0ffd ===== */ void __stdcall16far FUN_1018_0ffd(int *param_1,undefined4 param_2) { char cVar1; undefined2 uVar2; undefined2 uVar3; uVar2 = (undefined2)((ulong)param_1 >> 0x10); (*(code *)*(undefined2 *)(*param_1 + 0xc))(); if (*(int *)((int)param_2 + 4) != 0) { cVar1 = FUN_1018_0673((int *)param_1,uVar2,1); uVar3 = (undefined2)((ulong)DAT_1028_064e >> 0x10); if (cVar1 == '\0') { FUN_1018_1bdf((int)DAT_1028_064e,uVar3,0,0); } else { FUN_1018_1bdf((int)DAT_1028_064e,uVar3,(int *)param_1,uVar2); } } return; } /* ===== 1018:1054 FUN_1018_1054 ===== */ void __stdcall16far FUN_1018_1054(int *param_1,undefined4 param_2) { char cVar1; int iVar2; undefined2 uVar3; undefined2 uVar4; uVar3 = (undefined2)((ulong)DAT_1028_064e >> 0x10); iVar2 = (int)param_2; uVar4 = (undefined2)((ulong)param_2 >> 0x10); if (((int)((ulong)param_1 >> 0x10) == ((int *)DAT_1028_064e)[5]) && ((int *)param_1 == (int *)((int *)DAT_1028_064e)[4])) { cVar1 = (*(code *)*(undefined2 *)(*DAT_1028_064e + 0x44))(); *(int *)(iVar2 + 10) = (int)cVar1; *(int *)(iVar2 + 0xc) = (int)cVar1 >> 0xf; } else { cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); *(int *)(iVar2 + 10) = (int)cVar1; *(int *)(iVar2 + 0xc) = (int)cVar1 >> 0xf; } return; } /* ===== 1018:10aa FUN_1018_10aa ===== */ void __stdcall16far FUN_1018_10aa(int *param_1) { int iVar1; undefined2 uVar2; iVar1 = (int)((ulong)param_1 >> 0x10); uVar2 = (undefined2)((ulong)DAT_1028_064e >> 0x10); if ((iVar1 == *(int *)((int)DAT_1028_064e + 10)) && ((int *)param_1 == (int *)*(int *)((int)DAT_1028_064e + 8))) { FUN_1018_0f38((int *)param_1,iVar1); } else { (*(code *)*(undefined2 *)(*param_1 + 0x10))(); } return; } /* ===== 1018:10e9 FUN_1018_10e9 ===== */ undefined4 __stdcall16far FUN_1018_10e9(void) { return 0; } /* ===== 1018:1106 FUN_1018_1106 ===== */ undefined4 __stdcall16far FUN_1018_1106(undefined4 param_1,undefined2 param_2,undefined2 param_3,undefined2 param_4, int *param_5) { int unaff_BP; int iVar1; int iVar2; undefined2 *puVar3; undefined2 uVar4; undefined2 uVar5; bool bVar6; undefined4 uVar7; long lVar8; undefined2 *puVar9; undefined2 uVar10; iVar1 = unaff_BP + 1; uVar10 = 0x1028; bVar6 = true; FUN_1020_03ef(); if (!bVar6) { uVar4 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; FUN_1018_0341(iVar2,uVar4,0,(int *)param_5,param_5._2_2_); puVar9 = (undefined2 *)CONCAT22(uVar4,(undefined2 *)(iVar2 + 0x1d)); uVar7 = FUN_1008_302c(param_3,param_4); uVar5 = (undefined2)((ulong)puVar9 >> 0x10); puVar3 = (undefined2 *)puVar9; *puVar9 = (int)uVar7; puVar3[1] = (int)((ulong)uVar7 >> 0x10); *(undefined2 *)(iVar2 + 0x37) = 0x22c; *(undefined2 *)(iVar2 + 0x39) = 0x1228; if ((int *)param_5 == (int *)0x0 && param_5._2_2_ == 0) { puVar3[2] = 0; puVar3[3] = 0xcf; } else { lVar8 = (*(code *)*(undefined2 *)(*param_5 + 0x30)) (0x1008,(int *)param_5,param_5._2_2_,puVar9,uVar10,iVar1); if (lVar8 == 0) { uVar10 = (undefined2)((ulong)puVar9 >> 0x10); ((undefined2 *)puVar9)[2] = 0; ((undefined2 *)puVar9)[3] = 0x1000; } else { FUN_1018_0641(iVar2,uVar4,1,8); *(undefined2 *)(iVar2 + 0x37) = 0x2b0; *(undefined2 *)(iVar2 + 0x39) = 0x1228; uVar10 = (undefined2)((ulong)puVar9 >> 0x10); ((undefined2 *)puVar9)[2] = 0; ((undefined2 *)puVar9)[3] = 0x400; } } uVar10 = (undefined2)((ulong)puVar9 >> 0x10); puVar3 = (undefined2 *)puVar9; puVar3[4] = 0; puVar3[5] = 0; puVar3[6] = 0x8000; puVar3[7] = 0; puVar3[8] = 0x8000; puVar3[9] = 0; puVar3[10] = 0; puVar3[0xb] = 0; puVar3[0xc] = 0; *(undefined2 *)(iVar2 + 0x3b) = 0; *(undefined2 *)(iVar2 + 0x3d) = 0; *(undefined2 *)(iVar2 + 0x3f) = 0; } return param_1; } /* ===== 1018:121b FUN_1018_121b ===== */ void __stdcall16far FUN_1018_121b(undefined4 param_1) { int *piVar1; uint uVar2; int unaff_BP; int iVar3; int iVar4; undefined2 uVar5; undefined2 uVar6; iVar3 = unaff_BP + 1; uVar6 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); iVar4 = (int)param_1; FUN_1008_3099(*(undefined2 *)(iVar4 + 0x1d),*(undefined2 *)(iVar4 + 0x1f)); uVar2 = *(uint *)(iVar4 + 0x3b) | *(uint *)(iVar4 + 0x3d); if (uVar2 != 0) { piVar1 = (int *)*(undefined4 *)(iVar4 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 8)) (0x1008,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),CONCAT11((char)(uVar2 >> 8),1), uVar6,iVar3); *(undefined2 *)(iVar4 + 0x3b) = 0; *(undefined2 *)(iVar4 + 0x3d) = 0; } FUN_1018_03ff(iVar4,uVar5,0); FUN_1020_0439(); return; } /* ===== 1018:1274 FUN_1018_1274 ===== */ void __stdcall16far FUN_1018_1274(int *param_1,undefined2 *param_2) { undefined2 uVar1; int unaff_BP; int iVar2; undefined2 *puVar3; undefined2 uVar4; undefined2 unaff_CS; undefined4 uVar5; undefined2 uVar6; undefined2 uVar7; undefined2 uVar8; iVar2 = unaff_BP + 1; uVar8 = 0x1028; uVar4 = (undefined2)((ulong)param_2 >> 0x10); puVar3 = (undefined2 *)param_2; puVar3[3] = 0; puVar3[4] = 0; puVar3[5] = DAT_1028_06fe; uVar7 = 0; uVar1 = LOADICON(unaff_CS,0x7f00,0); puVar3[6] = uVar1; uVar6 = 0; uVar1 = LOADCURSOR(0x1228,0x7f00,0); puVar3[7] = uVar1; puVar3[8] = 6; puVar3[9] = 0; puVar3[10] = 0; uVar5 = (*(code *)*(undefined2 *)(*param_1 + 0x2c)) (0x1228,(int *)param_1,(int)((ulong)param_1 >> 0x10),uVar6,uVar7,uVar8,iVar2); puVar3[0xb] = (int)uVar5; puVar3[0xc] = (int)((ulong)uVar5 >> 0x10); *param_2 = 3; puVar3[1] = 0x18b; puVar3[2] = 0x1018; return; } /* ===== 1018:12f5 FUN_1018_12f5 ===== */ undefined2 __stdcall16far FUN_1018_12f5(undefined4 param_1) { return *(undefined2 *)((int)param_1 + 0x35); } /* ===== 1018:1311 FUN_1018_1311 ===== */ void __stdcall16far FUN_1018_1311(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 uVar3; undefined2 unaff_CS; undefined4 uVar4; uVar2 = (undefined2)((ulong)param_1 >> 0x10); uVar3 = (undefined2)((ulong)param_2 >> 0x10); iVar1 = (int)param_2; uVar4 = CALLWINDOWPROC(unaff_CS,*(undefined2 *)(iVar1 + 6),*(undefined2 *)(iVar1 + 8), *(undefined2 *)(iVar1 + 4),*(undefined2 *)(iVar1 + 2), *(undefined2 *)((int)param_1 + 4),*(undefined2 *)((int)param_1 + 0x37)); *(undefined2 *)(iVar1 + 10) = (int)uVar4; *(undefined2 *)(iVar1 + 0xc) = (int)((ulong)uVar4 >> 0x10); return; } /* ===== 1018:134f FUN_1018_134f ===== */ uint __stdcall16far FUN_1018_134f(int *param_1) { int *piVar1; char cVar2; uint in_AX; uint uVar3; int unaff_BP; int *piVar4; undefined2 uVar5; undefined2 unaff_SS; undefined4 uVar6; undefined2 uVar7; int iVar8; undefined4 local_2a; undefined4 local_26; undefined2 local_22; undefined2 local_20; undefined2 local_1e; undefined2 local_1c; undefined2 local_1a; undefined2 local_18; undefined2 local_16; undefined2 local_14; undefined2 local_12; long local_c; undefined2 local_8; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); piVar4 = (int *)param_1; if (piVar4[1] == 0) { FUN_1018_0627(piVar4,uVar5); if (piVar4[3] == 0 && piVar4[4] == 0) { local_8 = 0; } else { local_8 = *(undefined2 *)((int)*(undefined4 *)(piVar4 + 3) + 4); } cVar2 = FUN_1018_0673(piVar4,uVar5,2); if (cVar2 == '\0') { in_AX = (*(code *)*(undefined2 *)(*param_1 + 0x1c))(0x1018,piVar4,uVar5); if ((char)in_AX != '\0') { DAT_1028_0676 = piVar4; DAT_1028_0678 = uVar5; cVar2 = FUN_1018_0673(piVar4,uVar5,8); if (cVar2 == '\0') { local_2a = (undefined2 *)CONCAT22(uVar5,(undefined2 *)((int)piVar4 + 0x1d)); uVar7 = *(undefined2 *)((int)piVar4 + 0x27); uVar6 = (*(code *)*(undefined2 *)(*param_1 + 0x2c)) (0x1018,piVar4,uVar5,*(undefined2 *)((int)piVar4 + 0x25),uVar7); in_AX = CREATEWINDOWEX(0x1018,*(undefined2 *)((int)piVar4 + 0x31), *(undefined2 *)((int)piVar4 + 0x33),DAT_1028_06fe, *(undefined2 *)((int)piVar4 + 0x35),local_8, *(undefined2 *)((int)piVar4 + 0x2f), *(undefined2 *)((int)piVar4 + 0x2d), *(undefined2 *)((int)piVar4 + 0x2b), *(undefined2 *)((int)piVar4 + 0x29), *(undefined2 *)((int)piVar4 + 0x21), *(undefined2 *)((int)piVar4 + 0x23),*local_2a, *(undefined2 *)((int)piVar4 + 0x1f),uVar6,uVar7); piVar4[2] = in_AX; } else { local_26 = (*(code *)*(undefined2 *)(*param_1 + 0x2c))(0x1018,piVar4,uVar5); local_22 = *(undefined2 *)((int)piVar4 + 0x1d); local_20 = *(undefined2 *)((int)piVar4 + 0x1f); local_1e = DAT_1028_06fe; local_1c = *(undefined2 *)((int)piVar4 + 0x29); local_1a = *(undefined2 *)((int)piVar4 + 0x2b); local_18 = *(undefined2 *)((int)piVar4 + 0x2d); local_16 = *(undefined2 *)((int)piVar4 + 0x2f); local_14 = *(undefined2 *)((int)piVar4 + 0x21); local_12 = *(undefined2 *)((int)piVar4 + 0x23); piVar1 = *(int **)(piVar4 + 3); local_c = (*(code *)*(undefined2 *)(*piVar1 + 0x30)) (0x1018,(int *)piVar1,(int)((ulong)piVar1 >> 0x10)); in_AX = 0; if (local_c != 0) { in_AX = SENDMESSAGE(0x1018,&local_26,unaff_SS,0,0x220); piVar4[2] = in_AX; } } } } else { in_AX = GETDLGITEM(0x1018,*(undefined2 *)((int)piVar4 + 0x35)); piVar4[2] = in_AX; } if (piVar4[2] == 0) { piVar4[1] = -1; } else { uVar6 = FUN_1018_0097(piVar4[2]); in_AX = (uint)uVar6 | (uint)((ulong)uVar6 >> 0x10); if (in_AX == 0) { FUN_1018_0045(piVar4,uVar5,piVar4[2]); iVar8 = piVar4[2]; uVar6 = SETWINDOWLONG(0x1018,piVar4[9],piVar4[10],0xfffc); *(undefined2 *)((int)piVar4 + 0x37) = (int)uVar6; *(undefined2 *)((int)piVar4 + 0x39) = (int)((ulong)uVar6 >> 0x10); in_AX = (*(code *)*(undefined2 *)(*param_1 + 0x38))(0x1228,piVar4,uVar5,iVar8); } } } uVar3 = in_AX & 0xff00; if (piVar4[1] == 0) { uVar3 = uVar3 + 1; } return uVar3; } /* ===== 1018:1547 FUN_1018_1547 ===== */ void __stdcall16far FUN_1018_1547(undefined4 param_1) { int iVar1; int iVar2; undefined2 uVar3; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 0x3f) != 0) { iVar1 = ISWINDOW(); if (iVar1 != 0) { iVar1 = ISICONIC(0x1228,*(undefined2 *)(iVar2 + 4)); if (iVar1 == 0) { SETFOCUS(0x1228,*(undefined2 *)(iVar2 + 0x3f)); } } } return; } /* ===== 1018:1586 FUN_1018_1586 ===== */ void __stdcall16far FUN_1018_1586(undefined4 param_1) { int iVar1; int iVar2; undefined2 uVar3; iVar1 = GETFOCUS(); if (iVar1 != 0) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = ISCHILD(0x1228,iVar1,*(undefined2 *)((int)param_1 + 4)); if (iVar2 != 0) { *(int *)((int)param_1 + 0x3f) = iVar1; } } return; } /* ===== 1018:15c0 FUN_1018_15c0 ===== */ void __stdcall16far FUN_1018_15c0(undefined4 param_1) { int *piVar1; char cVar2; int iVar3; int unaff_BP; int iVar4; undefined2 uVar5; undefined2 uVar6; undefined2 unaff_SS; long lVar7; undefined2 uVar8; int local_c; int local_a; int local_8; int local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); iVar4 = (int)param_1; iVar3 = ISICONIC(); if (iVar3 != 0) { return; } iVar3 = ISZOOMED(0x1228,*(undefined2 *)(iVar4 + 4)); if (iVar3 != 0) { return; } uVar8 = *(undefined2 *)(iVar4 + 4); uVar6 = 0x1228; GETWINDOWRECT(0x1228,&local_c,unaff_SS); *(int *)(iVar4 + 0x2d) = local_8 - local_c; *(int *)(iVar4 + 0x2f) = local_6 - local_a; if (*(int *)(iVar4 + 6) != 0 || *(int *)(iVar4 + 8) != 0) { piVar1 = (int *)*(undefined4 *)(iVar4 + 6); lVar7 = (*(code *)*(undefined2 *)(*piVar1 + 0x30)) (0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),uVar8); if (lVar7 != 0) { uVar6 = 0x1018; cVar2 = FUN_1018_0673(iVar4,uVar5,8); if (cVar2 != '\0') { SCREENTOCLIENT(0x1018,&local_c,unaff_SS); goto LAB_1018_1685; } } if ((*(uint *)(iVar4 + 0x23) & 0x4000) != 0) { SCREENTOCLIENT(uVar6,&local_c,unaff_SS); } } LAB_1018_1685: *(int *)(iVar4 + 0x29) = local_c; *(int *)(iVar4 + 0x2b) = local_a; return; } /* ===== 1018:169d FUN_1018_169d ===== */ void __stdcall16far FUN_1018_169d(undefined4 param_1,undefined4 param_2) { char cVar1; undefined2 uVar2; undefined2 uVar3; undefined2 uVar4; uVar3 = (undefined2)((ulong)param_2 >> 0x10); uVar4 = (undefined2)((ulong)param_1 >> 0x10); uVar2 = (undefined2)param_1; FUN_1018_0ffd(uVar2,uVar4,(int)param_2,uVar3); cVar1 = FUN_1018_0673(uVar2,uVar4,1); if (cVar1 != '\0') { if (*(int *)((int)param_2 + 4) == 0) { FUN_1018_1586(uVar2,uVar4); } else { FUN_1018_1547(uVar2,uVar4); } } return; } /* ===== 1018:16eb FUN_1018_16eb ===== */ void __stdcall16far FUN_1018_16eb(void) { FUN_1020_16e1(); return; } /* ===== 1018:170c FUN_1018_170c ===== */ void __stdcall16far FUN_1018_170c(undefined4 param_1) { int *piVar1; char cVar2; int unaff_BP; int iVar3; int iVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; iVar3 = unaff_BP + 1; uVar7 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); iVar4 = (int)param_1; FUN_1018_0d9b(iVar4,uVar5); uVar6 = 0x1018; cVar2 = FUN_1018_0673(iVar4,uVar5,8); if (cVar2 != '\0') { uVar6 = 0x1228; SETFOCUS(0x1018,*(undefined2 *)(iVar4 + 4),uVar7,iVar3); } if (*(int *)(iVar4 + 0x3b) != 0 || *(int *)(iVar4 + 0x3d) != 0) { piVar1 = (int *)*(undefined4 *)(iVar4 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x10))(uVar6,(int *)piVar1,(int)((ulong)piVar1 >> 0x10)); } FUN_1018_15c0(iVar4,uVar5); return; } /* ===== 1018:1761 FUN_1018_1761 ===== */ void __stdcall16far FUN_1018_1761(int *param_1) { (*(code *)*(undefined2 *)(*param_1 + 0x38))(); (*(code *)*(undefined2 *)(*param_1 + 0xc))(); return; } /* ===== 1018:1788 FUN_1018_1788 ===== */ void __stdcall16far FUN_1018_1788(int *param_1,undefined4 param_2) { int *piVar1; uint extraout_DX; int unaff_BP; int iVar2; int *piVar3; int iVar4; undefined2 uVar5; undefined2 uVar6; undefined2 unaff_CS; int iVar7; undefined2 uVar8; iVar2 = unaff_BP + 1; uVar8 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); piVar3 = (int *)param_1; iVar7 = piVar3[2]; GETWINDOWLONG(unaff_CS,0xfff0); iVar4 = (int)param_2; uVar6 = (undefined2)((ulong)param_2 >> 0x10); if ((extraout_DX & 0x10) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x48))(0x1228,piVar3,uVar5,iVar4,uVar6); } else if (*(int *)((int)piVar3 + 0x3b) == 0 && *(int *)((int)piVar3 + 0x3d) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0xc))(0x1228,piVar3,uVar5,iVar4,uVar6,iVar7,uVar8,iVar2); } else { piVar1 = (int *)*(undefined4 *)((int)piVar3 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x20)) (0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),*(undefined2 *)(iVar4 + 6), *(undefined2 *)(iVar4 + 4)); } return; } /* ===== 1018:17f8 FUN_1018_17f8 ===== */ void __stdcall16far FUN_1018_17f8(int *param_1,undefined4 param_2) { int *piVar1; uint extraout_DX; int unaff_BP; int iVar2; int *piVar3; int iVar4; undefined2 uVar5; undefined2 uVar6; undefined2 unaff_CS; int iVar7; undefined2 uVar8; iVar2 = unaff_BP + 1; uVar8 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); piVar3 = (int *)param_1; iVar7 = piVar3[2]; GETWINDOWLONG(unaff_CS,0xfff0); iVar4 = (int)param_2; uVar6 = (undefined2)((ulong)param_2 >> 0x10); if ((extraout_DX & 0x20) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x48))(0x1228,piVar3,uVar5,iVar4,uVar6); } else if (*(int *)((int)piVar3 + 0x3b) == 0 && *(int *)((int)piVar3 + 0x3d) == 0) { (*(code *)*(undefined2 *)(*param_1 + 0xc))(0x1228,piVar3,uVar5,iVar4,uVar6,iVar7,uVar8,iVar2); } else { piVar1 = (int *)*(undefined4 *)((int)piVar3 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x1c)) (0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),*(undefined2 *)(iVar4 + 6), *(undefined2 *)(iVar4 + 4)); } return; } /* ===== 1018:1868 FUN_1018_1868 ===== */ void __stdcall16far FUN_1018_1868(int *param_1) { int *piVar1; int unaff_BP; int *piVar2; undefined2 uVar3; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 local_24 [32]; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar3 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; BEGINPAINT(unaff_CS,local_24,unaff_SS,piVar2[2]); if (*(int *)((int)piVar2 + 0x3b) != 0 || *(int *)((int)piVar2 + 0x3d) != 0) { piVar1 = (int *)*(undefined4 *)((int)piVar2 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x14)) (0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),local_24); } (*(code *)*(undefined2 *)(*param_1 + 0x4c))(0x1228,piVar2,uVar3,local_24); if (*(int *)((int)piVar2 + 0x3b) != 0 || *(int *)((int)piVar2 + 0x3d) != 0) { piVar1 = (int *)*(undefined4 *)((int)piVar2 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x18))(0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10)); } ENDPAINT(0x1228,local_24,unaff_SS); return; } /* ===== 1018:18e9 FUN_1018_18e9 ===== */ void __stdcall16far FUN_1018_18e9(int *param_1,undefined4 param_2) { undefined2 *puVar1; int unaff_BP; int *piVar2; int iVar3; undefined2 uVar4; undefined2 uVar5; undefined2 unaff_CS; undefined2 uVar6; undefined2 unaff_SS; int local_c; int local_a; int local_8; int local_6; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar4 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; iVar3 = (int)param_2; uVar5 = (undefined2)((ulong)param_2 >> 0x10); if ((*(int *)((int)piVar2 + 0x3b) != 0 || *(int *)((int)piVar2 + 0x3d) != 0) && (*(int *)(iVar3 + 4) != 1)) { puVar1 = (undefined2 *)(*(int *)*(undefined4 *)((int)piVar2 + 0x3b) + 0xc); (*(code *)*puVar1)(); } uVar6 = unaff_CS; if (*(int *)(iVar3 + 4) == 0) { uVar6 = 0x1228; GETWINDOWRECT(unaff_CS,&local_c,unaff_SS); *(int *)((int)piVar2 + 0x2f) = local_6 - local_a; *(int *)((int)piVar2 + 0x2d) = local_8 - local_c; } (*(code *)*(undefined2 *)(*param_1 + 0xc))(uVar6,piVar2,uVar4,iVar3,uVar5); return; } /* ===== 1018:1960 FUN_1018_1960 ===== */ void __stdcall16far FUN_1018_1960(int *param_1,undefined4 param_2) { int unaff_BP; int iVar1; undefined2 uVar2; undefined2 uVar3; iVar1 = unaff_BP + 1; uVar3 = 0x1028; uVar2 = (undefined2)((ulong)param_1 >> 0x10); FUN_1018_15c0((int *)param_1,uVar2); (*(code *)*(undefined2 *)(*param_1 + 0xc)) (0x1018,(int *)param_1,uVar2,(int)param_2,(int)((ulong)param_2 >> 0x10),uVar3,iVar1); return; } /* ===== 1018:1986 FUN_1018_1986 ===== */ void __stdcall16far FUN_1018_1986(int *param_1,undefined4 param_2) { int *piVar1; int iVar2; int unaff_BP; int *piVar3; undefined2 uVar4; undefined2 unaff_CS; undefined2 unaff_SS; int iVar5; undefined1 local_16 [2]; int local_14; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; uVar4 = (undefined2)((ulong)param_1 >> 0x10); piVar3 = (int *)param_1; if ((*(int *)((int)piVar3 + 0x3b) != 0 || *(int *)((int)piVar3 + 0x3d) != 0) && (*(char *)((int)*(undefined4 *)((int)piVar3 + 0x3b) + 0x22) != '\0')) { iVar5 = piVar3[2]; SETCAPTURE(); do { iVar2 = PEEKMESSAGE(0x1228,1,0,0,0,local_16,unaff_SS); if (iVar2 != 0) { TRANSLATEMESSAGE(0x1228,local_16); DISPATCHMESSAGE(0x1228,local_16); } piVar1 = (int *)*(undefined4 *)((int)piVar3 + 0x3b); (*(code *)*(undefined2 *)(*piVar1 + 0x24)) (0x1228,(int *)piVar1,(int)((ulong)piVar1 >> 0x10),iVar5); } while (local_14 != 0x202); unaff_CS = 0x1228; RELEASECAPTURE(0x1228); } (*(code *)*(undefined2 *)(*param_1 + 0xc)) (unaff_CS,piVar3,uVar4,(int)param_2,(int)((ulong)param_2 >> 0x10)); return; } /* ===== 1018:1a0e FUN_1018_1a0e ===== */ void __stdcall16far FUN_1018_1a0e(int *param_1,undefined4 param_2) { int iVar1; char cVar2; int unaff_BP; int iVar3; int *piVar4; undefined2 uVar5; undefined2 uVar6; undefined2 uVar7; iVar3 = unaff_BP + 1; uVar7 = 0x1028; uVar5 = (undefined2)((ulong)param_1 >> 0x10); piVar4 = (int *)param_1; cVar2 = FUN_1018_0673(piVar4,uVar5,1); uVar6 = (undefined2)((ulong)param_2 >> 0x10); if (cVar2 != '\0') { iVar1 = *(int *)((int)param_2 + 4); if (iVar1 == -0xfe0) { FUN_1018_1586(piVar4,uVar5); } else if (iVar1 == -0xee0) { FUN_1018_1547(piVar4,uVar5); } } (*(code *)*(undefined2 *)(*param_1 + 0xc))(0x1018,piVar4,uVar5,(int)param_2,uVar6,uVar7,iVar3); return; } /* ===== 1018:1a61 FUN_1018_1a61 ===== */ int * __stdcall16far FUN_1018_1a61(int *param_1,undefined2 param_2,int param_3,int param_4) { undefined2 uVar1; int unaff_BP; int *piVar2; undefined2 uVar3; bool bVar4; bVar4 = true; FUN_1020_03ef(0x1028,unaff_BP + 1); if (!bVar4) { uVar3 = (undefined2)((ulong)param_1 >> 0x10); piVar2 = (int *)param_1; FUN_1008_2d99(piVar2,uVar3,0); piVar2[2] = param_3; piVar2[3] = param_4; DAT_1028_064e._0_2_ = piVar2; DAT_1028_064e._2_2_ = uVar3; piVar2[6] = 0; piVar2[1] = 0; piVar2[4] = 0; piVar2[5] = 0; piVar2[7] = 0; piVar2[8] = 0; uVar1 = uVar3; DAT_1028_0672 = MAKEPROCINSTANCE((void *)CONCAT22(0x133,DAT_1028_06fe),0x1018); DAT_1028_0674 = uVar1; FUN_1008_2e76(); if (DAT_1028_06fc == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x10))(0x1008,piVar2,uVar3); } if (piVar2[1] == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x14))(0x1008,piVar2,uVar3); } } return param_1; } /* ===== 1018:1b08 FUN_1018_1b08 ===== */ void __stdcall16far FUN_1018_1b08(undefined4 param_1) { int unaff_BP; int iVar1; undefined2 uVar2; iVar1 = unaff_BP + 1; uVar2 = 0x1028; FREEPROCINSTANCE((void *)CONCAT22(DAT_1028_0674,DAT_1028_0672)); FUN_1008_2dcd((int)param_1,(int)((ulong)param_1 >> 0x10),0); FUN_1020_0439(uVar2,iVar1); return; } /* ===== 1018:1b35 FUN_1018_1b35 ===== */ undefined1 __stdcall16far FUN_1018_1b35(void) { return 0; } /* ===== 1018:1b4b FUN_1018_1b4b ===== */ void __stdcall16far FUN_1018_1b4b(void) { return; } /* ===== 1018:1b57 FUN_1018_1b57 ===== */ void __stdcall16far FUN_1018_1b57(int *param_1) { int *piVar1; undefined2 uVar2; undefined4 uVar3; uVar2 = (undefined2)((ulong)param_1 >> 0x10); piVar1 = (int *)param_1; (*(code *)*(undefined2 *)(*param_1 + 0x18))(); uVar3 = (*(code *)*(undefined2 *)(*param_1 + 0x34))(); piVar1[4] = (int)uVar3; piVar1[5] = (int)((ulong)uVar3 >> 0x10); if (piVar1[4] == 0 && piVar1[5] == 0) { piVar1[1] = -5; } else { FUN_1018_0e9e((int)*(undefined4 *)(piVar1 + 4),(int)((ulong)*(undefined4 *)(piVar1 + 4) >> 0x10) ,DAT_1028_0700); } return; } /* ===== 1018:1bb0 FUN_1018_1bb0 ===== */ void __stdcall16far FUN_1018_1bb0(int *param_1) { if (((int *)param_1)[1] == 0) { (*(code *)*(undefined2 *)(*param_1 + 0x20))(); } else { (*(code *)*(undefined2 *)(*param_1 + 0x40))(); } return; } /* ===== 1018:1bdf FUN_1018_1bdf ===== */ void __stdcall16far FUN_1018_1bdf(undefined4 param_1,undefined2 param_2,undefined2 param_3) { undefined2 uVar1; uVar1 = (undefined2)((ulong)param_1 >> 0x10); *(undefined2 *)((int)param_1 + 0xe) = param_2; *(undefined2 *)((int)param_1 + 0x10) = param_3; return; } /* ===== 1018:1bfc FUN_1018_1bfc ===== */ void __stdcall16far FUN_1018_1bfc(int *param_1) { char cVar1; char cVar2; int iVar3; int unaff_BP; int *piVar4; undefined2 uVar5; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 local_16 [2]; int local_14; int local_12; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; cVar1 = '\0'; do { iVar3 = PEEKMESSAGE(unaff_CS,1,0,0,0,local_16,unaff_SS); piVar4 = (int *)param_1; uVar5 = (undefined2)((ulong)param_1 >> 0x10); if (iVar3 == 0) { cVar2 = (*(code *)*(undefined2 *)(*param_1 + 0xc))(0x1228,piVar4,uVar5); if (cVar2 == '\0') { cVar1 = '\x12'; WAITMESSAGE(); } } else if (local_14 == 0x12) { cVar1 = '\x01'; } else { cVar2 = (*(code *)*(undefined2 *)(*param_1 + 0x24))(0x1228,piVar4,uVar5,local_16); if (cVar2 == '\0') { TRANSLATEMESSAGE(0x1228,local_16); DISPATCHMESSAGE(0x1228,local_16); } } unaff_CS = 0x1228; } while (cVar1 == '\0'); piVar4[1] = local_12; return; } /* ===== 1018:1c7f FUN_1018_1c7f ===== */ undefined1 __stdcall16far FUN_1018_1c7f(int *param_1) { char cVar1; cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x28))(); if (((cVar1 == '\0') && (cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x30))(), cVar1 == '\0')) && (cVar1 = (*(code *)*(undefined2 *)(*param_1 + 0x2c))(), cVar1 == '\0')) { return 0; } return 1; } /* ===== 1018:1cd6 FUN_1018_1cd6 ===== */ undefined2 __stdcall16far FUN_1018_1cd6(undefined4 param_1,undefined4 param_2) { uint uVar1; int iVar2; undefined2 uVar3; undefined2 unaff_CS; undefined1 local_5; local_5 = false; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; uVar1 = *(uint *)(iVar2 + 0xe) | *(uint *)(iVar2 + 0x10); if ((uVar1 != 0) && (*(int *)((int)*(undefined4 *)(iVar2 + 0xe) + 4) != 0)) { iVar2 = ISDIALOGMESSAGE(unaff_CS,(int)param_2,(int)((ulong)param_2 >> 0x10)); local_5 = iVar2 != 0; uVar1 = CONCAT11((char)((uint)-iVar2 >> 8),local_5); } return CONCAT11((char)(uVar1 >> 8),local_5); } /* ===== 1018:1d22 FUN_1018_1d22 ===== */ undefined2 __stdcall16far FUN_1018_1d22(undefined4 param_1,undefined4 param_2) { int iVar1; undefined2 uVar2; undefined2 unaff_CS; uVar2 = (undefined2)((ulong)param_1 >> 0x10); if (*(int *)((int)param_1 + 0xc) != 0) { iVar1 = TRANSLATEACCELERATOR (unaff_CS,(int)param_2,(int)((ulong)param_2 >> 0x10), *(undefined2 *)((int)param_1 + 0xc)); if (iVar1 != 0) { return 1; } } return 0; } /* ===== 1018:1d64 FUN_1018_1d64 ===== */ undefined2 __stdcall16far FUN_1018_1d64(undefined4 param_1,undefined4 param_2) { undefined2 *puVar1; int iVar2; undefined2 unaff_CS; long lVar3; puVar1 = (undefined2 *)(*(int *)*(undefined4 *)((int)param_1 + 8) + 0x30); lVar3 = (*(code *)*puVar1)(); if ((lVar3 != 0) && (iVar2 = TRANSLATEMDISYSACCEL(unaff_CS,(int)param_2,(int)((ulong)param_2 >> 0x10)), iVar2 != 0) ) { return 1; } return 0; } /* ===== 1018:1db1 FUN_1018_1db1 ===== */ int * __stdcall16far FUN_1018_1db1(int *param_1,int *param_2) { char cVar1; undefined1 extraout_AH; undefined1 extraout_AH_00; int unaff_BP; undefined2 uVar2; int *piVar3; int *piVar4; int iVar5; int iVar6; piVar3 = (int *)0x0; iVar5 = 0; piVar4 = piVar3; iVar6 = iVar5; if ((int *)param_2 != (int *)0x0 || param_2._2_2_ != 0) { cVar1 = FUN_1008_2de0(0,0,0x1028,unaff_BP + 1); uVar2 = (undefined2)((ulong)param_1 >> 0x10); if (cVar1 == '\0') { piVar4 = (int *)param_2; iVar6 = param_2._2_2_; if (((int *)param_2)[1] != 0) { (*(code *)*(undefined2 *)(*param_1 + 0x40))(0x1008,(int *)param_1,uVar2,((int *)param_2)[1]) ; (*(code *)*(undefined2 *)(*param_2 + 8)) (0x1008,(int *)param_2,param_2._2_2_,CONCAT11(extraout_AH_00,1)); piVar4 = piVar3; iVar6 = iVar5; } } else { (*(code *)*(undefined2 *)(*param_1 + 0x40))(0x1008,(int *)param_1,uVar2,0xfffe); (*(code *)*(undefined2 *)(*param_2 + 8)) (0x1008,(int *)param_2,param_2._2_2_,CONCAT11(extraout_AH,1)); FUN_1008_2dff(); piVar4 = piVar3; iVar6 = iVar5; } } return (int *)CONCAT22(iVar6,piVar4); } /* ===== 1018:1e39 FUN_1018_1e39 ===== */ int * __stdcall16far FUN_1018_1e39(int *param_1,int *param_2) { char cVar1; long lVar2; int *local_8; int local_6; local_8 = (int *)0x0; local_6 = 0; if ((int *)param_2 != (int *)0x0 || param_2._2_2_ != 0) { lVar2 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); if (lVar2 != 0) { cVar1 = (*(code *)*(undefined2 *)(*param_2 + 0x20))(); if (cVar1 == '\0') { (*(code *)*(undefined2 *)(*param_1 + 0x40))(); (*(code *)*(undefined2 *)(*param_2 + 8))(); } else { local_8 = (int *)param_2; local_6 = param_2._2_2_; } } } return (int *)CONCAT22(local_6,local_8); } /* ===== 1018:1eb0 FUN_1018_1eb0 ===== */ int __stdcall16far FUN_1018_1eb0(int *param_1,int *param_2) { int iVar1; long lVar2; int local_6; local_6 = 2; lVar2 = (*(code *)*(undefined2 *)(*param_1 + 0x3c))(); if (lVar2 != 0) { iVar1 = (*(code *)*(undefined2 *)(*param_2 + 0x4c))(); if (iVar1 < 0) { (*(code *)*(undefined2 *)(*param_1 + 0x40))(); iVar1 = local_6; } local_6 = iVar1; (*(code *)*(undefined2 *)(*param_2 + 8))(); } return local_6; } /* ===== 1018:1f14 FUN_1018_1f14 ===== */ void __stdcall16far FUN_1018_1f14(void) { int iVar1; int unaff_BP; undefined2 unaff_CS; undefined2 unaff_SS; undefined1 local_24 [32]; undefined2 uStack_4; int iStack_2; iStack_2 = unaff_BP + 1; uStack_4 = 0x1028; WVSPRINTF(unaff_CS,&stack0x0008,unaff_SS,0x698,0x1028,local_24); iVar1 = (*DAT_1028_0666)(0x1228,0x14,0x6b3,0x1028,local_24); if (iVar1 == 7) { FUN_1020_0061(0x1228); } return; } /* ===== 1018:1f56 FUN_1018_1f56 ===== */ undefined1 __stdcall16far FUN_1018_1f56(undefined4 param_1) { undefined2 *puVar1; undefined1 uVar2; puVar1 = (undefined2 *)(*(int *)*(undefined4 *)((int)param_1 + 8) + 0x3c); uVar2 = (*(code *)*puVar1)(); return uVar2; } /* ===== 1020:0002 FUN_1020_0002 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16far FUN_1020_0002(void) { code *pcVar1; int in_AX; int iVar2; uint uVar3; undefined2 in_DX; undefined2 in_BX; int unaff_BP; int iVar4; undefined2 unaff_SI; undefined2 unaff_DI; int unaff_ES; undefined2 unaff_CS; int in_stack_00000000; undefined2 uVar5; iVar4 = unaff_BP + 1; uVar5 = 0x1028; if (in_AX != 0) { DAT_1028_06fc = unaff_SI; DAT_1028_06fe = unaff_DI; DAT_1028_0700 = in_DX; DAT_1028_0702._0_2_ = in_BX; DAT_1028_0702._2_2_ = unaff_ES; DAT_1028_071c = unaff_ES; WAITEVENT(0); unaff_CS = 0x1228; iVar2 = INITAPP(0x1228,DAT_1028_06fe); if (iVar2 != 0) { uVar3 = GETWINFLAGS(0x1228); DAT_1028_0726 = 0; if (((uVar3 & 0xc0) == 0) && (DAT_1028_0726 = 1, (uVar3 & 2) == 0)) { DAT_1028_0726 = 2; } DAT_1028_0724 = 0x6c; return; } } pcVar1 = (code *)swi(0x21); _DAT_1028_0716 = (*pcVar1)(uVar5); DAT_1028_0718 = iVar4; if ((DAT_1028_0718 != 0 || in_stack_00000000 != 0) && (in_stack_00000000 != -1)) { in_stack_00000000 = *(int *)0x0; } DAT_1028_071a = in_stack_00000000; if (DAT_1028_071c != 0) { FUN_1020_00d2(); } if (DAT_1028_0718 != 0 || DAT_1028_071a != 0) { FUN_1020_00f0(); FUN_1020_00f0(); FUN_1020_00f0(); MESSAGEBOX(unaff_CS,0x1010,0,0,0x728,0x1028); } pcVar1 = (code *)swi(0x21); (*pcVar1)(); if ((int)((ulong)_DAT_1028_0712 >> 0x10) != 0 || (int)_DAT_1028_0712 != 0) { _DAT_1028_0712 = 0; DAT_1028_071e = 0; return; } return; } /* ===== 1020:005d FUN_1020_005d ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void FUN_1020_005d(int param_1) { code *pcVar1; undefined2 in_AX; undefined2 unaff_CS; int in_stack_00000000; if ((in_stack_00000000 != 0 || param_1 != 0) && (param_1 != -1)) { param_1 = *(int *)0x0; } _DAT_1028_0716 = in_AX; DAT_1028_0718 = in_stack_00000000; DAT_1028_071a = param_1; if (DAT_1028_071c != 0) { FUN_1020_00d2(); } if (DAT_1028_0718 != 0 || DAT_1028_071a != 0) { FUN_1020_00f0(); FUN_1020_00f0(); FUN_1020_00f0(); MESSAGEBOX(unaff_CS,0x1010,0,0,0x728); } pcVar1 = (code *)swi(0x21); (*pcVar1)(); if ((int)((ulong)_DAT_1028_0712 >> 0x10) != 0 || (int)_DAT_1028_0712 != 0) { _DAT_1028_0712 = 0; DAT_1028_071e = 0; return; } return; } /* ===== 1020:0061 FUN_1020_0061 ===== */ /* WARNING: Removing unreachable block (ram,0x1020006e) */ /* WARNING: Removing unreachable block (ram,0x10200073) */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void FUN_1020_0061(void) { code *pcVar1; undefined2 in_AX; undefined2 unaff_CS; DAT_1028_0718 = 0; DAT_1028_071a = 0; _DAT_1028_0716 = in_AX; if (DAT_1028_071c != 0) { FUN_1020_00d2(); } if (DAT_1028_0718 != 0 || DAT_1028_071a != 0) { FUN_1020_00f0(); FUN_1020_00f0(); FUN_1020_00f0(); MESSAGEBOX(unaff_CS,0x1010,0,0,0x728,0x1028); } pcVar1 = (code *)swi(0x21); (*pcVar1)(); if ((int)((ulong)_DAT_1028_0712 >> 0x10) == 0 && (int)_DAT_1028_0712 == 0) { return; } _DAT_1028_0712 = 0; DAT_1028_071e = 0; return; } /* ===== 1020:00d2 FUN_1020_00d2 ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16near FUN_1020_00d2(void) { if ((int)((ulong)_DAT_1028_0712 >> 0x10) != 0 || (int)_DAT_1028_0712 != 0) { _DAT_1028_0712 = 0; DAT_1028_071e = 0; return; } return; } /* ===== 1020:00f0 FUN_1020_00f0 ===== */ void __cdecl16near FUN_1020_00f0(void) { uint in_AX; uint uVar1; uint in_CX; byte bVar2; byte *in_BX; char cVar3; do { uVar1 = in_AX / in_CX; cVar3 = (char)(in_AX % in_CX); bVar2 = cVar3 + 0x30; if (0x39 < bVar2) { bVar2 = cVar3 + 0x37; } in_BX = in_BX + -1; *in_BX = bVar2; in_AX = uVar1; } while (uVar1 != 0); return; } /* ===== 1020:012d FUN_1020_012d ===== */ void __stdcall16far FUN_1020_012d(void) { int unaff_BP; undefined1 in_CF; FUN_1020_01ca(0x1028,unaff_BP + 1); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0147 FUN_1020_0147 ===== */ void __stdcall16far FUN_1020_0147(void) { int unaff_BP; undefined1 in_CF; FUN_1020_02d7(0x1028,unaff_BP + 1); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0167 FUN_1020_0167 ===== */ int __cdecl16far FUN_1020_0167(void) { int iVar1; int iVar2; iVar1 = GETFREESPACE(); iVar2 = DAT_1028_0706; if (DAT_1028_0706 != 0) { do { iVar1 = iVar1 + *(int *)0x8; iVar2 = *(int *)0xa; } while (iVar2 != DAT_1028_0706); } return iVar1; } /* ===== 1020:0195 runtime_1020_0195 ===== */ void __cdecl16far runtime_1020_0195(void) { uint uVar1; int iVar2; int in_DX; uVar1 = GLOBALCOMPACT(0); if ((in_DX == 0) && (iVar2 = DAT_1028_0706, DAT_1028_0706 != 0)) { do { if (uVar1 < *(uint *)0x8) { uVar1 = *(uint *)0x8; } iVar2 = *(int *)0xa; } while (iVar2 != DAT_1028_0706); } return; } /* ===== 1020:01ca FUN_1020_01ca ===== */ void __cdecl16near FUN_1020_01ca(void) { uint uVar1; uint in_AX; uint uVar2; undefined1 uVar3; uVar1 = in_AX; if (in_AX != 0) { do { DAT_1028_4d38 = uVar1; uVar3 = DAT_1028_4d38 < DAT_1028_0708; if ((bool)uVar3) { FUN_1020_023c(); if (!(bool)uVar3) { return; } FUN_1020_0222(); LAB_1020_0201: if (!(bool)uVar3) { return; } } else { FUN_1020_0222(); if (!(bool)uVar3) { return; } if ((DAT_1028_0708 != 0) && (uVar3 = DAT_1028_4d38 < DAT_1028_070a - 0xcU, DAT_1028_4d38 <= DAT_1028_070a - 0xcU)) { FUN_1020_023c(); goto LAB_1020_0201; } } uVar2 = 0; if (DAT_1028_070e != (code *)0x0 || DAT_1028_0710 != 0) { uVar2 = (*DAT_1028_070e)(); } uVar1 = DAT_1028_4d38; } while (1 < uVar2); } return; } /* ===== 1020:0222 FUN_1020_0222 ===== */ void __cdecl16near FUN_1020_0222(void) { ushort in_AX; ushort arg1; arg1 = GLOBALALLOC(in_AX,0); if (arg1 != 0) { GLOBALLOCK(arg1); } return; } /* ===== 1020:023c FUN_1020_023c ===== */ undefined2 __cdecl16near FUN_1020_023c(void) { uint uVar1; undefined2 uVar2; undefined2 in_BX; uint unaff_ES; bool bVar3; bVar3 = false; uVar1 = DAT_1028_0706; if (DAT_1028_0706 != 0) { do { unaff_ES = uVar1; FUN_1020_02a6(); if (!bVar3) { DAT_1028_0706 = unaff_ES; return in_BX; } uVar1 = *(uint *)0xa; bVar3 = uVar1 < DAT_1028_0706; } while (uVar1 != DAT_1028_0706); } uVar2 = FUN_1020_026a(); if (!bVar3) { uVar2 = in_BX; FUN_1020_02a6(); DAT_1028_0706 = unaff_ES; } return uVar2; } /* ===== 1020:026a FUN_1020_026a ===== */ undefined2 __cdecl16near FUN_1020_026a(void) { undefined2 in_AX; int iVar1; undefined2 uVar2; undefined2 extraout_DX; undefined1 in_CF; FUN_1020_0222(); if (!(bool)in_CF) { *(undefined2 *)0x0 = 0x5054; *(undefined2 *)0x2 = 0; *(undefined2 *)0x4 = 0xc; *(undefined2 *)0x6 = 0; iVar1 = DAT_1028_070a + -0xc; *(int *)0x8 = iVar1; uVar2 = extraout_DX; if (DAT_1028_0706 != 0) { LOCK(); uVar2 = *(undefined2 *)0xa; *(undefined2 *)0xa = extraout_DX; UNLOCK(); } *(undefined2 *)0xa = uVar2; *(undefined2 *)0xc = 0; *(int *)0xe = iVar1; } return in_AX; } /* ===== 1020:02a6 FUN_1020_02a6 ===== */ void __cdecl16near FUN_1020_02a6(void) { int *piVar1; uint in_AX; int iVar2; int *piVar3; int *piVar4; undefined2 unaff_ES; piVar1 = (int *)0x4; do { piVar3 = piVar1; piVar1 = (int *)*piVar3; if (piVar1 == (int *)0x0) { return; } iVar2 = piVar1[1] - in_AX; } while ((uint)piVar1[1] < in_AX); piVar4 = (int *)*piVar1; if (iVar2 != 0) { piVar4 = (int *)((int)piVar1 + in_AX); *piVar4 = *piVar1; piVar4[1] = iVar2; } *piVar3 = (int)piVar4; *(int *)0x8 = *(int *)0x8 - in_AX; return; } /* ===== 1020:02d7 FUN_1020_02d7 ===== */ void __cdecl16near FUN_1020_02d7(void) { ushort uVar1; int in_AX; int iVar2; uint uVar3; uint *in_CX; ushort in_BX; uint *puVar4; uint *puVar5; if (in_AX == 0) { return; } if (in_CX != (uint *)0x0) { uVar3 = in_AX + 3U & 0xfffc; if (*(int *)0x0 != 0x5054) { return; } if (((uint)in_CX & 3) != 0) { return; } puVar5 = (uint *)0x4; do { puVar4 = puVar5; puVar5 = (uint *)*puVar4; if (puVar5 == (uint *)0x0) goto LAB_1020_0306; } while (puVar5 <= in_CX && in_CX != puVar5); if (in_CX == puVar5) { return; } LAB_1020_0306: *in_CX = (uint)puVar5; in_CX[1] = uVar3; iVar2 = uVar3 + *(int *)0x8; *(int *)0x8 = iVar2; if (iVar2 + 0xc != DAT_1028_070a) { FUN_1020_0327(); *puVar4 = (uint)in_CX; puVar5 = (uint *)((int)puVar4 + puVar4[1]); if (puVar5 != (uint *)*puVar4) { return; } *puVar4 = *puVar5; puVar4[1] = puVar4[1] + puVar5[1]; return; } uVar1 = DAT_1028_0706; DAT_1028_0706 = 0; if (in_BX != *(ushort *)0xa) { do { DAT_1028_0706 = uVar1; uVar1 = *(ushort *)0xa; } while (*(ushort *)0xa != in_BX); *(ushort *)0xa = *(ushort *)0xa; } } if ((in_BX != 0x1028) && (uVar3 = GLOBALHANDLE(in_BX), uVar3 != 0)) { GLOBALUNLOCK(uVar3); GLOBALFREE(uVar3); return; } return; } /* ===== 1020:0327 FUN_1020_0327 ===== */ void __cdecl16near FUN_1020_0327(void) { int *in_BX; int *piVar1; undefined2 unaff_ES; piVar1 = (int *)((int)in_BX + in_BX[1]); if (piVar1 == (int *)*in_BX) { *in_BX = *piVar1; in_BX[1] = in_BX[1] + piVar1[1]; } return; } /* ===== 1020:0388 FUN_1020_0388 ===== */ undefined2 __cdecl16far FUN_1020_0388(void) { undefined2 uVar1; uVar1 = DAT_1028_071e; LOCK(); DAT_1028_071e = 0; UNLOCK(); return uVar1; } /* ===== 1020:038f FUN_1020_038f ===== */ void __cdecl16far FUN_1020_038f(void) { if (DAT_1028_071e == 0) { return; } FUN_1020_005d(); return; } /* ===== 1020:039d FUN_1020_039d ===== */ void __cdecl16far FUN_1020_039d(void) { uint in_AX; int in_DX; uint *unaff_DI; undefined2 in_stack_00000002; if ((((int)unaff_DI[1] < in_DX) || (((int)unaff_DI[1] <= in_DX && (*unaff_DI <= in_AX)))) && ((in_DX < (int)unaff_DI[3] || ((in_DX <= (int)unaff_DI[3] && (in_AX <= unaff_DI[2])))))) { return; } FUN_1020_005d(); return; } /* ===== 1020:03c5 runtime_1020_03c5 ===== */ void runtime_1020_03c5(void) { FUN_1020_005d(); return; } /* ===== 1020:03cb FUN_1020_03cb ===== */ void __cdecl16far FUN_1020_03cb(void) { uint in_AX; uint uVar1; undefined2 unaff_SS; if (((in_AX < 0xfc00) && ((undefined1 *)(in_AX + 0x400) < &stack0x0000)) && (uVar1 = -((int)(in_AX + 0x400) - (int)&stack0x0000), *(uint *)0xa <= uVar1)) { if (uVar1 < *(uint *)0xe) { *(uint *)0xe = uVar1; } return; } FUN_1020_005d(); return; } /* ===== 1020:03ef FUN_1020_03ef ===== */ /* WARNING: Unable to track spacebase fully for stack */ void __cdecl16far FUN_1020_03ef(void) { int iVar1; int unaff_BP; int unaff_DI; undefined2 unaff_SS; bool bVar2; long lVar3; iVar1 = *(int *)(unaff_BP + 10); if (iVar1 != 0) { lVar3 = *(long *)(unaff_BP + 6); bVar2 = false; if (lVar3 == 0) { lVar3 = FUN_1020_01ca(); if (bVar2) { FUN_1020_005d(); return; } if (lVar3 == 0) { return; } *(undefined2 *)(unaff_BP + 6) = (int)lVar3; *(undefined2 *)(unaff_BP + 8) = (int)((ulong)lVar3 >> 0x10); } else { *(undefined2 *)(unaff_BP + 10) = 0; } *(int *)((int)lVar3 + unaff_DI) = iVar1; } return; } /* ===== 1020:0439 FUN_1020_0439 ===== */ /* WARNING: Unable to track spacebase fully for stack */ void __cdecl16far FUN_1020_0439(void) { int unaff_BP; undefined2 unaff_SS; bool bVar1; bVar1 = false; if (*(int *)(unaff_BP + 10) != 0) { FUN_1020_02d7(0x1028); if (bVar1) { FUN_1020_005d(); return; } } *(undefined2 *)(unaff_BP + 6) = 0; *(undefined2 *)(unaff_BP + 8) = 0; return; } /* ===== 1020:046c runtime_1020_046c ===== */ void __stdcall16far runtime_1020_046c(int param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; int *piVar3; int iVar4; undefined2 *puVar5; undefined1 *puVar6; undefined1 *puVar7; undefined2 uVar8; uVar8 = (undefined2)((ulong)param_2 >> 0x10); puVar7 = (undefined1 *)param_2; puVar5 = (undefined2 *)(puVar7 + param_1); piVar3 = (int *)*puVar5; puVar6 = (undefined1 *)param_3; for (iVar4 = *piVar3; iVar4 != 0; iVar4 = iVar4 + -1) { puVar2 = puVar7; puVar7 = puVar7 + 1; puVar1 = puVar6; puVar6 = puVar6 + 1; *puVar2 = *puVar1; } *puVar5 = piVar3; return; } /* ===== 1020:048f runtime_1020_048f ===== */ void __cdecl16far runtime_1020_048f(void) { int *unaff_DI; if ((*unaff_DI != 0) && (*unaff_DI + unaff_DI[1] == 0)) { return; } FUN_1020_005d(); return; } /* ===== 1020:049f runtime_1020_049f ===== */ /* WARNING: Removing unreachable block (ram,0x102004df) */ /* WARNING: Removing unreachable block (ram,0x102004e4) */ void __stdcall16far runtime_1020_049f(char *param_1,undefined2 *param_2) { char *pcVar1; char *pcVar2; int iVar3; char *pcVar4; undefined2 *puVar5; char *pcVar6; undefined2 uVar7; uVar7 = (undefined2)((ulong)param_2 >> 0x10); puVar5 = (undefined2 *)param_2; pcVar4 = (char *)param_1; *param_2 = 0; puVar5[1] = 0xd7b0; puVar5[2] = 0x80; puVar5[3] = 0; puVar5[4] = 0; puVar5[5] = 0; puVar5[6] = puVar5 + 0x40; puVar5[7] = uVar7; pcVar6 = (char *)(puVar5 + 9); puVar5[8] = 0xbe9; pcVar6[0] = ' '; pcVar6[1] = '\x10'; for (iVar3 = 0xe; pcVar6 = pcVar6 + 2, iVar3 != 0; iVar3 = iVar3 + -1) { pcVar6[0] = '\0'; pcVar6[1] = '\0'; } iVar3 = 0x4f; do { pcVar1 = pcVar4; pcVar4 = pcVar4 + 1; if (*pcVar1 == '\0') break; pcVar2 = pcVar6; pcVar6 = pcVar6 + 1; *pcVar2 = *pcVar1; iVar3 = iVar3 + -1; } while (iVar3 != 0); *pcVar6 = '\0'; Ordinal_5(); return; } /* ===== 1020:04fc runtime_1020_04fc ===== */ void __stdcall16far runtime_1020_04fc(undefined2 param_1,undefined2 param_2,undefined2 param_3,undefined4 param_4) { int iVar1; undefined2 uVar2; uVar2 = (undefined2)((ulong)param_4 >> 0x10); iVar1 = (int)param_4; *(undefined2 *)(iVar1 + 4) = param_1; *(undefined2 *)(iVar1 + 0xc) = param_2; *(undefined2 *)(iVar1 + 0xe) = param_3; *(undefined2 *)(iVar1 + 8) = 0; *(undefined2 *)(iVar1 + 10) = 0; return; } /* ===== 1020:0527 FUN_1020_0527 ===== */ void FUN_1020_0527(void) { FUN_1020_0534(); return; } /* ===== 1020:052c FUN_1020_052c ===== */ void FUN_1020_052c(void) { FUN_1020_0534(); return; } /* ===== 1020:0534 FUN_1020_0534 ===== */ void __stdcall16far FUN_1020_0534(undefined4 param_1) { int iVar1; undefined2 in_DX; int unaff_BP; int iVar2; int iVar3; undefined2 uVar4; bool bVar5; undefined2 uVar6; iVar2 = unaff_BP + 1; uVar6 = 0x1028; uVar4 = (undefined2)((ulong)param_1 >> 0x10); iVar3 = (int)param_1; iVar1 = *(int *)(iVar3 + 2); if ((iVar1 == -0x284f) || (iVar1 == -0x284e)) { FUN_1020_0586(iVar3,uVar4); } else if (iVar1 != -0x2850) { DAT_1028_071e = 0x66; return; } bVar5 = true; *(undefined2 *)(iVar3 + 2) = in_DX; *(undefined2 *)(iVar3 + 8) = 0; *(undefined2 *)(iVar3 + 10) = 0; FUN_1020_05c7(uVar6,iVar2); if (!bVar5) { *(undefined2 *)(iVar3 + 2) = 0xd7b0; } return; } /* ===== 1020:0586 FUN_1020_0586 ===== */ void __stdcall16far FUN_1020_0586(undefined4 param_1) { char cVar1; int unaff_BP; int iVar2; undefined2 uVar3; cVar1 = '\x01'; uVar3 = (undefined2)((ulong)param_1 >> 0x10); iVar2 = (int)param_1; if (*(int *)(iVar2 + 2) != -0x284f) { if (*(int *)(iVar2 + 2) != -0x284e) { DAT_1028_071e = 0x67; return; } cVar1 = '\x01'; FUN_1020_05c7(1,0x1028,unaff_BP + 1); } if (cVar1 != '\0') { FUN_1020_05c7(); *(undefined2 *)(iVar2 + 2) = 0xd7b0; } return; } /* ===== 1020:05c7 FUN_1020_05c7 ===== */ void __cdecl16near FUN_1020_05c7(void) { int iVar1; int in_BX; int unaff_DI; iVar1 = (*(code *)*(undefined2 *)(in_BX + unaff_DI))(); if (iVar1 != 0) { DAT_1028_071e = iVar1; } return; } /* ===== 1020:05d8 FUN_1020_05d8 ===== */ undefined2 __stdcall16far FUN_1020_05d8(undefined4 param_1) { code *pcVar1; undefined2 uVar2; int iVar3; undefined2 uVar4; undefined1 in_CF; uVar4 = (undefined2)((ulong)param_1 >> 0x10); iVar3 = (int)param_1; pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if ((bool)in_CF) { *(undefined2 *)(iVar3 + 10) = 0; } else { *(undefined2 *)(iVar3 + 10) = uVar2; uVar2 = 0; } *(undefined2 *)(iVar3 + 8) = 0; return uVar2; } /* ===== 1020:0608 FUN_1020_0608 ===== */ int __stdcall16far FUN_1020_0608(undefined4 param_1) { int *piVar1; code *pcVar2; int iVar3; int iVar4; bool bVar5; bVar5 = false; LOCK(); piVar1 = (int *)((int)param_1 + 8); iVar4 = *piVar1; *piVar1 = 0; UNLOCK(); pcVar2 = (code *)swi(0x21); iVar3 = (*pcVar2)(); if ((!bVar5) && (bVar5 = iVar3 != iVar4, iVar3 = 0, bVar5)) { iVar3 = 0x65; } return iVar3; } /* ===== 1020:062d FUN_1020_062d ===== */ undefined2 __stdcall16far FUN_1020_062d(undefined4 param_1) { code *pcVar1; undefined2 uVar2; bool bVar3; bVar3 = false; LOCK(); *(undefined2 *)((int)param_1 + 8) = 0; UNLOCK(); pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (!bVar3) { uVar2 = 0; } return uVar2; } /* ===== 1020:064d FUN_1020_064d ===== */ undefined2 __stdcall16far FUN_1020_064d(uint *param_1) { code *pcVar1; undefined2 uVar2; bool bVar3; bVar3 = *param_1 < 4; if (4 < *param_1) { pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (bVar3) { return uVar2; } } return 0; } /* ===== 1020:0667 FUN_1020_0667 ===== */ void __stdcall16far FUN_1020_0667(byte *param_1,undefined2 *param_2) { byte *pbVar1; byte *pbVar2; int iVar3; uint uVar4; byte *pbVar5; byte *pbVar6; undefined2 uVar7; uVar7 = (undefined2)((ulong)param_2 >> 0x10); pbVar6 = (byte *)((undefined2 *)param_2 + 1); *param_2 = 0; pbVar6[0] = 0xb0; pbVar6[1] = 0xd7; for (iVar3 = 0x16; pbVar6 = pbVar6 + 2, iVar3 != 0; iVar3 = iVar3 + -1) { pbVar6[0] = 0; pbVar6[1] = 0; } uVar4 = 0x4f; pbVar5 = (byte *)param_1 + 1; if (0x4e < *param_1) goto LAB_1020_0697; for (uVar4 = (uint)*param_1; uVar4 != 0; uVar4 = uVar4 - 1) { LAB_1020_0697: pbVar1 = pbVar5; pbVar5 = pbVar5 + 1; if (*pbVar1 == 0) break; pbVar2 = pbVar6; pbVar6 = pbVar6 + 1; *pbVar2 = *pbVar1; } *pbVar6 = 0; Ordinal_5(); return; } /* ===== 1020:06ab FUN_1020_06ab ===== */ void __stdcall16far FUN_1020_06ab(undefined2 param_1,undefined2 *param_2) { code *pcVar1; undefined2 uVar2; undefined2 *puVar3; undefined2 uVar4; bool bVar5; undefined2 in_stack_00000000; uVar4 = (undefined2)((ulong)param_2 >> 0x10); puVar3 = (undefined2 *)param_2; if (puVar3[1] != -0x2850) { if (puVar3[1] != -0x284d) { DAT_1028_071e = 0x66; return; } FUN_1020_072c(puVar3,uVar4); } uVar2 = 0; if (*(char *)(puVar3 + 0x18) != '\0') { bVar5 = false; pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (bVar5) { *(undefined2 *)&DAT_1028_071e = uVar2; return; } } puVar3[1] = 0xd7b3; *param_2 = uVar2; puVar3[2] = param_1; return; } /* ===== 1020:0710 runtime_1020_0710 ===== */ void __stdcall16far runtime_1020_0710(void) { code *pcVar1; undefined2 uVar2; bool bVar3; undefined1 in_ZF; FUN_1020_0751(); if ((bool)in_ZF) { bVar3 = false; pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (bVar3) { DAT_1028_071e = uVar2; } } return; } /* ===== 1020:072c FUN_1020_072c ===== */ void __stdcall16far FUN_1020_072c(uint *param_1) { code *pcVar1; undefined2 uVar2; bool bVar3; undefined1 in_ZF; FUN_1020_0751(); if ((bool)in_ZF) { bVar3 = *param_1 < 4; if (4 < *param_1) { pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (bVar3) { DAT_1028_071e = uVar2; } } ((uint *)param_1)[1] = 0xd7b0; } return; } /* ===== 1020:0751 FUN_1020_0751 ===== */ void __cdecl16near FUN_1020_0751(void) { int unaff_DI; undefined2 unaff_ES; if (*(int *)(unaff_DI + 2) != -0x284d) { DAT_1028_071e = 0x67; } return; } /* ===== 1020:0760 runtime_1020_0760 ===== */ void __stdcall16far runtime_1020_0760(undefined2 param_1,undefined2 param_2,undefined4 param_3) { code *pcVar1; int iVar2; int iVar3; int iVar4; int unaff_BP; undefined1 in_CF; undefined1 in_ZF; undefined2 in_stack_00000000; FUN_1020_0751(); if ((bool)in_ZF) { iVar4 = *(int *)((int)param_3 + 4); pcVar1 = (code *)swi(0x21); iVar2 = (*pcVar1)(0x1028); iVar3 = iVar2; if (((bool)in_CF) || (iVar3 = unaff_BP, iVar2 != iVar4)) { *(int *)&DAT_1028_071e = iVar3; } } return; } /* ===== 1020:0796 runtime_1020_0796 ===== */ void __stdcall16far runtime_1020_0796(uint *param_1,uint param_2,undefined2 param_3,undefined2 param_4, undefined4 param_5) { code *pcVar1; uint uVar2; undefined2 uVar3; undefined2 unaff_BP; undefined2 uVar4; int iVar5; undefined2 uVar6; bool bVar7; undefined1 in_ZF; undefined2 in_stack_00000000; uVar3 = 100; uVar4 = (undefined2)((ulong)param_5 >> 0x10); FUN_1020_0751(); iVar5 = (int)((ulong)param_1 >> 0x10); if ((bool)in_ZF) { uVar2 = 0; uVar6 = 0x1028; if (param_2 != 0) { bVar7 = (int)((ulong)param_2 * (ulong)*(uint *)((int)param_5 + 4) >> 0x10) != 0; pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(0x1028); if (bVar7) { *(uint *)&DAT_1028_071e = uVar2; goto LAB_1020_07ec; } uVar2 = uVar2 / *(uint *)((int)param_5 + 4); uVar3 = unaff_BP; uVar6 = in_stack_00000000; } if (iVar5 == 0 && (uint *)param_1 == (uint *)0x0) { if (uVar2 != param_2) { *(undefined2 *)&DAT_1028_071e = uVar3; } } else { *param_1 = uVar2; } } else { LAB_1020_07ec: if (iVar5 != 0 || (uint *)param_1 != (uint *)0x0) { *param_1 = 0; } } return; } /* ===== 1020:07fe FUN_1020_07fe ===== */ void __stdcall16far FUN_1020_07fe(uint param_1,int param_2,undefined4 param_3) { code *pcVar1; undefined2 uVar2; bool bVar3; undefined1 in_ZF; uVar2 = (undefined2)((ulong)param_3 >> 0x10); FUN_1020_0751(); if ((bool)in_ZF) { bVar3 = CARRY2(param_2 * *(int *)((int)param_3 + 4), (uint)((ulong)param_1 * (ulong)*(uint *)((int)param_3 + 4) >> 0x10)); pcVar1 = (code *)swi(0x21); uVar2 = (*pcVar1)(); if (bVar3) { DAT_1028_071e = uVar2; } } return; } /* ===== 1020:082e FUN_1020_082e ===== */ ushort __stdcall16far FUN_1020_082e(ushort param_1,undefined1 *param_2) { undefined1 *puVar1; int iVar2; undefined1 *in_BX; undefined1 *puVar3; void *pvVar4; puVar3 = (undefined1 *)param_2; pvVar4 = (void *)((ulong)param_2 >> 0x10); if (param_1 == 0) { param_1 = GETMODULEFILENAME(0xff,(void *)CONCAT22(DAT_1028_06fe,pvVar4),0x1028); *param_2 = (char)param_1; } else { iVar2 = FUN_1020_0871(); *param_2 = (char)iVar2; for (; puVar3 = puVar3 + 1, iVar2 != 0; iVar2 = iVar2 + -1) { puVar1 = in_BX; in_BX = in_BX + 1; *puVar3 = *puVar1; } } return param_1; } /* ===== 1020:0866 runtime_1020_0866 ===== */ int __cdecl16far runtime_1020_0866(void) { int iVar1; iVar1 = 0; FUN_1020_0871(0x1028); return -iVar1; } /* ===== 1020:0871 FUN_1020_0871 ===== */ void __cdecl16near FUN_1020_0871(void) { byte *pbVar1; int in_CX; byte *pbVar2; byte *pbVar3; undefined2 uVar4; uVar4 = (undefined2)((ulong)DAT_1028_0702 >> 0x10); pbVar3 = (byte *)DAT_1028_0702; LAB_1020_0876: do { pbVar2 = pbVar3; pbVar1 = pbVar2; if (*pbVar2 != 0) { pbVar3 = pbVar2 + 1; if (*pbVar2 < 0x21) goto LAB_1020_0876; } do { pbVar3 = pbVar1; pbVar1 = pbVar3 + 1; } while (0x20 < *pbVar3); if ((pbVar3 == pbVar2) || (in_CX = in_CX + -1, in_CX == 0)) { return; } } while( true ); } /* ===== 1020:0891 FUN_1020_0891 ===== */ void __stdcall16far FUN_1020_0891(int param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; undefined1 *puVar3; undefined1 *puVar4; puVar3 = (undefined1 *)param_3; puVar4 = (undefined1 *)param_2; for (; param_1 != 0; param_1 = param_1 + -1) { puVar2 = puVar4; puVar4 = puVar4 + 1; puVar1 = puVar3; puVar3 = puVar3 + 1; *puVar2 = *puVar1; } return; } /* ===== 1020:08a9 FUN_1020_08a9 ===== */ int __cdecl16far FUN_1020_08a9(void) { int in_AX; int in_CX; if (1 < DAT_1028_0726) { return in_AX * in_CX; } return in_AX * in_CX; } /* ===== 1020:08e6 FUN_1020_08e6 ===== */ int __cdecl16far FUN_1020_08e6(void) { uint uVar1; uint in_AX; int iVar2; int iVar3; uint in_CX; uint uVar4; uint in_DX; uint in_BX; int iVar5; uint uVar6; uint uVar7; int iVar8; bool bVar9; bool bVar10; if (1 < DAT_1028_0726) { if (CONCAT22(in_BX,in_CX) != 0) { return (int)(CONCAT22(in_DX,in_AX) / CONCAT22(in_BX,in_CX)); } LAB_1020_095f: iVar3 = FUN_1020_005d(); return iVar3; } bVar10 = (int)in_DX < 0; if (bVar10) { bVar9 = in_AX != 0; in_AX = -in_AX; in_DX = -(in_DX + bVar9); } uVar7 = (uint)bVar10; if (in_BX == 0) { if (in_CX == 0) goto LAB_1020_095f; LAB_1020_0967: iVar3 = (int)(((ulong)in_DX % (ulong)in_CX << 0x10 | (ulong)in_AX) / (ulong)in_CX); } else { if ((int)in_BX < 0) { uVar7 = uVar7 + 2; bVar9 = in_CX != 0; in_CX = -in_CX; in_BX = -(in_BX + bVar9); if (in_BX == 0) goto LAB_1020_0967; } iVar5 = 0; iVar3 = 0; iVar8 = 0x10; do { iVar2 = iVar3 * 2; bVar9 = (int)in_AX < 0; in_AX = in_AX << 1 | (uint)(iVar3 < 0); uVar4 = in_DX << 1 | (uint)bVar9; uVar6 = iVar5 << 1 | (uint)((int)in_DX < 0); in_DX = uVar4 - in_CX; uVar4 = (uint)(uVar4 < in_CX); uVar1 = uVar6 - in_BX; iVar5 = uVar1 - uVar4; iVar3 = iVar2 + 1; if (uVar6 < in_BX || uVar1 < uVar4) { bVar9 = CARRY2(in_DX,in_CX); in_DX = in_DX + in_CX; iVar5 = iVar5 + in_BX + (uint)bVar9; iVar3 = iVar2; } iVar8 = iVar8 + -1; } while (iVar8 != 0); } uVar7 = uVar7 >> 1; if (bVar10) { uVar7 = uVar7 + 1; } if (uVar7 == 1) { iVar3 = -iVar3; } return iVar3; } /* ===== 1020:098c runtime_1020_098c ===== */ uint __cdecl16far runtime_1020_098c(void) { ulong uVar1; uint in_AX; uint in_CX; uint uVar2; ulong in_EDX; if (DAT_1028_0726 < 2) { for (uVar2 = in_CX & 0x1f; uVar2 != 0; uVar2 = uVar2 - 1) { uVar1 = in_EDX & 1; in_EDX = in_EDX >> 1 & 0x7fff; in_AX = in_AX >> 1 | (uint)(uVar1 != 0) << 0xf; } return in_AX; } return (uint)(CONCAT22((int)in_EDX,in_AX) >> ((byte)in_CX & 0x1f)); } /* ===== 1020:09af runtime_1020_09af ===== */ int __cdecl16far runtime_1020_09af(void) { int in_AX; uint in_CX; uint uVar1; if (DAT_1028_0726 < 2) { for (uVar1 = in_CX & 0x1f; uVar1 != 0; uVar1 = uVar1 - 1) { in_AX = in_AX << 1; } return in_AX; } return in_AX << ((byte)in_CX & 0x1f); } /* ===== 1020:09d2 runtime_1020_09d2 ===== */ void __stdcall16far runtime_1020_09d2(byte *param_1,byte *param_2) { byte bVar1; uint uVar2; byte *pbVar3; byte *pbVar4; pbVar4 = (byte *)param_2; pbVar3 = (byte *)param_1; bVar1 = *param_1; *param_2 = bVar1; uVar2 = (uint)bVar1; while( true ) { pbVar4 = pbVar4 + 1; pbVar3 = pbVar3 + 1; if (uVar2 == 0) break; uVar2 = uVar2 - 1; *pbVar4 = *pbVar3; } return; } /* ===== 1020:09ec FUN_1020_09ec ===== */ void __stdcall16far FUN_1020_09ec(byte param_1,byte *param_2,byte *param_3) { byte bVar1; uint uVar2; byte *pbVar3; byte *pbVar4; pbVar3 = (byte *)param_3; pbVar4 = (byte *)param_2; bVar1 = *param_3; if (param_1 < *param_3) { bVar1 = param_1; } *param_2 = bVar1; uVar2 = (uint)bVar1; while( true ) { pbVar4 = pbVar4 + 1; pbVar3 = pbVar3 + 1; if (uVar2 == 0) break; uVar2 = uVar2 - 1; *pbVar4 = *pbVar3; } return; } /* ===== 1020:0a10 FUN_1020_0a10 ===== */ void __stdcall16far FUN_1020_0a10(uint param_1,uint param_2,byte *param_3,byte *param_4) { byte *pbVar1; uint uVar2; byte *pbVar3; byte *pbVar4; pbVar4 = (byte *)param_4; if ((int)param_2 < 1) { param_2 = 1; } pbVar3 = (byte *)param_3 + param_2; if (*param_3 < param_2) { uVar2 = 0; } else { uVar2 = (*param_3 - param_2) + 1; if ((int)param_1 < 0) { param_1 = 0; } if (param_1 < uVar2) { uVar2 = param_1; } } *param_4 = (byte)uVar2; for (; pbVar4 = pbVar4 + 1, uVar2 != 0; uVar2 = uVar2 - 1) { pbVar1 = pbVar3; pbVar3 = pbVar3 + 1; *pbVar4 = *pbVar1; } return; } /* ===== 1020:0a51 FUN_1020_0a51 ===== */ void __stdcall16far FUN_1020_0a51(byte *param_1,byte *param_2) { byte bVar1; byte bVar2; byte bVar3; uint uVar4; byte *pbVar5; byte *pbVar6; pbVar5 = (byte *)param_1; bVar2 = *param_2; bVar3 = *param_1; bVar1 = *param_2; *param_2 = *param_2 + bVar3; if (CARRY1(bVar1,bVar3)) { *param_2 = 0xff; bVar3 = ~bVar2; } pbVar6 = (byte *)param_2 + bVar2; uVar4 = (uint)bVar3; while( true ) { pbVar6 = pbVar6 + 1; pbVar5 = pbVar5 + 1; if (uVar4 == 0) break; uVar4 = uVar4 - 1; *pbVar6 = *pbVar5; } return; } /* ===== 1020:0a7d FUN_1020_0a7d ===== */ byte * __stdcall16far FUN_1020_0a7d(byte *param_1,byte *param_2) { byte *pbVar1; int iVar2; int iVar3; uint uVar4; byte *pbVar5; byte *pbVar6; byte *pbVar7; undefined2 uVar8; undefined2 uVar9; bool bVar10; uVar9 = (undefined2)((ulong)param_2 >> 0x10); if (*param_2 != 0) { uVar4 = (uint)*param_2; uVar8 = (undefined2)((ulong)param_1 >> 0x10); if (uVar4 <= *param_1) { iVar2 = (*param_1 - uVar4) + 1; pbVar7 = (byte *)param_1 + 1; pbVar6 = pbVar7; do { pbVar5 = (byte *)param_2 + 1; bVar10 = pbVar6 == (byte *)0x0; do { if (iVar2 == 0) break; iVar2 = iVar2 + -1; pbVar1 = pbVar7; pbVar7 = pbVar7 + 1; bVar10 = *pbVar5 == *pbVar1; } while (!bVar10); if (!bVar10) { return (byte *)0x0; } iVar3 = uVar4 - 1; bVar10 = iVar3 == 0; pbVar6 = pbVar7; do { pbVar5 = pbVar5 + 1; if (iVar3 == 0) break; iVar3 = iVar3 + -1; pbVar1 = pbVar6; pbVar6 = pbVar6 + 1; bVar10 = *pbVar5 == *pbVar1; } while (bVar10); if (bVar10) { return pbVar7 + (-1 - (int)(byte *)param_1); } pbVar6 = (byte *)param_2 + 1; } while( true ); } } return (byte *)0x0; } /* ===== 1020:0ac3 FUN_1020_0ac3 ===== */ void __stdcall16far FUN_1020_0ac3(byte *param_1,byte *param_2) { byte bVar1; uint uVar2; byte *pbVar3; byte *pbVar4; pbVar3 = (byte *)param_2; pbVar4 = (byte *)param_1; bVar1 = *param_2; if (*param_1 < *param_2) { bVar1 = *param_1; } if (bVar1 != 0) { uVar2 = (uint)bVar1; do { pbVar4 = pbVar4 + 1; pbVar3 = pbVar3 + 1; if (uVar2 == 0) { return; } uVar2 = uVar2 - 1; } while (*pbVar3 == *pbVar4); } return; } /* ===== 1020:0aee runtime_1020_0aee ===== */ void __stdcall16far runtime_1020_0aee(undefined1 param_1,undefined1 *param_2) { *param_2 = 1; ((undefined1 *)param_2)[1] = param_1; return; } /* ===== 1020:0b00 FUN_1020_0b00 ===== */ void __stdcall16far FUN_1020_0b00(int param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; undefined1 *puVar3; puVar3 = (undefined1 *)param_3; puVar2 = (undefined1 *)param_2; *param_3 = (char)param_1; for (; puVar3 = puVar3 + 1, param_1 != 0; param_1 = param_1 + -1) { puVar1 = puVar2; puVar2 = puVar2 + 1; *puVar3 = *puVar1; } return; } /* ===== 1020:0b1b FUN_1020_0b1b ===== */ void __stdcall16far FUN_1020_0b1b(int param_1,undefined2 param_2,undefined4 param_3,undefined4 param_4) { undefined2 uVar1; undefined2 uVar2; undefined2 unaff_SS; undefined1 *puVar3; undefined1 *puVar4; undefined2 uVar5; undefined1 local_202 [256]; undefined1 local_102 [256]; if (param_1 < 1) { param_1 = 1; } puVar4 = local_102; uVar2 = (undefined2)((ulong)param_3 >> 0x10); uVar1 = (undefined2)param_3; uVar5 = unaff_SS; FUN_1020_0a10(param_1 + -1,1,uVar1,uVar2); FUN_1020_0a51((int)param_4,(int)((ulong)param_4 >> 0x10)); puVar3 = local_202; FUN_1020_0a10(0xff,param_1,uVar1,uVar2); FUN_1020_0a51(puVar3,unaff_SS); FUN_1020_09ec(param_2,uVar1,uVar2,puVar4,uVar5); return; } /* ===== 1020:0b7a FUN_1020_0b7a ===== */ void __stdcall16far FUN_1020_0b7a(int param_1,int param_2,undefined4 param_3) { undefined2 uVar1; undefined2 uVar2; undefined2 unaff_SS; undefined1 *puVar3; undefined1 *puVar4; undefined2 uVar5; undefined1 local_202 [256]; undefined1 local_102 [256]; if (((0 < param_1) && (0 < param_2)) && (param_2 < 0x100)) { if (0xff < param_1) { param_1 = 0xff; } puVar4 = local_102; uVar2 = (undefined2)((ulong)param_3 >> 0x10); uVar1 = (undefined2)param_3; uVar5 = unaff_SS; FUN_1020_0a10(param_2 + -1,1,uVar1,uVar2); puVar3 = local_202; FUN_1020_0a10(0xff,param_2 + param_1,uVar1,uVar2); FUN_1020_0a51(puVar3,unaff_SS); FUN_1020_09ec(0xff,uVar1,uVar2,puVar4,uVar5); } return; } /* ===== 1020:0be9 FUN_1020_0be9 ===== */ int __stdcall16far FUN_1020_0be9(int *param_1) { code *pcVar1; int iVar2; int iVar3; uint extraout_DX; int iVar4; int *piVar5; undefined2 uVar6; bool bVar7; uVar6 = (undefined2)((ulong)param_1 >> 0x10); piVar5 = (int *)param_1; *param_1 = 0; if (piVar5[1] != -0x284f) { *param_1 = *param_1 + 1; } bVar7 = false; if ((char)piVar5[0x18] != '\0') { pcVar1 = (code *)swi(0x21); iVar2 = (*pcVar1)(); if (bVar7) { return iVar2; } *param_1 = iVar2; } iVar2 = 0x5d8; iVar3 = 0; iVar4 = 0; if (piVar5[1] != -0x284f) { pcVar1 = (code *)swi(0x21); (*pcVar1)(); iVar2 = 0x62d; iVar3 = 0x62d; iVar4 = 0x1020; if ((extraout_DX & 0x80) == 0) { if (piVar5[1] == -0x284d) { FUN_1020_0c76(); } iVar2 = 0x608; iVar3 = 0; iVar4 = 0; } piVar5[1] = -0x284e; } piVar5[10] = iVar2; piVar5[0xb] = 0x1020; piVar5[0xc] = iVar3; piVar5[0xd] = iVar4; piVar5[0xe] = 0x64d; piVar5[0xf] = 0x1020; return 0; } /* ===== 1020:0c76 FUN_1020_0c76 ===== */ void __cdecl16near FUN_1020_0c76(void) { bool bVar1; code *pcVar2; int iVar3; int iVar4; int unaff_DI; undefined1 uVar5; undefined4 uVar6; pcVar2 = (code *)swi(0x21); uVar6 = (*pcVar2)(); bVar1 = (uint)((ulong)uVar6 >> 0x10) < (uint)((uint)uVar6 < 0x80); uVar5 = !bVar1 && bVar1; pcVar2 = (code *)swi(0x21); (*pcVar2)(); pcVar2 = (code *)swi(0x21); iVar3 = (*pcVar2)(); if ((bool)uVar5) { iVar3 = 0; } iVar4 = 0; while( true ) { if (iVar4 == iVar3) { return; } if (*(char *)(iVar4 + unaff_DI + 0x80) == '\x1a') break; iVar4 = iVar4 + 1; } pcVar2 = (code *)swi(0x21); (*pcVar2)(); pcVar2 = (code *)swi(0x21); (*pcVar2)(); return; } /* ===== 1020:0cd0 FUN_1020_0cd0 ===== */ undefined4 FUN_1020_0cd0(void) { uint uVar1; byte bVar2; uint in_AX; uint uVar3; uint uVar4; char cVar5; uint in_CX; uint uVar6; uint in_DX; uint uVar7; uint in_BX; uint uVar8; uint uVar9; uint unaff_SI; uint unaff_DI; uint uVar10; uint uVar11; bool bVar12; bool bVar13; undefined4 uVar14; uVar10 = unaff_DI ^ 0x8000; if ((byte)in_CX != 0) { if ((byte)in_AX == 0) { LAB_1020_0d54: return CONCAT22(uVar10,in_CX); } uVar4 = in_AX; uVar7 = in_DX; uVar8 = in_BX; if ((byte)in_CX < (byte)in_AX) { uVar4 = in_CX; in_CX = in_AX; uVar7 = uVar10; uVar8 = unaff_SI; unaff_SI = in_BX; uVar10 = in_DX; } bVar2 = -((char)uVar4 - (char)in_CX); if (0x28 < bVar2) goto LAB_1020_0d54; uVar3 = CONCAT11((char)(uVar7 >> 8),(char)in_CX) & 0x80ff; uVar4 = uVar4 & 0xff00; uVar7 = uVar7 | 0x8000; uVar11 = uVar10 | 0x8000; for (; 7 < bVar2; bVar2 = bVar2 - 8) { uVar4 = CONCAT11((char)uVar8,(char)(uVar4 >> 8)); uVar8 = CONCAT11((char)uVar7,(char)(uVar8 >> 8)); uVar7 = uVar7 >> 8; } uVar6 = CONCAT11((char)(in_CX >> 8),bVar2); while (bVar2 != 0) { uVar1 = uVar7 & 1; uVar7 = uVar7 >> 1; uVar9 = uVar8 & 1; uVar8 = uVar8 >> 1 | (uint)(uVar1 != 0) << 0xf; uVar4 = uVar4 >> 1 | (uint)(uVar9 != 0) << 0xf; bVar2 = (char)uVar6 - 1; uVar6 = CONCAT11((char)(uVar6 >> 8),bVar2); } if ((int)(uVar3 ^ uVar10) < 0) { in_AX = uVar4 - uVar6; uVar9 = (uVar8 - unaff_SI) - (uint)(uVar4 < uVar6); uVar10 = (uint)(uVar8 < unaff_SI || uVar8 - unaff_SI < (uint)(uVar4 < uVar6)); in_DX = (uVar7 - uVar11) - uVar10; if (uVar7 < uVar11 || uVar7 - uVar11 < uVar10) { uVar10 = ~uVar9; bVar12 = in_AX == 0; in_AX = -in_AX; uVar9 = uVar10 + bVar12; in_DX = ~in_DX + (uint)CARRY2(uVar10,(uint)bVar12); uVar3 = uVar3 ^ 0x8000; } if ((in_DX == 0 && uVar9 == 0) && in_AX == 0) goto LAB_1020_0d53; while (-1 < (int)in_DX) { bVar12 = (int)in_AX < 0; in_AX = in_AX << 1; bVar13 = (int)uVar9 < 0; uVar9 = uVar9 << 1 | (uint)bVar12; in_DX = in_DX << 1 | (uint)bVar13; cVar5 = (char)uVar3 + -1; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') { uVar14 = FUN_1020_0e93(); return uVar14; } } } else { in_AX = uVar4 + uVar6; uVar9 = uVar8 + unaff_SI + (uint)CARRY2(uVar4,uVar6); uVar10 = (uint)(CARRY2(uVar8,unaff_SI) || CARRY2(uVar8 + unaff_SI,(uint)CARRY2(uVar4,uVar6))); uVar4 = uVar7 + uVar11; in_DX = uVar4 + uVar10; if (CARRY2(uVar7,uVar11) || CARRY2(uVar4,uVar10)) { uVar8 = in_DX & 1; in_DX = in_DX >> 1 | (uint)(CARRY2(uVar7,uVar11) || CARRY2(uVar4,uVar10)) << 0xf; uVar10 = uVar9 & 1; uVar9 = uVar9 >> 1 | (uint)(uVar8 != 0) << 0xf; in_AX = in_AX >> 1 | (uint)(uVar10 != 0) << 0xf; cVar5 = (char)uVar3 + '\x01'; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') goto LAB_1020_0d61; } } bVar12 = 0xff7f < in_AX; in_AX = in_AX + 0x80; uVar10 = (uint)CARRY2(uVar9,(uint)bVar12); bVar12 = CARRY2(in_DX,uVar10); in_DX = in_DX + uVar10; if (bVar12) { in_DX = in_DX >> 1 | 0x8000; cVar5 = (char)uVar3 + '\x01'; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') { LAB_1020_0d61: return CONCAT22(in_DX,in_AX); } } in_AX = CONCAT11((char)(in_AX >> 8),(char)uVar3); in_DX = CONCAT11((byte)((in_DX & 0x7fff) >> 8) | (byte)(uVar3 >> 8),(char)(in_DX & 0x7fff)); } LAB_1020_0d53: return CONCAT22(in_DX,in_AX); } /* ===== 1020:0cd4 FUN_1020_0cd4 ===== */ undefined4 __cdecl16near FUN_1020_0cd4(void) { uint uVar1; byte bVar2; uint in_AX; uint uVar3; uint uVar4; char cVar5; uint in_CX; uint uVar6; uint in_DX; uint uVar7; uint in_BX; uint uVar8; uint uVar9; uint unaff_SI; uint unaff_DI; uint uVar10; bool bVar11; bool bVar12; undefined4 uVar13; if ((byte)in_CX != 0) { if ((byte)in_AX == 0) { LAB_1020_0d54: return CONCAT22(unaff_DI,in_CX); } uVar4 = in_AX; uVar7 = in_DX; uVar8 = in_BX; if ((byte)in_CX < (byte)in_AX) { uVar4 = in_CX; in_CX = in_AX; uVar7 = unaff_DI; uVar8 = unaff_SI; unaff_SI = in_BX; unaff_DI = in_DX; } bVar2 = -((char)uVar4 - (char)in_CX); if (0x28 < bVar2) goto LAB_1020_0d54; uVar3 = CONCAT11((char)(uVar7 >> 8),(char)in_CX) & 0x80ff; uVar4 = uVar4 & 0xff00; uVar7 = uVar7 | 0x8000; uVar10 = unaff_DI | 0x8000; for (; 7 < bVar2; bVar2 = bVar2 - 8) { uVar4 = CONCAT11((char)uVar8,(char)(uVar4 >> 8)); uVar8 = CONCAT11((char)uVar7,(char)(uVar8 >> 8)); uVar7 = uVar7 >> 8; } uVar6 = CONCAT11((char)(in_CX >> 8),bVar2); while (bVar2 != 0) { uVar1 = uVar7 & 1; uVar7 = uVar7 >> 1; uVar9 = uVar8 & 1; uVar8 = uVar8 >> 1 | (uint)(uVar1 != 0) << 0xf; uVar4 = uVar4 >> 1 | (uint)(uVar9 != 0) << 0xf; bVar2 = (char)uVar6 - 1; uVar6 = CONCAT11((char)(uVar6 >> 8),bVar2); } if ((int)(uVar3 ^ unaff_DI) < 0) { in_AX = uVar4 - uVar6; uVar9 = (uVar8 - unaff_SI) - (uint)(uVar4 < uVar6); uVar4 = (uint)(uVar8 < unaff_SI || uVar8 - unaff_SI < (uint)(uVar4 < uVar6)); in_DX = (uVar7 - uVar10) - uVar4; if (uVar7 < uVar10 || uVar7 - uVar10 < uVar4) { uVar7 = ~uVar9; bVar11 = in_AX == 0; in_AX = -in_AX; uVar9 = uVar7 + bVar11; in_DX = ~in_DX + (uint)CARRY2(uVar7,(uint)bVar11); uVar3 = uVar3 ^ 0x8000; } if ((in_DX == 0 && uVar9 == 0) && in_AX == 0) goto LAB_1020_0d53; while (-1 < (int)in_DX) { bVar11 = (int)in_AX < 0; in_AX = in_AX << 1; bVar12 = (int)uVar9 < 0; uVar9 = uVar9 << 1 | (uint)bVar11; in_DX = in_DX << 1 | (uint)bVar12; cVar5 = (char)uVar3 + -1; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') { uVar13 = FUN_1020_0e93(); return uVar13; } } } else { in_AX = uVar4 + uVar6; uVar9 = uVar8 + unaff_SI + (uint)CARRY2(uVar4,uVar6); uVar4 = (uint)(CARRY2(uVar8,unaff_SI) || CARRY2(uVar8 + unaff_SI,(uint)CARRY2(uVar4,uVar6))); uVar8 = uVar7 + uVar10; in_DX = uVar8 + uVar4; if (CARRY2(uVar7,uVar10) || CARRY2(uVar8,uVar4)) { uVar6 = in_DX & 1; in_DX = in_DX >> 1 | (uint)(CARRY2(uVar7,uVar10) || CARRY2(uVar8,uVar4)) << 0xf; uVar7 = uVar9 & 1; uVar9 = uVar9 >> 1 | (uint)(uVar6 != 0) << 0xf; in_AX = in_AX >> 1 | (uint)(uVar7 != 0) << 0xf; cVar5 = (char)uVar3 + '\x01'; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') goto LAB_1020_0d61; } } bVar11 = 0xff7f < in_AX; in_AX = in_AX + 0x80; uVar7 = (uint)CARRY2(uVar9,(uint)bVar11); bVar11 = CARRY2(in_DX,uVar7); in_DX = in_DX + uVar7; if (bVar11) { in_DX = in_DX >> 1 | 0x8000; cVar5 = (char)uVar3 + '\x01'; uVar3 = CONCAT11((char)(uVar3 >> 8),cVar5); if (cVar5 == '\0') { LAB_1020_0d61: return CONCAT22(in_DX,in_AX); } } in_AX = CONCAT11((char)(in_AX >> 8),(char)uVar3); in_DX = CONCAT11((byte)((in_DX & 0x7fff) >> 8) | (byte)(uVar3 >> 8),(char)(in_DX & 0x7fff)); } LAB_1020_0d53: return CONCAT22(in_DX,in_AX); } /* ===== 1020:0d97 FUN_1020_0d97 ===== */ undefined4 __cdecl16near FUN_1020_0d97(void) { long lVar1; long lVar2; ulong uVar3; long lVar4; byte bVar5; undefined2 in_AX; byte bVar7; uint uVar6; byte bVar8; uint in_CX; int iVar9; uint in_DX; uint uVar10; uint uVar11; uint uVar12; uint uVar13; uint uVar14; uint in_BX; uint uVar15; uint uVar16; uint uVar17; uint uVar18; uint uVar19; uint uVar20; uint unaff_SI; uint unaff_DI; uint uVar21; uint uVar22; uint uVar23; bool bVar24; undefined4 uVar25; bVar5 = (byte)in_AX; bVar7 = (byte)((uint)in_AX >> 8); if ((bVar5 == 0) || (bVar8 = (byte)in_CX, bVar8 == 0)) { uVar25 = FUN_1020_0e93(); return uVar25; } iVar9 = CONCAT11((((byte)(in_DX >> 8) ^ (byte)(unaff_DI >> 8)) & 0x80) + CARRY1(bVar5,bVar8), bVar5 + bVar8); bVar5 = (byte)(in_CX >> 8); uVar20 = in_DX | 0x8000; uVar21 = unaff_DI | 0x8000; if (((bVar7 == 0) && (uVar6 = in_CX & 0xff00, uVar14 = uVar20, uVar10 = unaff_SI, uVar22 = uVar21, in_BX == 0)) || ((bVar5 == 0 && (uVar6 = (uint)bVar7 << 8, uVar14 = uVar21, uVar10 = in_BX, uVar22 = uVar20, unaff_SI == 0)))) { uVar3 = (ulong)uVar10 * (ulong)uVar14 + ((ulong)uVar6 * (ulong)uVar14 >> 0x10); uVar15 = (uint)uVar3; lVar1 = (ulong)uVar22 * (ulong)uVar14 + (uVar3 >> 0x10); } else { lVar1 = (ulong)bVar7 * 0x100 * (ulong)unaff_SI; lVar4 = lVar1 + (ulong)((uint)bVar7 * (uint)bVar5); uVar22 = (uint)((ulong)lVar4 >> 0x10); lVar2 = (ulong)in_BX * (ulong)bVar5 * 0x100; uVar10 = (uint)((ulong)lVar2 >> 0x10); uVar6 = (uint)CARRY2((uint)lVar4,(uint)lVar2); uVar14 = uVar22 + uVar10; uVar15 = uVar14 + uVar6; uVar16 = (uint)CARRY2((uint)((ulong)lVar1 >> 0x10), (uint)CARRY2((uint)bVar7 * (uint)bVar5,(uint)lVar1)) + (uint)(CARRY2(uVar22,uVar10) || CARRY2(uVar14,uVar6)); lVar1 = (ulong)bVar7 * 0x100 * (ulong)uVar21; uVar11 = (uint)((ulong)lVar1 >> 0x10); uVar6 = (uint)lVar1; uVar23 = uVar15 + uVar6; uVar6 = (uint)CARRY2(uVar15,uVar6); uVar22 = uVar16 + uVar11; uVar17 = uVar22 + uVar6; uVar12 = (uint)((ulong)in_BX * (ulong)unaff_SI >> 0x10); uVar10 = (uint)((ulong)in_BX * (ulong)unaff_SI); uVar14 = (uint)CARRY2(uVar23,uVar10); uVar15 = uVar17 + uVar12; uVar18 = uVar15 + uVar14; lVar1 = (ulong)uVar20 * (ulong)bVar5 * 0x100; uVar13 = (uint)((ulong)lVar1 >> 0x10); uVar10 = (uint)CARRY2(uVar23 + uVar10,(uint)lVar1); uVar23 = uVar18 + uVar13; uVar19 = uVar23 + uVar10; uVar12 = (uint)(CARRY2(uVar16,uVar11) || CARRY2(uVar22,uVar6)) + (uint)(CARRY2(uVar17,uVar12) || CARRY2(uVar15,uVar14)) + (uint)(CARRY2(uVar18,uVar13) || CARRY2(uVar23,uVar10)); uVar23 = (uint)((ulong)in_BX * (ulong)uVar21 >> 0x10); uVar6 = (uint)((ulong)in_BX * (ulong)uVar21); uVar22 = uVar19 + uVar6; uVar6 = (uint)CARRY2(uVar19,uVar6); uVar10 = uVar12 + uVar23; uVar13 = uVar10 + uVar6; uVar11 = (uint)((ulong)uVar20 * (ulong)unaff_SI >> 0x10); uVar14 = (uint)((ulong)uVar20 * (ulong)unaff_SI); uVar15 = uVar22 + uVar14; uVar14 = (uint)CARRY2(uVar22,uVar14); uVar22 = uVar13 + uVar11; lVar1 = (ulong)uVar20 * (ulong)uVar21 + CONCAT22((uint)(CARRY2(uVar12,uVar23) || CARRY2(uVar10,uVar6)) + bZ (uint)(CARRY2(uVar13,uVar11) || CARRY2(uVar22,uVar14)),uVar22 + uVar14); } if (-1 < lVar1) { bVar24 = (int)uVar15 < 0; uVar15 = uVar15 << 1; lVar1 = CONCAT22((int)((ulong)lVar1 >> 0x10) << 1 | (uint)((int)lVar1 < 0), (int)lVar1 << 1 | (uint)bVar24); iVar9 = iVar9 + -1; } uVar6 = (uint)((ulong)lVar1 >> 0x10); uVar21 = iVar9 + 0x7f7f; uVar20 = (uint)CARRY2((uint)lVar1,(uint)(0xff7f < uVar15)); uVar14 = uVar6 + uVar20; if (CARRY2(uVar6,uVar20)) { uVar14 = uVar14 >> 1 | 0x8000; uVar21 = iVar9 + 0x7f80; } if ((uVar21 & 0x4000) != 0) { return 0; } return CONCAT22(CONCAT11((byte)(uVar14 >> 8) ^ (byte)(uVar21 + 1 >> 8),(char)uVar14), CONCAT11((char)(uVar15 + 0x80 >> 8),(char)(uVar21 + 1))); } /* ===== 1020:0e93 FUN_1020_0e93 ===== */ void __cdecl16near FUN_1020_0e93(void) { return; } /* ===== 1020:0e9a FUN_1020_0e9a ===== */ undefined4 __cdecl16near FUN_1020_0e9a(void) { byte bVar1; undefined1 uVar2; char cVar3; undefined2 in_AX; int iVar4; byte bVar5; undefined2 in_CX; byte bVar7; uint uVar6; uint in_DX; char cVar9; uint uVar8; uint in_BX; uint uVar10; uint unaff_BP; uint uVar11; uint unaff_SI; uint unaff_DI; uint uVar12; bool bVar13; bool bVar14; int in_stack_00000000; bVar1 = (byte)in_AX; if (bVar1 == 0) { return 0; } uVar12 = unaff_DI | 0x8000; uVar11 = in_DX | 0x8000; cVar9 = (((byte)(in_DX >> 8) ^ (byte)(unaff_DI >> 8)) & 0x80) - (bVar1 < (byte)in_CX); iVar4 = CONCAT11((char)((uint)in_AX >> 8),2); uVar8 = 1; do { bVar13 = uVar11 < uVar12; bVar7 = (byte)((uint)in_CX >> 8); bVar5 = (byte)((uint)iVar4 >> 8); if ((uVar11 == uVar12) && (bVar13 = in_BX < unaff_SI, in_BX == unaff_SI)) { bVar13 = bVar5 < bVar7; } if (!bVar13) { iVar4 = CONCAT11(bVar5 - bVar7,(char)iVar4); bVar13 = in_BX < unaff_SI; uVar10 = in_BX - unaff_SI; in_BX = uVar10 - (bVar5 < bVar7); uVar10 = (uint)(bVar13 || uVar10 < (bVar5 < bVar7)); bVar13 = uVar11 < uVar12 || uVar11 - uVar12 < uVar10; uVar11 = (uVar11 - uVar12) - uVar10; } while( true ) { bVar14 = (int)uVar8 < 0; uVar8 = uVar8 << 1 | (uint)bVar13; if (bVar14) { cVar3 = (char)iVar4 + -1; iVar4 = CONCAT11((char)((uint)iVar4 >> 8),cVar3); if (cVar3 < '\0') { uVar11 = ~(uVar8 << 6); uVar10 = ~CONCAT11(cVar9,bVar1 - (byte)in_CX); uVar12 = unaff_BP ^ 0xffff; if (-1 < (int)uVar12) { uVar11 = uVar11 << 1; uVar10 = uVar10 << 1 | (uint)(-1 < (int)(uVar8 << 6)); uVar12 = uVar12 << 1 | (uint)(-1 < cVar9); in_stack_00000000 = in_stack_00000000 + -1; } uVar6 = in_stack_00000000 + 0x8080; uVar8 = (uint)CARRY2(uVar10,(uint)(0xff7f < uVar11)); uVar10 = uVar12 + uVar8; if (CARRY2(uVar12,uVar8)) { uVar10 = uVar10 >> 1 | 0x8000; uVar6 = in_stack_00000000 + 0x8081; } if ((uVar6 & 0x4000) != 0) { return 0; } return CONCAT22(CONCAT11((byte)(uVar10 >> 8) ^ (byte)(uVar6 + 1 >> 8),(char)uVar10), CONCAT11((char)(uVar11 + 0x80 >> 8),(char)(uVar6 + 1))); } uVar8 = 1; if (cVar3 == '\0') { uVar8 = 0x40; } } bVar13 = iVar4 < 0; uVar2 = (undefined1)iVar4; bVar5 = (char)((uint)iVar4 >> 8) * '\x02'; iVar4 = CONCAT11(bVar5,uVar2); bVar14 = (int)in_BX < 0; in_BX = in_BX << 1 | (uint)bVar13; bVar13 = -1 < (int)uVar11; uVar11 = uVar11 << 1 | (uint)bVar14; if (bVar13) break; iVar4 = CONCAT11(bVar5 - bVar7,uVar2); bVar13 = in_BX < unaff_SI; uVar10 = in_BX - unaff_SI; in_BX = uVar10 - (bVar5 < bVar7); uVar11 = (uVar11 - uVar12) - (uint)(bVar13 || uVar10 < (bVar5 < bVar7)); bVar13 = false; } } while( true ); } /* ===== 1020:0f11 FUN_1020_0f11 ===== */ void __cdecl16near FUN_1020_0f11(void) { uint in_DX; uint unaff_DI; bool bVar1; if ((int)(in_DX ^ unaff_DI) < 0) { return; } bVar1 = (in_DX & 0x8000) == 0; if ((!bVar1) && (FUN_1020_0f28(), !bVar1)) { return; } return; } /* ===== 1020:0f28 FUN_1020_0f28 ===== */ void __cdecl16near FUN_1020_0f28(void) { return; } /* ===== 1020:0f3b FUN_1020_0f3b ===== */ void __cdecl16near FUN_1020_0f3b(void) { uint uVar1; uint in_AX; uint in_DX; bool bVar2; if (in_AX != 0 || in_DX != 0) { if ((int)in_DX < 0) { bVar2 = in_AX != 0; in_AX = -in_AX; in_DX = -(uint)bVar2 - in_DX; } uVar1 = in_AX; if ((in_DX == 0) && (uVar1 = 0, in_DX = in_AX, (char)(in_AX >> 8) == '\0')) { in_DX = in_AX << 8; } while (-1 < (int)in_DX) { in_DX = in_DX * 2 + (uint)CARRY2(uVar1,uVar1); uVar1 = uVar1 * 2; } } return; } /* ===== 1020:0f77 FUN_1020_0f77 ===== */ void __cdecl16near FUN_1020_0f77(void) { byte in_AL; byte bVar1; bVar1 = -in_AL + 0xa0; if (in_AL < 0xa1) { if (bVar1 < 0x20) { if (0xf < bVar1) { bVar1 = -in_AL + 0x90; } if (7 < bVar1) { bVar1 = bVar1 - 8; } for (; bVar1 != 0; bVar1 = bVar1 - 1) { } } else if (bVar1 != 0x20) { return; } } return; } /* ===== 1020:0fe5 FUN_1020_0fe5 ===== */ void __cdecl16far FUN_1020_0fe5(void) { undefined1 in_CF; FUN_1020_0cd4(); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0feb FUN_1020_0feb ===== */ void __cdecl16far FUN_1020_0feb(void) { undefined1 in_CF; FUN_1020_0cd0(); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0ff1 FUN_1020_0ff1 ===== */ void FUN_1020_0ff1(void) { undefined1 in_CF; FUN_1020_0d97(); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0ff7 FUN_1020_0ff7 ===== */ void __cdecl16far FUN_1020_0ff7(void) { undefined1 in_CF; FUN_1020_0d97(); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:0ffd FUN_1020_0ffd ===== */ void __cdecl16far FUN_1020_0ffd(void) { char in_CL; bool bVar1; bVar1 = false; if (in_CL == '\0') { FUN_1020_005d(); return; } FUN_1020_0e9a(); if (!bVar1) { return; } FUN_1020_005d(); return; } /* ===== 1020:1007 FUN_1020_1007 ===== */ void __cdecl16far FUN_1020_1007(void) { FUN_1020_0f11(); return; } /* ===== 1020:100b FUN_1020_100b ===== */ void __cdecl16far FUN_1020_100b(void) { FUN_1020_0f3b(); return; } /* ===== 1020:1017 FUN_1020_1017 ===== */ void __cdecl16far FUN_1020_1017(void) { undefined1 in_CF; FUN_1020_0f77(); if (!(bool)in_CF) { return; } FUN_1020_005d(); return; } /* ===== 1020:1031 FUN_1020_1031 ===== */ void __cdecl16near FUN_1020_1031(void) { FUN_1020_0cd4(); return; } /* ===== 1020:103b runtime_1020_103b ===== */ void __cdecl16near runtime_1020_103b(void) { FUN_1020_0cd0(); return; } /* ===== 1020:1045 runtime_1020_1045 ===== */ void __cdecl16near runtime_1020_1045(void) { FUN_1020_0d97(); return; } /* ===== 1020:104f FUN_1020_104f ===== */ void __cdecl16near FUN_1020_104f(void) { FUN_1020_0e9a(); return; } /* ===== 1020:1059 runtime_1020_1059 ===== */ uint __cdecl16far runtime_1020_1059(void) { uint uVar1; uint uVar2; byte bVar3; uint in_AX; uint uVar4; byte bVar5; uint uVar6; undefined1 uVar8; uint uVar7; bVar3 = (byte)in_AX; if (bVar3 < 0xa8) { uVar4 = in_AX & 0xff; bVar5 = bVar3 + 0x80; uVar1 = 0; uVar7 = 0; if (bVar3 < 0x80 || bVar5 == 0) { return 0; } while( true ) { uVar6 = uVar1; uVar8 = (undefined1)(uVar7 >> 8); if (bVar5 < 0x10) break; uVar4 = CONCAT11(uVar8,(char)uVar4); bVar5 = bVar5 - 0x10; uVar1 = 0xffff; uVar7 = uVar6; } if (7 < bVar5) { uVar4 = CONCAT11((char)uVar7,(char)uVar4); uVar7 = CONCAT11((char)uVar6,uVar8); uVar6 = CONCAT11(0xff,(char)(uVar6 >> 8)); bVar5 = bVar5 - 8; } while( true ) { bVar3 = (byte)(uVar4 >> 8); if (bVar5 == 0) break; uVar1 = uVar6 & 1; uVar6 = uVar6 >> 1 | 0x8000; uVar2 = uVar7 & 1; uVar7 = uVar7 >> 1 | (uint)(uVar1 != 0) << 0xf; uVar4 = CONCAT11(bVar3 >> 1 | (uVar2 != 0) << 7,(char)uVar4); bVar5 = bVar5 - 1; } in_AX = CONCAT11(bVar3 & (byte)(in_AX >> 8),(char)uVar4); } return in_AX; } /* ===== 1020:10aa runtime_1020_10aa ===== */ void __cdecl16far runtime_1020_10aa(void) { runtime_1020_1059(); FUN_1020_0cd0(); return; } /* ===== 1020:10be FUN_1020_10be ===== */ uint __cdecl16far FUN_1020_10be(void) { char cVar1; byte bVar2; uint in_AX; uint uVar3; uint in_DX; undefined2 in_BX; undefined2 uVar4; undefined4 uVar5; cVar1 = (char)in_AX; if (cVar1 != '\0') { if ((in_DX & 0x8000) != 0) { uVar3 = FUN_1020_005d(); return uVar3; } do { uVar4 = in_BX; FUN_1020_104f(); uVar5 = FUN_1020_1031(); in_AX = (uint)(byte)((char)uVar5 - 1); bVar2 = FUN_1020_0cd0(in_AX,uVar4,(int)((ulong)uVar5 >> 0x10)); } while ((byte)(((char)(cVar1 + -0x80) >> 1) + 0x6cU) <= bVar2); } return in_AX; } /* ===== 1020:111d runtime_1020_111d ===== */ void __cdecl16far runtime_1020_111d(void) { byte bVar1; undefined2 uVar2; uint extraout_DX; uint uVar3; uint extraout_DX_00; bool bVar4; undefined1 uVar5; bVar1 = FUN_1020_0cd4(); uVar3 = extraout_DX; if (bVar1 != 0) { uVar3 = extraout_DX ^ 0x8000; } if (0x6b < bVar1) { uVar2 = 0x2183; bVar4 = false; FUN_1020_0f11(); if (!bVar4) { FUN_1020_104f(); runtime_1020_10aa(uVar2,0xdaa2,0x490f); runtime_1020_1045(); uVar3 = extraout_DX_00; } uVar5 = 0; if ((uVar3 & 0x8000) != 0) { FUN_1020_1031(); } FUN_1020_0f11(); if (!(bool)uVar5) { runtime_1020_103b(); } bVar1 = FUN_1020_0f11(); if (!(bool)uVar5) { bVar1 = FUN_1020_0cd4(); } if (0x6b < bVar1) { FUN_1020_143c(); } } return; } /* ===== 1020:11bb runtime_1020_11bb ===== */ undefined2 __cdecl16far runtime_1020_11bb(void) { char in_AL; undefined2 uVar1; uint in_DX; undefined2 uVar2; undefined4 uVar3; if ((in_AL != '\0') && ((in_DX & 0x8000) == 0)) { FUN_1020_0d97(in_AL + '\x7f'); uVar1 = 0; uVar3 = FUN_1020_1031(); uVar2 = 0; FUN_1020_0cd4((int)uVar3,uVar1,(int)((ulong)uVar3 >> 0x10)); FUN_1020_0e9a(); FUN_1020_143c(); uVar3 = FUN_1020_0cd4(); FUN_1020_0f3b((int)uVar3,uVar2,(int)((ulong)uVar3 >> 0x10)); FUN_1020_0d97(); uVar1 = FUN_1020_0cd4(); if ((byte)uVar1 < 0x67) { uVar1 = 0; } return uVar1; } uVar1 = FUN_1020_005d(); return uVar1; } /* ===== 1020:1264 runtime_1020_1264 ===== */ char __cdecl16far runtime_1020_1264(void) { byte bVar1; char cVar2; uint uVar3; byte bVar4; uint in_DX; undefined2 in_BX; undefined4 uVar5; undefined2 uVar6; uVar5 = FUN_1020_0e9a(); uVar6 = (undefined2)uVar5; if ((byte)uVar5 < 0x88) { uVar3 = FUN_1020_0f77(uVar6,in_BX,(int)((ulong)uVar5 >> 0x10)); FUN_1020_0f3b(uVar6); FUN_1020_0cd0(); bVar1 = FUN_1020_1455(); bVar4 = (byte)(uVar3 >> 1); if ((uVar3 & 1) != 0) { bVar1 = FUN_1020_0d97(); } cVar2 = bVar1 + bVar4; if (!CARRY1(bVar1,bVar4)) { if ((in_DX & 0x8000) != 0) { cVar2 = FUN_1020_0e9a(); } return cVar2; } } cVar2 = FUN_1020_005d(); return cVar2; } /* ===== 1020:1307 runtime_1020_1307 ===== */ void __cdecl16far runtime_1020_1307(void) { char in_AL; uint uVar1; int iVar2; uint in_DX; undefined2 in_BX; uint uVar3; undefined1 uVar4; undefined4 uVar5; uint in_stack_0000fff8; if (in_AL != '\0') { uVar1 = (uint)((in_DX & 0x8000) != 0); uVar4 = false; FUN_1020_0f11(uVar1); if (!(bool)uVar4) { in_BX = 0; FUN_1020_0e9a(); uVar1 = uVar1 + 2; } FUN_1020_0f11(uVar1); if ((bool)uVar4) { runtime_1020_1436(); } else { uVar1 = 0x13e8; iVar2 = 2; do { uVar3 = uVar1; in_stack_0000fff8 = FUN_1020_0f11(); if ((bool)uVar4) goto LAB_1020_136d; uVar4 = 0xffed < uVar3; uVar1 = uVar3 + 0x12; iVar2 = iVar2 + -1; } while (iVar2 != 0); uVar3 = uVar3 + 0xc; LAB_1020_136d: uVar5 = runtime_1020_103b(uVar3 + 6); FUN_1020_0d97((int)uVar5,in_BX,(int)((ulong)uVar5 >> 0x10)); FUN_1020_0cd4(); FUN_1020_0e9a(); runtime_1020_1436(); FUN_1020_0cd4(); } if ((in_stack_0000fff8 & 2) != 0) { FUN_1020_0cd0(in_stack_0000fff8); } } return; } /* ===== 1020:1436 runtime_1020_1436 ===== */ void runtime_1020_1436(void) { FUN_1020_0d97(0x1418,5); FUN_1020_1455(); FUN_1020_0d97(); return; } /* ===== 1020:143c FUN_1020_143c ===== */ void FUN_1020_143c(void) { FUN_1020_0d97(); FUN_1020_1455(); FUN_1020_0d97(); return; } /* ===== 1020:1455 FUN_1020_1455 ===== */ void __cdecl16near FUN_1020_1455(void) { int in_CX; int unaff_DI; undefined2 uStack_a; uStack_a = in_CX; while( true ) { FUN_1020_0d97(); unaff_DI = unaff_DI + 6; uStack_a = uStack_a + -1; if (uStack_a == 0) break; FUN_1020_0cd4(unaff_DI); } FUN_1020_0cd4(); return; } /* ===== 1020:14a4 FUN_1020_14a4 ===== */ int __stdcall16far FUN_1020_14a4(uint param_1) { long lVar1; ulong uVar2; uVar2 = FUN_1020_1501(); lVar1 = (uVar2 >> 0x10) * (ulong)param_1; return (int)((ulong)lVar1 >> 0x10) + (uint)CARRY2((uint)lVar1,(uint)((uVar2 & 0xffff) * (ulong)param_1 >> 0x10)); } /* ===== 1020:14c1 FUN_1020_14c1 ===== */ char __cdecl16far FUN_1020_14c1(void) { char cVar1; int iVar2; ulong uVar3; uVar3 = FUN_1020_1501(); cVar1 = -0x80; iVar2 = 0x20; do { if ((uVar3 & 0x80000000) != 0) { return cVar1; } uVar3 = CONCAT22((int)(uVar3 >> 0x10) << 1 | (uint)((int)uVar3 < 0),(int)uVar3 << 1); cVar1 = cVar1 + -1; iVar2 = iVar2 + -1; } while (iVar2 != 0); return '\0'; } /* ===== 1020:14de runtime_1020_14de ===== */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl16far runtime_1020_14de(void) { FUN_1020_1501(); fscale((longdouble)_DAT_1028_0720 + (longdouble)DAT_1020_14fb,(longdouble)DAT_1020_14ff); return; } /* ===== 1020:1501 FUN_1020_1501 ===== */ void __cdecl16near FUN_1020_1501(void) { uint uVar1; char cVar2; int iVar3; uVar1 = (uint)((ulong)DAT_1028_0720 * (ulong)DAT_1020_1537); cVar2 = (char)(DAT_1028_0720 << 3); iVar3 = (int)((ulong)DAT_1028_0720 * (ulong)DAT_1020_1537 >> 0x10) + CONCAT11((char)((DAT_1028_0720 << 3) >> 8) + cVar2,cVar2) + DAT_1028_0722 * 5; DAT_1028_0720 = uVar1 + 1; DAT_1028_0722 = CONCAT11((char)((uint)iVar3 >> 8) + (char)DAT_1028_0722 * '\x04' + (char)(DAT_1028_0722 << 7) ,(char)iVar3) + (uint)(0xfffe < uVar1); return; } /* ===== 1020:1539 runtime_1020_1539 ===== */ void __cdecl16far runtime_1020_1539(void) { code *pcVar1; undefined2 in_CX; undefined2 extraout_DX; pcVar1 = (code *)swi(0x21); (*pcVar1)(); DAT_1028_0720 = in_CX; DAT_1028_0722 = extraout_DX; return; } /* ===== 1020:1546 FUN_1020_1546 ===== */ void __cdecl16near FUN_1020_1546(void) { ulong uVar1; uint in_AX; byte bVar2; uint in_DX; byte *unaff_DI; undefined2 unaff_ES; char cVar3; if ((int)in_DX < 0) { FUN_1020_1562(); unaff_DI[-1] = 0x2d; return; } do { uVar1 = (ulong)in_DX; in_DX = in_DX / 10; uVar1 = uVar1 % 10 << 0x10 | (ulong)in_AX; in_AX = (uint)(uVar1 / 10); cVar3 = (char)(uVar1 % 10); bVar2 = cVar3 + 0x30; if (0x39 < bVar2) { bVar2 = cVar3 + 0x37; } unaff_DI = unaff_DI + -1; *unaff_DI = bVar2; } while (in_AX != 0 || in_DX != 0); return; } /* ===== 1020:1562 FUN_1020_1562 ===== */ void __cdecl16near FUN_1020_1562(void) { ulong uVar1; uint in_AX; byte bVar2; uint in_BX; uint unaff_SI; byte *unaff_DI; undefined2 unaff_ES; char cVar3; do { uVar1 = (ulong)in_BX; in_BX = in_BX / unaff_SI; uVar1 = uVar1 % (ulong)unaff_SI << 0x10 | (ulong)in_AX; in_AX = (uint)(uVar1 / unaff_SI); cVar3 = (char)(uVar1 % (ulong)unaff_SI); bVar2 = cVar3 + 0x30; if (0x39 < bVar2) { bVar2 = cVar3 + 0x37; } unaff_DI = unaff_DI + -1; *unaff_DI = bVar2; } while (in_AX != 0 || in_BX != 0); return; } /* ===== 1020:1582 FUN_1020_1582 ===== */ undefined4 __cdecl16near FUN_1020_1582(void) { int iVar1; uint uVar2; int iVar3; uint uVar4; int in_CX; uint uVar5; uint uVar6; byte bVar7; byte bVar8; uint uVar9; char cVar10; uint uVar11; byte *unaff_DI; undefined2 unaff_ES; bool bVar12; bool bVar13; iVar1 = 0; uVar5 = 0; uVar11 = 0; if (in_CX == 0) goto LAB_1020_15e7; if (*unaff_DI == 0x2b) { LAB_1020_1597: unaff_DI = unaff_DI + 1; in_CX = in_CX + -1; if (in_CX == 0) goto LAB_1020_15e7; } else if (*unaff_DI == 0x2d) { uVar11 = 0xffff; goto LAB_1020_1597; } if (*unaff_DI != 0x24) { do { uVar9 = (uint)(byte)(*unaff_DI - 0x30); if ((byte)(*unaff_DI - 0x3a) < 0xf6) break; if ((uVar5 & 0xf000) != 0) goto LAB_1020_15e7; uVar2 = iVar1 * 2; uVar6 = uVar5 << 1 | (uint)(iVar1 < 0); iVar3 = iVar1 << 2; uVar4 = iVar1 * 8; uVar5 = iVar1 * 10; iVar1 = uVar5 + uVar9; uVar5 = ((uVar6 << 1 | (uint)((int)uVar2 < 0)) << 1 | (uint)(iVar3 < 0)) + uVar6 + (uint)CARRY2(uVar4,uVar2) + (uint)CARRY2(uVar5,uVar9); unaff_DI = unaff_DI + 1; in_CX = in_CX + -1; } while (in_CX != 0); LAB_1020_15d1: if (iVar1 != 0 || uVar5 != 0) { if ((int)uVar11 < 0) { bVar12 = iVar1 != 0; iVar1 = -iVar1; uVar5 = -(uint)bVar12 - uVar5; } if ((int)(uVar11 ^ uVar5) < 0) goto LAB_1020_15e7; } return CONCAT22(uVar5,iVar1); } iVar3 = in_CX + -1; if (iVar3 != 0) { do { unaff_DI = unaff_DI + 1; bVar7 = *unaff_DI; if (0x60 < bVar7) { bVar7 = bVar7 - 0x20; } bVar8 = bVar7 - 0x30; if ((byte)(bVar7 - 0x3a) < 0xf6) { if ((byte)(bVar7 + 0xb9) < 0xfa) goto LAB_1020_15d1; bVar8 = bVar7 - 0x37; } cVar10 = '\x04'; do { bVar12 = iVar1 < 0; iVar1 = iVar1 << 1; bVar13 = (int)uVar5 < 0; uVar5 = uVar5 << 1 | (uint)bVar12; if (bVar13) goto LAB_1020_15e7; cVar10 = cVar10 + -1; } while (cVar10 != '\0'); iVar1 = CONCAT11((char)((uint)iVar1 >> 8),(byte)iVar1 | bVar8); iVar3 = iVar3 + -1; if (iVar3 == 0) { if ((int)uVar11 < 0) { bVar12 = iVar1 != 0; iVar1 = -iVar1; uVar5 = -(uint)bVar12 - uVar5; } return CONCAT22(uVar5,iVar1); } } while( true ); } LAB_1020_15e7: return CONCAT22(uVar5,iVar1); } /* ===== 1020:1629 FUN_1020_1629 ===== */ void __stdcall16far FUN_1020_1629(int param_1,undefined1 *param_2,int param_3) { undefined1 *puVar1; int in_CX; undefined1 *puVar2; undefined1 *puVar3; undefined2 uVar4; undefined2 unaff_SS; FUN_1020_1546(); uVar4 = (undefined2)((ulong)param_2 >> 0x10); if (param_1 < param_3) { param_3 = param_1; } if (param_1 < in_CX) { in_CX = param_1; } if (param_3 < in_CX) { param_3 = in_CX; } puVar3 = (undefined1 *)param_2 + 1; *param_2 = (char)param_3; param_3 = param_3 - in_CX; puVar2 = &stack0xfffe; if (param_3 != 0) { for (; puVar2 = &stack0xfffe, param_3 != 0; param_3 = param_3 + -1) { puVar1 = puVar3; puVar3 = puVar3 + 1; *puVar1 = 0x20; } } for (; in_CX != 0; in_CX = in_CX + -1) { puVar1 = puVar3; puVar3 = puVar3 + 1; *puVar1 = *puVar2; puVar2 = puVar2 + 1; } return; } /* ===== 1020:1674 FUN_1020_1674 ===== */ undefined2 __stdcall16far FUN_1020_1674(int *param_1,byte *param_2) { undefined2 uVar1; uint uVar2; int iVar3; byte *pbVar4; bool bVar5; bVar5 = false; uVar2 = (uint)*param_2; pbVar4 = (byte *)param_2; while ((pbVar4 = pbVar4 + 1, uVar2 != 0 && (bVar5 = *pbVar4 < 0x20, *pbVar4 == 0x20))) { uVar2 = uVar2 - 1; } uVar1 = FUN_1020_1582(); if ((bVar5) || (iVar3 = 0, uVar2 != 0)) { iVar3 = (int)pbVar4 - (int)(byte *)param_2; uVar1 = 0; } *param_1 = iVar3; return uVar1; } /* ===== 1020:16a5 FUN_1020_16a5 ===== */ void __stdcall16far FUN_1020_16a5(int param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; undefined1 *puVar3; undefined1 *puVar4; byte bVar5; puVar3 = (undefined1 *)param_3; puVar4 = (undefined1 *)param_2; bVar5 = 0; if (puVar3 < puVar4) { puVar3 = puVar3 + param_1 + -1; puVar4 = puVar4 + param_1 + -1; bVar5 = 1; } for (; param_1 != 0; param_1 = param_1 + -1) { puVar2 = puVar4; puVar4 = puVar4 + (uint)bVar5 * -2 + 1; puVar1 = puVar3; puVar3 = puVar3 + (uint)bVar5 * -2 + 1; *puVar2 = *puVar1; } return; } /* ===== 1020:16c9 FUN_1020_16c9 ===== */ void __stdcall16far FUN_1020_16c9(undefined1 param_1,int param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; puVar2 = (undefined1 *)param_3; for (; param_2 != 0; param_2 = param_2 + -1) { puVar1 = puVar2; puVar2 = puVar2 + 1; *puVar1 = param_1; } return; } /* ===== 1020:16dd runtime_1020_16dd ===== */ void __cdecl16far runtime_1020_16dd(void) { FUN_1020_16e6(); return; } /* ===== 1020:16e1 FUN_1020_16e1 ===== */ void FUN_1020_16e1(void) { uint *unaff_DI; FUN_1020_16e6(); /* WARNING: Could not recover jumptable at 0x102016e4. Too many branches */ /* WARNING: Treating indirect jump as call */ (*(code *)(ulong)*unaff_DI)(); return; } /* ===== 1020:16e6 FUN_1020_16e6 ===== */ void __cdecl16near FUN_1020_16e6(void) { int *piVar1; int *piVar2; int iVar3; int in_AX; int iVar4; int *piVar5; int unaff_DI; int *piVar6; bool bVar7; piVar2 = (int *)*(int *)(unaff_DI + 4); piVar5 = piVar2; if (in_AX == piVar2[1]) { return; } do { bVar7 = false; iVar3 = piVar5[3]; piVar6 = piVar5 + 4; iVar4 = iVar3; do { if (iVar4 == 0) break; iVar4 = iVar4 + -1; piVar1 = piVar6; piVar6 = piVar6 + 1; bVar7 = in_AX == *piVar1; } while (!bVar7); if (bVar7) { piVar2[1] = in_AX; piVar2[2] = (int)(piVar6 + ((iVar3 + -1) * 2 - iVar4)); return; } piVar1 = piVar5; piVar5 = (int *)*piVar1; if ((int *)*piVar1 == (int *)0x0) { FUN_1020_005d(); return; } } while( true ); } /* SUMMARY: total=683 internal=391 external=292 succeeded=391 failed=0 */ Wi x:ixTE߽]:$M!l[ECBbE76aËRD De *,8jPaFWu;̟ZO9uO㣸%YQ_!$}ygq9A[i- ]|}A |i{LȀԠ(&tH6jgd{bN0x?<y] k?p`]x𸜀g;>Vqv[s{я9ڂb Wpo/m?@e/_>'h.<dЦ~ɵ'vKZ_= ;|$sČP )l.~Ö4ヒS0}o$eT4-vot"(l/<h~Z@[- \J7wةAR$@:d)v%+ w)Y*QZyU:7c{Ke.!l*XwOʿ whxc h-g9l̹ͺFʏKu; čH!nR*WCeT-˭HeVIL%(6͔OFs[=++^*wh_NcK\&'1U.=fǦ<)e$.7 _%97앁EWUY^yY+lG !3夜"W^q6 pdRIE**rmxv]?~rn:eB^ԼIB?U5 7v"$[,c^x<Lk݋jV8`a 71ɋ7qod*KoQ[GJm*n3H2! pP/dv믆mLG "Å5G@d(@vrH4^2lrH&F })#vɢm55b4r9^/i{®HdN|K*Jr瓉D):ͭv'wrLG_'6"8d^hx$Wd7?$IHG|M֮^vuG sw;+;\nL,<#dgd)PmbFVEp]!Ưǽd O)U:jРtVHKv<+"$9pOu)NҜk>qy4RH<9@(0wld/!VÇJ&\{ qӟ$?l0BT4,xJ<$U?]t#9u񼸠RYd,`e$n/̥(i ŮY ǺRS (%xNHYcd+(z;pR+#WWLMŧIэ5('"JTAJN#ɲ О(EH{-v~Ff]-{?l$1im>d' Uk_l!oIњ~Oq&ܝM;*.ۨXk/{L5KS{Xu =>C5έ#CdH;މGb%;Gҵ=ehbãɎĊz\׸HO< ƦRR=t`i9z#cP)J pw=I]K']86dr&B[e'ODӰ  `>z Qnu:'*-Ȓ~d~5&FT>}0sCp}dJo ={>N؅gBT 5u?. `5S.-$zb$P7 c."a|iCD.!컋pB$Y84ҁ'D+z^6`U+EHqo}$1諐~%l#M#Bv6bDWHBY*ıaO+[;rR)lK}+'|'מ"&"V ;s;%j~ڏIA/I :D<9_yWI:maJ|I0[=A|QG"3C v$ScP!x Y-t("y}RVr™{*Y`4$`aXt#̂#-N<Lc; =!16-RYaHԗX,bAH;>/E?3?<._8vW.ziApO'^2E `8.D(+{/]HğZ`g҉M~ WP4|!鵗:cY[A5]xp 5 7E Fw||(9"$>925P=qXk0홏g惑,xzӇx'DIv5N}ѓZ`C0ͱԄrHh τqS mz PӮxo&E2+_.b@XNLp GɌ{ lɎ$Ɏ(Ɏ!EtáϾ OGW()MUm1O~zPSdž r*IZo ZA# Y0qexf6g9RWWVV\VX<[+rzĖ{!ZgfUZ_۳QܷJX|IQj6.㰨x[!#t ʁkα` j03KJ@$5UA&Qa:iDhD E&aW8%B|iLWQRV<6w}2,x l&{3[ k!"9}\ڶX| 0 h&`ˀPDWo5+$F90ۗ)C;w$˂u/)YH)7\ Ypݘ!TYoXһ5'N܊J>Qew2(0`䌚^jlͨG$GO`ŭ@&=RsMaEcs+d5*N,c1 טI(ƭ2a8Q3Xqxb8 !|uGݘl3Df'NWEی<Nw:)WrN{=[ yc5JDCDmwK{e?WZY6BSgZl"vɁ_vݱMfɁau c$ fl$S¦۷PIp&YF'GphYe\d46H6ǭ {{2YZYGS^%_t/ +dɁgKᵞAEO<5^zJ!-8`1rph_! w֓[j W+~_ ~i: ^|ˆ+ Ov@(n? 0acP\WᗟM}Ra±d)Iܛ>c4HK^fs-Ԙy 3Mi;A'0A."b6&1>P8DWw;9e6Dx)UgYfVR0eֶA]H'P|=_}ρ k >9}Xߺ]USuEm3Ht4\O37uln#&EIѫH]B2p\xEYe uI9jOy2+zg-ς>v98E$rZ !<SEc$Mko!6 ;(%I |mь~2 Dؿ (>y:YW O҇=)e3Q+iuXO-F. xtt8v- @'?x|l]gh,_ DT+vߥ (Z?qm>D{ch*p^Zl4fL_4e n\Fwin[qXSlq@,F><+YT|RA4N׈ Qt01tLO9p8:7<#–cD 8TB-X4ϒ8?wdpA<íR' 0<mLX+<()|?nCS4 h&P§|EqRhл-'ҋi4^t_a}Ҁ* MOn>Uh3Up*fw|]ceTcxo% /b!.8a",^stlAs}z9Ї#HQ;Ƀ*vOahpKrNCF|7H18Cr@1bWRl|2GZHT7UxXVsk OE-x4?xF`i~Oe %w~};e®%<[o [ "T*@ Y*Z$5d?"*Id~W]lU4mۊ0E ѐПm } 5[|.):Gm~lPP{š[i7~UxjamHo/h\C=I &|Y: ўΌ+^$T$ ljD6իe۩wR i,AM;i5n{ޣb;UpAj)x1r'*n29>Ǩζ49_iyzޠbTwަǶ"doD{{Uco|n th||N፡` S!BSv&ܸK< :%bV4Lj,#CV<ii#p0-Q˂+cg\"i k0.X/, 1\ gOBN,taI8nq>>-:㣂~jYG Blg Fl+6-h< ЅsP؊L1NRb'xv)93=_5 ] 9 R89;WUTTZW]CMu 5Ijx/#/* * Readable mechanics transcription for TDKPIN.EXE. * * Target SHA-256: * a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c * * This is a named, reviewable companion to TDKPIN_GHIDRA_RAW.c. It is not * claimed to be the vendor's source or a buildable replacement. Every * restored routine below names its raw address, and unresolved conversions * stay explicit instead of being filled with guessed values. */ #include #include enum { SOUND_RESOURCE_BASE = 2000, SOUND_CLAW_CAPTURE = SOUND_RESOURCE_BASE + 15, SOUND_CLAW_RELEASE = SOUND_RESOURCE_BASE + 16, SOUND_FLIPPER_MOVE = SOUND_RESOURCE_BASE + 21, }; typedef struct { int16_t x; int16_t y; int16_t width; int16_t height; } RectI16; typedef struct { bool left_control_down; /* object +0xbda; scan code 0x1d */ bool keypad_enter_down; /* object +0xbdb; scan code 0x1c */ int16_t left_position; /* object +0xbd4; recovered range 0..1 */ int16_t right_position; /* object +0xbd6; recovered range 0..1 */ } FlipperState; typedef enum { CLAW_OPENING_OR_IDLE = 0, CLAW_CLOSING = 1, } ClawSpriteBank; typedef struct { bool active; /* DAT_1028_07ca */ uint16_t frame; /* DAT_1028_086d; initialized to 10 */ uint16_t target_frame; /* DAT_1028_086f; initialized to 10 */ ClawSpriteBank bank; /* DAT_1028_0873 */ bool animation_blocked; /* DAT_1028_0874 */ bool ball_suspended; /* game object +0xbdf */ } ClawState; typedef struct { uint16_t low; int16_t high; } MillipixelWords; typedef struct { MillipixelWords x; MillipixelWords y; } RawClawReleasePosition; typedef struct { float x; float y; } Vec2F; /* * FUN_1008_0002 at 1008:0002. * The called loader/player resolves argument N as Win16 WAVE resource 2000+N. */ static void play_sound_number(uint16_t number) { if (sound_is_not_muted() && sound_device_is_available()) { play_wave_resource(SOUND_RESOURCE_BASE + number); } } /* * FUN_1000_638e / FUN_1000_6bf8 (keyboard release/press branches). * The original controls are binary input flags. Motion happens later in * update_flippers(), once per changed edge. */ static void set_flipper_key(FlipperState *state, uint8_t scan_code, bool down) { if (scan_code == 0x1d) { state->left_control_down = down; } else if (scan_code == 0x1c) { state->keypad_enter_down = down; } } /* * FUN_1000_7ed9 at 1000:7ed9 and FUN_1000_8b0d at 1000:8b0d. * delta is -1 for key-down and +1 for key-up. The first routine updates * the live collision geometry and always starts sound 2021; the second moves * the matching rendered flipper geometry. */ static void move_flipper(int flipper_number, int delta) { play_sound_number(21); update_flipper_collision_geometry(flipper_number, delta); update_flipper_bitmap_geometry(flipper_number, delta); } /* FUN_1000_99f0 at 1000:99f0. */ static void update_flippers(FlipperState *state) { if (state->left_control_down && state->left_position == 0) { state->left_position++; move_flipper(1, -1); } else if (!state->left_control_down && state->left_position != 0) { state->left_position--; move_flipper(1, +1); } if (state->keypad_enter_down && state->right_position == 0) { state->right_position++; move_flipper(2, -1); } else if (!state->keypad_enter_down && state->right_position != 0) { state->right_position--; move_flipper(2, +1); } } /* * FUN_1008_0e08 at 1008:0e08. * Resource 900 is a 900x296 sheet: nine 100x74 frames in each of four rows. * Closing uses rows 0/74; opening and returning use rows 148/222. The * destination is the logical playfield rectangle x=238, y=47, w=100, h=74. */ static RectI16 claw_source_rect(uint16_t frame, ClawSpriteBank bank) { uint16_t column_frame = frame; int16_t source_y = bank == CLAW_CLOSING ? 0 : 148; if (column_frame > 9) { source_y += 74; column_frame -= 9; } return (RectI16){ .x = (int16_t)((column_frame - 1) * 100), .y = source_y, .width = 100, .height = 74, }; } static void render_claw(uint16_t frame, ClawSpriteBank bank) { const RectI16 destination = {238, 47, 100, 74}; if (frame == 0) { restore_playfield_background(destination); } else { blit_claw_sprite(claw_source_rect(frame, bank), destination); } } /* The only terminal frames selected by the collision branch at 1000:c79c. */ static const uint16_t CLAW_TERMINAL_FRAMES[4] = {1, 6, 7, 18}; /* * Raw signed 32-bit millipixel positions assigned by export ordinal 10 at * 1000:eab1. FUN_1000_9bca adds 500, divides by 1000, then subtracts the * eight-pixel ball radius only for bitmap placement. The physics position is * therefore the raw value divided by 1000, not a 16.16 fixed-point number. */ static RawClawReleasePosition raw_claw_release_position(uint16_t frame) { switch (frame) { case 1: case 3: return (RawClawReleasePosition){{0xefd0, 3}, {0x30b0, 1}}; case 2: return (RawClawReleasePosition){{0xf3b8, 3}, {0x3c68, 1}}; case 4: return (RawClawReleasePosition){{0xfb88, 3}, {0x4ff0, 1}}; case 5: return (RawClawReleasePosition){{0x0f10, 4}, {0x5f90, 1}}; case 6: return (RawClawReleasePosition){{0x1eb0, 4}, {0x6f30, 1}}; case 7: return (RawClawReleasePosition){{0x3238, 4}, {0x7ae8, 1}}; case 8: return (RawClawReleasePosition){{0x3df0, 4}, {0x7ed0, 1}}; case 9: return (RawClawReleasePosition){{0x4d90, 4}, {0x8a88, 1}}; case 18: return (RawClawReleasePosition){{0xf588, 4}, {0x6760, 1}}; default: unreachable_original_state(); return (RawClawReleasePosition){{0, 0}, {0, 0}}; } } static int32_t join_millipixel_words(MillipixelWords value) { return ((int32_t)value.high << 16) | value.low; } static Vec2F claw_release_position_pixels(uint16_t frame) { RawClawReleasePosition raw = raw_claw_release_position(frame); return (Vec2F){ join_millipixel_words(raw.x) / 1000.0f, join_millipixel_words(raw.y) / 1000.0f, }; } /* * Real48 constants loaded in 1000:eab1 after converting speed scalar 3800. * The result is millipixels per timer tick. Only 1, 6, 7, and 18 are selected * as random terminal frames, but all switch cases are retained here. */ static Vec2F claw_release_velocity_millipixels_per_tick(uint16_t frame) { switch (frame) { case 1: return (Vec2F){3800.0f * -0.60f, 3800.0f * 0.00f}; case 2: return (Vec2F){3800.0f * -0.45f, 3800.0f * 0.05f}; case 3: return (Vec2F){3800.0f * -0.70f, 3800.0f * 0.30f}; case 4: return (Vec2F){3800.0f * -0.30f, 3800.0f * 0.20f}; case 5: return (Vec2F){3800.0f * -0.32f, 3800.0f * 0.22f}; case 6: return (Vec2F){3800.0f * -0.40f, 3800.0f * 0.60f}; case 7: return (Vec2F){3800.0f * -0.31f, 3800.0f * 0.70f}; case 8: return (Vec2F){3800.0f * -0.20f, 3800.0f * 0.80f}; case 9: return (Vec2F){3800.0f * -0.10f, 3800.0f * 0.90f}; case 18: return (Vec2F){0.0f, 1000.0f}; default: unreachable_original_state(); return (Vec2F){0.0f, 0.0f}; } } /* Object-id 0x59 branch inside FUN_1000_c79c at 1000:c79c. */ static void begin_claw_capture(ClawState *claw, uint16_t random_0_to_3) { if (claw->animation_blocked) { return; } claw->active = true; claw->target_frame = CLAW_TERMINAL_FRAMES[random_0_to_3]; claw->bank = CLAW_CLOSING; claw->ball_suspended = true; zero_ball_motion(); /* These moving collision records are absent while the arm holds the ball. */ set_collision_objects_enabled(12, 20, false); play_sound_number(15); /* recovered call immediately before this branch */ } /* Claw branch of exported ordinal 10 at 1000:eab1. */ static void update_claw(ClawState *claw) { if (!claw->active || claw->animation_blocked) { return; } if (claw->frame != claw->target_frame) { claw->frame += claw->frame < claw->target_frame ? 1 : -1; render_claw(claw->frame, claw->bank); return; } if (claw->frame == 10) { render_claw(0, CLAW_OPENING_OR_IDLE); if (claw->bank == CLAW_OPENING_OR_IDLE) { claw->active = false; set_collision_objects_enabled(12, 20, true); } return; } /* Terminal closing frame: redraw from the opening bank, release, return. */ render_claw(claw->frame, CLAW_OPENING_OR_IDLE); claw->target_frame = 10; claw->bank = CLAW_OPENING_OR_IDLE; reset_ball_forces(); set_ball_position_pixels(claw_release_position_pixels(claw->frame)); set_ball_velocity_millipixels_per_tick( claw_release_velocity_millipixels_per_tick(claw->frame)); commit_ball_position(); play_sound_number(16); claw->ball_suspended = false; } ,IJ=xZFG/* * HISTORICAL PARTIALsuperseded intermediate is retained only as provenance for the earlier * live-probe work. It is not part of the completed readable-C deliverable. * The authoritative complete address-linked implementations are under * reconstructed/, especially tdkpin_flipper_collision.c, * tdkpin_flipper_bitmap_geometry.c, tdkpin_physics.c, and tdkpin_timer_tick.c. */ #include b!x&/* * Readable fixed-point physics transcription for TDKPIN.EXE. * * Authority: * SHA-256 a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c * * Primary raw routine: * FUN_1000_c79c at 1000:c79c (movement, object scan, response dispatch) * * Supporting routines: * FUN_1000_638e / FUN_1000_6bf8 (launcher key release/press) * FUN_1000_7ed9 / FUN_1000_8b0d (moving flipper records) * FUN_1000_b476 (rule flags) * * This file transcribes behavior that has both static and live differential * evidence. It is not claimed to be the vendor's source. Unrestored rule and * persistent-contact branches remain in TDKPIN_GHIDRA_RAW.c rather than being * replaced here with plausible code. */ #include #include #include #include enum { PHYSICS_SUBSTEP_MILLISECONDS = 10, GRAVITY_MILLIPIXELS_PER_SUBSTEP = 15, MAX_SPEED_MILLIPIXELS_PER_SUBSTEP = 3800, LAUNCHER_IMPULSE_MILLIPIXELS = 375, COLLISION_OBJECT_COUNT = 175, }; typedef struct { int32_t x; int32_t y; } Vec2Milli; typedef enum { OBJECT_TYPE_CIRCLE = 1, OBJECT_TYPE_LINE = 2, OBJECT_TYPE_LOCK_OR_MECHANISM = 3, OBJECT_TYPE_TARGET_SENSOR = 4, } CollisionObjectType; /* Semantic view of one initialized 0x53-byte record from OBJECTS.tsv. */ typedef struct { uint8_t id; CollisionObjectType type; /* record +0x00 relative to field base 0x095b */ uint8_t subtype; /* +0x01 */ bool active; /* +0x34 */ Vec2Milli bounds_min; /* +0x02 / +0x06 */ Vec2Milli bounds_max; /* +0x0a / +0x0e */ Vec2Milli point1; /* +0x12 / +0x16 */ Vec2Milli point2; /* +0x1a / +0x1e */ int32_t radius; /* Real48 at +0x22, decoded to millipixels */ double normal_rebound; /* Real48 at +0x28 */ double tangent_coupling; /* Real48 at +0x2e */ double auxiliary; /* Real48 at +0x35 */ double normal_kick; /* Real48 at +0x3b */ uint16_t flags; /* +0x41 */ uint16_t contact_state; /* +0x43 */ uint32_t score; /* +0x45 / +0x47 */ uint16_t layer_mask; /* +0x49 */ } CollisionRecord; typedef struct { Vec2Milli position; /* DAT_1028_07d3 / DAT_1028_07d7 */ Vec2Milli predicted; /* DAT_1028_07db / DAT_1028_07df */ Vec2Milli velocity; /* window object +0xbaa / +0xbae */ Vec2Milli previous_position; /* window object +0xbba / +0xbbe */ } BallPhysics; typedef struct { bool hit; double progress; Vec2Milli response_velocity; uint8_t object_id; } CollisionCandidate; static int64_t cross(Vec2Milli left, Vec2Milli right) { return (int64_t)left.x * right.y - (int64_t)left.y * right.x; } static Vec2Milli subtract(Vec2Milli left, Vec2Milli right) { return (Vec2Milli){left.x - right.x, left.y - right.y}; } static Vec2Milli add(Vec2Milli left, Vec2Milli right) { return (Vec2Milli){left.x + right.x, left.y + right.y}; } /* Type-2 branch inside 1000:c79c. The registered direction is significant. */ static CollisionCandidate line_candidate( Vec2Milli old_position, Vec2Milli velocity, const CollisionRecord *record) { Vec2Milli line = subtract(record->point2, record->point1); Vec2Milli from_ball = subtract(record->point1, old_position); int64_t denominator = cross(velocity, line); int64_t path_numerator; int64_t line_numerator; double length; double tangent_x; double tangent_y; double normal_x; double normal_y; double normal_speed; double tangent_speed; double outgoing_normal; double outgoing_tangent; if (denominator == 0) { return (CollisionCandidate){0}; } path_numerator = cross(from_ball, line); line_numerator = cross(from_ball, velocity); if (denominator > 0) { if (path_numerator <= 0 || path_numerator > denominator || line_numerator < 0 || line_numerator > denominator) { return (CollisionCandidate){0}; } } else if (path_numerator >= 0 || path_numerator < denominator || line_numerator > 0 || line_numerator < denominator) { return (CollisionCandidate){0}; } length = hypot((double)line.x, (double)line.y); if (length == 0.0) { return (CollisionCandidate){0}; } tangent_x = line.x / length; tangent_y = line.y / length; normal_x = -tangent_y; normal_y = tangent_x; normal_speed = velocity.x * normal_x + velocity.y * normal_y; if (normal_speed <= 0.0) { /* back side is a one-way pass */ return (CollisionCandidate){0}; } tangent_speed = velocity.x * tangent_x + velocity.y * tangent_y; outgoing_normal = -record->normal_rebound * normal_speed; outgoing_tangent = tangent_speed + record->tangent_coupling * normal_speed; return (CollisionCandidate){ .hit = true, .progress = (double)path_numerator / (double)denominator, .response_velocity = { (int32_t)llround(normal_x * outgoing_normal + tangent_x * outgoing_tangent), (int32_t)llround(normal_y * outgoing_normal + tangent_y * outgoing_tangent), }, .object_id = record->id, }; } /* Type-1 branch inside 1000:c79c. */ static CollisionCandidate circle_candidate( Vec2Milli old_position, Vec2Milli velocity, const CollisionRecord *record) { Vec2Milli offset = subtract(old_position, record->point1); int64_t old_distance_squared = (int64_t)offset.x * offset.x + (int64_t)offset.y * offset.y; int64_t radius_squared = (int64_t)record->radius * record->radius; double a; double b; double c; double discriminant; double progress; double hit_x; double hit_y; double hit_length; double normal_x; double normal_y; double tangent_x; double tangent_y; double normal_speed; double tangent_speed; double outgoing_normal; double outgoing_tangent; if (old_distance_squared <= radius_squared) { return (CollisionCandidate){0}; /* persistent state suppresses repeats */ } a = (double)velocity.x * velocity.x + (double)velocity.y * velocity.y; if (a == 0.0) { return (CollisionCandidate){0}; } b = 2.0 * ((double)offset.x * velocity.x + (double)offset.y * velocity.y); c = (double)old_distance_squared - (double)radius_squared; discriminant = b * b - 4.0 * a * c; if (discriminant < 0.0) { return (CollisionCandidate){0}; } progress = (-b - sqrt(discriminant)) / (2.0 * a); if (progress <= 0.0 || progress > 1.0) { return (CollisionCandidate){0}; } hit_x = offset.x + velocity.x * progress; hit_y = offset.y + velocity.y * progress; hit_length = hypot(hit_x, hit_y); if (hit_length == 0.0) { return (CollisionCandidate){0}; } normal_x = hit_x / hit_length; normal_y = hit_y / hit_length; tangent_x = normal_y; /* clockwise tangent */ tangent_y = -normal_x; normal_speed = velocity.x * normal_x + velocity.y * normal_y; if (normal_speed >= 0.0) { return (CollisionCandidate){0}; } tangent_speed = velocity.x * tangent_x + velocity.y * tangent_y; outgoing_normal = -record->normal_rebound * normal_speed + record->normal_kick * MAX_SPEED_MILLIPIXELS_PER_SUBSTEP; outgoing_tangent = tangent_speed - record->tangent_coupling * normal_speed; return (CollisionCandidate){ .hit = true, .progress = progress, .response_velocity = { (int32_t)llround(normal_x * outgoing_normal + tangent_x * outgoing_tangent), (int32_t)llround(normal_y * outgoing_normal + tangent_y * outgoing_tangent), }, .object_id = record->id, }; } static void begin_substep(BallPhysics *ball) { double speed; ball->velocity.y += GRAVITY_MILLIPIXELS_PER_SUBSTEP; speed = hypot((double)ball->velocity.x, (double)ball->velocity.y); if (speed > MAX_SPEED_MILLIPIXELS_PER_SUBSTEP) { double scale = MAX_SPEED_MILLIPIXELS_PER_SUBSTEP / speed; ball->velocity.x = (int32_t)llround(ball->velocity.x * scale); ball->velocity.y = (int32_t)llround(ball->velocity.y * scale); } ball->previous_position = ball->position; ball->predicted = add(ball->position, ball->velocity); } static void apply_candidate(BallPhysics *ball, CollisionCandidate candidate) { if (candidate.hit) { ball->velocity = candidate.response_velocity; } /* The original advances from the previous position, not the hit point. */ ball->position = add(ball->previous_position, ball->velocity); } /* Keyboard-repeat behavior recovered from 1000:6bf8 and 1000:638e. */ static void launcher_down_event(BallPhysics *ball) { ball->velocity.x = 0; ball->velocity.y -= LAUNCHER_IMPULSE_MILLIPIXELS; } /* random_less_than_3800 is Borland random(3800), FUN_1020_14a4. */ static void launcher_release_event(BallPhysics *ball, uint16_t random_less_than_3800) { launcher_down_event(ball); /* release applies one additional impulse */ if (ball->velocity.y < -MAX_SPEED_MILLIPIXELS_PER_SUBSTEP) { ball->velocity.y = -MAX_SPEED_MILLIPIXELS_PER_SUBSTEP + random_less_than_3800 / 40; } } /* Keep pure helpers referenced for strict syntax/warning checks. */ typedef struct { CollisionCandidate (*line)(Vec2Milli, Vec2Milli, const CollisionRecord *); CollisionCandidate (*circle)(Vec2Milli, Vec2Milli, const CollisionRecord *); void (*begin)(BallPhysics *); void (*apply)(BallPhysics *, CollisionCandidate); void (*launcher_down)(BallPhysics *); void (*launcher_release)(BallPhysics *, uint16_t); } RestoredPhysicsFunctions; const RestoredPhysicsFunctions TDKPIN_RESTORED_PHYSICS = { line_candidate, circle_candidate, begin_substep, apply_candidate, launcher_down_event, launcher_release_event, }; 21f xwMN/* * HISTORICAL PARTIALsuperseded intermediate is retained only as provenance for earlier * static/live comparison work and is not part of the completed deliverable. * The complete 1000:c79c implementation is reconstructed/tdkpin_physics.c; * its rule and persistent-contacta dependencies are likewise represented by * address-linked verified modules under reconstructed/.$+xstart end bytes hex classification evidence 1020:0666 1020:0666 1 ba overlapping-entry-opcode BA 33 D2 is mov dx,0xd233 at 0666; entry 0667 intentionally decodes 33 D2 as xor dx,dx 1020:0dea 1020:0dea 1 90 alignment single NOP between the 0d97 and 0e93 Borland runtime routines Wkxq100644 README.mdh(!87z`40000 decodedy̍wlyU` 100644 manifest.jsonm^4ꥌ8\kکIk40000 rawI)Zc±Ju$}L18]x%# Extracted TDK Pinball assets This directory contains every resource in `TDKPIN.EXE`'s Windows 3.x NE resource table. ## Layout - `raw/`: all 63 resource allocations copied byte-for-byte from the executable. These files intentionally retain alignment padding and are the lossless source of truth. - `decoded/images/`: 34 custom 8-bit DIB graphics and three standard bitmap resources converted to PNG. The standard bitmaps also have BMP wrappers. - `decoded/palettes/`: the shared 256-color RGB palette as a swatch PNG and GIMP palette. - `decoded/audio/`: all 16 RIFF/PCM resources trimmed to their declared RIFF lengths. - `decoded/icons/`: the application icon as ICO and PNG. - `decoded/dialogs/`: all six packed Win16 dialog templates decoded to JSON, including bounds, control IDs, classes, captions, styles, and fonts. - `decoded/metadata/`: printable strings and fixed fields from the version resource. - `manifest.json`: resource ID, original file offset, flags, allocated and meaningful sizes, hashes, format metadata, and decoded paths for every entry. The custom `DAT` graphics omit an inline color table. They are decoded with the executable's separate `PAL/999` resource; the raw DAT and PAL bytes remain separate so their original storage model is preserved. Run `python3 tools/extract_ne_resources.py` from the repository root to regenerate the directory, then `python3 tools/verify_extracted_assets.py` to verify exact raw-byte round trips and decoded file structure.  x640000 audioԔN'Xns40000 dialogsI֎CvD40000 iconsAe\R"d 40000 imagesKHzeǛ Kxc140000 metadata>qH5s1sE40000 palettesId>~zl_&qiUJ)xo100644 wav_02001.wav1_]K"Ee1j100644 wav_02002.wav=1M 4.Fފ:100644 wav_02004.wav:Uh斤-mX100644 wav_02006.wavdh"N4U9100644 wav_02007.wav{OrG}npG100644 wav_02008.wavNHծ9Us7"100644 wav_02011.wav[[,-a100644 wav_02012.wav!.zi&ғ100644 wav_02013.wav vqJ=ޱw[@100644 wav_02015.wavzG<)c5100644 wav_02016.wav^2A'!E100644 wav_02017.wav u]6rxvrv+ CƲnjwsgmbjA.`uć;0Qaf|ht}[Y~Т_OhqdbtvdiN:_tZ<0EyĬ`XXZ_hvʭfI>H]jrjZG:DcmYNJK[yqULYjrzıyiVOTc}k]ZX\jzR=BZqw]E=DZx`WPIJXqhL9>Zr_KBH^{}bUQT_q½jOCK_sqdSEFXvjSIOZfqpWFHXhz~pUDCRw~_NPXcvp^VYepyö~i^YWT_zvbOCKhxN6=]~}^TYYYexñiYUX\gq}qR46\}cSOPZqlTLWkvyxojXKUhyhQKPZvy[LQ_oo_VXdnywg]ZTXv{cTPTgo\OKWqrcZVYg{yg\VVd{odRDPk{eWNQbuo\VW_rxoeQHZwo]VW\frwaVWbnyxi[RYmtg]Y[dwweXZfpwui^V[jve[Y^izr\QWh{raXW`pxpmhb^fqVZtl[\oxkdkpZn]\sjUklihdw|zzs{cwpplgu~xU[s{w{|uYPb{{nr}kSUvzZObz~z|^Sdv~quxaX]onY_nxrj|}lWWwxmpxvjgvtZUk~~vkOPpwqxwjhu}g\dxx{wmfdky}xq^[n|kdoyz}oemy|z{}utwwskq|pjhn}}f_eswnqvtqsyrqvsptsuxlberrifir}tkku{{tolpu{vifmw}uplltzz~tfcfxwkkmrymjsx|{tqrwupvulliqtidi{qkry{ywxuow~tqurbf{tc`rrmowzvwsrwxspq{ylip{khsy{~sqvwrv~uw~zoku}~nllp~gfou~|vvyvry}{y||tjkz}pmlq}rppov}}zzurtuvzpkovvtnnyyvqnu|ytttw~ztrs~ylly}{sqvzwv{xwqn{~rkn|oiq{~upw||zy{wu|xty|rmt~~uqt{|xxy{}|||yxwy{y|woqu}{usswwrsy~}}~xux}|vv}zy|{qpyufhyvlkvpkrtvsw~}yqvx|ylis|sjpzvnu}wyy~yb_p~olim~ojlv~xops{wyvv|}{wtz}zuhhruimy~ww}~yx{}yzyxwy|wprw|ztprxvomr{|wros{zolpx}}uppsy{y{yrrxyvuv{}||vruz|xnks~usw}wmr~tu|oo{}~~~ngq~t~rfl~qknx~x}qgnwuz{uwwuvutyxyhaatzkaYaxfUbzwokqxrn{{icjsuu}|vgbj|ub]iw~~vniowy{zxxtomtvkciw~kahs}{{~|wqil|{truvx|}ibi{xqqont~zuxyrmr}zqc`vmefmzxrsx}zru|xo`^p}sjflytiju{~yrusnlq|zvrmnuz}rmlpz{rqtrov}wwslnx~sjjqzxpppot||y{wnkq}xlkpxwkks{}|tssttw}}ngmy{oiou~|ojpwy{~{wxz{vnsux~xuzv}}uw|ygkvprv|pdesznl{ux~~yu{zw|uruuuxyuqt{{zxoos|plw}w{xols~}}yuqot}x||lisulpoiux`[t{|x{vpslqsmiupfvwlu{|wr~zwt{~{vi_mpqrc`m||{mfryip~jo|svoynhl{to|~fanw}{qsy}zsqyvmruwtmrl_^[edRP]seafw~vym__nuvumnty|uozvebktxd_fot|zq\R\~zi^forym_hvztnwzjjuzngusmg^d{|p`ar~roljq|pikkmoy~zm`bs}u|wnjrr^bxyu}}tlijs~yvk]eyqgabuvc_crrwkgz|sjap{xncekzyoSLguhb^k~tllpxvjs|xta`er|ocht|vq]Yq}sx{swyjpvxs]b{va^n}v~deqx{{{tv}wmjm|qdgns~uidiqunlknxwken}}yqnwvp~{x{|slwsdkx|tir{z|z}xswxxzsswxvyzx|ujm|okr}kdjv|{vulot{w{xgf}ws|_gpkv{vy|xlt~r{jcsxxsquv{~utuv~ryrvxvvt~zupqw|kizzzxx~xw{vvx{}|}rv}wvwzz}zz~xww}~snrzxywy~xmr~z{~~~{vv~{vy|tt}~|xz~}~~}}~~~}}}}~~~}~~~~~~~~~~~~}~}}~~~~~~~~~~~~~~~~~~~~~sxA%x RIFFWAVEfmt VVdata~~~~~~~}{z|}zy~~}vw}zde|gzfeq~|~km~~mNF_U ډH9Oܴ|: _/٢l3#5ki5.l?te8k=rYA?q1m dnA[u@jPhkxa06KXpX2(7?OH8<:H4:hTD:TTABTNarvPAexpnZ^rxqZcuyȿƱmlclUbpeRF=JQWZ1(?/(1DV_j{{~οo\MIS_bYQPX[P:)&-31/6J^f`VQYeqx{vjghig`bn{zjSEHQQNRc|~|ȻvfWJB>=BKU\XL>:93($CHJHB;60)$'4FXgużvcTJDACFLPQOJA6/-,.28CR^fmrvy|ļzmbYQMOVajid^XTROKNWet|m^QF<747@CCA@BDC?=BLV_kz¶}oe\NA=>CFFEEC?===;:=DQ^diow~wj]VX[]\]_`^ZYY[]bhoxztohZMDCEEC?ADGFC@?BEGLR\ixpe_WNGDDFEDCBBA>;78?KV\^cmx|}~vla]^a`_^bdda[WUX_hqw~~|zvnbUJDBB@AEJMIECDCCEIR]ju»{naSIEGKJGEEEFC>98:>FOXaisz{xwwf^^bc_]bjpmd\XXWX^fstcSLJG>45@OWSKHIJGBBIXftķvjZH>>GOOJEGKIB:68>EKS]jv{|{z~p`[\ababgorlaYZ^aabiw~}zn^SMJF@<>GOQNJKMOMJJS`pz}qdVJDEJLKGEHLJC;8LVXQG<9>J`vujcgwɿƻ~|}pYJHNVbs}xgP>438CTdmpi^VTYey´sYJHPYcii^M;22339@DFFEA?=BRjwnlt{xzwg[WW[cmvujZK?:>HWbjli_VQS^qĹv`VU]beeaYOD<8>HUbksvtrwʿwtyp_OA;=CJNPKC==DQ^jprssspr{wgXQT[cmqnbVKD@AHU`efb``begm{k\UY`gjfZMEDFKOV_immlq~¾{tv|nb\VMEBFLMKECEKR]hqtrrqlhowj[RRZdknjc]WPHBBLYdgdaaeknt{zk^Z[\]\[XUUUUUW[bggejz¸{|vh]\__YRLJIFBADMZgorroomkhm|{xjZPR[gmnjcZSPPPORW^`\Y]fpsuzľxngfikg\PHHLU^cfffec`bqzhXPRWZ]]^WK=58CTdu}zslhgiq}w{raWW]dkomcXPPSUX^aa\UQU`ku}vnlmkc[TOLLQ[ekkgc_^_i{wk_VVZ_ab_WNE>CQcsvjXNP[jx}qkgefl{{aJ;:BJNOT_ikhddn|{}vpwxonolaTHBENYbikfaZVXZ`mwqs{xeTD96=N`msk^SQ[ix{slghnzjTFAAEHKNV_degiozxw}{y}yvslbTH@ALYempnhaZVU[h{~utxkUD;;BO\glje_\_ftyojkqyueUIC@CHPTY]`fmvz{xn]OGCGNW`hpttk`XWam|~t^LAAGPX]`beimoruzx{wttzztkbZVSMGBBITZ^bkv}nZKDGNW^adhnqnidciq{|{naVPOOSWYZ]aejry}~~~{xy|pbXTWYUOJGHMSYbmy|~tcQEAGRakprplhffinw}xwz}tbRJLS]fhd\X^gpv{{y}}qf`ZUOIGHNUVSQYj|zn`WTSPQV`kswxvpgbgt~xx|~yuyo`SLMT^ccbelrrnmt}z~wqmje\QFACJRSQS_p~|zmaZVROOValtz~~yrjgmvvoov~{}ygXOQW\\\ajv~}umoz|~y{~voklkcVIDFLQPMQ]o{|}wof^WSRU_jtyz}~yrnrz|xz}~|wrqv|{xzqcYVZ^abbdkrwwx|}}|yxojfb]VQOPSSPLLUetvqv}{rke]SMQ_nyzyz{zwtuy~~ytqqsw}}unoxwojgd```ababhqw~xuy}wxzpf]URV\`_ZQICEObvwkhp}wme_ZWV_m{~yplr|ztpmlptz~~ytrs~uljlnlhfdb^Z]ixxrt}wj\QPSZ`a^WQLIKVj~~tmmt|{rjea\Z_jzxoow~yqhegp{ytpor{}soqqlebdfecagr{sqtwog^XUY`db[SNNPRYgx{otwru{{unmwqdVQ[pn]_uunoyyk`evxmjnrz~vqszzk]X\`cgoz|yttwjghcTDDVjm`NIPUYar{r|wuorr]TW_cekv|plld[[et|zrlmqu~z|}h^_a^VWgy~~}z|x{tndUJFKTXVQMMQZfs}}}ump~}{~yh^]`a_bkxzsh[ST\ciosspnu}{|~~zodZSSVany}|~z}oZIABFNV[[WPNVguujimwyx}|rifffefipvy~mZRTY\_hrwusv~{ysaUPQV_n|qZIEGIJQ[``]]ckosytnmntzvwxyzxtmghlqusqryscVRTZdmuyzy{}}th^XUW_n|vfWJDELT\_a_`dkqru{xqou}xtstvxwtojjnsuuuy{pbYW\envy{z|~||tlgc`_ak{~wm_OHJRZ_a``_agmrv~zwwzyqosy|yusrpnptx{}~}}~yod^^cluyyxy{||~|||}~znd^[^ix|yzvgXKJQ\ab`_`bdegmxyoov~xqpv|zrmlosw}~vtw~yi[SVeu~xwy{{|wuy~}sdXV^l|~yvzxdQGJUbgc_`fhhhjpx{mgn{yqqu{zrjjov|~upou|p]QTbqzzxy||zrnu}{jXRZj|{z|}~}kXJKU`ecaagjkijpzwnpz~yuvz~}wnjkqzzqos{tdYYcouuuv{~soqy~zsh`cjsy{|~~~~~|ocYUWY\^^begikox~{{~}||}|}|wojkr~}uqqx|rkiklkjlqux{}tpqv}~tnlnqrqqrtwy{}{~xnfdcb]YY[]^bipux|z{}zyxz{{}{umjoyzxtvyuomprqpoqqmlp}|wtuzysqsvvrpruurpsx}z{oiillga]\[XX]it{{{}wopw~wrlimy}}|yusv}vqrsrnlptspnpw|ytrwvnotwyxuspoopry|y}vmijlha^^\ZX[co||{{{xxyyyww{xrnklr~~xqms~utuwytmgeiotv|{oimywttwxtokloqsuw}~~|uvzqnnmh_VQV^cdfkx|xw{}topuz|~zsppqqxynjmv}wstusmgehovwy|or|~zqfchrzkcaa`bekusnnpt}siksurs{s]G;?NX_eniUSa{phkwrbWPS^n|fUMLUiyeTNUbsr`M?Opx`[RJM]vpbUKJQi}iZWPS^r~j`UIPiwsh^RN[n}uihUPccrweYRNVksm^ONZlyl^UX[ft~i_UIJgxöle]KI_svmhWJ[kvzl\NRdp~znWRZ]kpdWMUhvvncPP_l~}uk]UV_tscYPSezvl_QV^m}qd\]`dvpcYPSgwob[TResic[PVln^[ZZ\wmaaUP_zwgY^\[iti_UQ[o~{gUSXXlo^WQIYpxkaYQYezpg`PL`p}wodYUP]ti`YOJXv{gf[KM^ozmcTLS\s{lc\OUamxm`^d_[kse_\PVo~wgWHHSlzogb^XZhv}m]TNJYu}ha\LLVmvdMHBJc}{jSCH^}ziSFCDRq¼n`SFBIc~|fWJBKVrwgVJKMZv~m^RGGVi~whZO@EZxŵp^RIELiõ{hWIFHYszbPFCI^z¹pbI=ANdþ}kYKBEUnĿ{gTLCGWr¼ydWMDJ\vybWHEL^|{gXQGCXtż}hXLIERlkWMEAMhŽt\J@@PjĸlWJDELazreRIFK\o}m_TNOTcvzqbVRSXgz}rb[VOVesqd\TQS`rsfYQNP_o~vi[SMGXkx}lXPKHRgzp`TIFN_nvbVKEHTgx|l^NEBI_pubSIBDUg}}k]RHBI]mzgVNHHRapxgXNFCPeuwbRFABRfxúmYKE>BUkĺygVG?BQ`qk[ODBHR`vugQ@>DO`sp^I9=CM[v~jXK?=FObvq[I:9DQbwjWG;;IYj{hVGAMTdyyi]PKEH[mqaODHS`m~}hXLDHN\oqaQF?EXkxwfWKEITcu}n^VMHP_tzk]TQOVit|ufXPKMYpymbVTQTcu|q^PJO[euxfYTMNXfvuk_VMLZevumaVONWgv}phbZNLTh|xodYOMNYirg\TOMTev|teYTQR\gzzl`ZW[Z[m{xpd^YY[co|nd`]UU]hoe[TQQ[kzqaTONQYjvj]QQPParwj[SNR[ctp^VRUSTn}yp`QRUT_txk\SNQY_tqaUNQSYrwlWMLNWdz|kZMIMU^x}hWGCJWdvfUKFNW_r}hTGEJR_um\KAFKXkq_O@>HXl½q]MCEIQiül[NIJK\w~k\NGLU^wscVOLR_n~m\ONP[m~vgXWWVd{tha_`biytidcfmt}ykdfjjs{kd^bhq~zj_^`dn~{og\\dkutf^_adp{ne]Z_jqvg]RT^fvwgZONTavzfWONR^qkYQOU]nzk[SR[fuviYSV[hysdYUW`n{}qe[SXbl{{mcWW]ivvlb^]eu~{phd[_kw|m`Z`ag|vf\XY`k}rb[YZ`p~k^\[_et}i\[a_f{{mc^^_ft|odbabizwkc`gjsrgelklz|pfafjr~zog]^hmzuia_beo|rcZX^jxvg^^_ar{h[XX_hzw`YSUYetr_QNU^k{}oaWSZapucXUYapl[RPXbuxfYNN\fsyjXMQ]ertaZY[dr}qbYZbnytg_ZUassd][Y^m|zjaZ\\hz~odb_clzzkb`aerse][_gv~~pdXSYblz{gWRPS^sn]URT_m|sg[VT^px|n^VY_j{{l`]Zaku|oi_V\gryyle]W`gq}zpg\Zcisywhgbcfo|~rljeejr|}uieeeioythc`^cittkcWW[brwi^XVV_jznaZTUZdtwg]TQ[_g|rf]YYV\m{tf\URU^kxxh\STX[gu{la_UTY`mncZTPU_l{qg[TPQ[kx}qe^X[_eo{|wrji`_gioypc[TW\fuym^KFPTZrugWGGKM\zuk`TFGR^pwiWHGKS]kn_PD?BUds¸zcRGB>K]jueOFCDScrxdTIFLP]n{|lZIGEHVfx}jXNC>GQbut`MB>BO^nz|cTKF>DT\ptbPB8?GTkzhWH=@DM[oziYG=AJ\wxkZGBVevkUGCCJT`qzgUMHCDR`npYLG?DSbr|laMBBGR^v}o]M@GRUbpi[NIHGPZmzm_SD=EReumYI@GPT_n{hZPIKIRcq~q]JCAHS_r|kUEHFIP_tveXNCDFOdxwgXD:AMVgwr`QC=BOVf|s\NC?FOYi~~hWKCBCP_nudSFCBFWgz~o_LADRbuwaODABIVex}l\PCBDL_o|jWDDEEParvkYLGEGPfvylZJFHMWgrxmbWQKMR^m|xk_RJHP\bqufXJDJOVfx|j[NDBLR\m~tbTJEFHUfszoaOLJHRao{yoaYVOPRYjxwo_SMKSZer~|mZOGGMO\kzxgYHDJGLZj~sgZMDDEN]pugZQHDIRao}}n`XLGLT_hureZNNRPT_m{wmdXQQNR[o~}tmcYUU_ckw}vncac_acemz}qicYVZ`hr|tiaXSW_diq|ofb\XYbfnz~tmh^[__ghq~rj_\XOXdlu~p`VSSV\kv~rj]YY[_biv}wld_YV\ckssdYURVU\gqsg_VNKPVdr{pd\QKPYfqxzmcUSTVZbjwvg_WMPNQ\h}|pc[SJFLYhx}o\SJNU[fmwsi]WXXSWcmx~sh\RNMMTevwm^RJGIQ^l~|mcWNKLT]iwzohZROOXeqw}wd\STSUX`my~qbWJBGMWjv{hXKABLT\gsnZQMLLQV\i|}n^\WLDGWaqtfUFDGNZeqzlWHBHIJT[nug\TLC=H[mjQD=>J_jlvjWMIGMPQ[rre[QKGFIViwhULB;ETdoylUGEGJO\^loeZTRFFP[p|qaPHEIQYdqqdXTRONQ[oyndZSMFM[hx~sbSNLNYdnr}{eWTTTUZajz|mb^[RJQ\cv~rcYMDL[bpyqYQKIPU^frncWTQLHR`nwlaUOFGR^qvaPMKJYghp~w`QVVSQT\iti_VLER_l|{l^QPST^co}q_QPPRZbmyrfXRSSUWdtvnbWSRHMbn{~veRLFHS^mxxhVOQUXS\istmk_WPGERn|tcKHKSX`ip}ldXMRQNTbrwpbVUVNOVgw}{oeUJFIYhsztfVMTTSW]n~}od]RLMS\ly|saVSRSY`jtxoaVPRXYgv~wh\USVT]em}~ujZUQMWbmxrcYTVZ]dpszjb][WVV]gz~tl`TNTakozp^WSTXbdgqyjeb[[[Z`nysi`UUW\bfp~ski^XTWZ`q|qf^TOU^dlx}nb]WYYW^en~qjcYXSOXgtvpgWOPU]_jy{sd\VPSXU]jvzl]XQQROY`rrg^UPILRWdx~pcXQIHJV_j{zm]SJIHNU\m{wh\PGFIPZ_k|vhZOKGFMT`o}wk_SMKLM[is{}pdZQOS[^clxtjbZY][_fjt}|qke`bc`afhwxupifcdfjsw{~tjiefhgkou|z}qnfcghikruuvpkhgdiijprz|rohjdachnsvxrjhdcbflpv}{rmjffinntwz{rqrqnmoorsv~|usnilqooqqv}zwqkhdbchqt|{uqia[WX^itu~vna^XPU\cns{~pja]]UZY[fpstjcb^]Z`feq|ynke`a^\`bejt|toib``_[Z[_l}|vrmga]WXY_fp|yqieaaZVZ\dnxxspihc^ZW\jnt~upmlde`YY_ir|xvuj\RUVWajs{}ukh^UVU_cow}zskc^XWZaiiv~{tnga^\]aegmx~ytihaT\badnv{zwmg^UX]biq{{}xh^XU\_intvw}~sj^[^\dmnoluzqki``hb\acivwmjaX[]SYdes|weg`SUVRU]co}te^YPLSQXbkt|xpe`_Z\^]]dntwjdd`][]YYbky{wpfb``ZUTZenzyvplaZQJPT`ou|wfZXOIKO`ho{|~{paWEHLT^alsv}xo^VOOTST^mmz{s`SOILOU[\lv{k`VNKONRV^lw}fZTKOMOTT[kxlc`YPPKIKVky}peZMJCGNWeq|wkZHEDGVU[ksxbYUNKHKMSav}rbWPMKILXcj~wqeZNFHKO^kn}}k_TLPPMRYapwh`YSTJJV^m{~nbWPJISWcgqvdXMHIHMWcix}k]QLIKJQ\ewudXIDCBJUamviWC?FILV]jzxj]OKEKHLXfyqcWKH@BOWfv}oWNI@ALUagqq[QLDFGK]ktshXHEDAGWgv¼zn^H;=CMXcn{wf[PH@BMSZiyyk[OIC>IX^jx}p`OFA?HTZfqq`QGCEKMW`j~qeYPKG?FT`p~{o^LFB@FU_juzoZOJD>FP[nyp^RIEGGP[er}ufTJFFCL^jqwjYGBDDM[gp|wj[MHGIOUamvzk[RLHKIO]i{~rhXMFDGP^itwk_PHJIJXdo|zpcSJJGPU\lwvm_TLGGLX`n{ugYQMGQW^hr|qg_UNONRZfxypg\UKJT\hp{zpaTNOV\ekoxwi]ZVV[]chmvyqd_[Y[[bksy~wkb_^^`dhnsx}skeb`bilkorzzunnmjgfgipw|zroihihjoqwyyqhihfgikkqvyrnjifb`\`iszpid\VPVZ_ktvl\UOLQU[dkuvnbSPNOQTYbl{pf\SNMOMR[`o~pd\SOOQOQYcq~uj_YRPOQUXamx{qf_YVTRSZ[cpz}tja[WURUVY`jtwoi_TRPQTY]gq}zme\TPOPPT\gn{}ne^URPMPW^enxwk`YSRSWaadkoxumea^\\]eddkpv~{slgcffa`]Z_do|yrkjf`YXWW[_fr}}pga^ZZ\VSQVco}tged`ZWQOT[eoxypnoh^[WVY\bmt}~tka]ZVZYZcmrw}uia\\WPQZ^bkrz}ld^WTSV\^cenxwmg`ZZY\ceejs}znhe[[\\__dmty{oe^[YWYacdhsx~ulc]WYY\abgnrzzph][Z\``cehmtvmc_``_``accku~qjdc_]`YZ]aelywqka_XUXXX\aiu{wnhcXTSQX[bhqw||tlj`[]YUU\dnu{xtoc[XPSXbkkmsy{rf^TQOS[_cjpx}vi[VSNQUY^dkoxyqhXPKMWY_cehszxk^YURVZ\^bhmt~wma[XTSVV\afot|}m^WTQRUY\Z`ho|kbaZQNRTSXbks~sibYSOLMSZagp}wm_XRKLMSV^hq~yj`XONNNTX`is|uf\TMKMRRW`hsp\WQMMMOUX_jywjaVMJLPSW^jtxk[SPOOQTTZgpymbZTQMMTW\gs{od^VPKNTY]fq~yobZYQLORW]cqwk`YTPNORTWct}sibWPOHGOV\kx{k_WMLGGHPX\j||pf[NJDCFHQ]hrtfZNGA@BGMUbm{{m]QGCDCDJQ[eu}kbVLHCCAALXewxj\THA<8AJVbm}{rdTI@99HV^krúxqd]TE>=BKR[hv}º~{vh`N=9/0?TfkaO9''>\y{ϷzY=/3CUbf^L5!'=]||x~ջrN7/7GXddWB.(@a}{wӸpO906I]fbT?*'Ba~wtͱIJpN7/:K[caR8 (DdtuεijoM94;HV][L6$(A_zvv˳°mO=8427CSds||y{¹rbYUW[]\TI=54;GVfs{|zz|re[XX\][TI?77=HXgtz{zy|Ľqd\\]_]YRH?99?JYhsyzyy|qd][^``ZPE<79@N\jrwxxy|qe_]_a_YQH?88@N]ktxxvw{pd^]ab`ZPG>89AO^jswxww{pd]]`ca\RH?8:CP_luyyvv{na]^`cb]SG=8:DQ`mvyxvvzÿ~mc]\_bc_UJ?88AN_mw|{wtxma\]bed^UH>7:DQ`nx{xuty½}mc`acdc_TG>;>FRanwxvtuz}pfbabed\QG@=@HTbltuuuw|rhccedaYQIB?CKUakruvwytjecbb_YQJDACJVakrtuwzujebcb_[SLDACJVajptuxztkfedb^YRKFDGMWaiosuwzwnifc_\WQMHGJOW_gnrvy}wojfc`\XRMJHIOV^elrv{~xpiec`\XSNKJMRX]dlrvzwpkgc`\YSNKJNQW_fmquzyrkeba]YSOMKLQX`gmrvz~yqifc`]ZUQMJLPV^houwz~xpieba^[VQLKKV`hosw|wohcba_[WRMJJMUhov{}}vlebcca]XRLGHMV`jxyz|vkebbbc_YRKGHMValsx{|tjcabddaZSJFHMWamu{|{~tbbbddaZSKFHMVbnv{{{{~sjcbbdb[SJGHLVcovz|{{sidbbc`YRKHHNXbmuz|{|tkebbcc[SMIJOWcnu{||}uib`bdda[OKIMWalu{~~shbabeec]UNJNWbmv|~~}ujcabdda]VPKJYbnv{}}~wkda`bca^XQLKPWmv|ujdaabba^XRNMQYcm}vleaaaba]YSOORYdnv|vmfb`a`_\WTQQU\emu{~tfddba_ZWSQSX^fov{~~umgbaa^[WTSUX_gotz~}tlgeca]YURSV[ahmsx}zrmjgec`XUSTU[bjpuy|zsmjhfc`[XUTW[biqv{}{slhffda]YUTX\cjquz|yqkhfeda]YWTUVcksy}zpjgeddc_[WSSV[dtz}wmgddeedb]WTRU[aluxngcbceeb^YTRSYclvpgccdedb_YTRU[cnw}xndccddb]XUTV[dmv{ypjdbbba^\YVX\dlt{{ridbaba_\XWY]ckt{{rjeaaab`\YXY\clt|zrjd``bba`ZXY\clu|{skea```a`][Z^cjs||skd`^_``_^[Z[cjrz|tld_^_```^\[Z]brz}tkd___`ba_\Z\^dks{qjfa```ba_]]]_dlu|skc^_`bcb`]\[_emv~{gb``bddd`\Z\`emvyog``aefc`][[]dnyymd_^eihea\YX^fqzxnd``cfie`[WY^fp|vkc_`chkja[WW]gsvkc^_ekmlg`UV]huvib_afillg`ZW^htujb`aejmkg`[WY^tvkcabeikkha[XY_htvB!Akq]V]hqm\PVnqk|úx}aQQ`teQSat~tlnteak{ucTNVnxfamx{yyoVEA?DR\]YW[dowyz˾s\NVUOA+:Tafgeftŭth_VJ7%&-17@HZuªmM0 ,38417JdȴnY@,#(.37724?Oczy?/1-!!,IWjǼw_I<:?EIG?635@TmVE:9?IQY^\XZ`kz~vj\RNNRUUUUT\kz}vvyyqcSB64:GXgmkkmoxmd]SLC=979@HQYdnxŸysjcXI8,$!4BLTY]ajzɽwkaXNE=3(""$*6DQku}p]K:,&'-1467:@KZmʼwo`N4.+-16=ENWbnu}scTLIGHHDAAEP]lwvj^SNLKLPUXZ`hns~qeYY]a`][XVZes{sfZPLNQUZdfiqw|tk`VLEEGJMQUUU[ft²}}wmM=3/07BLPRVZalzvmbTG=61245:@IWguǹ~gP;.).7>A>85CTiĴsbO@846888LX]ZTPT^ɻ~yveXK@8346:>DLVdpzɾlUB66<>BPYdlszvd[Y^bc\O>3/6F\q~~rvúpaW\_`]XRQTZbkqvy{nhgmtxsiZLM\o{ss|xdVQU^inmha]^fq}nc[V\aa]WOMQ]pƹoXD<>HRYZOJKScv¹vfWOIIJIE@<=DO`qµWGAEOWVMA3,0AWnȼxeXSSQKC;79BP^iprtxodadgg`SB728\nxyrihpndadjlh_SIEJUbnwyvv}soovsj]SPZhv~{ror|{j`]bkruo\WX`n{xmd^_`a_[WX`kxtaTMO\a`YPLLTbtuhRMKJHGHJLT^ouztXUWYZVNB84FUgvŽxj^UOLIIHHILQX^fq}yvutpg[B<=DP]fjkhjt}tolgd^XSQQUZ_eov}{qeZSRYbkqrmijq~pnqsuqld^]`mtyz|~~oopsrph^URbo|~xsxxh^\_ejjd\NQYgs}rligea[LGHNWbmsuuuzjb`chbWKB>BN[gpvwzzmid]WOHFIOWdffgmx{utuusk^PGCO[dklkjlq|zvusoiaUSW\aefhjnt}}{r]UU[emsusmltwrqswungb`agmvz~|xvsqmhd`adjt{~|zy~vbbfjonle^Z[lwxrke`]ZXWZchmpsvy~{necdilkdOIIP]jv}sha^\\ZXVVX]`fkxxvy}wn_RIGMXfrwnhfly}mmqtsog_XVYekptvz~}pbWV[t|~xmd`fswomt{t_]ckw~}z{{xxz|}zsb^bmx~to|~~zi_^fq||qdZW_kzxrpolhc\YZ`kv~xtu}o`bmw{xl]NGLY}|uvvokihfd`\Z_djnoprvwmls|xfIFN^p~|shcyvpqvzumd][^djnoosx~{}xi\WZesshacn}wpxvjcafnyvuyxz}}tjegmxsrx~riglt}vk_do{|~}wqnmnnmiffjow|}|xolmrvtmd[X[cnx{yzxqnmnmje`_`chruwz}~{wog_[\agrsqnlov{{|{zuoiedgjlnpsvz~yqkjlrvwtpljkq|{}{smkkoswz{yxx{~vpnptzyopv}zqor}tkefmwzx|zzwsqomlmrwzzxuvzwa^tj`fulWNmqr|y~yr{q]_q_PSh|eVWvr}}}edjquod\]co|vlfm~zd`loWKPbvl[U]rðl[`yyS6IeUazkxҾX@Jm{S?KljONioPT|C/IZ!2mh6,R߽I:`:-Sˡ+&L^Lڪo\ГN0_j0PlMN˱s{ӥoPZ]((TsA Oӷafώa^˃A$HwG%j̆OAhlIa1!Q| +gvVПsϿ]>]U,\pOH˧yègb{[A-3LkoWJTrƱ}SEFS`f^ADUpzͽ}MQbu{pZ=DXm|~zxus~^HGYv^QWl|sy|t{vfeuzaS[xbQ\}kTTmqXWkvhlnl{s`tiVkq`rzm{qyoo~qfetp`bw~e`pya\khX^ux]TfbYmĄ]P`H;MtEdF@XqgxkUeywg`|}tzxgicPRcvgdpw}s`d~|R9=ZqP@Mtudsu\`}S:NXXIUo{籍{|]A7:G`}ӾkLDNfV41ldŜbDEJJM[douw}ǷiTbrudE:Xtx̛XGM]mVFEYxz|Ų|qaXXURXg}̸{[?7`rkO9;ģz}tNB??A@[m|Ԗ{:/6EK+ *LvάqV?2- 0Ugyȧj`^O6 GOF>IǮʦigpumVAIWbedo|~qEJ`[[u’yt~cUZkzqe_d|vsrpg[Yex}}na[ddYF:XwϟaPD=8:FPXZ^бyd\_c\/#:ZrtkoųyoO;,&3HZZ\hþtlytcJ5EXdc]^yuri\OSbq{ujt|{n:4D^u{bavtnt}xeSLOemmov~{}bSXn}hctdes~{iVUk~lgc^WMPZdhiwtcdlvtD.+AeypzտseNC;67?O[kĠ}jjzoV7)CTWPL}uqndS12>M[^_huȶyNGJXbbRSezpxlXTw|ja{jai}}eVVh~t|nUN]lriVCSpwsi]O?@FR[`m~tvz>% 4X~tb[k°u_TUSKRcv}˾sbMJGB>9>Nat϶s]I>@^gd[TX{lffgfVONVdt\Y`inm`bmxvxz{zz|}{|ut{jbcjsxsovunpspfYPXgtz{ypXIO`nqj`jrkmomXMHNZx~~zZLDDKU\^ajxýwdPBFRiorvŷzSPWcl]NHRjyqnx{pnx{uvwnlozyuty{mruaXfzrp{|zj\Wbinmihm_`mynV=.3L||vzƸoUQPMF53;NcucI;DQWQEF[yògJ75F^tk^ZcwciszwXNRd}zszxtb]swdnyqx|leftuoilytq}|a_hsulgo~zpllojc]]p¯sg_26Lgqd\e|yf]`mg\L>CYqìQDFSej`[^}dTKLThllm{{smlh`KIP_p~zw~jVQ[}s`P_wy|~~rns||tsqxxons{y}{{o_WXezrVQSY_^]fwtos{tcOBIZksrjsǹXLIO`_[[_xxfTGKU^ccem|zpbNOWae^Y^nxjis{l_hv|yz~|}{mwmgtdhzwcX\w|tn}~zxwrke_cmw}~rd][`bcgo}~n^ST]fiilsvjedf_VQUq}}|cIN\ioa\anzvuoh`[\hptwx{rtssqnklp}wffjr{yrqull|xi\gz}{}nou~vs}plsob`kw}|{upnjcUTY`fos||rjg_YSPThqy{kOT`iaWT\n}x{|n_U^istnhtsnw~}g_^ep|~~rlnwyldu}rsuhzxdr}sv}jh|_Ybvvww{k\Wgnog\i|}~kMNWchd`dp~{qgZS_ny|vhqa_gqucXYh}w{~jYQhy|_]m{fkv}c[_mzuy~sorw}~zqsyyz~gfpzrxtrye\du{poykfv}kVbz}s||mxr`X[h~|unyvnmlhdcjs}~ypmjeUQVdvo_U^dfaZ\i~|{k^Zalwridy~spxzsoqw|}xvx{~~~}~qnpy|vvzneep~kW`tz}v}`W[fwskce}wxvncOS_r~uqv|uql]VT[w~wq{oimpog]`ivyjcgvvcYzyjkz}omu}zz~wtx}vlddmz}{~ypptx|}{x{utylimvvnjjosngctxwyZT[ix~vp~}vrrpjc_n}~z}j`\^gxzwt{|mifdmsusppyyupljmu{~wvv{~~tfazocp|po|t{~{||zxknu}sjm}|wphfqspico~yb_aiyzwqpoipr\Siwnvnfgkonieej}odit|{e`h{|yymltvmnwru~sjuinqgn}hi{ukm|zwmqz|necuz~pnyy_`oxu~y~widkw|tvtlnuaZp{mps}i_aj{yogez|}q[artfbn~~|{}wqot}{v~|}zplu~~mnu|{wkek{yic|vklxrnzu|{pp}mfqtpt~ywvvxvspkmu{ut{}th]dr|x|ldkxvdWVt~xxdhuuhdl|{y~wpp|}|y{~}yttz~||ywkkwxjukkuqjoxxsp{v\cupb_jv{yunmxyvrsy~~yvstx~rnr|xkg~wu}xsw}ilt|vv{pmspb_vpx{~rqtxyusru|sqxmr}{zy~|w}}xw||pqx}tpsw}wv}zv}|{|utzgdl}}lf}~~xoijy{yrnu~~~yslhqy|}yw|wvs`g|xhdm}|{}~zrp~zlr}qnyzkzxhgr{stxz{|xxzxzpmqzxq{wxos{ksegzvhgehtxnm{}ss~p`r`fvtpxz|z}~{y}wpvykhqksxtzvnzvdkzsmrvwymlmaqqgjxzuwzrkoqkwxrt~zxqpyqim}qv~ts~~plmfhtvp~xpmwqbosily}uuu{ztr}|}{}wox~jn{zz~pr{zmgjws{}y~or}lbfqvjru{w}olpyyohhy|z~|xvy~srxzx{{uu|ypwtjlw|lnojr}olkkw{rs}zwrtzxot~{uw}}{~vpqyysuvy{tqvuvyrw}nhc\g~i`osyt}rnr{zpnyxqt{~z{vqqsvttt|~}vqtwzyqmnt|z{tkw{lexxtxsxpixsmsuvpt}ns}~{z~}~{~|yy~|vstuyyx{~xtx}}}yy}ijt}oj{xxzqoqzxvsx~|uu}ilv{tz{{yzv}~tsrmnz~~wuyz|vdextb\~vqxzw~uoovw}vpt~|oo}{vytrx{lrxnzxlktxlx|nyvklyxltzon{hooal}xqsyrvrbiw}tnsuz~xpjhrxywv~zkcmvW`tylkxy~y|sskku~lcwvlpz||x{wmmxysuyzqqw{sqzx|qyhckxkvv|qmo{~zvrx||zw|zpr{wtw~~|}}|}~~|z{}yy~{qpzxw{~qk|helyy~nhktwlgq~~zv{usty~~~xuxyoge}spy{snv}~yiiq~z|rr~abp~qpy|qpswwsppvy{}ypkuzzvlnt|~~~sjzicixvtvrvnqmrukjhm~~twrw|sljm~}yyzymhhv{zvu}skhn{tv}yx~xlq~unr~}|uqz{onry~~zkdhuyms~{|vuw}yxwwz{|{{}y~pfm|wppx}z}{orzysz{srotyv|xy}xuwy{yxz~wuyzvjimz|zwot|qc[^xpt|pixzacotnypviny|tq~||y{zxyzzzrukn|uppqz~qmxztuzu}yfevm\Wywwqjmvzqf_ix~}}qjpwzqmowww~`cqqhyzx{uyzsowryqm|yhahrxxttxxwsuz{{wxultyw|}xqqytozywrtwgks~{xuttiekxyyz{{zyx{{|}|rtxznfbf{utv{vlaYet{y|~{hkt{sjfk{xuw||ytv|xzzuwz||rszzuw~|z{xlkn}{w~}|cao~hXiwy~}rhjs{skjs{y{b]al}zvs{~shjowxxwwz}~xx}}qquprnu~tmxzw}uotxafszst{yt}trux~{wss|{qt~tjhnzmmq}~ztqyumq{|mads{x{uttsoorxz{}}tqopsuxz~vihkx}}ytxyx{~ulq}tlnsr{x~|z}zprx~|smr}~ylhl|{sjgp{{rmrvwvkhlty~d\`nvkv}muxh]gwwu|{pmzwgmz|~{{ss{xtu|{w}sos~xp}uii}hn|xxqvzbep|yol~{pr}wjeux{|}powwrxxvz}tjfr~xw~xifzw[Zfw}nkpx}ukfx|~ztlkv|}z{|uplu|ts|x|zu~tt|zuzuwxz~~wxnm{|uy{wnjquwtrv{{vqiijmqnln}t|qe`lswwuzyvy}sfkwvzztx{ptz~}}~}}~yusu|z~{w}uprmtzkmzzpls}~sw}xmhj}oxztrhh|zopv~|~|woptz}{|~zz|zvuvxzwy}}rmry|tnnyxncatrs{xuw~schsyt}~}{}~|{}}zz~{z{{yvv||wwzswrkqz|wuwrt{ymebu{toqtvqmijos{wwtsrqmmrwymry}womqzxzukjrns}y~wu{r|srnnu~|vr~~}~~tqrx|pu}wvoxsmpw~uxzmgp{ypkz}}pnxehsxs{}sozxrpt~xqo{vtxzrq}vlny}xxxyhgrscp|pz{rsvpsvx|yx|yv}{uysuqpv}wt~wwwggky|{ux}sxpc_frtwrtwzxtpt{}llrz|upx}vuwzxusv~}zxrouqqy}tx{x{zz}}zvssv{~ywyvpkr|~xwrqtwurptz{rkt~mip}tvrpu|}wvz|qkm~zrw~}}xy{zvry{xwtyvw|{~{u{tp|ys}uuzniotnpxw~{{}yu|}zvv}vrqs~~wqklt~}wu{wwwuqnpv|~~qflyzmeh||}~wttuyz{z}zvxu||{{~~}z}|}{v}zuy~}}~poutnz{yw}sliqy}yy|{z|ysmjsz~wtv~upo}su|z~~ru~zpuvsvrvppzuvyq~ypv}vw~y|svzrxzw{xw}~tx{}}squojrtywxrji~uqsvz|pgqymyxuzuwz}xrw~~}|sonx||wsyyidledrtyv{zsu~to|tnswqwtyxqy{ww|wrv{~xpx}ynmu~von}|zkio}syzwxknw|||~~zwttvy||usvonwx}}|zw}zro||vu~~{wy|~|xz~|{||z|{{}zpu}|tx~yu}rln{vyz~xnu}pjk{{~~~vttvzyxz~~{qtyzu|}~zuv}|w{v{|ruxopytwx|{|}wtz}untxu}yxvurrvx{xz~|uututtuy|vv||qfp}vzzwz~~}ttw~{}xy~ss|~ur}|y~xy}yz|}||zxztsytt}sysmuxqw~{~nlr}vow~~~{{{}}~}}{sqrqv{z{yulj|yrpv~{~pqz|mgsss|{{wy{pt|yx~}}~z}yvyzw~~vz{suss{uuz|||yqppgjovu{tt|xsq{}xkqz~slv~{qtzyrov~|~|uopx{lp{{s|zsxqurrxtru|xz}~zywx{z{~|~}|{{{~|yz}tny}vty||x|xuz~|z{~|~{ttxxwz}}~uw{~z|}{~zwx~}~zwnuzrp}}zxz~zty||}xv{{vy~|yyz{}~stx}opw~yz|yqrz{nrzz~{{sry|xvy}yqrx~}{{}zyxyz|{{~~wz~sv}|x}yx{{wxwtxrtz~tw|{}w|zuuz{}z{~y{{qrw|~~yx{ww|xz|xz~~{}|vqu|knxvx~~{y|~zw|~}zx}}||ywrr~yvzzx|tqvynwzs~wuuszwru~squ}tw~}{z{qv~xs|}}~~wuvy{zvx}{sovgbynnw~~{~vqyytu|tu}qq{yv}}~wyxu|~wz~{~}{xx~su~yovxnpwuytv~usv|{yz{qotnowxz}y{}~|{|{}wx~yw}}z|zy||tx}wy{|xs}rnpyw{~}x}yuu}~|}}~~}x{}wz}}~~~~xw||x||y|xtxssz{{~}~|z|}~|{{zxy}|ytvz~{|w}xpmy~xu~zw|~yv{xwxuxs~xv~{y}{|z|truuty~~|}wsyzw|{~wv{~sv}|}|}~yuz~|xy{xywvx|||}|zz|{|}}}}~|~|xywpoyts}~{us}~wt{y}ww{vv|~{y{}~~}~|zx}zxzrp||vu~|sx{st||vyztx}}yy}{}}{y{{|}|}utzqt|xu~zx}uz~rw|pt|lrqxyxx~upv|~~zz|zvu||}{|}lp|{kq|z|{|yru~{pxtyps}{quz}|||x|~yz|zzu|}y{~{|}xyztt}wwyw|tq~ztu}{xw|plpvqs{yzzxw{yzxz|ux}~~~|vtsy}y~}}tt|{uq||}~}{vtz}yv~~zx||{z|}||}~|}~}}}~{|{|zwwsz}z}zz~{wx}{~yssz~~zw~~ror}wux{{spsvtz{y|utytt{{x||wxyx{{}|~~xz~}|~~~~}}}}z{{tu}}y}}~~zwy{z}zrw{w}|yxzz~}}}{yy~~{z}|}vrv||z|xy|~zsqx|vz~zx}}xwz~z|z{{~}}z~}||~}~{y}~zx{|~xx}ooxsy|~sxwloxzzuvz|vsy}xv{~xvv}uoquno}tuytvurvwrvwqswtw{y||wzwvv~|{}||y{}|||uw|u|}y{s|wos}y|{u|}so||x}{{vv|~||~~|tswxw{|yy}~xsz~z|~{ty|sxxzz||{|w{yx~~{~|}~}{yy|}~}}yywss{}~~yy}}ssu|}~|tw|~||~~~zwvz~}{|~xw|yx|zz~yx||{}~|~yz|vw~wv|xuwywyzyz|vz~}{~{z||zy|||y}|xz|~||wsz}yx}|~|wuw{}}~|wwy||}{|~~~||}}ux~w{z|||||}{y{}~}}xz}|zz{|}||zzz|{yz||vsz~xvw}~yut{~zx~~}zxy|z|~~~~}~~~~~~|z|{|||}z~|z|y~xsyyu}zxzxuy}~|z|z}~zw{~~~zz}}x|~z~xz{vx~~|~|{sxxryyz~zwy}~|}|~~zw~{z~{}y{xz~ux}wzz|vx~|rv}v|y{vw|~yzz}~yvy~}z~}~yvv{}|zz~{zzvu~}yz|~{z{zz|{{}zz}}z{}|~}}}{~~~||}~|{|{xx~|vv~z}z~|z{~~~~}yv{|yy~~~~}~{zy~}}}~}{}~|z~ww~~y||~zv{{tw}{~~~xz{x{|}zyz}z{}}}||~}zy|~~}zvv}zxz}}}{{}}}{}|zz}zz}zz|yz}}}|~~}}~z{}||z}}{z}}~~}yyz~|~zz}}}~zzzy{~}}}z|}|~|xz|yz~}||}}}~~}}~z}~uxxvzzy}xx|x{}}{}}wzxx}|z}}}}}}|{xz|}{|zrv}vvz}z~}x{zwz}}z}wyyx{|}}}~~}|{z}|{~{y}wy~z|}zyzvzz}}zz}zx{~~|zz{|||~~zx}|x{}|}|}|{~{|~|~~~}~}~~|{}{|~}~}~~~~~{{zx}~|||~~~}~|yy~|||yxy~~~xx{yxy}|}|{y~~{x}|~~}~~~||}~~~~~~~~~~|{~xx{~}~|{}~~~||~}~xx{~||}|{|~}}~~~}~~|}||~{|{{~~{~||~|}||{{~|{|{{~|~{w{||~~}y{~~~~}~~|}}~{x|{y~|}}z{zxy|w~|y||y{{|}||~|}{||z~}yxz{z~~~{{x}~|~~}|}~}}}}~}}~|}yz|z|}|~|~|}~{||{{~}}~~~~z|zz}~~~~~}~{|~~~~}~~|~~~}~}|~|{y|}}||~~}}z|~|}{{}~~~|}~~~~~}}~~~~~~~}}~{|~~~}}~}}}~|}}|~~~}~~~~~~~~~~|}|z|~}~}|~~~~~|{}~}}||~|}~}}~|~}{{~|{}|~~~}|~||~~~~~~~~~}}}}}|~||}~|~~|}{}}|~~||~~~~}|~}~}|}}}~~}}}~~~~~~||~}~}}~~~~}|~~~~~~~~}~}}}}~~}}~}|~~||~}~~~~~~~~}~~~~~~}~}}~~~}~}~}~}}~~}~~}~~~~~~~~~~~~~~}}}~}~~}}}}}~~~~~~~~~}}~~|}~}~~}~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s 1xRIFFWAVEfmt VVdata|zxz|}||}vvyqzqjag{uddz~mnxywrZ]p|w{zmhrsgjcHIfuoil}gH=ZwY[jumUWzߔ 2;sf+ǻظqtACXHk4cYk}t%V 8c˧ZXWY@ΜrjtbfȜl\vט[Oh~K>hm˙p`l)G65u؝]/+aĂREVyyvvѽXOpَY]wcbwxnsvqtқY9C_tnUShpYHH[nwsdUJLRVRLFB>>GSZUG<76=KUVRJGLW^YK@@QknE4=SoyhZYjdeʑZ?Pɝq]b~{f_wƴeB9UƜ`6.?d|V@B`mQ?76?Sqx^D482)"#.<<,)87*#044:AD@:50+*:[upQ6.?^yw\@2BgtlgfplZ`{x^XiϪvtѹͮyun{}kgssp]djkpfo|~zxrouumjcbitui_ZUSYbeaXMLU[\\WOMRSQSWYZWSKGJQW]]WPMPZbfc`][]cjrvtnklkkosrsutruvtux{~wonsxxmjs~uu{{yyoyƺmirqkq~ug^bqyghtw_OWozWCMj|W;:Su~nXDI^pvp\JENYcjkhis|k`_ftydTS^pnVO[wyh\X^qdOUhtvwuspqzrei~~y{}~~}}}~}~~voloswytj`XX_df_TJGHKMKGB:59@EFA<77>GPUVRNMPW\]^YTOQV]cdcbelqrokkklopomnpqqoooqrroopprrtvwvtuwz}}~}~~zy|}tsx}wstx}}yvux{}yvx}~~}}}~}|{yxz|~~~~|{{}~}zyzz{~~}||{}~}{{||~~~~~~~zx{~|zz|~~{z}{{}|}|y|{uu{|xy||wux}}|~zst}xruyqr{|vw~wstx~|z{}~}{xy}xsu}}xy}~{z{{xz{~{xy|y}{trv~~ywz~{y{yuu{yvy}zz}{|{y|||}yx{~|~{y{|}~}|y{|vsxwstz}ww}~wx||y{|{~~}}~~{{z|}}|xwzz{ytu|}}}~}}~~~|{{}|{|}~}~zyz}~~|z}|{|~}zx||{|~}{|~zuru}~|}~||{|}}~|xuux~||}yx|vsyzqrzwu}ytw~{}~ytv~utxyvy|yvx||vtu||{}|z|~~zy{}~~|{}~~|yy}|{~~vsx~xw|zvx}}}|zz~{y{~zz}~||~zyz}~zy|~}~}vsv}|wv{{y|xtt}uqsz}yz~tpt|~~~zwy|~~~|z{}}|}}||~}~}~~~{|}||~~||||yy|{||xv|}|}}~~|{wuzzx|~|{}|yy|~~~~|yy||xy~{vy~}|||ww|}{z}~zz~}{z{~zy|}z|{wx~~~~}~~~}{z~}yz}{z}~xy}{z||z|~}zz}~{z{~~|{}~~{z|~||~|z}~}~~|~~yxz~zxz~{|~|}~~}~}|}~~~{{|}~|z{}|}~{z}~}}}~}|}~~}xw{}{}}|}~}}~}}}{}|z{~~|~yx{||~|xx{{{~|yy}{{}}zz||{{}~~||~|z|~~|~|{{{z|{xy}~~~~~~zvy~}{|~vtxzz|||~~}~~~}}~}|}}}~~~~}~~~~~||~}{|}}~}}~~~~~}~~~}|~~~~~~~~~~~~~|}}|~~~~~}||}}~~~~~~}~~~~~~~~}{|~}~}{|~}~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~sz Ex0uϊRIFF(uWAVEfmt VVdatau|}՞.jCC*5jxսV^t' z`OF*rpTT[C6vf xn?)l˜qGÉP/nQ*2{m+9}|T.SɝvkiN0Dæp"X#kp_qzttլfD]|q<KEnixe68t]SZXD^`gЊ*WГ6:ǚXEsľr Qf+>yp2 ihVlwTki19^L$0~ DswP 2m^-3}dL^)1lجbDU k߱ufLQSOc11}i|vjxzov{q[֨qVQgvmux\d̻gO~C .nϤ|spQXhrQ#?yp2+GcfVb܋:0mֺu3,YBiҶ_5ƚlV_m ԠT%&ic:;TxasUE^p^BGy՘[;8Ej؁."eY[jB0%)\<?սxFOsqo^`fep vפeT~nrr\lYGK`gdk~\cſ{ "O3`Ҧxz[?DqХD <:;Y-4Z|rX yՎ:#W8bԮ{tAyzSJ`ȣZ ՃZnS*Jܴv>,DsF(Q8 5vxhxܵq7#1]դP!z/LŸ|T71CnnWޫ]7Pjk}{w2_җH&B~Z 8xY8DŗS.Br|W;Gx×Y"xKThp}{eTb·wCQhPxxxZA38e>Rw_Wbs}xfy\ڸgKFTqdFL„- <_1&4XȫyzxbJRݦU+>zͮp=,2RgEK[YIXۭb*-faSUkֺq/$N|՗=Vr`]hήd2=of!+wL/3d¡d@M~rB/TF$uݓNAia[tcRxϤm;Jn6~v_pzX?6FvW,͠mRJazjbvɎ/If\WUaoVLY~б]#|ލC"#5Uǭp]TNVc#ls;1HpƤqE5DTZnsT׻}D1GuwD0IxӠ<;rNUtj80Y?(xZ!-^VFmƩwbqvS6Fވ8CE!Ce\uif۲e" Xw-Ýy|S>ZsQL^U|bkvlYX~ıs`U_ǟKMm44KY]nhSHT}|,S-Sɦ|ZKGISxӎ9D>$?qȸY3,Cc|сߝS2CsǰN8GqN4y=7WoE9SƤ|w\#]G&tңjHVPKmyWN}?=C^jew]oi"d& o~`pdNZ[E[[TLcvrelZCG^´t":i-cîYKUi„3:KWötF+0E_ڙA %H\ͭcB:S|ѿ{`r(*gϴK)2ab(-s2sYEWսljuiD)IQ$~g7;kbBScm6%C Pϒ`ebW~=(m'HVLoecÝb:?kϤYoD&?euqw`=@h˳}8 +f#oW12SB |f7ŝ}bH5;]ڪY[h?kRCHjl&_0D”bC5<]ǰn@5sԺhRW{ҾTK^l`MZq}٠\&EZUvx֨E/VJ֡bKdt[i^#-ts>]:Tfon:9gҬh%$3Y|yOHhªw=+u u¯vN05Zúf?=s ĔpYG=HQZ{8_\>Ec|XNd} W\5:_|RMnzh.'88}ȏXRxmxH.wV2@w{eqrƨ\"]Ѹ{F2FyD8ڨxo|wU7HԔV0+MנC^gJS^VOfܶyC&(Pi M|.!DmΜ^+ Tj AG;biL<@]aH2Nx|l__m̙35g/1U~peh{LV05}Ƭg_ppi\!r)RʖZ34Yƃ6 Y~ fԂ1!ie&EN4{Z~ɛe7(ZC ]ٷo'FcqC Hu"4R,F{yq J5'Q6q~^/'Ilutp5iρ(bO=cdl|J6Wdh) ;gRbW 2urRJauE(?OϮw[JLdV,0ui<ƈQ.#5`ǿP![i AzE-3WŘp`WA(5( ;Σf<0AmܴxQRbaS]b{ǎaMTuȿC+Hv~^(LGԛXCgAG݋> ;[/Csxrr@CSTa(3hyq<8j˻Y.9GtFBonD/Aڧxb?);oƯ^@Fvr ȀUIFEV|Üi8R9 9j9.;TwųmO;4Cx4 jФgDD[̷^@;DN`qܙaJTphIJimpP*/WzWXzzld8-=‚PMu}h|F&J[ \,D{yl}_7I]9}D>ÿK&oխj:2M(U۟qkse@)HԑS23^Ӎ-wYGWaUPqo2MXkeEm~“W&]VE?G<;®yf^cqr<,fEϞnK>If|9?$q{="Lr4gzXٍ9 j֬g@O|m'7j s݌KDk{gswK@eҗ@#>|jZlJOa#|rSK\znD4X48ƠcLAJfO0AH`tA(*Epþm;#pc^ܞW*"=nѸp`S:&A~@ϝ_88XɕZ?K^_XmUȆSAPyîs:1V۟;:E (ZĉQJsv|~< enST<[iipCFݚIxF1k|uzJCmS(A~ _űmB=`wN9Okԛwj\D7IwȳV16ki 2yK>AJ`Ƕg7"^<C]30Eg«gK5*={)u֫oIF`¾vPBFP\prٕZERtiNTrӲU L&,VtU[u_ Kz JȈUUyuh~}B+XQjdJw[7MڣQ<;N~E 6}ֱrE9O݄^ܦ|prbA4WÂH)0^Ҍ2$O@NWU\k3#ZG lf+-Rwͱ|D .pOX|?>cx\IDPq->M?Xym`]cs|iJ *Q{{ru{*IqWXkyvmxQ":q eǂD):hĩa%(pg2a&sM#i;AҒ?H껏~}oH$.u8+l٧T]ݓN6DVWPc$UaZߓI4Q{ОL %ro;ڐB*M~H%)R@,h@Y~}w[LWxٔ2AITxkhrt2Z7N·o`Z^nl2(i T͛nRHQid" C'"}j3(Uj*D:n؞[-#GɚxpiHOO \ϚY*HvRZmm\^*>~E-LZ3Bg~zux eu!tڭhEYh!.`|=2ToA̙Y11RϛdMUa[UlD.ʃM8Gvm93U<Dz4&c̏UMrtw5pn_ݏC1Sv|j=HؓAE9p|wg>Du’X+Fm diBDmg<+Mm /ƐpdR<2KͳQ3@{]0|TJIOdĭV)(n6L^4-?^­kN70KڭpJKeÿwSA?DQl} ҇N9InkTZs֫HG'7epPUtxyZVqQ|SX~|ti,RL(|]N~{vP4VN 55^r76֫f7.PeΛwrsaA9cw9.e%)YKUWPW٣^((j9ta*.SuոF-v9i~BAexYD9nmv='(K;dh<(.N{_+,Jeߡ[0'Ctʰn]M4-Xd H̕V01VʗaKS^ZWu62}J9M}Ūl95Yݖ0Os-&fƉTPwwp+wafݎE5Wr|d#4drTZyvzP_eW{RWzwth+![?-UN~||G/XHC( aj-9٩d61Ux qϙuonW86gq4.iz!1ۉPGSVO[ڝT 'o4}X'1Xyӱv;3/nxBEltU@=MwWہA9Vzue_dqշa>0\vlp|q!hTÙpZ\lwtq9=_zq6#;lʠR.S6S9v8$z߁/Ĩ+T崋kA#;{!(qٚE pׇF4ETPMjogL aԄC8\Β:*VM؅:*QwB&2b&:[>\tUGU{Ё ]9Uuhjxn%m[ɺjWPYm^*-}sbÎaE@PoU Q|.b+)\WZ-%zϏM#"LǗwoa;b7jїU'$RhKVifZeNq7&QޞT6Jn~xuط_{g&ڤ_C\Z >F+twZ6C}ϹL$"UVrñY8Ewöa7-WR@oaJ2/RͬwD,CKFnMEEOjɭ~J/&[ݖQ12Gg§^B//Vq&ԠeIOl»oM?@IWy`*JP|gw=;Y{sd_esձW 74aslq}i,Z^ٿkX^nxsq|3FR%j2"?pȘI4G?K @q1 +w*Qz#_ᯉh<"Ao.yԒ= #|B6GTPNoc$qCl|>:`ʈ13LW{5-Xq=&6jHT@boQGXxl/#\rgkzf|eȹfUQ[pW&3e m彉]EASqN]p8Z(.bPe$-ȆG!$Svn^5o. tˏO%&[ޤdLZieZh| Zi3(ZٖN5MqxwدS"]/֜XCbQ G=8k9FspjiBFvz @OYyRNiu9 s1F_INkX*)d g濘wYD@Rud2&W'|י\5&1V˿Q :5yґQ,+LǧfXG01iK ZĉN08_VIW`YZIrE:Sß`5AK[~R6wG=SwcS_|Ӓ$9t4#NumP>?Utun:=^rd_gvҩK2:eslr_ 9Ng׻hX_pxsrs-QF/b.$DwƏB;=KA Ij+ 3l$!Ypkܩ~d9$Id6ψ5 +v=7JUOPvX +z:vs;=e~(<@ cs1/_l9%:qVOAhlPH\l{&(aqgl}_ mǵ~dTR]rQ%9VxⷃZCBWvEhc BT%2iHo|5€A([Ἆtm[0"y%'~ƈH#)cڜ^J[jeZmofݧb0,bԍI6Rt~vyרI,S 8ғSDgIQ3Cc8Jxmkd@I}qNF `tPPlo3&%N}\IQoQ(,nys⺔sVC@Uy^0)_!ђV2'5[ʼLC-&̊K+/QŢ}dWD.4s@dؾI/:fڼSJY`Y]UlB;XY4?htvY4|۹vNY~w[6D*s9:dzqS:]o!Az)K}P5NͯxB (h<)O7NV23f:X鴄l]E/4^ǡk<.O6^dIDGSsģs@>iqІF/5LpƽzX>.4cU;˒\HStöfI?CK]EBpD?V{`Sb~ΆFl0$AteRcs; $D%pܦiM`r{R!,w߄%G;)`yo85o҄3 Yp$~ιUQΒQ18gT(缉oohL2A[)>\OrJKVTPfȄ?:{7ݒA%=eˠb-I|"a>QyiM>@Xgf8@cpb_hxѡ@$w.=kqlsVDBoշeX`rxrtl([;9[+&Jzˆ;C4T9Qd& :d"%aht֤|`5%PZ >ʀ/ 2n;9LVNQ|M3ގ2#k9@jv"D7mj.3de6&>wucICliNI_b /foglX!r$tų{cSS_uK#@J޲WBCYx@ sYKۓN"8nC#zr=x;*aඊsmX-).D!-kՕZL^kbYrco١\-/j΅E8Uw~uz՟@5JAΌPGkB Xދ*O[8O|km_>MhZ= &gpNRpi.-XzZHTsM&1wk޶qTBAX|Y-,f*ˋR/'8`ɺzGL$.ǂG*1VŸzcVC-8{6mغ{D/=kٷ}RKZaY_z`g?=\S3Cmj R:ڲqL]|wT><1l5=hysN;cfKo$ Q}L5T˫r=,q13|K7SR05m/d宀j[C.7cĜf9.Vߕ+jߘ`HDHUv m;E_%z~B.7OtƺvT<-7jJFƋYHVw³cG?DM`:MjC@Y}]Td}Sd-%FybRer~3 +;+wءcMcq~K1z Q5/fxi58wz, ae-ͶPXʋL/;nI3䷄oogJ2FT&CR XkGMWTPj~;AoA؉<'AiȚ\)Pq ,[>U|gK=A[Z_6Cfob`jzϙ61m) AopltNP7'wӳcXbsxrue#e1BܜU((Oɿ5K+ ]ڈ2Y^!BZ)h^ҟ{\1'XP Dw( :g9:NVNTD:؄*,d7Do׺m L-ya+7ia2&C~iqFFrgLJbYw 4kngnQ +d-}ıxaSTavD"F<'ڭzTAF]{8 !~N UԋHBKɅLHo; b׀"[U8TjoZ>Q_f4 +nkMSuc)4 avVIUwG%5^۲nSAC\U*/ow3ƄM/'>bN2Gq_ JA٬kMbyxMG4:d4@mwsJ-9SxŸrR:-;r=RVIY|°_E?EOc/ZeAB]yZTgr`\*'K^Ri|sw, 322ԙ^MgrE8oZ-5kxb3=q' &kY6˳IaĄH/?t>>ᰁnpeG1JܕN#!IާIdeHNXSRou4IdK8'ElŔV$Yd7T>YcI=CaMW7Fim``k|ː,@d&$Gt}omvD^-0ЭaXetxpv] q&L֔O&,Tʺx/Sޅ#h~+aWKQ-qU '̚yX.)`G Mn! D`7~I,)?jƶq<_uAs>)6aλt`S>-A"'֯n=.EvԫqMM^_Xf`xݚ[rU a[(]|uC7_ǟf57G¹qD:^wJ.>~|ۣzhX>.>pӽ\43cՀщWGEJ\ϼc2TK3oy1]ܻ~RH\[C?EOf"g_?DauYUkֿfnU()Q[Sl{to& =);ΒZOl~q?>ccy(:qx[1Ah! ,sM@ɰ~A$jܾ|C/C|2Jܪ}npcD2Q֍H!#Pڜ?p_FPYSStm/RY Vv2(KpO!"bXCO@^`G=Fe@(Q6Jn}kaalȆ PZ#&Kx{nmw:l"8ͩ~_YgvwpxU&}VЌI%.Yʵp)^zsu$ jQUH4zݢL0ƖvS+,j=UdMY6>QTMZ3 Kp=U6KwԭZ_)R)?uU,+NQv@N|~`INkߣD/]At|lgrABI?s]RVf|w9$Y#=ҢqN@Icp+18k{= Hp08O Yܧc/9zզqiMA\ Iۭl6 >~PPek^]>,ʋJ(b}|tʄ$Uފ1_޼uEO{v. &wk uI:^zhsQ?\ۢK$ 9{cLY}V EotpQI\t=$AB1ҩgN@GdH'8\IwE+*CoĴk7jjJm:(:f͸q^R<-G0ӧg:0K|ҥkLO^_XjSגW^y%NT2IwsvuCBzM mQ,c|p@:fę`0=QölAFfqWVn׸Z}N%,V~XVpxug F!BʋWPp{r{8FY mn"AuyV0H^ 2|CIǮy=*tܸt?0I(Uؤyno`@3VυB 'Vד6|[FQXQTzf*ZOam/+OsԽI'kLOKAb|\F=Hj36K6Nr{i`bn|_R!)Q{ynmx2 z@ʥy]Zivvo{M, aɅC$2`˰g%"ho#}j'rI`A8יC;sO*/s4]ޯ[WT5@STM_*SfHO6P|ӥP iv3K)EzO++SEn?R|]IOoۙ:;R Gxzkhs:N=GɾpZRVh~p5%bH͜mL@Kgj$8/tt9"Mi*AEcؠ\+>Ѣ}ogHJQ R٧f2 BxNRfj]^36ńE'Bf9Af}{ty`؁)jݵoERo'-b EPUpA)+Ftðf2#u^ Tg7)>l͵n]P9-Nx9ѡa71NΠfJR_^XoG!ыR:Gr²w@4T}>@ց7Wϖ[Npu~|7ho WN2Nzryn?EۗDxH1i~j=inB-Hq &ϘueS9.G|ѶQ08sh ,|RFELaͶX*#f:C`61A^įgJ4.IsٯsMKc{UA@HSnےU>HjnVYqرO H$.[zVVswv`Qw JÄTRsyrs3NN#veFy~yP.MV88Sīt6/}۳n<0Maԟwno^=4]}=*^Ӌ/$WGRXRWݧ_%!bEkd,-SvԸE,sA[ۅGCgxZD>Jo'DG8Qtyh`cps nI,Uxmoy)|HǠu\Zjwup}F1t j}>$5dʩ_ &qd *a.yCj:?ӑ;D黐rJ'4}- eܧT`ߕN5CTRMb#[\ QܓK7UўI!rj<ߕC)J~K).Y:'g>VyYHRs֐1HH N{xjiuy3Y2NȽmYQXjj/(l RɗiJANja A'#l4&Sc%J=kәV( D̞{ofDSH[ա_.#IrMTgh]a(?|@(H^8Ei~{up jx"tݯiDUg"4W݂A>gvhywJ@eӓ8#mG\L_IXU-iMJbh4$O*HʢaJ?Kkt?%CE_k>(-Ky¯a-(R]ޤa4*Bq˰l\N7.Uk B͛\53S˚bJS`^Xs;,ʄO;JvĬq=6Yݚ5Kx2"^ˏXPtut0sfaI3R~q{h>I׏< A6oe;?r;U* Kl còa;Aoj>-Me0ȓsdP7/LβM.=z^5wQFFMd˲S&(o2LZ51CaìdF3/M~תnLMgvRA@IUqvՊQ>KmkUZt֩DC#2atUXvuwX[lQ~RUwwtm.!VE*[L||{J/TO>. \ëm16ڬh82Rށ kϚuno[;6ev8-dπ',ގSHTWPZ٠X!&j<u])2WxҴz?2|6g~DFjvXB>MsPޅC9Txwf`dqӻi}C0Zvlo{w!p QěrZ[lxup>:gsv:#9iʤW+{Z3Z5z<"t4FΉ3M涌nE&9%&mٟKjٌI6DTRNhtcS[֊F8Yϕ@(z^Fڋ?+P{F(1_/3`?[vWGUxч(U?T~uiiwr,f' XȻkXRZlc-+v}\ĒdHAPm[ K+f0)X\S4"uϒP&!IȘyoc?]=eҚZ+$PlLVhh[cIu<)NߢX7Im~yu׻f vn"}ڨbC[` ;N'y>Alrh}qGBkΊ0-bMYLcDaG6fLLeb1%VSŞ|^G?Oon;&J: jޣf;)/P[(/Hhٜ[1*Fvʭj[L5/\_KʕW34Wȓ^ITa]Zx/7~K:M|çj:9]ڐ+Wp,'gljUSyuo*!~]k݌D4Wq~cV{quzy}zx|rpvuw~~wy{~oo}~zz{vwrr|sy{{mu|ifv~{{wyz}|tuuwqqiODLejNJMlůs^P[PZ~dYOHev~nPR[`t~ڽ]fz}nE/Mq}~~}[RQZkifg}|`}weqgT|ʿЖxNTVor]Bfzνs[~zy1E~|igb}žxI;+BWZxkjkҷ~`ngin]_qҞZ@)`cbPqtV8'>CH=LbFZfʨ|oh{pRt͝]?, Ruƪrv{GD2CPLiFO^>WoʺvXYJ`dw[srƏgvtɬu{rY^/-GfeTc{~qZ7DAQ_k_tk{}ib\zze=PatCCQGci~h51Rkhtvzh{yǠeһ[mkr[myxY53O^obI?p[KC0@AXpjr{̹pozyrϢ^juWMs|uQLHHxx]SBABRdrfp|jvtsZ@TpǯepPZr{ra{SB5MlQTUhxRBFY~u{rcRWsjrhǨ}`Lxʨqrq^>?Q[zar{qL5J^o{fmiffZÜufhri{xeWwӮoa^nV^kƹwm}hO?Ciwegugk{P8..8Yc^͹kNPnntZTc~rYD@NtgPDNgaERn}laYz~t_h|zsvs^ULTlmNNgxU>>`pd`g}Ƨlolrqskdlwxk\[lp{kcB*0Q|ZVZhvdQ]myp̜|zdK@jd\XM]kcRRRcg~eL28]xrjlwy~~w^fuxzk;=Qm|tSVTxxm_b_tgZ[inn~{qroyvsRBCo{mecZVNSiyxM_|chspj{wmgz|^QRf\Zl}f8GWrxbVxue^Mvx|opkbtchhrVi^ynRFiwmhRToiLbu|sonkMfk|hZf|ot`EZzT_OkkQ_`hV_ervT_~qztrbEgt|ghboi^Wlkbcir{hGUtxn~dumbxr~e\Xi[c`}\_TZuH^tf`Ehzul~nfW]ns~wx[MdjOYms\9WyoMYNsl_Sz{dI_itcrvpkkfŔwSekU?\icSglqIQ[}}scNborngZwz`o{}zjZovNMTegfxQ>Rfy_TywlYdcewrbzmXGmwooewl[fmubB=n}[VVfnk]ghoaXW{SWb}NA``M@\ãw_ebf|QIKl}[_joqp\huùn~z[DNsifrl]S\lymDOl|vrWS`ypfogwf\xcWX{tdn~yFH\}u]k~sfYFRu|qsj]Sq^brs`Zg|iGKmsUY~k]K_jxtpo~fX]r|a]qwuW[qX^XiuRSeZRWrvqe[eu|su}|]SprfreY`hn}fenubCF_wr|vwn`bhvqV\vjskciykRZzxhfc_qtvtp{`NStrevt`WVl}Z]xfN\xud_cnps`g~}{dURg|j]o~^Y\sx[mwaVPhn^uaKHi~zri^{qd]TTxs\bnu]diXeXið|tzw\UKS`fviT]gcedLhmE@eslf_M`}zhP\wŮskgt{}oVYbwmRLvt`UFnklrhB@csu|kZl~rVFqi`ToydYRgqyUN^rHJnqwxjSMvojmrpfXVRiffp{I8Jqnl]lʨkWhnt]Xfzpv~zhna`ky[bnlR0Izr]STɷeJb~daeoehmf}}[Lj{{eQNkRWf{KGQx`g{xW]_`}l{oPPt}c`bwe\WmwjLUlq`Wu}ocvzfrkd^~xsvosn^EH]tOO{ʱqV^]i~k]vjdavwxs{rievwlDLsqcKhn`ShoXNe~ofn|qzx~{YfsugZmp]\[}xVO]~`\qpraetwre\w}}lXurf`_owOPbyuPRjfUimvihzmf~l`blhgll}tKNi{bVFaodf{g_b~nkytxwsxza\gtnT`o`Um|~`V\bGTszzofvvtvmrww[\pmcslca~dAOgr]Woqwyu_f}}pkam{vhfar~WTZx`E[ylmmf|ybkmbWkxocjxj\^ptUWd{fQc|uffovx[Mcmc`r~ofjy}aY^rx[azvaPEbo[[sfQQg}ibjqegn{xcjyjRWz~h`do_MWydPVirddim\_iwt^e{oXHQtf_nseVY|uVHWslityjV]qx]a~vlecgnl_ktPBV}ohcu{aW`ggRZuh\`{plikwyXPjlTMdxqosuP>Usnkrpg\\^thfnfOXosdYsĢdZalkRSmsa[ig]cm~hfs}oUTnrdbxaTUn{fakm`MWrw`^u}gXhzydW[}pnwzgNJaiZkqNLTc|zlxcNC]~{}su|kecjosT]||ogZmn[cvdV_qjX[h~xyxrvwJM[u~husaZOZ~mbjhS[fq\wsmumosvtjSg}ccrcUfughmqw`O]kwq{t|iHYs{hkfeUkf^e^]dpjgVhhk|zebPXvp|ibZjw}dn~mHOjeh{woTW|}pdehspgkwux_imzecswedWkzzpWPQ|qo}{_gtt|yp[fxZXm``sq{iXpnQU^{xumWVhj{kound`WZzvv~YGOtwejxuelkyiPKsogfnabestd_opSK_xwhkhPQesmccz}nb[plYjylVdyvpbTnßpdhscKA]tbe~x\][duzcvq]Oe|}njh¸fRYmqdLQscT^iM`roevz`SNjwr{~jPPaxfQb]UV]tj^sqXPm~tkdmuvuvqp~_P`zo\_xhS\cqy]QjpWP]~v{}~cR_o{_\{|hk^Zs|[DMnjTSvwofWWf~xjOQn~lg~u`\[gfUY}yWM]riactWNezbc}xmfls\[rg`laJWuc_kyiMX{u^h|srysp~rlevwb[k{YXZct`izsTG_tqutylknmpuykiyv`[fpj|wz{YIes_Ya}soy|c]]mjgy~rqm\crngwaFPvphkrĵr`\jxvZa|~dbm|}qpvrtz``|~wc]ZexrlrgKRlzg_xwxnbon_k~x}g\gztiff~~dclmQOntjkt`[hqyyqt}eUOi~{w||^Ufz{iWcukooz{[M^~sgkym]aosuwiVYqylgdX]rzhYkoWZrthmrrlkvxrUKdulovhKQimct|eX[byww}~}x\N_vj[gqrnnrx^LcnnjhXWhtzrmxyVCVukkzqRTVotaavf^RddknUPiqvs_d{xp\g~iKHizocstgVVkyYex}s\Jd}yqhsyXP`ftqaWfkSOazXRVqvevoifWiut~j`U\sx}k[gwbKEZ~xbl{~`BTtlioowiq~y{qcV]s\bt{_[RTsegwcNDhvtwzeabv}piv~ydUbm|edoxhCQx}gY\_zmevdLXlxv~qj_Tq}bfoTGZtilq­aVc}padu~vnq}o^exyvkp{aMFatjucILc{sjxwjhfgxkk{gTOszodrqfgyt\Of~rddy}\ZcoztnzpWNa}|yx_Tdvz\Rfmdehuifqoht|uokkoxzyuy|XGMmvddzj`_eo{x`_zxpfivws~z`[cp`Wdp`cqeYftujqwmhbdlf\fw}olx}iddn~oVSmoeh{sjhkxvmq~{poz~pny~cV`n|vcg{lZV`qfnwdhv~~zplyprqyr`\lo]bw{e^Xehdoua`lz{yznkrxx~njzqZN_p_eo~}aYfo^Vaxv{|pgiyj^kwoecki\cwlJMp~kelq}qp{|xb`rtmszpkddtvTSrcQG^tmrp|~]O_{vimxyzqghtf`hu~fV`|qe][up]YmgW_vtfg}vqqmyfZjycO]zhacqrSLaiW_wrdbxoelx~vfl~dT[zkfjtfNYwoUMlsenyj`l~waYozpens~cdp~|YGa~qffpg`immvZ^wpbc{uwvnsqY`s|iaZvpjnpxrWTigUfz~sop{ghhueYhnh]tobgsgQUpwlskdhlxzluyfXe~zljquXSoh^lqofcxg_ipdkwb]lvusz~t\atunjwrcdnyp_gyu^[lvutlxlmsz{iUa~qmn~qU\f||ek{qj\Zkr|}|o]_ssb`zxupwvgV`xye]rn]lourfl~pVKexsvza^]iuoevsi^auwlky~n[Vjwkhm~ymjieX`w}igyzlimltrffdPOb|thbuuf[Yhxvcf~w_]{n_an{nh|sqf]_wzwprgSVnxjup\U^|ljv~dOUo}xlmt^hx}~~~nYYoy^Zq}bTXjvjiyu\Qa{lx~g\]p~h^ln_XWenbht}aJXyyg]^gyry}}x_NVwyquxdefit~f^j{[LZtyrnk}iYZrj[h|xpij}m]_phYhzn\PPnogo~ZCHhurqe][l~o^i~jY_x}slillY^umVZuufamjY`ptn}r^STtvtvdQVj}tXVvyifbqk\h|s`k}pfkr{ojp{|`SYyl[d|fSWbsxcfnVOc~ux|d_j}|eYdyrpqcOUnqae}~lgaiw{rx|o_^q~wpxvjghu}\Sdn^Ypzgfimzait}sidu{rtzg_i{oeo~oaTZtocnxfW`z{ywqitytvz~t]ZntdbsvZZ`yn`g~m^[i~xpr|uiht~{}uqxme^olckub`xugYZloqtegt{zpgx~rssxrglv{`Yjrjgiz{jkx~~qdiuxq~}qqkkw{uil~gKK\}g{~nzfPNrrerz~sqYnuug^q}smag{uP]me\d|wwlirvvwo~sqyeRUi|i_dwxf`yobi}smoykPXn~oo~yne^lqjs}r`_kvf_qx`\cstf`t~iX_~|skkn~rks~|[GRmzmbjaPPauwhc}|gbk}t{||weao|iUXwjegltTBZwi]`{zlkhry{x|}_Ve{~unfmxb\_niQX}ufgu}g\`htshv{p]]r|obfoPEXvmetl\T_s}f^lra]p}||m_epmnrfU[swgc{lVVg}ubft`[a|{tzs^`mp~garubPZzfSSjq_d|xqc^cu~y{zfYdqykl|l`[`sibkkTUsnipw}ihmuz~t]_{qeh||e[\crueop_QMdz|bT\ousm^^jjdncOW~tkmmts`j{dU`z~xw~ud]ZgtowmTL[xysx}u\[u|tpjdhy{zsuwZVeznem{ykaZd~vmwgTO^~y~^[altyqzpSKd{jkppwcgxzj\Ypzx|u\Qe{|t}}l_Y]vxmw{mMDX|sdd~uhmtvx{}sd`~{jj|{i`bo{wmunYGX}{|yw`Ues}rbn{lhlktvpx_P]z|yqclrmipbHUyxw}}gcgfl}vvthUUm}{qyzZ_\pX^`l||bNao}YVvwvqrspeqq~upudPF]ojdzmQNUd|mcupi|{z`_ptr^OOfnQEUyvXWisikx~V>Pt}zv}xi`q{e^tlXDRlhS^pILosghgjyze^fra^hgZU[rmJQr^Ue|\Xgjg^nth]cuvcVXue]ukVLOfq`egut^Tg|qftyllam}r}}i`mu`\^h`IXptcWWmwvwsns}~|t}xhYTmynr{x_Wl}wm`]h}ohfoxpt{eVf}rqntmkxwdUbwljx|eaiv|{iiy|n^exierw}{hh{saWa}ss}n]`lk_i|ynrso{~~jVTjzyxxuecl|z`Sfxjjjlzqpsuolzxkjqyxos`U_upbVcvvtsxvgklcgzup~tdbjvn[R]{uoove_quhmqggzxib`mj`izjblurwo[bs~oim~{qf]dxpixxeanqdq}jbmx~t__k}kXSt|efmpop}j]_~xrqwpeeql[d|uhaljftz~hXl~ui`l~ronm}dPPh~ee~sodmymm~z^[h}~wnoywh_fus]bsss^j}rdu|Xxapv`hhjzrh{|pTU\|mjnqhgTa}eTbz]lp|{~jmfmwh]w~{mTZgnr{bc[gulf{}teLKoqhg~cS\dpxqp~ugqvugfbixzvquve]tbdd[ccy{yzwxzjvigj_pwZ\j|][v}mXYbrj`tr^sdciorxuialmuzTUirz}ycown^glYgqcf~mWY^byjhsvnkx{td]dqn^n~xVNa}yrvk[\kx~koyxmdjvxu~q_]ps[L\zuigm~fXc{opu|oc_kx~nUNYevzh\jllqzznkujfx~{z|~oiqsv{zyfWVm~wy{q`fq~f_i{oabu}fWZm|po}zskm~kXg|wii{ugciltvtttcYf}~y{wxqjjxvaWiysh^^pymmrnakzsyw|yzy~{b[evuidnpcYYe~q\jy~pmx|pgt}ve`kt`_uiX]ljgz}tgepunt}|ubXZbsqn~wigk~hi{x\Xtk`^gwdVapvb^f}|vnwxlov|kcjsWK[wvmty}kW^z~|~[k|o{zuWsiMzYga{ksPZgpmWoUwnslvccgd|b\e|nXPf|elcnv\]xvst{jmekshMZlv~|qeutrk{v[W_wvX`{}md]sprqjoyr[|is|}qq~{uKRgALMo}uhagRrvpn}cpkn|tvhz~}}rtaUJTvrqvy\P\g{|~i`kyutsp}tsv^\cwnbl}{eV[rbJ^ticjrekjtyowykk|smlnxt]O_}o_bv}}z~}kkv~ufdlusliuzzvyqntgOTuyu~nmp}|^Tivieny~ynks{pstjqrroIAUrpifx|yupjl~xs}zjiny{nuzcX_fx~mWWqtd`xokmt~t^[k}uxye_boxmgsodcqrdjysebiuyngp~vom{schvwt~f^aiu~tts`UYn~trsxu{~snhmvxmw~uw|oim{l`e~{okcgv{vxxy|fOViw{mbQOosxwqzsVk|}rlzvzrvgizn\kszbY^jqgl{zpdUexnw~b^co~~zvuggryiep~j]b{ocVQe|jpyj^]m}pgckpusYstbTIestxznhi|s\Yfottnw~xuhfq~qn~{WHbpy~yycW]qxljlz~qhaiywkq{q\`yun_btjYZjt[O]wtyvcam~yv|}lmjffiuvtuw]HPjzpovvnqkSWmnebm||rmjhhotmwye\kxwuXLXj|vv~ma^g}|smpzlfkz~k\d{zkbhzx[JWnwqxregm|vx}{fVS]t{ptmbWYdv}nl}m`h|{ifu~wtw~sfWVm}z{|sbX]ssdnrg[btttzq^[j~{rolq{e_mtecq~od[\gz~ku~g`fs}ockt||j`n|iiTkhqb{]W{|~oowk{mrz|y]ezufsklkhxck^OY|zlalu\dbjrm|}tuvnpkwngaujVdyv{w}}p`[^bowuzvptx}tnmtqYMct{p`acqwgVUitnpyyolnt~~xrghx|vv~rYPUlwcakuvtpwvjxwppzxxmnqk{qovhSTmyw}t`WYfr{no|rjegyxwuwz|gbupju~sihvs\S\qpcam}xlltvyzudhtqbeqhdgrva]ho^ctulit{rtxrgXg}vnr|bXcp{hd|ub]mpcfrun`gqxqc`z}xndpw`[hqhbjy|mgrykZZnzwtwrnmt}lYc~zjY^qldisobq~p`_i~~{urk^kwvyluP\wppjhtgna\uyoeujuzwn\dp{vhl~|l\X`wonq}ue`o|v~|mkt~}~nfgvoag|viow{|i\buma[dojz~ve]k}~vyvnmt}xtwz|hRSm{i`clywijvyc_rwrspp{xhbt~l_]f|||~hdrsfiwwrsjozj_fxuntysi`ezpt|xd]ezywqrx}vgiuxqejwsyxts{qejy}xtlbbqvmhfroVXr~ux|sidm{}mgkz~ypc]k|kmwrb]synonelwtmt{~kY]ruutzcYduwmuzmiq{qilsadvzndfs|qtzwu``tsjjwg[`nw|stzaNim~||j{petznnwsibsv~kfeourlymYb\^sxn\[yxpvzmlt~pbj}xh_Zhrx~neox~kZXtqhk{yb_fwyc^pzpjdjk]euvroj]]iwe]]nhXeyqjv{pns{ylh||rgagy|qgdvmYU_szmwfW^xziku~nlvwg[`w|ups{k[\fviY]z{ogmvhkv}p]cqukljlq}vnt}k\Zjye^dkwibnteap~|tnt}wlhxvk`boldaph\evslr}xmlosukq~ss|sgem|np}yhSUg~|so~u`bl}{qhq}tsrzitu~yl\l}j`hh^botct|r|unjqvv}{}n`Zm~xl]dwvfkz|g\jztqtpmqw~wtu|}pkt~vomvrjnzypmxtkqsztqr~tlvztlddqqhhl}j[wtsvreakw}pq{~{w{}zxpqz{geqzvklzvnjuv]Shvger|uot|qtyxsv{pln|qqzz`\duwofjzunot~y}zml{~ovz|k`gypeexujb`vrkq~qnpz~thhx|wrv|xdfrykm}|ghkzqhlvvjdj{~stxyttw|rc\t{intt^go|vmhqwrc`ozw{~kkrvhhlxxjhstekvi[izsohluoglk|}kamyt|l\XZlo`etjjyxrluxcamx|yrhgovs{{h_iwujssihvsegw~m^`o~}wythgl{qfgxrd_kqjmuvjxujY\oyljrzynjuycW[psrxm\Yj}rhi~vkkiqxww||das}skgcix}xv|ePPrzxy}zgflt~mq}~lfgw|unjrt_dsteal{uv|{g[f}vvy}ypgcbvy~}fYcjyvqvlfcoz~qb^nunyyrlowswy~n[\t~zzr[[dtvtt~ue^]j~~m__ht|}tnvxutzwe]dy}osvf^jt}su{tf]dz~~uhhlyujowlkuvnq{qowzuideftz~z~~fOYkxvneahn|y~sfal}~rcehsrfe}xrr}sads}wnvrnkmvzyy~jX^k||svpeY\p{livxikx|yuwyxosxoei{wt~oZOYgxugj}qheq|vwwji}rnzvzmrx}sf\gu~}n]kxd\jgzqr}vi][y}m^jnxsq|gVb~~uswsa`ix|ywpgYWx}|}wnju{rzvkgmxumjtoXSbzurt~vrs{~}nixslmxugfhjvqitr_Yg{vq{ybRZm|ps{rlnzrt~tio}ojcrtaXbpo\\qvvvnlt}vqx~~tj]Zf~uu{dY_o~limndrvihq}roq{~rlbc~jmu{ple~{igx~[[jowwtws_hyvyr}|~nhwv{tfco|vv}kbXcu|who}|sljr|zlp{xhfrzfe[[u}syr_]n~xvsnq~~ursuyniovy{opsxin}znehx{sgdgn}zvonz}pjiwk^`t}nfltg`as|uz{qs~uuxnjklr}}qjds|osqkmuwptxm]Xixvvsyyvvz~ttzukiq|uy~wc]hwyrnkxyouvuznv}quwl_elv|rou}lgqskvz|ot}pa_s~sro{|ormpxwgo|xsgYi}|scam}wqr{|tqou}z{jlwvmkkuse^jy~gZ\k{ytkks~zx|ogjvsjow}f_gz|sq|~qgjtt`V`p{oswk]cy{pxrdf}{on{iYXfr~~upr|shl||{~{pjms}j__rwtvn^`nzzpvvjfmtru|ujWbmtnktwuru|gcy~ren~}phlkmuuklpt^Zaxu{}o[\k|s{xkbdm|}wpjmwtot~zmm}wkgj~oZ]ptqytidfm~}thmt}qnvlYT\qtrf[\svien}vpoz}{xqfbq~|}omr{}nn}vf]gwzopw}h`bo|xu}y{|}mckzxgbqylghp}xtyjbjx}rqghu~qrtsdbkzwmt{rofvxus~{su|thjs{oq|tklisuu~nabm|zxxjmty|}ztlq|{sv|tnsx|omq~|ypdfrvqyzjky}w~}wmjjsywythdn~smwrs|~zlbgttljt~y~thfssstzd`krxor{}plps~wwy{iksyrlluwuz|eYgyxvopwpjy}~usxzwv~{vvuvvvnrvshqxuvwtmnwvnszwqnotz|l_gvztu~}qjmvwhj{~vvzzutvw}wnq~vmnuyolqngn~~rnu}qljuurzvnozwtvroqv~lfm{~qozwjgnzzrt~zsq~spqzwsvy~zljtwihsxmq{xlq{prs}~}}tpq|{olsrjmr}vpqxshlz}{tsv|~xzx{xquztu|rps}vdevvrr{ztrsxzsw~wtw~zqyxoot|olwzqqstqu|wqs{wsu}yvwzwrwyrtulhp}wovxqiq}xsu}{uvxz|vu|zqsxvqtxznlvsov~{xwxyyyzy|x~~|xuwv~sv|xmv~~wy{|{wx{~vquwv|~||||~yuu~}upp{~~xqpvzwy{xssv~}||trx~xvux~urx{xnlu}~|yxy|vv{zvrs|~|}~vs|yvw~|wusy~}xsu|{z{~yuu|~{snt}|xqsx|}xyyx|}{z}|wx{}xst{}y{~wswx}}yuu{~xrs{{y}wsux}||}yz{vvy|}|}|uqv~}xuy}|y{}{z|}}~yuz~zz}}zy|{xy|}}ywxz|}|{wtw~|utu{}xz~}ywx~|{|y|}|z{}||}|yy|~|~|yxz~}|}zz}~||}}{z|~~{z|~{y~}zyz{~}}yx|~{z|~~||}zxx|}|~~xwy}||~~~~|xz~}}~|yxx{}~{xz}~~~~{z|~|~~~~}}}z{~}||~~}~}zz|}{{|~~~}~{{~~}~~}|~~}}~~~~||}||}~~~}||~~~~~~}|~~~~~~~~~~~~~~~~~~~}|}~~~~}}~~~~~~~~~~~~~~~~~~~~~s -x100644 dialog_32512.jsonQvYP ?H100644 dialog_32513.json^J|v-Fmxu100644 dialog_32514.jsonٮ !UBic1k100644 dialog_32515.jsonWȿAVCޓvI100644 dialog_32516.jsonb\.#.cqD.M100644 dialog_32517.jsonEh"U`exC͍Mix { "style": "0x80c800c0", "bounds": { "x": 20, "y": 24, "width": 202, "height": 135 }, "menu": null, "class": "BorDlg", "caption": "File Save As", "declared_control_count": 11, "controls": [ { "id": 65535, "bounds": { "x": 8, "y": 8, "width": 36, "height": 12 }, "style": "0x50020000", "class": { "class_atom": "STATIC" }, "title": "File&name:", "extra_hex": "" }, { "id": 100, "bounds": { "x": 44, "y": 8, "width": 96, "height": 12 }, "style": "0x50810080", "class": { "class_atom": "EDIT" }, "title": null, "extra_hex": "" }, { "id": 65535, "bounds": { "x": 8, "y": 20, "width": 36, "height": 8 }, "style": "0x50020000", "class": { "class_atom": "STATIC" }, "title": "Directory:", "extra_hex": "" }, { "id": 101, "bounds": { "x": 44, "y": 20, "width": 98, "height": 10 }, "style": "0x50020000", "class": { "class_atom": "STATIC" }, "title": null, "extra_hex": "" }, { "id": 103, "bounds": { "x": 8, "y": 48, "width": 64, "height": 82 }, "style": "0x50a10003", "class": { "class_atom": "LISTBOX" }, "title": null, "extra_hex": "" }, { "id": 65535, "bounds": { "x": 8, "y": 37, "width": 64, "height": 8 }, "style": "0x50020000", "class": { "class_atom": "STATIC" }, "title": "&Directories:", "extra_hex": "" }, { "id": 65535, "bounds": { "x": 4, "y": 4, "width": 140, "height": 27 }, "style": "0x50000001", "class": "BorShade", "title": null, "extra_hex": "" }, { "id": 65535, "bounds": { "x": 4, "y": 36, "width": 72, "height": 96 }, "style": "0x50000001", "class": "BorShade", "title": null, "extra_hex": "" }, { "id": 1, "bounds": { "x": 164, "y": 4, "width": 32, "height": 20 }, "style": "0x50010001", "class": "BorBtn", "title": "Button", "extra_hex": "" }, { "id": 2, "bounds": { "x": 164, "y": 32, "width": 32, "height": 20 }, "style": "0x50010000", "class": "BorBtn", "title": "Button", "extra_hex": "" }, { "id": 105, "bounds": { "x": 160, "y": 0, "width": 2, "height": 136 }, "style": "0x50000003", "class": "BorShade", "title": null, "extra_hex": "" } ], "font": { "point_size": 8, "name": "Helv" } } ח@qxp{ "style": "0x0T0f!nullOpen 0J6:ppb2, "y": 6F*^6(:oqb2($Y&6 $^oq "&Files:"1102!6, "y": 44K76 $^oq@$76, "y": 44KГ#'46, "y": 5, "width": 501 14q} BUTTON"OK"1 #(46, "y": 23, "width": 501 14qf BUTTON"Cancel" @TgxC{ "style": "0x0T0f!null;8J6:ppb2, "y": 6F*^6(:oqb2($Y6, "y": 44K6 $^oq@#'46, "y": 5, "width": 501 14q} BUTTON"OK"1 #(46, "y": 23, "width": 501 14qf BUTTON"Cancel" @DT+]x,{ "style": "0x80c800c0", "bounds": { "x": 20, "y": 24, "width": 180, "height": 75 }, "menu": null, "class": "BorDlg", "caption": null, "declared_control_count": 5, "controls": [ { "id": 101, "bounds": { "x": 10, "y": 20, "width": 160, "height": 12 }, "style": "0x50810080", "class": { "class_atom": "EDIT" }, "title": null, "extra_hex": "" }, { "id": 100, "bounds": { "x": 10, "y": 8, "width": 160, "height": 10 }, "style": "0x50020000", "class": { "class_atom": "STATIC" }, "title": null, "extra_hex": "" }, { "id": 102, "bounds": { "x": 6, "y": 5, "width": 168, "height": 32 }, "style": "0x50000001", "class": "BorShade", "title": null, "extra_hex": "" }, { "id": 1, "bounds": { "x": 42, "y": 44, "width": 36, "height": 24 }, "style": "0x50010001", "class": "BorBtn", "title": "Button", "extra_hex": "" }, { "id": 2, "bounds": { "x": 102, "y": 44, "width": 36, "height": 24 }, "style": "0x50010000", "class": "BorBtn", "title": "Button", "extra_hex": "" } ], "font": { "point_size": 8, "name": "Helv" } } I `x! { "style": "0x80c0004L64e!null140"&7, "y": 42, "width": 404PU}BUTTON"OK"1"'93, "y": 42, "width": 404P>}BUTTON"Cancel"@5^7;.xx3 4, "y": 19, "width": 199SQOpen 4̅ppr6, "width": 1041 P }oq1041 o639, "width": 211 |rFiles:"1102!9 '4, "y": 39, "width": 401 |%4:1041G81 81 #d #; 79)24q} QL24qf k6!(156, "y": -1, "width": 41 . u107!80< @=2dxT100644 icon_00001.icoE&o$~Y100644 icon_00001.png`/Oz`?\L΀T /x ( @wwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwwwwppxxuPNG  IHDR szz>D$VDs[ 9ff@)7I^\#RH@͕Z}:SJ ޵jDKH)˲|jzW3DjNAT#/f3CD{rF wAD*4 t$ BY [P s3wKwmu#]C8@s D)շ=}~v7]chwmA| "QmJg~Ĩ:N|Wɧ1N_Q?GӴߖ@ojcw Ң|e~IENDB`8̚ygxz100644 bitmap_00101.bmpuF$0Br'bӄ7100644 bitmap_00101.pngLP Dm^( 2+f#100644 bitmap_00102.bmpϩmU5*H*t100644 bitmap_00102.png#^t-+w)/N100644 bitmap_00500.bmpΤLPo%H100644 bitmap_00500.pngWawT9~6!g(100644 dat_00400.pngxzhSN+=sWZ}100644 dat_00401.png4HB@"100644 dat_00402.pngeYl)Y_y؝~L100644 dat_00403.pngHVfnJ~a~䤷j100644 dat_00404.png'%OhCzߕ[100644 dat_00405.pngѷYS@100644 dat_00406.pngqHZo.100644 dat_00407.pngZlZ)D 100644 dat_00600.png+ppw72>Zq(4100644 dat_00701.png'y߽Qeb%KK100644 dat_00702.pngo2h{Ϙ؇100644 dat_00703.png*PӱvO9i100644 dat_00704.pngΈh|+"ғKҀ7100644 dat_00801.png؞AEmK't~ޯA6F100644 dat_00802.pngMS.<)rogR100644 dat_00803.pngEM\vi-hFNZ100644 dat_00804.png5XUD Ֆk)A100644 dat_00805.pngD'!h NƉGP/,100644 dat_00806.png>V-s,d$4100644 dat_00807.pngϠV6~ 9XH100644 dat_00808.pngp}w#TՒiM{ 100644 dat_00809.png1 >aɰ]e4杇Dwd100644 dat_00900.png:u~p%|/Q 100644 dat_00901.png̎t,KAi6$100644 dat_00993.png7Ng2 0#L100644 dat_00994.png9FP}oы%>pϠ100644 dat_00995.pngIJUGwN~%rp`_k100644 dat_00997.png}񅎓]oOK3[-DSJ[$Y{KSA^j 􉠤Z3IENDB`HIx BMv(. xXPNG  IHDRR0PLTEO&I2IDATxα 0  x-RW)JdD:/*fo'?DIENDB`3w:x4BM4v(3oT0xPNG  IHDRN0PLTEO&IIDATx[[ tW鮀0"ι:caEj&D6~/8t,GG短f>I~ϫ o([03%.h!+&~,]s^(@OIf~asIG:+lsgFMqֺ (J+.s^]ǣ_eׯȶ'?؍}(vc؇b7؍}(7V<]]wc>$ Ei=EF#PVCjOz1[cǴ@V8volM`(bAZtp̳0ʳFf x{cY2npē4pciJk:hUnl6VnlY_o,K,q%~;])x#)v뮕- NI$qox N<n<&ޝ\]7 ?)؍ՍXIvcO\ WvK7 yA͒eGroe?+|–ω֫d"qFuf}Jqp(w}yxx_<Ŧ +IENDB` |ڶ]x)PNG  IHDR*{5;PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IIDATxMn `r(H,(Ibl-J*M8$p ^Sl:AÄ4A)ڀ_p'ъ 8L +ְh3ΣO} ,9B+RztpAJ3@jvT(fB}ߝ `rYvke b7V>0FhD+_yxQ tMGei+ /aY.j)lWiZ}g_u g{޴=%DJ9D*MNdM(V+]cZ'M=+=]ESv*J=C[vm%=εҥ\یjQy-' ۈUBE%sm) hSG` 2*oqk $u:բWh[*/ߥgZ}JroDFi[j fƚzD[9<638者0֤I8h["n&fӡF$RhE6)yV,?;> {L-^ EZm+<8'=>ߗsU˶E"9"P^ -{gt V@6%|R{j62?WpQRڛwoQ@67z{zw xyIENDB`-#cx> 0IDATxn sǓQ6?(Q„IҮTѧ#\C`^.:T2Z6O7l#/-l Щ+Bz*\o"ͱmUh E[2trqi K]AuTuh# n1C.w΍/*~vXV+R]BH.LUɹ%ih*X>${)qP:41[MP'jkh6=O5ӤPPe7QyӤ֮Pݵ+-{.@y6!I6PʮB}C- 4i(ӡ%ڌ]shP}DźbTjX~^D}cͱ|6oPSHg4ohKr_q6Z襰B%@zyGP`CFzLYs `\{ ^a7z{mC! N)7`)% 99*RsLM6?J01(MU+sXR#W+ߊ  Wu-+PSQ&){FZk_ڍ'{kkmE]R8hFDV 6*E%P) (SCFUj(Q2SSDڶLYWuoD|z/bW7ZXo%{EK(/(xm4a gp n8Hˋp=lѦiߺર%óMLC Ki׿O=mBX|;/}uAq6PZːaA;]ۛ^_=/iٶH$|[7)k˞eM*HÖi֓%Uhz6Q~k8BiWP%LFsا{lߩ6IENDB`Nq+lxJ 0IDATxK Pr>>*UGAb``fVHLm3,Y . Jzi)ZHa9-|Ґh 64t 6h3(!)WO}Sh RXr"Ei25$ ` RI*u5I5l1V+r*I)*p_>"]A u8u97u\V~r\\5Or8{8VIQJ^P_gt鮵]es-tvC{QYK FyjZ([PPC@"0O$L 5TRdcOوFL`N'PP~14Je2A{b +0,-Tڱohem(P:^L?E',"oEYђLLS_N=mbtMXz;?z=dP3cRhe(eЫmGqiϛ'f[$7kۼGo(L.4ЌA-_@Tf{<aMkS,kn)%BM8 ܉ J6vV+Iٳ2mnT{ƐnZkڃ{kKEu{(':'@UB- jQ T-dJQ{CZh%J5騱 u85-)0Ji jX/h΋ExCv'ύf", N:a!Li{·-4{ŚOKF61N5.,^&>1^n~jܾC_"8CՖB+/C]Vxӧ;xAip8IENDB`P^xPNG  IHDR*{5;PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IIDATxY Pq>>*Q`0d,鑚Jғ=`?@)4:Wh%4FKRPO=â81U9,3B;⣤16Cs5K3@r$HQέt6oZ1(u5:"lRkjZWLg"`Dv۪` vrb.K| 8 Jm.:Hj}eܯg ocB,7@ºd'h= vhchs49% CÀ~4iMS{AkwAy['躮,x.;6܀z>A( 4kZjb(a%o7,hJέ Z_ N*OWe;2شx *ڊ.Bg5鋨'ي i9$TzI2{>mgЉ htWYaS׫ z5t=JA*`#Va]J[__4dJߖZ.}As/6.'}{7O(Z6BNҧdo*/@ :ENhZXMS*-Y *4MO~k8Chgo}iʭ'z6msU⫠IENDB`<J+oxB 0IDATx[n Pee]>KAMPJSuiTFNp0!lP6W}h*C5,ڌTO#t]zPxa+ܷՠ5(k `hRA¬SWQ B3K>F[-FassiFDFr 8I ^7ŰHh:.K[N} rYV=LULg>MR;=OzO8{X0K`MRPl54;kBZ¦ێjպ^4{V{MAwB {f ][zкVkRy{@6" PР@+*ƵE`I$Nu7lps=Q'R ?yup7t<~[*_Sъ)¹~#RJ^МW6V+Qts a8XaUڞa6{wӒάN Ki׿m/zI{?bYn߁|`%]dGhϤRee նyɵi-vQ; t ֖A'6%5h>)yzA%Gi5+r8BY[dPM^3}s/!?cR"@IENDB`ʘdw,;x3 0IDATxn+! P~>y)H,(0|B>Hp=v[c#B^M)&o)oD]tinyb {k)@X,_FuƜߕ^Șy[:Z K?\u\ׂH!wsco=A- ESoIx ɽ%is=$ }|B4>Hy6'_uhN!{nFi_քwTJ|; l.H9/X^!4`߼(pLtTu^CY Mv@LY aj#  1cea~>k)(RHEܗ&b)Yc3#ِ#_GkV tCr1hA瞔FpT hZϘ٨8i @+P Xn.AwSނ|ȐƱm;fBch(R瞑^3@@n9'݌ߖH!)"v*m"/1Y|rd #̍`G\N8P_?;8"! Fst.FH^q\2ӻdן3a?"J[-486{Y3bA4  V{q:[ i\aeMnN{AB]@DȺ| fMb\^N9솣+RN ci(bt#$5;3 + 9),-9&>N #䥑R國QBA'cY3IS-2ҹ#)k̴6'A7 N=>ӹ@dS"(\GymR*}ԒkK4WR !]]֌[A(2Hj8MڹbJ*Tv9 .o8C 1]RΩrqE˫+CCҮZ۰Q-GNV)&G;9bD3 6et/ZHtU`r!Ȇzf>ꀘc]g>b ) _&[nܳs]%&GHrv:D>Ya-G'%}; `Q +`rr$3&]nhJmXҍ&-edcsqXTY2vy ChL]}Ϥ9*ktGInIqHlf͠^|O!bHۆ&Ӌ-ɋ@gf:ǚ_/Bn@xY`txE[>~VX iGfRa,e ctC¶aĊڦ*죀tY`$W'j w1uTDYKΞlWJ@4uvB3ɑTaa)I%xY`̐x{:We[OZRT*/{ta̛_BhY,4ҠE| SkrԒF~3u LmgLu]ȃb7/@:ڪ%qq" L}4brN!>Uk)0#OZ!7zMj5i3eWR vYUMƼ|x_դ%ՙ"iUiՈ5f1XAi -S9Cڪ~F@Z -n7yWںgؔL߼]aaQRVxntlmI

@B0EK D5#1 4?Rby=}BV9ik.*q rwO6|&r3 aqѽ7}0&p@f^ . Iي2*@v͹f#nxAiTf{ e( $t>cj-ŽKWB]6 Iˀ KX\tP^ K[e-mTb]v(@ H}4ܯRU#}ȾYHri*n\:P6k:LMGj2 E{@:TyhKĺĜ;{^JG#q"-m]Ԑi\mŊ\TxOZ=)]n#y*1$ N$,.+IUJۅ$׾U=͹FfQtNc"cٰ&1eHq1ΰxCJr]U<ON{V!HֿTC99 ~J3)@mz?)ND5|wߪ$C.oKm=p mcc8D"tE@IwR:m v6e $ B|O0 VܐJB+8:uW v%": H"I>vbm2|n^wxw|TrDn!lKGBR:{e^ms|<Xwq'1]g{gJzJVoIۅR2YǥH!]K@ݐuҹi:<o 1OØw IKl؝PnPp[.$BZ }t$lM|0iZR~_: MAys )Q 5"2Y$ꂏؗ63Y-Bu!mVT Dא?c5Mi5 օdtyﵤZ$xƿ§3@yzK/ފ >%!N 낏x(L]ŗ"/L&cNs8Zd D L H5ܙ IW)!L>8!HpFX$楚 GR] DJ $vBB%\皻8wwD:`)H@d +^ r( 6$ ̀,ύsiJSQz¢ᐢNBDJ L|L X7K:`SR Xp iUR)R ݀,6Pz^Jȯ=E1 Xh@X= D.WM5;7` t8ZEZO|Lю0EͯfVL5`h g 3*wL5Hפt0?F1KsxV!<!QWCcT`ˇYzmRmDC:D$ !A @odF!8}ǰȜ*~uĩV7(?1iQha^px*}z@!ip.y[H0ágܪCXb04b $R)LJ)IWh{R?#JkQahS!@"!9e=k9^жQH/a43ypL50ĸTÇS=VcH m| bX`Ðİ=&Vuj҈5%0h9EBcy:p$|@dY/kFH"jj8,i!sm]!ƍ*WNMqW|ןd[uDB@nPNCEH~^>"c>%Bx׼N5odaNop;!pNА^ݽlsqq%! u $>͌珗Y,&}-p$#cm6p4gG[|]u^KDyS:oi +} u-p؊"ۡhf/v ǥIlfd&yWqHym^,u֨c/5O#.0L{oQs~J@)o-ۋƯNXJNCJWsҟ$&W+!Q6n߫^r515k6fd r/ nZ6#?hZ@QDٍ^kfW\ %2 / ;6Mtײַײ"@^Zo ҴpA [;iw޻w[4,lPg<̲v#絶n|T6vzz[x4xkm5Hi,[XZ ^kAl~!SO4C.7 D]$z Mo#b Awn|T i{ %>B[@x>j/T*p/x)m§>6ǁ@遦N>o+[^K;D"M6.v\Ox'nk0 iy~km5I>(x_;0YX_ǡTz9 e@"]$nDG3a_\$ g[(Y3N+_ֈUx*Ըh~k?I| =y*yhg#ss^kA{!a: HwlѲъ:9絶DDzfȼ zhNN-i#VWӀX^3[$zto\!>0,+֭NZ 5 A-tbJBGf]\jlkQex)K?T[ z@8X@AR*Įi,$Z^ /qc5+1SK& 1+^%&;)ߨA^BӀ8kVku [?eF*^|^4\jWŝ5pPXXhd Oy4MD-8EŐyG[B]tv^d5 1ɫ0W7 @Zd(5@YIRi}'5&y$ \+B=ox5g(F7*@/9)@h7Otizox!>kf-I@^ڕ ;$@$[<"'v b{ӛ{ceC [/zm15HtRiq0 ޠȂb?xԊykz 5HhN[ 7!,>D|f)gCWxZ_,ҌÀ+ 剏1!)guH4gPX0, /z s<"Aw7HX;Dj/z KroCTx(k1 Ï?dc.:WR:s;}kHuoC=֟Dz4Ts+Q$ s~r p}@?kG{0a%Knӓkr?H}$1߁#7ZUdl ǃ]Ko|km?& dr yƒk l>j:ާP*iG+ڟd6v_#i#> r0EK{/<>pklF.}Co|km6yr@&0p#&37ZN.uӽBK/.uƻo|km،Bb@Qdx#D&JT=3,P> HWfDuz) W)KFA!y+Wܣ', y TC=X$ūȻ^kf"&r@\ސx k{POt+jXr߅Uɞ-bykm-@tG|{Bc3d H}qS}[ Αڰ߮@GRHƟ$ LJuKP V|s^KJ1 MvU_Fւ?7/r Iȧ?" .0tƤv,[;5PO|Z{X1v ^?z]v.msmt xBp'$<ػXX?&tF 2€+AZ7gPHb!]S/ykn̞O?x&yx!@–ex_L`7?>y&ܛ'cFz|ƃҴpz W+ >~'D%'iapwvZxPWru.Vkfaz W(#@+'0HC1#0O2w\}; yқcR+Ar3.[o+F _jb4uֻS^3P.W#߼-w\L K^d۞i_eG,&v{S 5Dz%yyƑ*LU\| 39 8ʑ٢t񠋡 "7ߨ1݌W/qws @Ǘ ]3phF"CKpkK A{kS߶Q )SSVzFڬO 3(z^"?烈H_Hv% Ԍ[͸IO[rn4Mȑ˲wx"-nY-@.$?5Z^M z<}7m) {5#>Crp} Cm-cmTfz}08@v#MdLjطcugT;z^s3V\k!q4(#yҩhη 4Lh\_R<髥_Hu4a% MK75@ߘ*?G+ 8KjJ ei3J[%&iLcOyMʹ7`k { "zDu5:F[}e5d?ڵᄚP7A=\VnIڕ7۝G~ tTC|jev2Գv"'2# Wb4F qg.hV=lEԭlż.n;5bB8I {`Yi71+0f3^d@%n1xcvsHֵifQyװj?K 1ó-)y)v}YM3C-6K$ZayolX?0%@rőaW0]=wxq vJzoyM5MWsoJF@s 75zˈ޼&дK;y5WD$E6~oyͬA+AjgݙAhS v~x-dviBWrXUB)Ojwy)[.ĸofib)SK gkSxd7z}δWy}JY3p,\Wn)eH^_@>m҆[HL S!IENDB`9ykxAPNG  IHDR\PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IyIDATxMr  (xkvDQnDTHhAɸMqdL75>q#ob-~*}"|A4ͼՠ~̉"QޕԚۼK-P2mi(QPgYJVMJ=J%JN0ږª IIң$+*%*% %J#j[ RN<+7'"uk. #8%,)ұN%~E(Y~(ys+NƢ`)%EC GIƎ])MI)C)FH 5x-%zE~ Ԗ&zJ)J R ;"q %3NI-ӟTJG,u2~rfFjet{ֺT6@Cg(D4'.RFwZ=_R龍ԧXMɽrc\ɩOI4P>CX ,َJPj^T.`cK)Ν_LRJOM)kK%N!J LJ{!ܵ-mW 4IOҳ;(ŶQQy s3Fז*HNI0ͬ\(}7K))Kڒd;liJ@sG?;'(RPBqzRΨP[@)Q[~;HL) Hrq=RbR9MifKM{\TIJڒC)pa߫'zGRJhS" =J%jzJQ⋥I[CiD7rrjIУ$)Qb%J#FDGITJ}J&JMD)Yzw3e,~;YEķhtԾ]]ڞ}a8XD|sIENDB`2)¼xlPNG  IHDR\PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤I'IDATxݖ 箯ϣxL+Izz J r47Z~~:4Hks1z[̴Jk8_W{{C{rJt#{|׫ec& $5?8LQG$$IB-RJHۡwn [[J=RL̗R?%|v*LSBVI 鳶I*n&owwsM2a"IENDB` nxPNG  IHDR\PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IIDATx[r ]/l$JyU4Bi'NC8@EP"u<ό !T7^TJ7^M/jiz]ik>}oGbMT_휚)%#jb;S[=% ,KuQ(aDBޗᔢ\)VMJ@4J)eP+ܚP 2([ȷS_6.xӚĝՍ Wo|w\ L?j*r&!CQ2\zE_ R 2tŬ=RXW毢R.@LX#c)PrR(`zm_ D3jnDn,-(-R ă&(au)=㔌pV'J3л 3bJp]Т(;g'&6`+P2s {wB&%t`:0Oo8g9Ʋ(ِ(">vP(/3""%(dFtP!JbpWNɔE7/)s,'WәcӣF)k5ĜZs:SzDB(!((<'X#:$=JXj0j{d;zf)10ۏ(ϧd;:݃e%gRr,)GQ(_G5(%>WJS["5 KӻQFzFz.EI~49X()K%؍ybNVJRjR2?8*HJ) t(mh㔥:}iJSbU_Rtr%VJ|Q(Kt(R{Zx}eIУ(YJAJ%(%j))U6%Ŧd6K`Yclw%V픎܍2N󟿧ٛ3u9@N?%pIENDB`\Gdmx"PNG  IHDR\PLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IIDATxۖ QE >wP4]5DbߠR#PzyYQku!)S8[Jt=Vkyv];OOIi@R%geSmQ} CMR%+E.Z[NCI'(j(IiGHI hTފ%RKq5Jɤ(ASDQD$i$ RKq5J5J5J)ϔu[)AFRu"/ IJ{HJGcǜ9Wحd"eJ= ($J{JPtUt$aW@o_jJJ)TF)RwG ? J byȊQ"2l+jHRvN uYsH֗rR:*ߏ ˋx+R5JQ%)(WdzH1OK)ҳQjRP҃B$QRRR9% %yVy凜{2rFRZȔnoSZT}PG@Bs#:dCϤ4ϸtLu%:%cb~;؞5B9~|څ㌆kďFyfQO% _|ϘwM`yPSc%%疐t Wgᶔ#{J* x/(:e8ң)DiRbt6E$%QcF鈔4ɣ4ɣ4RdQ:Sr3JmHlU^%_QRSFiGinR$QZϔPSu[G $Q$F$%kc\*{rLQl#c! =F!&ʆq$Ģ1@"61rFqH\;!EF\ueWzě#wPwRZDـQCa2tGؐĩ(br'DuUErDLD^[׆,({#3DW.?-jwaXU#C~%yèUbO{)ŧs;4@qZpӎex|Q VP@ O7RC}EFƆ#K@л|R=9[^ qGxL30b##( 2e1OJf /@c_a>k$^RIENDB`֨mxT 0IDATx]ڃ Q<淋 7zU@bG)(yr796>CĔ#cdL3$8C4XGHq(a@dd@8@Df; ) 5"ԕY5%F|(vDJX<P"nx=#9L7z j@H `SZUkq$gK$ IޘFMȚcbc0`yeuF,/Q[ߊ|S||%zy.ct%l. \}zVB 䩦%/4G{6!sq8"u5#_mPkGkΨhVX#c G0a CX2 9[f@ 9#!L 2+e >j%~< nIENDB`'xK 0IDATxa0Eoԙޅ0gi2^kaNNT񻎍Ov=O[z3*5b~#SQ6d@h zL,9#r{@*>NHׂ:+=M!gGD g$aC2(b|-0N(+yUErm Xۨ `1CX0<: R_"cVD>!+KQE?y/,BZIj1@p[o{⩄]CY{]o*wH.o<W0{DJR<E06p%z2@T{Iy7G?\2ϑ/L`[SS_quNLs;Ga X qive)yrg bgdG*|< V$`|ܻ`?Dhs^nW82 QI ,}|,|$j C?l&}[(~AvDX  0_%@81[Wr┆y•8GayY0޼d[E7Oҟ0ߴGUkQ$ݬ=KH:at,7r8FȈi0B~%_$.@s (@)4$>E<,#` F<.@*NIeq" ,BJ{ _ )wO|>@?HS= /qKȏPp20l_kLp(h*@mL7 (N>@ |$%Kz[g0D1@+{Z #ϟ8yb$51T-2RW V/`C%QjCzpܑ]9γCu'nY%/BqdX5fmIK ]| Dҽj~45 [|h h@ݧj#dr/ aÐеI&މ~0zAVFpqa{Q3^53#e)*.n s/zAD웹ă<;sўa~g{ C?rjx-I2kXVX6`*@)O$ A0xq2NX%,kk?( !tijR/uU`{As|p!Ԝ K ml8;K@0鯭G޾V ! qcJbQ:TPbarq t\Ssl迪V&oP ?\T)*W(փ|i!S2)LV(a*4h3*; $_4U2*S_ Z(r ~UE=ȫǴYE5t@Ѻ?Ss&oGWl _T14O,½1L!;L C(All S׉))`Zl } 2#_\ L㈳5i_<6@58?gOAD3 so~ oI\i1rr"G{F 9H+Jm4_~"oZLA?~! g+'cyznh-2'w~!J ȷ?]hrRu;؆ǫ| Ptoc/ g=L/RŵNNDٕo4C _`Aq}/S é{ 5 YAlfe#Dwj  rGy\\` d ܄)+H.vEPVie-, ;F߮e-0o|"W({!@NPfHCBLc@]:Pnv 1E;i @m [ ׀D]w,2 vRUi QlJNp J/3 q ;gX-X@Gh(.Ȥ@cv_#` UL5"/ם.c0rU 0h˧U)L."`϶앏LW[B! X@r=zZl|;>%xih nn^C{p P iOX<_oMz!` s ]e+{xIԟH^AOM1wBn<0bc T OO T4"ʤ8@jj'Z#6F1 d ? v:-j2Oc+ngr*^Mޥ6A> B5V ` ߍ4l5LlO'#ZV068FoSwe 7>L!q#`h U߱gÝ̺֝H b[L; Eү*j@ېK0Qu([R`H"oiP~mWs @z]j:%B߃*]mtj+v9b#03Y#"ƋZ/&qN+s8W.% G6U ‹iBpRD%M&²)z 0V{8IM$z!D4m!!𯪨+D{vg `'" c 7[!IetDp;4ȁ|%PF@kK_=֙ #K9Y>A;{ C!  Ч[9ҟw8+¸%@I,學| iHDtI @krszpB0T>+Pv1קi2K雥g#T;g`qÌ +8i1@VKG42dPƱ3 ?kp^ܬO{?촀Q`H5h P)w kϸ#S`[t/^Ӊ6gT$7Ӗ?i[P Hej!$Гb pHlvU#v NtHe$Pvxh~UoKiդs t`Iv@?hX=Cd 3acG4 2{,ڠq$0 Wh$% Dr^g5ϔlbf3M'ԆDH1IiDë=1W5{D@޿Gzp?8 \qa3޷NTsZNjLD@L{ -!Pcݹ^?>? <>pw ycܠ?۽IsoSFyUb]&h5 4ZjH`ȫz{||% ]3aEf <{IW P+x8'\CjE a37 0=s h뺻h R *^ mQjy8`\Cb D b=?@딭O. qrb8%>?NZAⰬ6P{ <pD0a`x/X xEC2 ͺfC\ll%w;P%` 7KGpzCl􆑿c+H/),Ҙ96ZHVNGy|[ӧ6FhRj9Mp]X1M1G0HiC +<}L=I9%8c@_E5f.|L~J$B]<P&B8'˕_!&A?-|i `3,u@W?B_RE'['8dpS~UdmNJE:gRG0: *jB%)`-\.H&f~u @J'C_/-4IggOS5Ħ=SJA4 a` Y@yC[mm(J x0 %@&xԷ .􆙽w ïa60gbc@*@_ Ǎ* UVЩL̿6tɘ6d"JQ.n˅ fw=/!?{ @3R顥>zͫOV3My% uHSkZdčbfA׀^R y@n%y ]]ǘP0283|@& Xo#[H}`1!t\d1RQvlXN9$fr.ưΰ̌T06,-f(h%U`W;[mo=[X_ V@^b/L-@}]h"ଽւV̬\$>` T A,h&@toEB8&`._m2~5ڞ"Ժ'C@ pJ4Gf"}(;W#?,s]@$t 4-LKVμ7"=9_"6W 5IHǟ810ϋްLNE~ޞa  %4@g2pq?fN3T&ૺ{_/5 n[gdj04&?Oa~&ʟ CD媃[m5 M?Uw@9?1V}-|9"ƇeyL%˥!2_.!qg 02Y{8)bحgr}U䰱>&N?Pl vrL'`PqFD j N &K ]8  `W=W]P0wɰzp{X)|8@/,}5@dn!Jc)+L>dCLZ&Ɗ <Ͷڟ%K~CVQd^ bm{a< b `x/x}E;z1jcD,|i7WSyU w]p";,3/Qu|=M0 'ڦX%+?9Sd~k=~뽼{b^I LOt hnzðlG} :@p2fc(DR_(W5 n2J_׉OYt{Ax8%@!W1j*.om+2b(&QoetO\.K&q6HX@V p4 7M=?>;@zQp!Λ+2)lY"u_x/u}0&dq1 OPDl@Ƙebfe2~P/{@|!'DFD\ O ]Y@LYװp/,h}-o׌ oS{ "z>&[w'ՐXw,py:'_Fq_yuM'^`Ǫjn}M _8v,IY('ӟ@E[=`x hRk/Egrxh\o_W:?GBB~Xfq<{w,Knͯ.= cwk`c&b2 z0l94E  `JIss$7̠߃=,S-?/ .Ԃ- >^lYx!xpk#xX =2qL8HDMJiM5@'peojgk@ 3,h30F$~*6aK98j\:&T+J4\f=q|e\SL&ejﬗFze~+Ȋ5O ù Ηb,Y p|h 4Z`Jvg_a%d/0d"@FcB˖e:Kv4&K^w~J@FccBH6~ncDyu yw:ӛ&?h61pz蔪SȈ:Q GZ$@9#`4 RENma7O~TѤ6_ӉA1a0x0p?<PV=UNB`}7T%!<' [o7&h{Xf] >eA_6?O`e7Tl8@/E@Kjz5;j-tZ)cP#%oZP3nɲ Ke0M})b;!P8< uX% '`\P|P,W6pr |nɲ/ 7B7R53hFxnhhp0OU/|J4,MX7֘gNQt6oMziX )pFx{ kKԟpÞw9rc%NɠXf 9#উ` wT Lf:ZvXOc0 p?0O)WƵ3Y& (;JghG`"#LpD0 p!f]K'mFm5C\\&p?0D@{bnYˊ~(,, ~|`yiy~W_z~pn7V+.d>ߝKcIx]^ қO4.AeإA\"w@3(3gfshcn#?>!X{⨒S?hO'`8)^hLEu/'6Q, pi6Jڠi\5~4?_)Uex)7Z`E!/*p~WLb7:&?*Ԃs'p$sG@/fB^,*+='I]>. N q\pΟ׀@ UCK^ eUSNY ӵ z5?:W{/,Lf<5(,ύ jiznOן<1]| 0 VI7M0%T;]<1mb m2^jppL1(Zc4N獀"Ɵs8kҟ 0/t!:D*2#CZ[{w gdW&s @ן8F.@f۳u@E&9cp;~ 8OL3P\鉈2 дq.N.0ϋqT ]g+PAn9&0OAu7{B0>0 LWS8K 8p>7kƠƕ]-8g5=1m4,aLH/TKP NN̰v /$&ӸZ1p4{*+ߢ]gV:P'#@2L#5K %Q@ _dhbP`Q_~9LLxu]%.\ph_Jsy^-]JpJlğ(v@9%!N<Ր 6-wHt G'|-O(TC  T+-[ H3ZkWH$iu>?[JO"7fBP+x?J+B],3\eEdՐ .)>toKK14;.,&`犋ǎ?`|I^7ɞ2q%Bal/#vWMw0p+}m叚1z$;` ޟ 9.,sp?:a-jM~[QxRd^rpE' Rt|s'^@1'`࣪$Z%ZPCM(NǎS[\80z܉sSxqv۫[m`WK3@<6X&oGyؼ΋8/߾yG(\_߿\*b1RDv{ * {@oM uΟ9,'ݭ<ܟ\ SGlWYkNTS}_+8؄)`u+Ĥ4<û&R8ʌ\x<ice (}_Rts=)[ 3zۍɾX( gV\o p (:@]*sx)O{ }y'djH =3% Pt0N"{^.%H [K8[+2@LT |}VYX'ֽ~eY!fmXpW] .?u_Y`3'R`/h;[챍C@_K#+^\& P&` >'g+*ܭ^5_YqQ*g"^'-uDbz6'f} ^eZ)(qW,E,FSq \^sz%ZSQۧT\DזR2Iok9L3 oF,b1E8&ĔG,Pǩ\ /Vhl0wu pB"jZոR-R)zaTa.k莵=3\[ Xu%]+[^ ~N P^*ۗ#|θg=;׫Rבq Z+.)4x?@Љ\'Ds׊ Pd/0'~>|e nV\o2t>y?|֊;=nyej!z8Geԇ$3u5~8@;).P%` zqCC0% TR!˵ _CNYoV֊{@o5x( $|t?=D P /|x|HYhncYw0|=)r8 űH{n#>`E(g"ۮYD<&OT-0">|_ׯk,` Mh}(|c= agVOh!A!|n_j}V˗/ pT_$ZM" Z-C ׀нR !_A8ʼLÉl9]4$@/fa.I4d ׀N_.]G pvNO7f~CP%Ec2Ђ x<@"`4~̇@7" B`S  ,|PuH sROPLvN2 tv:YgL&]; "KT Bw@'sE1pR!UD4@slp`%rvsEqo;p]P>xo;IjH]j|=` T0pR]'`kLak@BCob4I*&P_7 Di`lflٻ~?,PKܿV ""@27}lx$U CqMx0`쒄VI41ACfb;yO!7wVi_#0=5 V,7 <&`ȅ?1C 8ώi:ۓu?(U@('"2 V$^Hɿ?]`OG``GJ~sn<wk" ?If&6 o&5 3 gp4;:{ A^f&6!ǍgWh g%_6"g/p/@~l? *+ F?VUEufRp8˵\z}HDc G{4S*?_5:L|?VBd85M21qe n/n)l9LvWa+$''2qډn<K$2 8 p^bcXZ UgM*ʨf(Ɵm7̄JNc!vO_vG'^.f1ˠVFV2Ł+og?!D7Zit'_j9Bǟ 0&=`tAHW>k[^1 yo|@EW[6`@: _XOQ̟ƕ*oq;c`4FJN`e΍/$WYXaVT.1v)"u5/WM4 yJ& 㟼mcw2oB׀nnU] xqj\R%uEp H׀as0.K`^*l@vr`cUX/f֐J~263S#i|4pι`cFG *Uqmp9fچ!3wӵ0Wо d>@B\R#cxz925EwAF[R2+h?b|(9y4m=l9̽7cq8F@)at`h1 k0!@(4?*7 ('#n g8 J@@\} `h쐺_zgh:X j8'\.VNLrX7Z_kEJ<WCa !@wXV3#7;i{|⹊ YR|O_c`+:"J8Z0 l{RJIxJ}@UְY`4mPbVC-Zq& c+TmTEI8(~M?/xre_%U '׊'yRM;OWF@NGj Au"֊L5V$026@˷&2 k) k[+_*L .?8Ut/ʅjk" }MSJ Nİ/b!z \+.{狀`7D@1P}KIX*F0 $H? p @}!X+.g# 0޺U@_R Vi#at=\.@h֊ÿs8oa)B'J)yZq>@Bk$k6h0 pOB7ȸWUEqd +"`]lV0q玀pU#C``(uqyDkPF*e_#"U uAC\`Dž/j_'.D8θaǍĉs䰤#]|4\E/J_ݠ|lCs'9aJB!uT2N8^jx,~8?hw4bKu`] g .IxD`'j0ĬB|_'/S]XpPGB4@IxIp `y<]a) K$p"n""?&Cra`6D-CMr;VדEA('- nK0cT|be~Ycz`zPefl$.^@oD,",\c6w8h{fk5A`'0p舦hW(fz*Wv }9U:h̅¥ :CpWsJhoޗH;oV,: F{׸hn >M'F@u,~UFVbsJrIN''JmwEF,\+z;(p*?ߟvw UA8&\WpQ_y 70]`X׀r˾8\jx?Z+N!_jUA1I,εUBO*f~`zPHµ蚙[`3 FLtw[}=@A(2?-!@/53#\  @V?ìV&=xP԰`uF4@Ntj\٩Zq =kx20*yW,b5^7?Z#+HpS'Y (BRfI4@W;t5<_=Ԟ ɉX-sr{!.E" p1D-g_$X;OB%x0'Ncb_},r1()%%?-"`o;g,/ p)v[&JU)DEoYHƦQ+O8gE,:̏980Bԫ!tFK8=+ B"[^nqOwIg젤Qz,(^.;cT2R #).GhN`ԟi`e-D@=&X XTI\X? pYm0mxIL^N(?R]u7WLvWlU{x6Bs+[amJh#`oZG?Zq~^q5D^}zø)e0س7HPwM*|c9(̃<+N"cEo7a1;H"s !}?Vuw=2n^aA0~EM<@o(E 5 d\鶻c 8C|FT}FHXU# An~Z `. LC|F\ `a$FF7@P0'|guǪꐺz(:Ϊ7 γO 8Xn9K1DY Pvǂ.VZ rLHIbZp TV4]}yn5(TZ!oF_{\Pc~~56-sQIg&‿pY.xm={P0/]q`z04{Y_.wB-_f8Hň`LĴ*fQTE|v(wC0g% r |04@un8Z y>ߟS!!@BHϞmz9lNLX`z8g9L_ Ypn#$HŸ  WRg^wL'GA0`3b&@lӵ.|?'&f:#Pќ~%`o!AO, :f֊WD]ZJ/c +u6 ^MO/qZ_$?%@/3,G@/PLWa|Wgҽ`'uSUہ<-Yꅟ8g#P^ QY.U_'G@ZY O SVp8E0@oS,D@%PT:wH" &U_S d?ɜJѳPnۙ%#L |E@5x$WǷJgX|Eo.G@5 3cK #w֩ÙUA"צe_0;7Xzp`Pv\Drw`_ Ao?hyxgklcR ߷Hw&׍6@s] _JE}?NOĶM 6\#aFs^ BKAom傿q=|0"u#`PLQԬR%[kvp<0z  ׊MDE#`}ho`[Al^~0"ᘾ;f#p_9ѹ B8{lx41Dz@᷏?I2)gJ'`+dsq,5ky?%(uZD@\wY,P)A^,_ΟRc.iɵF %9(#Z.a$e&]@.XYNd'0;t0kŭh"\+.hL"+Xu-T T\Z+.W70+ZqF Ӌ^C p<~@ԏ&V.w {ZqG,ҟh\\W_kI nJ^C'Ik]&+~9hGSs\k9 d \S k]R_XY+.17!3{k[꣙dy h׊'`,;ʵ_yY3$Zl8jm>莄%`J P!uƵH-"?A{yjo(׊a5Rb ";A! >`Ot[Zq׀ǃ1!Zq;pB9^"T_?8: mO Zq l|@Bnv\+ /ͨ'Ы\~-_~KLHL!@ =n-kYq1.p6賲 ǟgrM?| @cCZc>Ykũlګڣm넌狀!@hAV'zD)&z8*/5@Hȸ# r6hDNRT 8Zq=Uw[81c?@+wcQ.p].A$^`UրD0@BwM8s@!_ " 18Y+V. ~sZqo߫D@H?o97f/3Mr`X. Ksd?kD@ : .o Q|EP=dj1\+N۽KD@L&h/d\OtMmj#}0OOm 55$@Ae sp`\ xxEU?Dd˥( ɊizQo}p#~ %ି5h5L<F+!Bn# g_4& oa0p9j.-8j¬' >,_NTܠT$ q ub\M8KsP6P^zP݋#3![6@Ɵ0C7<WW\JI>*~ R?I9 (Y%q/gpdw[L0X/b @6?$spl)8)X%HJHKpq_oA] yŪj}w10Pc70u ^pXpxv3zmPD+;%sZ Jr޻Ǧ3#R7YGVTq%@o sGE_5foRm' k;`Q xRǦa P qk)O)b+WLsQqZq s~Gw_5TFV +Ni/0&I:NDq.&@?ո`k8T W07$ ~whVG;; 0Ǧw@)Xdb<8 @k8(-d@x^ȎJEn-XP\SMxI^EqθVMLN *T((6`&y ?g { ,x} H 6s#@\+npLSϳ35aۍ ଖ(}z=jpK'~l-ƎA 6sk=f*_sÈ(hp/ٔhK.˥;ZY D SʦB6~*T:sbx9*|e9)n(i7!Sl%>;FRY IJ>wոBhOc+dsuFE>녋JFR٦ П 0& `IBK ԔFXkX異.EH~SR/Z jG{.wP qW |h=,׺˞h߼'%Z<\# waj DO;>ir1?Jn :-0n p|aHvQx[`Aپ|z+f;/TEo @lV b\o÷xM|!GJ(7m<[oqrN|ZnO Xd窠1'lk8;(?PwL\nKwQuH$`uk{ ?2 Ɍ;=+/0ӓ忁T&W8IMxaDn(3l g14&YT&;'`|t5 zr`;t,/7րugFx| C}109 MPaiC N9L&`|~ JoZ#xk];Af;{ZmuLΜkx`NCR/!oh2$`Upkco Q=3}X~"^*I.}0߀ǥ}{ `:O= @@IENDB`V x. !PNG  IHDRD=#?!IDATxKb EQ7͵6c +0j9Ipb`,4PANO1(1;DDٳ=r!=C L=?BLZ,RZ1@TrFp% gQ;!EF*H6vw1Bp;ĝl@b24#lHfGT:):: e{]!O"DLD],"O`H}ޢ6,=|VǰzFĝ9zr<}BֳZ O4Y"=K =ۄTŕ`l8"u4#_]P{}{hVX#.V [0!jA:c 2q%2!>LI}@Fv߂IENDB`/Ұax< 0IDATxY0DQ7Krwc]azJ({^ IENDB`B3x. 0IDATxQ P7K4QDsI6arT񕧍o5O2p1a߳؈bd$4(A N9`bh RĔ3"@\d99'DqNIVl8œCiR Y=)hZXI6[ Aej/ƥH +=> !eΕ:3Ɉ#"b]`Fmȓ;6v x!}GV1 s!1+N6 廋Kίw2)s:~C>Y>V!20IBU ,{T#?vЛiBby^`@\1uWH]Iq ]"EʯbDD^ IqjG &r`Be "^F#ש'%/J-Cq}IENDB`Ȕx= 0IDATxI! P7?% ]ICeinh%5Pb[#~T(cX=ĈC|M-h!BـA2 bh "mbdO"' >'1C#_'YHbP/(] @D ɆJqTdu@q([BLA`ϭƄJ;hՂHΖK6"DIIDF>A!/ rszr>e&ދ!9":֗wir0eNbuN2tFNЏ.7¾o - Q{`Fs!վ8}l)?}XF5z$zhLжH'Ls:l-#(&E| GƗ: S 6@ t`IENDB`0.jdx8 0IDATx[ PKդ3m$$Juiä!R}BRyM? 1a!>ظRjB И*Ps1x\#4\PֈI$*+DᙕTj$! cI)1R"ƻ"l<{l`2^( @bdR1Zsހ7 jҢ+3h0)bA8$ B9ȷi7{Y^"CTOoUWO$GKb{2׵O2GdoC$J0Bvx*4A,#c jE_T $[{8$,xWHekD Dn&HDpe"2?!\#FlHE|F/?7 6v枛IENDB`*:xD 0IDATx n a7#yk&kC&my!c?c@_?l*wrAY(1#w YL?BL#$X6+kA%{g z/5RjDwVO#Ŏmpbh;(v;)-"ـQCdhGؐLDbyEOoݠe=ʐݢH-$xkbZX }9DDm ^m6+)Ob3qz3/y< RNml߬;4@pk zSAJhiL(gaĎXt30y/ßWx3b~Jƺ+dNJ*IENDB`V@]xtPNG  IHDR(7ϵPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IpIDATxk@nr XI7K a#vטU&9!B_}ߛmqFnva m./m0c{CirnL1/ a|Fa0EC@taxIJp's:0>#As^ yeYFڐRu,H蓒 Ƈ3n6 0cc?6 R$ **=H.XƇ/bԁXo+mfQ$2 I<v:FF(~Y n:plH3hdY!%y>hoSج ,0ҏq[ɬbda|ǾupPeIPD7 ޑ,NbLdlLj`Of>Wh%g% 0S8ºz?N?N/'LEAb23Oy{lQBga=bKԘC5AKD 8̓bzb&Z0cJ z a@eZ"2[uQJBGc;%66=z$*ѷ7;O<W@% %)4 $"y zw[|?WTC|J{9|W3^/Qz H8.<`F3b1 ]m$)% RW0f= 3M3\Ø70aF}ဉbyzcpiUFS u;Uk  yQxod$I5)~ocD` }0x޻g}!FåqIv'gw\HíŌm7.J ,"cH PvwzNSdU݇F~VZ= wFO!gN?R7y@ 6hU )XP8 3^k=|^AfSDBa}(EƑ4@ˌA,y.38:CpP[x7PQ3mUW0|ۥy' <)2kavӆz7gO d~ `nq4rE%0 _a; D+wJ-4kC?2›v}'g #`^2P™.r?!{3Ba֫@|M%@`E J"L _YF[@hK_dUv3Aez;#_=B12N„1 %I5wۊ k^1 90=uvZCíx̷&Ro:A;f REG[EƠ]_`蛄/1Sq0jckR\br瀘o^`2\0%TcgJ~Z=o}* M *FGOzrLޏ&F,qpG^+]` `V ݐAҿx6w74,]N\E#B?ܤMp{bkFԃNF͘tQGh>N+^FZbOh/&$Ť7a8daS W+cmgܷWWR9u\e?%aR8[hո H$biZu#lg=d`] ܹ֡r_R!9]3|u6aߗY6.l8~-G :ZŽr?r0cp6+ѓJB3c~(ayCޮ`S Ĩ,y1P}cܫPv "tVEACtgƠ,GBH1b(Gfe q5lb9(,n ~@ Ъ-T07Z N3Ͼr1ȏf~HJT׌%c/!(0К}i8\žUU' X^N$stsȶ_`^Mbu%$e ,v=0.3F\9_}nU^A5iVGCV7p;aGbgGf` 13cN F^2jU(_vOK!_3!:6A w$::A!Yr(6webE? M@xFPpsR۝ҿ!^SY'BYb:WZB^ɩ%;YUkOhcAm.ű a[ʋpo- ?Lƨ!x>0%֧II(KXܪ&I2O1圗!"I l\R \Yߠg2{tpVǤ׾F 0X#$a C> i@ k)Q)}a?4x9Yh`:w[n` KjARiJB[n $5&~p^b&\ \EY`ziЏnxDqcBhkMTW f%BLS&!e_5҅2џQP$4vȫ o(x :7@(}Ncdו 8L9yuE1LӐpM nQ(՜,HM]S$vjsZj?(ïcYBЊSC2 B@AC3`)c]O iIu(\MÓ2aD6 *q!-CT褄56m%F w}OV =f8P;Ru8MSOY|Z D[Փ;u0]~$?0x4 Rդg?_{]Ime$CLAÏK+zFzu`|a@l :'axAw>Iy gKfB 8`wa5 Lodl,]UpV%-Pi"ܣǐK_ZBD^FDicځw[BuX"toaHاðyKKeamK.gX)O|NXJ [ +H6blCj* ]nT$u9Ayutts0-m{z݃myq33Zk,C[Oe0t|+tJ(7I}O NWJnƺKظ;XZ 2GtД]_QBCTe ЩHc|R¹g{-;lF-䈎{%xq @)Xз2Qw50oXbOUKZSuY%Ẇ8 MBvм{D;%Ayu9DU%.KE}`옡/ ${ JT& ̟s .2]rAaz88`ʋ W}KX(t>ydtmXPӾqA㓩/H=^ZHXwOOߴ6J Ӆۜ'f#$ #9Z2tHPLjs>,a:ʚ 'GzF4}!j^ƮpR&Jx%r\Bd_ו٧ż&b sEgT#FhTFR^QGh1] % +JO 1?i`}V¤9`@⵩|z 7&IZK$?|U.a2b>dfDw}5+.L=e9$t΅bjYBx<\GECTm}Ӄyˏ P>gd zi?4||KGwbhu㥜שN':;ZVD3( iIUABu$t]lt5T|jW9Q|x ?$?``օe(;Gc{Ež_ 9io':W/a^z: YC կJiAm ϊ~Aa2sx)T|htBr| aC 5&ḓ0^UxR> _]bקN:$ ie>!&:)Z@E Ј& OdLAW9rp0ߴ5 ɿħrQz>D(Re9U},}҈u-^E4-a0_zdi/*OŦh=YxdO3RP+=|ar顓xῌǞ$$&*Lt0눗ry[!!VW}+IȮ'wq5>o )珮JXR[|)T麙B T[yv. P5#q ^Ha:_tދOaNr[C2| ZɰN{epy8/ڳ !k t`z mro:pT{)䴄)]C_sŨ:vOFaL']96c 1ptma|{+%VN¶sUsʃtho-YW^nHs/HSF0e F'^>W^B\#o|9K}c{"2FgY1=3npAՌ 63v%f.Fܗ$]@xk|byO.V Kt#}sYo{vZ9 =$6Wk:C⬋c3p[pw4S:y]\4awR9>U$+|tyн> .GL:cu!.Xf@#x{+k~Ϲw# .0WS:.HaT1fJiڭL;X{%X9Ha40~SB׆MV70ok?~Ռ3y=9T^ >v %?~b{ {$A ?5)/S0_8w34R$3fZHa|c]NP#7I8=y‡ae ms7򚺿Fn] w9[oa|1$4=cB b|lcyY0 C&/zku3. |Gnj_N0>a?7<6qugHD;ʓ|S$/$IlN$v ~XRy>|[,0~Ɨ<)ȇaa n ~L--dMpA>?;1 C >ULs":=.ktXOc` Q.!%|!1l2DǷË|0oLj3x/ ] n t]ːh`xCoc gY[P7zI)3 C+ ΰogl!0b/A=L95Bs5t|G)]6{ 睌=g_?N'l@aA+ agX:7L[0\1BP2S0%t 8: EH'[dH/0̟0E1)3 U2 #w22y(+ •I>yޕF4K]'$Xx|59#4~C ^ Ųkncb&|[K%,!ȘAO2^k9J2|9\Z ^d<sAna Roe| bʏ1Xcbp񧹛AQwGMSF d:#xl2# Z $g1s%Xw1{p)Jb]+&{Z%r@ \AJbԍ `˜I\BY?sF3FXAG;\USwMPGsM^fή̠Y+dRH8Gl"72-̃T5 A뢅11x+S0qв#KAƊ&툱IT>H{B90~HC{$LEX8fz44^Sfp5cCxV0{w;3\*#3HUbih*<Ƭ^AՋ ŮwE)#0찓nrPG`. AuGAq\1Q4S$a N.ԾQv HU,<)íkd(?W4 Dv#ďmb)F@ j͈@1QCHxы|9hޑj`DW{9F%bRq \4qǃ-|-!Biv0pMBpΔ|ws.GBrd a Q mt!Pk4JldNv N~2rH;F膌#1q]B`־9]s:9;&D$ܶkBewܰ|z}k rO;Bb.Kt[T:|+_E1ᇆL5KH(he䐐&Zj#t !OlaD 7LXz n4L/ΘPB0$ڹ3%@ȉU=8vF0Y룊&d#$2iv-Ĩ >j0Ut)/!QC.IG`v+ڀbE 0^YWqF WS*-լ1a.K@(ߝI}BcFq]N2K+1UtqUb6dRװ# IӎT ~3VΠnj(9$!M !X7BzKvs @ G5+UDwx@/$Rآợ&l [}K(JtJLj cB2ų <i L*bIQp^?`IRJbl;heXLB( ,03a`r2 yYRBq.|`lR$AB;mO2b6*JG0cC ½,unWW Z6dR'eZlez5K+RQX%$5eHN<2P 4懻#giWb \CN k O%^$qpY)oOď׌QJV0a .Tz>Ff4CQ,QxQِyFOʠ*(>M%O DD8a۱62h>JC!Hp i%sx#uv,v~qGp9stp5$ੲBh4]xc P; fUQ5ZBK͔!H3zC0.ZU8NHCfjAbͨRBu ҃&~|gmgayqZ\5 HT><1Am)v[)pM6IHR.a 6资!csub8ucdvƋz ,څdc(lJGÃQ”A}ak~'ێ I瑃a\7?Gc TmPkkE$: 5̄؏2gѧnlƩ,6K8,f{]6ejcT/!wl6dha[0X8"!3 >NIKm|iDBsʗ璄8LzFң4q;)AlYFdPGQcv d"'Z}(N0lZB5E9zd x3i 9& Gpj,tJB̀GvHCN3 y'  u7cj0,c ۨ%(cgpkG\QAiSAE mQnuMBJ(KZp (3/+РA vwC G 'y)GzEB Q Chb>O|، %9/+&3R ;MB>!*  &Ɏ JScdQBt޳O#a\6 :B%Q&er B=Q!W 5c3sƠ,aʉbP:Rc9KEC1H]j3ΆwU.X,!Xn[ EBPb!4yg.!IKCTir] "E 8)a87p6 iG/zCa2h(!`UhMAa( u(в0$!]B+7r4 ISnp =C;LB Oǖ,XMj8GȃOB\PkVjT'ypq]‘gЋgLBT0 Qѓ+Ӡ߉ . ]0Xz-j ~~}JBe m+#.8-!Յ$YS,L#3hE G,ǘpX~/]rvbAzk5Qka]še6-`c CwAŒ!m0D̠n3r0ـ nʶ&:%tuf}#3$4t{.!]W fM.;bn!HdgU9 ˊv՘H.H1J-]UrK)DKlq(b(#aşh9l=Co$!-XS_TF򈄾YJhy^‘ n'a/Sю BO pixI-;8tiv@ɱFj$$L0'!ڸDQ&zU¸eE XgTP.f"GL"awv6cx 큄َa^U0nvuYB~"UUc>zI•G--voJjF/b⢄5ڋl3z-EB|Ba W·"!9M`Fv7<JTبMB$Q ]P'昭8!U14ʕ  =)-(vhcD1ńe'$\)YKH! O]-$Bh00wPBGڵa|W8q0h 1&%aA 2" i-vDU-1KBޚF%a$< Q @F݀~QB'QS%I؛oeɺ<7I"a'RɾY'IXjie$$vCTOD Ǽz*)WVBuWPqNH91DHi) 0tP[Z|hX{,j(av $tAB՚hKˮǡf.Iw0+O Q fG%XxUB$j98OH($DQzr(AK^*a Au<\r Phvn0[Ϭn߃v},]'KeN=Ij~Y~Q1o/;1~qk'U%K óLc?| m},I߼WO,֗{K RJ3Sm0U^, m 0 pwGN} 뺾YUI(sx*!PdD(UFj D7?IyG)%Q#-&BAA罫!4WtJb$ox;^`t7Jȡg)²}/%{(ՓeZ$pP!&u0l!]m*ase}7JhB l0_yj]aԭ!o`Dl$a_l+$$,|xU4-,( ܸ_YIdlt džg%^ 婹뺾Y>Pm9ㅄ9z="zg{i~g8X/}4$q'I/2BK4}_08.> D_0GtBwT!-~Y!&{p~g8Xy)Eܛol'A<-QJ$Q\|u]-⡄yA롄 iڽ!\0~Clwh=$'7$$''phP=w1 9 Kxc2E 4AzUB}{ ߖcIh{ R^0>"aɋ3. Xys:0>#As.ymYCr\'%CA>!?0__S]| grflrg=(H0 N=H.XƇ/bO[5"V̞<)HdPA(˷ŕ<v:FF(~YMN8U6[,4K`ȋ5d(6+K,=cܖyeo`da|0qp G,K DʓF+`[dl/ĞHv}x0 H- df,zf^rF Xa)a]=b:GǺB}ȣѿQ.UkYM|lH/Ɵ0x/::%ލSM?S Nw4ˈut0ؾci0zȗ711.3h+|%b%4!6nEAb23 9F[}:|ʙ{aR1{I<[Ю>_cdA08?#<),f2a ̘RQ70 ,D& - #G) E[ɾ?ذ:LBx b,@ }U ]°- NPO€ ^ü<w1:l^K(* .!1خ X} CW|ɪm A C Մ$YtC缰LD{~##f80 iX88a &V;pcEq8TC3!Ęd/ ~{Q ;F:) {S9$=_0ڕXxcÈ:*|8rW:p!qY? >-vÀɑiz;Hk;%knؠU-bA}|*F w 5V?K^ r`#y8i]/F̀뤧L9 -fd!(88np._a% <_c E(a4}4Xc 39chdTtp;qh_"!pdƻ}1#/OwEAJ싲E2%TcgJ~Z >S} a`֦kW#X#s'Y9&G#|8#wNΕî r0ut{q0p{nyz{͠) 6 kg*n挄B?ܤ1cBQ ~!kFԃNFX50䫴I#_X v ^FZbOh/&$Ť7a8Q`h\k;ZK] ?0pp"ݮ3JNIBw}{6=/qK oU7b  _0zHEN3v͉arDJauq`KLW A?AXgQKQx]G#|@rnv~1zrPI2`fle54,o b 􂱟*IBP}`Q^˝()oῬ60Ug&ފ]mt{@8=3,# b. !g >YY•^ˋ銁~$GatSg^VnZVAiQs}&b \ݑKFq2 Cٷx<)[ 2`yQb:Ae^/9G7l{ӿ9CKI›H X,_>wя>AZʤ*[?Ț40v~Lg+HL°#13N30_T1B'k /g% >&,2B.:ھA!}ݥk8]$ۑ3HvIK y~p]QeJQQȘ .&VK( ڕ5qNTH b/Jhy@,&43xC .a=1͕r(!V QRrJB,1&B1tT2X]S$$$ߌmsq!=st[֠bZªvE>zKS7 r|ȪcOl|ɨP6u?)tRBq_># Hʮ"!Π=ٟbx Ɠz@h_='ȴu<2%D9m%g TPw)Ȅ:7#I}Q|.7 ^pFb!'mO+OZtcDiy>H.}{x.! <߽@bh?хFuaSm N XVKIALJLIb:ms wnC|#c&ޑ tml\ԶvhwnӴS+A/Hh4q lbSoЊe^ҦKzvc@V[ qW*IAc 0A7Kl9m$8L'A *r% +Z# ' \+3$uF Qv0 g$Wn|Ƞrv? Yʒ\N$䕜2E¿_H  r\8IcA¶? Z[+ %_GSkųmn%A$:':xܪ8 mS+BP$e2B &dwlܡF5>C!<'_U. om XrIO8k @%5kNld  5IH 1H(JSQ{ cn%K^UrJFDZhci$uvIU;?WJ™l\R #>o~σ 5un&UKGk$lhW <햸(a-=a6$BA 0Rna`yߨVi4 >Mތ)洄Rw xQWB¿EB~lM~Fx%)DU1(Drᶙ+>V(vv<03,VK:}HH-2џQ0HhCPV<bg-Pܽnj`ްĞTk{ tnj׌Xqqf^$tl52юj mpm1煊 CTeXe C V3t@r؏!gKEjB9 iY JC>FzՇ # ƫgwnݾv;hc|2 ’ (Hk$;WQm,Ih|8O*%Lns8K  qypZ2tHPLjs>,a:ʚ 'GzF4}!j^fd !:H}p / ʘLS(>M.̗M2犞p ځFe$UYy;ݛ|E Êғ}B{}IMveO!P  ; QL.=&@I5R-媪|KGwbhu㥜שN':;ZVgz|ϐ$NG #8HwIB=rKu{ոSk%? Q?2h%A½!(ľt=ymoU%!V`;g  S{~pk0BA SI6 ֢Xv:>5J5rr7+TdZB;%SR .;_R:W/a^{`el|jz"5lxiBpfVh%0t9~^ !8還sr XAmGS9z0~vٕ& 8 JNЗ]U!訅OU r_h0rе;wFF΃fN*|-d0u]<4`].aC}W1 :ԇEN§%)xqt4Q~~bN> MXMsl.>&6IWareυv0>#VU-#y%?W)  Í }GW%쟇◪&31]7T;_W~}`˹R8nA\ra#,9X0䁰i}q(O˹Zڭ#sQ'FA.Zۗ2 3 Э rmms^Tc;tRکtϕ;<1TFr@:X˚$6SpZ_+Ix8+Z5 61H0V/7{e[@^9xYQp(,!LNXyRdIWf^ƒQF viE;S$WzUmb ᬂ  vKLB_aA;Za`1>WGv5h9tf>l僃qL\#\M'F 0npoX0Gr!g˾NE/d`FufFاC ӱƜ?.!`BOmґ\ӼKAYEKxĸMgla(ÝfGW [qFG%K1mbu"m- yKBr\¦IwI8Z"8`d;r_-ay:w~6IVF)!U1{I# a b{3V/S7?V|Mne KsM;^|$0g޻$zm$ne{CVޑHaT3;3p@ԇGLB +-PV~$0nj'Ɓstiy}ƿ=窪o0 a . _8YƇ_a>e$ r Ƈa/۶Kofe: \Ao~0$Jc+,ES˂|ƇQd:L7y;~Fхv|>kթ Ƈa1 2@(ݶew X0%Ŀ|}M݈ #fr:ʇa| : "=c(O a|O':_l1Vo,)<P>-^lY_BLHwouI00tFHx D߿f-cf^rFzd$a~Xx0x9+t4'|M04h 2P Nt|;(ȇk aF}?cG@  U2OF B;@׵ 0>7`!>Vyk u2YyA> `?\ v1 (ykc]#>WCW.ar1 e|9)H)X e-t;0y5sYq# %3E 3PB B ZtgHğ)_xÙ+ ;qN?O^gXtKj:+5]楺Âe"a*{^;ʀ<IoJ$ er"  2x.=Ĕ qc Os7&(P"aq5č$tFy>0n=`aQ9SAna l܄f૏pq&FpS "%[;O%qZd >p[b\X#9Gݏ= 3?oe8rD›\1&1sĢ?oa}A|('% e F'x%AbIb JbR*RW$,\M ~J)2ZC})# їˁ⹂`ĨHT1 O1d #~挄g䃎 w*_ ,V P̐]ARW >R9pc"ae G au%ė8M8sѓco1}!r`Ho phhHkƆDt1(jaw0f"b=5T vGgl!4³P;(w ,he ьUeyYI.4,P]RG` a' 1Hmw4] ! T YnchΧH\}& Q'XxRB[03fQBU iN|A?FW#R"!՚bI(ƏL" \ű?rRѼ#!^7rJV &>9釫 !Dui=r &[ZB |;4Q%` #)R0g;\ċ(1 Bplh%0(heDv0& E gGc`}98r2$trvxM 3Hm$(1na 8 v0* ]Q9#$2,"tV+b  k j(ڏQ!!MFBˆnȽ㻙 l1$!hz%!_1 !?~%a:I$sg.JE{pz1% )aP2G LFHd^yhALt5E S*ʔ֐(!ɤ#_im@d1ꢄceZ| FF,|8vX) j֘B0%tI ~$>P1.HT%H* G*bL12kX@|HQ~iGc?+ATjgPi` cXR }BH,X! C湄I w;HȥQ%: y5h1!HeYR4@ wC&jϤ(8F0$)\%1q64 ZF, q^^k [șV`9^p⼏,|)8H >Vr06) !YͶ' [1 %CpM )p/K1Ft𰛪¡ IhYA[9avƫT~ a;v 391F(|Mt-OE kp"`x%!5i۰ HTEAG™ TOyňeo{a\'ʏ}:iȇXI-?!$A=8,UQ |J(V1$pcmd|LB%lJ}-p m-$a X- N =`s U,k?I(GSe2Иi Dl@%vp?j$)CBő2g`]8xp(^7 68 (uQHsM& ;ⴸj) y%YC̣'\i _kk~x(tsىE""q+$-RŽr.FUHhb5Ƨ$b֖N7JhC?H(^B mBLwѓ}-O!%k1eĝlʏ݈)FiFhT1h)fӨtAQ թ&qPKF pl-˂M>&3QVp&!' 0tۤ̏."!Z$atIU/$4-L6 zNo _j# QnHQ1rGg &-8n EhiF&!9H-D G BwE։5^KV/[X+jZU) F Sm`k~'ێ I瑃a\7?Gc TmPkkE$: 5̄؏2gѧnlq9N,Bx`M%K[Mj6>l4Z' NH <@8%!/5C )_K0]HJ` c|ħƦ B g}B!FQjF%\haXњi8pfI j =1ͤI[$|HP(,j©QB) 3F+\BI­%2u Q-e,4!<|s <n?j}2?4Z#p*9y( 1*pCv IhS 7>T7:xIB+N!e?EYxEBt`>8!wćjƑ^CT(Ȑ_2'06ch=0Fi yˊ 0T,>o0|ϪbJBa,I2EAB&02P䌂iҝLc(a/>qڐI#!^BeR )p-4}5,Ps8F21>%L9QS+@`yUK(n|B;D񒄴FQH݅9E i(ΩPNKCT8 nͮj 8)a87p6 iG/zCa2H(ꆀ]WVB+Y,ԡZBZ„O1DKhfX F wp/!g*y:0~XG$jW9B<|0~҆:]+(zT>%<^g$UQFEBhm* M%g>v iwDFBZQB1j}7ħzsb2 5=$Bcdxnʴ%tQ`RЈ d%KrƕVFw8-a?dM0) ̠?%y7Pc‰b'XtəY9HhGnUwR kQtx K >2ZMz(+ oʶ ]yY $JZL:H\ۮ+oP@&17IHw@ݐay$JƄeEjL$t$.i TB`2](/g,I~m\;9W$,A8;@ShO$kʈbR7V SY:/K8$e qAB)snXiBjp8Y]0у0}BF%q;]0n??PHUb&o/"aw6q O=1zv C F$'g}OO2x_o~q G QJjF/b⢄$%gM% ozǫPq *~pw V ]qIK.JnSW& #c19 ar%utOJG)k'D;#e VPK_RP !ZHZtZ{%ĉAK wVJ(ف K4Qfw&R6 z]q]wIN F BGkjCda&2},]`]0Z(9 )B3I dxvܕ{7Vǐ}_I9WW%T뺾YUI(sx*!PlI$aph8XL5]d!JȱHyG)%wIAA罏,aG)ȾAKT\KxчQ\(!BvѿQv0 ۰:WOɟj>qCcy"b˻gOU.Ќ@"aC?+;$ǿzK:¨[C$T?V m>n*!K> R++ U"!7#>R~Y+!s(}}r <#dzzA~%Y!BZ{&%H4$qֆNœqUZ$$AP& wǡ;kn@ a  +⹺<135jA:CVy [IO 뢄%NT/%U<0/H;v=#݋ ?7qFCGߓEPHcJOx] 㻩BCno2ذL7 hoPA%^÷8,qǸ' G lSn Ӗ&ƎvxwI%'I_FJzߖ0;/0z꯽. ߗPA_(q s-|w}y & g{>F \t9PIENDB`xi !PNG  IHDR# (!&IDATx `nV G#d tgA4N`⻖Π'/)%*U@k.AL!١,WY1_w( e wcF5:6m^pS[쐽gݴ ݇*_g盖-;'.o1vi3Jvi[&M!o46i (;wOږ4A"dgs`lҶd Ӈ&f+T^vNI>[/1)4uJE?{T;VIENDB`?#FxPNG  IHDRh,ٝPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IIDATx[aߜ`GeP|@A\"TgWq12o-i?(i-66&tkBtm?q~O8'^~:swU,V $/ rME_m3QN_8=êa@!y86(+4wrJ z8B˃g.ᘊBplWh 8BᰌAM@ppy)(rCc8,hDV? ^v #H~\8236|PY1Q4hv ¡|9~n8 A^A8P v*9 56lRwg|( w%8A>ƿoЏ GO!I KCM CM09t=aF Gv9Ѐ9V4a9aEc8Σ\CBL~C8 8_-h!1Qؠq]4!Vt<4`U#vEc8Σ8_ ᰌ^|ECPy8V4<'4 pXF-hIK緆#qᐧnmp($a\g@sp9KAX9`8Th4 ~M8Y?sq psp(=1|9 :|̡ 0 M 1aB> qm}~j8ak{˃[ 6נsphA0pv59tQ:s7wi`8Г> ѓ> iAsp=a h:|˂vCO4`Մ> GN;}}t@jAPh0Vgp\-(C!?sK8qٮ mﰄ!|Aw5C3}@'SFh qٮ }8Bc8A/O8 W8?.hа\e8١KC9LARÑpXֳ#Nm/4# .h1D o?Lp5h M4h9/Alcd Mbc_l&1/-^;$@c8\m h 80a64ڠj?L=^!|A7M;XG;4~ ᆦZs z3fz?oE7wip(!h8m&: (s#1~Np"6Qg r6s]"a R4S tᰬp/1H )p\Bc8C@Ñ9ۆ#_>oq pXc±COY`8CB70O0aX8v ?1$4 m]pH5}p81±B ]'c8C}c{?LtȂ~o8,I?ɀC4#k8eXW4.1)Г~w8|q@}0a@g U8aBDUhR=Ac8qM0áAOpлD 31|In_sz8$t@w]ztfۇz}!;tA8ùG3#"wp(΁_ytg@eAc82Ä2o9+Op tڭuh =H΀p$УÑhzНpA3 ӡ-á2Qz@_ N"*عS ;axp8 Zy;~JEaNkl}秐ŶY5 Wp>LnªV?ieBS;خ/v@%V?iu&4Kܠ1lg M8J?%Vne@S;G1F@Wi5~Jf[/U6y}MZ'jogMz5,\Wg?(O5 fVnASM??3;g[Fܡ; Z7o@2|YiĀ4;lKq J~흕F~pb>Û؈NM[zN^d@O3)Źplium6Q,w%ECpX7z]>*avh>QZ]ׇ ^'ʜ_c f?8<nv}r&JSms-ᐸtnG?skLn@o_yyo'i5 6c+$UCLOstIc6֡?(cgv,΁o{k=9u{±\9#tg..o8t?f~N]OxZ0J` p]pO!I?\ARq5ůb$! &  _` `iGG79"^la+352 "@,z+<U8` .> B tzJ <*bs!^|<.Mtcx_$V y68ev. 0"*wW``+#AoW``#+]s .F.f3_̿,BY*r*(] _!]ͼg pU] + .V ``\ `U.[e z%v6R.74?)@H{ ww(s2-u4ݲW/1>ѓ߇## bBZRӋ{O+0`dLY;\zSx#g `1v>_1c 4x RS`fpi%hKNJuih6E016|mll4+͗q! @7!jS ,7"}G̻Ϛ3[DO!hJ? VE<,vδrt0Hf:F _W#/5ǻT`b!  ]CSH\',>GKs߆>.[7 HLp> p`td'L>F|un,۷ P^|lRoا@,d{)ysvw d(SmR<}'o~EqD`n d(T{|f6ɲwퟌ7*a p@]am _򯖗.gvP_ (Joz7@Ɣ 0wxM ȎP2|y2L "GL2 4 @"{E&rT[w  pCJ-NQMt.:լ pQW[$WvW4%rbʍ{#Uਧ`ڭOL ``lS[\g.1W.]vOOE `#m{ 4|duOrwjjKw`#mu@`ZIv. 0{g 0pI p"㶻W 0`StԒ\unP=~\>>ܫ5%fmg1b |\m pR\7 %7"}*?.Ht{G`cJTͺ8 `H}lhk`cJT|PM+tC샍 LK p-(zv>+@o C``G]t\1vG=B0.@|N$f4mslXWPWJr2\t/,lRSvS/0G2w 0r}gB uq~kӰZ-@Zv5dS XGVD`EP7x<l?P7Lݓ( p9p[U[v=gdp0ꞌ |LDp `#f| 3yS6Fad.{n??>kW4NK#x 8'_hiծ]ѧR,;ғ: 7Fm8:9{$7{sv@I1 J??23/ZA 0:JW E / W c8 /h#g׫}@jB@^ u%]?z g;@)@m1/ @_@g{CLͬˤ/NpL( :ayԝyS)7 /V`M/5,Alp%>F`BuZVռ82\ո  047@G`jZ6{8 %Pwf`!@YIS 4 -0Za?@`9L`!@B1_-z1y]Ɵ @ 5,  Юw@hA "e9 ({I Mq :UN0$}:a?AzP|+?^b&Ÿ@7E9a @%q~>j`2m 05U0|`eWƟu8(^]`@)`Pv3 |Agu=A//W A2_C e><^i,ؔ`meMӼ1װMaiQ)Cֹ=G 0`y?Qu{/i|9i|kZY) ?_[w?g|_%5.VY`?k}2;Y"o? Wpw`_: ]1Et_`TG; ``;},KYʕR/nT_`TG+w.8ufE\ ]17_E,6;l:Z3v 0=/"|VX3YuFu_:u 0wN(XѺbn.v<}c < 0!U$| ]Q'cp`b4NNZ85<z = gҒ@.` KXp $%m .!qv 8X, YL/@9U{ ^A!@G$ t/S*|qpnob ~@0?5y څ)_us=.s [ҽll2o/w{ 0~8<.?@-B ʕPƻ,U `ؕ@Z\y^#X?(;!/@{?h"4\5'<:s> L[.*(Pkpv̚w6ry\@A'|5@˕2j x2F YmU*e-W]%O*mkP35^9Xb=t@=U\}vz1k@;8b`\d"mHp[N39ߥ`܂4 񢄿&UA l5#_HBp6cոUpW>N Τm\4LŋUB2͞/2Y@E#@ƫ)1(/8; oP+)`m@;MWdyԒ 88JCec@t@OAdXS<k@0 _29 U`fA QZ P&>/ѵD1  X*`V8@l/`@7 jhw3sq: ? @#*x w+OGbףCl7!({Hf>@nBe:\xP6+?;@?j@;\U)-p} -mS,έp wa=Њԡ2r`$F'\4]@U1?vؑ:X&gR]W@d:)yZ-ꢨcT_w %\&y p}(N7"Ί]~bzdY!O™\2Z_Yt# T]`hѶ k@ `=v;9&DQH3ZbxHvys5#/կ \f>@!'CooMeg5:%H&UăjT[YtxP@o"??\tׇ(g#Y:&"Y@8wη;% `}x%0LlO6+1+}3G!93a*GavK.p\MWWi}5.LGkgwsIpmp*#Oh]At.8Bl.(~^"iyăFxIxVGvFt&ljlGj`g_HL 0'AA`9f]q@?@Mb pt43\K8#x ~ ;HQKUZp;hg%;HЌC~n@GO>|.N  $Pfrn p.@1 kЉ/@4 ~K5TBl / @y/1_ 0'ia_&PCjЭ:|#v:r̎ԣnỶxO|9=HvXER~^&&8QsEVLg'B:)Y_@@0 @68Z[JP-H" pף<[d=EpaEa0 p&V G tdXKXc5"~i9JD*q4h]p0 ,te7+Oa3ݜ! Xp*} 1Fߎ#x{x(Tujcia ej̷Zn `O("u, @~]xk6Gȟ0Stes /I8؏B5 V[ܜ#3pM=q[uNA^C%pmx[P;0X+` Y(LMswVC?gslhF0׎H#Gwy_ *F3{'8һ.(~6(։+=Ѝ ʨ^ C Fg,tN]1'zXKyL@ p2 0 ٘qixɬc4ا) *}4Fw3=7}$T`+]EmI?  T[&{x4#x?-`N! Xbֻvp^P+#8FrgZը0k@: A#U<&/ `,Yy @vϋ4%VЊI{k-tcKp G1gX^M Ⱥɛ{> ~QV7[MMy"(rջl? iJ;`2??/2a p`L%,Ӥݕ4 A_x0&gpt8@-MG2-p\]Rj }*?Ojjb1(0!0[䟅~=K*_NXeeT Mi1%A/!h]k(u:#t:< `* g`pj;1_$L`ϓ5Ja :͂AYہ׈`%V6s`U_))z-KzAV`BjbgD`k4$0kCzA0bd?:h "c?4%`5%@ %p=E(WK- 0H3-.= lˆ :>@?)Zop`=642U +Xx0T\,I,z4P%lHP@ ƿRfzm&6?vǡw 0R/|M9S*A jA6+ӗ`S}ZlW``qqd&h@`Ȥ؞_; sH g^:92ZmW1 _ Q8;3* l0aǞό&S@VԱν6Lx339'eǦa#&A2/G0 +ę :M*fw=j\{;7@k4a%:A+t%HSyp)cc}Ӑ,`uXS*?d | b dma#oQ6( "hm.r=w{@rZͫě\> ?w )w Hq1<op 8] b ;NߌoWys1/Fzs_\A7s86 MNp*F@\V!+]h0d\qD`[:a1!ߎ,RdhXa1G7[@8xrp"&a+d=r7!lV6>G4-G4Q+or{G^ Q+." 03#^y9:IWC|ѻXAAwK~9,r}|||=GJ@LTۧK<Mo uKo`Sk!T5/l-:LӰ\H)>؃!|OrX)](y8` xED@9r<8`8`YU_Wvmz_)`#Pm@t.m9 k` Kj]IK& m(^$I2~'XR5hԲ{5.,t߄M~.] *]4* 0uHJ'vq/xi@MLP¯ਧ 0: Qv 7ۑ|8L``TG/.H|#ZU.F\qz/@`0qjl:zA{BJWjU8L q{04+` |H 0K.(~~c8w0Sap%VϥY~gLThQBU 0_%vtƿKDC?|``?L 0 |)]**/3_-*O\)'[ 0_(9${`{x@+a,f]4. tRW p:gn vqtlJOw4]?z@tNpUIK83h(]qRNp< ufi 2ϠfOwBW pӯ`ҬP-S%* P s -``DGx8)nAu".~~*e=`H&Lvc9.u;w@{&X 0([- 0~K6/u$.!}˵>b&.,ؿڠOU,az>>y9'** 0 o(9GH6 <_&9- i;@ @pn/  _aHe&Aڎ3|T]Z2X7 ZEp(;W@0p1ϸ'||sZs~@ w)O\)?&! @ow&ޚ_}?e _x+V3<1Td:a3fN9[HR (@\ U8%@u(y!%HT@?RLRR7@$p ܭ׳!0T$qO/!I";89`/Q TCEJsͼn~+pVBaԍY0z2oqA/"p{D4@ BK ,|\_(A%x7Wsd8n_``@R87v.b 5 l.`Hr 00.6!"ˤY p@d`g"ƫӟ`8 p A>l][&^IENDB`oA xfNPNG  IHDRraPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IclIDATxM8(`H[Fפ^B ߠo z 9٭ %5, 3\S@sOR,rD0E8lY|ϦW8&_ԃb 0|*xT}\åސ{d7rOߵP1*:b8Ks~?'mw/^ό ]zuhwG^fd$˥_H>8\=ݮJ erg"=qEs96_Soz?_ J%ҟ8l, - !>PE-g|^o5@ӌ'&S߇J1p'>BH@M#\'A3'1_ȋ韘9b EL[=\cTPƿiحHc7u?D蝉Af;LnCW}<0nٿRHiT䏴P(C-O t xbLkgg£Qzm1}%Y@N KiC 'G~:N[Ps$$Hֈe Xkf?=x>O 饲6]兄PPI1f T#],?)Q3.'O!􊔾dzٮJ,x>4ae-gnO7n혺`9ĺ6_ir)ߘ,{e݃/dTdwO?8, ڄ2u#_Gc%B<&.,5y"%ZlL^wUSF ^Khگ7sl\\74kOdG.Y:ˠ5@!Ox -Jȏ0Tf/ +QSt¹\U3 &`5I@ жD@08bqTv)K@`RT-"=`ϊ'`%P-(O|De~3 {,%9  9 ?p$;27XA` P?u2%$L3CP2 @NA`_vO.MDHP'&w( fQA` U$v/Gp;PT?<~{W ݜ=m[N?{"0W|~#sLˣX &,'](/ L1@Ƭ<[ qakOb%o  o9Oa41w0Ǝ/)@ffC~N 6 ʯ"enK]WN  G @y1(h>5 ] xbq  )ڷa`y&l@2 ;~yP0;&{W Z<5` {@ p W ˥ )xmsO!_$ h$F/!@xd )$xo"h(ELdh13g DUg  'FD_#cXy`*@ [ л_o묚 o/J ļJY[pTdFGv3s|Eo8Np"fߤ@aR}+n>2jT.hrP `))3f0dS9tmV'ɾwf!^PUcijD.wAضZ;1,0j;|Sfg bxW"sX>Y"xQuӐ(_^^0{NYlUls'rُmO`h:n>/D4)( ]aL@ 'K3zŮ"Ǟ< 85oNsf6Ƙ%5.gNukc}]. 151 N*av s vU ڥ9VobM}}Džbx}}S1 Ě2@qik2@duZRʃvK_Ry s0viA /H@3 õeWkaQ.l:Yա56:XHTg&PL]'ް08_⋈3M`Mx3?YKy!@1?m 3NGGA\8`A 0{@83uj x|jM`B\B'@Xt 0ȟ OtXYZ ?/'4gԀkZC}ᄴD_DH+*dPU;Nron*m2e~2!K XChJ3Zu;Y؆'PIc:DIઇavt˛Ԇ@uqq&`(`q" ~^( 0yBPCk `K0 å{uA'" 7eLsXWh&ʼn)8j |@e\`S d`܄)NCt: news 8Rݍg=4_ &Mufm5^WX@@KP}y:h/D` >g)=!(/EazQJJQYF|r0qZy^C3xM#A!Axm#c,jb7ba*!NPimfgaLJol EGq C Nҕ)]%./$bJ8 ?gyh@nTyq i p{(LGdS> "sx9 Rp+[E=8 d G +2 Hqleu5pzLr=6v @ ]'6qjDEmP é:8>M{ԯPdfu7|̸^4%3qeoh; P=1(0>z\u^V'De ௦?-9n }.B@ܱȘ2ۄU+` j@lI!y aۃ%`ߣi kf*!D bo@xgZ3{Kѫ'@zVVG&0`pt|@C< чN?}Bnb: C@'POz}u3)̆>p~T#` ywG ث x @!(o(TOCeLԅ[v[hx43.jLBLa^Hvť:} 0k @I7)y&'*\XQg,)M  {4a"/ȺS{Thb~`s@UȻ,1M:=1tj3/-@n[Xi 37W"]TچA u/aKUSҺRH-Z`+/$P$S;'`^nCJNs@T/ /5Eg)b%62sh(aQF N tl;M$- a[L{\bur]j7U V0]*?7%QNkDW` ]0;PQC0$`qbu`y4TJ30)ɿC֣w)T(/̍ HP/U%Ol׼=Nl)I'y:џ-F0j!:ݝRkoejhkEi34:z-ym0 )ܒRO2Lj9!2* S@fp0o;@(h 6Ǎaϟp `2=6,w>]3K22h*U=!-QG0yF @5ab c{}[Mwe}Ԁ _/ɳh*ne?`U_A,^1 qFig]m $ {87^+L- N'p|~ qP/vf^ra S#C luv_'`&x@/#F^M`Kȡٚu>@ h"ZٕM^pkzmk_M ^HB,K,^,DD@| *6ÕM֝b,L(H,@aې[0Qu3>ZBM 13?0pƸxc8p +.| P@nñ'$^Qhc0X; Wa@̓Tay/D}uw|`I' 0ndд2u 8Xx[2?C#I5e՛JP?J/ F0ƼQ!ȫlL'#a1jƙ_Od&!2ZIJSϿL"Jl86!m$2ԂHz ~JBq[= wf-r# QvL%`H%`ޛy@ \Oo ]8S7& l3[5 2Nz,F;ĻM5 4@%UdjwA5J[@VR0~ggj>dfJ< a* V.؆kl 8Qx[@_]UP \7[5Q$mbp-4Q 8( Evd eX!N/ \8f3Ղ(S}#'>l0\8L͏EзMw_tjfyd`7 A6Sd@q2y #0 WXR&qkltW.fgy=CfJb疻>v'`t: =0OeqPwAW 1k?T+m)aM`\`3S qq}$`.,(e^>N0g絴/K|Ϫ,5n-|yiAt?,@W|n  LbMSU-VgHluICW VY?շt$i^,P3E7<AlFQ PgH`!HXH`2*M)A CӮ$pAaAʞ^WT6x0Wb) Hs:%_ A 7_/鮶`]O? r@&Fzೣ_BCKisHR0<Փ]mQExi eHO۳ݡUHE _Ph%8V15^߾'~cd 9U"^b{L,#BԴFPsXWp/ǗjkjS$ԇ%+UY6]0YG5)W"2(P֫TO-6Kj? 5mAk t4[Hhr 25@ -:('@ T_$ sx_{c F2qH28 F{R@jRyb5H.-LoL[?.i : Ӄau69ys Mdns^ _0\Ltۅ(a4^ `!@rLh |"o~F~_)]fZ߾r$h2+BǎL6M\>yvϻ8Yb +⤊` "I}_Y5Y' P+l2v;_#2{|V WD`[إqn\+8L"v7߿ߌi9|AX&7/%"`4-(|$@/Tْ%jC8].1Sp7 ߿o?>L`Sxaur~%嗈ѴL `ޟ(R/H~ B TPG,r\i؏siB=Os10 bUݱF1uJjLA lTIFi/$4T`c<Nˤep3@&1Z4mznq/"d矧>`y^{0";-o7t R 0:G;Bkbp-JĖCJ_c-xZQ`[z׉RN|L(h|qHA=Ɩߒr@I:?/{.﨧[Ë* 69nXp㵩Zim'0_`VJngi``jVUgF~5wjp.%jw(t"@q@!bfv%?#﯐n90 Je3KRO?=wK(">{$F*nO=LC{!m%8|.c߿/@zx/Sx;vXo] s%e\[z@U[;hg  hrxx85>|}]<6oG uht`N+Y}?xf47bZf]ݠ6~t`I+5nu}_Smo߻s Y0iΎ/e/R fw4y2&I菹3L-س;-oo[̼v;~Lt1H,Kybi*=~Gڌf G  e`;&\eɞ5Qn7-spݸlhvc5ߛތf=["ӛݸv`6]{'1&W=Cd] @s Пi? FsoYmF"7-jbՋW^ 'ZJo `7 P-ṰF{[_#Gv;M`c6=Vx0ʓ&F5|MߧTD) F x`[0)M &`ܨ8YhWpQ^_-ߥ` 'Rώz~8l p(j3@/ \\#j=@6^yE@R0@Wx; i*.x"ۗ&/VXNwׂWI)se" F(mM>pJ88߼uN p,5-sM(@'d nƅ,@C"F5Jq<";Q,@/8}~X~aLvp%zM4dG@oZ/p6II09d M`Q80)fn%wƪ4 ?t#7-W Q^j>8&I^LJ\XQ] vZҍjb-YfZ~OĆӳ制nB)  qݍ]޵Xyvk*SKQ+D@L *9Q cw {kx;oT3@w< p8qC:Sz݇9j~ܵa_2Հa7cbOg#[~av<6anZ>;enZff B%sZfV>];SOS餟-~0V p3 $p![}AG? ,|?`b5"Uެ>g$W-~avJY#FwX[ \LIX+#UV?csw 0օE># p ܿW{G cugdUP|<c׌?bJ?" n0Vo/e=~_0":'xH5mƺ`O ,ޝ {`H |HK:J~Fw`FO,-9Wo|Pă\0ֹWKvDԗp nPc愦ըUC{V]E xU`(НX \]Z RM9H۸FP eWe6 ACau/ *y[cG@:y<8;,X랟j8/P6sm2$2*eNk/뇱V>. BfZ9B s/O~.Wc]*ռ$F|rA?=-S~7=-/mU`ʉ7G(Z $Nx ab2&j& ~CE(朞N8;Ýq\/ZVi~>`SdƛNCl44H7K_szx#\55[Y hͱ"S83-n>W6Q @/Vs?A TU & c͖p7 S.Sb2aH2/0Dz]Xs%^(`K # |Pie./|fBqRWpk6E 0JǍxf/t!ܴro)@@kM۱Baٲ20JoX]x[n c͖<N' 0N#x9mK,1'H+ |EXe[In-f7;;.9~o@O}ܩCt9]8|xB0E;qn&{ =~@v&8 ֟H'F@Φqm 0w m*0N]?* bbs# G,XFot@(|#`xY )-1@o8[TU~ v%0F xWX \#\Ԋap%)M T,~!{k@~ %XlU@8cN0 ]/DOEKř``OmW)G90@r 2u3LؐEUߛh NMcz+J`;; FDW*S}aO&p ~o!auLܶ&ljT)ԂKGVHǎ< LL-G('Qu\! 8/{@ WH]n4&Gcn qXu[ 0pP [q]C3ugfGc |nt?Sk,@,;C&%xfNB|Au U[ VY]gުޝ)/+Qk`q#`P?M$G,Hߟ̄w0 @ʟ%8x+q#J' P  0;X5:9&h w[`Q# ;M`Opa )= nv_GvY `Q#`o] L];ϡfa%\cPa'lW%xA#`@*)Bal ./_b[`>JxЌ jL%T˸7zw{i [6bR0*f )@Y3 ,T%$@\:i /+ c9jW?@ #`\Ά ;*zunneu:D)3΅;7RrFKBׯ@mIY S#Xp*=;\(h6+k it/7{u; i;@ cW`pJr^ĦWK-eCicM(!0GJ5vPo7OĦWKLd=9-IUpc "`f<fMCL| K6>?eAdv;|x&zPȳ@J3 :^V.~. f+RU5|~JM/PSpS6+4+<,r)Y/ PٻXXU%٠J?P.ߴ!0tbss* ;OxXdkp@jEu!rA =6\Rwl4ArAٳJk)^ş/8s P9zQub( Zp1kmH2wt"~`LT|/4}|K fmjmp&' |KgM%@61J`t_ Sݏ? m08VׂՀT Io>"@ȸx7YXSog<]0 #v @Qy X8?0@!˝ yqZg 4?{ XcX -@6k~f`(vyj'@( i t8 ` (B*1s;#<)'\1LCJ6k~ց, F0@? Spbf4y:kl>|=|qJ'" <[y>0ϔ-@7WM`7qN+yˡS^P/OsC4 = lY [O ?> }-.0]W=EV-XU$i `;L^};9<+b&Op/@ p06Pmj+!t7bI~f2P#|MJg| J@u诎9z&-.њۓo߶1S} IhCgz/+.@ϓ?`OQ$_}0Qh[` >B8 o~/>p9ˁ4-0|!7ƘOUeI >݀ԇ$`~A H 9L@^q+ $Pmp,5Q/ҟԀp0{l_ PU ه .^ˋxsc hWH|JU@ǾCy!EWQĵa[>a\TwmIE}O?|?д&OZ S¾~7Q cA&'Rik$v.B=' P"}_|` w8O|E6" w^L *!4@ , 1߾_=rRφSP`` =8U/X 0" 0uTSpY_!1,xv cG 2"e NL?eNw,nu.B{G~ٷ:ݐ6 c>`6 `:8sX(oy~;,6nFh0orU~ q`˵Rٺ ߶*9JGlj_a2U #iM^4w0s6Imx%h=#>d%/!pOn P G$`~{@6oX࢟6+$a'T77[L0I 1uOe BD@ Bܯ|<7@P 7 Nưvun鷯c `ǦɖK+J}J$LbY;YKhNUبs ~W` 0|4d4 wS8 񾗗`3|0o7q, _#.@0=< "7j?sWwQ x=Gak3rz|jD(`8Y)W'070K@؂@HP Հ0+npgy^lDhwV0j`Do,<&@)eh^ɕ\]W Y`}[ ls} Ys402 L.mVhn#_pR4\\?k"`kgurMЇx3>~eu#R3H^wm"OGgPcD@!p#rM=ea}M[( FiL ި&&0:n8_!040%'RV04I1r^qAH+'bxHK"  ,E@@o|A0xsCڮEn&*+0vSd+" lbe5H׀l`a - C%(ʄ6fkX ^ p.@548y{ SmY4oU.51g$ևP&h/03/z.иjMIeA n˕/k3g"`'Jx7x38u S b|gQz\vM*G68_B08)Ac@뺱f0],t=~d89y|)\VXWA(vָH@}JYJ?} |`qHN; gjx+]\LvyڐX_ߏTt?+`<0WeXP] Ւ*W̊Y}X*8/M8m>@,J!A⻻_ l0"@~@f:~PtS#7<׃,["t;@ 8J S +'' 9f cj31 5po@ZWJpʵ M3nZ驆_= rtЙKN[uA t'PcNpHN`R; PPT |T\ZK^_`m-8xvXplO;nzs`gFD;a4RA{*Fvrn',';Z~ׂ"zC+FS0# NXhiם\S>^%O_߈9J{"`^x^NAm`TVoa\˯"IF_ L_oEK}8^ \PT'a@kqB<1],@xn\(X `l8,N1nsWy&x(ԭZ~]dF@_@%@©֘t*G|&0`V@gؖЏ"` pDG_\4;U?B#noY>4f .nh1'锜L!mtNK7< 6Qww /=~~YWt^)NJPzU=|~+Qfv| $g[a@Lkjuk)UUww2P.˳ n3~_"}P>?o񏄷<716{UWp!v*N~JA1[{?\)0ܫl~t5˳E1AE L_l@w4A۷h6ŞB7#Y _;$NI'o~17%>tQ/pmFH0Ń˽>wb-|A%oBUCC|jwo素?h` .yxpMgGf(͹p*QԻ0`41s?nf_hܵ@88PH?iH B4h 'Èڨj~غ&,tXn #@8sZ\-sYXzi_O9S x 7s qo-3kyGHMLO ~u/K+%O`)xڒhs*\yL-6˕p'NXG>D>#@y^ϯ р<@^q*@ǿ c,6_1g'[" W\&oRI¬wD VGDM`v%"+'\6 Ks{Y„=x ``/TvFc~tF VyX5$<^q@.cq& ،} ?"?̈: |qśi;] >AXpBϲ?\Fg;w>)O_W).*fՏy&u%2>(>X{-MLE3=rx A5Dɐb׷hr71'SC :A˾6|ⲪbǼT_)Rv,ft[u½?9AIAdFUrC3 `UuQJ'(՗{%C{b\M)@x<4/sXs+.m#XOԄ>} >TS+.OLƽ..ߖK=VhpdDtybz`n8b?`#fɼLj'W|K fXi1@H8Fk%#lv=69@W9Zo2?X.8L dY{KGD2W,ͱr7(,@A\Sf j۰TRGwknP۝^qavYxx[ 'h0 .Xn!or}ĐE^qH.ͱn\GZz9pG ϻ{)u XNK.^l2ּISf4D8yn\G(g6 d`m zP`itkohzd{-NBf+67 Axz7V2֟Q{{ӻ!e6Azpq?ȍ U 3h2R -מUW#+.#\ofלEd>EE;2T \yCtZ`x+J=R(CpOp"·.UI:P=-ޔ)(w~{oΠR_?Y5?ݻݽaY׫L/x~CзLo2EmF,}?74m=# e J`6/ nG |OT-y@Kp *q\sW܇i޾v۠7|>= O۝}_` 6+߾VoX{?{۾B\n#`g%^qnyj|ZP^7 FT߷̏5jo;Ow-Ľzo@ 8o2z8u!@7_Wq@j7+yP=r0=MSxh ƝOK'VW5 ñ<z{W)gWFq{~{5S9 I;/a G? G;7W@`7]^Km`:1] c nAEi^D?8=$Q:Zf8 ne#Np@7寉X(76<:!u{ř}^ :0gOD , mHl۱j /vTIb[?G< 4+ +sfގ0^K5A&z?:;BNfkFD]ao/5& 4v$@ZF a*EI`PWG`s~LJ^T :ݵa^Ћ{3^ OF67Ӧt /d<+}Fs_8@:] .ի3Uw\ @mc'.W (g,eQp{ͦ>@LK1 _&O x8Ґ%`:/4,@8}| x:U%wbU!E /~'1$~*Q.{]N_#?xc? Y Q<>+QN;&pX3?˹/`?6Bp(@>ׯ}p^U\1Ȣ6hNߟާfq1~u M;:@NiXw0Ȣ-mR_e @"y ]&*'eAN 3Bq7\^7K0~4@z5h`KԷj28{ae?e'apVߏ} 8bU03[]/ @/haO@sJ)=7WJ]=h&|eg.)^{ Z5V[`@&poPikX`HGh.ko%`MH6̊V]6Mlw)+Nm%]*A5&]kpO չiTH9[PB'Wc W |~$R z>SNj703@}*59Xy ^D|?@"rqp `~$D?˒i-X=W}) !>;>~ԝz5Z<|W܍+KES{aM3R/HazK-^PKl(hPa;7qZ5`-jqìDI|_$-}8 x',o7t? `]zRo S3 j3WF[+-I!m0)Ҭ@yP@d$fJ}*SER Rl 0EQPR1DjgzrFx!K)[$*XRyr^!QJ`ysO/SFW=$4#.D07ܕ;G\?Ao_W͟x |#]8@SUKCrWU@NV/y>C:iO~)ɯ [e]>rZ{%@̾{6^S}3~L=? NJ1&UP_ߛ>@ j]:Z+ /wW2k[`ӌ/jt3wR%4i*w4[lOh<$c#8Je&DF@}rTְxOw`p6[I殓ke]A4K4٠ّNWkgc<`M4idslQ|* s?ʓo @ _Q|`ڻEm; ~ꮉzp(w,"NDw`*+#o^7K;3 {Ij]Pnt.9 'JuV)& PS%LZS&'grt29GbQL[6wHg|B"<=R$חJ$"Yp9P Ĺ;W@R0*mT9@B}ƩG:/I~5m4]+2,! asO /M yKL ,>8ח0_đDk,<\e8̃,݆)2>cϒ:K9-Vxu^`ҷz|)JX&]x<U(? `kd9u0d:ץGi]z9Ҥ!-LHO*AH@0ZetEI OHF0I )ߨv'i6mnPz-5jstY2,4*Ri&YSvFҙFG+$`Le5〨c"Q FjAR'ʚCUCI{UI NJk H=&8MVqsӧIp[zYI5]ԓcIʄTSVtc]L ̗ 2pD= v⌖R^qW˃WVF#lPOh1f$O0>3eRCzz$2 yp>MZ|7!H `\>!8n6c9hpa@|e]TR!sWe2)J(0Y QגGt@PDXN ) @yE';QF:,;.9qPt3j 瞒\ش%nmKA 4 L*.T\@~KXQ Iv/ .g8g*hA eI EX_ ``!28XrϐK[, D!+**_U-I 6? s] < iHK)qH+X%4J0ZRDm\i_] $m QyyqQaI lڨQ0x; (yxPe^ZX2m@2DVҏeIw0qHe2&jzd& F$d\E^/x(J |UK8@, %+ ` w}cL='\`t{W'Ho,ˑ'[c]0>ܿ (DHg XjE@@S^Nu;:.l̉$!'ۓ{ l@g`,|dCEOFd+rغbl tՇeTL'IiuuwtJDW &;͚m͟{w `j8[i `8o@if &fz|:!? d+DORhv1|5Jg[W[Q_VJg[W[$L CV6w8*͢zi7j %ĹDҲ to2Z>>2VQ=\vSdDQ@A_RRF aI8/ Gª^zF =:1@F@pFm$*ߣQ» s<  B "쑐׀S&̚&xH,(XR">3=\tB Ռg@k4Yb>| uZzj\LcXDhk9jﭗ;¡ۀ0E>9mqk SzAщ7dA١o+-feўSbBJquy?P%#5(z|hk8gxӧ /DX*A="  Xo*5c׹+C_ORkeSPeKTߎ ~9u [PlՒ)@w)@,IPKH8UPR1o'_%nNDփ=y`E|?>Hn5e+A"V,[r[XboM4 # \Wi&,6,kxAE-(S!:u`TĄ#ldLȼ33_r8yІ Ke8H/!Cg'*7 e0?e !2Z.eYeٖ m@%73F"sHk}-R O&5 u>4,}j8X !p&XXlD^ D"uK_@F`g䳮?=8i]8n/r 0FqU Tg/rOZm,\•gߠ+Q(S]\Y)q!TE2Rfvj~w +}w@儞Z)c @sN[ N2@Ow@8U V @6>o9ҝB(DB8)0􀵝d;u|Q/<"_^ O2"Kh@2 C4Pm@s:!|Q >+4{x%L!⑙o@ZX?0Sjlj-ɜBβSh; m{H%VrTidPR1-U$Px,u&| |e'=hw/(prt>E;23:y4Ψ]'/cXRUf G0(gP> *+j%0inV@YL0P%mUKP?@([@-(H a,έiK %LP>BP\,ܪaT2`@١UXBV tBfjGkgL~s.. 6M3) ]'] UI8 -!\<2hY'5(@o׫ Xػsp7 mES )opRs[7L{$P'`5Cre蕧{B6dNL25,WIMxCЀ7e$h F2¤{20 @x\k<QH+@e=3]b싿ɚkO!R ?l ho, ;ER\ @=,ǟ?B5AYd3Lig6ٴvuB|#?˟B@8qP̀K%)=rD<ޒh>T shuޯ|zX? &TԀ}kW~1/ H$yA: C?](QCO(G? 4ːdt$дܺ`Ep,7D jY4ȭUr* 2>̶0?;hTݍC:uP#+?c ~ZHe[L,L2Qxtu$6,:( XTbT+ 7u+_|a]dga8N.gK.Ž2 ͹dUdv~1g `}.ǠU11Q VڋC8{d [[5pyLk{lec"sTv˫_ۀ?} )@= .v1RJ%jc{JĊ=2WvkTfR˲M̄<`in cܼrLZAßnj7$ )8xeo^zԵj>WR `oyߍ'{h,0pJ %ӻꂨf2TXh"3^+@UF6MTَO`!hP>k~S6D@3>`0.4d @*NŎ~|kiz,jepdjM`8.FG+@ջdW;uBYnXBLڧ0(}^3(]}w~5_U㋳w S 1e;vӆHMK눹Ϲ#|(,ikG @*l8->j5} uZX"maϺϔŎjk+js2o *ԝ .`KM#j@&XuJnp{bʡYڙMg>(OqW÷$ `tP깮]r7*g~#}9T;P \>UЩJzm]<*^Ӫ@-Bfk$$}Xi?ٸ)8K ,vzś7?=H^P^D­+|aX`؉^ػ\eI&>V@< t:foJ^\@mR\ơ1<@h*f)G5+oql >ޞ T31̤4Y(#"04 `g4\@y1 p{vXvTd@&XpWl[̼'$wF0djh60Hڀ#kQr[ Kɫ2f>z/r z~a3n@l -;jo0A;!fF18 P7̃ϾaT@?=o|>")|F&ЄԟJ j F hioA?)[wрi6`f3 = םX)v>@սA=-WԾ'Qܡ 3>>ѰeVHz)Xu @>z ɶg@[z Uw= 8q@afn+Z1\ {q=@Z0`e) 8Rp;7ʵ{pMnBwhlt뛀zA_G|e-p~]34S <5b40R `K'asل?;ujirWan b)C]pdw֭@ njsaV蜰G@p/FqcIBp2v1_jQ9{Iħ~ӧ7 $g3SγE[:Zr{/i r WK a<1u-;t AzۭaԸ "l2.nu5(ohd-[0H؈!+*G p 8s匪 1 `yxԄdO?9 sԞ@IP7\NE&E Px'h6K&k |IUnR k@nW5tﷃC@OO9`v['ƫ&c؇F n ie?ΰz)-gf(\v5aO?%_R%uj!zP^m߁#EI+4H,W46B v,͚57q傥 uP~- #WːiG I)7&zUPجaE[mU7d;V`y@Ujqt;#ƞ do,>Tv3*{%+4?;IƳ j E&ǻ~f#{<Z;~ngZeoc?3#N_ @hm@2@ŽVVJ@|!aK0#~oFP V)Ww`dKohbrje~.h^莃%kĬvFгrc26o?3D 3{maQRtP06y-A蝞3mP)t_8 !):6D]Wzal#1x3`|5+f+мO*)Gd#fG5Z@?BP`_`yj׿Zրf P''Krh |3UR f EG @8 Q]2Yj&np/s\O F8E3gtap^lp@o͋3;d[+daֹ > @,SY8Ew=H#hi(U4) rŕ2|a `\) rWYlu`ra5 P-Y GjaK 2PH S@`Bkz Nt&X_tYx?>@,h@l!Du?Xꘟoaejh X_3J ò̴L8@Q T[y~G{="*>|W8&he81Y_5(}j`8u Z!z p8,q*dUg@E m1Ô:!>U,hM?YO-t`  m_ C_6u_T|x׵'%R~ ˾bb}L̩3+oF8U:o +' W~L^ 9 `?? F}]*s9p_v }ԉ?]Yl, ]peElU ]UR`1 [cՠI~A)\M$J5fYzepEI kXBeNo\\v>"ȥ ܈#- dr b.?2ןn?(nБB7vOL%K(_fk_x%EC=Bb d۠Cd6Xli{ 623صM6FW/T,x"N-r-FdTT\kWe'' :T'jNo7 m1a<:褈KY^$"%[@}U PIrRU-[A"~r htI ,`/pmD8TdkgP|_ mPr|ip _ÚPȡD8b0 ^*$4`8M)% X\N7Ldբo5C~ḃ7x %`z 6[JڭjPo2 .Hzہ_~rXXUv8O>CMo9pXC0>'O\kǨ h)Yڀlc}_plT>i"+%k/peZ Nb[2ImO.;0?x6#L)+^ `L0N{+nPWsy~av#u@4=ǻ?=ߢJ 414tL*sf/hf !MQ_ `˫E+Y3Wa60T!FXg`|Q?:V68Ǐ`K,k*ж5/2SW ]Oes`q Jơ p#S0OQ8d\qS@fSlEIQi=k@_3lT^ K~ //hzfQJJ;Vi0CN1\ͩ!8\8㲎\v&;~|(|>̵ҎXvZ+*| pyh E˟;]U0L1KoW'`#h r2 /VO7NL |oS;47z[fgUC e}mmN8$QX 5Ulߺqf#7yiO*c+ͼ):'N 9Ko0d㴴)޷ 5;ba?*``*GbzYWjvj?L7d=^"@S6 N|u?ak^3?ݔ st"t`QM4` (?4bU l/(׵:A=.COnoW^oZx<6Ka]lpVݐ;SJ@hlgluk4zi @OvdBV~%Ty);;Z58]Y '8"K g NQ>mFIK*NDR;63@`=@H*qPG?G 4j]6L* AP-A Ⱦ!D&`ԇz !c"` \?P4k0,{;5pbnz FK}D $qh;>D ZE`q6RP &6&ՀQ؇ao 8]68u/#idImN:YҀ`IA|do!@' SE8O{75e&8mDžMAKW^ 0|otWK,;\fz^Mͽ54=L6Q|x6~0E% CqSqc#tYk|OPeZvNPk?/%>Q +#ɤ %R^V XpW#{3Wo.%PxK<\Ș&ẻ*qA]?; 5_]p?$d7.~A]:&f0B)7 69;lA[TW}pp)75pwĵcOnAfGG|/ ڧfTsgE cI52XI Zb[Q~ @! ^_3UEI;j@M?>fQpcz3AM8S)0Œ/RSҪT+d\k`qoX~@M ) .4L$ >dS8Ss}qYTXf>C^nɬ?76)ӆTraDh޶QvCs vldoj ekY?| N@j/Gp'1p22 j.좽af6U̝@c=Hc Ƥl+JQod|X_@pSk+8)C8r,mF0k"G36 FTIrT'q6x@n _/C]0K/e[)W{( b(Y^|L}*:L n,pVX7Qn283!liTz!4P$v㓚}9yiU"|d@$ :,\0qne>,&X9T՚ ]狶ݚMLm~3C `]a>>~?.-1[|V6MMUq/6yUq\۰k2=UqB;:Gg v @֔@w]\ᏱuPO&MhbRT1Sbp6_@ITEs21a^k!:#ȺYoGa.o/I87oF,_wbcP-Ǐ !tª3hfJݱ"hz9 4w\wgۀN#qPǏ?חV>kTy;{D 5о$Rz Hܮ8DvXUFȘ3N%@F@p4J%WтXa]cHq@^ 8"BE^U+ J `|> &ja 7^mAs2\p:uv Q\~[Z Ȯ0M}{ Qs@۹˾73kL0 Ԅqx@9jWŚL "Q0 ȯ }D1v@僀 LEgM0Mԗe]i }w z:؄Dːae Pp|B ޒ .d_ cZޗ$3 `8 CnF69 N1#0+E YE@_ w< xg P8 鿮3ooO ^|f2&*ZW|M.]/zT vBu76 c^ lRq AOUN1I?tbMe:Z<*5;) ?MN 6ٗh믙XP _"QR@ o\)LŸ^p.9ivjC ۍ'@s_Pr^6f/W)0iM/;#5aiz4iz{[2Vr^*Ԗx 9d0Lr6e[oMZCp3~v?n_ p-6.k `]yѾЕ@ nSm|| H^PUE0_ W ^n\J#EV6,і~t5P\ D Yмmz Bd@tb%0Y,ngKalOT`xAp@k{ 6XPY5p>Z@%銑 b_@6Y';e^ Jp˼QglNRW X Ó. Բ4>ۘ`g\ft/E;ucʿ1lM[g. G p5jU_|R8msh*n@mOQ(CD} @v W=WTVz*NK *&9gKa@@ʿBQ @a,hF? )`rUCЌvHA8 # `0$ 0& 876W49Q  ofw噮08(Ymz a7ڄtt! 8sPP[roUC{`!5 @!5N9 p,<Pk$QT}}t33nz Kׂej H%~"WaOuOTw_M@^P -*.7bXit_c`Ÿb*7hf^M(r.1!]&8 <v\ tH+uxe)j9?3k>9?N/z4ہEY#If/fm@vC jCD ܭc D׫oSoahe5Cж8Wp ?_EN\yi[!7 aE,2+=FdsZ$q`HZpp2Omū4 WXۜl2bl Rp"橩͖bSfTRbKgmm.9#dzw8ͪ81ܫ8z~x#_={+Hm5pǚg팠|N @[|~RP!I94 ʂp~$-g\Ja¸kЪ (B+*on ,AJ" Lr~jmAYupn{c28. tr")"\ .AB.6Ud?E`]7: z2;HX/[x\67b32h92 (D SsF0KY)H@@U~ 8>K=ثS+Cgt&Vmp c=+ћBp0gSҁN1QL}ԨQ{ ü+n?%J1JF˟zfnU L͵ɐT,ۘ`aa3ş"y+dJt?Z36|l@0V۞|:@ 4g`pBF o!`ʔ-hf|7P@]GPL' v KAG` f0ū?pb& pV @ dԻL{!hF0s=n ݱUqmT1e @q|+5z@ j` :rC@*nVrR>0 +K~J`5X;Bܻ\v5`͟A_dg_rHWMz7r儵VT /UP1zo*_dYiQފi"*5r^HZ RfDBSx3B@5⪆6O֙ q ޞ7$wvwt0 o,Z  | A#9*gxÄCgKrrGVd=%W`2A $ \Ej?0@t E2PHEJO,* b+_^);OaPmF/ z7*Nm1ٿ 5]nX "VvG.=CZGUdz` iفhU3&..@I- 3[IEnPfo&HGMBE4 @-[]"?OYB0^nZ3;L[.V-`Rū(]`uF١r,nr[PoV̠V(zq/ttUܥ"G`?M^\/_7&}z> /|4Jq4Vw]  }UIu=`[ɻ϶!YCO*c!@w!@ۺcԎjM*JKs~@ɟ^,C V1%MNj9S{9y?HpiѬpAu5׉ .? hX -2.Zqmpv\r-28{ѯ# `%@%wBc4&X@H(z4e4R Nd_ ο.F$/ hMl[X ڀJbSgS @s#oH a6[Jtj߿%W8۝MHaih.|E$Lfk!kYߌB"M?2r\rP_Wv6,O: z nU]3 -6\^U :>>j}kq PwUzp>C=`@WplWͼ?:] о봒AApE/j}ݟՀ_W؉oskhr!jGG hpzަ AW`+!/{5M}EEީ)58 @?F~#A]ȠGIm+ܰ x]Y$Ip2q:δwʼnT^׹dd8<܆m}sf h"% 2N=܌ Reh) `PW)M3}S7]%Y\E2hK ^Т FIFNx/LvCUqjYFlÑxv7pk< e$J=|>~'k{>/jU`aԀZ B." A\Zo@nL!(* eH-eXȔc,`'I1&ԯd SA/ BjصdI(0*T^ueGwMGJJ3#B@ts'DVH$,;IĹX@r:+s ѧ^/.3X5O _ls^mhs\vtEBu^R P$bM?3 D8;G1H׳}KG`ᓐ g?v 68㌕ ={oQ1Hj4OC7 @jE2:$ Quo0~_XЀllI "I5 o ~/5~&miF~`˗/FJ!QRs"+>D@NX @dT :'8 >&㲵GX]< @! ~Ѯ&Xd3 N/3p\X28^\Z.8,ɮJ( rqd5/cƑQJ280 5Fr{iA2xppe, AS䝑2VVK\Y` 3('ooٸ򗾎|%GtqoEsPMz0(5 Ou-{ uWݝY8u!- *zşZ @zmwEnx٭W %LЏ<VXdu&Ǝae> 0$6%g+K1c)%x).0M w0/a3 Ѐ7I)eMp 1 ؘ`6iR& *;< ?Nsx `!ɎQχ0$sXԀQŻ?ivӋ^,y?{ EL@Þ"S.d۝۞G'MsCe]p>|]{n|<fۣ{8(T^֏kύ @zx9,^<el,GGc0yQ˽`{N{j/%7%!aANHu" 6oc}'G&P- qEXdqR^ ٞ;7L8>VIYg{ 1R/O_ 9yҝD+sxq@F}h `@(ΩU&'Ӊ%'Mҙ$VeщGpn~ sI(H'B?8pas8(wٛ:/4{m挳]Oeq/M)f",JJ  %{̇3f .8& >Vd}Oz"v3qRLrBf8˒džtD/ȂLjok M*0J<`Ao/*5DͰc( $2'GpF+s17m 4 T2e %T%ceHˆ* 1pw0WbBă-_ v-Z@eϚ}G `0kt,)n<1{'u9smC}y 8PՀ9)9BpuTDXHE)(!0;;@sЀU?G}** tWR0Jȗ }$`LT*Vz&ci_a!@cGL<@~ }UV ~qJI0<2BɳZoF9:'VzD{J),k4tD1 /0) F8j aMb Ϯ?"r? Ht mA5<xM̻|%VF'_ s` anM~< (#ĞO"G}T\1ex([WI/޲+&¶ p*KtO+ȿeɡ=|T Fp< :'wi `뜼 I`eN o'WXv:=XhН>P7f+eT*2 96<p& r  E>hH:r }%N?]漠o`rAx0J Γ{J=hmLW(ƈb?\t-yPw0IGJr0NqHb rNt D5kI}k 1 \'8Lߌ-*ڙ >'/pA؟ t#5gpS@լ@߲gs0U(T'~? I/&/&DL>p`ݟn&\9]d՝}H[d5f%4>N k0m- `xݜr%N8Y/'0J  ` $2''uN TIGc}drB\x @ $P-GWh^u)% %v8n=r" c>p"+T8 =xlbܕtN}UgF#}PqER]pD FmI* ʊ Nq-ϗBCܕR^ uY8eY謹@xz̳~ GC|KReӼܷݷ.Q3-2'ڂ?~)e@N։g7ħ7ȜTk-$K0'+E6OD- ߱no^d7w]3biO`>yR9ZO|^^wGiY59Z6`R~~Mk ^NKޯ*W+1;[-5ek h!>RN| as@tzU» NLwo\1L}*zr` ¾+{I3'r\^&ߦeV@uB1l@N88?mMx(A}u$b`ƥ3LT⳥)Xj#$+LJğ6*Ew௯;ޅ>PWோno8Z͟X_@10iIENDB`eQ xeqPNG  IHDRraPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IbIIDATx;$9 %FcL+ J,Bi;rcFZ ` ?{ď7͌F:=VDI:i|8%teq\`UDR_XojB+P 9v#>Q~赜/rlJrSr8]J^YFpysoϔ/ [s?"2#ɮtG8X7\?rZo A,_̟ әu)lT_? o,e 1r"<#h{-tb-<9SP6/m9ɽ]^ ?p 'x@M[*Mv?T 5: $nooXO|r/Jf 5WV5m!2y*W4şEA- 0K\,H{LP=2.iv5W CݣMBXN^n[x. '["/Q{_jN Þ2,^{<bK74_XH;75 C-0>8O;P[7*o?*8Qߏkbe[x`wcV :{`)%㴻{v[ߙFrPj;@ 7/2G,L4 >f-/k_]$1ћ(ch9Uqi+x +\7ߦv&.K'5 )>5X)n/_^JlFZ싟i~? Y8,6X oVc#5ghJc nnf /yUd{ޗBmf(6n^Zڪ|z%7/hO v/_ri{/K$`TGޑW!'0,&/َ 5 Vu+83YA< @,c]+QG,*\*X h|d ьgFŖTy3C=pY6uvUY$4ϒ9j,(MJ1dY!BË^(~h\@C ֒3Ҕ.F`4ʉHR|Y~O~0fx8!BvUQīH<*f3芐$!MH9ItLhCN@n^  v KsBPCJJcL_HcݠW)2P ,d:f3ts(z#r B9.QuVYYYfӱ>:% IKikUʥ`H!ͪU7bUɦS,4C 8t,x]PS)w$9`PefO}&Z(xJV\qRD$ Vd8Ƴ_M05Ty^-EUArWt@T-9X ;r@\4n){nSdnJtH5APЀ@bI^J% HR=!&Ū\׀$ |!{sV@I .=ZC`<^&%?(;R"b) ~P28x?7L喞ozI-I6{[@RRIBTMF^Ap"  |X_ LQᜰl0vb*v?Y̳4SM7)G\|iv;-H BT2R[8T$El"Fic1C?)@njx=()`pj5)V%%g5Fb.E 5C(U I IJNP!OSLnMĊ6@xL)揋*<f&U-+,XGIN9Lj@@0^ &df % L'G 605I.0\p2 \䥌pDZ8W\KwQ(xY6Rf F. d! Ob!UNN{R fg ?*g.IQ{8K=S.a禵#%8 `3U^:TTo\3_;{WE{d5K@! 1P 27U.uBThFr٢ sch|qP3b(͆^Jw@ ['8\ $OeBB'9gP%7fÜ /sc]{( sc%uo&/= @=q80Kó;Y@ndN+4O@ջ'0yxM@n*cLr?`̐JO nNMnȕ. `_'+OD/3B<W;_9O =K9zI|ӑ]6f*>>YK+XE(Z)yP9pqX5Pi#3yKXi*U}( ~n (Nf0q+rn7 V V5wxaTު8r9(۫Hy@H.{vB 7*#xȥ ;v *`S9/=gw>+c/eyxnU*'AZz;a~ٹEIc `$ȾWR~d`ӕd|0}an7>Dd=yl' Y !_l(ئo$N4uJPFA8]OaY!6_>L&Ġ$ D#soo֜|G&T0uSH|$J- T<lY s rm|)9 /.[/\2CDs9;}A}t%\ ;oЀ]| ;""B'$6"fP׷ ni'Ǿ&| x//|_u:! ًjFpߨ^2y^eytGy[.F}ƭ jN||InJ >ޔ},*G?||ϓ=DŅ"wҁOp\Y%pD.`"(0sS 8v]8[07Mij=:=v9H_N U߱*O0[O 0vJ pR_tLb^ @_EG!4N DO `gh=|IĆe\@_~9ؕ)`zK3l')}W(8HL <vl;`ix @Ro){ ;)x zVT2x܂tI ̧+tCZRCG &+@J\+#nE7-@p8yԆb j' xʖeƶD $2 >\J|bwҚP36~||nt_mh홰Ts&Y/(7E"}A[c-;J?Z @?q`8NW +P#P9mЀ #Pa E&e pVuqP]R7> #BSu P6u@|Ij'UDو̵NUZ6t۫`:wGw;Ps8LkPsXQ'76C9C:?4+v1vl w#[Xw8Xu`5oziT4Xn1 5dvTt5"?3󠀖Al\ nj;^~:ׂP/.ie:QAx**0tOlJNxk 8L?mMzkȕGof4)y$;]0 @P]3ڬ7i-x@np WqA;Ar3_C@DaUY#*Z .̟5]@m?{'_,Ak[@<68 &JB~3`/U4IJT Ksm,?kbDa )m n7L1Y1ji k@]$)W1MJMt-<XwF- 5 PX=Eo{{èjځg͟/= dwO=!Ӷ0< (< @3n0 D oM4 ? luޏ} ݵ6 ,8{0/4J (?y\: C?NQC ~<7-CҍQ0@R W[ d no@O^ЗjLž;'qZv ivY tepf!9:`af NF8aуHۀUFrHNnu˗/1+(qQStZR#HNa胬 #B!|D sU $)" @] jbQ(CwBˡ\rZ=~ɚp~\k{HGB)UDpxnc='`gO KgK4.`,:џh Jp"l'>>ydi֘^lu2pDz/a<,^AnE 8GyFh^9϶4I Rs-]a@; ] os5*w`+]2B౹]Yt8A #tALw0#qv[*l4M4QO.@ PGrԑp2};cf-MqZv `+(* Rӳ8NH >xHS@#_L\'m7МL~a:GMbw&l/Dв 1968 '6š]˄ؓׯi|M"3,e֮>~џz p& (htU#CD|@Ⱦ &XU`ӷQn5-Nݻa8}.ޫG#pF.^fs-pWB `orGt 6n[|7Κ`)9: 51;vBpEn#\0B s]ݻn4aL4';NW&h :]%l:=ffuЮi"XK!-Cq$ @_ln\ 8k ~hzgN=hhPUX[WX~-ޠV@ꆡ5yw'po&ǣPT ~=qh WA[d{J@/T 5Oq>}<@8VEGIf"pNfTnA.P_^7muʹbܓ ,s¦9NLT/ϐq2 fW'@m'D,nŌ˝WF٬<bE$?08 1B&@3~w|-h#i#zǣi#z;hYnB4 Ɩ;̤W"\VfØ_9kѹbf5j@I,|j5f*[`iTv +v h2Ljn@0 Wm&8k\G6<4Yq6m^ޝ bl Gi^wEm\P0 KF}fRpU)\Qm Ϡ%{t=;BsX<[Gn?w,Tx޽G ~q fe@7Wq*5WsURm5/(E͡VNXݞMYQw, 3ͫD x`i/"jA8kܬnEep+Tf#aрq-pLaX i+79"#CNbTS7?0-.*@P~O w2\G IZ|ĩP$ HPBgxIYZV\ݛv .CCPw5 u eM F@y6ߨW@|Su 9Ӏd&5H`캨OM-(@P)L T"B:0-)܆_Bh16ȼd4n-r1gȖD]q@pELw,`O@?QTm.],Ye`T|gp{Z1ςfN̯_VHGf- LmP9~ L9Yt?Lyos<k}Vd-vF0d64 K~!xraɦ"RYh5` ʱ6@MvFYtZD_x+F7 f2-9/nvӣHx`]о7"hTw`DdTo}1%4=nZ۹jgÄ׵v7 `oުdK:  nįQَ1m~WQXϻH`Gn!e~@7-Aٝ#m4l_ eWm$ & {f@~ wtB8FiTiU؛MӅ"_["{D1yL@UjM҅59 \rqsQ0*Ay 5c \d:&im3"GxAwckJ4 slpϟ!Ќ6=eh,xT~fA8Yjkd"!Zfc;gvVgl*x'òL[g\D%Ȗ^-&Xꄠ˹ަ~hG3J ME ?`ev;eMHPvBnqV j4 3i6:# pUeLw)pf.F:f@z9[oEgԏ.tP-~@`Y6pӲ̼$P]5@Us~*s78fN7/˴KzVG_v <xjSRA6S7! yx;eL1\9>\'Dx!: ;U] u~է=t`@?'˅p(?qk Rh}ð?\h^y3 8k aFg%.Mد J'&PO_K;ú/@n1: 0f0xEL:ABF;X"f% &h~?oJ]fd| lGbZ}{&LzSD9FM0D$”"3hG S0 HL$uHLJ_S1Ut(eW[)0.r5V `s3f>/p%Ur{ew}`-CehQy:PD:<Bv0 @j5#w  $03ݍ.? 2ןm?@U7C ]ipSlٯ]fF|<pË 9.`DR)Tlm_m"*΅j5`f;>eBؠC6Xm{ v2 8]6P@n$EU! b x',hm$0)&'?R la:)MczBπGB8q2dc;kI,Ճ*U-JR @NoOd"~ *M :?6. u+X0^Jⰹ p|1D*t ?r@rk2<`xĚJ 4&XYl0@>yh\EhIWܠ<.FNH"H 7FZUxxO!w@qw˧̄u@p].U'c@~˱G@}R8<ǀrNfv{v9HL0;Sەa#}}<}UW?@av#z\g0YcSJѤb*.% ^H$%ލ|{`7E@mmXvpphZv94.k nlle풛c lu3 EylKQZ u3kmN5 ;,* ڠ ѕiU##ƒر A;əo:ۘ&`|-˂vf>!8}*H]_ML'L5`(ſ6 dәbЩK*UV1# @d&Rrh^-b`&Z Yu ?e1ecA#|F2y">c 0/ ftCv0pL.={o˛26 &Dg$h,^g~|Wo&|7OӍl&}Qa@(aU$38W4`oflceg6a*hƓ3f' `fdB #wB\Rǔ/5 ɴN@~B @-j a-VPnަ;(xX@ )pN@3[@!_O`YnD U/rDa .GGg DφQ&d^~kE#qwB8xb}fbMЏA]l4cC @-PRXNK3/*0N,\3Vv Ak< [;膡֋n #HߗJK6h EIuLY]5W[v\| P-{g ~~QIȀN@ + `q&L0soDC|!?`'k^m@pq\J ,#:Hr3l ?R!;f|3k$a RVąl@ĆM]سt퉋C )oS' vDN-"7heܺO}8x; WM_?,],g-Gh֡5!.*.mӭ5mgm: :u ȱV(d̖ubU0 ||pMкaŬ;]t.ޔYGL* y *86J.t'uyUV<<:ڍ`쪸ɮ;c',Uqʬh@:)< Ƈ -0K5+Nwc?mX*O&x0J cr9u,]ĭSLqW|/:@IH4EhïD ũgq2I: Q4 Mq'x64_z @,@S㧏解(khEt=.mB{80+u +HugCjH\5kמ$^J5+@|`7h6adMPYX.0Q&< @4 j.Հ#1f+T`,WW M>s8{DgM"*v7V G&>=1c Ě.H&*ejrSZ {fV dm@`cp: `NnD.ڄhm"(?U]:A^0;@ h& xȵigtuEI߃ؕl$ ``7ԍ0х&s<0{CTLvR"k 0@; 8F_׹ooufA[ThF W9; U ڔmVY*̖ı`6o MV?Z'jBxRh܈RQz2AƢnm@CʝsfiU>&x#!x<= zK}MO\@Ӄ9Ckl lpgc! ǥ6SCO@ z{~E3"^"9(-c}!%XƏiYK@pQ3[ 8 ,|e( ,8>?;  c7%)gR4E"ooǏ>k @]ݓm&#zF.0pUqfcgp\rA]%#~+8kp b؈Nute̻H{k W+5 z @_BP䯊_h,ȤޏUܔRMȋemڀ(̻@3)T@ ~ ]Yq[pepn\Xğ8@'^n tDRE0;@ST,@_7 : x2;LZ.͝ V Za-ВgR~"Д8<}ݎ٫s·.7OZ0XXx:<=lM&/}6#9-W'GM_|u?ܻf ErpO[$;*@]njaVMX)Zxܻ枓s0!禒]A0jOp~@ =3]8Ia6/=OxTEDLLPյe_ p?$ LeSV NZh+TO X4NRD$`&"@83 8)Oj:>i]v] qe Z2]Եt#rDӅXlU\vUwPͽT`B`#Mɷ.h Y390qVBZ0 lٺ"|WaG}UY O3T^>ّ 2!nfV:N V*#w'M*C?!kV*0VD0 0%٭(/BB_4 &(5<*mB(*{~yBɚp7y*vP&|} NHܻb id)SAJ;4A3$6YU:]݉A)*Gfc|7zu ÿUqf#[\+%9Ӏ4RA5YIAl_zFwC.=5IV8 nC8T#{5`PGJ[Bl-L3"40[]GG4}fUq GOHUMp@a)zx&) Xw A"u\kJj2]qvU?9QqCЬAxvί3ҫ5L8Uq0q eps$T"eZs㳪R",r5%pzɨpA3#[@`]7 `}$|[b 3Y7ep[M>>:r!y6epd\w=m @ue  j;},Sŷ7.KHoGDth5 %Uf#fATqjsAv\<3uUb,90l(%ZE[s`Cv- ףߘ.WCP}3 Ud^.;>0ydiϻ@Wh~ /68sm, $dbk ,ϟ5JM[_)g^`ZR1b(h=Ҷ ˳ȦHX3c_bC&E~ N|2t%7Ue;[ uuLAe-olcer(JhH+PL;M맛΁ X((^ڷ Հ"*% 2oVШ2+hUqFCt׻ N7dF>A CY'$] ͋إYЪ EI'Dž 3  n(uw/pYg:*"swDoUe=a\OP*CΟ뎩i3p9Uqp%j@+Rw Y80_dhP3T ~OcSyNlcSо,M=`uP]An_\gݣW>D@,NXe :ikx$}?MBNHx>t׭} 8 bN &0B Eߣ_-Ĥ&؆;` Nʗ9:^_W) n.C-8npUFvUhC 1V7[}4457eÅ}4,޲ nKp2J`-~W2ebXvv;7+gغ]7G7lZ_G߃eY$@3%Zր?롓2r9zI@0q;}!Y| pS&P? @ fixWz8 РD~tF2{nm&0:svO&_`;[5K,OpobΟ5 vB"CnG^֢ X1bA'N00?Vn @M NFEhP"dkX!9>>v&*ⶍ`(aY=)eun9>8 8{o! <>rgG^BWpx\ ]›`A-.!h5/w34ȷg_|Mr!.!EBZ'OF ^~_8 zeIBi&~\ߕ4, h4j5^r}38 U^/`N k&8Ah= vF' ԯ=l"_:y|,mK^;W&ܽqXo@tW+ nvy<?p^#+ؘ;f , O`cN.0u y/6;ۂ@^'pY.JG/0:q6pcX,يlA708!f.&7Fgb.Jrcf+O9  G$8I@kP>Q;^2Gtlҹb0VTq7R3iau S{ǚ -bx` Cj]T'R'$Xu4 )@snfwl|. ~%GRvkچ̞)٢tgdPqEo /wYɧB@~3q =xPd03|#a@h!R7{ƚ|AB﬇- 324& ^و͗l0;L LHwB5?hRB.~9&|& Z/K *q nZ;V1-;bPPT\Sr8BΕvnC->@VUQ)tŧԞbLi07m d(`X_Nu'YobhJ :!*ҦDMH9DH%eŰ`RyY^9,hAd.|?7\Ҧ:;'w)Mv@JʚeU YiA|FW9\V^S /Qg.ڍbщɔp)S+Mxyx+D H ( }qBDΪ+ CbDZC5}$i# -E]EARGRQW\&,%7f'>6( O%ǏP!){8F[M+J_Vnc^YE„FN*q yQKRd4 V2w.ݎI >!;M`d@Dd0 $?q./ ahfBC`pYbů"آ+UHVHHRr$qX)˞ܔѝ+/̶InJ;k6>[2!c1ovGhPN @Lz P ` @aC:c': fJ4( u 4`9CSo"ˊM@J1 .|E^Poօ0>@d]nd=Y;R0SAI'qK;RNDZgJ3S$.K-`TDdxJIJgyWa#jr%CAHOBm}_`_o㍓z/PuR=dFARJY:(" ?1'&/& ,BbH* \rBM/Z)7%{39VTxqO^!QJpysO/1#K+s=,<=.D8`___ 19-7ࠟ5f㯩OiTd P :-ݎs|X F-(n߳ 0^;ZC:{t~>HggrA&gēaҲM\*.r(Pm -3nT$ Sv:Sho'| ^st.qp_W5)gtcHMI5LsIϥyH)=u=iDuwGࣸt9_rȳrɯ0d,9R_G3UKXrz7 -|f$y9u?f(.+A+ yVP [n@t*}p|LV uF1ol/" ] ђpx&ـ(hMɆ,K5&ɗ`rHX#Ex}jT,5=I/Orwi^l$2O Ӑ&Ȩ8H%/0-KcC>JXFjQ`Re ڦs%Q/T5H2]|nyz@:K9-V|u^`1z|)HoeJW&?5 X`),C`,sMzsT4YC] f4Ykcޤ-MB 4J9<4Sb)Q L(9& 1< `sxc9^TxIϘ<'UtBVow [HYK$YY8Wh@O gЀU *YyZ+4`P3#3t 6 n96KRGl'(ke~3>(Χ.2_sŰref~e.pG@9:Hp&Svy(pL)Jrj=`+[8}3Lp $у{,-`ݤ'0~[BW5:lV6NS梀IT\fT\XPh9"ɺg1:[!["Up̛ $T&Bjx}dxgxiQqQ)z/e!rV_Wni"!PL"I@ȜLXP, , L0bA`G3 y !"LY>`HPࣨ0Ed&&=)e%#VK&QJ%= P ']^c9b X2ln2deυD1`Ԣ)fF$C嬠\bŐdy>^\fqakm`JIjksK|Rk0hN$f3h9,`ȍwi't56NFŹ=(*؂pu=ftq3/\.8#)(Ƙ0R.1hMH,;X9 ` `ChA}W㮧DGHӐX M^uq{BM`x]>,`-^o$ K!No0"Խ>Vf I ?( eFBD榺mS;0TgPf$B G95f1tRFUVLP4{}&H2r ?y0I8Қ AID6?Xx/GX0}5S 3J `)X :_(k3 $.7UΙ`s0>w@鄸fƚ7-4U=*:!ZU0 :!9wo'dFyl)%UQ WTˣN墸SǧNY,G8>1s(nN,?%a eu|4hUeU TQ%H| `6dX\܇h@a:&]g}DDhD쒈u3T<2ɊPW$5Iw#&0 eK '*:6}@$8q6yg0]N3IK=٫8@TPPtpю)Qf&T|%2nSA$뙬Sl A-I2EO`#0f" C!fZv (VRIu/dd/!\12/x &Wl@`n AZo@rӀ,e%ܒޘX~D~.K^7AM!9 H0'%Cۀ?R\GL3S|GtyD*FU~ Kaewx =sxx}XN>^N|rs'>'Pp8> #8R'=$Z.̇8yD>'0TX siv)aLO 2d Mw##_7(illtJ~G|+Ə z&y6q?{`@N@D3>NWX (Ҁ\[ZǗ@(h݌ ;ψtB\ЊNHvL~5f϶޹XVWrX'=۲rX{'`zzjc%̹Dr0QO/ d¹j3g., S)Fp lN@0|/H 򿰼Y S)F ]bi.@+# x!D2'gKV9W~8xtp,`[/O D7kc0L4I~p7 i!.O!{8``^w fic[^${B*q9lR|8 3=}:!E5=`9DNJ /GwDs!%GNОȧ0m(y7nMPu}L/pC{tb Y||pyk{Ҷ2hOQQ`1!f&w.3(( VV@ _{S]$s1 35R P":vC M pWWwt Ks;>d#8; Uы@ (߁ҥ~_@kc+qR0=J2< .}/B~w,Ɏ왹,h7uBhv 6ĺʵym}G0 Z8ߠ ;|y0do/ĘJ`y:TimU(@j@i=3ƫiF׊tK*뜫gp~@ßLJU4p&0Z@ͣp"%ڀ t( -fU ,j11<"CǻTMl(3ŷuinT&,p&([UKP?@,[F OE^`\Öړs@<_bd$7%\+ tJe^;Auń[!J*M(;J~TʜԪ]q9:!Z].Z]&&pk6\oy k@rtb&y#lQI8;HS32h3ʅk(O@UZ=]c9 8 2Pap&xTs[; =A~R0,Wf)COldA4-h^&6 x]Ј Ж2]&3;:#5K#h"IP1޵R ie^>[VvqP94i2 kIYa2-I\URc_cde0e ՏhbBR+ZnjF@bD/c8R)@: j@Y$F)Ի**⯲ @rnEI-Y.{[!?ߠiHmr%?[OLB^,2`FFtlA@X Џ T#RIf` ]ǺO$DR;TtFHOĎHvch`UJ tggɀnM(QC(G? Ǎ4ːdgдܺ`E/7:DH@>?} `'/[%wbߌC-&~|q {Jۀ @hB5:`ff .^gS.HFGR`c;;HP2.vj$N/1K5!B 8ȱ\edcT@Z `*[m@M ԙ`2x(EtB"^޿58u?2R؃ZnUu&{rTKޙѽ@J-`5bsZ]mX;!'=|>(oWjC!PF6DjXJ]'̽Ix3As*]U &y,"Gt_&``8|F7pjpoo ӵ3e^ /._#GT XVkm 8}9#eFdlcܶ6SrۛvD$pvfS-+ W&r<^n*tP깦Mr׫0j&Mv'h KZ`ځsUZ .v@5:״j9(Pܑ=|hR|p7iewŽ}]Ux]НįOl /Uue.e٘"LF> Ct:jfoJVyMW T =׾jJ6p$Z&jdAxs:'k1 G^iPOR )0q(F,f7yL-рt;p ߼TKd YC[m 6_K5`qohR7-`$F>IpXj,@?j6/7ѭpRk6+Zb4`+"@6Gȋou36@;>6/M?W3 Uv6t5/o-o}+k#>@3?|لp85ji^%s{ydPkt&Mu+P-\IXJ#x[#<E5ja#Ϳ7U O_dve 8'L s5W kP$ovkw!-@P)k&` ^|g 1рӠ&5HloM(@ Oh<ֆPiP7o]NE&qC{60Fg>((_`olCϖ/93-UyKS1MfAiŒ+N? z[#,~(?*P-ѭU ,o5-Yʧp{f #AMuP~- T9ZԹB ^0cA )Wk1Y@@7!49G/ O϶!{}K߻vD}; d0o,T3*p J GV8ivl(PV=8l/jWqh@ŏPUjheax&?㊑ th9Gm@1@f8: g!^mw= hպ`Jl_z9y|)hcXOqkmko `tG TA+2m nįA1dm~7H`gr/1+ac.CQ(R7ʹwzΎQ}L'MԡH i5^a+gAW)17yTRd2''K|h$j @^xH mM:!tm,@57 reES[?@4 k=pHMyqf㚌ok/v6̲[$y#gPkCmj*m{]`e0]6}N1@f,8#5`@RòL)p `Gz)koEehP/4PYVN$pB۞ܠ| Njx XfGe=`T̋j!3 yE*>/O]{ YX!9`;d$4))f篿@|~_:c 37;?KP V  ef@*q'cp0uz~ޮ0>Gf;k@\n螧E:N&,p! J)])gP: C0ĭvDo6e4V.0aLa܃ako? s5j>/%Ur[hew}`,CТ$^brMJoqeZae`ǚA~Ѝt(žeZJ/<܆ -`گ1<L ?}o n٠c@-uGlef klF=} 藽'6Q#orcJ5+ `_Ao%)AU`?3]nI H[ط gzq YZeEI"PwAm ag骺/'Ǡֿ A^ d p\@%:9mT?+"X :0߷?Pr@tj2-Hd,J#4:G'f{`0QUEj\vp١@xPJq/v ɕf 0|ξ_~򛚰0 Tv,W4 Ko@Vq8lMoI/Z-¾8k6`prnn뺱`&.R`d!ca[<2?MG[6ӗ/.;;p0U'd,mS-n ]hwB"O6ڲ2-3o8vo \ C?8 ϯf髺ڮE*VP!vdH $Vpe&F8+zr-7X?Z(’(M fvUR;g T57ۃUB8a X4N+d ˳__S6Ml1:> 6,Ko]*|^~f0$ȵD )y YW t?ͽ1P+@* 2N 0n~ 3&X$e5yXO>7 L=,MJ;thF@5` z),  *V r'es {6=+(m;Rf=lAiCsL8.Jp&,/ߊr.@TpU1`' JR-Hg*:8@_h~H1vJr~2B @|`u].5X:ZC]̪8amO-UzbZYWjt~Af#o@F{ϋllfP@U5IL4 >c@2k?Q 5 4_ɠݣ`'U @f17Ș`1ڐ|鈇ȄQeJI 2)]GfzZ7\yQ0my)᧵U`B_F>(;m1іl 7bf0W6fJkͣc h"rլ_%T~@3'm`kN)A%&X,d7 )NP;yf`[I'DV[| G?%@[e(2ȼ)x9m[h5hptS,\V<3 m4m02R \#6M$8bt=@οvAߥ/k1(cppdx.S?.C;@G'6zGWldGi_暻t:Be M"7M>l|B0۰U*]Ntj@s &|&I554:m(\)pgE1@&g MpUd=0: X'Oyt2 HClřeE<1e8, cM0LCGMMqN\䣎L¿ضm:".'&2U`_Pa^S;DpvzrC]B#kÇ#zgoO /r > Vݐ;SHڎрە`M4 n&Q3R(ŗ>*!| gjrF~<_*O g"VƎhE9;dZWdj&KGء8t1OC*F `dy 1K[ gTm;`~ԑuddW ÄFcC ^Ed߈H< '# 8 ljp E[`cQv<M̟zMKaH7) W2cÙ`rl ~\g﷍c.J5CK0i!:د3W&ڀe3oP_fq<5"+VX&uuT'pE=ën @' QE8NjX-_L65`2-7Q yg|jl;ī66<p?oqE5ih85`:11P'gڦ=MI"^Jma׉Pd4[Mv{XS3tfTj2XP Ewl6kqLş' dEqd4P'CtWg6DMMҀ" `'6𾱸-?,[`j6)[D.߿;JUGB* H+PKðt8\U#rD?w.G^2AQp5vF@&$3z7N\ #9 >}u& δp[Y }HoÇxHCmr::T[_[2:@;u@5C 6M(Zo%|D0E%ίI `x=P3-P-\SVz+ AK^,S Ig`][k+{n6 EIyL5 ZB8ZhtίI;l9kc'Ih+ٸ Np{E6#Uf|UkQ-/ ^ˎm8'/pkb/GNbp4 g;aEφ`ԧ˪|z_1g|a7j0.p͵59 v ZzF0K"'u7 ePZ/_rTG 6Pm"[9zR:L(]Yz,Ì%7q)ƴ2tL+2P@]aep]f܀k5kژep# -s)Zɨ۵ʐ]7^pH lHl7ʒ! Hmb (5 +$@$3:]E1p3 H 0C%,ujMˮE[UanM۪`BD&:svB^="j6섘g-vyqiT @~&*nEx;\ *x~c@ E&XGXꋜM4`XS@T*􂣋uH$ːj p@ `d!6gL0l`=$C[r44=@ßFAK ~*-Y q"bq1Ӽ~̈́`eMA'/w mp$IW{}0 z3_=5ZKm8&./j$T iAo0)P\(M5U4W91)t 9 Q…IS!3NH/wԇX~L,CW _"QR@o\( ^M$s4J}=tlJٷ8[ɿ#*_jpP ƤgKuIf: Z1vpu@ 3Ʌ2w1/*iJ߮Pep3f|U[*0)q(!sZ0Հ"svn`)e[oMZw3z7ï~ :>\@j0LB4RgT` }n* Ui˖h*:x\/cWak_'eL:!F{_)gk9i@G`@c4@m"mP:bUs-c `˶DFg" mX8% !ۀL'PI@m@b$jzQ/8%0hF v^!. L%*y)!0U+*=Ҁ:l~Y:A-K6&[vTSfWt|^1dM/'. G p5&*n}R6y3G_us;!\ۍ `/ϘJk HږGp՞b1>CqU]BoP\@ʿIv|#pތ,8)5[ǀ  uOFPv]k{\M2sD1"hPo)EGy|y@Qh(7r;2qLyeF(x8*nʒ-pl6a2?5ؕTǖ[ UC{?1$xٞՀі[: ð94`pH6F6I=U> DG7P^o!0ӆJ]8<^pXY_I$,mÞ0"^UP[7bx79XBDR;:`_F_H|'&)r@3j:@qAe10#@h6G}uwY@ؐs@2 05$~-٤K^ymצCr//n3/3;[}t,/ `N2{oT -)C/4|pUDv>9%ڌ# x^- z }󍟝O\@Ӄ˜5KL]ж6p #!-INqa|="VvGL !ݚ 䖇8)~t2X${8x}1I E4`Adləox!)50+Df!monyImG,`:Vٕq뫞4mfp( x ,?<An\WrSy" .kf>BVJj)Th(N b'$r^^j֯+ʆWY]kL'8gR79;tBb@2Zl=\ovG3ư A@#^Tj~5: V-3[K|l?1|cB$gLl:Y=Jj\mlE'I4As`e֫X{f @n76hL \1ve$D[R?*UF6YM1UqJ*] *:s3'0 NH:g[ol,hQf$Xd7:7pte&Y2`I @ @#zUI@˟[D(e{|@^.O4}8]Ԫ8 P˴3!8eH: %CRw$2? ډmT}qa毪,vp@ w %^\fޣWK[Hi)@ 0Ȱ@?[9c ݌pbKagN^^Ҿ0biX,; (d'DC\6{(CtC ]'#'79y@:?y[^zׁ0k@m wQ梊#^XEAjLp/XPP&C "}*Pc#d@h}~d MW<pUqe @ { ^` p#^2J.fz5}j `4ӀAmV.V8mpmQ9R5tBiL7Ѐ6܈n8Pa _׼vjJ{v/rgendhL٬[8 Kzо+QTaeUSjݏDDLс:Vv9O{:0vFw;ڍ` 6k78 ;II3j3{ m\_`aN vן#`I Ft@|B@ bEU]݇Hh +6zzuX^6 uk[?c| `dqctH'$LZȴm ]5}ϼq:'05}vP$ 5:$ epxqepupb28r<~1#)ɮJ( rqd5/cj epz{_avK284`N< 4gN)mUmۙvX08D枔+.dV_:`;jЋ9{)Cץ粷 큐a^vwFf`Ll V+xk+@7z4{ l׶.:1 ) K1})%x).2M ;0gAw `v-L} 0oP` k`a<f $d#ԬT( 0Mp ;2kE\̖؍0( zcc 1BIxaQp|˺VG^BA~WȺ;W>H'#nr=7>T C rTN70xMƇ ֤JùaVƇR]I p]]I 3\G-jNpcc@oJ:TR^u ̻"4@Hm,ɵwMIx~ah* *֨S8s0a.:)!lIE dŞi<6!6M 4s>no"zf;ho"f6 '{{<{B߰'5 x# ^&pti4@A]|DST[4}_h=L0Dܞm@(Ω@  [Mڄ𐱝s2ߥ~nO3sJr+9#sQ~SUr:eIPz_Bw pa^؃u)Wh;2YJNïsLJ!W'tP Eԯ\xQR `8SvGܘ@b\ZfŲ$ RWhRU/H4 7#PRYh7rq@ K-: d MoM\P/06a_zfj#YWz>`| @\\0sV@}%L u^x1vILe0b=l#ng%zn]K#-q͕Q:##(0ɦb& Y] ^lWM7m ZDM=2GDodHb&|o}B8\ :K rQaBƱ(^Ϥ _ZF Ό gGΑS0(Q@pzs]S.` !;n̩==0-6@-`1~\so">OMk6=6 V-pV 'NE\ndw D f" ىR.(aƭ)rK>[~X55|TI Od3 xd 㺱3ѧ1$GL.eI&nӏfF8O N 9+ $LIa/ɜ f;&Eh WE|)rc&Brݞ߄j)&q4QyX)-"Kɼ qٌԲ9. ?))(|ލhp)8FR O_@&bb\DAyUuBzdg$G?;6qܤuu3XL +8IB4 %66}`ov-, %ʬ*bL04$`8Ff%eDX#ބAtL J@(5Gg 6GL;!~+K ?~rgyĹN?9 !7G|@L Fs".$5P?O#Ԅ6E|}gnPt,a .SB4 Rl0m97n̟ʘ`MPE#=;Ps%Ħ{̡8Z{Z=,+%2G&"sRh]2WtNȚJ%F]~05Ż7pq{nw bG@iԣHRTN# :u3?zx$,mO`}z0:x3oV (8|,HO?`:zEX-u".XC;8sbB9Eb 6:Q q/1\xAZM Tnc> FB9J 9וHL|1*6 kZY |Gpx3{X `D"#^ ȱen[G=2q4;̈́># -U9:#7U~/N@zWdɺ !pJd'ā pg1>wBlp *D;T[@( F`hNHxOAt ==1 p̫YOtI3®ɝI-S8-zavMp CoNkr'p^NOwM S$Ħ{`'"!6j9#C~$i<6!&ݏ 1'$!&#8Th^u)[K@|֞WGH`{xNrxʇJ&;61ޕtN}UgƦ#}pqER] *-(ۜU/'}A5uJ ]+___J#  JkճRP*b$ pOfr2/w^w >JIxݿz#i!>$zeӼo.Q352%պ>R-nHO)ZX mkRo?[(il%j-3Ev3iZQƟ^.>JdR9XO|\V@4 =ր괬ќ^, 0Nye^KaFS{; ]v]U"^(ߏNb)[k@3vrSv 4,Xpo"1 _9 8`)@;]E_sܕhzfV3ĕ8dϷ2t,b,؀D5Gi+D( T 0o7Rɜ-=o+Xp{;VJ8F]+k+^wGk[9'P LtIENDB`5o xfcPNG  IHDRraPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤I`!IDATx8>^b#YF;c7vڵRs ra_GTVT\ER2x94yl`U@R)_oB+P 7=>kgh9_#&:XR >p>{t.ԟ.I_PcFWhDez]p> ⯻)}%'!p?u51`_ںOW_? o`2yY|:qh}5tb-<)S/u9-ɽ]Z3@~3O3&ջ7;TޣS l!#j+7Z`?ɽ*5p׌^_^"f /NSޝ'eA-/;aY*[  5 0AwӨėہFo[`ڻC87 aj6{k`_<9 C}|Tx* :=`ZUоOC< wnj3<φS06|F x`nb=jol/l&^vTd bPݏK|X F-.߫ 0^;ZTCә:t~I>HggrDA&g0SliYm&)^G9TcC˩x;O[sUX6ٷ^;GQI񡧮Bip%2&R*HgfK-6"d_\N X 78&)<䯬}?'++)=+p@]:e  6w=u3@8䐛H߷ !pV z9JPgظi:N%F$c+?5WUHXr>z7 -|$e%u,9f(}p} 3A6tA,]tcѡ>_{3g"*b߲'_BE@9o@)Ľ%J WԚTYjL/_!B|HD,=eBEpk~^<@ 9. 3x^ @!M*PP"r'9Qs݆.t ?frAx!ڐBI6]9"ivQ_̠;+(ZA8Bl}Q$dnɄ+W/X<' O W'"l9")\HqE $!O'`\Iy3CE/د0O@/4}*R- Qd z,/o @DAVdoWH0VB@- LέKW(bA4u6'T<@l\ &DQWDrU+0R"=l(N(>`%\XIr/P:9!^eY%Gr;&V C1Ϟ,RjYpÄ&7ˎ--6|1TR7L.Վc Iحjߖ 龓`#zrGG挢 wt.drDoЀk&Y^'P R' {YP܉ܖLbtNM1/@6<(%xC?"0mVvI6kD+SZ>),7_tcP5l>Iz8Mc$8cF<QH]G\506HF~%! /Moˬ0]`"G? XI8Jq[-*8ɴ\R npQUȍ?K4S+ ,U{KI"BǜH?!Z<0\mf;z(Ҥ:U yccdc&dLvIu_ `,:*9@X} \i| حE]R NRQ62&`] @E08U-*;oJg{`m'6y2;!( Q,="\w?>+d7WBІN|'b ߷p1y-W)t(/-[*Ec)"pD[ pDw]\nʹ7IQ`m >P c(~5I9M4]v0DݦNȒ^4:ZQU# ^gSɌoxr/Px"B;!d$87C :.z g%mBe C{IG`iJ:.@E^@͘sh SpP]$ @b Uk+'98%vR/1gFXB^; F{ 昻aH9Tބ$8rp4 р%fey܈^{ J$x  }J^@l0GRi `m`Z @RKZW\~P|q&&$@*EGyrOdq)DPwA1&9Ǟ8.~rJpDk$ <\ꄸDvBP)Ħ.vgK E"M:!+Ip,R).8-Ū$p\ jx+B& 9?I)wp\ VzrCqYy0^UB5+oV1nJ(PQ$)= ]R$LE3PlpOdCM$({%yO7 @c>ewu VdX{U:zɱFAX (*WW.nԲ GVwBH΢BPF[%Y,Pec!.j(%F p%+ M[*9.<@@꣤#bbUwB Q4gBR*aB 'yۚ`wx!}`\/uO$i@gFD{W5"0ՀH/2QPܪYVNrq`#k&XVUH;!P%(,$h*T}9{{USzxy +G;E<| #oM9),HmؠJ'A^/P\m Kc{B;շ@ѶeihJN8;XO#6CG5I :x9?qJO ?& #@? 2cUF下U@i~ٻUJ%W7~7-n3O+u)\ čf¡},x#o& >F%]Vݦ$n/\2-6q?`| 3+?W˞n-,q8,9W)gͳ۽+WnԀhq s`^>voa鱮k9/_ pp^Zn `+(&5nQ p, 56*ӽaXO-/I?9 O,+TʎQ].5 -ȵ*/ Z0cTwH p)S@,((mFLe&ZItI|fr3 '@ `zO!p9\uwK{32' '/d>?f xBpAn .0&/QO~X {O4xE$Ъ1<aaPT>P@BeO~oS D u0JwaPo޸A1= Qы7fa>2G\β||ؿ'm;Gr;X HmE?_ӻ}$@d,2(iDP5F.c? `_7M`u)"39o4TR5z@C<é]QeEmy)׮hjpG5=7'оS@InY1o4<_L- \{IĚeG_~[ ylrԳL ,;`ix@Tܚo1«:{x zlT5^R.>tV0PԪĆ!- w1NNG;ڐNLct,9N)i |w5JO$KsK4f|z0f0tftxQD 1)sR6I?[ 5Mm1[0ՅaI;fzeїfG;v V@ &S&3Fo)7[lP'uF`&S [5_VV78~nu*Xe[ubZ l8!nvXabLZc\q %C,*uFzӀ-Ы[oW 0h 2b72?s [cVJ1=)-4 DRuD@%v5M^ɍ6 U97:a  =jJVDL1c#G`g[j7;ze=;]zNL0ZFc_r~5,w<_ fPFW@[ߛȓlP\ {44޸ >eO?'bx~Fjy%[7]t  @)2Ҙ1w9~N"w3[~5"uQt? >3UG,`Z8ߡ_?A5phNJ\0V$3*X}I53V c8l{ m[(V"Q}{:d۴1:Ԭ@'j|d}įVRNbTU[|Hm@EpLFԎ`"&Z Z@ãp"ۀd if !Ԁ#ʆ,ŀΕ/qsqQ9 ` i ]աDg'xILݤx9dCsU8B1,KObf4=pТ*S(Z!ls3?l P4\$̚)71UJmͥ`J['vCҁ_HMM?T-׏U;* iL @3iL ?5l鉸ѐY뼟c0kAX~ql[cuHycY0/FZ &$]wMq{?p]׵о (У P_?7.C`/+}Ȣ9+1H<t<(  {M)Z0_:s+:80gUis0hr-a^He_,,Lupn%hx\ h]^ذH4i~1ٶC XT+ `vn~f't8#q]ώNß[{ [4fa+~&l]D0cs3)@;5IOTPS䩹PVNAY-@dMOF@m8ںrխC .E&4k?/ݧҽ6 1]^'AwQf0lO`g8+wD=[{5X۔8T1vpWY 9~0WVgZʪ@ V@οl 0*ix{h0 Ь3*v6lpo@k1b)uDw;=gإ@DdHsdc]t@<Z`vq{m3"KH:!AaWFj{8` ԧ?_Ξ*@ݻ 4 19O`K>1bׯn| h"=,׮>~џx ^P"ez'p\ ]i-p43ލñEå;7Lfϔy5lpswS%74f>\k+o8|p<%&gMvv6Ne.Ʀ&4W8wf-3 _.z<=Y7DOf [ursl `7I-Cg4^4,|u},pYo8q.hX) ࿻Bm+ʦ&mqԪslݼ ltgjv ۸,~ . Ac^h S{Pǻi .M@pϽ|,0м.!X/#*ZBaErٔp~juwi0= _Jb9Cm\M 7[zìO0 sW.EazlP/ds .z;%l8VMM4O{xoA}駟>}qq@bpN *GߤpU@0ɴwI@?c^/ 6[7 JN;{w[h !PlOK@_Û@%T{ h O3#qL44ɨf &sS _~"8Zs43;"62o?t:L`GWx| ƃ &X!5(m`olC /O9-yI]ؿ@by,h@C1͘LHUj ҽK+`d7 XdvBOVvB^O?MpEPO;Q0꧟,3_GQ%t2z!zДAm7i gA3/JJaJ[_VH{f 3e+ [8.r ho3F\zzsv3nXJff 6C@]z;#v kf??sQvr4aŃɆ,Z^hʱvF"wҀ{u~Q~gZe/IϺbF`@SWPOF%Gm@1@fxvO `pØ= `Jl?|/&琦u+s@{7PL&IdWA/9Kg[]'7KWרI`FL2m~WQχH`oݟ& Yk|эs8UU29?Nّ?j4|/鄈+&6a<H7{anݨRQy3m h7+)Gd#p@C_Tl*ƕgp?RDgϲ? BR03-9=Jրh}||^/#p94a3UR fE|J+ A`Ѐ8,ڎ)=84z$n4lp/Dcj 6>@4 ?TҀL1ڒZZv}ep`3d[+|raM|~Y82@b+[T Ӏ:!(U4% @龣D2a:PLli:! +jL0m Nu$6`@0Ӽf53Rv/0.L #pJ|vM_tYfY}> nd @|gЋyQ+ۍҡ{qYfa"^@s~ sW'w-4KzUg_#6 I8PۙDVZ| <-\F>7%e4`O;84P7P6@3e:JTĕxm @7:0phl_IY[,0a䂎~A8|ȶ_=._pm;pF~`` N"q4+Pp\o L,?}߮ }w0g7`7B\.lW+T:o)umWx ~=ԳNkMP.sߣJ+࿠) Oz %srIX%*3hG C0bLzzEҚ;`p M065V  s5z>/7%Ur{hew}`.EI .+;V[͎jҞCj*HgDN> ,onNH]q,N"z ]k~O4t$A.,4 ptQn KG}STgX\PP{ ٧@tKm1-wo74vYf0o6QYKD.lقA3H카GbZRa'R57* @u6`0VZU0@w.%$;]tag骺/'Ϡbߔ۠ìOc`PppD0 ̓&3 mF$?T8PGr8`+0Nd H#Rou6;2p<*ugð'ո i"+4m'3P@s '@@ZX:@/H`\$P}37=aa@PLO L;V6dzm6)(g:_GTOk} ⬝ڀ/L˽\2W$:aq0@ |G ͶqØWx 9 o'Aן>}RWǀqzi.${?7'0gy6`w+Gh˫yk4lzC9P2d9 @-!c(ɳ$e@k7vy`7&E7`gQ*;sv/hܻ,&Pn]%G<LsnfMûjKb4u}AmPYko O*^Фm pU[8H.$6:OE!P0@II.[%4_{F\!OKaZmF Vi@8ۃ6ѣ,GV|`IY`s(i}-f ,A,7X̳u~to0࿍݂\z9KÐXūpL\D/ 9 Zà^D;$2hǀo '"#ki qdPQ;%a5J _d7o n t &58- }C\i1%ɰ.6`iǯF;!*z@Nc]m2De@˹kA[Y,u`3 H(Qs&HB@,ىXwƊm7# ¹??9 `l0HpL5kKLtlޢ }$ @?tcpdzNS?-C;Gm@18ZďwBTwB`puN넬Ҁ7&k l|Be*]N Lj@dQJ&8+\1ŢIkr @d}NWfLi52X 6UoVepP"]7=04cʖqXƙ`珮G'xs: |]ȶоw0Zy `.CO.k_@m'ܫ,7ūD͡ ؼ I:puwb9\%c)L6eOP0╛4~%Ty"%aж84nȹ,ڡ!: P4 Xb7Um y'O&h^Ts6 `W44=BBN7 5pjhQ[mT @̃Y-a3t=uiy ~fߟ Iup7Y$.0ځU(@j.,WGס5!3\nU\(ڪ;k6m; sroӛ'7kdܗBb)[ cW\n70UqzmśҫdT ӎO:O.5f#*n068'*NUqY&X)r Ӌ7Ctv%Pݱԙ)v,Vf;e0 vw{]#;!ɿ {LJQM{.{wj9d.,Wʚj~c@ E~gMPb_Arn`K~Wv!#2&QW@ f'H!@2rE"ޤʃ ȍ?erM=)MJ?Va6cK~ MB|\YJ5MQ>> W mp$I7{{,qn3{s9 `[)XI@xk_F1l'dy(rht6nN@CMil p mϽTF@˯fj@f4Pz,x۸dW 7Øzb',E_Å< tZ㱧Ǿ`ٲ ts_H zR{@lLf ` =`< UAmb\Ʈ*%AlL?Lsxg<ø@ d6q|{[2>`n*7b^@t7Y_@_$ow3k@ckUqbλ9êY!`2.Gw0x63c5TKzF)#CQp] @]~flme@D8ixڗ ]-tCa s"4`pHmT/?.x<N=-2? PRNmS4x=DtR.:[ Rɭ=t6 rXF?B~o`2/W>10O3vv>*7%&ゾc'e?= 9^Q0!T*vVϿ 3n^۵ɐ,~30;KKF;X45d"߭ >; a/uB}M:- ]umm<ώNž&'.h~9Ck]^ Iք M ^.M@y_rC<? C ),뻧yUXBa'YV ~ C~U[7Iv> mn˿Jhl9(-c}!%ǏiYv@Q[j 8 ,'i(NŸgp?_- 3w,~7G\݃i&#dzZs8UqzcWX5}RcY 2 j+k-,0X{5`*OKzk> nGXj:օ0@: >&X %]UϦA cTS~5E|u2 6Vţho$l̇j#h 8Iӯ̭z i)Rx&#l! A Jv{A'71& Fkw 9_ [FlC;O%PA$TukAv@n=:SdX4;hT)^@0"3 KA0{d- #f{$'T%j8,@;f)u+-~-1]ta`x:[ FU TK,>HF(f#-ta=rD)M$&/G=&LtXC.9`,jo=~OC~a`F6ȄT*n4IX6 JCC`?V+?f(lE P},|Z#@i+%<dx/)x Bd z VUo:X؈@":ߵ7t^D7cV{ h+'A`*ƻI*AT~h %2p*LL0`:mNAwAOQrܪ8Ma} 3S_XN^X"3@ u ][jm9lUawJjd/߾ r+ .L"ԗ0[]ױyZBB_/L" YPW=*-ΠPrXspDiz!]wꁨ {&Tu-u"-8'@.*@8C_%xUR]\mdwřUq]z`K;n53gQ:.+Ҫ% m8Uq0-q epc$T"eROe;;ذ'W!W1gD[yKOfﳙKa$z aAzLJ[/$f Ν g9J%x" Ys Z< (Z lPhfʾ Nr\x/]\D4rt!.k/z rFG`Th!4Jr$(OW{[O58٥Snqy僥C3hԭҭ9+!8m5 Vd觞Q;Db)Pv *R=g356)րR{iJ1TЋϟ=`/zWŁjZt%U8|| []+0[j{߱s;@^'\O Uqq v⦡r ZeQ P2h8z*)] ,ݥ/xUlêNl29f2;֘+B>= Aqp|N/c\YàCIWyO{M=}EU!5xUq)e}v;O n"%=m x6 lâWeI0s`ފJ{U\kkE͂V bfі8x32Z M@iViTfYF[1UA\a\8ҽ ae~/P9Pd3؜jUp|-3}RֽG4Rf1"^Y':i@#R0N~8Q80]d%(UE͆sʜ? ډm}qaᯪnxzNO|pz^*c!gff ]л82A '`P&۞cO p*@? \C Hm)'a=1MF! T5uaGP"7)t= iYm ; èN?}p {U2Vbq3Hw*R V{iB ʍZHP69e@:?yT[^y@Uqz+T&xPD5\ N/Xs1Mg;~ 0A ^gSϹi<|b5l1x%\fUyn-T.p5AoqkTQB/㌱ԭ`? e줅>0s ^~|XYF XD UʨC)t}-N<\)0N4@`/z ਧh @"Ix ZlfAgP[9 <=a0.@ ˸e#4d<F>> Odk\0g /^N)ɬs3j{q-=+dÜkL&ZҀ@!>3Jz VP'j>D@NXe sToI Xr%2')`I p6 -t.Pm#TQ=BLjMH0fX28T  epx~ eYTbJ:!!&&*%5W]WQLF뉲6R}CepXY׋}ϥ 8 `lm!L,%vuL.%ή0ݎs 6.h%פAu1Z6ɱUjԃ^gWeO<@>+F|>@ ZAi6Z )8JRJ7]x;HpU`YT4/vO(u7%=T|!pxJoM"^'w `Iɦ{ hA։#~l<^l8=Z5\"s6)(i:5;g &RH@OS3$ `<)RMs-QbqR78wf#wr]H"iG;Ǧ@q-UN..X)|!] 3bp1[h#7)O㽭 : Q9R 4Yv45knD Ŕw`Pj~(7()0iMj7P [W^9![:I+ozAz!; 唫w&Y "p$Y+# 1:l eEZ >&Qi@`IH)rEBM4X%2ߌVoDU =:W x-d{4CX/Q84B6 fEa7>mr Gbt"7y]Rׂ6rA)4 Qr K\@OC:a$!½BĠ!Be~Ieɟ~xq *E|ۉqLdsk! U4QeM򝥂7*Hra.LTtG*x U,lxU f S$\3&gcu >)tJ i]PQ4bdp m@T I%S^١8r HA)kATSLfW,]gz#RDl4o+/ iV0el,Wpd7;m A!zl ek$=>ꚋoBlIin(*Ewj"|)k+o4[bJV ^+;zKTNc#p pP|OPɥAb%nH4)WEC"\}V(T>~)\A!r{b!F_(Pcbse]v WI98-8H,%@ i.(d@Tʓ:ce)!ץBH-PP:ij̫Z4󅊆 L fk(el)3/Xd(. _*D^}M4`^0ա5AוPU@|#+@Ih1ӬII&x)&ML TLCmU PkL+ ^2|#x[X+_1 }85* p3Q!lvRNZ<Cj.XH }ͭkD{&RH9S c+,L^\tÐ[:JB iV* ? a~swrGQԊۂ^ ҈=sp$G `0/4P3B@լ@_F*}%Ui))\oB oK1T) ^mtp& I'@_+A?YG>̤qx[Yp:Y^Wd6lߨ!F,vQ'Ƴ8:Oe//H!1w@ `rxP9D!* 7J&dqZ ]8Th_u!{K@|rS$!6 ! ;<&R`rdCn"0&6 /5r27*n2k6ƫr՘ދ~ũoBF/bZ&>Y$1A'#y,I[%"!Yī2{dT^R^ 5YΤJ{S!,j> ziZmL0XsՌjlEwoWkq"Zy)|-JϦ+WED5mk-h^)>d\.m׻1 9N|*ߋ,wo\4]^c̞>覫ˁ 4tn¦6m8HO\il|=JgYHd!c'քwCiT]WP'P$0/U@`LK%s*z}c?+Gğ.";w௭/Lx m? _]RB-q?jT(BVztIENDB`Z' xdHPNG  IHDRraPLTE H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤IarIDATx흻8c1Kyc9>Bm}^`_oI`O]gz'4%JU)+L")Sƒ V.@R UυfWoz|}j9_#&&ؔM|r}f5{>LI yOP'ٕ"W!BNg[pw: .T߰&@WU#rSGUlbZ +O'.3G]zJ?(6QȳӞ=e=lY!7KQ4=naO;hS B=? J1Ug\ўwDԺu OUɬofJ M78OxwM?9_vT`@k`Zt/;o 2wZP7 aj}xj=o p(hnأ>9"Qa=o0,^{>blS3,$`Сۀgm^ڀ +7jsP{}zg51-`Co3#3?cFYdr 3xŖ/&oR Mclh9V\Vn wBN#(SW Lip % fR*HggK-6"ɾ.R܀? `_ޒyJ{V9gДμI^-c rM[CR@ Cn%!h!wC*K!7:Cn#^y+G8Bt<Ǒ7$.~.L) i.i<Y g~H7~yYar>\4ξ8"Rdԓe?د@2΅h3y\7bKS*PәGo)l@zXCbP L@bQ KM2oTdC#"!wC*dR:*j90sRS!++b+G|"bY0: :@,O'16u@„_m x]1I Ve1L0~ R8eUtJ?S5ǧ>ԟVoI2(VU8,EӡLWf2 (2 ч$\7`oy%һxd(+$z:Fy] e*|X**&db%ͣ3]I\ os;X8 /|%,TtL0 s^$䕛@^te& ­T4xd@ׅGM&ARJ7LlV q&t p1pQxP'E LRQJ > w* HQsm'pD_'{y @KYJ65\'zE HįsUw -2 R'6./T̜ې[`mx$KfHb)wf,FƾO`2X쉹1 A`EޮpK+\e~q$,92_J(2tD@ QO'3 Ie:dR+u_dʐag,:~wbbo\0 %P#Fj]&p^y1K($>_B>o';RK ѳj@( )GEO.,$TN%JktX}OA2ャ R9 @z1+6Qi}DYBp7.eO$S(=U{i9Ų&JIEKN̚`$g*ZK6(k3 V*;5(k&XM0)V)_eH$5PCP0@/cbI2\#pQ˂0`ER$}-X>=uNHRIBrdZ` prBՒBsLpD/ǂo ŖLn+gJc3w.xCp990X2iQG ~/_ O4N X~wt6yF{BK}y>0K ;+x$ C4؃0猑8I'tKs S w"dXyFy gGP|3&9x*:0LJAS, ) *h-aMHL{)R1z)/fyǖ(xx=eu>3I)~:*iQK%-3wK +d6ȯ<,L2%Dz @5`|4 0HpVdݒ؂h} Lp 3%Y ?4&-MUQQzb !B!hQfCFTB[:!N>T)> -W H2TxM =8yԗWxHe`u}?\8,OW\Юp9EgUc NC,LL.6k]UbYdk@`.f rsek#!q1D(p8^Tzke:|Hv уK\ċ2?QgQ,aY,.zK=\ĻKų'e8|MH. | ?/lMxi(^,%ɂ5ͼKiUI,يb9gRNFQŧ3=yVPJ,oPHN&EqĸNc<8\"38XJ"#ΊNм[eIi\/k2!7k.ڴ f|a5u|.fexنh*Ǿ%o/OW7=p*yL& چ5;YC< @^Z`ch<_lY|i?>Z&.IM  3rJlo1)S &D*Z IP65e, oH 3[-Eð\I/ f@ @̚J?s +J"MJ:+L(YU@t,*a]LWΣ6X8D"?MWp^Pp k9S(:>1hMCIa?>> [ǯV6ALX{sxQD )ҩo1ik}֥SŐmя턄= X i2UAry `1TN`4`BO<ͰDHk"}¶!wD70 H@-F ? `zH@kQ`Oz-pp(篳QbQ30]n^- zGi`Yd58-vzUcO U'#t(@n .N~aX `?;@ޑ# -P= 2@']*t&9?A5gk4o(Ym2= `[;Rz4ݸ  M'D p[ Ğ҈ |_RM菭րs:!|H _b]<*`R5rO`l`x@U= J (rFu%Jl59 `HtQ K{݉g9-H.w+X0J`*+TM XlBi?Qj[cs@`(|i/J46:,u Lj!yBc˗N5@ hytNBp@3l Ҁbǵ 19_GXO`'=%- 7EjԹAuK]<0*0v$L-@MPݪ%՟ lZ :!@ތ`åbM=Lgg^21%*ԙ .5?qT:ōPizТ*(VNs2v, s9:!VNV];cbh6/J<ԶҶ 91lKR̃Z~q!&G#x|V\ Bʺj @triK7::!ؠdx>N6+7̔{/ScGH6`fYoHv[\FR07:CNϚ. ދS=/hΠ5NMY P +DM OiHxZVy5K `cY'mHilku}euj<QH wT^Z'1FMgNRo/k-cV+ @r}e*G߇o|^!Ϛ?I_?{C0M'~7,ȨvM;aa:x  +^q4f\+I lD"ޚhi`~:28!Z뼟c0kAX~3qZ@ߤ;WJ:AkR0/%ę@3'/Kk} jyQaTϟteHQ F8Zja]b 7Yt["z}Ɍ= J#ij4}Tsqa'-Az{Uis0h9 ,$޲ .af:8 i<$4V+jRؑaѓHۀ Pfd\F/_aVxR@8g\'Y^05D <_L"z4]^쾠&" o!鉀 П<5)) eP藬 G[w-W:t |ھ: ]g0 /|m4_s_qhcɆxEUV8=F;aQl@nՌf`Y)XN:!Pp{嘶?Ӹ.d&VHkϵwݛnG]un0v5ըT7NC7Rq bDRa i~RDNt2W:ll1'0Bk]>N @?Ϭ4`1q] @s34K8ݙ @Jm+.?{ %g)_WfC!0F5DfXʬ]'}.?M ^ ez'p|[-hgԽ[hcMKyn-NՀ8"Joh|l.x]Yn>34e&gMqZq6Ne.Ʀ&4W81;vBn1O~]zi{f2~ѝs` ڙɁsz`gځs6 >[_k k 0 @Ո:ka <LUF(8;ǾΦW w.N@J]ںyN;e> 9)2+fޡ6' C :jf/FځxMgT ~=෾ ktM@65aqr] `q2CE'3k0^ <@D3U0cpRfIQ(a8 #868Q h]yz~YZ޴֝7:bܓn L#%$0D$قlp7q!;0NFpa6pheڀ=߭q-z8hɳ1n<.^@r7?Zl p _`F%V!^ DuM2b/k)ZwsΠh;! c:_Л@3?ps|+Œ@׾hA9;f,x,ûqĨ-'غtO#sD 8?Ysģٶ3& nNt}G9AzGgL==g ڹ'o4G˩D_W DЌ<s~,Am?? 4Zg "n *zD,-Հ{?Hh2y/"|snϑ'lEV"YpDj,86/o85@q]}=%C42(, a^6{(HzYB" @;M?g7 Uw6>>mu/oѭo}+ouY @4WGz|ҀĭIewt϶= @.Yf&W@5 ^E,5ݤ p~׸Y݊4f%aрq8P5&:jR*_ e\0\QJ)_cA pWipQO?}Tؽ◁603xhDpi*V)c0:7L"?`xڀ!L߻]b  ~FJZuO 5Z5L٩_;]d%?Vii0Q$6MT ?D&ptti#hgv$}dm@ewԿt`AEl60OF"c@~\ uo @E4 m j;~ ` nO~*m!ϖKP!z+dn2 PL3f֙`@{|<ˡ *F0cz-Sx^ `j%md 8x3fPEU,5\,h`<3Gv;S[dd'T aZNg6XVgì* òLpdN9(U4% -˄@ 0鄼6 X,̴Y emZ e2}_8e>Hr;  &z[/:,C?@,i@BpB[FY b_T#kJvt`Zc`'JuAGeUU}>p~Y_@ԫ8IWT pYZkqQT}86 u&@ogy!6Q! ZtА]'HGB ZߔTЀ?@ @C@Sdo@ 50͖'-nMmPO;(yE{Xq)?$KY& _\Kp:G@h}ð_h^y7 UbJ$j ybvz3|@Movu_8b8m,``+d5&VF 9JӔ@>e0(ɼA Q) P-HjRHgD )d)ˆ.폵o?'ePtdbA..˴ Px:a=Ì~ԸK&8GWce' Tq.T!3A)An[L M[Y0 чS< ݤOЃ< @ߓ8XH`R~U68N~DAؠtRF `Tmp 㤿P gJ/JR @B& oA!'Ї1iȧS~>< "`ky m&$?T8PGr8pI7EI&xtk&\c@~˹G@|aocLLrL[OhlE[.&x[gZ܀qޙ \ S? /f髺ڮEVо \IirB߮0{J:x~$)w?xƔ(’Mp nvn|n/@Oc<0jJԄb%~tI6,А`ʲ8WxzGImsv0]O3>jc`G PJPF$øԚ3]LKdgmr a:C ՀL?VY04B']G`&^@[@m.0Q 0X3Qۜvp:I0a(xW*+ W-[}݃BE8^ت1`'  /V$;dfgvhmWuAg% &N^'m ٶoJ2>me#av4^|B49ЍB1o3 `oT'#%uONlUqۺYAĴ 63/@ȗE70H՗^sw8n!JrvD6p6\VSa{t9 4hࠖƀ3p,]zKQ@dʲ.@:h|g!ݻUMm8R4;Sʾh% S k6Q$mX._1ٚC C_W9!2 ﮽K],{59rY3mv?[\sjeNI''^?PiEZ{X0cص=uUBwpp &@ BjIQk 8v*zy@30YiZj6`K8O'68Keg.o` @\myk+yP5 `e,"7z]@tcpuݵ>y V #c$7w\ j hn [@Akv ըKCY'd/)h} v}sF o ^!"^:́/TϿ*7\@P`hȳtm0: #Y6]$8лX EGkd 5"~,xa8oieH}GXH-;BzfُJ8"oi' +\X頫Ո鄜_m$J&ktDO9vL]$Ԕ}%M/!"׫@&*s78W28؀Ϭ=f"YckyQQwQ;9G;1cʎqXƛ`珮샄G'n`Wk` NKU %нwK0Zy`g".C.Hk3HkZڞd=Ed>sDu`Y1+ s a8Ubvl p$_mZ NVEBfL*k4< CJx /_OP2F mC^8;dZPdj&KG bASfT:z|^;qD9 c@E; :GM6æaBC!spK`"/DJOji"Hi'~b\,m;gvR,M_kK-``&A-k;V.o7Y(fi@MSrNliNs .A}%mpGvrՈ[e'c#z,(Dpx k!86z= Oր͜o6`2~&^m@py7I W ;o:ͬMz9O =~t}8DmhڎCq+xB>TJ^I̭`fuX.pa& Vt >ׯ@k ր튰R5aFho`|33 8>%`e]ڽI%Zyih @ YދKA`|M|twH)M8߯_7F2-v~\Xuepޮխi2 .Ez_pm4G;"ĵ@T)hH?쵔vNB.Jw~%ۀ28qaT`@(6⺳7{D_I/ߖh'P'R Ryܮ'v fдm  &k,W&VV1T]>(W m[p$I7{{4 z7"O~z`@; 5ofmZhs4UuB||CqCs`tOCj@+86X_ w?믅Xɾ Dd2c%R@90+./*Bs_HfR ٘,| ` =`< 0HĺxA];#cw%Y8-UUƹ `LG0$ Z"ZOm\0.к6wa( )l< Pti$c4_ uTJ[ ELs#:hN\>:$ L"wҀ @Geb!,klVh/ t@j6 yU\tfA>@rmE 0@憱˶L2 %ڀz !pep;v 2F`tkd#Ai/`{: @<<;#s̯0wA; )HGBnQ-d=3 M 4^.M@y_JC? G-I>Awp. {Mgh~tb4 Ay7I$Ubpӡ*ίi7 @}[oe VBVz@`栴Hq`?%d-Gf3[ 8 ,83C1>N 7\p34p!K?%uu{976rɭ3q*_@.?p}cM`@[K3LdZ hD%Ef Y3YȟR* y,áMPyWhf4=~݀*hT 9a3+nv:8 έ ۗ?z)`@ӘI$fgh3*za\/~YfB>>2%J)6^ףZPkQr CSE0˼3vWšX/ D>~v$eݍ٫qV "7;8q `b綷htB |ggkW!xiP'`ow4O5P|lDq JҮ. )ćlЪ?v:[ϼ*n>&rbxܻVs4Y\~8٢@Yx?C+Mo~ h6g6F+:LF>>5ga|"/j,"LxYg|F$% &AP]ɔ/Yֈ^4;hUd42 Z`3K|eggbM`; $#t^7C?}xU\P Ld8sBlL[D@ztw=rDӅXlU\vUi^T1r'$&8&`&(4_z6 9ٔ|낦Uqї'a%8[&TxNE`i(/LWōv7r3 +65fzx/6d8U=L1 sV`UqQOtC cWT&yI6`B!D /g p0rA@Y/wy^;KeHt3f #eQ+YӋO~njiYrGG4}fUq @T.\Q ݩ'zӃ#=)1cXSltjq>O2^w ]U pJ񪤺6a'˓coMt^qCЬA|vΟPgUKa.p4`[Ij0{9aU5,O MQg̈:(tXGg; XHt\Ö56\H|?yKM6J#,3L&@ PP@mP+f* r\|/]ZD^ 9l6`5Πd*Gҁ8L9\ ; ] A-d@5^-ӥ}(A[Mwtվ"{8i: (kY^ܴEe "3-<",m}8ٰ<뀬ꁄUq8F=Y/Wy3!@>:nQt||-94M` tX8߸YUq,z)bGyl8uZɠE!]YOj }_Ԁm\7(;:4L]k'O2V pDꗺ]@43ٶ^ƴ A@#L~5fT{gW-X A_40d!J9jFn6Я\d0dmoFP+4pfQRpU]%[TL)0M+:xz:bTt%{? `ӜS1Ft2:͑k@+RUAĎ"ܾ&8g:! Y̗!t* Hѧ)s`,{:'nr,h3kB4"@hf@WIXf'-''٣}rk8'1(H׳}ؐ'`F;!fJ8.hW (2P }fDz6* `w~7-n/=u d P*ۛ!4v?i1`t:Q. VJ}/Fb5 Sз,p*`&˗/NjE߈+ @vMPǐ_Vݛ짷a?#'7ia;>lun!h`6 \Ҁ}f]#cj@.Ŀ1#Vg `ҿ p3p4SK&G{S$s; @g,h7Ʈ[9 >=^0P D~Ψ2V>> 4r`յ vk7 h;Iɮ3js{:` V s(1P,ϫj>D@,NXe : Ʒamx$zȈ 2[^8x% U a=BLjmH4|sepup3 b}^?#x PAnYcn\1 F1ii.kn&ʆ DiXgaf\/. 9 B+8ゖ p+2VW]KZ[am3gغ]7Fץl\j_GXߓdǞ@3%Zր?롓2r{I@0q;}!Y| S&P? @ fizpiAX_;f=`Eېa@ 9 >;KةVXc3j S+\dn`'a',9ٷkj `3 `դ,[ 7=~D7ip+kN]`a|@38.2,j".p6B-*@5 R]d n#=# aTax #0A0M%qrq- Z8q7@k[h`V7G_Hzxu פADB}-d4B).oD~Q9e#q/H}ECጫiX5fkRp\<%*<5x0Vdە۞;JQϛk@:@rnY=-LuIM0&4 ~W]s=/LWJꄈմ Z1\ !dpOy#\Arx 9[ȫD;)(lNtw9<\gR GkL0Vwocɭ;$$<jlp w8~x\YW~Sp6;WNp[n%ʍypOw8Mؽ2x=¡Mw%tj*:CJDgRA~,2KQ$g_T5Uܪp!&vJj4[4=|q`2MrF7 @1:H%91T_,".\0͵Fȡ;d0|pڤ cqhH @gqJo9]hPl4Uq`:6;EYɲ&jd[}K,C8;.&)`Q$#@1qt0 UHbbyi@*fHbun(9PZ$w*E<Lח54e,fUDDXŰJ1Cxc?`PG:-U$SҀ4:W|J] &  <4]FJ fH.EY Nx2C$"k%GY‘E듒 zH ༡C>|M$3% ("MbMЀEV65Qv@(aV:8:@v$c}V:;.`yeK b}ԠorodҘS$I$)m sJc$ % O  x !a@&.尳5Iz>x#zw׶JM6R `ol `mPmtx8/o%I]g/ 5j]J2' ?g:?f6!p8U甄4`'e q$# Sb]0[RAbJvRБ,á$i(jFɭ1,T4X 0}V"q#rT>tS0 )= (,umMI)vFTJBJJxpNps7J2je?H$7W*(8SlAIJHUadtܜTh@^^4號rRsP /+d% 32-ߩ<6U9RqKE(*;4^Ԁ3^ ~"+VJ[IV~B*1 g%QO^oWtB|Ekjehc*fC8yɤPY $) %þ+ `l,pRG-t&!r[<<]bw`oz^}wM))mV~$;Jf|׳T+zC e.jabpR@49 xS]]DGB<=x,|E <_@]j6W$'6 00*%E|3)!IY#\"B.dCLp1<8ug1JmU"~nJ Oq3h!H* @]"Հ @TUtde#ĹPQѦL㿜;Ar FDٙҋ${R͘T #5mvh @@ K/ B fMZJ&.+Ɍ0L@4:!p3. <يe,_ KP))f:!Aۅj QY!Qo캻ͮ.#tD7T!p07pe<c0x&K-;$Vpo`0wx79<)&%J]RC2NV;|WurRF+ @ux=$M=`'vٜ~}!5`o)=n2:1Y[~Q@zxLY'H;[5O JMcQ 7wl7/M6@_9<5z9 !U;0N=L]l Z}Ҵ ڦa4uՌjlEwoWn쵽m ;V^_aU @vx|?8Efl+0˥z?&$aY%C{URcJګ~ p3sߧXt[|` D箰%M[9/$2W^.q͞Y hq'քC~T]7N$H `_>WMluUXj#"7b&lT߹8&%(vI= jJӏvyIENDB`A&x.100644 version_00001.jsonoO@ss{?Yպrc:xR{ "printable_strings": [ "VS_VERSION_INFO", "StringFileInfo", "040904E4", "CompanyName", "Lars Hammer / KIWI Hamburg", "FileDescription", "TDK Pinball Machine", "FileVersion", "1.00", "InternalName", "TDKPIN", "LegalCopyright", "Developed 1995 by KIWI Von Wendt Konzept GmbH.", "ProductName", "TDK Pinball Machine", "ProductVersion", "3.10.0.0", "VarFileInfo", "Translation" ], "fixed_file_info": { "signature": "0xfeef04bd", "structure_version": "0x00010000", "file_version_ms": "0x00000000", "file_version_ls": "0x00010006", "product_version_ms": "0x00030001", "product_version_ls": "0x00000000", "file_flags_mask": "0x00000000", "file_flags": "0x00000000", "file_os": "0x00000001", "file_type": "0x00000002", "file_subtype": "0x00000000", "file_date_ms": "0x00000000", "file_date_ls": "0x00000000" } } !xX100644 palette_0999.gpls/G`—q[100644 palette_0999.png^ j>wan"B2/=$Ix8GIMP Palette Name: TDKPIN resource 999 Columns: 16 # 0 0 0 Index 0 128 0 0 Index 1 0 128 0 Index 2 128 128 0 Index 3 0 0 128 Index 4 128 0 128 Index 5 0 128 128 Index 6 192 192 192 Index 7 192 220 192 Index 8 166 202 240 Index 9 32 32 184 Index 10 72 32 184 Index 11 112 32 184 Index 12 152 32 184 Index 13 192 32 184 Index 14 232 32 184 Index 15 32 32 240 Index 16 72 32 240 Index 17 112 32 240 Index 18 152 32 240 Index 19 192 32 240 Index 20 232 32 240 Index 21 124 76 48 Index 22 140 84 56 Index 23 32 72 16 Index 24 72 72 16 Index 25 112 72 16 Index 26 152 72 16 Index 27 192 72 16 Index 28 232 72 16 Index 29 32 72 72 Index 30 72 72 72 Index 31 112 72 72 Index 32 152 72 72 Index 33 192 72 72 Index 34 232 72 72 Index 35 32 72 128 Index 36 72 72 128 Index 37 112 72 128 Index 38 152 72 128 Index 39 192 72 128 Index 40 232 72 128 Index 41 32 72 184 Index 42 72 72 184 Index 43 112 72 184 Index 44 152 72 184 Index 45 192 72 184 Index 46 232 72 184 Index 47 32 72 240 Index 48 72 72 240 Index 49 112 72 240 Index 50 152 72 240 Index 51 192 72 240 Index 52 232 72 240 Index 53 152 92 64 Index 54 168 100 76 Index 55 32 112 16 Index 56 72 112 16 Index 57 112 112 16 Index 58 152 112 16 Index 59 192 112 16 Index 60 232 112 16 Index 61 32 112 72 Index 62 72 112 72 Index 63 112 112 72 Index 64 152 112 72 Index 65 192 112 72 Index 66 232 112 72 Index 67 32 112 128 Index 68 72 112 128 Index 69 112 112 128 Index 70 152 112 128 Index 71 192 112 128 Index 72 232 112 128 Index 73 32 112 184 Index 74 72 112 184 Index 75 112 112 184 Index 76 152 112 184 Index 77 192 112 184 Index 78 232 112 184 Index 79 32 112 240 Index 80 72 112 240 Index 81 112 112 240 Index 82 152 112 240 Index 83 192 112 240 Index 84 232 112 240 Index 85 176 116 96 Index 86 188 136 104 Index 87 32 152 16 Index 88 72 152 16 Index 89 112 152 16 Index 90 152 152 16 Index 91 192 152 16 Index 92 232 152 16 Index 93 32 152 72 Index 94 72 152 72 Index 95 112 152 72 Index 96 152 152 72 Index 97 192 152 72 Index 98 232 152 72 Index 99 32 152 128 Index 100 72 152 128 Index 101 112 152 128 Index 102 152 152 128 Index 103 192 152 128 Index 104 232 152 128 Index 105 32 152 184 Index 106 72 152 184 Index 107 112 152 184 Index 108 152 152 184 Index 109 192 152 184 Index 110 232 152 184 Index 111 32 152 240 Index 112 72 152 240 Index 113 112 152 240 Index 114 152 152 240 Index 115 192 152 240 Index 116 232 152 240 Index 117 200 144 108 Index 118 208 160 116 Index 119 32 192 16 Index 120 72 192 16 Index 121 112 192 16 Index 122 152 192 16 Index 123 192 192 16 Index 124 232 192 16 Index 125 32 192 72 Index 126 72 192 72 Index 127 112 192 72 Index 128 152 192 72 Index 129 192 192 72 Index 130 232 192 72 Index 131 32 192 128 Index 132 72 192 128 Index 133 112 192 128 Index 134 152 192 128 Index 135 192 192 128 Index 136 232 192 128 Index 137 32 192 184 Index 138 72 192 184 Index 139 112 192 184 Index 140 152 192 184 Index 141 192 192 184 Index 142 232 192 184 Index 143 32 192 240 Index 144 72 192 240 Index 145 112 192 240 Index 146 152 192 240 Index 147 192 192 240 Index 148 232 192 240 Index 149 216 168 128 Index 150 224 176 144 Index 151 32 232 16 Index 152 72 232 16 Index 153 112 232 16 Index 154 152 232 16 Index 155 192 232 16 Index 156 232 232 16 Index 157 32 232 72 Index 158 72 232 72 Index 159 112 232 72 Index 160 152 232 72 Index 161 192 232 72 Index 162 232 232 72 Index 163 32 232 128 Index 164 72 232 128 Index 165 112 232 128 Index 166 152 232 128 Index 167 192 232 128 Index 168 232 232 128 Index 169 32 232 184 Index 170 72 232 184 Index 171 112 232 184 Index 172 152 232 184 Index 173 192 232 184 Index 174 232 232 184 Index 175 32 232 240 Index 176 72 232 240 Index 177 112 232 240 Index 178 152 232 240 Index 179 192 232 240 Index 180 232 232 240 Index 181 232 192 156 Index 182 240 212 184 Index 183 0 56 0 Index 184 0 96 0 Index 185 0 160 0 Index 186 0 208 0 Index 187 208 208 0 Index 188 160 160 0 Index 189 96 96 0 Index 190 56 56 0 Index 191 56 0 0 Index 192 96 0 0 Index 193 160 0 0 Index 194 208 0 0 Index 195 208 0 208 Index 196 160 0 160 Index 197 96 0 96 Index 198 56 0 56 Index 199 0 0 56 Index 200 0 0 96 Index 201 0 0 160 Index 202 0 0 208 Index 203 16 16 16 Index 204 32 32 32 Index 205 48 48 48 Index 206 64 64 64 Index 207 80 80 80 Index 208 96 96 96 Index 209 112 112 112 Index 210 144 144 144 Index 211 160 160 160 Index 212 176 176 176 Index 213 208 208 208 Index 214 224 224 224 Index 215 240 240 240 Index 216 76 40 28 Index 217 76 28 40 Index 218 40 76 28 Index 219 28 76 40 Index 220 40 28 76 Index 221 28 40 76 Index 222 108 88 32 Index 223 160 124 88 Index 224 232 168 104 Index 225 84 48 16 Index 226 92 56 40 Index 227 32 32 16 Index 228 72 32 16 Index 229 112 32 16 Index 230 152 32 16 Index 231 192 32 16 Index 232 232 32 16 Index 233 32 32 72 Index 234 72 32 72 Index 235 112 32 72 Index 236 152 32 72 Index 237 192 32 72 Index 238 232 32 72 Index 239 32 32 128 Index 240 72 32 128 Index 241 112 32 128 Index 242 152 32 128 Index 243 192 32 128 Index 244 232 32 128 Index 245 255 251 240 Index 246 160 160 164 Index 247 128 128 128 Index 248 255 0 0 Index 249 0 255 0 Index 250 255 255 0 Index 251 0 0 255 Index 252 255 0 255 Index 253 0 255 255 Index 254 255 255 255 Index 255 &׵PxPNG  IHDR?1IDATx!o]u{⊊+"$JBPD & H&^@ STL4<{κ|7.~x+guwwWWh7?4&@Hi M 4&@Hi ZyYDaIENDB`x_u{ "source": "TDKPIN.EXE", "source_sha256": "a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c", "resource_count": 63, "ne": { "ne_header_offset": 256, "resource_table_offset": 368, "resource_table_end": 1204, "alignment_shift": 8, "alignment_bytes": 256 }, "resources": [ { "type": "DAT", "id": "400", "file_offset": 118272, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "ae9dbc3c6b2d559a17c5ccd5827d5e7b89bdebb48b3dbbd350696076d518a7da", "raw_path": "assets/raw/DAT/00400.bin", "decoded_paths": [ "assets/decoded/images/dat_00400.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "401", "file_offset": 123904, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "599086497dcc01ebc63d007ae3d0599d581b0434eb91333f42a5f099b92efd6e", "raw_path": "assets/raw/DAT/00401.bin", "decoded_paths": [ "assets/decoded/images/dat_00401.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "402", "file_offset": 129536, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "4bc9cf746a6c09f8a29a4a77c2e6b9288cd7b0688df81f18aad2b9f7182f1019", "raw_path": "assets/raw/DAT/00402.bin", "decoded_paths": [ "assets/decoded/images/dat_00402.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "403", "file_offset": 135168, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "b21eb9ce2c8a27966ff9b762545ca6a468eec31add1fbdab0128ef58b450ede5", "raw_path": "assets/raw/DAT/00403.bin", "decoded_paths": [ "assets/decoded/images/dat_00403.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "404", "file_offset": 140800, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "c5edea71429f419f688a49b2e494bb3b82b90912b38d59e0b5d6c15f10b75406", "raw_path": "assets/raw/DAT/00404.bin", "decoded_paths": [ "assets/decoded/images/dat_00404.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "405", "file_offset": 146432, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "2302a4e768636fc3165a78e1c65f0f604f8db780d5ff2b4007773593945e5537", "raw_path": "assets/raw/DAT/00405.bin", "decoded_paths": [ "assets/decoded/images/dat_00405.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "406", "file_offset": 152064, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "a785985480c2e4839d5a4e7aab24d9de67e7cb6f5c1f6b60539e154fc82100d7", "raw_path": "assets/raw/DAT/00406.bin", "decoded_paths": [ "assets/decoded/images/dat_00406.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "407", "file_offset": 157696, "allocated_size": 5632, "flags": "0x0c00", "raw_sha256": "b9b046bf77ac926cba371f1114693705b8b3b086f48a3d5697f1cd707e7a7735", "raw_path": "assets/raw/DAT/00407.bin", "decoded_paths": [ "assets/decoded/images/dat_00407.png" ], "actual_size": 5452, "image": { "width": 42, "height": 123, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 5412, "colors_used": 256 } }, { "type": "DAT", "id": "600", "file_offset": 163328, "allocated_size": 98048, "flags": "0x0c00", "raw_sha256": "b40c7f5cd5431ca29f238ac291f7c9c26d9823450acb77b14fed5d06748f5d3e", "raw_path": "assets/raw/DAT/00600.bin", "decoded_paths": [ "assets/decoded/images/dat_00600.png" ], "actual_size": 97960, "image": { "width": 544, "height": 180, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 97920, "colors_used": 256 } }, { "type": "DAT", "id": "701", "file_offset": 261376, "allocated_size": 21248, "flags": "0x0c00", "raw_sha256": "52143c98872d315408ba017aab36985939af1a54d6a2caac770c54b78d450da8", "raw_path": "assets/raw/DAT/00701.bin", "decoded_paths": [ "assets/decoded/images/dat_00701.png" ], "actual_size": 21056, "image": { "width": 146, "height": 142, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 21016, "colors_used": 256 } }, { "type": "DAT", "id": "702", "file_offset": 282624, "allocated_size": 21248, "flags": "0x0c00", "raw_sha256": "debd1d66cf09ad330408acaf19010dab75fcf5376ee55edd7e1d05e491bf974f", "raw_path": "assets/raw/DAT/00702.bin", "decoded_paths": [ "assets/decoded/images/dat_00702.png" ], "actual_size": 21056, "image": { "width": 146, "height": 142, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 21016, "colors_used": 256 } }, { "type": "DAT", "id": "703", "file_offset": 303872, "allocated_size": 21248, "flags": "0x0c00", "raw_sha256": "b3972c40b7a3758e48ee1e4d24119a5d3cf9be032d83d4890e792aed2b9b9500", "raw_path": "assets/raw/DAT/00703.bin", "decoded_paths": [ "assets/decoded/images/dat_00703.png" ], "actual_size": 21056, "image": { "width": 146, "height": 142, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 21016, "colors_used": 256 } }, { "type": "DAT", "id": "704", "file_offset": 325120, "allocated_size": 21248, "flags": "0x0c00", "raw_sha256": "33aca071ff68e5e9a886b206122796c1c9027ef5bce6e7ea71442574597ee45f", "raw_path": "assets/raw/DAT/00704.bin", "decoded_paths": [ "assets/decoded/images/dat_00704.png" ], "actual_size": 21056, "image": { "width": 146, "height": 142, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 21016, "colors_used": 256 } }, { "type": "DAT", "id": "801", "file_offset": 346368, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "5bd5bd78a5f68b0f271337139a7e8cc8214a9c6ac5229f45fe351f2f33ad311f", "raw_path": "assets/raw/DAT/00801.bin", "decoded_paths": [ "assets/decoded/images/dat_00801.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "802", "file_offset": 350720, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "8296a852c3e068ff98697aa97feefbd0ba47909eb8f4b3365525b9948bac8f9c", "raw_path": "assets/raw/DAT/00802.bin", "decoded_paths": [ "assets/decoded/images/dat_00802.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "803", "file_offset": 355072, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "326f266c75b125bf9bf6af068efc8e7035ab14abe8da23188ab6765f64f7b47e", "raw_path": "assets/raw/DAT/00803.bin", "decoded_paths": [ "assets/decoded/images/dat_00803.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "804", "file_offset": 359424, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "5ff7c04e4e1d0ab63d140ee76997a67e12cfed331fa8c0548bd8bb41bd1a15bd", "raw_path": "assets/raw/DAT/00804.bin", "decoded_paths": [ "assets/decoded/images/dat_00804.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "805", "file_offset": 363776, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "a21cbbad25b01174ecce93a93e1a164913b50b926f8cbd2ceb207c99d1a4378f", "raw_path": "assets/raw/DAT/00805.bin", "decoded_paths": [ "assets/decoded/images/dat_00805.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "806", "file_offset": 368128, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "e4f340dca8dd79f8059ba75abe89cefd27ff8a14f53a8e3dc430787473f3d86b", "raw_path": "assets/raw/DAT/00806.bin", "decoded_paths": [ "assets/decoded/images/dat_00806.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "807", "file_offset": 372480, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "20000cf4ffa7174bbb6868a418ec8d0ea413e091d1d976d44f20e019bb71dd10", "raw_path": "assets/raw/DAT/00807.bin", "decoded_paths": [ "assets/decoded/images/dat_00807.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "808", "file_offset": 376832, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "a605eb26f9a6f33d789a546993eb5fcb95109d11a4a6a429a1e03129d00b0243", "raw_path": "assets/raw/DAT/00808.bin", "decoded_paths": [ "assets/decoded/images/dat_00808.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "809", "file_offset": 381184, "allocated_size": 4352, "flags": "0x0c00", "raw_sha256": "f1aa5c93967908af758f23b711bde4026899cc467f13ddaf02249083b3fe007e", "raw_path": "assets/raw/DAT/00809.bin", "decoded_paths": [ "assets/decoded/images/dat_00809.png" ], "actual_size": 4188, "image": { "width": 68, "height": 61, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 4148, "colors_used": 256 } }, { "type": "DAT", "id": "900", "file_offset": 385536, "allocated_size": 266496, "flags": "0x0c00", "raw_sha256": "25c31f3d3a628f2b102bbe07f09a91c038328fef19004e599bcc601bdbfd43bc", "raw_path": "assets/raw/DAT/00900.bin", "decoded_paths": [ "assets/decoded/images/dat_00900.png" ], "actual_size": 266440, "image": { "width": 900, "height": 296, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 266400, "colors_used": 256 } }, { "type": "DAT", "id": "901", "file_offset": 652032, "allocated_size": 4096, "flags": "0x0c00", "raw_sha256": "7b4a732ef13e24c395209841aabcc16c4431096322627fa9beb95d945913b30d", "raw_path": "assets/raw/DAT/00901.bin", "decoded_paths": [ "assets/decoded/images/dat_00901.png" ], "actual_size": 3984, "image": { "width": 230, "height": 17, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 3944, "colors_used": 256 } }, { "type": "DAT", "id": "993", "file_offset": 656128, "allocated_size": 108288, "flags": "0x0c00", "raw_sha256": "d8fa546a48c16750bb40715babc6b310a9e8012598fc4448fb4c622894b6afe2", "raw_path": "assets/raw/DAT/00993.bin", "decoded_paths": [ "assets/decoded/images/dat_00993.png" ], "actual_size": 108040, "image": { "width": 360, "height": 300, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 108000, "colors_used": 256 } }, { "type": "DAT", "id": "994", "file_offset": 764416, "allocated_size": 3328, "flags": "0x0c00", "raw_sha256": "add4499d6497e08a41d2621a9edc5a9207db55ca7269344b186699023a058085", "raw_path": "assets/raw/DAT/00994.bin", "decoded_paths": [ "assets/decoded/images/dat_00994.png" ], "actual_size": 3160, "image": { "width": 237, "height": 13, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 3120, "colors_used": 256 } }, { "type": "DAT", "id": "995", "file_offset": 767744, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "28d528340d536b7085c06be9da4d094450463b5b5bed5a6fc04a6e3ef8bae0af", "raw_path": "assets/raw/DAT/00995.bin", "decoded_paths": [ "assets/decoded/images/dat_00995.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "997", "file_offset": 1062400, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "8f353daefc21cd5dc13caff892d45bf8f119abe5570ec02cb5e65c5fac471417", "raw_path": "assets/raw/DAT/00997.bin", "decoded_paths": [ "assets/decoded/images/dat_00997.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "998", "file_offset": 1357056, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "75a50e0fa18ee1fae783aeca89a08d23f9e58b4dc4a35d25dbb2677711cdf1ba", "raw_path": "assets/raw/DAT/00998.bin", "decoded_paths": [ "assets/decoded/images/dat_00998.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "1001", "file_offset": 1651712, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "2db3a4b5d33883c3d4e9687b03275e75f559b1e0ed57d91e286e6a97404c1be8", "raw_path": "assets/raw/DAT/01001.bin", "decoded_paths": [ "assets/decoded/images/dat_01001.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "1002", "file_offset": 1946368, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "df11fbc3b043a540d0231804a01a106a5b5dfe48aff9b3d6bdeb83a4b13928c2", "raw_path": "assets/raw/DAT/01002.bin", "decoded_paths": [ "assets/decoded/images/dat_01002.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "1003", "file_offset": 2241024, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "27cfcf709f21256135bfaf8bb506897b0996225ddcf69cab2cd934cbf0d9a2d9", "raw_path": "assets/raw/DAT/01003.bin", "decoded_paths": [ "assets/decoded/images/dat_01003.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "1004", "file_offset": 2535680, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "12929d04af2525a10b621a135eedd17eea71ee3511adfd7f80359812fc43d668", "raw_path": "assets/raw/DAT/01004.bin", "decoded_paths": [ "assets/decoded/images/dat_01004.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "DAT", "id": "1005", "file_offset": 2830336, "allocated_size": 294656, "flags": "0x0c00", "raw_sha256": "70cc938c97efe772759859524f3855bda4454c8bbf403ac0aa04a8d04a9ecf34", "raw_path": "assets/raw/DAT/01005.bin", "decoded_paths": [ "assets/decoded/images/dat_01005.png" ], "actual_size": 294440, "image": { "width": 640, "height": 460, "planes": 1, "bits_per_pixel": 8, "compression": 0, "image_size": 294400, "colors_used": 256 } }, { "type": "PAL", "id": "999", "file_offset": 3124992, "allocated_size": 768, "flags": "0x0c00", "raw_sha256": "a116d7bbef4ee4f8228aa0fcaf5eea63057e460323d6ad9584fd1ffbc20d60d9", "raw_path": "assets/raw/PAL/00999.bin", "decoded_paths": [ "assets/decoded/palettes/palette_0999.png", "assets/decoded/palettes/palette_0999.gpl" ], "actual_size": 768 }, { "type": "WAV", "id": "2001", "file_offset": 3125760, "allocated_size": 6400, "flags": "0x1c70", "raw_sha256": "751d21b1ed7d7f2acd4f8f52478dcf7d57be42ebc3059343c706a9253a84cdd8", "raw_path": "assets/raw/WAV/02001.bin", "decoded_paths": [ "assets/decoded/audio/wav_02001.wav" ], "actual_size": 6302, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 6258, "duration_seconds": 0.2816128161281613 } }, { "type": "WAV", "id": "2002", "file_offset": 3132160, "allocated_size": 4608, "flags": "0x1c70", "raw_sha256": "ecc192f2d6bfd706f4d3f91cc6cbeb40fa91c50bd2f933da3e35c0258b637172", "raw_path": "assets/raw/WAV/02002.bin", "decoded_paths": [ "assets/decoded/audio/wav_02002.wav" ], "actual_size": 4594, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 4550, "duration_seconds": 0.2047520475204752 } }, { "type": "WAV", "id": "2004", "file_offset": 3136768, "allocated_size": 7680, "flags": "0x1c70", "raw_sha256": "d84f7a3285fca2b40a219b7e796066bd0294692b2761f565d55b0deb6254f305", "raw_path": "assets/raw/WAV/02004.bin", "decoded_paths": [ "assets/decoded/audio/wav_02004.wav" ], "actual_size": 7554, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 7510, "duration_seconds": 0.33795337953379534 } }, { "type": "WAV", "id": "2006", "file_offset": 3144448, "allocated_size": 3072, "flags": "0x0c60", "raw_sha256": "c803e22b0cfcc1dbd4ff8bfe966894d95b0f3217c4fc4954ca3ebf9dc5077e07", "raw_path": "assets/raw/WAV/02006.bin", "decoded_paths": [ "assets/decoded/audio/wav_02006.wav" ], "actual_size": 2906, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 2861, "duration_seconds": 0.12975056689342404 } }, { "type": "WAV", "id": "2007", "file_offset": 3147520, "allocated_size": 30464, "flags": "0x1c70", "raw_sha256": "2e6d4a0ac436e0d5ceb508f4239e871081bf8319c8c44226e83d30dc780f90ab", "raw_path": "assets/raw/WAV/02007.bin", "decoded_paths": [ "assets/decoded/audio/wav_02007.wav" ], "actual_size": 30452, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 30408, "duration_seconds": 1.3683736837368374 } }, { "type": "WAV", "id": "2008", "file_offset": 3177984, "allocated_size": 39168, "flags": "0x1c70", "raw_sha256": "b9a9af48f0794d51a8e3c0ee8c30e21382d35d8bbc76a28dc595940fbfe0eab1", "raw_path": "assets/raw/WAV/02008.bin", "decoded_paths": [ "assets/decoded/audio/wav_02008.wav" ], "actual_size": 39134, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 39090, "duration_seconds": 1.7727891156462585 } }, { "type": "WAV", "id": "2011", "file_offset": 3217152, "allocated_size": 6912, "flags": "0x0c60", "raw_sha256": "f7046a06ec0c990b334a1572d81a50d2215f31b112270c5a24344132dc805072", "raw_path": "assets/raw/WAV/02011.bin", "decoded_paths": [ "assets/decoded/audio/wav_02011.wav" ], "actual_size": 6710, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 6665, "duration_seconds": 0.3022675736961451 } }, { "type": "WAV", "id": "2012", "file_offset": 3224064, "allocated_size": 512, "flags": "0x0c60", "raw_sha256": "c46c9b564f04eef86143875ece96f32171d0f9b788215e13f81738694403bb77", "raw_path": "assets/raw/WAV/02012.bin", "decoded_paths": [ "assets/decoded/audio/wav_02012.wav" ], "actual_size": 320, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 276, "duration_seconds": 0.012517006802721088 } }, { "type": "WAV", "id": "2013", "file_offset": 3224576, "allocated_size": 46592, "flags": "0x0c60", "raw_sha256": "5dc24553391a2cc17e7388747f42ee63897c0e8f8cd74e18f83f60ff2986cacb", "raw_path": "assets/raw/WAV/02013.bin", "decoded_paths": [ "assets/decoded/audio/wav_02013.wav" ], "actual_size": 46348, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 46304, "duration_seconds": 2.099954648526077 } }, { "type": "WAV", "id": "2015", "file_offset": 3271168, "allocated_size": 8192, "flags": "0x1c70", "raw_sha256": "4e7fc9f71e187f7b89d5296583d400afc92cd84310c3b6e114a14c6c18cdd4db", "raw_path": "assets/raw/WAV/02015.bin", "decoded_paths": [ "assets/decoded/audio/wav_02015.wav" ], "actual_size": 7946, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 7902, "duration_seconds": 0.35836734693877553 } }, { "type": "WAV", "id": "2016", "file_offset": 3279360, "allocated_size": 3584, "flags": "0x1c70", "raw_sha256": "72c76e72e9933d02dd4ca4c44434acd1a79591fe486f9bd6da73f59748ee0f1f", "raw_path": "assets/raw/WAV/02016.bin", "decoded_paths": [ "assets/decoded/audio/wav_02016.wav" ], "actual_size": 3518, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 3474, "duration_seconds": 0.15633156331563317 } }, { "type": "WAV", "id": "2017", "file_offset": 3282944, "allocated_size": 35072, "flags": "0x1c70", "raw_sha256": "f7c91915c93302cb55cb703278e55ae3d08e3bb50b31ce50fbefe9a708f99926", "raw_path": "assets/raw/WAV/02017.bin", "decoded_paths": [ "assets/decoded/audio/wav_02017.wav" ], "actual_size": 34842, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 34798, "duration_seconds": 1.578140589569161 } }, { "type": "WAV", "id": "2019", "file_offset": 3318016, "allocated_size": 5376, "flags": "0x1c70", "raw_sha256": "2b65c01e848225791efc58e9018f6b9e24e6da5cc753ca74c43b52cab1532cc6", "raw_path": "assets/raw/WAV/02019.bin", "decoded_paths": [ "assets/decoded/audio/wav_02019.wav" ], "actual_size": 5148, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 5104, "duration_seconds": 0.22968229682296823 } }, { "type": "WAV", "id": "2020", "file_offset": 3323392, "allocated_size": 30208, "flags": "0x1c70", "raw_sha256": "45f03303ce04dc9dc470863bc2cbb638fa6b644afdd9792d8b47667130f71886", "raw_path": "assets/raw/WAV/02020.bin", "decoded_paths": [ "assets/decoded/audio/wav_02020.wav" ], "actual_size": 30000, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 29956, "duration_seconds": 1.3480334803348033 } }, { "type": "WAV", "id": "2021", "file_offset": 3353600, "allocated_size": 3328, "flags": "0x1c70", "raw_sha256": "9f9be797898500c85a6494d2d157f535025f8858b4b085d52843f6605495a494", "raw_path": "assets/raw/WAV/02021.bin", "decoded_paths": [ "assets/decoded/audio/wav_02021.wav" ], "actual_size": 3194, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22222, "sample_width_bits": 8, "frames": 3150, "duration_seconds": 0.14175141751417514 } }, { "type": "WAV", "id": "2022", "file_offset": 3356928, "allocated_size": 22272, "flags": "0x1c70", "raw_sha256": "e10196861e6eaf5656a5ba475c6226a9c2948b53ca7ee095a1fe7754d511410b", "raw_path": "assets/raw/WAV/02022.bin", "decoded_paths": [ "assets/decoded/audio/wav_02022.wav" ], "actual_size": 22122, "audio": { "format": "PCM", "channels": 1, "sample_rate": 22050, "sample_width_bits": 8, "frames": 22078, "duration_seconds": 1.0012698412698413 } }, { "type": "BITMAP", "id": "101", "file_offset": 3379200, "allocated_size": 256, "flags": "0x0c30", "raw_sha256": "828e3a3f570b6d5eb2406a4e751a1992b35f134138b22b3cda6f628eddc3268d", "raw_path": "assets/raw/BITMAP/00101.bin", "decoded_paths": [ "assets/decoded/images/bitmap_00101.bmp", "assets/decoded/images/bitmap_00101.png" ], "actual_size": 232, "image": { "width": 16, "height": 16, "planes": 1, "bits_per_pixel": 4, "compression": 0, "image_size": 128, "colors_used": 0 } }, { "type": "BITMAP", "id": "102", "file_offset": 3379456, "allocated_size": 256, "flags": "0x0c30", "raw_sha256": "8ddb45855da1a1edd14bf2a760f1ec87f77e107519821c9931097c9369f36fa9", "raw_path": "assets/raw/BITMAP/00102.bin", "decoded_paths": [ "assets/decoded/images/bitmap_00102.bmp", "assets/decoded/images/bitmap_00102.png" ], "actual_size": 232, "image": { "width": 16, "height": 16, "planes": 1, "bits_per_pixel": 4, "compression": 0, "image_size": 128, "colors_used": 0 } }, { "type": "BITMAP", "id": "500", "file_offset": 3379712, "allocated_size": 13568, "flags": "0x0c30", "raw_sha256": "03bd8020f22a9d05abba8df794a9fedfdbbd3efe9c512d36aa3fdbfe939c73ed", "raw_path": "assets/raw/BITMAP/00500.bin", "decoded_paths": [ "assets/decoded/images/bitmap_00500.bmp", "assets/decoded/images/bitmap_00500.png" ], "actual_size": 13320, "image": { "width": 944, "height": 28, "planes": 1, "bits_per_pixel": 4, "compression": 0, "image_size": 13216, "colors_used": 16 } }, { "type": "ICON", "id": "1", "file_offset": 3393280, "allocated_size": 768, "flags": "0x1c30", "raw_sha256": "7700e0cb938f72c273919288a1d93f2d651d0fd1cc0aaf0fc6820ecb852a0cb5", "raw_path": "assets/raw/ICON/00001.bin", "decoded_paths": [ "assets/decoded/icons/icon_00001.ico", "assets/decoded/icons/icon_00001.png" ], "actual_size": 744, "image": { "width": 32, "height": 32, "planes": 1, "bits_per_pixel": 4, "compression": 0, "image_size": 512, "colors_used": 0 } }, { "type": "GROUP_ICON", "id": "996", "file_offset": 3394048, "allocated_size": 256, "flags": "0x1c30", "raw_sha256": "b6436bbb9fca95b8a94008d045bf87f404b0a02d7690a0191861d229841dc25b", "raw_path": "assets/raw/GROUP_ICON/00996.bin", "decoded_paths": [], "actual_size": 20 }, { "type": "VERSION", "id": "1", "file_offset": 3394304, "allocated_size": 512, "flags": "0x0c30", "raw_sha256": "95f627c29e452fff1032c16384f37128496a3bbc822c39247050f1382507dacc", "raw_path": "assets/raw/VERSION/00001.bin", "decoded_paths": [ "assets/decoded/metadata/version_00001.json" ], "actual_size": 416 }, { "type": "DIALOG", "id": "32512", "file_offset": 3394816, "allocated_size": 256, "flags": "0x1c30", "raw_sha256": "544570c3e1ac0cbcd690365d2191b71ffc1e6cb1fb525085cec317d41cac9be1", "raw_path": "assets/raw/DIALOG/32512.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32512.json" ], "actual_size": 250 }, { "type": "DIALOG", "id": "32513", "file_offset": 3395072, "allocated_size": 256, "flags": "0x1c30", "raw_sha256": "2e64029d822874a8a74c0ba1367c454d95d999ee8feda1465fe8b3f585d1b03d", "raw_path": "assets/raw/DIALOG/32513.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32513.json" ], "actual_size": 212 }, { "type": "DIALOG", "id": "32514", "file_offset": 3395328, "allocated_size": 256, "flags": "0x1c30", "raw_sha256": "f7f38c4f14d5fba42e370c438fc41e041e744aaef73c65a618070338b650cba1", "raw_path": "assets/raw/DIALOG/32514.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32514.json" ], "actual_size": 99 }, { "type": "DIALOG", "id": "32515", "file_offset": 3395584, "allocated_size": 512, "flags": "0x1c30", "raw_sha256": "75a4de77aa549d3edbe4825c1345093ed8d6ae81559aad4514b0a853ec50921b", "raw_path": "assets/raw/DIALOG/32515.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32515.json" ], "actual_size": 372 }, { "type": "DIALOG", "id": "32516", "file_offset": 3396096, "allocated_size": 512, "flags": "0x1c30", "raw_sha256": "dddb764f91fbd212481c1510c50875a289f9f525674c2bc7eefbf94b8ce892ef", "raw_path": "assets/raw/DIALOG/32516.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32516.json" ], "actual_size": 309 }, { "type": "DIALOG", "id": "32517", "file_offset": 3396608, "allocated_size": 256, "flags": "0x1c30", "raw_sha256": "be406a27876296e9ac46021d67b1591f9bffa0a98a9a55a53ecb9adddc660ef6", "raw_path": "assets/raw/DIALOG/32517.bin", "decoded_paths": [ "assets/decoded/dialogs/dialog_32517.json" ], "actual_size": 146 } ], "decode_errors": [] } !x40000 BITMAP"f)6[%40000 DAT}̓foƂF:-R40000 DIALOG9h+ Kb3Da40000 GROUP_ICON#ehw|ZcC@#^)+}:40000 ICONCjGP7飗{k40000 PAL,#%I\i40000 VERSIONx^.[2"Ň40000 WAViN{*.v򆱸rz8Z˜gpxo100644 00101.bin\p=K2 @7Ru100644 00102.binpJf^8E?`ަ100644 00500.bin~,X-,!fB:l)[x(wwwxxwwwwwxxwwwwwxwwwwwxwwwwwxwwwwwp@x(+,x5(3pNx100644 00400.bincvwiʶޗ100644 00401.bin3 CFR$v100644 00402.bin^l=°:PdU~:100644 00403.bin5v$ {YV100644 00404.binǪ/zCUnP* v100644 00405.bin $zH6w~1a1:100644 00406.binK6U/dWYj v/100644 00407.binۘRwʖ@\Yw100644 00600.binViфڶn&100644 00701.bin.cCw_+]3100644 00702.binH^i,LP3S100644 00703.binN!%2100644 00704.bin5,nÿEn1100644 00801.bin+|ݥ!o^{KI,/100644 00802.bin5ep-G_DFX100644 00803.bin';Ӎ2.[enNp100644 00804.binY."n+ `100644 00805.bin.ibn6100644 00806.bin4(ڼ3ݎT|K(e'100644 00807.binthĖG-.ϤGk5t9100644 00808.binM3#3S!/ p3~]i100644 00809.bin[7fRtW4=O^100644 00900.binmBELyN100644 00901.bin7Od@ 6!{+Ǝ100644 00993.bin3FF Q&z۝1100644 00994.bino2<Bj #$ @ s  $ N&zzlV/==   =  ^^?/ ' t |@ p ~@ p n ? ` n   Op  p  p  p  p ` +O  Nvp  ,  t p   N  N  " O  M P  y q   ,L "͓r ( U T N9=&&&0&0&g ddH_)( &&O+ t' ! ! "B)+ |F DI(͓)  !5xw,,#   , -͓ n 0  Yp >  ` N  ` N  7 Ǽ% xb,, j @l @l @l @l @   l 8 gg x(*{$EEEϰ/x( ~ֵֵֵֵֵֵֵֵֵEEEEEEEEEEEEEEEֵֵ΃S xS(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐֐֐֐֐ҰҰ֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐ְְ֐֐֐א֐֐֐ְְ֐֐֐֐א֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐א֐֐֐ְְ֐֐֐֐֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְאאאאאאאְְאאאאאאאאְאאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאאאҰאאאאאאאאҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵@xC J},E9p ;PO 27o EK;PUP<`+A(986PZ6},E93P]6},E93P]+K ,:C% :+a" *  "Bq"'DF,:0DD@+0,*::@ s%+A;(-D:@+#+ ,/:: !"0K(P:/::)_$  K(P:/:: pa"  &0 :.::0%oa"  %# :-:: aa"  %# :-:: H9;^9!` :,::""; d  ;"#% :-::""; d  $#% :-:: %;a"  6$#% :-&: %!& 0}, +אא& +&") :-:e(& %!& 0}, +אא& +&") :-17&p'!& 0}, +א& +{+") :-17&p' (5(א((!.)) :-17&p'!& 0}, +א& +{+") :-17&p'!& 0}, +א& +{+") :-:e(&,!& 0}, +אא& +& :!:/:e(:9+)6;,:-":9+֐"+ 0;,Q O DD9+֐q, 7)/&:A% :00?8"_^9M1` :D:P5&p;" 'F 7)/&.P/: P5&p;" 'F 7)/&.P/: P5&p;" 'F 7)/&.P/: P5&p;" 'F 7)/&.P/: P5&p;" 'F 7)/&.P/: 9+;" 'F;,:F/&.P@.+A ^9+.P/: 9+ :E;,B:9+a"7+;,AG p@:9+֐},;,::7:!9+H D[D0@/`+A(9_PiE+[DP[D(FU Q xS(R׵صְְְְװְְְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְװ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐հհ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐א֐֐֐֐ְְ֐֐א֐֐֐֐ְְ֐֐֐֐֐֐֐ְҰ֐֐֐א֐֐֐֐Ұְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐ְְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְְְ֐֐֐ְְ֐֐֐א֐֐֐֐ְְ֐֐֐א֐֐֐֐ְְאאאאאאאאְְאאאאאאאאְאאאאאאאאװאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװאאאאאאאאאאאאאאאאҰאאאאאאאאҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐א֐֐֐֐ҰҰ֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐Ұְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰ֐֐֐֐א֐֐֐֐ҰҰְְְְװְְְְص׵6gxw1p?,$p$p1P(p1T$p$p1P(p1-n= QP%p1&n= QP%p1UP%p1N%KMP2 $n1P(p1 ! HQ P$n1P(p1* HQ P%P(p1O -a22_P%p1#90 #d+p"ia+,$i+p"i -!'#]9!*o"E"2 _P#p1 2 _ p'0a%1& `+L!/@ 1p'0&4&b+J2_P5p1,0&4&&$,%$/,Pp1`..֐א`/&,$2D!Pp17003אj:F3p1[ z! Q%2_ 7003אj:#3;p1 6$p10(8אאQ!]9M1p13p1 m13D/ j:#3;p1p1p13D/ & j:#3;p1p1p13D/ & j:#3;p1p1p13D/ & j:#3;p1p1p13D/ & j:#3;p1p1p17003/ & j:F3p1p1p1@(8 &]9+3p1p1p17003/ & j:F3p1p1p17003/ & j:F3p1p1p17003/ & j:F3p1p1p17003/ & -I3p1p17O03/ & -I3Pp1p1[ -670֐0-I6A0L7*@8*֐֐֐֐֐֐֐֐אדP"]9'A00p1@<*:֐j:BPp1!/@<,n;%!T2;FU x(D=4pBx0""w P `ϓ ^ `   a @`x @ P`  @  @ ` ; @  ` @ @ & 0  _ ?0 ? @  0  L    ^  @  ) @  A*<  'Y < `" )  Y ) k `Y , + /G   10  ^  ` yox(D=4N|xb""ϓ@͓kϓ %< 7, '$  `_l   o     0    *  + _  *  + _     0 _  0 M   L \  @ \ :  @  ϓ ! 0 p+p+^ $^ *a  ]ـ3,x1"" Aϓ 1ϓ 0`  0`   Y0Y @  ?    ?  _   ` `    9  0 \ L 4P ?  ^      @ YTx(D=4kT(xr"" `&͓0pϓ@ϓ    ϓ   Oϓ 'ϓ @ϓa: ϓQ"J q    A "{ % 0   0  P  ͓ ?  J  ? .͓p _  p %p  0   ,0 0 P ^ 0  ^ @  @` ^ 3@ O 3@ [ ϓqL  0 xPNxa ϓ#ϓ#^Xϓ$^ϓ%ϓCϓ&+1"x)"" _'ϓ ! 0  0 M m-34 :   ϓ@( x4`%p$n L ϓA 9 ͓   ϓ   ϓ 8 eo  e  m '  % m H 09 !        9 ; 19 L ^ 9 0  ^ )  \ ^ 9@ \ L ^ 9  ;  x($x l% %ϓA 0)' 0.e>ϓa(ϓ Ex(D=4Gmx((صصصصصصصصصصصصصصصֵֵֵֵֵֵֵֵֵՎ֎صصصֵصصصصصصصصصصصصӎصصص֎ӎֵӵԎӎӵԎ֎ԎӵԎӵ֎ԎԎԎҎ׵׵صصصصصصصصصصֵֵֵֵֵֵֵֵֵصصصصصصصصصֵֵֵֵֵֵֵֵֵՎ֎صصصֵصصصصصصصصصصصصӎصصص֎ӎֵӵԎӎӵԎ֎ԎӵԎӵ֎ԎԎԎҎ׵׵صصصصصصصصصصֵֵֵֵֵֵֵֵֵKRx(hY|4x(h,ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صֵص׵ص׵صֵصֵصֵص׵ص׵صֵص׵ص׵ص׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵յص׵ص׵յ׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵ҵص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵׵ص׵ص׵ӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صӵ׵ص׵ص׵صԵ׵ص׵ص׵صԵ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵صյ׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵ֵ׵ص׵ص׵׵׵ص׵ص׵׵׵ص׵ص׵׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵׵ص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ӵص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صXص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵ص׵صصص׵ص׵صصص׵ص׵صصص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صҵص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵ص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵ֵص׵ص׵صյص׵ص׵յص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صص׵ص׵صصص׵ص׵صصص׵ص׵صص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵׵׵׵׵.~x ( 0        W-0x(~׵׵׵׵Վ׵֎׵׵Վ׵֎׵׵Վ׵ص׵ص׵ص׵ص׵֎׵ص׵ص׵׵ص׵صՎ׵ص׵ص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$֎׵׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ҵՎص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ҵص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص֎׵ε׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Վص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Վص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صصֵ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵׵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ֵ͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص׵ص׵ص׵ص׵ص׵ҵҵص׵ص׵ҵص׵ص׵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$kkEkkkE׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]BB]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$===B<]====B<ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]BB]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$===B<]====B<ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]BB]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$===B<֎]====B<ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]BB]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$===B<]====B<ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]֎BB]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$===B<]====B<ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$] 4p;͓<'חrE'חrB>C J?͓?@͓@j͓A%֓1?{AF A͓VB?FB&͓C$ѓW@CJID͓DBG͵׵[E&͓FF+G& HHI9 KK9 MGN: P@,pS N Q R2pSN S U W Z \pt2] _py%`z ֗\W ap~bv]]]Փ$c] dp0j0em]]]Փe\ fpS aaaaaaaaaaaaabgo]]]%h\ ipS aaaaaaaaaaae0jm ]]]Փj[ kpS aaaaaaaaaaah6olD ]]Փ&m[ npS aaaaaaaaaal6og ]]Փo[ ppS# aaaaaaaaaaoqe]]]Փ%r\ spS&aaaaaaat=tWՓt]͓upi(aaaaaaaavvV͓wk͓xpi+aaaaaazvUyA֗F 4 ͓zpi-aaaaaa}v{9 ֗)>|C͓}|pi1aaaav Q~> ͗ah&@A͓zpi3aaaav Ԁ; ͗> 4) ͓w30+aa`R>͗Z.=A:͓{P#I@Eօ;͓1N 4 @eC %$͓zR OP O ?V<͗A+> 42bA͓yҗ7dғZ^܊җq8a ғZ'\ җA0_ җ!"FpSۏ җA0^ ғ!,0\ ͓a ? aS&ҳ  a ? aS&ҳ  a ? aS%ҳ a ? aS%ҳ a ? aS$ғ֗L7G|͓x a ?aS$ғ֗` pb =F@͓xa ??#ғK أ>֗aV:͓y1'?#ҒL W8 ֗L7Ц1͓$ d) 1&?"/ ר8 ͗V0$͓% ?!`+1&?"!, V9 ͗AV8͓% zoM1%?!n%* ֭@͓j͓% ab-1%?!'$*>"`{F׵۰&͓$ ?`ޱ31EQ%*ղ?G׵[&͓#?`[81CӓY ͓!C{5+۵& ,!+ض=1AӓDԷ -W@ 1?ԓpBS -ѻH 1= ӓ!AӼ .RNM 1; ӓ!?IR .b 19 ӓ! /:e 17 ӓ!  ŗ15ӓ!# șϗ13 ӓaS% ʛϗ11ՓaS) ͝1aS-ΐ ؗA+> 4 ϟD+ؓaS1K$]]]Փ$] ҡՓ,ؓaS76 aaaaaaaaaaaaaXE]]]Փ\ B aaaaaaaaaaaF]]]%\ ) aaaaaaaaaaaaa@  aaaaaaaaaaaWF ]]]Փ[ * aaaaaaaaaaa aaaaaaaaaG ]]Փ&[ * aaaaaaaaaaa?aaaaaaaaa]]@ ]]Փ[ + aaaaaaaaaaaaaaaa>"']]]Փ%\ + aaaaaaaaa>aaaaaaaU?Փ]!ד!aaaaaaa aaaaa͓!͓k͓%aaaaaaa=aaaaa1w՗[%?>|$͓'aaaaaaaa< ͗[*=͓(aaaaa<aaaS< ͗`+<͓!aaaa% ͓#'? ͓!aaa;U͗!C0T%͓#aW͗+P+/ 42bAͳ}͗a,?@ 4"bQ1 ͓,ؗ' #`C ?.ؗd(! ??:0ؓ?".0ؓ?!M X2ؓ?!M \ @l2ؓ?!H W] l4ؓ?!M ^ ? l4ؓ?" F V _ l6ؓ?! M >՗3 pb =UbB1͗! >l6ؓ?"AHB]8՗/P5/@͗%l8ؓ?"AGB՗/08͗&=l8ؓ?"LT; ͗3 %͗(l:ؓ?"AD< ͗6V͗(<l ؓ!+ؓ!+ ؓ?$>BS< ͓4106͗)l<ؓ?$ x AD͗j͗(;l<ؓ?$> Fص&͗(l>ؓ?$> G[!&͗">ؗd%> #+#& $@ؓ?$>% '@ؗd%>( )Bؗd%>* ,Bؗd%z K - .Dؗd%>P/ 1 ؗ/8>!2 3DؓaS%C4 6BؗW(>$7 8BؓaS(A9 ;@ؓaS)C#<| ؗ+-+ =@ؗ+>]]]՗$?] @>ؓaS,A]]]1<e A- BؓтؓaS,C]]]%D\ Eؓ?ؓaS.A%Fx ]]]՗F[ Gؓ?ؓaS/AHw ]]՗&I[ Jؓ?ؓaS0C'Kv ]]՗K[ Lؓ?ؓaS2AMl]]]՗%N\͗Oؓ?ؓaS3A)Pl՗P]͗Q6ؓaS6p <Rk͗Sj͗TJؓaS6z K +Ud ͗AF`]͗Va?!AWd ͗AF_͗YeA!p <,Zc ͓AD?#͗[hz*K \c͗^pI ]͗^iz!7-_d͗auS@_͗`{jv!p ak͗A^/AbP$͗c|kz*K-dlv!9fmv!p )imv!<kmA!>+n(ؓ?)?!pm?!C+sk7$> ukd% x!+$ؓ!+k&zr֗dhVO{C͗|}7$ؓ?'> +}j֗_}͗~ qP"ؓ?D(Aq֗AX͗qP"ؓ? qP*C +d ֗df͗`#ؓ?qP-C d ֗A^P͗ ؗQCpSA'h ͵dLp ͗ؓ1Qpk͗j͗ؓ1Qz+jF͵ی&͗ؓRAiG׵[&͗aS5=====aiA&+ۑ&  aS1 =========ai?C  aS- =============?( aS+===============? aS+===============?) aS)=================? aS)=================ai?/ aS'==============? &,.]CM============ai?.] [ &oM==========aoۧ &fep^M============ao[D חWؗ #fep^M=============ao۬C]]]՗$] $dep^L=================p[B]]]՗\ $dep_K=================ap۱B]]]%\ $dep_J===============q[B ]]]՗[ $dep`I===============aq۶B ]]՗&[ $dep`H=============r[B ]]՗[ $depaE=========AtۻC]]]՗%\ $depcA=====Av[9՗]+֓aepe`O-p_:͗k͗de`|q׍[;՗0_fL͗dep|a4 ՗ UO͗dep|q׎[4 ՗f͗dep}a4 ͗c_fJ֓aep}q׏[5͗hb֗Ap~ A6͗Z0TO{+֗A5A[7͗Aus@?$`1֗A5`p|SD5pS["}1D5pS["1D5pS]QD5pSPD5pS^PD5pSPD5pS^PD5pS4՗'`k`0TO %׷A5pS^3՗AbP@aP  v2 ֓1(͗r8ؓ U^1͗UaS$aS$ ?"[T1͗NT===aS$===aS$ ==========?"===[T^1͗חA0T==aS$==aS$ ==?"==[T8a@>==aS$==aS$ =========?"==[T^7ؗNR==aS$==aS$ ==?"==[T6a@===aS$==aS$==aS)==[T^>ؕa@<==aS$==aS$==aS)==[T>NP==aS$==aS$==aS)==[T^>NO==aS$==aS$==aS)==[T>a@:==aS$==aS$==aS)==[T^ > a@9==aS$==aS$==aS)==[T @ I==?==aS$==aS%==1N\@׵api4===========?==aS$==aS%===========1NA׵api3==?==aS$==aS%==1N[A׵G============?===aS$===aS%============1NA׵api2?aS$aS%1N[A׵aP '>׵o8ۓpi1'^>׵o8ۓpi/1,?׵!aP͗Z"B׵! aP͗$B׵!!o8ۓpi,͗Z'B׵(!ӷA+͑͗)B+"ԷA+͑͗Z,:͗(*ԗq8ٓpi+1,.8՗0*q8ٓpi+'\1:֗2*A+pS34͗50֖P[64͗7& חpؓal84 1(͗:( 0_ Jؓak[;5 ֗;0 O`;͗<&͗< ؓaj=6͗!f/c_fD 4cb͗?!͗< ؓaj[@7͗ 0Aa͗A! A5 ؓS'BYї<ؓRͷZEؓQͧGؓRͧZJؓSͧL ؓ_ͷZOؓ_ͷQؓ`]Tؓb' xVؓazAaY ؓaA[ؗA! MA_^ؓ?pA *"=pS#A`ؗa - @?A_cؓ?`ue_ ?Ae ؓ?"pA gR' xah ؗv  pjSj ؓ?pA lU A_mؗQCjoXͷoؓ?pA q[ͷZrpq qtQͷtpq vT͗ZwM 3xp qv9vyM͗yMְְְְװְְְ zpחq9R `pi3'\|K 3}pQPz~Z ?~L֐֐֐֐א֐֐֐  pՀ ?[L 3 `C S ?ۃL֐֐֐֐א֐֐֐   ? pA х ?[L 3 # M ?ۈL֐֐֐֐א֐֐֐   ?`ʊ ?[L 3 0+G}====='܍K֐֐֐֐א֐֐֐ =======͗ZM 3=========͗ڒN֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ ֐֐֐֐֐ְ=========͗ZMח~]e=========͗ڗM֐֐֐֐א֐֐֐ד1(Ip / =========`G1Kw =========G֐֐֐֐א֐֐֐tʝy=======`GAJz====='ܡK֐֐֐֐א֐֐֐> 4!p; 5 ?[LA> 4"p;헯ڥ ?ۦL֐֐֐֐א֐֐֐> 4"p; 1_ ?[Lصד1(Ipp; ƪ ?۫L֐֐֐֐א֐֐֐ ͗ѯ`p ?[L 3͗P ?۰L֐֐֐֐א֐֐֐ Ѵh'\K 3Q`1֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ ֐֐֐֐֐ְѹew04Z3Q0֐֐֐֐א֐֐֐ HQ"pSp # 3 ǾP7A #֐֐֐֐א֐֐֐)ص՗P74 GP6 P (*ص]]]՗Pk P6+֐֐֐֐א֐֐֐+]]]՗k E~P9'!}*+]]]QmRQ` (֐֐֐֐א֐֐֐,]]]շ%|UR`~),ص]]շR&D ?`H֐֐֐֐א֐֐֐,ص]]շ(O` (+ص]]]շQ+D ?` (֐֐֐֐א֐֐֐*ص՗h>\D ?` ( 3 @ O`0֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ ֐֐֐֐֐ְ XO`x/ 3 O`/֐֐֐֐א֐֐֐  AaO`x/ 3ؓ#@0LpA,թN`H֐֐֐֐א֐֐֐ A`aUU=F'֗^I 3Q@0d^ Q$UUU=F'֗I֐֐֐֐א֐֐֐ QJשP|s5pS^I 3Q@0d]Pu2pSI֐֐֐֐א֐֐֐  APx0pS^I 3 ~P adKI֐֐֐֐א֐֐֐  @R!? ,pS^I 3 |U# ,pS I֐֐֐֐א֐֐֐ =,pS!^I)՗V>|",pS"4ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐?֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְ]]]՗A͗,pS#^3ְA]]]՗Q?͗דAxO2ְ֐֐֐֐א֐֐B֐֐]]]>͗=UUU% Q-T^1ְD]]]՗R< ͗ =UU':pS$1ְ֐֐֐֐א֐֐D֐֐]]՗<͗& >*Z^1ְD]]՗R <͗ %  aZpi+ 9ְ֐֐֐֐א֐֐<֐֐]]]՗ >͗ # @ թYpi+_ 6ְ<՗P@͗" @ aUU=F@9C_ ְאאאאאאא אא^0A~UUU=F@9Cz-a0+|s5 SLאאאאאאאאL7Ц+u2`Uח`Gah0A+x0`UKאאאאאאאאahP5/+aA[Lah03, , UMאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאװah , @ , V[!LahP5/ "* ", W#Lאאאאאאאאah01%. >%, X[&Lah'0', Y(LאאאאאאאאahP5/*דÅ[+Lah21,Q-אאאאאאאא . 31֐֐֐֐א֐֐֐)՗3h)))))<4k*]]]՗P6e )))))))))6i֐֐֐֐א֐֐֐+]]]՗8c )))))))))))?9h+]]]Q;b )))))))))))));g֐֐֐֐א֐֐֐,]]]՗=a )))))))))))))@>g,]]՗R@`)))))))))))))))@g֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐+֐֐֐֐֐ְ]]՗B`)))))))))))))))ACf+]]]՗QEa)))))))))))))))EQ"@?FL֐֐֐֐א֐֐֐*՗Gb)))))))))))))))AHPZ'\IK 3J)))))))))))))))JPZKJ֐֐֐֐א֐֐֐ L )))))))))))))@MPZZNM 3O )))))))))))))O~P֐֐֐֐א֐֐֐ Q )))))))))))?RR 3T )))))))))T|U֐֐֐֐ V)))))D ?_0֐֐֐֐א֐֐֐ `5=UUU:.]Pg wXҰ 3c^͗c$CCCCCc|i-=UU6͗x_ְ֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ְe]͗f$ CCCCCCCCC>fz+5͗x wgҰ3h\͗h$ CCCCCCCCCCChYi*a50v wXҰ֐֐֐֐א֐֐%֐֐j[͗k$ CCCCCCCCCCCCC@kXk)թ3 Pq wXҰA՗o ͗m$ CCCCCCCCCCCCCmV nHaUU=-.wXҰ֐֐֐֐א֐֐B֐֐]]]՗o>͗p#CCCCCCCCCCCCCCCApT pGUUU=-P*wqҰ<]]]՗Qr>͗r"CCCCCCCCCCCCCCCrS"sG|s@$sҰ֐֐֐֐א֐֐=֐֐]]]t?͗u!CCCCCCCCCCCCCCCAuSuGu>՗Uv=ҰA]]]՗Rw?0CCCCCCCCCCCCCCCwR#xFxV ϗ2..!җ_H 3CCCCCX ϗ!-, җ߇I֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐ ֐֐֐֐֐ְ ϗ 0דD,+ җ_H 3 ϗ A2Q-0җߌH֐֐֐֐א֐ ϗ@,Tҗ_H 3A-0+"pS0 -җߑH֐֐ ccccc<w@,@;0 +ؗ^I 3 cccccccccu@,@;00 ՗ږM֐֐֐֐א֐֐֐  ccccccccccc?tuY ? 00BaF 3 cccccccccccccsuY ? 05Pq ֗a-֐֐֐֐א֐֐֐  ccccccccccccc@sAx&@=0Փ5PgՓ5A|+ 3cccccccccccccccs ϗA!җA+֐֐֐֐א֐֐֐ cccccccccccccccAs ϗ|+ 3ccccccccccccccct ϗ@՗F֐֐֐֐א֐֐֐)՗ϦccccccccccccccccAu ϗ՗~)*]]]՗PbcccccccccccccccD .ϗ=ғ"+֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐אאאאאאא֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐֐*֐֐֐֐֐ְ]]]՗ѫb ccccccccccccc@Eғ"`{,+]]]Qb cccccccccccccC ӗ/֐֐֐֐א֐֐֐,]]]՗*0 - ccccccccccc?C җx/.]]ؓ4(P5 . cccccccccCҗ/֐֐֐֐א֐֐֐,]]՗ҵeccccc<Eҗx/+]]]՗Q җF֐֐֐֐א֐֐֐*՗к ^I 3ݾJ֐֐֐֐א֐֐֐ җWP 3DJ֐֐֐֐א֐֐֐  >C ϗ՗]J 3 ,#ϗKְְְְװְְְ  )$Ϸ& ($ϗ WA&#Ϸ(& ַXA%uC%C?%uA  &@ A &u?ӗ` '  ( @ӓ` nA : ͗( t?ԗ, @ԓa rAԗ C`7/Փ"6 ϷA<Y  Ϸ V   Ϸ@ ?T ϗA' S!A`M @Rn$4~Q"PC}AQNF6|Q"MGֵ|AQMG6|R ϗ OLA @ 6֗z p/صͣ@ S ϗ OOյص@_C\ 5֗ER$0صͣ T ϗPQԓ1]@ ֗!-0 4%͗ ?V ϗQP@_C\ (֗SX& p ͗ YϗTBӎ] ֗ER$ ͗ <$Վ0EJ ד1(՗p͗x֗!E@p lͷ֗DRn"ͷ ֗!-0ͷ$Ϸ<3y Ϸ5@՗82 Ϸ?8>]]]՗:0 Ϸ:<]]]՗=/ Ϸ@=<]]]?.Ϸ?; ]]]՗B-ϷAB; ]]՗D-ϷD; ]]՗D-ϷAG<]]]՗I.ϷI=՗L0 Ϸ@LT &)U { coN"/ϷNU֓1(՗P ͗Q# Ϸ?QW՗Au͗S% ϷSQ ՗9 T͗V(ϷؓAصחW&CL%ص׵ؓ16>ؗa#1L X)صחdLy @$# r ؓBصחWCLصחAkؓ16= ص {#1K X)صחA^!# r>ؓAصחh:c MصחAIؓ16=ؗa{#1K X)صחA^!# r>ؓAصחW bCL%ص׵ؓ16>ؗa#1I X)ص֗Ay@$# r ؓBصחWCLصחAkؓ16= ص {#1I X)ص֗@$# r>ؓAصחh:c MصחAIؓ16=ؗa{#1I X)ص֗1u@$# r>ؓAصחW bCM$ص׵ؓ16>ؗa#1G X)ص֗Ay@$# r ؓBصחW&LصחAkؓ16=ؓp1{#1G X)ص֗@$# r>ؓAصחh:c MصחAIؓ16=ؗa{#1GחQ)$ ֗1u@$# r>ؓAصחW bCM%ص׵ؓ16=ؗa#1Eaj صחA^!# r ؓBصחW&LصחAkؓ16=ؓp1{#1E ؓ# ֗@$# r>ؓAصחhv c9MصחAkؓ16=ؗa{#1E ؓ# ص֗1u@$# r>ؓAصחW bCM%ص׵ؓ16=ؗa#1C ؓ#ص֗@$# r ؓBصחW&LصחAkؓ16=ؓp1{#1C ׵ؓ#ص֗@$# r>ؓAصחhv c9MصחAkؓ16=ؗa{#1C ׵ؓ#ص֗1u@$# r>ؓAصחW bCMصחAIؓ16=ؗa#1A0W ׵ؓ#ص֗@$# r ؓBصחW-&!LصחAkؓ16=ؓp1``#1A0W ׵ؓ#ص֗Ay@$# r>ؓAصחhv c9MصחAkؓ16=ؗa{#1A׵ؓ#ص֗1u@$# r>ؓAصחW bCMصחAIؓ16=ؗa#1? ׵ؓ#ص֗@$# rؓAصחW-&&LصחAkؓ16=ؓp1``#1? ׵ؓ#ғ"_%r-@ "Jm8 k ֗]0k ӓ+$5-7*206m lY .;@WxM='׵ؓ#ғq  k% _%r-@ "zjivv ] ԗM 5-aA i =WxMp/׵ؑ ՗R* !zj!m12k& ֓*->@ p lR vW ׵ؑ Փ_%'"Jm8 k #"0k ӓ+$5-7*206m lY .;@׵ؑص֓@$#ؓLS^KAHa 16' ؓ16(׵ؑص֗Q1L8-&&JHp1oe #& ؓ16(׵Lصד]^ p#ؓL^KAHa01#& ؓ16'׵Lص֓@$#ؓLa^KAHa 16' ؓ#&חLص֗Q1L# D;JIa#& ؓ#& חL֗^p#ؓL^KAHa #& ؑo!֓@$#ؓLa^KAHa 16'1ӑ חQ)ص֗Q1L# D;JIa#&1ӑ חQ)"֗Ay@$#ؓLصחa*/ؓJ~Ha #&0ӑ חQ)֓@$#ؓLa^KAHa 16'/ӑ חQ)?֗Q1L# D;JIa#&/ӑ֓`"? ֗Ay@$#ؓLصחa4#ؓJ~Hp16#&.ӑ`"!֗Q1#ؓLa^KAHa #&-ԑחQ."֗Q1L# D;JIa#&-ԑ֗]&֗Ay@$#ؓM##ؓJ~Hp16#&,Ց֗]#֗Q1#ؓLa^KAHa #&+Ցד&֗Q1#La9.&%JIa#&+Ցד!*ص֗Ay@$#ؓM^J~Hp16#&*Ց ֗aV%ص֗Q1#ؓL$ f0c KAHa01#&)Ց ד!&ӵ֗Q1#La9.&%JIa#&)Ցד*֗Ay@$MK0J~Hp16#&(Ցד'ص֗Q1#ؓL$ f0c KAHa01#&'Ց֗V(ص֗Q1#LS^JIa #&&՗AחV,ص֗Ay@$MK0J~Hp16#&%A Q)Փ#ص֗Q1#ؓL$ f0c KAHa01#&ؓ#A a`Փ#ص֓@$#LS^K@Ia #& ؓ#A ص]Aص֗Ay@$M8&JHp16#& ؓ#A ص]Aص֗Q1#ؓL$ f0c KAHa01#&ؓ#AصXAص֓@$#LS^K@ؓHa #& ؑAصaVAص֗Q1M8&JHp16#& ؑmصaVAص֗Q1#ؓL^KAHa01#&ؑ֗VصAص֓@$#ؓLS^K@ؓHa #& ؑ֗Vص֗Aص֗Q1M8&JHp16#& ؑ֗VصL֗Vص֗Q1#ؓL^KAHa01#&ؑ֗VصL֗Vص֓@$#ؓLS^KصHa #&֗VصL֗Vص֗Q1M8-&!JHp1oe #&֗VصL֗V ص֗Ay@$#ؓL^KAHa01#&֗VؗL֗V ص֓@$#ؓLS^KصHa #&֗Vؑ֗V!ص֗Q1L8-&&JHp1oe #&֗Vؑ֗V"ص֗Ay@$#ؓL^KAHa01#&֗Vؑ֗V"ص֓@$#ؓLS^KAHa #&֗V Փ#֗AY#ص֗Q1L8-&&JHp1oe #&֗V Փ#֗[$صד]^ p#ؓL^KAHa01#&֗V Փ#֗[$ص֓@$#ؓLS^KAHa 16'֗V Փ#֗A^%ص֗Q1L8-&&JHp1oe #&֗V Փ#֗Ac&صד]^ p#ؓL^KAHa01#&֗V Փ#֗Ac&ص֓@$#ؓLa^KAHa 16'֗V Փ#֗'ص֗Q1L# D;JIa#&֗V Փ#֗(صד]^ p#ؓL^KAHa #&֗V Փ#֗(ص֓@$#ؓLa^KAHa 16'֗A Փ#֗)ص֗Q1L# D;JIa#&A Փ#֗*ص֗Ay@$#ؓLصחa*/ؓJ~Ha #&A Փ#m-ص֓@$#ؓLa^KAHa 16'A Փ#A+ص֗Q1L# D;JIa#&A Փ#A,ص֗Ay@$#ؓLصחa4#ؓJ~Hp16#&A Փ#A,ص֗Q1#ؓLa^KAHa #&A Փ#A-ص֗Q1L# D;JIa#&A Փ#A.ص֗Ay@$#ؓM##ؓJ~Hp16#&A Փ#A.ص֗Q1#ؓLa^KAHa #& A Փ#A/ص֗Q1#La9.&%JIa#& A Փ#A/ص֗Ay@$#ؓM^J~Hp16#& A Փ#A/ص֗Q1#ؓL$ f0c KAHa01#& A Փ#A/ص֗Q1#La9.&%JIa#& A Փ#A/ص֗Ay@$MK0J~Hp16#& A Փ#A/ص֗Q1#ؓL$ f0c KAHa01#& Փ#A/ص֗Q1#LS^JIa #& Փ#A/ص֗Ay@$MK0J~Hp16#&  Փ#A/ص֗Q1#ؓL$ f0c KAHa01#& ؗ Փ#A/ص֓@$#LS^K@Ia #& ؗ Փ#՗A/$ص֗Ay@$M8&JHp16#& ؗ Փ#՗A/$ص֗Q1#ؓL$ f0c KAHa01#&#Փ#Փ166ص֓@$#LS^K@ؓHa #&#Փ#Փ167ص֗Q1M8&JHp16#&"ԓ#՗A/$ ص֗Q1#ؓL^KAHa01#&!ԓ#A/$ ص֓@$#ؓLS^K@ؓHa #&!ԓ#A/$ ص֗Q1$P!$p16#%!ԓ#A/$ ص֗Q1#'ӗnC)ӓ+$Eד1%~@6a01#$!ԓ#A/$ ص֓@$#&ӗnC)ӓ+%Eד1%~@6a #$!ԓ#՗A/$ ص֗Q1#@6 صחPtU -&t ؓ16;<׵~@6p1oe ##!ԓ#Փ16<ص֗Ay@$#ؗ"@6 صחWPt& r ؓ16< صד1׵~@6a01#"!ԓ#Փ16<ص֓@$#A/$صחPt4t ؓ16<<׵~@6a #"!ԓ#Փ16=ص֗Q1$ԓ%jRӓq &ӓ+~@6p1oe #!!ԓ#Փ16>ص֗Ay@$#(ԓ%jRӓq &ӓ+~@6a01# !ԓ#Փ16>ص֓@$#1(׵֗~@6a # !ԓ#Փ?ص֗Q19׵֗~@6p1oe #!ԓ#Փ@صד]^ p# >Z׵֗~@6a01a ԓ#Փ@ص֓@$#, CW֗~@6 a a ԓ#ՓAص֗Q1, CY׵ח~@6 p1oe #!ԓ#ՓBصד]^ p#, CW׵ח~@6!a01#!ԓ#ՓBص֓@$#, CY׵ח~@6"a #!Փ#ՓCص֗Q1 , CW׵ח~@6#a#1 Փ#A/$صד]^ p# , CY׵ח~@6#a #1 Փ#A/$ص֓@$# , CW׵ח~@6$a #1 Փ#A/$ص֗Q1 , CY׵ח~@6%a#1 Փ#A/@6ص֗Ay@$# ֵ, CW׵ח~@6%a #!Փ#A/@6ص֓@$# ֵ, CY׵ח~@6&a #!Փ#A/@6ص֗Q1 ֵ, CW׵ח~@6'a#!Փ#A/@6ص֗Ay@$# ֵ, CY׵ؗ~@6'p16 Փ#A/@6ص֗Q1, CW׵ؗ~@6(a !Փ#A/@6ص֗Q1 >Z׵ؗ~@6)a!Փ#A/@6ص֗Ay@$9׵ؗ~@6)p16!Փ#A/@6ص֗Q1յՓ1(׵ؗ~@6*a !Փ#A/@6ص֗Q1(׵ד1=ӓC p %ӓH%p n#׵ؗ~@6+a!Փ#A/@6ص֗Ay@$(׵ד1=ӓC p %ӓH%p n#ؗ~@6+p163ԓ#A/@6ص֗Q1׵ؓ@صחWPth cZe ؓ166ص֗~@6,a012ԓ#A/@6ص֗Q1׵ؓ@صחPth # b ؓ165صA֗~@6-a2ԓ#A/@6 ص֗Ay@$׵ؓAصחPtU w    b ؓ165صdؓHp161ԓ#A/@6 ص֗Q1׵ؓ@صחWPth cZe ؓ166صؓHa010ԓ#A/@6!ص֗Q1׵ؓ@صחPt1>b ؓ165صAؓIa 0ԓ#A/@6"ص֗Ay@$׵ؓAصחPtU w1>b ؓ165صdؓHp16&ؓo+&A/@6"ص֗Q1׵ؓ@صחWPtA`]e ؓ166صؓHa01%ؓo+&A/@6#ص֓@$׵ؓ@aصbؓ166صAؓIa %ؓo+&A/@6$ص֗Ay@$׵ؓAaص׵֗bؓ165صؓHp16$ؓo+&A/@6%ص֗Q/׵ؓ@TصAXZe ؓ166ص׵ؓHa01#ؓo+&A/@6%ص֓@$׵ؓ@Sص!b ؓ166ص׵ؓHa #ؓo+&A/@6&ص֗Q-׵ؓARص׵#b ؓ165ص׵ؓHp16"ؓo+&A/@6'ص֗Q-׵ؓ@Rص#Ze ؓ166ص׵ؓHa01!ؓo+&֗A/@6'ص֓@$׵ؓ@Qصb ؓ166ص׵ؓHa "p+%֗B$ص֗Q+յؓAPص׵!b ؓ165ص׵ؓHp16 ֗Vp+%֗B$ص֗Q+յؓ@Pص!t]e ؓ166ص׵ؓHa01 ֗Vq+$֗B$ص֓@$׵ؓ@ص#h cb ؓ166ص׵ؓHa ֗V ӓ#֗B$ص֗Q)׵ؓAص׵!@,qh # b ؓ165ص׵ؓHp1oe ֗V ӓ#֗B@6ص֗Ay@$׵ؓ@ص!-qh cZe ؓ166ص׵ؓHa01֗V ӓ#֗B@6ص֓`N׵ؓ@صחPth cb ؓ166ص׵ؓHa ֗V ӓ#֗B@6ص֗Q'׵ؓ@ص׵חPtU wh # b ؓ165ص׵ؓHp1oe ֗V ӓ#֗B@6ص֗Ay@$cؓ@صחWPt h cZe ؓ166ص׵ؓHa01֗A ӓ#֗B@6ص֓@$ Akؓ@صחPth cb ؓ166ص׵ؓHa ֗A ӓ#֗B@6ص֗Q%1 ؓ@ص׵חPtU wh # b ؓ165ص׵ؓHp1oe A ӓ#maصד]^ @$AIؓ@ص׵חWPt h cZe ؓ166ص׵ؓHa01A #maص֓@$ n&%ӓH(p J՗Q j/׵ؓHa A #A/0ص֗Q#k%%ӓH(p J՗Q 3׵ؓHp1oe ؑ #A/1صד]^ @$1(׵ؓHa01ؑ #A/1ص֓@$#ؓLa^KAHa !#A/2ص֗Q1L# D;JIa!#A/3صד]^ p#ؓL^KAHa!#A/3ص֓@$#ؓLa^KAHaؗ?ؓ#A/4ص֗Q1L# D;JIa ؗq[ؓ#A/5ص֗Ay@$#ؓLصחa*/ؓJ~Ha#ؓ#A/5ص֓@$#ؓLa^KAHa$ؓ#՗A/6ص֗Q1L# D;JIa%ؓ#՗A/7ص֗Ay@$#ؓLصחa4#ؓJ~Hp1/%ؓ#Փeص֗Q1#ؓLa^KAHa)ؓ#Փfص֗Q1L# D;JIa'ӵؓ#Փgص֗Ay@$#ؓM##ؓJ~Hp1-'ӵؓ#Փgص֗Q1#ؓLa^KAHa)ӵؓ#Փhص֗Q1#La9.&%JIa)ӵؑՓiص֗Ay@$#ؓM^J~Hp1+)׵ؑՓiص֗Q1#ؓL$ f0c KAHa**׵ؑՓjص֗Q1#La9.&%JIa*׵ؑՓkص֗Ay@$MK0J~Hp1)*׵ؑՓkص֗Q1#ؓL$ f0c KAHa(*׵ؑՓlص֗Q1#LS^JIa*׵ؑՓmص֗Ay@$MK0J~Hp1'*յ׵ؑՓmص֗Q1#ؓL$ f0c KAHa&)յ׵LՓnص֓@$#LS^K@Ia )յ׵LՓoص֗Ay@$M8&JHp1%)յ׵LՓpص֗Q1#ؓL$ f0c KAHa$)յחLՓpص֓@$#LS^K@ؓHa )յחLՓqص֗Q1M8&JHp1##յחQ)Փrص֗Q1#ؓL^KAHa"#յחQ)Փrص֓@$#ؓLRPf !S8$@ؓHa#յחQ)Փsص֗Q1Mq%!\,Pf~@6,Hp1!#յחQ)Փtص֗Q1#ؓL%!\6~@6-AHa #חQ)Փtص֓@$#ص/ؗ~@6.صHa#חQ)Փuص֗Q1ص+ص~@6.Hp1 חQ)Փvص֗Ay@$#ص.صؗ~@6/AHa חQ)Փvص֓@$#ص/صؓKصHa חQ)A/Iص֗Q1*صؓKHp1׵1 חQ)A/Jص֗Ay@$#ص(~1AHa1 חQ)A/Jص֓@$#+ؓKAHa֗b חQ)A/Kص֗Q0# ~D!>hؓJHp1֗b חQ)A/Lصד]^ p#~D@AkKAHa֗ae חQ)֗A/Lص֓@$#~D1 KAHa֗`e חQ)֗A/Mص֗Q1Lח|8JHp1֗`e חQ)֗B;صד]^ p#ؓLصח| /KAHa֓ ӵQ)֗B<صד]^ p#ؓL^KAHa֓ ӵחQ)֗B<ص֓@$#ؓLa^JIa֓ ӵQ)֗B=ص֗Q1L# D;JAHa֓ ӵ]֗B>ص֗Ay@$#ؓLصחa*/ؓJAHaֵ ӵa`֗B>ص֓@$#ؓLa^JIaֵ ӵ]֗B?ص֗Q1L# D;J~Ha'ֵӵaV֗B@ص֗Ay@$#ؓLصחa4#ؓJAHa&ֵӵX֗B@4ص1> @6-a@ ~@6$I9صֵӵaV֗BA4صAS ~@6#.&%~@6%~H;صֵӵ֗BB3ص1>~@6$#~@6&AHص֗{ӵ֗BBص׵ص-ahIص֗{ӵ֗BCص׵*~~Hص֓ ӵL֗BDص׵׵(~AHص֗ ӵL֗BDص׵$S$Iص֗ ӵL֗BEص׵ص&~~Hص֗ ӵL֗BFص%~AH6ص׵ӵL֗BFص׵$~$I7ص׵ӵؑ֗BGص֗Q!T׵ahص#(~$~H7ص׵ӵؑ֗BHص֗Ay@$T׵ahصד#(Af~$ AHص֓)ӵ֗BHص֗Q 0S صwA׵ؑ~N~$ Iص֓)ӵ֗BIص֓@$#LS^J~Hص֓1)ӵ֗BJص֗Ay@$M8&JAH ص֓1)ӵ֗BKص֗Q1#ؓL$ f0c K@I ص֓1)ӵ֗BKص֓@$#LS^JH ص֗Qe)ӵ֗BLص֗Q1#ؓL$ f0c KAH ص֗b)֗BLص֓@$#LS^K@ؓH ص֗Pe)ص֗BMص֗Ay@$M8&JHص֓)ص֗BNص֗Q1#ؓL^KAHص֓)صחBNص֓@$#ؓLS^K@ؓH֗'صؗ!r8[ص֗Q1M8&JH^(صؓ4ص֗Q1#ؓL^KAH(ص׵ؓ4ص֓@$#ؓLS^KصH)ص׵ؗAT"qص֗Q1M8-&!JHص׵ؗ57iص֗Ay@$#ؓL^KAHؓ!ص׵ؗ56iص֓@$#ؓLS^KصL ص׵ؗ55jص֗Q1L8-&&JL ^`ص׵ؗ55kص֗Ay@$#ؓL^KAK ^`!ص׵ؗ54kص֓@$#ؓLS^KAJ ^`!׵ؗ53lص֗Q1L8-&&JJ ^`!׵ؗ53mصד]^ p#ؓL^KAI ^`"׵ؗ52>L L"ص֗1e @1(pLL׵LpAHQ`#׵ؗ51>L L"ص֓1($1(pL׵~N pH #׵ؗ51>L L"ص֓1(#׵1(pL9֗1e.׵p AG $׵ؗ 50>L L"ص֓1("׵1(pL8֓1(Jp AF %׵ؗ!5/>L Laص׵ؓL $L$ F9׵ؗ!5/>L Laص׵ؓL $L$ AE*׵ؓhL Lm$Lص$ AD*׵ؓhL Lm$Lص$ D>ص׵ؓhL Lm$LصP~C>ص׵ؓhL L?֓1($Lصד1(j$ABaؓ1ؓhL L?ص֓1($Lصד1(j$Bp1ؓ1ؓhL L?ص֓1($L صד1( I׵$~Ba ?ؓhp Hص֗1e$L 7صF׵$AB%ص֓ؓhp $L 7صF׵$C;ص׵ؓhp*֓1(7׵$L9ص֓1(*׵p~B;ص׵ؓhp*֓1(8׵$L9ص1(*׵pAB:ص׵ؓhL=֓1(8׵$L9ص1(*׵pC9ص׵ؓhL L+֓1(7׵$L9ص1(*׵p~B9ص׵ؓhL ~N ׵ $L:صF׵$AB8صؓhL L ׵ $L;صF׵$CصrؓhL L ص׵ $Lص$~BصrؓhL L ص׵ $L$ABصtؓgL L ص׵ $L$Cص֗tؓfL ~N Vص׵ؗ$Lؗ@6~Bص֗tؓfL L Wص׵ؗ$[ؗ(@6AB7صؓeLص ׵ؗ S#@6@Cص! ؓdp*ص1(8׵ؗ S#bJpBص! صؓdpLص1(9׵ؗ S#a׵LpABصA` صؓcpLص1(:׵ؗ S# Lp@ؓBص1> صؓbp LAy(׵ؗ S#/ D׵LpBص1> صؓص֗Q1#ؓL^KABص@ صؓص֓@$#ؓLS^K@ؓBص صؓص֗Q1M8&JBص صؓص֗Q1#ؓL^KAB صؓص֓@$#ؓLS^KصB!صؓص֗Q1M8-&!JB!׵ؓص֗Ay@$#ؓL^KAB!׵ؓص֓@$#ؓLS^KصBX׵ؓص֗Q1L8-&&JBX׵ؓص֗Ay@$#ؓL^KAB׵ؓص֓@$#ؓLS^KAA1$׵ؓص֗Q1L8-&&JA1$׵ؓصד]^ p#ؓL^KA@1$׵ؓص֓@$#ؓLS^KA?1$׵ؓص֗Q1L8-&&J?1$׵ؓصד]^ p#ؓL^KA16>1$׵ؓص֓@$#ؓLa^KA16=1$׵ؓص֗Q1L# D;J16=1$׵ؓصד]^ p#ؓL^KA16<1$׵ؓص֓@$#ؓLa^KA16;1$ؗ1ص֗Q1L# D;J16;1$ؗ!Uص֗Ay@$#ؓLصחa*/ؓJ~16:1$ؗWص֓@$#ؓLa^KA1691$ؗWص֗Q1L# D;J1691$ؗ^ص֗Ay@$#ؓLصחa4#ؓJ~1681$ؗ!_ص֗Q1#ؓLa^KA1671$ؗcؓ$֗Q1L# D;J167?1$ؗAf1( ֗Ay@$#ؓM##!ؓJ~166[ 1$ؗcؓ֗Qc1(+p #!KA165[ 1$ؗAkؓL ֗Qc1(.p !J165[ 1$ؗ1 ~N ֗Ayc1(0pb! ؓJ~164[ 1$ؗAIؓ~N ص֗QAkؓ1(1pab#!KA163[ 1$ؗ!ؓص֗QAI1(3p ab1&"J163[ 1$ؗ3ص֗Ay1(4p b!J~162[ 1$ؗAuؓ0ص֗Q!ؓ1(5p 1e!c KA161X 1$ؗ1>ؓص֗QAu1(6p ua1eaPSJ161X 1$ؗ@ص֗AyAS1(7pu8صAyP]J~1601$ؗAXؓp֗Q1>1(7pu7صc(KAn 1$ؗ!ؓ~5֓AX1(8pu!ص?K@n ؓ1$ؗ!}Z{$pu ص!]AJnؓ1$ؗ#ؓ|p֗Q!{$ puصBKAqjdVؓ1$ؗؓz9֓#{$auص:Pf K@ؑbVؓ1$syp>ص!{$uuص &JqMXؓ1$s#ؓx pص֗Q{$։uصcHKAXؓ1$s#ؓw<ص֓!ח{$։uصq@Pf K@ؓ! Xؓ1$sw\ص{$։u'%J! Xؓ1$s#ؓw\ص{$ uq/KAXؓ1$s#ؓwLSصa@>{$։uOKصXؓ1$sv~NM1${$։u],.& JXؗ1\s#ؓw~NoN+1${$ uqc9KAXؗ1\s#ؓvoN-vח{$ uJPf KصXؗ^s#v L01${$ u|F-&&JX!s#ؓv L /1${$ uח| /KA Xs#ؓv 7ص1$ؓ#! u aPPf KA XQs#u7ص1$ؓ# .q\J Xv.صד]1$ؓ# !]KA X#ؓu.)ص1$ؓ#.q]KA Xh#u 1(6ص1$ؓ#։uq\J חV(֗uVص1$ؓ#։up [KA ֗V. #ؓu 8ص1$ؓ# uI[KA ֗V. 1u&@$ #u u7ص1$ؓ#։u 6.&%J ֗V֗Ay@$uTص1$ؓ#։uq ZKA ֗VU&#ؓuSص1$ؓ#։uד#%#2KA ֗V@p#t"ص1$ؓ#uuד#% .&%J ֗V puCص֗g6$ؑauד#% !1ؓJ~֗Vp#ؓtBصg6$pu ד#%#2KA֗Vp#ؓtAصg6$pu ד#% .&%J֗V#&@$t"E֓1(8pu #% #ؓJ~#&@$#ؓt~NE֓1(7pu | I ғ168ص֗Ay@$# r]e ؓصחqg^&# Ze ؓGa$)16> ғ168ص֓@$# r]e ؓصחqg^&# Ze ؓGa$ D)@&16= ғ169صחqg^$# Ze ؓصחdLy p# b ؓH#F)016< ғ16:ص֓]^ p# r]e ؓصחqg^&# Ze ؓG/ 16< ғ16:ص֓@$# r]e ؓصחqg^&# Ze ؓGa$)@&16; ғ16;صחqg^$# Ze ؓص֗Ayp# b ؓH#F)016: ғ16<ص֓]^ p# r]e ؓصחqg^&# Ze ؓG/ 16: ғ16<ص֓@$# r]e ؓص֓p# Ze ؓGa$)@&169 ғ16=صחqg^$# Ze ؓص֗Ayp# b ؓH#F0168 ғ16>ص֓]^ p# r]e ؓصחqg^&# Ze ؓG/ 168 ғ16>ص֓@$# r]e ؓص֓p# Ze ؓGa$)@&167 ғ?صחqg^$# Ze ؓص֗Ayp# b ؓH#F0166 ғ@صחdLy @$# r]e ؓصחqg^&# Ze ؓG% 1661$+@#&ص ؓHص׵ؓK%^LR1$+@#&ص ؓHص׵ؓJؓ%.  { cM>`1$+@#&ص ؓIص׵ؓJo#$pr0f.&  ׵ؓL%%PCg1$+@#&ص ؓHص׵ؓK%V׵ؓLR1$ +@#&ص ؓHص׵ؓJؓ%.  M>`1$!+@#&ص ؓIص׵ؓJo#$pr0f.&  Lo#%PCg1$#+@#&ص ؓHص׵ؓK%V׵ؓLR1$$+@#&ص ؓHص׵ؓJؓ%.  ׵ؓL>`׵1$&+@#&ص ؓIص׵ؓJo#$pr0f.&  Lo#%PCg1(ؾͰx(~ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ֵֵֵֵ׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵յյյյصصصصصصصصصصصصصصصصصصֵԎ׵֎֎ֵԎ׵ص׵ص׵ֵҵ׵ص׵Վ׵׵ص֎׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ҵ֎ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صֵ׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Վص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$ҵص׵ص$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص׵׵ҵص׵ص׵ص׵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$kEkkE׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]֎B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]<]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]aaaaaa֎B]ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaaa$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaa֎ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaֵص׵a׵ص׵ص׵֎]==<ֵ==<]==<==<]==<==<ص]==<==<]==<ص׵ص׵==<]==<ص׵==<]==<ص׵<<<صkEkkE׵׵ص׵kEkkEص׵]B]ص׵]B]ص׵]B]׵]B]ص׵]B]ֵص׵]͵<]ֵ׵]͵B]ֵص׵]͑B]ֵص׵͑ص׵͑ص׵ص׵͑͵׵͑͵͑͵͑͵ص׵ص׵׵صֵεֵεصֵ̈́׵صֵ̈́׵صֵ̈́׵׵̈́׵׵̈́Ϳ׵׵̈́]]׵̈́]]]ص׵̈́]]ص׵]]յص׵ص׵׵ص׵׵ص׵Ϳ֎׵ص׵ص׵׵ص׵׵׵׵׵׵ص׵ص׵׵׵׵հհհհ׵԰׵Ӱ׵Ӱ׵Ӱ׵׵ص͸͵ص׵͸͸֎͸͸׵ص׵ص׵ص׵ص׵ص׵ص͜׵ص׵صص͜׵صص͜׵صص͜صصصصصصصصصصصصװصصְ׵صص׵ص͵صհ׵ص͵صհصصصҰص׵ص͵ְص׵صְص׵׵ص͵|||||||ְֵص͵||||||||ְ׵ص||||||||صְ]]صa||||||||صְصصU=|||||||||صְص׵صͩ=U||||||صְص׵صͩ||ҩ|||||صְص׵صͩ|||||Щ||صְص||||ͩ||||||U=صְصͩ||||||||||||||||=UصҰص׵صͩ||||||||||||||||aְص׵صͩ|||||||||||||||||ְ׵ص=||||||||||||||||||ְ׵صUU|||||||||||ְصͩU|||||ְ׵ͩ||||||||||ְص׵ͩ|||||||Uְص׵|||||UUְص׵||||||||||=ص׵||||||||׵||||||||ص׵||||||||ص׵||||Ұ׵Ұص׵Ұ׵Ұ׵Ұص׵|||Ұص׵|||||||Ұص׵|||||||||Ұص׵||||||||Ұص׵a=|||||||Ұص׵ͩU=|||||||Ұص׵=Uթ||||||Ұص׵|||||a|||||Ұص׵||||||aU=Ұص׵ͩ|||||||=UֵҰص׵|||||||=aҰص׵E||||||||Ұص|||||||||Ұص|||||||E|||Ұص׵ͿҰص׵ͿҰص׵ͿҰ׵ͿҰ׵ͿҰ׵ͿҰص׵ͿҰص׵Ұص׵Ұص׵ͿҰص׵ͿֵҰص׵Ϳֵص׵׵׵Ϳ׵ص׵׵ص׵ص͵׵ص׵صͿ͵׵׵صͿ͵׵ص׵ص׵ص׵ص׵׵صͿ׵ص׵ͿͿͿͿͿͿ֎ͿͿͿͿͿͿص׵صͿֵ׵ͿԎͿ׵ص׵ՎصՎӎֵ׵ص׵ص׵׵׵׵׵׵׵׵׵ص׵׵ص׵ص׵ص׵׵ص׵׵ص׵ص׵صֵ֎֎ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵06x(~ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ֵֵֵֵ׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵յյյյصصصصصصصصصصصصصصصصصصֵԎ׵֎֎ֵԎ׵ص׵ص׵ֵҵ׵ص׵Վ׵׵ص֎׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ҵ֎ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صֵ׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Վص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$ҵص׵ص$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص׵׵ҵص׵ص׵ص׵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$kEkkE׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]֎B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]<]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]aaaaaa֎B]ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaaa$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaa֎ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaֵص׵a׵ص׵ص׵֎]==<ֵ==<]==<==<]==<==<ص]==<==<]==<ص׵ص׵==<]==<ص׵==<]==<ص׵<<<صkEkkE׵׵ص׵kEkkEص׵]B]ص׵]B]ص׵]B]׵]B]ص׵]B]ֵص׵]͵<]ֵ׵]͵B]ֵص׵]͑B]ֵص׵͑ص׵͑ص׵ص׵͑͵׵͑͵͑͵͑͵ص׵ص׵׵صֵεֵεصֵ̈́׵صֵ̈́׵صֵ̈́׵׵̈́׵׵̈́Ϳ׵׵̈́]]׵̈́]]]ص׵̈́]]ص׵]]յص׵ص׵׵ص׵׵ص׵Ϳ֎׵ص׵ص׵׵ص׵׵׵׵׵׵ص׵ص׵׵׵׵հհհհ׵԰׵Ӱ׵Ӱ׵Ӱ׵׵ص͸͵ص׵͸͸֎͸͸׵ص׵ص׵ص׵ص׵ص׵ص͜׵ص׵صص͜׵صص͜׵صص͜صصصصصصصصصصصصװصصְ׵صص׵ص͵صհ׵ص͵صհصصصҰص׵ص͵ְص׵صְص׵׵ص͵|||||||ְֵص͵||||||||ְ׵ص||||||||صְ]]صa||||||||صְصصU=|||||||||صְص׵صͩ=U||||||صְص׵صͩ||ҩ|||||صְص׵صͩ|||||Щ||صְص||||ͩ||||||U=صְصͩ||||||||||||||||=UصҰص׵صͩ||||||||||||||||aְص׵صͩ|||||||||||||||||ְ׵ص=||||||||||||||||||ְ׵صUU|||||||||||ְصͩU|||||ְ׵ͩ||||||||||ְص׵ͩ|||||||Uְص׵|||||UUְص׵||||||||||=ص׵||||||||׵||||||||ص׵||||||||ص׵||||Ұ׵Ұص׵Ұ׵Ұ׵Ұص׵|||Ұص׵|||||||Ұص׵|||||||||Ұص׵||||||||Ұص׵a=|||||||Ұص׵ͩU=|||||||Ұص׵=Uթ||||||Ұص׵|||||a|||||Ұص׵||||||aU=Ұص׵ͩ|||||||=UֵҰص׵|||||||=aҰص׵E||||||||Ұص|||||||||Ұص|||||||E|||Ұص׵ͿҰص׵ͿҰص׵ͿҰ׵ͿҰ׵ͿҰ׵ͿҰص׵ͿҰص׵Ұص׵Ұص׵ͿҰص׵ͿֵҰص׵Ϳֵص׵׵׵Ϳ׵ص׵׵ص׵ص͵׵ص׵صͿ͵׵׵صͿ͵׵ص׵ص׵ص׵ص׵׵صͿ׵ص׵ͿͿͿͿͿͿ֎ͿͿͿͿͿͿص׵صͿֵ׵ͿԎͿ׵ص׵ՎصՎӎֵ׵ص׵ص׵׵׵׵׵׵׵׵׵ص׵׵ص׵ص׵ص׵׵ص׵׵ص׵ص׵صֵ֎֎ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵1x(~ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ֵֵֵֵ׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵׵յյյյصصصصصصصصصصصصصصصصصصֵԎ׵֎֎ֵԎ׵ص׵ص׵ֵҵ׵ص׵Վ׵׵ص֎׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ҵ֎ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صֵ׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Վص׵ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص$$$$$ҵص׵ص$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$صص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$͵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵͵ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ص׵ص׵׵ҵص׵ص׵ص׵׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$kEkkE׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]֎B]ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]<]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]B]׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]aaaaaa֎B]ص$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaaa$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaaص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaaa֎ص׵$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$aaֵص׵a׵ص׵ص׵֎]==<ֵ==<]==<==<]==<==<ص]==<==<]==<ص׵ص׵==<]==<ص׵==<]==<ص׵<<<صkEkkE׵׵ص׵kEkkEص׵]B]ص׵]B]ص׵]B]׵]B]ص׵]B]ֵص׵]͵<]ֵ׵]͵B]ֵص׵]͑B]ֵص׵͑ص׵͑ص׵ص׵͑͵׵͑͵͑͵͑͵ص׵ص׵׵صֵεֵεصֵ̈́׵صֵ̈́׵صֵ̈́׵׵̈́׵׵̈́Ϳ׵׵̈́]]׵̈́]]]ص׵̈́]]ص׵]]յص׵ص׵׵ص׵׵ص׵Ϳ֎׵ص׵ص׵׵ص׵׵׵׵׵׵ص׵ص׵׵׵׵հհհհ׵԰׵Ӱ׵Ӱ׵Ӱ׵׵ص͸͵ص׵͸͸֎͸͸׵ص׵ص׵ص׵ص׵ص׵ص͜׵ص׵صص͜׵صص͜׵صص͜صصصصصصصصصصصصװصصְ׵صص׵ص͵صհ׵ص͵صհصصصҰص׵ص͵ְص׵صְص׵׵ص͵|||||||ְֵص͵||||||||ְ׵ص||||||||صְ]]صa||||||||صְصصU=|||||||||صְص׵صͩ=U||||||صְص׵صͩ||ҩ|||||صְص׵صͩ|||||Щ||صְص||||ͩ||||||U=صְصͩ||||||||||||||||=UصҰص׵صͩ||||||||||||||||aְص׵صͩ|||||||||||||||||ְ׵ص=||||||||||||||||||ְ׵صUU|||||||||||ְصͩU|||||ְ׵ͩ||||||||||ְص׵ͩ|||||||Uְص׵|||||UUְص׵||||||||||=ص׵||||||||׵||||||||ص׵||||||||ص׵||||Ұ׵Ұص׵Ұ׵Ұ׵Ұص׵|||Ұص׵|||||||Ұص׵|||||||||Ұص׵||||||||Ұص׵a=|||||||Ұص׵ͩU=|||||||Ұص׵=Uթ||||||Ұص׵|||||a|||||Ұص׵||||||aU=Ұص׵ͩ|||||||=UֵҰص׵|||||||=aҰص׵E||||||||Ұص|||||||||Ұص|||||||E|||Ұص׵ͿҰص׵ͿҰص׵ͿҰ׵ͿҰ׵ͿҰ׵ͿҰص׵ͿҰص׵Ұص׵Ұص׵ͿҰص׵ͿֵҰص׵Ϳֵص׵׵׵Ϳ׵ص׵׵ص׵ص͵׵ص׵صͿ͵׵׵صͿ͵׵ص׵ص׵ص׵ص׵׵صͿ׵ص׵ͿͿͿͿͿͿ֎ͿͿͿͿͿͿص׵صͿֵ׵ͿԎͿ׵ص׵ՎصՎӎֵ׵ص׵ص׵׵׵׵׵׵׵׵׵ص׵׵ص׵ص׵ص׵׵ص׵׵ص׵ص׵صֵ֎֎ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ص׵ ׂ#xMwD@FC#@FC2tdCtGF@FC#@FC2tdCtGHIiIsIInI KIiIsIInI K MIiIsIInI K+PIiIsIInI KRIiIsIInI K+UIgI KJIbIiIsIInIW9IgI KJIbIiIsIInIW!.ZIgI KJIbIiIsIInIW\ IgI KJIbIiIsIInIa(_IgI KJIbIiIsIInIa9IgI KJIbIiIsIInIk d/DJAYI KJIbIiIsIInIkf!DJAYI KJIbIiIsIInIk%i"ƲRQ_j L=k \MI_IiIsIInIk:2`0p|ob˻ZIiIsIInIk)6n< @ bL` KJIbI7N9IBPm6IInIup < @ `} 3˻ZI7N9ICPm5IInI"/s P@`P]K JIb/aч`I r&g& b /*,>aZSIu:ť__fK JIb/[~Tl\I (m_ }5  { jIL pCIu)Woo KJIb/`Zb  bZI L 08i  `|a FIuzIHY ؊I KJIb/3? AI U p O. I pCI,}IeI KJIb/Pq  Ql\I / Nh IL _`m`!/I9IgI KJIbI f QI 2Ѫj H# I>"i`!1I!.I 4`!$I KJIb/i` o I ʡ @J>Iá`@j2I#`TI KJIb]xl!Њ 0PI ʡ @0N z4Iá`@j4!3!I KJIbIiIsIInI: ~ 5  aZI KJIbIiIsIInI)<A@` aZI KJI7N"(/u!`!Yo  .J(PmDII .J(PmDII ˡ @ p pIIPm`LII:Pm!m$o`I:< ] ~| aZI KJb(p o1bZ/$p oO+f#^$p oj } ܘ `!p oT`"/Yp@ nZI KJb` } Ӂ(/ ` } ; ` } C `  I"Pm$PmPm"I KJb`]/ `  ` /F ` WoI"/IdE b gn,!/ @gnag=2 @gn@ }/ @gn_%*I"IdE o   i^ >K]I I K;I !p !3 I E=DPm0PmI KJ>I`hI E*@DPmPm0PmI K@I`z !3E#8@MCF@ghI EoJAEV `! I ET`RY =HVDY  nZ-I O-:J I`RY JP@`VI O9 ЪZY 7M\ƻtI O9S M~m`aPP{  `  >OPƻtI O9S Mx ~cI|M n  ol>CRPƻtI Y T0S M__ ?qݥE~r{TPƻtI Y9S X| C _abp >CWPƻtI Y9p\Ѫݪn ~w=YPƻtI c-[ D^W YPm!IC\PgvtGe4D ڊY I^PgvtG`PmICaP  q%^c8  q%^[f8  q%^hB  q%^MkFgvtGm.DmCtGmLgvtGm.DmCtGGpMǻsI c%r@rHǻsI t@NDVu>ǻsI tDmCtGwMǻsI. y+DmCtG LzGƻtI(|ƻtI~ƻtI(ƻtIIkI KJIF`]p&IkI KʆIF`]p3@\ K JIPL OfE&z:@\ K ʋIF _Q PpP = .IOPm,I KJIFmIek  M8 7 .IOPm,I KʐIqP-)!3 ?j c |:I KJIQ`Фp f+ M  1= & _}h uZf8I KʕI?6M O jr`2ʫ P 6I KJIF(Pm oY >:d +I KʚIF(po >9ʫ ) u @ L\]I KJIƻtI&! .KPCI KʟIƻtI&,u` 9`4I KJIF63 I'+u` 9`4I KʤIƻ9Pm;I}`!3I KJI(`! I}`!3I KʩIq ohF ԫ}mp^0}`!3I KJI j ?LpI}`!3I KʮI.`O~X(I9?Gb O$I KJIq ohF t 3I,9=`" #Q]+(I KʳI4`! I 8 pf5pg  kI KJI4[вFI:8&Q oT4[вFI:f n /Y=VƻtI!.ci$iRI KʽIƻtI0#5-o KJIFPm(Pm/I0.Pp Y 5-o KIFPm(Pm/I13 ~{ QI+IgI KI?Jm`0 ~P!Xl\I+IgI KJI? >^bg  @ PeZI 9IgI KIYez1 %`CI "IgI KJIH}._Q `_Wl\I.& IgI KI1K\ G@,QI.IgI KJIáPm+PmI.'DmCtG GáPm)`" o.DmCtG LGFn ) P2~GƻtI3 P2~LGFYN9`!#I#0DmCtG GFYN9`!#I- DsCtG LG%] Q3-I0K Фhs}`I5IkI KJI4~08 C\ `I&3nGCr@ X @.I'IqI KJIt&I(pG&I5IkI KJIFPmPm:I5IkI KIFY^W@k"I*F#`QIȷ>ƻtIƻtI+8ƻtI+ ` I Y /IhI KIe o ۂ - I9D`!7Pm'I KJI} `_&I9D`!8Pm&I KIKtXI08ƲRo&g& b /*I KJ I `I082(m_ }5  { j I K I]R-I9; @ 'i   o KJI  }woI08< @  P O)I KID` I9/ Nh  I KJIF`[I +!.ť2Ѫj HI KIƻtI9IY @`!/I KJIF$4`!I +!.2Y @0N z%I KIF(`LI +#` ]  +"/! q `W c> +##F {H C}> +%2&IgI K&IF/X 0 +$1 e ^@&?J)I` 1 +9+ j ^ P { p^I K+IÈb ^7'-u ` k" P8 Pp I KJ.Ia/Pm!Y > +9 0 `}08 XI K0Ia'YY7:+ 08gZ{ f| p^I KJ3IƻtIA)65 e ^Ҫs5IƻtI7:D`!Y oN"I KJ8IF&YN9IA*7:D`!Y oI K:IF&YN9IA9IZ50P=C|$Q`!"IA*7:o$?I5 `! IA9I 4`!/YK JBIxP l3IA9g0N oK DI1!,, IA9j\ 0E KJGI5 _U`! IA9; `H/_ м 08`n  KII|$Q`!"IA9 i }mI|Mki"  KJLI4[`!Pm8IA9;  q+ KNI4[`!Pm8IA9; `0[  KJQIƻtIU; j ^ KSIƻtIUKPmo.P$I KJVIƻtIn -X@Pmo.PY KXIƻtIn!@]<xYI KJ[IQa e!$n@]Z]@j ^ ߃мϨ,(In"<-`\I KJ`I  ` +eIn#0bI`\I KbI0$.A#In#0b p&- ~w?I KJeI08gZ /ZIn$<S M~m`0 @}  I KgIQҪjaIn%iS Mxro0`g z 1LjGá`!(Y^W`! In%iS MYeI  prFI KlKAU= 8In8S X|0k 0n jI KJoKprIn&3qp\G ~w?I KqIƻtIn&3qD2I KJtIF*Pm0PmIn&3vD2I KvIF*Pm0PmIxz\ K\\ I {C\] };_o { }C] L M F/߻ I 0IfI KʀIqM |A/[e X{:0NEC\L | f>_ J {=n+  > KʅIK  ^iG`I#i K ФL> KJIá!Pm"I:1{ KʊIá!_i#I@4H { KJIƻtI$; { KʏIƻtI$8,P[Y  > KJIƻtI&3,PuY; KʔIƻtIƻtI& IgI KʙIgvtG2ITPm#I KJIgvtG2ITPm#I Kʞ_j* L R ( I KJ+!f0n , 2,( I Kʣ+   OLPLpI KJ| tO ߻ I KʨIgvtG20+n  , ZI KJIgvtG3+ LI KʭIƻtI:`#PmYN4I KJIƻtI:$Pm`"`!$I KʲIƻtIƻtI·ϷDƻtIMFƻtIͼFƻtIMHprIHprI5DmCtG LGƻtI5DmCtG GƻtI 3@MFƻXPmI 3@FƻXPmI. )@MFOc| "@E!Q]Pf` 9d/    NA@@4 Q~ B@S@Pc/| w  @ L\()@@,ԷS@ PmY )I  PmY )I3ƻtI3@ƻtI3F'Pm%(I F'Pm)Pm$I L R !3d] 4, 25nPpLPL~P i | tO P  | 4, }`2[ L!F9N9Y{ F,PJ@Y{ ƻtI 'ƻtI , > D$`!"I KJIFYN9`!I 9 oϨ %p Z! K IFYN9`!I  ɫP l6I KJ Iaz+~w?%%  ɫa(a&`!I K I A}0n  !#@ bp`!I KJI@ bx)t߱I 8#||`!I KIRm\e I1I prF% X`!#PmPm:I KJ7IhI K9>\0I K>UA-_ ~zPp @85CSAϤ i azo@85CȷG@SAϤ  zo@85=KHH-_ `ְ nYAKSKp 0i=KJOI 8o!Pm,=KJQI`"u` p=KRIh=UP2l:W2Ig=UP2l:L7Y;YN3Pm-=UP2l:L7\;YN3Pm-=_(tG4P2=l:L7\+S a2R =_(tG4P2=l:L7a+S P q0 2,(=UP2lwl:L7a+S @ bg? PLp=UP2lwl:L7f)STm\e z1 r @bp=ULPDaCtG4P2*lwl:L7f)0n q0]=ULPDaCtG4P2*lwl:L7k(ap -32pcU"lP2ldlwl:L7r)D PmYN8=UJP2xldlwl:L7r)A'Y`"`!(=UJP2xldlwl:L7r)Ih=x Isx@FCE@FC@FCtG L7wIsx@FCE@FC@FCtG L7w#IsIXIbI KI7 z#IsIXIbI KI7 |#IsIXIbI KI7 #IsIXIbI KI7 `!&PmIsIPm"bI KI7 `!'PmIsIPmPm"bI KI7  Q!!/\D$"/}9 | ow^%I KI7 j  0kA /nܘ P !p%p > .pJP_ /SP0XI KI7 8 `   _+rj/C | 0ПhL ? 8.[A Ϥ@`o b o" |~ ^o"I KI7  06^/e`  P 1.#/  prF/V_prF$I7 08g_? ϼ}# 0 e @ b;H  ( pJ p~ t@85 I KI7  QȪ9qI -|3TKG~w?^wpI K`!,PmPm/DPm%Pm6Y > .J!Pm+IbI K`!(Y^WY^WOoPm6Y > .JYbZ+I'Pm;I K`!PmPmIsI*Pm.IbI K.IsIXIbI Kh.`!% 8#N3Pm5I&Pm2IϗPm=I K J: 8#N3Pm5I&Pm2IϗPm=I K4k] /kSa2R % >Uw?/+ ~w?I Kh`AϤ hSP q0 2,(I ʫ `H/_λ j/3 `m`P_I K CQAϤ CS @ bg? PLpoI yo /# ?cL L ߱&I K+PAϤ} %STm\e z1 r @bpoI !  prFI K qb@[ q0n q0]I QLj/{N~?ajI K+8ap -32 / K` / G ~w?I K k"`" PmY/D PmYN9 J #`!#IPmCI K:ϗ(Pm>I K>>[u'PmY/F"Y`"`!0I#`!#IPmCI K:ϗ(Pm>I KIsIXIbI K7m&T/I KIsIXIbI K63(@tp^I KIsIXIbI K6<  Pc ,I KIsIXIbI K5;  ͭ X-I K>Ʋj[ Gejm/n!D> D$/ k n~w?/ QQ3+I K5 a(tp^I K>a_} h.R/: p*$p>  oϨ %pI _ ?c/x 0L32I K>]_ 8v//vpg  lI ʫ Pn  r/XfI_Z/I K5IpPmPm.I K>]_ í{//~O  'a/d 7prF/'A+I K5I `"eZPmpI K>@h N ޒ +n 08/b/: p*"` ^ph  @ bp I ʫ bp@85/ > a `I K5IgI K>ťa] Ei/n &||/n~w?I lw `I K5IgI K>[PmPm/D Pm Pm7Л.PmYN#/DL3IPmAPmI K>[PmYoDPm Pm7Л.pYN#/DPmCI KEPmAPmI KIsIXI PmBI K8/fO?\32 R KIsIXIbI K7]> .= C~0 2KUPm,IQPm:I"Pm6IbI K5b}c q@ KUPm,IQPm:I"Pm6IbI K73]e O   K> fl{ ]"(/al{p @N `{ 3DQK5 o*N C~0 K>  @PP`*/SM ` n /SM 0S \v M q K7GO 2> + p^/+m L vo0`go` /` +  qpgo{`,^k+   L K'] n5I K>= K / Lv m/֭|O m/_- O  L K4%PmYI K>@ `_+^ @Pg| p^/QI `_+^ @Up/SM p S \   ? @ְ K4IhI K>= Y j] `pOj /Qj]  N `  O { [ .^ P_K Y r'Pm/DPm#Y "/D 8/D ` PmoK J N!Pm/F[`"'0D  D` PmoK .IsIXIbI K.IsIXIbI K.IsIXIbI K0@FCE@FC@FCtG -@FCE@FC@FCtG }euxw>D@FCA@FC@FC4tGF@FCA@FC@FC4tGH IsIeIsH IsIeIsM IsIeIsP IsIeIsR640N oN/I KJIWIsIeIsU1I p['N/I KJIWIsIeIsW2FL0I KJI.IsIeIsZ0- 0nbpo KJIݠ_l  o-JmIeIs\0Im08b` I KJI}# IsIeIs_11\e 3 I KJI  IsIeIsa/ `0nP]I KJIuo `l `IsIeIsd1 f8I KJ]J pIsIeIs%f!I Pm(Yf`!I KJIϗ` vxlIsIeIs%%i,`"  `" vl9o KJIϗ` pl!IsIeIs&k&[4LLIUIsIeIs&&n˻OIsIeIs'pIϗ5`!(PmI=(Is++sX$@TKPmIAPm$Is+u+E p^I KJ]@ /[ #Q | ^X] _j{%    ?^ Iu)6xݠ_lyH1p^I K_ZP/[pϨ._  }` ]@~ؘN~ 40* _ J O0k  i,Iuzԁ px}gp^I KJIf{H a+ j/[{} ?Va =V} c J=~ XO.  `I ʫ PE0k  aNI,}  QFp^I KJ]{l+ j/[ qeO   pe2 J=~ם ѽ `I  E0k  aoI:o `lO1Q& K_S_`m /[e  f@[І` J p oHHI _J ڰ n Pc_`&I!.  pRa"I KJ]ߪ  kl"oTpj2 _wj Kp^/ N3 ъ0 I!ˡ` ~&p I KJI#Pm4nZ` `Y2PmpHXm`" .2ʡ` }5  9!I KJI9`!$I9-Yo J >[ Y Y^W0J Xm`"\"IT`@\I KJIWIsIFPmIs((JPmI[oЊ.x"[0X$`!$Pm2I -ʡ`  oPmPmI KJI$PmPmI[oP.x"[0/o0"PmPm2I=IcI KJIWIsIeIs((˗tJAIeIs(VPm0YI KJIWhIE3[]b N  pp ]b N  p   x=  :  ȭ  ? "oeZ5I"wQ/` 0 E3[]g ( -(]g ( QԺݒ  x x4 ~ E~ Sg%eZ5I 8%n Ѫj n~w?1[ Qr! Qr0hx= Y 6 n{ ڇ `)I %!P2Pm%I $P` J P` `Y/J Pm`" /DY -I /%!P*YoIQ3&u XU3"uPmJu `"܊ 0D-Y -I /IhIIWIsIeIsK`@gIWIsIeIs-DmCtGIWIsIeIs-DmCtGIWIsIeIs+ P2yISIsIeIs+?U@FCA@FC@FC4tG.DmCtGZ@FCA@FC@FC4tG.DmCtGU8IgIU<IgIU<IgIU<IgIU<IgIU<P2汗U:P2豗U:&QPmFIU<QPmFIU<D) j&! IU<䡗>  P2`NIaI8z 1(p IU<1;~ag s jIU<3 o1̭jIU<0Im/f~jI /3If%$Mw   ФI E=E>T`   WJ PI E*@ ԗQ.@` NJP I E+8@ ՗Q,|Cp5BІI EoJAI ՗Q(E! OI EoJAI Q%uH%`" .Yo O-:J IgI Q"J)T3`"  ywo.PI O9IgI ֗1nMI`XI ֗1nMpR OIfO1I`XIIRQIfT1pM`!%ITQIfV4N`!%IIWQIfV5ΫON9`!IYQIf[1ʫ O9`!II\LaCtG`2oN`!%I^LaCtGe5M`!%IIaJ  q%^%Xo@TTIcJ  q%^%?o @TXIIfJ  q%^hJ  q%^IkIhImIhIIpJImm&rO?3 FrJImw2b,Q Ќ  HGsVu=Imw3R,1`!$IIsw=Imy2:I ߾X/JzKIk|1ʫ @ ϼ  `,I K|KIk|1 ?ݪ 6I KJPm 6I KʁIPm 6I KJIkI Kʆ@\ K JPIf+@\ K ʋOIg-IkI KJOIg- !`x OI KʐOIg4z- nH  I KJOIg%~08b}-̕NIf3e 1\e   I KJ[bI:q`ρ`  I Kʚ[bI:] MQ I KJJ lPm7Y I KʟPqx]' `!(I& `" PmY I KJOOAN Ф{ p.I'c`!3I Kʤ9ʫ {H _n`AϤ0X0I}`!3I KJ8ʫ {H ^F  p.I}`!3H H` p.I}`!3H]vj`!(I}`!3I Kʮ6 X@TVI9IgI KJ6 ;o pPmCI,9lI Kʳ6 If-DmCtG L4 [4`!4I5DmCtG L5 [Pm1Pm)I3 P2~L!-&Pm1Pm)I!. P2~̽7OR{DmCtG LMʫ pe   a{DmCtG MJ M[ Wl{J M[ z1 %`U{+IgI KRͫ K"o._Q `_Wl{+IgI KJO B*QI 9IgI KOIY '`I "IgI KJOIY '^" I.& IgI KPI\YI.IgI KJSIc1IgI KPD`!)Pm,I.IgI KJPD`!)Pm,I)A@TSI KPPV&] +3   ]ߠ 5/ < spg_ PP@@8] :~\D` fo/ IqI KJOn!P N ]-IkI KPI `" Pm,PmI'IqI KJOI`"܊ Pm,]+pNIf-IkI KJU[4`!4I5ơgI KU[4`!4I*7xˡgI KJFD! JFI KRq O/pw e| 2FpJ:I KJR- Nj - cN1˫ s pLI KQT ͞L ~ o +ǥ pLI KJSOHL ?ۿ   Y /I `pLI KP` + 08 g  /`;Ȫ@TLI KJP! ^_& w2I `" "J>I KOJ l4Y]8} 08`"܊ JDI KJ O `!Y]8} 08 GIe1IgI KJQIe 1IgI KOIg1II.I KJIPm*I KP ]+E&o ¥  I KJPUAN -   +!.o B`j` 0 W .(I KPCn`A~08b. +#+ٟ Pcx ep=^VF` 1\e1 +"/!.֟`p!\H́`0 +# - p r;pmS.(I KJ$O]vj 0 +%2&L X o n{ oI K&OITY +$1%o Y I KJ)OI!PmPm +9IT mP  I K+PIf-1IgI KJ.SIc+1IgI K0SI[YN I7AO3fzYN IA)65& NPmPm I K5PQ1|'7IHYNPmPm I KJ8O ~ ?F#3o8 :Pl@ xP IG5ޒ A8L=P1> ?EP@ /` w 8?[0w }0~ _U AFSm P=d` 8LBM>W 4FG:ޒ3 uDMIPm(Y P4M F  LGMI`" o^"  <OYNPmPmY  KIPIf<?YYo` p `" LL``@[IA9IgI KNa4`!(IA9IgI KJQe`XIUKeI KSQMpT`x{UK PmI KJVQb `0p  `z ! {n -XBPmPmPmI KXP ! {n!@]4bj\ 0 MpJ[Q3P e *{n!@]d R._`P  h ]Uͫ  ݒ n P{n"d i & h G`X N Z {n#d#p-.4P h bSIFPmYIn#d#R2[__ ݒ h GeRI3Pm`" {n$<j$Z r gSIfi4gInZ*Pm8I KJjo@TNIn%i+o `pI KlSJ YYoQjIn8IhI KJoSJNmYoYIn&3qIgI KqOz 1!3qAIgI KJtOT}2}5;_ vo08/P &/c xo.Qm/P{BG` I K{S؄1  }?Ы\hM P  j I KJ~SH @<2i`x @I Y @@8[* j I KʀUС  )Y0E:p :JI KJUС  -k"Y@3go"` j I KʅOIg0ENAL  I KJOIg1Fu`!I KʊOIg3Y 8Pm0I KJIfI KʏIhI KJQ2. I Kʙ 2I KJ _ o Kʞ   I KJS0nź aI KʣPjB  _ZI KJs9 Y k"YoI KʨaZ`"  o  I KJ!@TRI Kʭ!@TRI KJPmPmI KʲJ:I`PmPmPmI KJtPmII;  a+3  I KʷPI$PmII;A`j` 0s5 Lp^I KJO uHI;q$t+08 /I KʼR_ II;5:5 I KJVM N9I;q;pms`ʑ wp^I KR 9I;n{ oK PG I KJO_tII;Pm#YPmI KP HI ;`" YPmI KJ^@TLI 9IgI KSXmJCI. 0IfI KJIf-DmCtG LM,o?3Z3I)+`I ƷSFʫ b o jI  -:JI5DmCtG LMʫ f@[= -DmCtG N+? I*i^oPm/I 3*Po.PPm/I O@@S|4I 5I.`MI KOI:Pm4I 5I.`MI KJO  w+Ia 0"\pw-Ʒۇ `"I KO`j` 0 0L2pJ `_Cs |( KJOpI 90ПLҟPc,I KO "I ޠLPWͭoX5JN1;pm#0L2 -@ |( KPn{ ow+I ,K iw`!"I KJOcIPm2I D`" `" "I KP+``" "I  I`" `"܊ I KJ IhI K IhI KJIhI KOIg% IhI KJO_\& EI #\\p]v& / %KT }UL PZϿ j I $H_pJ`0p(  p*-(I KJO Ձ^+  I 8ɫ PПL o5 ^mI KO-_o 8do ppI KJOxPc_ `0 \` I %2̫ @ gz0 -(I K WdR2 ݪo K "1 ^_ _ 2O]  %KJ#TsMm!Pm4I %WY`" {5`PmI K%PYoPm4I %''IY`" {5``" I KJ(IhI K*IhI KJ-I`XY  K/I`XY  KJ2 Ѧ/p8J4 P  *n > KJ7 qx aa{H > K9 A*{%> KJ< аІ@ gZ -μ> K><OO]_Ҫj { K> V2`!'PmCV9YCȷG@Ih=KHIh=KI4`!5=KJOI`]=KJQ !3͇ D*(`!%=KR5LK `!%=UP2l:W2ј ` 8=UP2l:L7Y+m: /} p+=UP2l:L7\+qf (] ~mp^*=_(tG4P2=l:L7\*\!O"`!=_(tG4P2=l:L7a+Dв<=UP2lwl:L7a+Dв<=UP2lwl:L7f)Ih=ULPDaCtG4P2*lwl:L7f)Ih=ULPDaCtG4P2*lwl:L7k(Ii=UJP2xldlwl:L7r)Ih=UJP2xldlwl:L7r)QN O =UJP2xldlwl:L7r)Eh/_λϜ- nH =x Is@FC$@FC@FCtG L7u+K M^h oz ? 08b}=x Is@FC$@FC@FCtG L7u+ K ֡y ? 08\e =xIjIXIbI KI7 z*ʫ Ko` =xIjIXIbI KI7 |+ Ԧ MQ  =xIjIXIbI KI7 &IYo<Y=xIjIXIbI KI7 &IY plMmY=xaPmPm$I4`!IXIbI KI7 $@Ax]PmPm#I`LIXIbI KI7 $@ Qh&aZ#/`$?iw^IXIbI KI7 $@PmD%=xI ѠQh; ( ^']cκe ]0XIXIbI KI7 $@\PmHPm =x̧ Qhg ` ]@~~ *@mIXIbI KI7 $@\ =   p>4o1̭ ^(/`X IXIbI KI7 $@\< RФ @`j` 0p^ =x̧ҟF o}`]@~ށ]0XIXIbI KI7 & t$p^ =xeΦ2 z`/ ??iw pIXIbI K1OL p^ =x2Pm`" Pm#jY k" IXIbI K5 Qoq;pmp^ =x'_" p` Uڊ`/[ Pm`" IXIbI K5Qrn{ oK pAxIjIXIbI K6j Y yw0N z=xIjIXIbI K7Y  `" =xBPmPm Pm"Ij6"IPmHI K =xBPmPm Pm"Ij:PmIPmHI K =x%Q-qe | +3 \  ; %= X&fdSy.!j^!I K =xFh/_ ` @5   ;{  `0p>ph @oZ _λ pJ !Zm0X!I K1DmCʫ bc_ P0km#w @oo  }L ^+ M |HϤ@` !|~ ` mI nZ)I K1DmCʫ peXP0km#w٬ϼo  ;@ Pa|Hx) /  Q_) C2I K/I g?s* f PQfo_ `0 \ >H !t@85%I K/ɦ Pѱ"0;Y Xr 2 ݪ`SKUw!p$1DmCtG GKPm Pm.jPm5#JBYIbI K1DmCtG G3upYY^WJPmPmYx#Pm% JfI KGxPmIjIXIbI KGxIjIXIbI K5ʡ`!%4o@w ˡJGQjIjI NIbI K5ʡ`!)Pm2@w ˡ`GYN"IjI NIbI K6Ǫ ?iw^I KD, |!ݙ]5V3/EFiw=G`{ -| O\G`I K6K Qh]0 KL @h՟Pcz*  ?h Ќ} Jpo0mHʺ ]04P_ > H  I K8ͫPQh M MI K˫: ۆПj M Po ip c]@~ po0Fm~ > bpo K8  M MI K˫  Ao  a[e XI K6K  ]0 KL @h1p on0 :  ]@~ O"Ǻ]0~M > Q g jI K7Ȫ?iw pDawj ` ݇  ? /#pG iw p7{ ߪ9w?0L3IPmPm;I K>Ap oIP8o` k"IPmpIZWP`D5I`" p z5`$I K>!`" Yp Y  Pm P89  IPmaZ)IZW`-I KJ;IjIXIbI K#`!,IKPmIXIbI KbPm>I K^Pm9Y  .J?PmIXIbI K5I-Pm>I K^Pm9Y  .J?PmIXIbI K;xo BQf Ni "  x Q )$I , p QK=2ho1NIʫ ?1 /k!0k? I (! I O o q K=Z L` ,_L K>os ` \Py n`A^hI  qpp 0Пߞ@ L K''Z \e1N{91̭оP @I  qpp O@ L K=  g  `1N{@?$4O? uI (  I ``_+ հ K;_wPGN{O.{ d?9ATq^ I *$I O.owj_K;ЫkPm`" { KG!YoMm`" `"܊ 0/@`!)I +#I YoK 63Y k"_" { K>!`"%Pm`"܊ `"܊ 0Z3`"!PmI r5``") `P u` 9K OIjIXIbI KOIjIXIbI KOIjIXIbI KQ@FC$@FC@FCtG N@FC$@FC@FCtG }KWѮ x!100644 32512.binֿd*bcՆa100644 32513.bin>Tcޔ-XP100644 32514.binR/"ZYXژ( .100644 32515.binUd#ϵ7J100644 32516.bin/5 !"@w7100644 32517.bin[^{tpƤ٠n)f+ Tаx File OpenHelv$ PFile&name:*b dP$ PDirectory:*b eP @ P&Files:,@RfPL @ P&Directories:L,@RgP2POK2PCancel3xFile Save AsHelv$ PFile&name:*b dP$ PDirectory:*b eP,@RgP @ P&Directories:2POK2PCancel0+x@@Helv  eP  dP/*(POK]*(PCancel7 xȀBorDlgFile OpenHelv$ PFile&name:,h dP$ PDirectory:,h eP'P&Files:0@RfPT'(P&Directories:T0@RgPhPBorShade$H`iPBorShade$PBorBtnButton%$PBorBtnButtonjPBorShadeP$H`kPBorShadeQB xȀ BorDlgFile Save AsHelv$ PFile&name:,` dP$PDirectory:,b eP0@RgP%@P&Directories:PBorShade$H`PBorShade PBorBtnButton PBorBtnButtoniPBorShadeExȀKBorDlgHelv  eP  dP fPBorShade*,$PBorBtnButtonf,$PBorBtnButtonx%100644 00996.binUgY{aUV;xRIFFWAVEfmt VVdata|zxz|}||}vvyqzqjag{uddz~mnxywrZ]p|w{zmhrsgjcHIfuoil}gH=ZwY[jumUWzߔ 2;sf+ǻظqtACXHk4cYk}t%V 8c˧ZXWY@ΜrjtbfȜl\vט[Oh~K>hm˙p`l)G65u؝]/+aĂREVyyvvѽXOpَY]wcbwxnsvqtқY9C_tnUShpYHH[nwsdUJLRVRLFB>>GSZUG<76=KUVRJGLW^YK@@QknE4=SoyhZYjdeʑZ?Pɝq]b~{f_wƴeB9UƜ`6.?d|V@B`mQ?76?Sqx^D482)"#.<<,)87*#044:AD@:50+*:[upQ6.?^yw\@2BgtlgfplZ`{x^XiϪvtѹͮyun{}kgssp]djkpfo|~zxrouumjcbitui_ZUSYbeaXMLU[\\WOMRSQSWYZWSKGJQW]]WPMPZbfc`][]cjrvtnklkkosrsutruvtux{~wonsxxmjs~uu{{yyoyƺmirqkq~ug^bqyghtw_OWozWCMj|W;:Su~nXDI^pvp\JENYcjkhis|k`_ftydTS^pnVO[wyh\X^qdOUhtvwuspqzrei~~y{}~~}}}~}~~voloswytj`XX_df_TJGHKMKGB:59@EFA<77>GPUVRNMPW\]^YTOQV]cdcbelqrokkklopomnpqqoooqrroopprrtvwvtuwz}}~}~~zy|}tsx}wstx}}yvux{}yvx}~~}}}~}|{yxz|~~~~|{{}~}zyzz{~~}||{}~}{{||~~~~~~~zx{~|zz|~~{z}{{}|}|y|{uu{|xy||wux}}|~zst}xruyqr{|vw~wstx~|z{}~}{xy}xsu}}xy}~{z{{xz{~{xy|y}{trv~~ywz~{y{yuu{yvy}zz}{|{y|||}yx{~|~{y{|}~}|y{|vsxwstz}ww}~wx||y{|{~~}}~~{{z|}}|xwzz{ytu|}}}~}}~~~|{{}|{|}~}~zyz}~~|z}|{|~}zx||{|~}{|~zuru}~|}~||{|}}~|xuux~||}yx|vsyzqrzwu}ytw~{}~ytv~utxyvy|yvx||vtu||{}|z|~~zy{}~~|{}~~|yy}|{~~vsx~xw|zvx}}}|zz~{y{~zz}~||~zyz}~zy|~}~}vsv}|wv{{y|xtt}uqsz}yz~tpt|~~~zwy|~~~|z{}}|}}||~}~}~~~{|}||~~||||yy|{||xv|}|}}~~|{wuzzx|~|{}|yy|~~~~|yy||xy~{vy~}|||ww|}{z}~zz~}{z{~zy|}z|{wx~~~~}~~~}{z~}yz}{z}~xy}{z||z|~}zz}~{z{~~|{}~~{z|~||~|z}~}~~|~~yxz~zxz~{|~|}~~}~}|}~~~{{|}~|z{}|}~{z}~}}}~}|}~~}xw{}{}}|}~}}~}}}{}|z{~~|~yx{||~|xx{{{~|yy}{{}}zz||{{}~~||~|z|~~|~|{{{z|{xy}~~~~~~zvy~}{|~vtxzz|||~~}~~~}}~}|}}}~~~~}~~~~~||~}{|}}~}}~~~~~}~~~}|~~~~~~~~~~~~~|}}|~~~~~}||}}~~~~~~}~~~~~~~~}{|~}~}{|~}~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~s Ex * !ߓ0Fx%100644 00001.binp1VR: { ~2 0x( @wwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwwwwp:wx%100644 00999.binC٨V52{na0x H p H p |L0T8 HHHpHHHH HHHHHpHHHHHHHH HHHpHHHH HHHpHHHH HHHpHHHH\@dL pHpppppp pHHpHppHpHpHpH pHpppppp pHpppppp pHppppppt`h Hp HHHpHHHH Hp蘀 Hp蘸 HpȐlРt Hp HHHpHHHH Hp Hp Hpبఐ Hp HHHpHHHH Hp耘 Hp踘 HpԸ8```888`Р``888` 000@@@PPP```pppL(L((LL((L(LlX |XhT0\8( H p     HH Hp H H H H H p 𠠤nox%100644 00001.bin>{g 3)z% y x4VS_VERSION_INFO4StringFileInfo 040904E4+CompanyNameLars Hammer / KIWI Hamburg(FileDescriptionTDK Pinball MachineFileVersion1.00InternalNameTDKPINC/LegalCopyrightDeveloped 1995 by KIWI Von Wendt Konzept GmbH.$ProductNameTDK Pinball Machine ProductVersion3.10.0.0$VarFileInfoTranslation 9 gt%xP100644 02001.bin? Z-=T>S1Щ100644 02002.binQ*gĉUe.6100644 02004.binݥwq8VKPSD"?100644 02006.binI0yxљ2C*-)a100644 02007.binх'M100644 02008.binyTmS=UC"100644 02011.bin/5KhGm:Qǰ<100644 02012.bin6U ڂf Q100644 02013.bin:wgLƍ 0o>h100644 02015.bino'kDdf [100644 02016.binYݰN/rO + CƲnjwsgmbjA.`uć;0Qaf|ht}[Y~Т_OhqdbtvdiN:_tZ<0EyĬ`XXZ_hvʭfI>H]jrjZG:DcmYNJK[yqULYjrzıyiVOTc}k]ZX\jzR=BZqw]E=DZx`WPIJXqhL9>Zr_KBH^{}bUQT_q½jOCK_sqdSEFXvjSIOZfqpWFHXhz~pUDCRw~_NPXcvp^VYepyö~i^YWT_zvbOCKhxN6=]~}^TYYYexñiYUX\gq}qR46\}cSOPZqlTLWkvyxojXKUhyhQKPZvy[LQ_oo_VXdnywg]ZTXv{cTPTgo\OKWqrcZVYg{yg\VVd{odRDPk{eWNQbuo\VW_rxoeQHZwo]VW\frwaVWbnyxi[RYmtg]Y[dwweXZfpwui^V[jve[Y^izr\QWh{raXW`pxpmhb^fqVZtl[\oxkdkpZn]\sjUklihdw|zzs{cwpplgu~xU[s{w{|uYPb{{nr}kSUvzZObz~z|^Sdv~quxaX]onY_nxrj|}lWWwxmpxvjgvtZUk~~vkOPpwqxwjhu}g\dxx{wmfdky}xq^[n|kdoyz}oemy|z{}utwwskq|pjhn}}f_eswnqvtqsyrqvsptsuxlberrifir}tkku{{tolpu{vifmw}uplltzz~tfcfxwkkmrymjsx|{tqrwupvulliqtidi{qkry{ywxuow~tqurbf{tc`rrmowzvwsrwxspq{ylip{khsy{~sqvwrv~uw~zoku}~nllp~gfou~|vvyvry}{y||tjkz}pmlq}rppov}}zzurtuvzpkovvtnnyyvqnu|ytttw~ztrs~ylly}{sqvzwv{xwqn{~rkn|oiq{~upw||zy{wu|xty|rmt~~uqt{|xxy{}|||yxwy{y|woqu}{usswwrsy~}}~xux}|vv}zy|{qpyufhyvlkvpkrtvsw~}yqvx|ylis|sjpzvnu}wyy~yb_p~olim~ojlv~xops{wyvv|}{wtz}zuhhruimy~ww}~yx{}yzyxwy|wprw|ztprxvomr{|wros{zolpx}}uppsy{y{yrrxyvuv{}||vruz|xnks~usw}wmr~tu|oo{}~~~ngq~t~rfl~qknx~x}qgnwuz{uwwuvutyxyhaatzkaYaxfUbzwokqxrn{{icjsuu}|vgbj|ub]iw~~vniowy{zxxtomtvkciw~kahs}{{~|wqil|{truvx|}ibi{xqqont~zuxyrmr}zqc`vmefmzxrsx}zru|xo`^p}sjflytiju{~yrusnlq|zvrmnuz}rmlpz{rqtrov}wwslnx~sjjqzxpppot||y{wnkq}xlkpxwkks{}|tssttw}}ngmy{oiou~|ojpwy{~{wxz{vnsux~xuzv}}uw|ygkvprv|pdesznl{ux~~yu{zw|uruuuxyuqt{{zxoos|plw}w{xols~}}yuqot}x||lisulpoiux`[t{|x{vpslqsmiupfvwlu{|wr~zwt{~{vi_mpqrc`m||{mfryip~jo|svoynhl{to|~fanw}{qsy}zsqyvmruwtmrl_^[edRP]seafw~vym__nuvumnty|uozvebktxd_fot|zq\R\~zi^forym_hvztnwzjjuzngusmg^d{|p`ar~roljq|pikkmoy~zm`bs}u|wnjrr^bxyu}}tlijs~yvk]eyqgabuvc_crrwkgz|sjap{xncekzyoSLguhb^k~tllpxvjs|xta`er|ocht|vq]Yq}sx{swyjpvxs]b{va^n}v~deqx{{{tv}wmjm|qdgns~uidiqunlknxwken}}yqnwvp~{x{|slwsdkx|tir{z|z}xswxxzsswxvyzx|ujm|okr}kdjv|{vulot{w{xgf}ws|_gpkv{vy|xlt~r{jcsxxsquv{~utuv~ryrvxvvt~zupqw|kizzzxx~xw{vvx{}|}rv}wvwzz}zz~xww}~snrzxywy~xmr~z{~~~{vv~{vy|tt}~|xz~}~~}}~~~}}}}~~~}~~~~~~~~~~~~}~}}~~~~~~~~~~~~~~~~~~~~~sA%xRIFFWAVEfmt VVdata~~~~~~~}{z|}zy~~}vw}zde|gzfeq~|~km~~mNF_U ډH9Oܴ|: _/٢l3#5ki5.l?te8k=rYA?q1m dnA[u@jPhkxa06KXpX2(7?OH8<:H4:hTD:TTABTNarvPAexpnZ^rxqZcuyȿƱmlclUbpeRF=JQWZ1(?/(1DV_j{{~οo\MIS_bYQPX[P:)&-31/6J^f`VQYeqx{vjghig`bn{zjSEHQQNRc|~|ȻvfWJB>=BKU\XL>:93($CHJHB;60)$'4FXgużvcTJDACFLPQOJA6/-,.28CR^fmrvy|ļzmbYQMOVajid^XTROKNWet|m^QF<747@CCA@BDC?=BLV_kz¶}oe\NA=>CFFEEC?===;:=DQ^diow~wj]VX[]\]_`^ZYY[]bhoxztohZMDCEEC?ADGFC@?BEGLR\ixpe_WNGDDFEDCBBA>;78?KV\^cmx|}~vla]^a`_^bdda[WUX_hqw~~|zvnbUJDBB@AEJMIECDCCEIR]ju»{naSIEGKJGEEEFC>98:>FOXaisz{xwwf^^bc_]bjpmd\XXWX^fstcSLJG>45@OWSKHIJGBBIXftķvjZH>>GOOJEGKIB:68>EKS]jv{|{z~p`[\ababgorlaYZ^aabiw~}zn^SMJF@<>GOQNJKMOMJJS`pz}qdVJDEJLKGEHLJC;8LVXQG<9>J`vujcgwɿƻ~|}pYJHNVbs}xgP>438CTdmpi^VTYey´sYJHPYcii^M;22339@DFFEA?=BRjwnlt{xzwg[WW[cmvujZK?:>HWbjli_VQS^qĹv`VU]beeaYOD<8>HUbksvtrwʿwtyp_OA;=CJNPKC==DQ^jprssspr{wgXQT[cmqnbVKD@AHU`efb``begm{k\UY`gjfZMEDFKOV_immlq~¾{tv|nb\VMEBFLMKECEKR]hqtrrqlhowj[RRZdknjc]WPHBBLYdgdaaeknt{zk^Z[\]\[XUUUUUW[bggejz¸{|vh]\__YRLJIFBADMZgorroomkhm|{xjZPR[gmnjcZSPPPORW^`\Y]fpsuzľxngfikg\PHHLU^cfffec`bqzhXPRWZ]]^WK=58CTdu}zslhgiq}w{raWW]dkomcXPPSUX^aa\UQU`ku}vnlmkc[TOLLQ[ekkgc_^_i{wk_VVZ_ab_WNE>CQcsvjXNP[jx}qkgefl{{aJ;:BJNOT_ikhddn|{}vpwxonolaTHBENYbikfaZVXZ`mwqs{xeTD96=N`msk^SQ[ix{slghnzjTFAAEHKNV_degiozxw}{y}yvslbTH@ALYempnhaZVU[h{~utxkUD;;BO\glje_\_ftyojkqyueUIC@CHPTY]`fmvz{xn]OGCGNW`hpttk`XWam|~t^LAAGPX]`beimoruzx{wttzztkbZVSMGBBITZ^bkv}nZKDGNW^adhnqnidciq{|{naVPOOSWYZ]aejry}~~~{xy|pbXTWYUOJGHMSYbmy|~tcQEAGRakprplhffinw}xwz}tbRJLS]fhd\X^gpv{{y}}qf`ZUOIGHNUVSQYj|zn`WTSPQV`kswxvpgbgt~xx|~yuyo`SLMT^ccbelrrnmt}z~wqmje\QFACJRSQS_p~|zmaZVROOValtz~~yrjgmvvoov~{}ygXOQW\\\ajv~}umoz|~y{~voklkcVIDFLQPMQ]o{|}wof^WSRU_jtyz}~yrnrz|xz}~|wrqv|{xzqcYVZ^abbdkrwwx|}}|yxojfb]VQOPSSPLLUetvqv}{rke]SMQ_nyzyz{zwtuy~~ytqqsw}}unoxwojgd```ababhqw~xuy}wxzpf]URV\`_ZQICEObvwkhp}wme_ZWV_m{~yplr|ztpmlptz~~ytrs~uljlnlhfdb^Z]ixxrt}wj\QPSZ`a^WQLIKVj~~tmmt|{rjea\Z_jzxoow~yqhegp{ytpor{}soqqlebdfecagr{sqtwog^XUY`db[SNNPRYgx{otwru{{unmwqdVQ[pn]_uunoyyk`evxmjnrz~vqszzk]X\`cgoz|yttwjghcTDDVjm`NIPUYar{r|wuorr]TW_cekv|plld[[et|zrlmqu~z|}h^_a^VWgy~~}z|x{tndUJFKTXVQMMQZfs}}}ump~}{~yh^]`a_bkxzsh[ST\ciosspnu}{|~~zodZSSVany}|~z}oZIABFNV[[WPNVguujimwyx}|rifffefipvy~mZRTY\_hrwusv~{ysaUPQV_n|qZIEGIJQ[``]]ckosytnmntzvwxyzxtmghlqusqryscVRTZdmuyzy{}}th^XUW_n|vfWJDELT\_a_`dkqru{xqou}xtstvxwtojjnsuuuy{pbYW\envy{z|~||tlgc`_ak{~wm_OHJRZ_a``_agmrv~zwwzyqosy|yusrpnptx{}~}}~yod^^cluyyxy{||~|||}~znd^[^ix|yzvgXKJQ\ab`_`bdegmxyoov~xqpv|zrmlosw}~vtw~yi[SVeu~xwy{{|wuy~}sdXV^l|~yvzxdQGJUbgc_`fhhhjpx{mgn{yqqu{zrjjov|~upou|p]QTbqzzxy||zrnu}{jXRZj|{z|}~}kXJKU`ecaagjkijpzwnpz~yuvz~}wnjkqzzqos{tdYYcouuuv{~soqy~zsh`cjsy{|~~~~~|ocYUWY\^^begikox~{{~}||}|}|wojkr~}uqqx|rkiklkjlqux{}tpqv}~tnlnqrqqrtwy{}{~xnfdcb]YY[]^bipux|z{}zyxz{{}{umjoyzxtvyuomprqpoqqmlp}|wtuzysqsvvrpruurpsx}z{oiillga]\[XX]it{{{}wopw~wrlimy}}|yusv}vqrsrnlptspnpw|ytrwvnotwyxuspoopry|y}vmijlha^^\ZX[co||{{{xxyyyww{xrnklr~~xqms~utuwytmgeiotv|{oimywttwxtokloqsuw}~~|uvzqnnmh_VQV^cdfkx|xw{}topuz|~zsppqqxynjmv}wstusmgehovwy|or|~zqfchrzkcaa`bekusnnpt}siksurs{s]G;?NX_eniUSa{phkwrbWPS^n|fUMLUiyeTNUbsr`M?Opx`[RJM]vpbUKJQi}iZWPS^r~j`UIPiwsh^RN[n}uihUPccrweYRNVksm^ONZlyl^UX[ft~i_UIJgxöle]KI_svmhWJ[kvzl\NRdp~znWRZ]kpdWMUhvvncPP_l~}uk]UV_tscYPSezvl_QV^m}qd\]`dvpcYPSgwob[TResic[PVln^[ZZ\wmaaUP_zwgY^\[iti_UQ[o~{gUSXXlo^WQIYpxkaYQYezpg`PL`p}wodYUP]ti`YOJXv{gf[KM^ozmcTLS\s{lc\OUamxm`^d_[kse_\PVo~wgWHHSlzogb^XZhv}m]TNJYu}ha\LLVmvdMHBJc}{jSCH^}ziSFCDRq¼n`SFBIc~|fWJBKVrwgVJKMZv~m^RGGVi~whZO@EZxŵp^RIELiõ{hWIFHYszbPFCI^z¹pbI=ANdþ}kYKBEUnĿ{gTLCGWr¼ydWMDJ\vybWHEL^|{gXQGCXtż}hXLIERlkWMEAMhŽt\J@@PjĸlWJDELazreRIFK\o}m_TNOTcvzqbVRSXgz}rb[VOVesqd\TQS`rsfYQNP_o~vi[SMGXkx}lXPKHRgzp`TIFN_nvbVKEHTgx|l^NEBI_pubSIBDUg}}k]RHBI]mzgVNHHRapxgXNFCPeuwbRFABRfxúmYKE>BUkĺygVG?BQ`qk[ODBHR`vugQ@>DO`sp^I9=CM[v~jXK?=FObvq[I:9DQbwjWG;;IYj{hVGAMTdyyi]PKEH[mqaODHS`m~}hXLDHN\oqaQF?EXkxwfWKEITcu}n^VMHP_tzk]TQOVit|ufXPKMYpymbVTQTcu|q^PJO[euxfYTMNXfvuk_VMLZevumaVONWgv}phbZNLTh|xodYOMNYirg\TOMTev|teYTQR\gzzl`ZW[Z[m{xpd^YY[co|nd`]UU]hoe[TQQ[kzqaTONQYjvj]QQPParwj[SNR[ctp^VRUSTn}yp`QRUT_txk\SNQY_tqaUNQSYrwlWMLNWdz|kZMIMU^x}hWGCJWdvfUKFNW_r}hTGEJR_um\KAFKXkq_O@>HXl½q]MCEIQiül[NIJK\w~k\NGLU^wscVOLR_n~m\ONP[m~vgXWWVd{tha_`biytidcfmt}ykdfjjs{kd^bhq~zj_^`dn~{og\\dkutf^_adp{ne]Z_jqvg]RT^fvwgZONTavzfWONR^qkYQOU]nzk[SR[fuviYSV[hysdYUW`n{}qe[SXbl{{mcWW]ivvlb^]eu~{phd[_kw|m`Z`ag|vf\XY`k}rb[YZ`p~k^\[_et}i\[a_f{{mc^^_ft|odbabizwkc`gjsrgelklz|pfafjr~zog]^hmzuia_beo|rcZX^jxvg^^_ar{h[XX_hzw`YSUYetr_QNU^k{}oaWSZapucXUYapl[RPXbuxfYNN\fsyjXMQ]ertaZY[dr}qbYZbnytg_ZUassd][Y^m|zjaZ\\hz~odb_clzzkb`aerse][_gv~~pdXSYblz{gWRPS^sn]URT_m|sg[VT^px|n^VY_j{{l`]Zaku|oi_V\gryyle]W`gq}zpg\Zcisywhgbcfo|~rljeejr|}uieeeioythc`^cittkcWW[brwi^XVV_jznaZTUZdtwg]TQ[_g|rf]YYV\m{tf\URU^kxxh\STX[gu{la_UTY`mncZTPU_l{qg[TPQ[kx}qe^X[_eo{|wrji`_gioypc[TW\fuym^KFPTZrugWGGKM\zuk`TFGR^pwiWHGKS]kn_PD?BUds¸zcRGB>K]jueOFCDScrxdTIFLP]n{|lZIGEHVfx}jXNC>GQbut`MB>BO^nz|cTKF>DT\ptbPB8?GTkzhWH=@DM[oziYG=AJ\wxkZGBVevkUGCCJT`qzgUMHCDR`npYLG?DSbr|laMBBGR^v}o]M@GRUbpi[NIHGPZmzm_SD=EReumYI@GPT_n{hZPIKIRcq~q]JCAHS_r|kUEHFIP_tveXNCDFOdxwgXD:AMVgwr`QC=BOVf|s\NC?FOYi~~hWKCBCP_nudSFCBFWgz~o_LADRbuwaODABIVex}l\PCBDL_o|jWDDEEParvkYLGEGPfvylZJFHMWgrxmbWQKMR^m|xk_RJHP\bqufXJDJOVfx|j[NDBLR\m~tbTJEFHUfszoaOLJHRao{yoaYVOPRYjxwo_SMKSZer~|mZOGGMO\kzxgYHDJGLZj~sgZMDDEN]pugZQHDIRao}}n`XLGLT_hureZNNRPT_m{wmdXQQNR[o~}tmcYUU_ckw}vncac_acemz}qicYVZ`hr|tiaXSW_diq|ofb\XYbfnz~tmh^[__ghq~rj_\XOXdlu~p`VSSV\kv~rj]YY[_biv}wld_YV\ckssdYURVU\gqsg_VNKPVdr{pd\QKPYfqxzmcUSTVZbjwvg_WMPNQ\h}|pc[SJFLYhx}o\SJNU[fmwsi]WXXSWcmx~sh\RNMMTevwm^RJGIQ^l~|mcWNKLT]iwzohZROOXeqw}wd\STSUX`my~qbWJBGMWjv{hXKABLT\gsnZQMLLQV\i|}n^\WLDGWaqtfUFDGNZeqzlWHBHIJT[nug\TLC=H[mjQD=>J_jlvjWMIGMPQ[rre[QKGFIViwhULB;ETdoylUGEGJO\^loeZTRFFP[p|qaPHEIQYdqqdXTRONQ[oyndZSMFM[hx~sbSNLNYdnr}{eWTTTUZajz|mb^[RJQ\cv~rcYMDL[bpyqYQKIPU^frncWTQLHR`nwlaUOFGR^qvaPMKJYghp~w`QVVSQT\iti_VLER_l|{l^QPST^co}q_QPPRZbmyrfXRSSUWdtvnbWSRHMbn{~veRLFHS^mxxhVOQUXS\istmk_WPGERn|tcKHKSX`ip}ldXMRQNTbrwpbVUVNOVgw}{oeUJFIYhsztfVMTTSW]n~}od]RLMS\ly|saVSRSY`jtxoaVPRXYgv~wh\USVT]em}~ujZUQMWbmxrcYTVZ]dpszjb][WVV]gz~tl`TNTakozp^WSTXbdgqyjeb[[[Z`nysi`UUW\bfp~ski^XTWZ`q|qf^TOU^dlx}nb]WYYW^en~qjcYXSOXgtvpgWOPU]_jy{sd\VPSXU]jvzl]XQQROY`rrg^UPILRWdx~pcXQIHJV_j{zm]SJIHNU\m{wh\PGFIPZ_k|vhZOKGFMT`o}wk_SMKLM[is{}pdZQOS[^clxtjbZY][_fjt}|qke`bc`afhwxupifcdfjsw{~tjiefhgkou|z}qnfcghikruuvpkhgdiijprz|rohjdachnsvxrjhdcbflpv}{rmjffinntwz{rqrqnmoorsv~|usnilqooqqv}zwqkhdbchqt|{uqia[WX^itu~vna^XPU\cns{~pja]]UZY[fpstjcb^]Z`feq|ynke`a^\`bejt|toib``_[Z[_l}|vrmga]WXY_fp|yqieaaZVZ\dnxxspihc^ZW\jnt~upmlde`YY_ir|xvuj\RUVWajs{}ukh^UVU_cow}zskc^XWZaiiv~{tnga^\]aegmx~ytihaT\badnv{zwmg^UX]biq{{}xh^XU\_intvw}~sj^[^\dmnoluzqki``hb\acivwmjaX[]SYdes|weg`SUVRU]co}te^YPLSQXbkt|xpe`_Z\^]]dntwjdd`][]YYbky{wpfb``ZUTZenzyvplaZQJPT`ou|wfZXOIKO`ho{|~{paWEHLT^alsv}xo^VOOTST^mmz{s`SOILOU[\lv{k`VNKONRV^lw}fZTKOMOTT[kxlc`YPPKIKVky}peZMJCGNWeq|wkZHEDGVU[ksxbYUNKHKMSav}rbWPMKILXcj~wqeZNFHKO^kn}}k_TLPPMRYapwh`YSTJJV^m{~nbWPJISWcgqvdXMHIHMWcix}k]QLIKJQ\ewudXIDCBJUamviWC?FILV]jzxj]OKEKHLXfyqcWKH@BOWfv}oWNI@ALUagqq[QLDFGK]ktshXHEDAGWgv¼zn^H;=CMXcn{wf[PH@BMSZiyyk[OIC>IX^jx}p`OFA?HTZfqq`QGCEKMW`j~qeYPKG?FT`p~{o^LFB@FU_juzoZOJD>FP[nyp^RIEGGP[er}ufTJFFCL^jqwjYGBDDM[gp|wj[MHGIOUamvzk[RLHKIO]i{~rhXMFDGP^itwk_PHJIJXdo|zpcSJJGPU\lwvm_TLGGLX`n{ugYQMGQW^hr|qg_UNONRZfxypg\UKJT\hp{zpaTNOV\ekoxwi]ZVV[]chmvyqd_[Y[[bksy~wkb_^^`dhnsx}skeb`bilkorzzunnmjgfgipw|zroihihjoqwyyqhihfgikkqvyrnjifb`\`iszpid\VPVZ_ktvl\UOLQU[dkuvnbSPNOQTYbl{pf\SNMOMR[`o~pd\SOOQOQYcq~uj_YRPOQUXamx{qf_YVTRSZ[cpz}tja[WURUVY`jtwoi_TRPQTY]gq}zme\TPOPPT\gn{}ne^URPMPW^enxwk`YSRSWaadkoxumea^\\]eddkpv~{slgcffa`]Z_do|yrkjf`YXWW[_fr}}pga^ZZ\VSQVco}tged`ZWQOT[eoxypnoh^[WVY\bmt}~tka]ZVZYZcmrw}uia\\WPQZ^bkrz}ld^WTSV\^cenxwmg`ZZY\ceejs}znhe[[\\__dmty{oe^[YWYacdhsx~ulc]WYY\abgnrzzph][Z\``cehmtvmc_``_``accku~qjdc_]`YZ]aelywqka_XUXXX\aiu{wnhcXTSQX[bhqw||tlj`[]YUU\dnu{xtoc[XPSXbkkmsy{rf^TQOS[_cjpx}vi[VSNQUY^dkoxyqhXPKMWY_cehszxk^YURVZ\^bhmt~wma[XTSVV\afot|}m^WTQRUY\Z`ho|kbaZQNRTSXbks~sibYSOLMSZagp}wm_XRKLMSV^hq~yj`XONNNTX`is|uf\TMKMRRW`hsp\WQMMMOUX_jywjaVMJLPSW^jtxk[SPOOQTTZgpymbZTQMMTW\gs{od^VPKNTY]fq~yobZYQLORW]cqwk`YTPNORTWct}sibWPOHGOV\kx{k_WMLGGHPX\j||pf[NJDCFHQ]hrtfZNGA@BGMUbm{{m]QGCDCDJQ[eu}kbVLHCCAALXewxj\THA<8AJVbm}{rdTI@99HV^krúxqd]TE>=BKR[hv}º~{vh`N=9xxRIFF WAVEfmt VVdata ~~~~~~~~}~~~~~~~~~}}||||{|||||}}|||||}}}~~~}~~~~~~}}~~~~~}~}~}~~~~~~~}}}}}~}}~ytpmjbhȟlUa{nU:'/MnsfdvʿuQ3)5Olumpsqsyŵ~sz{_E:E[rxicdiov}w\KNawzj_^fkkbfyzhZW^srfdfji_WRXqxwbUVdryzsjca\VV_ml_`hwrgikicagqugZZfnoomhdeikr{|{hON[p|zpb]gqvss|~ojmttnkkebcdp{zu}|oe`fptrkcdhmt|{unq~ytsrqpqtttvwvtty}rjddfjt~wnkr||upnnr|zpmwy}vrqsw~}{yyy}}{~|{}|{zz{zy{~|zvjly~vmlryz|{ppv~~vnihjmv}|~vnkpxzqov~xov|ww|n^Zdqy~wszwms}jciwupuxrqy}{{xuwz~~}}~~vw{{zvv~{ogks~~zx{xppwzw|}{vv~|wy}}~wolnoqqu~~~~~~xxxzxqmou{~xx|xrt}zvvz~~}|{~xuy|{zxvuvy||zvtuwyz~~zxvvvxzzzzzz~|z{zyxtpptx|~}}~|zz{z{{zzyxy{zww|~|zyyvvxxwusuy~zxz{vux|~||}yy||xrollpv|}{}|{||}zvssty~zwy{~|zzwrpqstty~~{wuu{{tpqw~x{|wsuz{qkks}zy{usu{zplov~|wrot|~|unknsx|}xsoot{~wokpwzz{xqpswyxxxvttvw|{srw~~{wtstwz{}~~}yz}~~{xustuxy|~}}|~~{vrqppruy|~z{}{wsrux}}yww|~~~}~~~{zxy{}~}}ytsuz~zz~{{{~~|xwz|}{|||{y{~}}}}}|yvx{}{zyz{||||~~}|zy|~~zwwy|~~}{zz||}}~~}~}{||{zz|~~}}{zz|}}|{zyz{||}~|zzzzyyzzz{|~~~~~}zzyzz~~~||}}zywxz~~}|{|}|{z{{{z{|~~}zzzzzzyxyyzz|~~{{{{{zxwxyz||~|{{}}{{}~~}{z{}~{yy{}zyz}}}}|||{zzz}~~~{yvwy}}||~~|zzz|~~~~}}}~~}|~~~}|||}~}|{zz{}~~~|||}~~||~~{yy{~|{{|~~~||{|}|zxyxyyy{|}}}}~||zxxxyz|~~~~}~~}{{zzyz{|~~~~}~}{{z{||}~~}||{|~}zz{|}||{{zz{}~}|{zz{{zyyz|~~}|{{zz||~~}||||}}~~~}}}}}|}~~~~}}~~}~~}{z{||}}~~}{{{|}}~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~~~~sΩxvRIFFWAVEfmt "V"Vdata~veZ`yx_[g|wrvj\]emswyz~uq|zsuukhfipy{tokjmw}|~~|rmklntyytojecdjt{|sjc`beffffaVKEPjvo~ĮpU>/0?TfkaO9''>\y{ϷzY=/3CUbf^L5!'=]||x~ջrN7/7GXddWB.(@a}{wӸpO906I]fbT?*'Ba~wtͱIJpN7/:K[caR8 (DdtuεijoM94;HV][L6$(A_zvv˳°mO=8427CSds||y{¹rbYUW[]\TI=54;GVfs{|zz|re[XX\][TI?77=HXgtz{zy|Ľqd\\]_]YRH?99?JYhsyzyy|qd][^``ZPE<79@N\jrwxxy|qe_]_a_YQH?88@N]ktxxvw{pd^]ab`ZPG>89AO^jswxww{pd]]`ca\RH?8:CP_luyyvv{na]^`cb]SG=8:DQ`mvyxvvzÿ~mc]\_bc_UJ?88AN_mw|{wtxma\]bed^UH>7:DQ`nx{xuty½}mc`acdc_TG>;>FRanwxvtuz}pfbabed\QG@=@HTbltuuuw|rhccedaYQIB?CKUakruvwytjecbb_YQJDACJVakrtuwzujebcb_[SLDACJVajptuxztkfedb^YRKFDGMWaiosuwzwnifc_\WQMHGJOW_gnrvy}wojfc`\XRMJHIOV^elrv{~xpiec`\XSNKJMRX]dlrvzwpkgc`\YSNKJNQW_fmquzyrkeba]YSOMKLQX`gmrvz~yqifc`]ZUQMJLPV^houwz~xpieba^[VQLKKV`hosw|wohcba_[WRMJJMUhov{}}vlebcca]XRLGHMV`jxyz|vkebbbc_YRKGHMValsx{|tjcabddaZSJFHMWamu{|{~tbbbddaZSKFHMVbnv{{{{~sjcbbdb[SJGHLVcovz|{{sidbbc`YRKHHNXbmuz|{|tkebbcc[SMIJOWcnu{||}uib`bdda[OKIMWalu{~~shbabeec]UNJNWbmv|~~}ujcabdda]VPKJYbnv{}}~wkda`bca^XQLKPWmv|ujdaabba^XRNMQYcm}vleaaaba]YSOORYdnv|vmfb`a`_\WTQQU\emu{~tfddba_ZWSQSX^fov{~~umgbaa^[WTSUX_gotz~}tlgeca]YURSV[ahmsx}zrmjgec`XUSTU[bjpuy|zsmjhfc`[XUTW[biqv{}{slhffda]YUTX\cjquz|yqkhfeda]YWTUVcksy}zpjgeddc_[WSSV[dtz}wmgddeedb]WTRU[aluxngcbceeb^YTRSYclvpgccdedb_YTRU[cnw}xndccddb]XUTV[dmv{ypjdbbba^\YVX\dlt{{ridbaba_\XWY]ckt{{rjeaaab`\YXY\clt|zrjd``bba`ZXY\clu|{skea```a`][Z^cjs||skd`^_``_^[Z[cjrz|tld_^_```^\[Z]brz}tkd___`ba_\Z\^dks{qjfa```ba_]]]_dlu|skc^_`bcb`]\[_emv~{gb``bddd`\Z\`emvyog``aefc`][[]dnyymd_^eihea\YX^fqzxnd``cfie`[WY^fp|vkc_`chkja[WW]gsvkc^_ekmlg`UV]huvib_afillg`ZW^htujb`aejmkg`[WY^tvkcabeikkha[XY_htvB!Akq]V]hqm\PVnqk|úx}aQQ`teQSat~tlnteak{ucTNVnxfamx{yyoVEA?DR\]YW[dowyz˾s\NVUOA+:Tafgeftŭth_VJ7%&-17@HZuªmM0 ,38417JdȴnY@,#(.37724?Oczy?/1-!!,IWjǼw_I<:?EIG?635@TmVE:9?IQY^\XZ`kz~vj\RNNRUUUUT\kz}vvyyqcSB64:GXgmkkmoxmd]SLC=979@HQYdnxŸysjcXI8,$!4BLTY]ajzɽwkaXNE=3(""$*6DQku}p]K:,&'-1467:@KZmʼwo`N4.+-16=ENWbnu}scTLIGHHDAAEP]lwvj^SNLKLPUXZ`hns~qeYY]a`][XVZes{sfZPLNQUZdfiqw|tk`VLEEGJMQUUU[ft²}}wmM=3/07BLPRVZalzvmbTG=61245:@IWguǹ~gP;.).7>A>85CTiĴsbO@846888LX]ZTPT^ɻ~yveXK@8346:>DLVdpzɾlUB66<>BPYdlszvd[Y^bc\O>3/6F\q~~rvúpaW\_`]XRQTZbkqvy{nhgmtxsiZLM\o{ss|xdVQU^inmha]^fq}nc[V\aa]WOMQ]pƹoXD<>HRYZOJKScv¹vfWOIIJIE@<=DO`qµWGAEOWVMA3,0AWnȼxeXSSQKC;79BP^iprtxodadgg`SB728\nxyrihpndadjlh_SIEJUbnwyvv}soovsj]SPZhv~{ror|{j`]bkruo\WX`n{xmd^_`a_[WX`kxtaTMO\a`YPLLTbtuhRMKJHGHJLT^ouztXUWYZVNB84FUgvŽxj^UOLIIHHILQX^fq}yvutpg[B<=DP]fjkhjt}tolgd^XSQQUZ_eov}{qeZSRYbkqrmijq~pnqsuqld^]`mtyz|~~oopsrph^URbo|~xsxxh^\_ejjd\NQYgs}rligea[LGHNWbmsuuuzjb`chbWKB>BN[gpvwzzmid]WOHFIOWdffgmx{utuusk^PGCO[dklkjlq|zvusoiaUSW\aefhjnt}}{r]UU[emsusmltwrqswungb`agmvz~|xvsqmhd`adjt{~|zy~vbbfjonle^Z[lwxrke`]ZXWZchmpsvy~{necdilkdOIIP]jv}sha^\\ZXVVX]`fkxxvy}wn_RIGMXfrwnhfly}mmqtsog_XVYekptvz~}pbWV[t|~xmd`fswomt{t_]ckw~}z{{xxz|}zsb^bmx~to|~~zi_^fq||qdZW_kzxrpolhc\YZ`kv~xtu}o`bmw{xl]NGLY}|uvvokihfd`\Z_djnoprvwmls|xfIFN^p~|shcyvpqvzumd][^djnoosx~{}xi\WZesshacn}wpxvjcafnyvuyxz}}tjegmxsrx~riglt}vk_do{|~}wqnmnnmiffjow|}|xolmrvtmd[X[cnx{yzxqnmnmje`_`chruwz}~{wog_[\agrsqnlov{{|{zuoiedgjlnpsvz~yqkjlrvwtpljkq|{}{smkkoswz{yxx{~vpnptzyopv}zqor}tkefmwzx|zzwsqomlmrwzzxuvzwa^tj`fulWNmqr|y~yr{q]_q_PSh|eVWvr}}}edjquod\]co|vlfm~zd`loWKPbvl[U]rðl[`yyS6IeUazkxҾX@Jm{S?KljONioPT|C/IZ!2mh6,R߽I:`:-Sˡ+&L^Lڪo\ГN0_j0PlMN˱s{ӥoPZ]((TsA Oӷafώa^˃A$HwG%j̆OAhlIa1!Q| +gvVПsϿ]>]U,\pOH˧yègb{[A-3LkoWJTrƱ}SEFS`f^ADUpzͽ}MQbu{pZ=DXm|~zxus~^HGYv^QWl|sy|t{vfeuzaS[xbQ\}kTTmqXWkvhlnl{s`tiVkq`rzm{qyoo~qfetp`bw~e`pya\khX^ux]TfbYmĄ]P`H;MtEdF@XqgxkUeywg`|}tzxgicPRcvgdpw}s`d~|R9=ZqP@Mtudsu\`}S:NXXIUo{籍{|]A7:G`}ӾkLDNfV41ldŜbDEJJM[douw}ǷiTbrudE:Xtx̛XGM]mVFEYxz|Ų|qaXXURXg}̸{[?7`rkO9;ģz}tNB??A@[m|Ԗ{:/6EK+ *LvάqV?2- 0Ugyȧj`^O6 GOF>IǮʦigpumVAIWbedo|~qEJ`[[u’yt~cUZkzqe_d|vsrpg[Yex}}na[ddYF:XwϟaPD=8:FPXZ^бyd\_c\/#:ZrtkoųyoO;,&3HZZ\hþtlytcJ5EXdc]^yuri\OSbq{ujt|{n:4D^u{bavtnt}xeSLOemmov~{}bSXn}hctdes~{iVUk~lgc^WMPZdhiwtcdlvtD.+AeypzտseNC;67?O[kĠ}jjzoV7)CTWPL}uqndS12>M[^_huȶyNGJXbbRSezpxlXTw|ja{jai}}eVVh~t|nUN]lriVCSpwsi]O?@FR[`m~tvz>% 4X~tb[k°u_TUSKRcv}˾sbMJGB>9>Nat϶s]I>@^gd[TX{lffgfVONVdt\Y`inm`bmxvxz{zz|}{|ut{jbcjsxsovunpspfYPXgtz{ypXIO`nqj`jrkmomXMHNZx~~zZLDDKU\^ajxýwdPBFRiorvŷzSPWcl]NHRjyqnx{pnx{uvwnlozyuty{mruaXfzrp{|zj\Wbinmihm_`mynV=.3L||vzƸoUQPMF53;NcucI;DQWQEF[yògJ75F^tk^ZcwciszwXNRd}zszxtb]swdnyqx|leftuoilytq}|a_hsulgo~zpllojc]]p¯sg_26Lgqd\e|yf]`mg\L>CYqìQDFSej`[^}dTKLThllm{{smlh`KIP_p~zw~jVQ[}s`P_wy|~~rns||tsqxxons{y}{{o_WXezrVQSY_^]fwtos{tcOBIZksrjsǹXLIO`_[[_xxfTGKU^ccem|zpbNOWae^Y^nxjis{l_hv|yz~|}{mwmgtdhzwcX\w|tn}~zxwrke_cmw}~rd][`bcgo}~n^ST]fiilsvjedf_VQUq}}|cIN\ioa\anzvuoh`[\hptwx{rtssqnklp}wffjr{yrqull|xi\gz}{}nou~vs}plsob`kw}|{upnjcUTY`fos||rjg_YSPThqy{kOT`iaWT\n}x{|n_U^istnhtsnw~}g_^ep|~~rlnwyldu}rsuhzxdr}sv}jh|_Ybvvww{k\Wgnog\i|}~kMNWchd`dp~{qgZS_ny|vhqa_gqucXYh}w{~jYQhy|_]m{fkv}c[_mzuy~sorw}~zqsyyz~gfpzrxtrye\du{poykfv}kVbz}s||mxr`X[h~|unyvnmlhdcjs}~ypmjeUQVdvo_U^dfaZ\i~|{k^Zalwridy~spxzsoqw|}xvx{~~~}~qnpy|vvzneep~kW`tz}v}`W[fwskce}wxvncOS_r~uqv|uql]VT[w~wq{oimpog]`ivyjcgvvcYzyjkz}omu}zz~wtx}vlddmz}{~ypptx|}{x{utylimvvnjjosngctxwyZT[ix~vp~}vrrpjc_n}~z}j`\^gxzwt{|mifdmsusppyyupljmu{~wvv{~~tfazocp|po|t{~{||zxknu}sjm}|wphfqspico~yb_aiyzwqpoipr\Siwnvnfgkonieej}odit|{e`h{|yymltvmnwru~sjuinqgn}hi{ukm|zwmqz|necuz~pnyy_`oxu~y~widkw|tvtlnuaZp{mps}i_aj{yogez|}q[artfbn~~|{}wqot}{v~|}zplu~~mnu|{wkek{yic|vklxrnzu|{pp}mfqtpt~ywvvxvspkmu{ut{}th]dr|x|ldkxvdWVt~xxdhuuhdl|{y~wpp|}|y{~}yttz~||ywkkwxjukkuqjoxxsp{v\cupb_jv{yunmxyvrsy~~yvstx~rnr|xkg~wu}xsw}ilt|vv{pmspb_vpx{~rqtxyusru|sqxmr}{zy~|w}}xw||pqx}tpsw}wv}zv}|{|utzgdl}}lf}~~xoijy{yrnu~~~yslhqy|}yw|wvs`g|xhdm}|{}~zrp~zlr}qnyzkzxhgr{stxz{|xxzxzpmqzxq{wxos{ksegzvhgehtxnm{}ss~p`r`fvtpxz|z}~{y}wpvykhqksxtzvnzvdkzsmrvwymlmaqqgjxzuwzrkoqkwxrt~zxqpyqim}qv~ts~~plmfhtvp~xpmwqbosily}uuu{ztr}|}{}wox~jn{zz~pr{zmgjws{}y~or}lbfqvjru{w}olpyyohhy|z~|xvy~srxzx{{uu|ypwtjlw|lnojr}olkkw{rs}zwrtzxot~{uw}}{~vpqyysuvy{tqvuvyrw}nhc\g~i`osyt}rnr{zpnyxqt{~z{vqqsvttt|~}vqtwzyqmnt|z{tkw{lexxtxsxpixsmsuvpt}ns}~{z~}~{~|yy~|vstuyyx{~xtx}}}yy}ijt}oj{xxzqoqzxvsx~|uu}ilv{tz{{yzv}~tsrmnz~~wuyz|vdextb\~vqxzw~uoovw}vpt~|oo}{vytrx{lrxnzxlktxlx|nyvklyxltzon{hooal}xqsyrvrbiw}tnsuz~xpjhrxywv~zkcmvW`tylkxy~y|sskku~lcwvlpz||x{wmmxysuyzqqw{sqzx|qyhckxkvv|qmo{~zvrx||zw|zpr{wtw~~|}}|}~~|z{}yy~{qpzxw{~qk|helyy~nhktwlgq~~zv{usty~~~xuxyoge}spy{snv}~yiiq~z|rr~abp~qpy|qpswwsppvy{}ypkuzzvlnt|~~~sjzicixvtvrvnqmrukjhm~~twrw|sljm~}yyzymhhv{zvu}skhn{tv}yx~xlq~unr~}|uqz{onry~~zkdhuyms~{|vuw}yxwwz{|{{}y~pfm|wppx}z}{orzysz{srotyv|xy}xuwy{yxz~wuyzvjimz|zwot|qc[^xpt|pixzacotnypviny|tq~||y{zxyzzzrukn|uppqz~qmxztuzu}yfevm\Wywwqjmvzqf_ix~}}qjpwzqmowww~`cqqhyzx{uyzsowryqm|yhahrxxttxxwsuz{{wxultyw|}xqqytozywrtwgks~{xuttiekxyyz{{zyx{{|}|rtxznfbf{utv{vlaYet{y|~{hkt{sjfk{xuw||ytv|xzzuwz||rszzuw~|z{xlkn}{w~}|cao~hXiwy~}rhjs{skjs{y{b]al}zvs{~shjowxxwwz}~xx}}qquprnu~tmxzw}uotxafszst{yt}trux~{wss|{qt~tjhnzmmq}~ztqyumq{|mads{x{uttsoorxz{}}tqopsuxz~vihkx}}ytxyx{~ulq}tlnsr{x~|z}zprx~|smr}~ylhl|{sjgp{{rmrvwvkhlty~d\`nvkv}muxh]gwwu|{pmzwgmz|~{{ss{xtu|{w}sos~xp}uii}hn|xxqvzbep|yol~{pr}wjeux{|}powwrxxvz}tjfr~xw~xifzw[Zfw}nkpx}ukfx|~ztlkv|}z{|uplu|ts|x|zu~tt|zuzuwxz~~wxnm{|uy{wnjquwtrv{{vqiijmqnln}t|qe`lswwuzyvy}sfkwvzztx{ptz~}}~}}~yusu|z~{w}uprmtzkmzzpls}~sw}xmhj}oxztrhh|zopv~|~|woptz}{|~zz|zvuvxzwy}}rmry|tnnyxncatrs{xuw~schsyt}~}{}~|{}}zz~{z{{yvv||wwzswrkqz|wuwrt{ymebu{toqtvqmijos{wwtsrqmmrwymry}womqzxzukjrns}y~wu{r|srnnu~|vr~~}~~tqrx|pu}wvoxsmpw~uxzmgp{ypkz}}pnxehsxs{}sozxrpt~xqo{vtxzrq}vlny}xxxyhgrscp|pz{rsvpsvx|yx|yv}{uysuqpv}wt~wwwggky|{ux}sxpc_frtwrtwzxtpt{}llrz|upx}vuwzxusv~}zxrouqqy}tx{x{zz}}zvssv{~ywyvpkr|~xwrqtwurptz{rkt~mip}tvrpu|}wvz|qkm~zrw~}}xy{zvry{xwtyvw|{~{u{tp|ys}uuzniotnpxw~{{}yu|}zvv}vrqs~~wqklt~}wu{wwwuqnpv|~~qflyzmeh||}~wttuyz{z}zvxu||{{~~}z}|}{v}zuy~}}~poutnz{yw}sliqy}yy|{z|ysmjsz~wtv~upo}su|z~~ru~zpuvsvrvppzuvyq~ypv}vw~y|svzrxzw{xw}~tx{}}squojrtywxrji~uqsvz|pgqymyxuzuwz}xrw~~}|sonx||wsyyidledrtyv{zsu~to|tnswqwtyxqy{ww|wrv{~xpx}ynmu~von}|zkio}syzwxknw|||~~zwttvy||usvonwx}}|zw}zro||vu~~{wy|~|xz~|{||z|{{}zpu}|tx~yu}rln{vyz~xnu}pjk{{~~~vttvzyxz~~{qtyzu|}~zuv}|w{v{|ruxopytwx|{|}wtz}untxu}yxvurrvx{xz~|uututtuy|vv||qfp}vzzwz~~}ttw~{}xy~ss|~ur}|y~xy}yz|}||zxztsytt}sysmuxqw~{~nlr}vow~~~{{{}}~}}{sqrqv{z{yulj|yrpv~{~pqz|mgsss|{{wy{pt|yx~}}~z}yvyzw~~vz{suss{uuz|||yqppgjovu{tt|xsq{}xkqz~slv~{qtzyrov~|~|uopx{lp{{s|zsxqurrxtru|xz}~zywx{z{~|~}|{{{~|yz}tny}vty||x|xuz~|z{~|~{ttxxwz}}~uw{~z|}{~zwx~}~zwnuzrp}}zxz~zty||}xv{{vy~|yyz{}~stx}opw~yz|yqrz{nrzz~{{sry|xvy}yqrx~}{{}zyxyz|{{~~wz~sv}|x}yx{{wxwtxrtz~tw|{}w|zuuz{}z{~y{{qrw|~~yx{ww|xz|xz~~{}|vqu|knxvx~~{y|~zw|~}zx}}||ywrr~yvzzx|tqvynwzs~wuuszwru~squ}tw~}{z{qv~xs|}}~~wuvy{zvx}{sovgbynnw~~{~vqyytu|tu}qq{yv}}~wyxu|~wz~{~}{xx~su~yovxnpwuytv~usv|{yz{qotnowxz}y{}~|{|{}wx~yw}}z|zy||tx}wy{|xs}rnpyw{~}x}yuu}~|}}~~}x{}wz}}~~~~xw||x||y|xtxssz{{~}~|z|}~|{{zxy}|ytvz~{|w}xpmy~xu~zw|~yv{xwxuxs~xv~{y}{|z|truuty~~|}wsyzw|{~wv{~sv}|}|}~yuz~|xy{xywvx|||}|zz|{|}}}}~|~|xywpoyts}~{us}~wt{y}ww{vv|~{y{}~~}~|zx}zxzrp||vu~|sx{st||vyztx}}yy}{}}{y{{|}|}utzqt|xu~zx}uz~rw|pt|lrqxyxx~upv|~~zz|zvu||}{|}lp|{kq|z|{|yru~{pxtyps}{quz}|||x|~yz|zzu|}y{~{|}xyztt}wwyw|tq~ztu}{xw|plpvqs{yzzxw{yzxz|ux}~~~|vtsy}y~}}tt|{uq||}~}{vtz}yv~~zx||{z|}||}~|}~}}}~{|{|zwwsz}z}zz~{wx}{~yssz~~zw~~ror}wux{{spsvtz{y|utytt{{x||wxyx{{}|~~xz~}|~~~~}}}}z{{tu}}y}}~~zwy{z}zrw{w}|yxzz~}}}{yy~~{z}|}vrv||z|xy|~zsqx|vz~zx}}xwz~z|z{{~}}z~}||~}~{y}~zx{|~xx}ooxsy|~sxwloxzzuvz|vsy}xv{~xvv}uoquno}tuytvurvwrvwqswtw{y||wzwvv~|{}||y{}|||uw|u|}y{s|wos}y|{u|}so||x}{{vv|~||~~|tswxw{|yy}~xsz~z|~{ty|sxxzz||{|w{yx~~{~|}~}{yy|}~}}yywss{}~~yy}}ssu|}~|tw|~||~~~zwvz~}{|~xw|yx|zz~yx||{}~|~yz|vw~wv|xuwywyzyz|vz~}{~{z||zy|||y}|xz|~||wsz}yx}|~|wuw{}}~|wwy||}{|~~~||}}ux~w{z|||||}{y{}~}}xz}|zz{|}||zzz|{yz||vsz~xvw}~yut{~zx~~}zxy|z|~~~~}~~~~~~|z|{|||}z~|z|y~xsyyu}zxzxuy}~|z|z}~zw{~~~zz}}x|~z~xz{vx~~|~|{sxxryyz~zwy}~|}|~~zw~{z~{}y{xz~ux}wzz|vx~|rv}v|y{vw|~yzz}~yvy~}z~}~yvv{}|zz~{zzvu~}yz|~{z{zz|{{}zz}}z{}|~}}}{~~~||}~|{|{xx~|vv~z}z~|z{~~~~}yv{|yy~~~~}~{zy~}}}~}{}~|z~ww~~y||~zv{{tw}{~~~xz{x{|}zyz}z{}}}||~}zy|~~}zvv}zxz}}}{{}}}{}|zz}zz}zz|yz}}}|~~}}~z{}||z}}{z}}~~}yyz~|~zz}}}~zzzy{~}}}z|}|~|xz|yz~}||}}}~~}}~z}~uxxvzzy}xx|x{}}{}}wzxx}|z}}}}}}|{xz|}{|zrv}vvz}z~}x{zwz}}z}wyyx{|}}}~~}|{z}|{~{y}wy~z|}zyzvzz}}zz}zx{~~|zz{|||~~zx}|x{}|}|}|{~{|~|~~~}~}~~|{}{|~}~}~~~~~{{zx}~|||~~~}~|yy~|||yxy~~~xx{yxy}|}|{y~~{x}|~~}~~~||}~~~~~~~~~~|{~xx{~}~|{}~~~||~}~xx{~||}|{|~}}~~~}~~|}||~{|{{~~{~||~|}||{{~|{|{{~|~{w{||~~}y{~~~~}~~|}}~{x|{y~|}}z{zxy|w~|y||y{{|}||~|}{||z~}yxz{z~~~{{x}~|~~}|}~}}}}~}}~|}yz|z|}|~|~|}~{||{{~}}~~~~z|zz}~~~~~}~{|~~~~}~~|~~~}~}|~|{y|}}||~~}}z|~|}{{}~~~|}~~~~~}}~~~~~~~}}~{|~~~}}~}}}~|}}|~~~}~~~~~~~~~~|}|z|~}~}|~~~~~|{}~}}||~|}~}}~|~}{{~|{}|~~~}|~||~~~~~~~~~}}}}}|~||}~|~~|}{}}|~~||~~~~}|~}~}|}}}~~}}}~~~~~~||~}~}}~~~~}|~~~~~~~~}~}}}}~~}}~}|~~||~}~~~~~~~~}~~~~~~}~}}~~~}~}~}~}}~~}~~}~~~~~~~~~~~~~~}}}~}~~}}}}}~~~~~~~~~}}~~|}~}~~}~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s 1xvRIFF(uWAVEfmt VVdatau|}՞.jCC*5jxսV^t' z`OF*rpTT[C6vf xn?)l˜qGÉP/nQ*2{m+9}|T.SɝvkiN0Dæp"X#kp_qzttլfD]|q<KEnixe68t]SZXD^`gЊ*WГ6:ǚXEsľr Qf+>yp2 ihVlwTki19^L$0~ DswP 2m^-3}dL^)1lجbDU k߱ufLQSOc11}i|vjxzov{q[֨qVQgvmux\d̻gO~C .nϤ|spQXhrQ#?yp2+GcfVb܋:0mֺu3,YBiҶ_5ƚlV_m ԠT%&ic:;TxasUE^p^BGy՘[;8Ej؁."eY[jB0%)\<?սxFOsqo^`fep vפeT~nrr\lYGK`gdk~\cſ{ "O3`Ҧxz[?DqХD <:;Y-4Z|rX yՎ:#W8bԮ{tAyzSJ`ȣZ ՃZnS*Jܴv>,DsF(Q8 5vxhxܵq7#1]դP!z/LŸ|T71CnnWޫ]7Pjk}{w2_җH&B~Z 8xY8DŗS.Br|W;Gx×Y"xKThp}{eTb·wCQhPxxxZA38e>Rw_Wbs}xfy\ڸgKFTqdFL„- <_1&4XȫyzxbJRݦU+>zͮp=,2RgEK[YIXۭb*-faSUkֺq/$N|՗=Vr`]hήd2=of!+wL/3d¡d@M~rB/TF$uݓNAia[tcRxϤm;Jn6~v_pzX?6FvW,͠mRJazjbvɎ/If\WUaoVLY~б]#|ލC"#5Uǭp]TNVc#ls;1HpƤqE5DTZnsT׻}D1GuwD0IxӠ<;rNUtj80Y?(xZ!-^VFmƩwbqvS6Fވ8CE!Ce\uif۲e" Xw-Ýy|S>ZsQL^U|bkvlYX~ıs`U_ǟKMm44KY]nhSHT}|,S-Sɦ|ZKGISxӎ9D>$?qȸY3,Cc|сߝS2CsǰN8GqN4y=7WoE9SƤ|w\#]G&tңjHVPKmyWN}?=C^jew]oi"d& o~`pdNZ[E[[TLcvrelZCG^´t":i-cîYKUi„3:KWötF+0E_ڙA %H\ͭcB:S|ѿ{`r(*gϴK)2ab(-s2sYEWսljuiD)IQ$~g7;kbBScm6%C Pϒ`ebW~=(m'HVLoecÝb:?kϤYoD&?euqw`=@h˳}8 +f#oW12SB |f7ŝ}bH5;]ڪY[h?kRCHjl&_0D”bC5<]ǰn@5sԺhRW{ҾTK^l`MZq}٠\&EZUvx֨E/VJ֡bKdt[i^#-ts>]:Tfon:9gҬh%$3Y|yOHhªw=+u u¯vN05Zúf?=s ĔpYG=HQZ{8_\>Ec|XNd} W\5:_|RMnzh.'88}ȏXRxmxH.wV2@w{eqrƨ\"]Ѹ{F2FyD8ڨxo|wU7HԔV0+MנC^gJS^VOfܶyC&(Pi M|.!DmΜ^+ Tj AG;biL<@]aH2Nx|l__m̙35g/1U~peh{LV05}Ƭg_ppi\!r)RʖZ34Yƃ6 Y~ fԂ1!ie&EN4{Z~ɛe7(ZC ]ٷo'FcqC Hu"4R,F{yq J5'Q6q~^/'Ilutp5iρ(bO=cdl|J6Wdh) ;gRbW 2urRJauE(?OϮw[JLdV,0ui<ƈQ.#5`ǿP![i AzE-3WŘp`WA(5( ;Σf<0AmܴxQRbaS]b{ǎaMTuȿC+Hv~^(LGԛXCgAG݋> ;[/Csxrr@CSTa(3hyq<8j˻Y.9GtFBonD/Aڧxb?);oƯ^@Fvr ȀUIFEV|Üi8R9 9j9.;TwųmO;4Cx4 jФgDD[̷^@;DN`qܙaJTphIJimpP*/WzWXzzld8-=‚PMu}h|F&J[ \,D{yl}_7I]9}D>ÿK&oխj:2M(U۟qkse@)HԑS23^Ӎ-wYGWaUPqo2MXkeEm~“W&]VE?G<;®yf^cqr<,fEϞnK>If|9?$q{="Lr4gzXٍ9 j֬g@O|m'7j s݌KDk{gswK@eҗ@#>|jZlJOa#|rSK\znD4X48ƠcLAJfO0AH`tA(*Epþm;#pc^ܞW*"=nѸp`S:&A~@ϝ_88XɕZ?K^_XmUȆSAPyîs:1V۟;:E (ZĉQJsv|~< enST<[iipCFݚIxF1k|uzJCmS(A~ _űmB=`wN9Okԛwj\D7IwȳV16ki 2yK>AJ`Ƕg7"^<C]30Eg«gK5*={)u֫oIF`¾vPBFP\prٕZERtiNTrӲU L&,VtU[u_ Kz JȈUUyuh~}B+XQjdJw[7MڣQ<;N~E 6}ֱrE9O݄^ܦ|prbA4WÂH)0^Ҍ2$O@NWU\k3#ZG lf+-Rwͱ|D .pOX|?>cx\IDPq->M?Xym`]cs|iJ *Q{{ru{*IqWXkyvmxQ":q eǂD):hĩa%(pg2a&sM#i;AҒ?H껏~}oH$.u8+l٧T]ݓN6DVWPc$UaZߓI4Q{ОL %ro;ڐB*M~H%)R@,h@Y~}w[LWxٔ2AITxkhrt2Z7N·o`Z^nl2(i T͛nRHQid" C'"}j3(Uj*D:n؞[-#GɚxpiHOO \ϚY*HvRZmm\^*>~E-LZ3Bg~zux eu!tڭhEYh!.`|=2ToA̙Y11RϛdMUa[UlD.ʃM8Gvm93U<Dz4&c̏UMrtw5pn_ݏC1Sv|j=HؓAE9p|wg>Du’X+Fm diBDmg<+Mm /ƐpdR<2KͳQ3@{]0|TJIOdĭV)(n6L^4-?^­kN70KڭpJKeÿwSA?DQl} ҇N9InkTZs֫HG'7epPUtxyZVqQ|SX~|ti,RL(|]N~{vP4VN 55^r76֫f7.PeΛwrsaA9cw9.e%)YKUWPW٣^((j9ta*.SuոF-v9i~BAexYD9nmv='(K;dh<(.N{_+,Jeߡ[0'Ctʰn]M4-Xd H̕V01VʗaKS^ZWu62}J9M}Ūl95Yݖ0Os-&fƉTPwwp+wafݎE5Wr|d#4drTZyvzP_eW{RWzwth+![?-UN~||G/XHC( aj-9٩d61Ux qϙuonW86gq4.iz!1ۉPGSVO[ڝT 'o4}X'1Xyӱv;3/nxBEltU@=MwWہA9Vzue_dqշa>0\vlp|q!hTÙpZ\lwtq9=_zq6#;lʠR.S6S9v8$z߁/Ĩ+T崋kA#;{!(qٚE pׇF4ETPMjogL aԄC8\Β:*VM؅:*QwB&2b&:[>\tUGU{Ё ]9Uuhjxn%m[ɺjWPYm^*-}sbÎaE@PoU Q|.b+)\WZ-%zϏM#"LǗwoa;b7jїU'$RhKVifZeNq7&QޞT6Jn~xuط_{g&ڤ_C\Z >F+twZ6C}ϹL$"UVrñY8Ewöa7-WR@oaJ2/RͬwD,CKFnMEEOjɭ~J/&[ݖQ12Gg§^B//Vq&ԠeIOl»oM?@IWy`*JP|gw=;Y{sd_esձW 74aslq}i,Z^ٿkX^nxsq|3FR%j2"?pȘI4G?K @q1 +w*Qz#_ᯉh<"Ao.yԒ= #|B6GTPNoc$qCl|>:`ʈ13LW{5-Xq=&6jHT@boQGXxl/#\rgkzf|eȹfUQ[pW&3e m彉]EASqN]p8Z(.bPe$-ȆG!$Svn^5o. tˏO%&[ޤdLZieZh| Zi3(ZٖN5MqxwدS"]/֜XCbQ G=8k9FspjiBFvz @OYyRNiu9 s1F_INkX*)d g濘wYD@Rud2&W'|י\5&1V˿Q :5yґQ,+LǧfXG01iK ZĉN08_VIW`YZIrE:Sß`5AK[~R6wG=SwcS_|Ӓ$9t4#NumP>?Utun:=^rd_gvҩK2:eslr_ 9Ng׻hX_pxsrs-QF/b.$DwƏB;=KA Ij+ 3l$!Ypkܩ~d9$Id6ψ5 +v=7JUOPvX +z:vs;=e~(<@ cs1/_l9%:qVOAhlPH\l{&(aqgl}_ mǵ~dTR]rQ%9VxⷃZCBWvEhc BT%2iHo|5€A([Ἆtm[0"y%'~ƈH#)cڜ^J[jeZmofݧb0,bԍI6Rt~vyרI,S 8ғSDgIQ3Cc8Jxmkd@I}qNF `tPPlo3&%N}\IQoQ(,nys⺔sVC@Uy^0)_!ђV2'5[ʼLC-&̊K+/QŢ}dWD.4s@dؾI/:fڼSJY`Y]UlB;XY4?htvY4|۹vNY~w[6D*s9:dzqS:]o!Az)K}P5NͯxB (h<)O7NV23f:X鴄l]E/4^ǡk<.O6^dIDGSsģs@>iqІF/5LpƽzX>.4cU;˒\HStöfI?CK]EBpD?V{`Sb~ΆFl0$AteRcs; $D%pܦiM`r{R!,w߄%G;)`yo85o҄3 Yp$~ιUQΒQ18gT(缉oohL2A[)>\OrJKVTPfȄ?:{7ݒA%=eˠb-I|"a>QyiM>@Xgf8@cpb_hxѡ@$w.=kqlsVDBoշeX`rxrtl([;9[+&Jzˆ;C4T9Qd& :d"%aht֤|`5%PZ >ʀ/ 2n;9LVNQ|M3ގ2#k9@jv"D7mj.3de6&>wucICliNI_b /foglX!r$tų{cSS_uK#@J޲WBCYx@ sYKۓN"8nC#zr=x;*aඊsmX-).D!-kՕZL^kbYrco١\-/j΅E8Uw~uz՟@5JAΌPGkB Xދ*O[8O|km_>MhZ= &gpNRpi.-XzZHTsM&1wk޶qTBAX|Y-,f*ˋR/'8`ɺzGL$.ǂG*1VŸzcVC-8{6mغ{D/=kٷ}RKZaY_z`g?=\S3Cmj R:ڲqL]|wT><1l5=hysN;cfKo$ Q}L5T˫r=,q13|K7SR05m/d宀j[C.7cĜf9.Vߕ+jߘ`HDHUv m;E_%z~B.7OtƺvT<-7jJFƋYHVw³cG?DM`:MjC@Y}]Td}Sd-%FybRer~3 +;+wءcMcq~K1z Q5/fxi58wz, ae-ͶPXʋL/;nI3䷄oogJ2FT&CR XkGMWTPj~;AoA؉<'AiȚ\)Pq ,[>U|gK=A[Z_6Cfob`jzϙ61m) AopltNP7'wӳcXbsxrue#e1BܜU((Oɿ5K+ ]ڈ2Y^!BZ)h^ҟ{\1'XP Dw( :g9:NVNTD:؄*,d7Do׺m L-ya+7ia2&C~iqFFrgLJbYw 4kngnQ +d-}ıxaSTavD"F<'ڭzTAF]{8 !~N UԋHBKɅLHo; b׀"[U8TjoZ>Q_f4 +nkMSuc)4 avVIUwG%5^۲nSAC\U*/ow3ƄM/'>bN2Gq_ JA٬kMbyxMG4:d4@mwsJ-9SxŸrR:-;r=RVIY|°_E?EOc/ZeAB]yZTgr`\*'K^Ri|sw, 322ԙ^MgrE8oZ-5kxb3=q' &kY6˳IaĄH/?t>>ᰁnpeG1JܕN#!IާIdeHNXSRou4IdK8'ElŔV$Yd7T>YcI=CaMW7Fim``k|ː,@d&$Gt}omvD^-0ЭaXetxpv] q&L֔O&,Tʺx/Sޅ#h~+aWKQ-qU '̚yX.)`G Mn! D`7~I,)?jƶq<_uAs>)6aλt`S>-A"'֯n=.EvԫqMM^_Xf`xݚ[rU a[(]|uC7_ǟf57G¹qD:^wJ.>~|ۣzhX>.>pӽ\43cՀщWGEJ\ϼc2TK3oy1]ܻ~RH\[C?EOf"g_?DauYUkֿfnU()Q[Sl{to& =);ΒZOl~q?>ccy(:qx[1Ah! ,sM@ɰ~A$jܾ|C/C|2Jܪ}npcD2Q֍H!#Pڜ?p_FPYSStm/RY Vv2(KpO!"bXCO@^`G=Fe@(Q6Jn}kaalȆ PZ#&Kx{nmw:l"8ͩ~_YgvwpxU&}VЌI%.Yʵp)^zsu$ jQUH4zݢL0ƖvS+,j=UdMY6>QTMZ3 Kp=U6KwԭZ_)R)?uU,+NQv@N|~`INkߣD/]At|lgrABI?s]RVf|w9$Y#=ҢqN@Icp+18k{= Hp08O Yܧc/9zզqiMA\ Iۭl6 >~PPek^]>,ʋJ(b}|tʄ$Uފ1_޼uEO{v. &wk uI:^zhsQ?\ۢK$ 9{cLY}V EotpQI\t=$AB1ҩgN@GdH'8\IwE+*CoĴk7jjJm:(:f͸q^R<-G0ӧg:0K|ҥkLO^_XjSגW^y%NT2IwsvuCBzM mQ,c|p@:fę`0=QölAFfqWVn׸Z}N%,V~XVpxug F!BʋWPp{r{8FY mn"AuyV0H^ 2|CIǮy=*tܸt?0I(Uؤyno`@3VυB 'Vד6|[FQXQTzf*ZOam/+OsԽI'kLOKAb|\F=Hj36K6Nr{i`bn|_R!)Q{ynmx2 z@ʥy]Zivvo{M, aɅC$2`˰g%"ho#}j'rI`A8יC;sO*/s4]ޯ[WT5@STM_*SfHO6P|ӥP iv3K)EzO++SEn?R|]IOoۙ:;R Gxzkhs:N=GɾpZRVh~p5%bH͜mL@Kgj$8/tt9"Mi*AEcؠ\+>Ѣ}ogHJQ R٧f2 BxNRfj]^36ńE'Bf9Af}{ty`؁)jݵoERo'-b EPUpA)+Ftðf2#u^ Tg7)>l͵n]P9-Nx9ѡa71NΠfJR_^XoG!ыR:Gr²w@4T}>@ց7Wϖ[Npu~|7ho WN2Nzryn?EۗDxH1i~j=inB-Hq &ϘueS9.G|ѶQ08sh ,|RFELaͶX*#f:C`61A^įgJ4.IsٯsMKc{UA@HSnےU>HjnVYqرO H$.[zVVswv`Qw JÄTRsyrs3NN#veFy~yP.MV88Sīt6/}۳n<0Maԟwno^=4]}=*^Ӌ/$WGRXRWݧ_%!bEkd,-SvԸE,sA[ۅGCgxZD>Jo'DG8Qtyh`cps nI,Uxmoy)|HǠu\Zjwup}F1t j}>$5dʩ_ &qd *a.yCj:?ӑ;D黐rJ'4}- eܧT`ߕN5CTRMb#[\ QܓK7UўI!rj<ߕC)J~K).Y:'g>VyYHRs֐1HH N{xjiuy3Y2NȽmYQXjj/(l RɗiJANja A'#l4&Sc%J=kәV( D̞{ofDSH[ա_.#IrMTgh]a(?|@(H^8Ei~{up jx"tݯiDUg"4W݂A>gvhywJ@eӓ8#mG\L_IXU-iMJbh4$O*HʢaJ?Kkt?%CE_k>(-Ky¯a-(R]ޤa4*Bq˰l\N7.Uk B͛\53S˚bJS`^Xs;,ʄO;JvĬq=6Yݚ5Kx2"^ˏXPtut0sfaI3R~q{h>I׏< A6oe;?r;U* Kl còa;Aoj>-Me0ȓsdP7/LβM.=z^5wQFFMd˲S&(o2LZ51CaìdF3/M~תnLMgvRA@IUqvՊQ>KmkUZt֩DC#2atUXvuwX[lQ~RUwwtm.!VE*[L||{J/TO>. \ëm16ڬh82Rށ kϚuno[;6ev8-dπ',ގSHTWPZ٠X!&j<u])2WxҴz?2|6g~DFjvXB>MsPޅC9Txwf`dqӻi}C0Zvlo{w!p QěrZ[lxup>:gsv:#9iʤW+{Z3Z5z<"t4FΉ3M涌nE&9%&mٟKjٌI6DTRNhtcS[֊F8Yϕ@(z^Fڋ?+P{F(1_/3`?[vWGUxч(U?T~uiiwr,f' XȻkXRZlc-+v}\ĒdHAPm[ K+f0)X\S4"uϒP&!IȘyoc?]=eҚZ+$PlLVhh[cIu<)NߢX7Im~yu׻f vn"}ڨbC[` ;N'y>Alrh}qGBkΊ0-bMYLcDaG6fLLeb1%VSŞ|^G?Oon;&J: jޣf;)/P[(/Hhٜ[1*Fvʭj[L5/\_KʕW34Wȓ^ITa]Zx/7~K:M|çj:9]ڐ+Wp,'gljUSyuo*!~]k݌D4Wq~cV{quzy}zx|rpvuw~~wy{~oo}~zz{vwrr|sy{{mu|ifv~{{wyz}|tuuwqqiODLejNJMlůs^P[PZ~dYOHev~nPR[`t~ڽ]fz}nE/Mq}~~}[RQZkifg}|`}weqgT|ʿЖxNTVor]Bfzνs[~zy1E~|igb}žxI;+BWZxkjkҷ~`ngin]_qҞZ@)`cbPqtV8'>CH=LbFZfʨ|oh{pRt͝]?, Ruƪrv{GD2CPLiFO^>WoʺvXYJ`dw[srƏgvtɬu{rY^/-GfeTc{~qZ7DAQ_k_tk{}ib\zze=PatCCQGci~h51Rkhtvzh{yǠeһ[mkr[myxY53O^obI?p[KC0@AXpjr{̹pozyrϢ^juWMs|uQLHHxx]SBABRdrfp|jvtsZ@TpǯepPZr{ra{SB5MlQTUhxRBFY~u{rcRWsjrhǨ}`Lxʨqrq^>?Q[zar{qL5J^o{fmiffZÜufhri{xeWwӮoa^nV^kƹwm}hO?Ciwegugk{P8..8Yc^͹kNPnntZTc~rYD@NtgPDNgaERn}laYz~t_h|zsvs^ULTlmNNgxU>>`pd`g}Ƨlolrqskdlwxk\[lp{kcB*0Q|ZVZhvdQ]myp̜|zdK@jd\XM]kcRRRcg~eL28]xrjlwy~~w^fuxzk;=Qm|tSVTxxm_b_tgZ[inn~{qroyvsRBCo{mecZVNSiyxM_|chspj{wmgz|^QRf\Zl}f8GWrxbVxue^Mvx|opkbtchhrVi^ynRFiwmhRToiLbu|sonkMfk|hZf|ot`EZzT_OkkQ_`hV_ervT_~qztrbEgt|ghboi^Wlkbcir{hGUtxn~dumbxr~e\Xi[c`}\_TZuH^tf`Ehzul~nfW]ns~wx[MdjOYms\9WyoMYNsl_Sz{dI_itcrvpkkfŔwSekU?\icSglqIQ[}}scNborngZwz`o{}zjZovNMTegfxQ>Rfy_TywlYdcewrbzmXGmwooewl[fmubB=n}[VVfnk]ghoaXW{SWb}NA``M@\ãw_ebf|QIKl}[_joqp\huùn~z[DNsifrl]S\lymDOl|vrWS`ypfogwf\xcWX{tdn~yFH\}u]k~sfYFRu|qsj]Sq^brs`Zg|iGKmsUY~k]K_jxtpo~fX]r|a]qwuW[qX^XiuRSeZRWrvqe[eu|su}|]SprfreY`hn}fenubCF_wr|vwn`bhvqV\vjskciykRZzxhfc_qtvtp{`NStrevt`WVl}Z]xfN\xud_cnps`g~}{dURg|j]o~^Y\sx[mwaVPhn^uaKHi~zri^{qd]TTxs\bnu]diXeXið|tzw\UKS`fviT]gcedLhmE@eslf_M`}zhP\wŮskgt{}oVYbwmRLvt`UFnklrhB@csu|kZl~rVFqi`ToydYRgqyUN^rHJnqwxjSMvojmrpfXVRiffp{I8Jqnl]lʨkWhnt]Xfzpv~zhna`ky[bnlR0Izr]STɷeJb~daeoehmf}}[Lj{{eQNkRWf{KGQx`g{xW]_`}l{oPPt}c`bwe\WmwjLUlq`Wu}ocvzfrkd^~xsvosn^EH]tOO{ʱqV^]i~k]vjdavwxs{rievwlDLsqcKhn`ShoXNe~ofn|qzx~{YfsugZmp]\[}xVO]~`\qpraetwre\w}}lXurf`_owOPbyuPRjfUimvihzmf~l`blhgll}tKNi{bVFaodf{g_b~nkytxwsxza\gtnT`o`Um|~`V\bGTszzofvvtvmrww[\pmcslca~dAOgr]Woqwyu_f}}pkam{vhfar~WTZx`E[ylmmf|ybkmbWkxocjxj\^ptUWd{fQc|uffovx[Mcmc`r~ofjy}aY^rx[azvaPEbo[[sfQQg}ibjqegn{xcjyjRWz~h`do_MWydPVirddim\_iwt^e{oXHQtf_nseVY|uVHWslityjV]qx]a~vlecgnl_ktPBV}ohcu{aW`ggRZuh\`{plikwyXPjlTMdxqosuP>Usnkrpg\\^thfnfOXosdYsĢdZalkRSmsa[ig]cm~hfs}oUTnrdbxaTUn{fakm`MWrw`^u}gXhzydW[}pnwzgNJaiZkqNLTc|zlxcNC]~{}su|kecjosT]||ogZmn[cvdV_qjX[h~xyxrvwJM[u~husaZOZ~mbjhS[fq\wsmumosvtjSg}ccrcUfughmqw`O]kwq{t|iHYs{hkfeUkf^e^]dpjgVhhk|zebPXvp|ibZjw}dn~mHOjeh{woTW|}pdehspgkwux_imzecswedWkzzpWPQ|qo}{_gtt|yp[fxZXm``sq{iXpnQU^{xumWVhj{kound`WZzvv~YGOtwejxuelkyiPKsogfnabestd_opSK_xwhkhPQesmccz}nb[plYjylVdyvpbTnßpdhscKA]tbe~x\][duzcvq]Oe|}njh¸fRYmqdLQscT^iM`roevz`SNjwr{~jPPaxfQb]UV]tj^sqXPm~tkdmuvuvqp~_P`zo\_xhS\cqy]QjpWP]~v{}~cR_o{_\{|hk^Zs|[DMnjTSvwofWWf~xjOQn~lg~u`\[gfUY}yWM]riactWNezbc}xmfls\[rg`laJWuc_kyiMX{u^h|srysp~rlevwb[k{YXZct`izsTG_tqutylknmpuykiyv`[fpj|wz{YIes_Ya}soy|c]]mjgy~rqm\crngwaFPvphkrĵr`\jxvZa|~dbm|}qpvrtz``|~wc]ZexrlrgKRlzg_xwxnbon_k~x}g\gztiff~~dclmQOntjkt`[hqyyqt}eUOi~{w||^Ufz{iWcukooz{[M^~sgkym]aosuwiVYqylgdX]rzhYkoWZrthmrrlkvxrUKdulovhKQimct|eX[byww}~}x\N_vj[gqrnnrx^LcnnjhXWhtzrmxyVCVukkzqRTVotaavf^RddknUPiqvs_d{xp\g~iKHizocstgVVkyYex}s\Jd}yqhsyXP`ftqaWfkSOazXRVqvevoifWiut~j`U\sx}k[gwbKEZ~xbl{~`BTtlioowiq~y{qcV]s\bt{_[RTsegwcNDhvtwzeabv}piv~ydUbm|edoxhCQx}gY\_zmevdLXlxv~qj_Tq}bfoTGZtilq­aVc}padu~vnq}o^exyvkp{aMFatjucILc{sjxwjhfgxkk{gTOszodrqfgyt\Of~rddy}\ZcoztnzpWNa}|yx_Tdvz\Rfmdehuifqoht|uokkoxzyuy|XGMmvddzj`_eo{x`_zxpfivws~z`[cp`Wdp`cqeYftujqwmhbdlf\fw}olx}iddn~oVSmoeh{sjhkxvmq~{poz~pny~cV`n|vcg{lZV`qfnwdhv~~zplyprqyr`\lo]bw{e^Xehdoua`lz{yznkrxx~njzqZN_p_eo~}aYfo^Vaxv{|pgiyj^kwoecki\cwlJMp~kelq}qp{|xb`rtmszpkddtvTSrcQG^tmrp|~]O_{vimxyzqghtf`hu~fV`|qe][up]YmgW_vtfg}vqqmyfZjycO]zhacqrSLaiW_wrdbxoelx~vfl~dT[zkfjtfNYwoUMlsenyj`l~waYozpens~cdp~|YGa~qffpg`immvZ^wpbc{uwvnsqY`s|iaZvpjnpxrWTigUfz~sop{ghhueYhnh]tobgsgQUpwlskdhlxzluyfXe~zljquXSoh^lqofcxg_ipdkwb]lvusz~t\atunjwrcdnyp_gyu^[lvutlxlmsz{iUa~qmn~qU\f||ek{qj\Zkr|}|o]_ssb`zxupwvgV`xye]rn]lourfl~pVKexsvza^]iuoevsi^auwlky~n[Vjwkhm~ymjieX`w}igyzlimltrffdPOb|thbuuf[Yhxvcf~w_]{n_an{nh|sqf]_wzwprgSVnxjup\U^|ljv~dOUo}xlmt^hx}~~~nYYoy^Zq}bTXjvjiyu\Qa{lx~g\]p~h^ln_XWenbht}aJXyyg]^gyry}}x_NVwyquxdefit~f^j{[LZtyrnk}iYZrj[h|xpij}m]_phYhzn\PPnogo~ZCHhurqe][l~o^i~jY_x}slillY^umVZuufamjY`ptn}r^STtvtvdQVj}tXVvyifbqk\h|s`k}pfkr{ojp{|`SYyl[d|fSWbsxcfnVOc~ux|d_j}|eYdyrpqcOUnqae}~lgaiw{rx|o_^q~wpxvjghu}\Sdn^Ypzgfimzait}sidu{rtzg_i{oeo~oaTZtocnxfW`z{ywqitytvz~t]ZntdbsvZZ`yn`g~m^[i~xpr|uiht~{}uqxme^olckub`xugYZloqtegt{zpgx~rssxrglv{`Yjrjgiz{jkx~~qdiuxq~}qqkkw{uil~gKK\}g{~nzfPNrrerz~sqYnuug^q}smag{uP]me\d|wwlirvvwo~sqyeRUi|i_dwxf`yobi}smoykPXn~oo~yne^lqjs}r`_kvf_qx`\cstf`t~iX_~|skkn~rks~|[GRmzmbjaPPauwhc}|gbk}t{||weao|iUXwjegltTBZwi]`{zlkhry{x|}_Ve{~unfmxb\_niQX}ufgu}g\`htshv{p]]r|obfoPEXvmetl\T_s}f^lra]p}||m_epmnrfU[swgc{lVVg}ubft`[a|{tzs^`mp~garubPZzfSSjq_d|xqc^cu~y{zfYdqykl|l`[`sibkkTUsnipw}ihmuz~t]_{qeh||e[\crueop_QMdz|bT\ousm^^jjdncOW~tkmmts`j{dU`z~xw~ud]ZgtowmTL[xysx}u\[u|tpjdhy{zsuwZVeznem{ykaZd~vmwgTO^~y~^[altyqzpSKd{jkppwcgxzj\Ypzx|u\Qe{|t}}l_Y]vxmw{mMDX|sdd~uhmtvx{}sd`~{jj|{i`bo{wmunYGX}{|yw`Ues}rbn{lhlktvpx_P]z|yqclrmipbHUyxw}}gcgfl}vvthUUm}{qyzZ_\pX^`l||bNao}YVvwvqrspeqq~upudPF]ojdzmQNUd|mcupi|{z`_ptr^OOfnQEUyvXWisikx~V>Pt}zv}xi`q{e^tlXDRlhS^pILosghgjyze^fra^hgZU[rmJQr^Ue|\Xgjg^nth]cuvcVXue]ukVLOfq`egut^Tg|qftyllam}r}}i`mu`\^h`IXptcWWmwvwsns}~|t}xhYTmynr{x_Wl}wm`]h}ohfoxpt{eVf}rqntmkxwdUbwljx|eaiv|{iiy|n^exierw}{hh{saWa}ss}n]`lk_i|ynrso{~~jVTjzyxxuecl|z`Sfxjjjlzqpsuolzxkjqyxos`U_upbVcvvtsxvgklcgzup~tdbjvn[R]{uoove_quhmqggzxib`mj`izjblurwo[bs~oim~{qf]dxpixxeanqdq}jbmx~t__k}kXSt|efmpop}j]_~xrqwpeeql[d|uhaljftz~hXl~ui`l~ronm}dPPh~ee~sodmymm~z^[h}~wnoywh_fus]bsss^j}rdu|Xxapv`hhjzrh{|pTU\|mjnqhgTa}eTbz]lp|{~jmfmwh]w~{mTZgnr{bc[gulf{}teLKoqhg~cS\dpxqp~ugqvugfbixzvquve]tbdd[ccy{yzwxzjvigj_pwZ\j|][v}mXYbrj`tr^sdciorxuialmuzTUirz}ycown^glYgqcf~mWY^byjhsvnkx{td]dqn^n~xVNa}yrvk[\kx~koyxmdjvxu~q_]ps[L\zuigm~fXc{opu|oc_kx~nUNYevzh\jllqzznkujfx~{z|~oiqsv{zyfWVm~wy{q`fq~f_i{oabu}fWZm|po}zskm~kXg|wii{ugciltvtttcYf}~y{wxqjjxvaWiysh^^pymmrnakzsyw|yzy~{b[evuidnpcYYe~q\jy~pmx|pgt}ve`kt`_uiX]ljgz}tgepunt}|ubXZbsqn~wigk~hi{x\Xtk`^gwdVapvb^f}|vnwxlov|kcjsWK[wvmty}kW^z~|~[k|o{zuWsiMzYga{ksPZgpmWoUwnslvccgd|b\e|nXPf|elcnv\]xvst{jmekshMZlv~|qeutrk{v[W_wvX`{}md]sprqjoyr[|is|}qq~{uKRgALMo}uhagRrvpn}cpkn|tvhz~}}rtaUJTvrqvy\P\g{|~i`kyutsp}tsv^\cwnbl}{eV[rbJ^ticjrekjtyowykk|smlnxt]O_}o_bv}}z~}kkv~ufdlusliuzzvyqntgOTuyu~nmp}|^Tivieny~ynks{pstjqrroIAUrpifx|yupjl~xs}zjiny{nuzcX_fx~mWWqtd`xokmt~t^[k}uxye_boxmgsodcqrdjysebiuyngp~vom{schvwt~f^aiu~tts`UYn~trsxu{~snhmvxmw~uw|oim{l`e~{okcgv{vxxy|fOViw{mbQOosxwqzsVk|}rlzvzrvgizn\kszbY^jqgl{zpdUexnw~b^co~~zvuggryiep~j]b{ocVQe|jpyj^]m}pgckpusYstbTIestxznhi|s\Yfottnw~xuhfq~qn~{WHbpy~yycW]qxljlz~qhaiywkq{q\`yun_btjYZjt[O]wtyvcam~yv|}lmjffiuvtuw]HPjzpovvnqkSWmnebm||rmjhhotmwye\kxwuXLXj|vv~ma^g}|smpzlfkz~k\d{zkbhzx[JWnwqxregm|vx}{fVS]t{ptmbWYdv}nl}m`h|{ifu~wtw~sfWVm}z{|sbX]ssdnrg[btttzq^[j~{rolq{e_mtecq~od[\gz~ku~g`fs}ockt||j`n|iiTkhqb{]W{|~oowk{mrz|y]ezufsklkhxck^OY|zlalu\dbjrm|}tuvnpkwngaujVdyv{w}}p`[^bowuzvptx}tnmtqYMct{p`acqwgVUitnpyyolnt~~xrghx|vv~rYPUlwcakuvtpwvjxwppzxxmnqk{qovhSTmyw}t`WYfr{no|rjegyxwuwz|gbupju~sihvs\S\qpcam}xlltvyzudhtqbeqhdgrva]ho^ctulit{rtxrgXg}vnr|bXcp{hd|ub]mpcfrun`gqxqc`z}xndpw`[hqhbjy|mgrykZZnzwtwrnmt}lYc~zjY^qldisobq~p`_i~~{urk^kwvyluP\wppjhtgna\uyoeujuzwn\dp{vhl~|l\X`wonq}ue`o|v~|mkt~}~nfgvoag|viow{|i\buma[dojz~ve]k}~vyvnmt}xtwz|hRSm{i`clywijvyc_rwrspp{xhbt~l_]f|||~hdrsfiwwrsjozj_fxuntysi`ezpt|xd]ezywqrx}vgiuxqejwsyxts{qejy}xtlbbqvmhfroVXr~ux|sidm{}mgkz~ypc]k|kmwrb]synonelwtmt{~kY]ruutzcYduwmuzmiq{qilsadvzndfs|qtzwu``tsjjwg[`nw|stzaNim~||j{petznnwsibsv~kfeourlymYb\^sxn\[yxpvzmlt~pbj}xh_Zhrx~neox~kZXtqhk{yb_fwyc^pzpjdjk]euvroj]]iwe]]nhXeyqjv{pns{ylh||rgagy|qgdvmYU_szmwfW^xziku~nlvwg[`w|ups{k[\fviY]z{ogmvhkv}p]cqukljlq}vnt}k\Zjye^dkwibnteap~|tnt}wlhxvk`boldaph\evslr}xmlosukq~ss|sgem|np}yhSUg~|so~u`bl}{qhq}tsrzitu~yl\l}j`hh^botct|r|unjqvv}{}n`Zm~xl]dwvfkz|g\jztqtpmqw~wtu|}pkt~vomvrjnzypmxtkqsztqr~tlvztlddqqhhl}j[wtsvreakw}pq{~{w{}zxpqz{geqzvklzvnjuv]Shvger|uot|qtyxsv{pln|qqzz`\duwofjzunot~y}zml{~ovz|k`gypeexujb`vrkq~qnpz~thhx|wrv|xdfrykm}|ghkzqhlvvjdj{~stxyttw|rc\t{intt^go|vmhqwrc`ozw{~kkrvhhlxxjhstekvi[izsohluoglk|}kamyt|l\XZlo`etjjyxrluxcamx|yrhgovs{{h_iwujssihvsegw~m^`o~}wythgl{qfgxrd_kqjmuvjxujY\oyljrzynjuycW[psrxm\Yj}rhi~vkkiqxww||das}skgcix}xv|ePPrzxy}zgflt~mq}~lfgw|unjrt_dsteal{uv|{g[f}vvy}ypgcbvy~}fYcjyvqvlfcoz~qb^nunyyrlowswy~n[\t~zzr[[dtvtt~ue^]j~~m__ht|}tnvxutzwe]dy}osvf^jt}su{tf]dz~~uhhlyujowlkuvnq{qowzuideftz~z~~fOYkxvneahn|y~sfal}~rcehsrfe}xrr}sads}wnvrnkmvzyy~jX^k||svpeY\p{livxikx|yuwyxosxoei{wt~oZOYgxugj}qheq|vwwji}rnzvzmrx}sf\gu~}n]kxd\jgzqr}vi][y}m^jnxsq|gVb~~uswsa`ix|ywpgYWx}|}wnju{rzvkgmxumjtoXSbzurt~vrs{~}nixslmxugfhjvqitr_Yg{vq{ybRZm|ps{rlnzrt~tio}ojcrtaXbpo\\qvvvnlt}vqx~~tj]Zf~uu{dY_o~limndrvihq}roq{~rlbc~jmu{ple~{igx~[[jowwtws_hyvyr}|~nhwv{tfco|vv}kbXcu|who}|sljr|zlp{xhfrzfe[[u}syr_]n~xvsnq~~ursuyniovy{opsxin}znehx{sgdgn}zvonz}pjiwk^`t}nfltg`as|uz{qs~uuxnjklr}}qjds|osqkmuwptxm]Xixvvsyyvvz~ttzukiq|uy~wc]hwyrnkxyouvuznv}quwl_elv|rou}lgqskvz|ot}pa_s~sro{|ormpxwgo|xsgYi}|scam}wqr{|tqou}z{jlwvmkkuse^jy~gZ\k{ytkks~zx|ogjvsjow}f_gz|sq|~qgjtt`V`p{oswk]cy{pxrdf}{on{iYXfr~~upr|shl||{~{pjms}j__rwtvn^`nzzpvvjfmtru|ujWbmtnktwuru|gcy~ren~}phlkmuuklpt^Zaxu{}o[\k|s{xkbdm|}wpjmwtot~zmm}wkgj~oZ]ptqytidfm~}thmt}qnvlYT\qtrf[\svien}vpoz}{xqfbq~|}omr{}nn}vf]gwzopw}h`bo|xu}y{|}mckzxgbqylghp}xtyjbjx}rqghu~qrtsdbkzwmt{rofvxus~{su|thjs{oq|tklisuu~nabm|zxxjmty|}ztlq|{sv|tnsx|omq~|ypdfrvqyzjky}w~}wmjjsywythdn~smwrs|~zlbgttljt~y~thfssstzd`krxor{}plps~wwy{iksyrlluwuz|eYgyxvopwpjy}~usxzwv~{vvuvvvnrvshqxuvwtmnwvnszwqnotz|l_gvztu~}qjmvwhj{~vvzzutvw}wnq~vmnuyolqngn~~rnu}qljuurzvnozwtvroqv~lfm{~qozwjgnzzrt~zsq~spqzwsvy~zljtwihsxmq{xlq{prs}~}}tpq|{olsrjmr}vpqxshlz}{tsv|~xzx{xquztu|rps}vdevvrr{ztrsxzsw~wtw~zqyxoot|olwzqqstqu|wqs{wsu}yvwzwrwyrtulhp}wovxqiq}xsu}{uvxz|vu|zqsxvqtxznlvsov~{xwxyyyzy|x~~|xuwv~sv|xmv~~wy{|{wx{~vquwv|~||||~yuu~}upp{~~xqpvzwy{xssv~}||trx~xvux~urx{xnlu}~|yxy|vv{zvrs|~|}~vs|yvw~|wusy~}xsu|{z{~yuu|~{snt}|xqsx|}xyyx|}{z}|wx{}xst{}y{~wswx}}yuu{~xrs{{y}wsux}||}yz{vvy|}|}|uqv~}xuy}|y{}{z|}}~yuz~zz}}zy|{xy|}}ywxz|}|{wtw~|utu{}xz~}ywx~|{|y|}|z{}||}|yy|~|~|yxz~}|}zz}~||}}{z|~~{z|~{y~}zyz{~}}yx|~{z|~~||}zxx|}|~~xwy}||~~~~|xz~}}~|yxx{}~{xz}~~~~{z|~|~~~~}}}z{~}||~~}~}zz|}{{|~~~}~{{~~}~~}|~~}}~~~~||}||}~~~}||~~~~~~}|~~~~~~~~~~~~~~~~~~~}|}~~~~}}~~~~~~~~~~~~~~~~~~~~~s9-x{b^3K>~_ve9Ω!" =YbVsNpW|!fNq萔dY~Dh2*g DcR0}La~O꯽~+3 \)y}jWOcpy^B8,Q" nu:ϥQ;^"A7Kg ;?hL7F#td)׭^/PtҥY@=K(fm%fk( ިzrۃ'DL,`,%Iq5jbGʄ@r`&{rEhzi|Og&)/\.Guw;C,nT[tmE)٤HYW4l-yZOݻm$?0`EAaS*#a '@꾷,Wqww)h$Qn*nNRڀg=#0 10|~uɘwua3r2$ \}t#IʡsCBMG8X\ Ǒ6sM*>F@Afc)B@۠CI #!Kl(dL0ǡ.q>m(X:M\qgnӵ(̭Up QA=XE~G-GJ?v!nV7N9_ <ל"4F\:ž\ϗvHm1lH~i\ E\٪t3/Ya*}'%0w4`{+h˾[w/3H(w',<8d%FyҭƁ_}94wxᙯC`4Sc;]Xczy9fSLo/t?kCO .Ŵ;:UaA4aӋ-dR=%I7l]_4y -(=Y5wGsxg0@h$j̛^W;V~x 6ED:N4 cJPpM{lT_Z 9($}++/0x.k/͢`9?X 4%=Rr]Jhe?F@Ulrs=='aߩuNH`3)lNBwxp}d͚@;s{Jt4ݼP^p݄ 1L:! 5/~bz/?T$}w8&˥=i#OE 1Tr툝< .HQQj4ecgJ7 ;iwQHZe~ %XAQqB=p\6<9q?*ZaQ>ܯ0ԝF٪vB,#tD&YeJ,)<XPPoѵꓣ^GDžUr#T#k ٝ8#El*Eh܉ʊ!T|M5pWSqS@R,/Sެ!=O>V0{DQ|aFlQ#ot]mތ )҆}s.^pG0̛*O^ q(ܔQs+kО+sNp驒-_v_(ȐRyJܝ:7_왊{c ]C" Vp` 2\ox?H2{J\,嵠_Vɭ+?AB=ЍZpӈo"m\dR1,ZXxoL%1/lN"a 4C&ʊ[\#ʊ6- hSJ Rk&QeI!*=u//<˺xJ=/* ObjectWindows TApplication construction/destruction used by TDKPIN. */ #include "tdkpin_application.h" const char object_windows_error_format[] = "Error code = %d. Continue?"; const char object_windows_error_caption[] = "Application Error"; enum { APPLICATION_STATUS_OFFSET = 2, APPLICATION_NAME_OFFSET = 4, APPLICATION_FIELD_08_OFFSET = 8, APPLICATION_FIELD_0A_OFFSET = 10, APPLICATION_FIELD_0C_OFFSET = 12, APPLICATION_FIELD_0E_OFFSET = 14, APPLICATION_FIELD_10_OFFSET = 16, APPLICATION_INIT_APPLICATION_SLOT = 0x10, APPLICATION_INIT_INSTANCE_SLOT = 0x14, APPLICATION_PREPROCESS_MESSAGE_SLOT = 0x24, APPLICATION_DIALOG_MESSAGE_SLOT = 0x28, APPLICATION_ACCELERATOR_SLOT = 0x2c, APPLICATION_MDI_ACCELERATOR_SLOT = 0x30, APPLICATION_RUN_SLOT = 0x20, APPLICATION_ERROR_SLOT = 0x40, APPLICATION_SETUP_SLOT = 0x18, APPLICATION_CREATE_MAIN_WINDOW_SLOT = 0x34, APPLICATION_VALIDATE_WINDOW_SLOT = 0x3c, APPLICATION_ERROR_SLOT_FOR_WINDOW = 0x40, APPLICATION_IDLE_SLOT = 0x0c, APPLICATION_ACCELERATOR_OFFSET = 0x0c, APPLICATION_ACTIVE_DIALOG_OFFSET = 0x0e, APPLICATION_MAIN_WINDOW_OFFSET = 8, OBJECT_WINDOWS_BOUND_DISPATCH_OFFSET = 0x0133, OBJECT_WINDOWS_OBJECT_HANDLE_OFFSET = 4, OBJECT_WINDOWS_MDI_CLIENT_SLOT = 0x30, OBJECT_WINDOWS_CAN_CLOSE_SLOT = 0x3c, OBJECT_WINDOWS_CREATE_SLOT = 0x20, OBJECT_WINDOWS_EXEC_DIALOG_SLOT = 0x4c, WIN16_WM_QUIT = 0x0012, WIN16_PM_REMOVE = 1, WIN16_MB_YESNO_ICONHAND = 0x0014, WIN16_IDNO = 7, }; static void call_application_vmt_slot( Win16FarPtr application, uint16_t slot) { uint16_t vmt = win16_read_u16(application); Win16FarPtr procedure = win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); win16_call_object_method(procedure, application); } /* * 1018:1a61 — construct ObjectWindows' application root. * * The process-global application pointer is published before virtual * initialization. InitApplication (+0x10) runs only for the first Win16 * instance; InitInstance (+0x14) runs only while the status word remains zero. */ Win16FarPtr object_windows_application_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr name) { BorlandObjectCallFrame frame = {object, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = borland_default_object_constructor(frame.object, 0); win16_write_u16(frame.object, APPLICATION_NAME_OFFSET, win16_far_offset(name)); win16_write_u16(frame.object, APPLICATION_NAME_OFFSET + 2, win16_far_selector(name)); g_object_windows_application = frame.object; win16_write_u16(frame.object, APPLICATION_FIELD_0C_OFFSET, 0); win16_write_u16(frame.object, APPLICATION_STATUS_OFFSET, 0); win16_write_u16(frame.object, APPLICATION_FIELD_08_OFFSET, 0); win16_write_u16(frame.object, APPLICATION_FIELD_0A_OFFSET, 0); win16_write_u16(frame.object, APPLICATION_FIELD_0E_OFFSET, 0); win16_write_u16(frame.object, APPLICATION_FIELD_10_OFFSET, 0); g_object_windows_dispatch_proc = MakeProcInstance16( win16_relocated_code_pointer( 4, OBJECT_WINDOWS_BOUND_DISPATCH_OFFSET), g_win16_instance); borland_initialize_heap_reserve(); if (g_win16_previous_instance == 0) { call_application_vmt_slot( frame.object, APPLICATION_INIT_APPLICATION_SLOT); } if (win16_read_u16(win16_far_add_offset( frame.object, APPLICATION_STATUS_OFFSET)) == 0) { call_application_vmt_slot( frame.object, APPLICATION_INIT_INSTANCE_SLOT); } return frame.object; } /* 1018:1b08 — release the shared proc instance, then destroy/free the object. */ void object_windows_application_destruct(Win16FarPtr object, uint16_t vmt) { FreeProcInstance16(g_object_windows_dispatch_proc); borland_default_object_destructor(object, 0); BorlandObjectCallFrame frame = {object, vmt}; borland_finish_object_destructor(&frame, 0); } /* 1018:1b35 — default IdleAction: no background work was performed. */ bool object_windows_application_idle_default(Win16FarPtr application) { (void)application; return false; } /* 1018:1b4b — default first-instance InitApplication hook is intentionally empty. */ void object_windows_application_init_application_default( Win16FarPtr application) { (void)application; } /* * 1018:1bdf — publish the currently active dialog at object +0x0e/+0x10. * The modal-dialog path saves and restores this exact far pointer, and the * message loop uses it as the IsDialogMessage16 target. */ void object_windows_application_set_active_dialog( Win16FarPtr application, Win16FarPtr dialog) { win16_write_u16(application, APPLICATION_FIELD_0E_OFFSET, win16_far_offset(dialog)); win16_write_u16(application, APPLICATION_FIELD_10_OFFSET, win16_far_selector(dialog)); } static Win16FarPtr application_vmt_procedure( Win16FarPtr application, uint16_t slot) { uint16_t vmt = win16_read_u16(application); return win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); } /* 1018:0e9e — show one ObjectWindows object only after it owns an HWND. */ void object_windows_show(Win16FarPtr object, INT16 command) { HWND16 window = win16_read_u16(win16_far_add_offset( object, OBJECT_WINDOWS_OBJECT_HANDLE_OFFSET)); if (window != 0) { (void)ShowWindow16(window, command); } } /* * 1018:1b57 — run setup, create/publish MainWindow, then show it. A null * creator result stores ObjectWindows status -5 instead. */ void object_windows_application_initialize(Win16FarPtr application) { win16_call_object_method( application_vmt_procedure(application, APPLICATION_SETUP_SLOT), application); Win16FarPtr main_window = win16_call_object_far_method( application_vmt_procedure( application, APPLICATION_CREATE_MAIN_WINDOW_SLOT), application); win16_write_u16(application, APPLICATION_MAIN_WINDOW_OFFSET, win16_far_offset(main_window)); win16_write_u16(application, APPLICATION_MAIN_WINDOW_OFFSET + 2, win16_far_selector(main_window)); if (main_window == 0) { win16_write_u16(application, APPLICATION_STATUS_OFFSET, 0xfffb); return; } object_windows_show(main_window, (INT16)g_win16_show_command); } /* 1018:1bb0 — enter the message loop, or report a preexisting status error. */ void object_windows_application_run(Win16FarPtr application) { uint16_t status = win16_read_u16(win16_far_add_offset( application, APPLICATION_STATUS_OFFSET)); if (status == 0) { win16_call_object_method( application_vmt_procedure(application, APPLICATION_RUN_SLOT), application); return; } win16_call_object_u16_method( application_vmt_procedure(application, APPLICATION_ERROR_SLOT), application, status); } /* * 1018:1bfc — ObjectWindows application message loop. * Only WM_QUIT terminates the loop. With an empty queue, a false IdleAction * result causes WaitMessage; either idle outcome then repeats the loop. */ void object_windows_application_message_loop(Win16FarPtr application) { MSG16 message; bool quit = false; do { if (PeekMessage16(&message, 0, 0, 0, WIN16_PM_REMOVE) != 0) { if (message.message == WIN16_WM_QUIT) { quit = true; } else { Win16FarPtr filter = application_vmt_procedure( application, APPLICATION_PREPROCESS_MESSAGE_SLOT); if (!win16_call_application_message_filter( filter, application, &message)) { (void)TranslateMessage16(&message); (void)DispatchMessage16(&message); } } } else { Win16FarPtr idle = application_vmt_procedure( application, APPLICATION_IDLE_SLOT); if (!win16_call_object_bool_method(idle, application)) { (void)WaitMessage16(); } } } while (!quit); win16_write_u16(application, APPLICATION_STATUS_OFFSET, message.wparam); } /* 1018:1c7f — dialog, MDI, then ordinary accelerator preprocessing. */ bool object_windows_application_preprocess_message( Win16FarPtr application, MSG16 *message) { static const uint16_t slots[] = { APPLICATION_DIALOG_MESSAGE_SLOT, APPLICATION_MDI_ACCELERATOR_SLOT, APPLICATION_ACCELERATOR_SLOT, }; for (size_t index = 0; index < sizeof(slots) / sizeof(slots[0]); index++) { Win16FarPtr filter = application_vmt_procedure(application, slots[index]); if (win16_call_application_message_filter( filter, application, message)) { return true; } } return false; } /* * 1018:1cd6 — route through the active dialog's HWND when present. * NEG AX; SBB AL,AL; NEG AL normalizes only AL, deliberately preserving AH * from the negated Win16 BOOL return. */ uint16_t object_windows_application_process_dialog_message( Win16FarPtr application, MSG16 *message) { Win16FarPtr dialog = win16_read_far_pointer(application, APPLICATION_ACTIVE_DIALOG_OFFSET); if (dialog == 0) { return 0; } HWND16 window = win16_read_u16(win16_far_add_offset( dialog, OBJECT_WINDOWS_OBJECT_HANDLE_OFFSET)); if (window == 0) { return 0; } uint16_t api_result = (uint16_t)IsDialogMessage16(window, message); uint16_t negated = (uint16_t)(0u - api_result); return (uint16_t)((negated & 0xff00u) | (api_result != 0 ? 1u : 0u)); } /* 1018:1d22 — process the application's ordinary accelerator table. */ bool object_windows_application_process_accelerator( Win16FarPtr application, MSG16 *message) { HACCEL16 accelerator = win16_read_u16(win16_far_add_offset( application, APPLICATION_ACCELERATOR_OFFSET)); if (accelerator == 0) { return false; } Win16FarPtr main_window = win16_read_far_pointer( application, APPLICATION_MAIN_WINDOW_OFFSET); HWND16 window = win16_read_u16(win16_far_add_offset( main_window, OBJECT_WINDOWS_OBJECT_HANDLE_OFFSET)); return TranslateAccelerator16(window, accelerator, message) != 0; } /* 1018:1d64 — ask the main window for its MDI client, then translate there. */ bool object_windows_application_process_mdi_accelerator( Win16FarPtr application, MSG16 *message) { Win16FarPtr main_window = win16_read_far_pointer( application, APPLICATION_MAIN_WINDOW_OFFSET); uint16_t main_vmt = win16_read_u16(main_window); Win16FarPtr getter = win16_read_far_pointer( win16_dgroup_pointer(main_vmt), OBJECT_WINDOWS_MDI_CLIENT_SLOT); Win16FarPtr client = win16_call_object_far_method(getter, main_window); if (client == 0) { return false; } HWND16 window = win16_read_u16(win16_far_add_offset( client, OBJECT_WINDOWS_OBJECT_HANDLE_OFFSET)); return TranslateMDISysAccel16(window, message) != 0; } /* 1018:1f56 — delegate application shutdown approval to MainWindow.CanClose. */ bool object_windows_application_can_close(Win16FarPtr application) { Win16FarPtr main_window = win16_read_far_pointer( application, APPLICATION_MAIN_WINDOW_OFFSET); uint16_t vmt = win16_read_u16(main_window); Win16FarPtr can_close = win16_read_far_pointer( win16_dgroup_pointer(vmt), OBJECT_WINDOWS_CAN_CLOSE_SLOT); return win16_call_object_bool_method(can_close, main_window); } /* 1018:10e9 — default TWindow VMT +0x30: this is not an MDI frame. */ Win16FarPtr object_windows_window_get_mdi_client_default( Win16FarPtr window) { (void)window; return 0; } static void report_application_error( Win16FarPtr application, uint16_t error) { win16_call_object_u16_method( application_vmt_procedure( application, APPLICATION_ERROR_SLOT_FOR_WINDOW), application, error); } /* * 1018:1db1 — validate a newly constructed window against heap-reserve and * object-status failures. Every failure reports through VMT +0x40 and invokes * the candidate's virtual destructor with dispose mode 1. OOM (-2) also * reprovisions the Borland emergency reserve afterward. */ Win16FarPtr object_windows_application_validate_window( Win16FarPtr application, Win16FarPtr window) { if (window == 0) { return 0; } if (borland_heap_reserve_is_unallocated()) { report_application_error(application, 0xfffe); borland_dispose_object(window); borland_ensure_heap_reserve(); return 0; } uint16_t status = win16_read_u16(win16_far_add_offset(window, 2)); if (status != 0) { report_application_error(application, status); borland_dispose_object(window); return 0; } return window; } /* 1018:1e39 — validate and create a modeless window, disposing failures. */ Win16FarPtr object_windows_application_make_window( Win16FarPtr application, Win16FarPtr window) { if (window == 0) { return 0; } Win16FarPtr validated = win16_call_application_window_method( application_vmt_procedure( application, APPLICATION_VALIDATE_WINDOW_SLOT), application, window); if (validated == 0) { return 0; } uint16_t vmt = win16_read_u16(window); Win16FarPtr create = win16_read_far_pointer( win16_dgroup_pointer(vmt), OBJECT_WINDOWS_CREATE_SLOT); if (win16_call_object_bool_method(create, window)) { return window; } report_application_error( application, win16_read_u16(win16_far_add_offset(window, 2))); borland_dispose_object(window); return 0; } /* * 1018:1eb0 — validate, execute, and always dispose a modal dialog. Negative * execution results are reported and translated to the fixed fallback 2. */ int16_t object_windows_application_exec_dialog( Win16FarPtr application, Win16FarPtr dialog) { int16_t result = 2; Win16FarPtr validated = win16_call_application_window_method( application_vmt_procedure( application, APPLICATION_VALIDATE_WINDOW_SLOT), application, dialog); if (validated == 0) { return result; } uint16_t vmt = win16_read_u16(dialog); Win16FarPtr execute = win16_read_far_pointer( win16_dgroup_pointer(vmt), OBJECT_WINDOWS_EXEC_DIALOG_SLOT); int16_t execute_result = win16_call_object_int_method(execute, dialog); if (execute_result < 0) { report_application_error(application, (uint16_t)execute_result); } else { result = execute_result; } borland_dispose_object(dialog); return result; } /* * 1018:1f14 — format and display one ObjectWindows application error. * The original passes a far pointer to the caller's uint16 error word as the * wvsprintf argument list. Choosing IDNO (7) exits with that full AX word. */ void object_windows_application_error( Win16FarPtr application, uint16_t error) { (void)application; char text[32]; uint16_t arguments[1] = {error}; (void)wvsprintf16(text, object_windows_error_format, arguments); INT16 response = win16_call_message_box( g_win16_message_box, 0, text, object_windows_error_caption, WIN16_MB_YESNO_ICONHAND); if (response == WIN16_IDNO) { borland_runtime_exit(error); } } *_x #ifndef TDKPIN_APPLICATION_H #define TDKPIN_APPLICATION_H #include "tdkpin_borland_objects.h" #include "tdkpin_object_windows.h" extern Win16FarPtr g_object_windows_application; /* 1028:064e/0650 */ extern HINSTANCE16 g_win16_previous_instance; /* 1028:06fc */ extern HINSTANCE16 g_win16_instance; /* 1028:06fe */ extern uint16_t g_win16_show_command; /* 1028:0700 */ extern Win16FarPtr g_win16_message_box; /* 1028:0666/0668 */ extern const char object_windows_error_format[]; /* 1028:0698 */ extern const char object_windows_error_caption[]; /* 1028:06b3 */ Win16FarPtr object_windows_application_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr name); /* 1018:1a61 */ void object_windows_application_destruct( Win16FarPtr object, uint16_t vmt); /* 1018:1b08 */ bool object_windows_application_idle_default( Win16FarPtr application); /* 1018:1b35 */ void object_windows_application_init_application_default( Win16FarPtr application); /* 1018:1b4b */ void object_windows_application_set_active_dialog( Win16FarPtr application, Win16FarPtr dialog); /* 1018:1bdf */ void object_windows_application_message_loop( Win16FarPtr application); /* 1018:1bfc */ void object_windows_application_run( Win16FarPtr application); /* 1018:1bb0 */ void object_windows_application_initialize( Win16FarPtr application); /* 1018:1b57 */ void object_windows_show( Win16FarPtr object, INT16 command); /* 1018:0e9e */ bool object_windows_application_preprocess_message( Win16FarPtr application, MSG16 *message); /* 1018:1c7f */ uint16_t object_windows_application_process_dialog_message( Win16FarPtr application, MSG16 *message); /* 1018:1cd6 */ bool object_windows_application_process_accelerator( Win16FarPtr application, MSG16 *message); /* 1018:1d22 */ bool object_windows_application_process_mdi_accelerator( Win16FarPtr application, MSG16 *message); /* 1018:1d64 */ bool object_windows_application_can_close( Win16FarPtr application); /* 1018:1f56 */ Win16FarPtr object_windows_window_get_mdi_client_default( Win16FarPtr window); /* 1018:10e9 */ Win16FarPtr object_windows_application_validate_window( Win16FarPtr application, Win16FarPtr window); /* 1018:1db1 */ Win16FarPtr object_windows_application_make_window( Win16FarPtr application, Win16FarPtr window); /* 1018:1e39 */ int16_t object_windows_application_exec_dialog( Win16FarPtr application, Win16FarPtr dialog); /* 1018:1eb0 */ void object_windows_application_error( Win16FarPtr application, uint16_t error); /* 1018:1f14 */ /* Platform bridge for virtual ObjectWindows calls. */ bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object); bool win16_call_application_message_filter( Win16FarPtr procedure, Win16FarPtr application, MSG16 *message); Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object); Win16FarPtr win16_call_application_window_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr window); int16_t win16_call_application_dialog_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr dialog); int16_t win16_call_object_int_method( Win16FarPtr procedure, Win16FarPtr object); #endif AXxx#include "tdkpin_arithmetic.h" #include "tdkpin_borland_runtime.h" /* Low 32 bits of signed DX:AX * BX:CX, independent of CPU implementation path. */ int32_t borland_multiply_i32(int32_t left, int32_t right) { uint32_t bits = (uint32_t)((uint64_t)(uint32_t)left * (uint32_t)right); return (int32_t)bits; } BorlandDivI32Result borland_divide_i32(int32_t dividend, int32_t divisor) { if (divisor == 0) { borland_runtime_error(200); } if (dividend == INT32_MIN && divisor == -1) { if (g_borland_cpu_level >= 2) { win16_integer_divide_fault(); } return (BorlandDivI32Result){INT32_MIN, 0}; } bool quotient_negative = (dividend < 0) != (divisor < 0); bool remainder_negative = dividend < 0; uint32_t dividend_magnitude = dividend < 0 ? (uint32_t)(0u - (uint32_t)dividend) : (uint32_t)dividend; uint32_t divisor_magnitude = divisor < 0 ? (uint32_t)(0u - (uint32_t)divisor) : (uint32_t)divisor; uint32_t quotient_bits = dividend_magnitude / divisor_magnitude; uint32_t remainder_bits = dividend_magnitude % divisor_magnitude; if (quotient_negative) { quotient_bits = 0u - quotient_bits; } if (remainder_negative) { remainder_bits = 0u - remainder_bits; } return (BorlandDivI32Result){ (int32_t)quotient_bits, (int32_t)remainder_bits, }; } Jxr#ifndef TDKPIN_ARITHMETIC_H #define TDKPIN_ARITHMETIC_H #include int32_t borland_multiply_i32(int32_t left, int32_t right); /* 1020:08a9 */ extern uint8_t g_borland_cpu_level; /* 1028:0726 */ typedef struct { int32_t quotient; int32_t remainder; } BorlandDivI32Result; BorlandDivI32Result borland_divide_i32( int32_t dividend, int32_t divisor); /* 1020:08e6 */ #endif |x /* TDKPIN global asset and main-window shutdown sequence. */ #include "tdkpin_game_assets.h" #include "tdkpin_borland_objects.h" #include "tdkpin_message_pump.h" #include "tdkpin_sound.h" #include "tdkpin_window_lifecycle.h" enum { DGROUP_GLOBAL_BITMAP_FIRST = 0x0859, DGROUP_SPRITE_BITMAPS = 0x430b, DGROUP_STATUS_BITMAPS_BASE = 0x4319, DGROUP_ITEM_BITMAPS_BASE = 0x4321, WINDOW_HANDLE_OFFSET = 4, WINDOW_MASK_BITMAP_OFFSET = 0x52, WINDOW_OWNED_OBJECT_OFFSET = 0x49, WINDOW_ALREADY_REDRAWN_OFFSET = 0x0bd8, WINDOW_REDRAW_BUSY_OFFSET = 0x0bd9, WIN16_IDC_WAIT = 0x7f02, }; static void delete_dgroup_bitmap(uint16_t offset) { (void)DeleteObject16( win16_read_u16(win16_dgroup_pointer(offset))); } /* * 1000:51f5 — stop sound, dispose all globally published image assets, restore * the cursor, post quit code 18, then run TWindow and derived destructor exits. * Handles are intentionally left stale in their slots, exactly like the image. */ void tdkpin_asset_window_destruct( Win16FarPtr window, uint16_t vmt) { HCURSOR16 wait = LoadCursor16( 0, win16_make_far_pointer(0, WIN16_IDC_WAIT)); HCURSOR16 previous_cursor = SetCursor16(wait); tdkpin_unload_sounds(); win16_write_u8( win16_far_add_offset(window, WINDOW_REDRAW_BUSY_OFFSET), 1); win16_write_u8( win16_far_add_offset(window, WINDOW_ALREADY_REDRAWN_OFFSET), 1); Win16FarPtr owned = win16_read_far_pointer(window, WINDOW_OWNED_OBJECT_OFFSET); if (owned != 0) { borland_dispose_object(owned); } tdkpin_drain_messages_except_input(); (void)DeleteObject16( win16_read_u16(win16_far_add_offset( window, WINDOW_MASK_BITMAP_OFFSET))); delete_dgroup_bitmap(DGROUP_GLOBAL_BITMAP_FIRST); delete_dgroup_bitmap(0x0863); delete_dgroup_bitmap(0x0865); delete_dgroup_bitmap(0x085f); delete_dgroup_bitmap(0x085b); delete_dgroup_bitmap(0x0861); delete_dgroup_bitmap(0x085d); for (uint16_t index = 0; index < 8; index++) { delete_dgroup_bitmap( (uint16_t)(DGROUP_SPRITE_BITMAPS + index * 2)); } for (uint16_t index = 1; index <= 4; index++) { delete_dgroup_bitmap( (uint16_t)(DGROUP_STATUS_BITMAPS_BASE + index * 2)); } for (uint16_t index = 1; index <= 9; index++) { delete_dgroup_bitmap( (uint16_t)(DGROUP_ITEM_BITMAPS_BASE + index * 2)); } (void)SetCursor16(previous_cursor); PostQuitMessage16(0x12); object_windows_window_destruct(window, 0); HWND16 handle = win16_read_u16(win16_far_add_offset(window, WINDOW_HANDLE_OFFSET)); (void)InvalidateRect16(handle, 0, 1); BorlandObjectCallFrame frame = {window, vmt}; borland_finish_object_destructor(&frame, 0); } V^x +/* One-time TDKPIN asset loading and subsequent board redraw. */ #include "tdkpin_game_assets.h" #include "tdkpin_arithmetic.h" #include "tdkpin_message_pump.h" #include "tdkpin_palette.h" #include "tdkpin_render.h" #include "tdkpin_sound.h" enum { DGROUP_INSTANCE = 0x06fe, DGROUP_SCENE_READY = 0x07cb, DGROUP_ASSETS_PENDING = 0x07cc, DGROUP_CURRENT_PLAYER = 0x07d1, DGROUP_BACKGROUND_BITMAP = 0x085b, DGROUP_BACKGROUND_OVERLAY_B = 0x085d, DGROUP_BACKGROUND_OVERLAY_A = 0x085f, DGROUP_DIGIT_BITMAP = 0x0861, DGROUP_CLAW_BITMAP = 0x0863, DGROUP_BOARD_DECORATION_BITMAP = 0x0865, DGROUP_DISPLAYED_STATUS_LEVEL = 0x086b, DGROUP_SPRITE_BITMAPS = 0x430b, DGROUP_STATUS_BITMAPS_BASE = 0x4319, DGROUP_ITEM_BITMAPS_BASE = 0x4321, DGROUP_PALETTE = 0x444e, DGROUP_PLAYER_SCORE_INDEX_BASE = 0x097e, DGROUP_SCORE_FACTOR_VALUES_BASE = 0x098e, DGROUP_SCORE_FACTORS_BASE = 0x09a1, WINDOW_HANDLE_OFFSET = 4, WINDOW_MASK_BITMAP_OFFSET = 0x52, WINDOW_IMAGE_BITMAP_OFFSET = 0x54, WINDOW_TRANSIENT_1_OFFSET = 0x4d, WINDOW_TRANSIENT_2_OFFSET = 0x4f, WINDOW_X_VALUE_OFFSET = 0x0ba2, WINDOW_Y_VALUE_OFFSET = 0x0ba6, WINDOW_ALREADY_REDRAWN_OFFSET = 0x0bd8, WINDOW_REDRAW_BUSY_OFFSET = 0x0bd9, WINDOW_HIDE_OBJECT_OFFSET = 0x0bde, WIN16_SRCCOPY = 0x00cc0020, WIN16_MASK_ROP = 0x00c60088, WIN16_IMAGE_ROP = 0x00ee0086, WIN16_IDC_ARROW = 0x7f00, }; static HBITMAP16 load_dat(uint16_t resource_id) { return tdkpin_load_bitmap_resource( win16_make_far_pointer(0, resource_id), g_win16_instance); } static void write_dgroup_handle(uint16_t offset, HBITMAP16 bitmap) { win16_write_u16(win16_dgroup_pointer(offset), 0, bitmap); } static void draw_loading_stage( Win16FarPtr progress_frame, uint8_t stage) { tdkpin_draw_loading_stage(progress_frame, stage); } /* 1000:53c5..5618 — one-time exact resource/handle publication sequence. */ static void load_all_assets( HDC16 destination, Win16FarPtr progress_frame) { HBITMAP16 splash = load_dat(995); HDC16 splash_dc = CreateCompatibleDC16(destination); HGDIOBJ16 previous_splash = SelectObject16(splash_dc, splash); (void)BitBlt16( destination, 0, 0, 640, 480, splash_dc, 0, 0, WIN16_SRCCOPY); (void)SelectObject16(splash_dc, previous_splash); (void)DeleteObject16(splash_dc); (void)DeleteObject16(splash); HBITMAP16 loading_bitmap = load_dat(994); win16_write_u16(progress_frame, 0xfffe, loading_bitmap); draw_loading_stage(progress_frame, 2); tdkpin_initialize_sounds(); draw_loading_stage(progress_frame, 3); draw_loading_stage(progress_frame, 4); write_dgroup_handle(DGROUP_BACKGROUND_OVERLAY_B, load_dat(998)); draw_loading_stage(progress_frame, 5); write_dgroup_handle(DGROUP_BACKGROUND_BITMAP, load_dat(998)); draw_loading_stage(progress_frame, 6); write_dgroup_handle( DGROUP_DIGIT_BITMAP, LoadBitmap16(g_win16_instance, win16_make_far_pointer(0, 500))); for (uint16_t index = 0; index < 8; index++) { draw_loading_stage(progress_frame, (uint8_t)(index + 7)); write_dgroup_handle( (uint16_t)(DGROUP_SPRITE_BITMAPS + index * 2), load_dat((uint16_t)(400 + index))); } for (uint16_t index = 1; index <= 4; index++) { draw_loading_stage(progress_frame, (uint8_t)(index + 14)); write_dgroup_handle( (uint16_t)(DGROUP_STATUS_BITMAPS_BASE + index * 2), load_dat((uint16_t)(700 + index))); } for (uint16_t index = 1; index <= 9; index++) { draw_loading_stage(progress_frame, (uint8_t)(index + 18)); write_dgroup_handle( (uint16_t)(DGROUP_ITEM_BITMAPS_BASE + index * 2), load_dat((uint16_t)(800 + index))); } (void)loading_bitmap; } static bool positive_i32_at(Win16FarPtr object, uint16_t offset) { return (int32_t)win16_read_u32(win16_far_add_offset(object, offset)) > 0; } /* 1000:5619..58e2 — transient board redraw and score/status publication. */ static void redraw_scene( Win16FarPtr window, HDC16 destination, HPALETTE16 previous_palette) { if (win16_read_u8( win16_far_add_offset(window, WINDOW_ALREADY_REDRAWN_OFFSET)) != 0) { return; } win16_write_u8( win16_far_add_offset(window, WINDOW_REDRAW_BUSY_OFFSET), 1); HDC16 background_dc = CreateCompatibleDC16(destination); HDC16 surface_dc = CreateCompatibleDC16(destination); RECT16 rectangle; (void)GetClientRect16( win16_read_u16(win16_far_add_offset(window, WINDOW_HANDLE_OFFSET)), win16_stack_pointer(&rectangle)); HBITMAP16 surface = CreateCompatibleBitmap16( destination, (INT16)(rectangle.right + 1), (INT16)(rectangle.bottom + 1)); HGDIOBJ16 old_background = SelectObject16( background_dc, win16_read_u16(win16_dgroup_pointer(DGROUP_BACKGROUND_BITMAP))); HGDIOBJ16 old_surface = SelectObject16(surface_dc, surface); (void)BitBlt16( surface_dc, 0, 0, rectangle.right, rectangle.bottom, background_dc, 0, 0, WIN16_SRCCOPY); (void)BitBlt16( background_dc, 0, 0, rectangle.right, rectangle.bottom, surface_dc, 0, 0, WIN16_SRCCOPY); (void)BitBlt16( destination, 0, 0, rectangle.right, rectangle.bottom, surface_dc, 0, 0, WIN16_SRCCOPY); (void)SelectObject16(surface_dc, old_surface); (void)DeleteObject16(surface); (void)DeleteDC16(surface_dc); (void)SelectObject16(background_dc, old_background); if (positive_i32_at(window, WINDOW_X_VALUE_OFFSET) && positive_i32_at(window, WINDOW_Y_VALUE_OFFSET) && win16_read_u8( win16_far_add_offset(window, WINDOW_HIDE_OBJECT_OFFSET)) == 0) { uint16_t x = win16_read_u16( win16_far_add_offset(window, WINDOW_X_VALUE_OFFSET)); uint16_t y = win16_read_u16( win16_far_add_offset(window, WINDOW_Y_VALUE_OFFSET)); uint16_t width = (uint16_t)( win16_read_u32(win16_far_add_offset(window, WINDOW_X_VALUE_OFFSET)) + 19); uint16_t height = (uint16_t)( win16_read_u32(win16_far_add_offset(window, WINDOW_Y_VALUE_OFFSET)) + 19); HGDIOBJ16 previous = SelectObject16( background_dc, win16_read_u16(win16_far_add_offset( window, WINDOW_IMAGE_BITMAP_OFFSET))); (void)BitBlt16( destination, (INT16)x, (INT16)y, (INT16)width, (INT16)height, background_dc, 0, 0, WIN16_MASK_ROP); (void)SelectObject16( background_dc, win16_read_u16(win16_far_add_offset( window, WINDOW_MASK_BITMAP_OFFSET))); (void)BitBlt16( destination, (INT16)x, (INT16)y, (INT16)width, (INT16)height, background_dc, 0, 0, WIN16_IMAGE_ROP); (void)SelectObject16(background_dc, previous); } (void)DeleteDC16(background_dc); win16_write_u16(window, WINDOW_TRANSIENT_1_OFFSET, 0); win16_write_u16(window, WINDOW_TRANSIENT_2_OFFSET, 0); win16_write_u8( win16_far_add_offset(window, WINDOW_REDRAW_BUSY_OFFSET), 0); (void)SelectPalette16(destination, previous_palette, 0); HCURSOR16 arrow = LoadCursor16( 0, win16_make_far_pointer(0, WIN16_IDC_ARROW)); (void)SetCursor16(arrow); (void)GetClientRect16( win16_read_u16(win16_far_add_offset(window, WINDOW_HANDLE_OFFSET)), win16_stack_pointer(&rectangle)); HWND16 handle = win16_read_u16(win16_far_add_offset(window, WINDOW_HANDLE_OFFSET)); HDC16 window_dc = GetDC16(handle); uint8_t current_player = win16_read_u8( win16_dgroup_pointer(DGROUP_CURRENT_PLAYER)); uint8_t factor = win16_read_u8(win16_dgroup_pointer( (uint16_t)(DGROUP_SCORE_FACTORS_BASE + current_player))); int32_t factor_value = (int32_t)win16_read_u32(win16_dgroup_pointer( (uint16_t)(DGROUP_SCORE_FACTOR_VALUES_BASE + current_player * 4))); tdkpin_draw_score( window_dc, borland_multiply_i32(factor, factor_value)); for (uint16_t player = 1; player <= 4; player++) { int32_t score = (int32_t)win16_read_u32(win16_dgroup_pointer( (uint16_t)(DGROUP_PLAYER_SCORE_INDEX_BASE + player * 4))); if (score > 0) { tdkpin_draw_score(window_dc, player); } } win16_write_u16( win16_dgroup_pointer(DGROUP_DISPLAYED_STATUS_LEVEL), 0, 99); tdkpin_update_status_display(current_player, window_dc); (void)ReleaseDC16(handle, window_dc); win16_write_u8(win16_dgroup_pointer(DGROUP_SCENE_READY), 1); } /* * 1000:5390 — exact public entry. Two middle words are ABI-preserved but unused. */ void tdkpin_initialize_assets_and_redraw( Win16FarPtr window, uint16_t ignored_1, uint16_t ignored_2, HDC16 destination) { (void)ignored_1; (void)ignored_2; HPALETTE16 palette = win16_read_u16(win16_dgroup_pointer(DGROUP_PALETTE)); HPALETTE16 previous_palette = SelectPalette16(destination, palette, 0); (void)UnrealizeObject16(palette); (void)RealizePalette16(destination); tdkpin_drain_messages_except_input(); uint8_t progress_storage[64] = {0}; Win16FarPtr progress_frame = win16_stack_pointer(progress_storage + 24); win16_write_u16(progress_frame, 0x0e, destination); if (win16_read_u8( win16_dgroup_pointer(DGROUP_ASSETS_PENDING)) != 0) { load_all_assets(destination, progress_frame); HBITMAP16 loading_bitmap = win16_read_u16(win16_far_add_offset(progress_frame, 0xfffe)); draw_loading_stage(progress_frame, 28); win16_write_u16( window, WINDOW_IMAGE_BITMAP_OFFSET, LoadBitmap16(g_win16_instance, win16_make_far_pointer(0, 102))); draw_loading_stage(progress_frame, 29); write_dgroup_handle(DGROUP_CLAW_BITMAP, load_dat(900)); draw_loading_stage(progress_frame, 30); win16_write_u16( window, WINDOW_MASK_BITMAP_OFFSET, LoadBitmap16(g_win16_instance, win16_make_far_pointer(0, 101))); draw_loading_stage(progress_frame, 31); write_dgroup_handle(DGROUP_BACKGROUND_OVERLAY_A, load_dat(997)); draw_loading_stage(progress_frame, 32); write_dgroup_handle(DGROUP_BOARD_DECORATION_BITMAP, load_dat(901)); draw_loading_stage(progress_frame, 33); write_dgroup_handle(0x0859, load_dat(600)); draw_loading_stage(progress_frame, 34); win16_write_u8(win16_dgroup_pointer(DGROUP_ASSETS_PENDING), 0); draw_loading_stage(progress_frame, 35); (void)DeleteObject16(loading_bitmap); (void)SelectPalette16(destination, previous_palette, 0); HCURSOR16 arrow = LoadCursor16( 0, win16_make_far_pointer(0, WIN16_IDC_ARROW)); (void)SetCursor16(arrow); } redraw_scene(window, destination, previous_palette); } yhx8/* Borland Pascal generic file open/close dispatcher. */ #include "tdkpin_borland_files.h" enum { FILE_MODE_OFFSET = 2, FILE_BUFFER_POSITION_OFFSET = 8, FILE_BUFFER_END_OFFSET = 10, FILE_OPEN_PROCEDURE_OFFSET = 0x10, FILE_IN_OUT_PROCEDURE_OFFSET = 0x14, FILE_CLOSE_PROCEDURE_OFFSET = 0x1c, IO_ERROR_NOT_CLOSED = 0x66, IO_ERROR_NOT_OPEN = 0x67, }; /* 1020:05c7 — invoke one far FileProc and publish nonzero AX to IOResult. */ uint16_t borland_call_file_procedure( Win16FarPtr record, uint16_t procedure_offset) { Win16FarPtr procedure = win16_read_far_pointer(record, procedure_offset); uint16_t result = win16_call_file_procedure(procedure, record); if (result != 0) { atomic_store(&g_borland_io_result, result); } return result; } /* 1020:0586 — close input/output files; output files flush first. */ void borland_close_file(Win16FarPtr record) { uint16_t mode = win16_read_u16(win16_far_add_offset( record, FILE_MODE_OFFSET)); if (mode == BORLAND_FILE_OUTPUT) { (void)borland_call_file_procedure( record, FILE_IN_OUT_PROCEDURE_OFFSET); } else if (mode != BORLAND_FILE_INPUT) { atomic_store(&g_borland_io_result, IO_ERROR_NOT_OPEN); return; } (void)borland_call_file_procedure(record, FILE_CLOSE_PROCEDURE_OFFSET); win16_write_u16(record, FILE_MODE_OFFSET, BORLAND_FILE_CLOSED); } /* 1020:0534 — common Reset/Rewrite entry selected by DX. */ void borland_open_file(Win16FarPtr record, uint16_t mode) { uint16_t current = win16_read_u16(win16_far_add_offset( record, FILE_MODE_OFFSET)); if (current == BORLAND_FILE_INPUT || current == BORLAND_FILE_OUTPUT) { borland_close_file(record); } else if (current != BORLAND_FILE_CLOSED) { atomic_store(&g_borland_io_result, IO_ERROR_NOT_CLOSED); return; } win16_write_u16(record, FILE_MODE_OFFSET, mode); win16_write_u16(record, FILE_BUFFER_POSITION_OFFSET, 0); win16_write_u16(record, FILE_BUFFER_END_OFFSET, 0); if (borland_call_file_procedure( record, FILE_OPEN_PROCEDURE_OFFSET) != 0) { win16_write_u16(record, FILE_MODE_OFFSET, BORLAND_FILE_CLOSED); } } /* 1020:0527/052c — five-byte mode-selecting tail entries. */ void borland_reset_file(Win16FarPtr record) { borland_open_file(record, BORLAND_FILE_INPUT); } void borland_rewrite_file(Win16FarPtr record) { borland_open_file(record, BORLAND_FILE_OUTPUT); } /* 1020:05d8 — DOS AH=3f buffered read. */ uint16_t borland_file_read_buffer(Win16FarPtr record) { uint16_t handle = win16_read_u16(record); uint16_t count = win16_read_u16(win16_far_add_offset(record, 4)); Win16FarPtr buffer = win16_read_far_pointer(record, 12); Win16DosResult result = win16_dos_read(handle, buffer, count); win16_write_u16(record, 10, result.carry ? 0 : result.ax); win16_write_u16(record, 8, 0); return result.carry ? result.ax : 0; } static Win16DosResult write_pending_bytes(Win16FarPtr record) { uint16_t count = win16_exchange_u16( win16_far_add_offset(record, 8), 0); uint16_t handle = win16_read_u16(record); Win16FarPtr buffer = win16_read_far_pointer(record, 12); Win16DosResult result = win16_dos_write(handle, buffer, count); if (!result.carry && result.ax != count) { result.ax = 0x65; result.carry = true; } return result; } /* 1020:0608 — buffered flush with short-write detection. */ uint16_t borland_file_flush_buffer(Win16FarPtr record) { Win16DosResult result = write_pending_bytes(record); return result.carry ? result.ax : 0; } /* 1020:062d — same DOS write, but only carry is an error. */ uint16_t borland_file_write_buffer(Win16FarPtr record) { uint16_t count = win16_exchange_u16( win16_far_add_offset(record, 8), 0); Win16DosResult result = win16_dos_write( win16_read_u16(record), win16_read_far_pointer(record, 12), count); return result.carry ? result.ax : 0; } /* 1020:064d — preserve DOS standard handles 0..4; close larger handles. */ uint16_t borland_file_close_handle(Win16FarPtr record) { uint16_t handle = win16_read_u16(record); if (handle <= 4) { return 0; } Win16DosResult result = win16_dos_close(handle); return result.carry ? result.ax : 0; } /* 1020:0751 — generic files must be in open sentinel mode 0xd7b3. */ bool borland_validate_open_file(Win16FarPtr record) { if (win16_read_u16(win16_far_add_offset(record, 2)) == 0xd7b3) { return true; } atomic_store(&g_borland_io_result, 0x67); return false; } /* 1020:0710 — DOS zero-byte write truncates at the current file position. */ void borland_truncate_file(Win16FarPtr record) { if (!borland_validate_open_file(record)) { return; } uint16_t indeterminate = win16_indeterminate_u16(); Win16DosResult result = win16_dos_write( win16_read_u16(record), win16_make_far_pointer(indeterminate, indeterminate), 0); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); } } /* 1020:072c — close a valid generic file and always mark it closed. */ void borland_close_generic_file(Win16FarPtr record) { if (!borland_validate_open_file(record)) { return; } uint16_t handle = win16_read_u16(record); if (handle > 4) { Win16DosResult result = win16_dos_close(handle); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); } } win16_write_u16(record, 2, BORLAND_FILE_CLOSED); } static void transfer_one_record( Win16FarPtr buffer, Win16FarPtr record, bool write) { if (!borland_validate_open_file(record)) { return; } uint16_t bytes = win16_read_u16(win16_far_add_offset(record, 4)); Win16DosResult result = write ? win16_dos_write(win16_read_u16(record), buffer, bytes) : win16_dos_read(win16_read_u16(record), buffer, bytes); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); } else if (result.ax != bytes) { atomic_store(&g_borland_io_result, write ? 0x65 : 0x64); } } void borland_file_read_record(Win16FarPtr buffer, Win16FarPtr record) { transfer_one_record(buffer, record, false); } void borland_file_write_record(Win16FarPtr buffer, Win16FarPtr record) { transfer_one_record(buffer, record, true); } static void transfer_record_block( Win16FarPtr result_count, uint16_t requested_records, Win16FarPtr buffer, Win16FarPtr record, bool write) { uint16_t records_transferred = 0; if (borland_validate_open_file(record)) { uint16_t record_size = win16_read_u16(win16_far_add_offset(record, 4)); if (requested_records != 0) { uint16_t byte_count = (uint16_t)((uint32_t)requested_records * record_size); Win16DosResult result = write ? win16_dos_write( win16_read_u16(record), buffer, byte_count) : win16_dos_read( win16_read_u16(record), buffer, byte_count); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); goto publish; } if (record_size == 0) { win16_integer_divide_fault(); } records_transferred = (uint16_t)(result.ax / record_size); } if (result_count == 0 && records_transferred != requested_records) { atomic_store(&g_borland_io_result, write ? 0x65 : 0x64); } } publish: if (result_count != 0) { win16_write_u16(result_count, 0, records_transferred); } } void borland_file_block_read( Win16FarPtr result_count, uint16_t requested_records, Win16FarPtr buffer, Win16FarPtr record) { transfer_record_block( result_count, requested_records, buffer, record, false); } void borland_file_block_write( Win16FarPtr result_count, uint16_t requested_records, Win16FarPtr buffer, Win16FarPtr record) { transfer_record_block( result_count, requested_records, buffer, record, true); } void borland_file_seek_record(uint32_t record_index, Win16FarPtr record) { if (!borland_validate_open_file(record)) { return; } uint16_t record_size = win16_read_u16(win16_far_add_offset(record, 4)); uint32_t byte_offset = record_index * record_size; Win16DosResult result = win16_dos_seek(win16_read_u16(record), byte_offset, 0); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); } } static void open_or_create_generic_file( uint16_t record_size, Win16FarPtr record, bool create) { uint16_t mode = win16_read_u16(win16_far_add_offset(record, 2)); if (mode == 0xd7b3) { borland_close_generic_file(record); } else if (mode != BORLAND_FILE_CLOSED) { atomic_store(&g_borland_io_result, 0x66); return; } Win16FarPtr name = win16_far_add_offset(record, 48); Win16DosResult result; if (win16_read_u8(name) == 0) { result = (Win16DosResult){create ? 1 : 0, false}; } else { result = create ? win16_dos_create(name, 0) : win16_dos_open(name, g_borland_file_mode); if (result.carry) { atomic_store(&g_borland_io_result, result.ax); return; } } win16_write_u16(record, 2, 0xd7b3); win16_write_u16(record, 0, result.ax); win16_write_u16(record, 4, record_size); } void borland_open_generic_file(uint16_t record_size, Win16FarPtr record) { open_or_create_generic_file(record_size, record, false); } void borland_create_generic_file(uint16_t record_size, Win16FarPtr record) { open_or_create_generic_file(record_size, record, true); } /* * 1020:0c76 -- when Append opens an ordinary DOS file, inspect only its last * 128 bytes and remove the first DOS text EOF marker (Ctrl-Z) found there. * Every INT 21h error is deliberately ignored by the original helper. */ void borland_text_truncate_at_ctrl_z(Win16FarPtr record) { uint16_t handle = win16_read_u16(record); Win16DosExtendedResult end = win16_dos_seek_extended(handle, 0, 2); uint32_t file_size = ((uint32_t)end.dx << 16) | end.ax; uint32_t scan_start = file_size >= 128 ? file_size - 128 : 0; (void)win16_dos_seek_extended(handle, scan_start, 0); Win16FarPtr buffer = win16_far_add_offset(record, 0x80); Win16DosResult read = win16_dos_read(handle, buffer, 128); uint16_t bytes_read = read.carry ? 0 : read.ax; for (uint16_t index = 0; index != bytes_read; index++) { if (win16_read_u8(win16_far_add_offset(buffer, index)) != 0x1a) { continue; } /* CX:DX = FFFF:(index-bytes_read), exactly as the 16-bit SUB forms it. */ uint32_t relative_offset = 0xffff0000u | (uint16_t)(index - bytes_read); Win16DosExtendedResult position = win16_dos_seek_extended(handle, relative_offset, 2); Win16FarPtr ignored_buffer = win16_make_far_pointer( win16_far_selector(record), position.dx); (void)win16_dos_write(handle, ignored_buffer, 0); return; } } static void write_text_procedure( Win16FarPtr record, uint16_t offset, Win16FarPtr procedure) { win16_write_u16(record, offset, win16_far_offset(procedure)); win16_write_u16( record, (uint16_t)(offset + 2), win16_far_selector(procedure)); } /* * 1020:0be9 -- TextRec OpenFunc. The incoming mode selects Reset (input), * Rewrite (create output), or Append (read/write output). On success it * installs the relocated Borland buffer callbacks used by the generic text * dispatcher. DOS character devices use the unbuffered write callback in * both InOutFunc and FlushFunc; ordinary files use the buffered flush callback * in InOutFunc and a null FlushFunc. */ uint16_t borland_open_text_record(Win16FarPtr record) { enum { TEXTREC_MODE_OFFSET = 2, TEXTREC_NAME_OFFSET = 0x30, TEXTREC_IN_OUT_PROCEDURE_OFFSET = 0x14, TEXTREC_FLUSH_PROCEDURE_OFFSET = 0x18, TEXTREC_CLOSE_PROCEDURE_OFFSET = 0x1c, BORLAND_READ_BUFFER_OFFSET = 0x05d8, BORLAND_FLUSH_BUFFER_OFFSET = 0x0608, BORLAND_WRITE_BUFFER_OFFSET = 0x062d, BORLAND_CLOSE_HANDLE_OFFSET = 0x064d, }; uint16_t mode = win16_read_u16( win16_far_add_offset(record, TEXTREC_MODE_OFFSET)); uint16_t default_handle = mode == BORLAND_FILE_INPUT ? 0 : 1; win16_write_u16(record, 0, default_handle); Win16FarPtr name = win16_far_add_offset(record, TEXTREC_NAME_OFFSET); if (win16_read_u8(name) != 0) { Win16DosResult opened; if (mode == BORLAND_FILE_INPUT) { opened = win16_dos_open(name, 0); } else if (mode == BORLAND_TEXT_APPEND) { opened = win16_dos_open(name, 2); } else { opened = win16_dos_create(name, 0); } if (opened.carry) { return opened.ax; } win16_write_u16(record, 0, opened.ax); } Win16FarPtr in_out_procedure = win16_relocated_code_pointer( 5, BORLAND_READ_BUFFER_OFFSET); Win16FarPtr flush_procedure = 0; if (mode != BORLAND_FILE_INPUT) { Win16DosExtendedResult device = win16_dos_get_device_info( win16_read_u16(record)); if ((device.dx & 0x0080u) != 0) { in_out_procedure = win16_relocated_code_pointer( 5, BORLAND_WRITE_BUFFER_OFFSET); flush_procedure = in_out_procedure; } else { if (mode == BORLAND_TEXT_APPEND) { borland_text_truncate_at_ctrl_z(record); } in_out_procedure = win16_relocated_code_pointer( 5, BORLAND_FLUSH_BUFFER_OFFSET); } win16_write_u16(record, TEXTREC_MODE_OFFSET, BORLAND_FILE_OUTPUT); } write_text_procedure( record, TEXTREC_IN_OUT_PROCEDURE_OFFSET, in_out_procedure); write_text_procedure( record, TEXTREC_FLUSH_PROCEDURE_OFFSET, flush_procedure); write_text_procedure( record, TEXTREC_CLOSE_PROCEDURE_OFFSET, win16_relocated_code_pointer(5, BORLAND_CLOSE_HANDLE_OFFSET)); return 0; } /* 1008:2374 — stored FileProc callback; receiver ignored, AX=0. */ uint16_t tdkpin_file_close_noop(Win16FarPtr record) { (void)record; return 0; } מx% #ifndef TDKPIN_BORLAND_FILES_H #define TDKPIN_BORLAND_FILES_H #include "tdkpin_borland_runtime.h" enum BorlandFileMode { BORLAND_FILE_CLOSED = 0xd7b0, BORLAND_FILE_INPUT = 0xd7b1, BORLAND_FILE_OUTPUT = 0xd7b2, BORLAND_TEXT_APPEND = 0xd7b3, BORLAND_GENERIC_FILE_OPEN = 0xd7b3, }; void borland_reset_file(Win16FarPtr record); /* 1020:0527 */ void borland_rewrite_file(Win16FarPtr record); /* 1020:052c */ void borland_open_file( Win16FarPtr record, uint16_t mode); /* 1020:0534 */ void borland_close_file(Win16FarPtr record); /* 1020:0586 */ uint16_t borland_call_file_procedure( Win16FarPtr record, uint16_t procedure_offset); /* 1020:05c7 */ uint16_t win16_call_file_procedure( Win16FarPtr procedure, Win16FarPtr record); uint16_t borland_file_read_buffer(Win16FarPtr record); /* 1020:05d8 */ uint16_t borland_file_flush_buffer(Win16FarPtr record); /* 1020:0608 */ uint16_t borland_file_write_buffer(Win16FarPtr record); /* 1020:062d */ uint16_t borland_file_close_handle(Win16FarPtr record); /* 1020:064d */ bool borland_validate_open_file(Win16FarPtr record); /* 1020:0751 */ void borland_truncate_file(Win16FarPtr record); /* 1020:0710 */ void borland_close_generic_file(Win16FarPtr record); /* 1020:072c */ void borland_file_read_record( Win16FarPtr buffer, Win16FarPtr record); /* 1020:0760 */ void borland_file_write_record( Win16FarPtr buffer, Win16FarPtr record); /* shared 1020:0765 */ void borland_file_block_read( Win16FarPtr result_count, uint16_t requested_records, Win16FarPtr buffer, Win16FarPtr record); /* 1020:0796 */ void borland_file_block_write( Win16FarPtr result_count, uint16_t requested_records, Win16FarPtr buffer, Win16FarPtr record); /* shared 1020:079b */ void borland_file_seek_record( uint32_t record_index, Win16FarPtr record); /* 1020:07fe */ void borland_open_generic_file( uint16_t record_size, Win16FarPtr record); /* 1020:06ab */ void borland_create_generic_file( uint16_t record_size, Win16FarPtr record); /* shared 1020:06b4 */ uint16_t borland_open_text_record( Win16FarPtr record); /* 1020:0be9 */ void borland_text_truncate_at_ctrl_z( Win16FarPtr record); /* 1020:0c76 */ uint16_t tdkpin_file_close_noop(Win16FarPtr record); /* 1008:2374 */ extern uint8_t g_borland_file_mode; /* 1028:0727 */ #endif ϸx /* Borland Pascal object construction and destruction protocol. */ #include "tdkpin_borland_objects.h" /* * 1020:03ef — constructor entry helper. * * The VMT is a near DGROUP pointer. Its first word is the instance size, and * DI in the register ABI supplies the offset of the object's VMT field. For an * already allocated object the helper clears the caller's hidden VMT argument; * compiler-generated failure cleanup uses that mutation to avoid freeing an * object which it did not allocate. */ bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { uint16_t vmt = frame->vmt_argument; if (vmt == 0) { return true; } if (frame->object != 0) { frame->vmt_argument = 0; } else { uint16_t object_size = win16_read_u16(win16_dgroup_pointer(vmt)); BorlandAllocationAttempt allocation = borland_try_get_mem(object_size); if (allocation.failed) { borland_runtime_error(203); } if (allocation.block == 0) { return false; } frame->object = allocation.block; } win16_write_u16( frame->object, vmt_field_offset, vmt); return true; } /* * 1020:0439 — destructor exit helper. A nonzero hidden VMT argument says that * this destructor invocation owns the allocation. The size is recovered from * the VMT currently installed in the object, then the caller's object pointer * is cleared after a successful release. */ void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { if (frame->vmt_argument == 0) { return; } uint16_t vmt = win16_read_u16(win16_far_add_offset( frame->object, vmt_field_offset)); uint16_t object_size = win16_read_u16(win16_dgroup_pointer(vmt)); if (borland_try_free_mem(frame->object, object_size)) { borland_runtime_error(204); } frame->object = 0; } /* 1008:2d99 — the root object's constructor has its VMT field at offset zero. */ Win16FarPtr borland_default_object_constructor( Win16FarPtr object, uint16_t vmt) { BorlandObjectCallFrame frame = {object, vmt}; borland_enter_object_constructor(&frame, 0); return frame.object; } /* 1008:2dcd — root destructor cleanup with the VMT field at offset zero. */ void borland_default_object_destructor(Win16FarPtr object, uint16_t vmt) { BorlandObjectCallFrame frame = {object, vmt}; borland_finish_object_destructor(&frame, 0); } /* * 1008:2db3 — Pascal Dispose: call VMT slot +8 with hidden dispose mode 1. * The virtual destructor itself ultimately reaches 1020:0439 and frees the * allocation according to the VMT size. */ void borland_dispose_object(Win16FarPtr object) { uint16_t vmt = win16_read_u16(object); Win16FarPtr destructor = win16_read_far_pointer(win16_dgroup_pointer(vmt), 8); win16_call_object_destructor(destructor, object, 1); } /* 1008:2d87 — Borland's abstract virtual-method trap. */ _Noreturn void borland_abstract_method_error(void) { borland_runtime_error(211); } /* 1018:0d8a — ObjectWindows abstract slot forwarding to the Borland trap. */ _Noreturn void object_windows_abstract_method(void) { borland_abstract_method_error(); } oE:x[#ifndef TDKPIN_BORLAND_OBJECTS_H #define TDKPIN_BORLAND_OBJECTS_H #include "tdkpin_borland_runtime.h" /* Mutable hidden stack fields used by Borland constructor/destructor calls. */ typedef struct { Win16FarPtr object; uint16_t vmt_argument; } BorlandObjectCallFrame; bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset); /* 1020:03ef */ void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset); /* 1020:0439 */ Win16FarPtr borland_default_object_constructor( Win16FarPtr object, uint16_t vmt); /* 1008:2d99 */ void borland_default_object_destructor( Win16FarPtr object, uint16_t vmt); /* 1008:2dcd */ void borland_dispose_object(Win16FarPtr object); /* 1008:2db3 */ _Noreturn void borland_abstract_method_error(void); /* 1008:2d87 */ _Noreturn void object_windows_abstract_method(void); /* 1018:0d8a */ #endif z6x@/* Borland VMT validation and text/file record initialization. */ #include "tdkpin_borland_records.h" enum { TEXTREC_NAME_OFFSET = 48, TEXTREC_NAME_CAPACITY = 79, TEXTREC_BUFFER_OFFSET = 128, TEXTREC_DEFAULT_BUFFER_BYTES = 128, TEXTREC_CLOSED_SENTINEL = 0xd7b0, TEXTREC_OPEN_PROC_OFFSET = 0x0be9, }; /* 1020:048f — Runtime Error 210 unless size and negative size form a VMT. */ void borland_validate_vmt_descriptor(Win16FarPtr vmt) { uint16_t size = win16_read_u16(vmt); int16_t negative_size = (int16_t)win16_read_u16(win16_far_add_offset(vmt, 2)); if (size == 0 || (uint16_t)(size + (uint16_t)negative_size) != 0) { borland_runtime_error(210); } } static void initialize_text_record( Win16FarPtr name, Win16FarPtr record, bool short_string) { win16_write_u16(record, 0, 0); win16_write_u16(record, 2, TEXTREC_CLOSED_SENTINEL); win16_write_u16(record, 4, TEXTREC_DEFAULT_BUFFER_BYTES); win16_write_u16(record, 6, 0); win16_write_u16(record, 8, 0); win16_write_u16(record, 10, 0); Win16FarPtr buffer = win16_far_add_offset(record, TEXTREC_BUFFER_OFFSET); win16_write_u16(record, 12, win16_far_offset(buffer)); win16_write_u16(record, 14, win16_far_selector(buffer)); Win16FarPtr open_procedure = win16_relocated_code_pointer(5, TEXTREC_OPEN_PROC_OFFSET); win16_write_u16(record, 16, win16_far_offset(open_procedure)); win16_write_u16(record, 18, win16_far_selector(open_procedure)); for (uint16_t offset = 20; offset < TEXTREC_NAME_OFFSET; offset += 2) { win16_write_u16(record, offset, 0); } uint16_t maximum = TEXTREC_NAME_CAPACITY; uint16_t source_offset = 0; if (short_string) { uint8_t length = win16_read_u8(name); source_offset = 1; if (length < maximum) { maximum = length; } } uint16_t copied = 0; while (copied < maximum) { uint8_t byte = win16_read_u8( win16_far_add_offset(name, (uint16_t)(source_offset + copied))); if (byte == 0) { break; } win16_write_u8( win16_far_add_offset( record, (uint16_t)(TEXTREC_NAME_OFFSET + copied)), byte); copied++; } Win16FarPtr destination = win16_far_add_offset(record, TEXTREC_NAME_OFFSET); win16_write_u8(win16_far_add_offset(destination, copied), 0); (void)AnsiToOem16(destination, destination); } /* 1020:049f — C-string entry; MOV DX,0xd233 forces the non-short branch. */ void borland_assign_text_c(Win16FarPtr name, Win16FarPtr record) { initialize_text_record(name, record, false); } /* 1020:04a0 — overlapping XOR DX,DX entry for Turbo Pascal ShortString. */ void borland_assign_text_short(Win16FarPtr name, Win16FarPtr record) { initialize_text_record(name, record, true); } /* 1020:04fc — initialize five exact fields of a generic file record. */ void borland_initialize_file_record( uint16_t field_04, uint16_t field_0c, uint16_t field_0e, Win16FarPtr record) { win16_write_u16(record, 4, field_04); win16_write_u16(record, 12, field_0c); win16_write_u16(record, 14, field_0e); win16_write_u16(record, 8, 0); win16_write_u16(record, 10, 0); } /* 1020:0667 — initialize FileRec and copy one Pascal ShortString name. */ void borland_assign_file_short(Win16FarPtr name, Win16FarPtr record) { win16_write_u16(record, 0, 0); win16_write_u16(record, 2, TEXTREC_CLOSED_SENTINEL); for (uint16_t offset = 4; offset < TEXTREC_NAME_OFFSET; offset += 2) { win16_write_u16(record, offset, 0); } uint16_t length = win16_read_u8(name); if (length > TEXTREC_NAME_CAPACITY) { length = TEXTREC_NAME_CAPACITY; } Win16FarPtr destination = win16_far_add_offset(record, TEXTREC_NAME_OFFSET); uint16_t copied = 0; while (copied < length) { uint8_t byte = win16_read_u8( win16_far_add_offset(name, (uint16_t)(copied + 1))); if (byte == 0) { break; } win16_write_u8(win16_far_add_offset(destination, copied), byte); copied++; } win16_write_u8(win16_far_add_offset(destination, copied), 0); (void)AnsiToOem16(destination, destination); } vxc#ifndef TDKPIN_BORLAND_RECORDS_H #define TDKPIN_BORLAND_RECORDS_H #include "tdkpin_borland_runtime.h" #pragma pack(push, 1) typedef struct { uint16_t handle; uint16_t mode; uint16_t buffer_size; uint16_t buffer_position; uint16_t buffer_end; uint16_t reserved_word_0a; Win16FarPtr buffer; Win16FarPtr open_procedure; Win16FarPtr in_out_procedure; Win16FarPtr flush_procedure; Win16FarPtr close_procedure; uint8_t user_data[16]; char name[80]; } BorlandTextRecordHeader; #pragma pack(pop) _Static_assert( sizeof(BorlandTextRecordHeader) == 128, "Borland TextRec header layout drift"); _Static_assert( offsetof(BorlandTextRecordHeader, buffer) == 0x0c, "Borland TextRec buffer pointer offset drift"); _Static_assert( offsetof(BorlandTextRecordHeader, open_procedure) == 0x10, "Borland TextRec OpenFunc offset drift"); _Static_assert( offsetof(BorlandTextRecordHeader, in_out_procedure) == 0x14, "Borland TextRec InOutFunc offset drift"); _Static_assert( offsetof(BorlandTextRecordHeader, flush_procedure) == 0x18, "Borland TextRec FlushFunc offset drift"); _Static_assert( offsetof(BorlandTextRecordHeader, close_procedure) == 0x1c, "Borland TextRec CloseFunc offset drift"); _Static_assert( offsetof(BorlandTextRecordHeader, name) == 0x30, "Borland TextRec name offset drift"); void borland_validate_vmt_descriptor(Win16FarPtr vmt); /* 1020:048f */ void borland_assign_text_c( Win16FarPtr name, Win16FarPtr record); /* 1020:049f */ void borland_assign_text_short( Win16FarPtr name, Win16FarPtr record); /* shared 1020:04a0 */ void borland_initialize_file_record( uint16_t field_04, uint16_t field_0c, uint16_t field_0e, Win16FarPtr record); /* 1020:04fc */ void borland_assign_file_short( Win16FarPtr name, Win16FarPtr record); /* 1020:0667 */ #endif k2x<'/* * Address-linked Borland Win16 runtime termination support from TDKPIN.EXE. * Functions: 1020:0061, 1020:00d2, and 1020:00f0. */ #include "tdkpin_borland_runtime.h" enum { DGROUP_RUNTIME_ERROR_TEXT = 0x0728, RUNTIME_ERROR_DECIMAL_END = 0x0739, RUNTIME_ERROR_SEGMENT_END = 0x0741, RUNTIME_ERROR_OFFSET_END = 0x0746, RUNTIME_ERROR_MESSAGEBOX_FLAGS = 0x1010, }; extern Win16FarPtr g_borland_exit_proc; /* 1028:0712/0714 */ extern uint16_t g_borland_exit_code_word; /* 1028:0716/0717 */ extern uint16_t g_borland_error_offset; /* 1028:0718 */ extern uint16_t g_borland_error_segment; /* 1028:071a */ extern uint16_t g_borland_windows_mode; /* 1028:071c */ extern char g_borland_runtime_error_text[32]; /* 1028:0728..0747 */ /* 1020:012d — checked GetMem wrapper; allocation failure is Runtime Error 203. */ Win16FarPtr borland_get_mem(uint16_t bytes) { BorlandAllocationAttempt attempt = borland_try_get_mem(bytes); if (attempt.failed) { borland_runtime_error(203); } return attempt.block; } /* 1020:0147 — checked FreeMem wrapper; invalid release is Runtime Error 204. */ void borland_free_mem(Win16FarPtr block, uint16_t bytes) { if (borland_try_free_mem(block, bytes)) { borland_runtime_error(204); } } /* 1020:0222 — GlobalAlloc16 followed by GlobalLock16 on nonzero handle. */ Win16FarPtr borland_global_allocate(uint16_t bytes) { HGLOBAL16 allocation = GlobalAlloc16(g_borland_global_alloc_flags, bytes); return allocation == 0 ? 0 : GlobalLock16(allocation); } uint16_t borland_take_io_result(void) { return atomic_exchange_explicit( &g_borland_io_result, 0, memory_order_seq_cst); } void borland_require_io_success(void) { uint16_t result = atomic_load_explicit( &g_borland_io_result, memory_order_seq_cst); if (result != 0) { borland_runtime_error(result); } } void borland_check_int32_range( int32_t value, const BorlandInt32Range *range) { if (value < range->minimum || value > range->maximum) { borland_runtime_error(201); } } _Noreturn void borland_runtime_error_215(void) { borland_runtime_error(215); } /* 1008:2de0 — AL=1 exactly when the emergency reserve far pointer is null. */ bool borland_heap_reserve_is_unallocated(void) { return g_borland_heap_reserve == 0; } /* 1008:2dff — allocate the configured reserve only when it is absent. */ void borland_ensure_heap_reserve(void) { if (borland_heap_reserve_is_unallocated()) { g_borland_heap_reserve = borland_get_mem(g_borland_heap_reserve_bytes); } } /* * 1008:2e22 — Borland heap-error callback. * 0 means no reserve was available, 1 suppresses release, and 2 tells the * allocator to retry after the reserve has been freed. The zero-size entry is * not used by the allocator and returns the same indeterminate word as the * binary's uninitialized local. */ uint16_t borland_release_heap_reserve_on_oom(uint16_t requested_bytes) { if (requested_bytes == 0) { return win16_indeterminate_u16(); } if (g_borland_heap_reserve_disabled) { return 1; } if (borland_heap_reserve_is_unallocated()) { return 0; } borland_free_mem(g_borland_heap_reserve, g_borland_heap_reserve_bytes); g_borland_heap_reserve = 0; return 2; } /* 1008:2e76 — provision the reserve and publish the retry callback. */ void borland_initialize_heap_reserve(void) { borland_ensure_heap_reserve(); g_borland_heap_error_handler = win16_relocated_code_pointer(2, 0x2e22); } /* 1020:16c9 — CLD plus REP STOSB over one far destination. */ void borland_fill_bytes(Win16FarPtr destination, uint16_t count, uint8_t value) { win16_fill_bytes(destination, count, value); } /* * 1020:16a5 — Borland System.Move over two far pointers. * * The original compares only SI and DI, not their selectors, before choosing * CLD or STD. Copying backwards across distinct segments is harmless but is a * real observable detail of the routine. All address arithmetic wraps at the * 16-bit offset boundary exactly as the 8086 registers do. */ void borland_move_bytes( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { uint16_t source_selector = win16_far_selector(source); uint16_t destination_selector = win16_far_selector(destination); uint16_t source_offset = win16_far_offset(source); uint16_t destination_offset = win16_far_offset(destination); if (source_offset >= destination_offset) { while (count != 0) { uint8_t byte = win16_read_u8( win16_make_far_pointer(source_selector, source_offset)); win16_write_u8( win16_make_far_pointer( destination_selector, destination_offset), byte); source_offset++; destination_offset++; count--; } return; } source_offset = (uint16_t)(source_offset + count - 1u); destination_offset = (uint16_t)(destination_offset + count - 1u); while (count != 0) { uint8_t byte = win16_read_u8( win16_make_far_pointer(source_selector, source_offset)); win16_write_u8( win16_make_far_pointer(destination_selector, destination_offset), byte); source_offset--; destination_offset--; count--; } } /* * 1020:046c — copy one compiler-described record. * * A near descriptor pointer lives at destination + descriptor_field_offset; * its first DGROUP word is the record byte length. The binary saves that near * pointer, performs a forward far copy onto the start of the destination, and * writes the descriptor pointer back because the copied bytes may overlap it. */ void borland_copy_typed_record( uint16_t descriptor_field_offset, Win16FarPtr destination, Win16FarPtr source) { uint16_t destination_selector = win16_far_selector(destination); uint16_t destination_offset = win16_far_offset(destination); uint16_t source_selector = win16_far_selector(source); uint16_t source_offset = win16_far_offset(source); uint16_t descriptor_address = (uint16_t)(destination_offset + descriptor_field_offset); Win16FarPtr descriptor_field = win16_make_far_pointer( destination_selector, descriptor_address); uint16_t descriptor_offset = win16_read_u16(descriptor_field); uint16_t count = win16_read_u16(win16_dgroup_pointer(descriptor_offset)); while (count != 0) { uint8_t byte = win16_read_u8( win16_make_far_pointer(source_selector, source_offset)); win16_write_u8( win16_make_far_pointer( destination_selector, destination_offset), byte); source_offset++; destination_offset++; count--; } win16_write_u16(descriptor_field, 0, descriptor_offset); } /* 1020:00f0 — prepend AX as unsigned digits in base CX before BX. */ char *borland_prepend_unsigned(char *end, uint16_t value, uint16_t base) { do { uint16_t quotient = value / base; uint8_t digit = (uint8_t)(value % base); digit = (uint8_t)(digit + (digit < 10 ? '0' : 'A' - 10)); *--end = (char)digit; value = quotient; } while (value != 0); return end; } /* * 1020:00d2 — execute the mutable Borland ExitProc chain. * The binary clears ExitProc and IOResult before each far call and returns each * callback to 00d2, so a callback may install the next procedure in the chain. */ void borland_run_exit_procedures(void) { while (g_borland_exit_proc != 0) { Win16FarPtr procedure = g_borland_exit_proc; g_borland_exit_proc = 0; atomic_store_explicit( &g_borland_io_result, 0, memory_order_seq_cst); win16_call_exit_proc(procedure); } } /* * 1020:0061 — register-entry Borland Halt. * The caller supplies the status in AX (only AL is eventually returned to DOS). */ static _Noreturn void borland_finish_runtime_exit( uint16_t status, uint16_t error_offset, uint16_t error_segment) { g_borland_exit_code_word = status; g_borland_error_offset = error_offset; g_borland_error_segment = error_segment; if (g_borland_windows_mode != 0) { borland_run_exit_procedures(); } if (g_borland_error_offset != 0 || g_borland_error_segment != 0) { (void)borland_prepend_unsigned( &g_borland_runtime_error_text[ RUNTIME_ERROR_DECIMAL_END - DGROUP_RUNTIME_ERROR_TEXT], (uint8_t)g_borland_exit_code_word, 10); (void)borland_prepend_unsigned( &g_borland_runtime_error_text[ RUNTIME_ERROR_SEGMENT_END - DGROUP_RUNTIME_ERROR_TEXT], g_borland_error_segment, 16); (void)borland_prepend_unsigned( &g_borland_runtime_error_text[ RUNTIME_ERROR_OFFSET_END - DGROUP_RUNTIME_ERROR_TEXT], g_borland_error_offset, 16); (void)MessageBox16( 0, win16_dgroup_pointer(DGROUP_RUNTIME_ERROR_TEXT), 0, RUNTIME_ERROR_MESSAGEBOX_FLAGS); } win16_dos_terminate((uint8_t)g_borland_exit_code_word); } _Noreturn void borland_runtime_exit(uint16_t status) { borland_finish_runtime_exit(status, 0, 0); } /* * 1020:005d — RuntimeError entry shim. * It consumes the caller's far return address. Except for selector ffff, the * word at selector:0000 is the NE logical segment tag recorded in the message. */ _Noreturn void borland_runtime_error(uint16_t code) { Win16FarPtr return_address = win16_current_return_address(); uint16_t selector = win16_far_selector(return_address); uint16_t segment = selector; if (return_address != 0 && selector != 0xffff) { segment = win16_read_u16(win16_make_far_pointer(selector, 0)); } borland_finish_runtime_exit( code, win16_far_offset(return_address), segment); } p`x }#ifndef TDKPIN_BORLAND_RUNTIME_H #define TDKPIN_BORLAND_RUNTIME_H #include "tdkpin_segmented.h" #include Win16FarPtr borland_get_mem(uint16_t bytes); /* 1020:012d */ Win16FarPtr borland_global_allocate(uint16_t bytes); /* 1020:0222 */ void borland_free_mem(Win16FarPtr block, uint16_t bytes); /* 1020:0147 */ void borland_fill_bytes( Win16FarPtr destination, uint16_t count, uint8_t value); /* 1020:16c9 */ void borland_move_bytes( Win16FarPtr destination, Win16FarPtr source, uint16_t count); /* 1020:16a5 */ void borland_copy_typed_record( uint16_t descriptor_field_offset, Win16FarPtr destination, Win16FarPtr source); /* 1020:046c */ _Noreturn void borland_runtime_exit(uint16_t status); /* 1020:0061 */ _Noreturn void borland_runtime_error(uint16_t code); /* 1020:005d */ void borland_run_exit_procedures(void); /* 1020:00d2 */ extern Win16FarPtr g_borland_exit_proc; /* 1028:0712/0714 */ extern uint16_t g_borland_error_offset; /* 1028:0718 */ extern uint16_t g_borland_error_segment; /* 1028:071a */ extern uint16_t g_borland_heap_reserve_bytes; /* 1028:06f4 */ extern Win16FarPtr g_borland_heap_reserve; /* 1028:06f6/06f8 */ extern uint8_t g_borland_heap_reserve_disabled; /* 1028:06fa */ extern Win16FarPtr g_borland_heap_error_handler; /* 1028:070e/0710 */ extern uint16_t g_borland_global_alloc_flags; /* 1028:070c */ bool borland_heap_reserve_is_unallocated(void); /* 1008:2de0 */ void borland_ensure_heap_reserve(void); /* 1008:2dff */ uint16_t borland_release_heap_reserve_on_oom(uint16_t requested_bytes); /* 1008:2e22 */ void borland_initialize_heap_reserve(void); /* 1008:2e76 */ extern _Atomic uint16_t g_borland_io_result; /* 1028:071e */ _Static_assert(sizeof(g_borland_io_result) == 2, "Borland IOResult width drift"); uint16_t borland_take_io_result(void); /* 1020:0388 */ void borland_require_io_success(void); /* 1020:038f */ typedef struct { int32_t minimum; int32_t maximum; } BorlandInt32Range; void borland_check_int32_range( int32_t value, const BorlandInt32Range *range); /* 1020:039d */ _Noreturn void borland_runtime_error_215(void); /* 1020:03c5 */ typedef struct { Win16FarPtr block; bool failed; } BorlandAllocationAttempt; BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes); /* 1020:01ca */ bool borland_try_free_mem(Win16FarPtr block, uint16_t bytes); /* 1020:02d7 */ #endif ߻fxk/* Borland Pascal Win16 loader-register capture and runtime startup. */ #include "tdkpin_borland_startup.h" enum { WIN_FLAG_CPU_086 = 0x40, WIN_FLAG_CPU_186 = 0x80, WIN_FLAG_CPU_286 = 0x02, BORLAND_HUGE_POINTER_INCREMENT = 8, }; /* * 1020:0002 -- first Borland runtime call made by ne_program_entry. * * The NE loader supplies the process state in registers, so the readable C * interface packages those registers rather than pretending they were stack * arguments. The original accepts only nonzero AX and a successful InitApp; * either failure executes INT 21h/AH=4ch with AL=ff and never returns. */ void borland_initialize_win16_runtime( const BorlandWin16StartupRegisters *registers) { if (registers->loader_ax == 0) { win16_dos_terminate(0xff); } g_borland_windows_mode = win16_far_selector(registers->command_line); g_win16_previous_instance = registers->previous_instance; g_win16_instance = registers->instance; g_win16_show_command = registers->show_command; g_borland_command_line = registers->command_line; WaitEvent16(0); if (InitApp16(g_win16_instance) == 0) { win16_dos_terminate(0xff); } uint8_t flags = (uint8_t)GetWinFlags16(); uint16_t cpu_level = 0; if ((flags & (WIN_FLAG_CPU_086 | WIN_FLAG_CPU_186)) == 0) { cpu_level++; if ((flags & WIN_FLAG_CPU_286) == 0) { cpu_level++; } } g_borland_cpu_level = (uint8_t)cpu_level; /* KERNEL ordinal 114 is the imported equate __AHINCR, not a call. */ g_borland_huge_pointer_increment = BORLAND_HUGE_POINTER_INCREMENT; } ~K@x#ifndef TDKPIN_BORLAND_STARTUP_H #define TDKPIN_BORLAND_STARTUP_H #include "tdkpin_segmented.h" /* Register contract at the Win16 NE entry before 1020:0002 is called. */ typedef struct { uint16_t loader_ax; Win16FarPtr command_line; /* ES:BX */ uint16_t show_command; /* DX */ HINSTANCE16 previous_instance; /* SI */ HINSTANCE16 instance; /* DI */ } BorlandWin16StartupRegisters; BorlandWin16StartupRegisters InitTask16(void); void borland_initialize_win16_runtime( const BorlandWin16StartupRegisters *registers); /* 1020:0002 */ extern HINSTANCE16 g_win16_previous_instance; /* 1028:06fc */ extern HINSTANCE16 g_win16_instance; /* 1028:06fe */ extern uint16_t g_win16_show_command; /* 1028:0700 */ extern Win16FarPtr g_borland_command_line; /* 1028:0702/0704 */ extern uint16_t g_borland_windows_mode; /* 1028:071c */ extern uint16_t g_borland_huge_pointer_increment; /* 1028:0724 */ extern uint8_t g_borland_cpu_level; /* 1028:0726 */ #endif o1:dzx /* DAT-900 claw animation rendering. */ #include "tdkpin_render.h" enum { DGROUP_BACKGROUND_BITMAP = 0x085b, DGROUP_CLAW_BITMAP = 0x0863, CLAW_DESTINATION_X = 238, CLAW_DESTINATION_Y = 47, CLAW_WIDTH = 100, CLAW_HEIGHT = 74, WIN16_SRCCOPY = 0x00cc0020, }; /* * 1008:0e08 — frame zero restores the background. Frames 1..18 select one of * two nine-frame horizontal sequences; the byte flag selects the lower/upper * pair of 74-pixel atlas rows. Both background and destination receive the * exact same SRCCOPY from DAT 900. */ void tdkpin_draw_claw_frame( uint8_t alternate, uint16_t frame, HDC16 destination) { if (frame == 0) { tdkpin_restore_background_region_b( CLAW_HEIGHT, CLAW_WIDTH, CLAW_DESTINATION_Y, CLAW_DESTINATION_X, destination); tdkpin_present_background_region( CLAW_HEIGHT, CLAW_WIDTH, CLAW_DESTINATION_Y, CLAW_DESTINATION_X, destination); return; } HDC16 background_dc = CreateCompatibleDC16(destination); HDC16 claw_dc = CreateCompatibleDC16(destination); HGDIOBJ16 old_background = SelectObject16( background_dc, win16_read_u16(win16_dgroup_pointer(DGROUP_BACKGROUND_BITMAP))); HGDIOBJ16 old_claw = SelectObject16( claw_dc, win16_read_u16(win16_dgroup_pointer(DGROUP_CLAW_BITMAP))); uint16_t source_y = alternate == 0 ? CLAW_HEIGHT * 2 : 0; if (frame > 9) { source_y = (uint16_t)(source_y + CLAW_HEIGHT); frame = (uint16_t)(frame - 9); } uint16_t source_x = (uint16_t)((frame - 1) * CLAW_WIDTH); (void)BitBlt16( background_dc, CLAW_DESTINATION_X, CLAW_DESTINATION_Y, CLAW_WIDTH, CLAW_HEIGHT, claw_dc, (INT16)source_x, (INT16)source_y, WIN16_SRCCOPY); (void)BitBlt16( destination, CLAW_DESTINATION_X, CLAW_DESTINATION_Y, CLAW_WIDTH, CLAW_HEIGHT, claw_dc, (INT16)source_x, (INT16)source_y, WIN16_SRCCOPY); (void)SelectObject16(background_dc, old_background); (void)SelectObject16(claw_dc, old_claw); (void)DeleteDC16(claw_dc); (void)DeleteDC16(background_dc); } Ίxk(/* Bitmask-driven collision event dispatcher from TDKPIN Code1. */ #include "tdkpin_collision_events.h" #include "tdkpin_arithmetic.h" #include "tdkpin_random.h" #include "tdkpin_sound.h" static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static Win16FarPtr record(uint16_t id) { return win16_dgroup_pointer((uint16_t)(0x095b + id * 0x53u)); } static uint8_t record_active(uint16_t id) { return win16_read_u8(win16_far_add_offset(record(id), 0x34)); } static void set_record_active(uint16_t id, uint8_t active) { win16_write_u8(win16_far_add_offset(record(id), 0x34), active); } static uint16_t record_link(uint16_t id) { return win16_read_u16(win16_far_add_offset(record(id), 0x43)); } static uint16_t player_row_offset(uint16_t item) { return (uint16_t)( 0x0467 + (uint16_t)g_current_player * 0x14u + item); } static void activate_record_groups( uint16_t caller_bp, uint16_t first, uint16_t groups) { for (uint16_t group = 0; group < groups; group++) { uint16_t base = (uint16_t)(first + group * 3u); set_record_active(base, 1); set_record_active((uint16_t)(base + 1u), 1); set_record_active((uint16_t)(base + 2u), 1); tdkpin_refresh_collision_record(caller_bp, base); } } static bool group_heads_all_inactive(uint16_t first, uint16_t groups) { for (uint16_t group = 0; group < groups; group++) { if (record_active((uint16_t)(first + group * 3u)) != 0) { return false; } } return true; } static void restore_record_bounds_on_dc( uint16_t id, HDC16 dc) { Win16FarPtr bounds = win16_far_add_offset(record(id), 0x4b); INT16 left = (INT16)win16_read_u16(bounds); INT16 top = (INT16)win16_read_u16(win16_far_add_offset(bounds, 2)); INT16 right = (INT16)win16_read_u16(win16_far_add_offset(bounds, 4)); INT16 bottom = (INT16)win16_read_u16(win16_far_add_offset(bounds, 6)); INT16 width = (INT16)(uint16_t)( (uint16_t)right - (uint16_t)left + 1u); INT16 height = (INT16)(uint16_t)( (uint16_t)bottom - (uint16_t)top + 1u); tdkpin_restore_background_region_a(height, width, top, left, dc); tdkpin_present_background_region(height, width, top, left, dc); } static void publish_three_record_completion( uint16_t caller_bp, Win16FarPtr receiver) { win16_write_u8(win16_far_add_offset(receiver, 0x0bdc), 1); static const uint16_t ids[3] = {153, 6, 154}; for (uint16_t index = 0; index < 3; index++) { set_record_active(ids[index], 1); } HWND16 window = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(window); for (uint16_t index = 0; index < 3; index++) { restore_record_bounds_on_dc(ids[index], dc); } (void)ReleaseDC16(window, dc); (void)caller_bp; } static void handle_sprite_award( uint16_t caller_bp, Win16FarPtr receiver) { tdkpin_play_sound_if_not_tilted(12); set_record_active(149, 1); win16_write_u8(win16_far_add_offset(receiver, (uint16_t)( 0x00f6 + (uint16_t)g_current_player * 0x00afu)), 1); tdkpin_restore_record_or_item_a(caller_bp, 149); Win16FarPtr sprite = win16_dgroup_pointer((uint16_t)( 0x09a4 + (uint16_t)g_current_player * 2u)); if (win16_read_u16(win16_dgroup_pointer(0x399a)) != 0) { win16_write_u16(sprite, 0, 7); } else { uint16_t previous = win16_read_u16(sprite); uint16_t selected; do { selected = (uint16_t)(borland_random_below(6) + 1u); } while (selected == previous); win16_write_u16(sprite, 0, selected); } HWND16 window = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(window); tdkpin_composite_player_sprite(win16_read_u16(sprite), dc); tdkpin_present_background_region(123, 42, 79, 55, dc); (void)ReleaseDC16(window, dc); } static void handle_ready_upgrade(uint16_t caller_bp) { tdkpin_play_sound_if_not_tilted(12); if (!group_heads_all_inactive(90, 5)) { return; } tdkpin_play_sound_if_not_tilted(17); Win16FarPtr ready = win16_dgroup_pointer((uint16_t)( 0x0816 + (uint16_t)g_current_player)); uint8_t value = win16_read_u8(ready); if (value == 6) { tdkpin_add_score_from_caller_frame(caller_bp, 50000); } else { value = value == 1 ? 2 : (uint8_t)(value + 1u); win16_write_u8(ready, value); tdkpin_restore_record_or_item_a( caller_bp, (uint16_t)(value + 999u)); } activate_record_groups(caller_bp, 90, 5); } static void handle_item_bank( uint16_t caller_bp, Win16FarPtr receiver) { tdkpin_play_sound_if_not_tilted(12); if (!group_heads_all_inactive(109, 4)) { return; } uint16_t slot = 1; for (uint16_t item = 1; item <= 9; item++) { if (win16_read_u8(win16_far_add_offset( receiver, player_row_offset((uint16_t)(item + 5u)))) != 0) { slot++; } } if (slot < 9) { tdkpin_play_sound_if_not_tilted(17); win16_write_u8( win16_far_add_offset( receiver, player_row_offset((uint16_t)(slot + 5u))), 1); tdkpin_restore_record_or_item_a( caller_bp, (uint16_t)(slot + 1005u)); tdkpin_add_score_from_caller_frame( caller_bp, (int32_t)slot * 10000); } else if (slot == 9) { tdkpin_play_sound_if_not_tilted(17); win16_write_u8( win16_far_add_offset(receiver, player_row_offset(14)), 1); tdkpin_restore_record_or_item_a(caller_bp, 1014); tdkpin_add_score_from_caller_frame(caller_bp, 24464); publish_three_record_completion(caller_bp, receiver); } else { tdkpin_play_sound_if_not_tilted(7); if (win16_read_u8(win16_far_add_offset(receiver, 0x0bdc)) == 0) { win16_write_u8(win16_far_add_offset(receiver, 0x0bdc), 1); } else { Win16FarPtr secondary = win16_dgroup_pointer((uint16_t)( 0x098e + (uint16_t)g_current_player * 4u)); win16_write_u32( secondary, 0, win16_read_u32(secondary) + 100000u); uint8_t multiplier = win16_read_u8(win16_dgroup_pointer((uint16_t)( 0x09a1 + (uint16_t)g_current_player))); int32_t shown = borland_multiply_i32( (int32_t)win16_read_u32(secondary), multiplier); tdkpin_draw_score_from_caller_frame( caller_bp, (uint16_t)shown, (uint16_t)((uint32_t)shown >> 16)); } } activate_record_groups(caller_bp, 109, 4); } static void handle_three_record_switch( uint16_t caller_bp, Win16FarPtr receiver, uint16_t record_id) { if (record_id == 150) { win16_write_u8(win16_far_add_offset(receiver, 0x00f7), 10); tdkpin_restore_record_or_item_a(caller_bp, 150); set_record_active(153, 1); tdkpin_restore_record_or_item_a(caller_bp, 153); } else if (record_id == 151) { win16_write_u8(win16_far_add_offset(receiver, 0x00f8), 10); tdkpin_restore_record_or_item_a(caller_bp, 151); set_record_active(6, 1); tdkpin_restore_record_or_item_a(caller_bp, 6); } else if (record_id == 152) { win16_write_u8(win16_far_add_offset(receiver, 0x00f9), 10); tdkpin_restore_record_or_item_a(caller_bp, 152); set_record_active(154, 1); tdkpin_restore_record_or_item_a(caller_bp, 154); } } static void handle_timed_record( uint16_t caller_bp, Win16FarPtr receiver, uint16_t record_id) { if (record_id >= 51 && record_id <= 53) { tdkpin_play_sound_if_not_tilted(6); win16_write_u8( win16_far_add_offset(receiver, (uint16_t)(record_id + 0x61u)), 5); tdkpin_restore_record_or_item_a(caller_bp, record_id); uint8_t ready = win16_read_u8(win16_dgroup_pointer((uint16_t)( 0x0816 + (uint16_t)g_current_player))); tdkpin_add_score_from_caller_frame( caller_bp, (int32_t)((int16_t)ready - 1) * 1000); } else if (record_id >= 140 && record_id <= 147) { win16_write_u8( win16_far_add_offset(receiver, (uint16_t)(record_id + 0x61u)), 20); tdkpin_restore_record_or_item_a(caller_bp, record_id); } } /* 1000:b476 -- dispatch all collision event bits in their binary order. */ void tdkpin_handle_collision_events( uint16_t caller_bp, uint16_t event_flags, uint16_t record_id) { if (win16_read_u8(win16_dgroup_pointer(0x07c6)) != 0) { return; } Win16FarPtr receiver = caller_receiver(caller_bp); if ((event_flags & 0x0001u) != 0 && record_id >= 129 && record_id <= 133) { uint16_t item = (uint16_t)(record_id - 0x72u); win16_write_u8(win16_far_add_offset( receiver, player_row_offset(item)), 1); tdkpin_restore_record_or_item_a( caller_bp, (uint16_t)(item + 1000u)); } if ((event_flags & 0x0002u) != 0) { uint16_t linked = record_link(record_id); set_record_active(linked, 0); tdkpin_refresh_collision_record(caller_bp, linked); if ((event_flags & 0x2000u) != 0) { set_record_active((uint16_t)(linked + 1u), 0); set_record_active((uint16_t)(linked + 2u), 0); } } if ((event_flags & 0x0400u) != 0 && win16_read_u8(win16_dgroup_pointer(0x07c7)) == 0 && win16_read_u8(win16_dgroup_pointer(0x07c8)) == 0) { win16_write_u32(win16_dgroup_pointer(0x0855), 0, 0); win16_write_u8(win16_dgroup_pointer(0x07c7), 1); } if ((event_flags & 0x0004u) != 0) { handle_sprite_award(caller_bp, receiver); } if ((event_flags & 0x0008u) != 0) { handle_ready_upgrade(caller_bp); } if ((event_flags & 0x0010u) != 0) { handle_item_bank(caller_bp, receiver); } if ((event_flags & 0x1000u) != 0) { handle_three_record_switch(caller_bp, receiver, record_id); } if ((event_flags & 0x0040u) != 0) { handle_timed_record(caller_bp, receiver, record_id); } } t^x#ifndef TDKPIN_COLLISION_EVENTS_H #define TDKPIN_COLLISION_EVENTS_H #include "tdkpin_player_state.h" void tdkpin_handle_collision_events( uint16_t caller_bp, uint16_t event_flags, uint16_t record_id); /* 1000:b476 */ #endif L1xh /* Collision/rule-record construction from the 1615-byte Code2 initializer. */ #include "tdkpin_collision_records.h" enum { DGROUP_COLLISION_RECORDS = 0x095b, COLLISION_LAST_INDEX = 175, COORDINATE_SCALE = 1000, BOUNDS_PADDING_MILLI = 5000, }; typedef struct { int32_t minimum; int32_t maximum; } Bounds; static int32_t add_wrap(int32_t left, int32_t right) { return (int32_t)((uint32_t)left + (uint32_t)right); } static int32_t subtract_wrap(int32_t left, int32_t right) { return (int32_t)((uint32_t)left - (uint32_t)right); } static int32_t scale(int32_t value) { return borland_multiply_i32(value, COORDINATE_SCALE); } /* Exact signed-high/unsigned-low comparisons at 0208..03ee. */ static Bounds choose_bounds( int32_t first, int32_t second, int32_t radius) { if (second > 0 && second > first) { return (Bounds){first, second}; } if (second > 0 && second < first) { return (Bounds){second, first}; } return (Bounds){ subtract_wrap(first, radius), add_wrap(first, radius), }; } static void write_real48( Win16FarPtr destination, const BorlandReal48 *value) { for (uint16_t index = 0; index < 6; index++) { win16_write_u8( win16_far_add_offset(destination, index), value->bytes[index]); } } static void write_record( Win16FarPtr destination, const TdkpinCollisionRecord *record) { win16_write_u8(destination, record->type); win16_write_u8(win16_far_add_offset(destination, 1), record->subtype); win16_write_u32(destination, 0x02, (uint32_t)record->bounds_min_x_milli); win16_write_u32(destination, 0x06, (uint32_t)record->bounds_min_y_milli); win16_write_u32(destination, 0x0a, (uint32_t)record->bounds_max_x_milli); win16_write_u32(destination, 0x0e, (uint32_t)record->bounds_max_y_milli); win16_write_u32(destination, 0x12, (uint32_t)record->point1_x_milli); win16_write_u32(destination, 0x16, (uint32_t)record->point1_y_milli); win16_write_u32(destination, 0x1a, (uint32_t)record->point2_x_milli); win16_write_u32(destination, 0x1e, (uint32_t)record->point2_y_milli); write_real48(win16_far_add_offset(destination, 0x22), &record->radius_milli); write_real48( win16_far_add_offset(destination, 0x28), &record->response_normal); write_real48( win16_far_add_offset(destination, 0x2e), &record->response_tangent); win16_write_u8(win16_far_add_offset(destination, 0x34), record->active); write_real48( win16_far_add_offset(destination, 0x35), &record->response_auxiliary); write_real48( win16_far_add_offset(destination, 0x3b), &record->response_kick); win16_write_u16(destination, 0x41, record->flags); win16_write_u16(destination, 0x43, record->contact_state); win16_write_u16(destination, 0x45, record->score_low); win16_write_u16(destination, 0x47, record->score_high); win16_write_u16(destination, 0x49, record->layer_mask); win16_write_u16(destination, 0x4b, record->render_left); win16_write_u16(destination, 0x4d, record->render_top); win16_write_u16(destination, 0x4f, record->render_right); win16_write_u16(destination, 0x51, record->render_bottom); } /* * 1008:0138 -- build one of slots 0..175 in the packed 83-byte table. * * Radius zero selects segment geometry; nonzero radius selects a circle. In * relative mode, point1 is offset from the preceding path endpoint and point2 * is a delta from point1. Absolute mode retains X and subtracts the historical * 20-unit board Y origin from both points. All arithmetic wraps at 32 bits. */ void tdkpin_initialize_collision_record( const TdkpinCollisionInitArgs *arguments) { if (arguments->index > COLLISION_LAST_INDEX) { return; } int32_t point1_x = arguments->point1_x; int32_t point1_y = arguments->point1_y; int32_t point2_x; int32_t point2_y; if ((uint8_t)arguments->coordinate_mode == 1) { point1_x = add_wrap(g_collision_path_x, point1_x); point1_y = add_wrap(g_collision_path_y, point1_y); point2_x = add_wrap(point1_x, arguments->point2_x); point2_y = add_wrap(point1_y, arguments->point2_y); } else { point1_y = subtract_wrap(point1_y, 20); point2_x = arguments->point2_x; point2_y = subtract_wrap(arguments->point2_y, 20); } Bounds x_bounds = choose_bounds(point1_x, point2_x, arguments->radius); Bounds y_bounds = choose_bounds(point1_y, point2_y, arguments->radius); TdkpinCollisionRecord record = {0}; record.type = (uint8_t)arguments->type; record.subtype = (uint8_t)arguments->subtype; record.active = (uint8_t)arguments->active; record.bounds_min_x_milli = scale(x_bounds.minimum); record.bounds_min_y_milli = scale(y_bounds.minimum); record.bounds_max_x_milli = scale(x_bounds.maximum); record.bounds_max_y_milli = scale(y_bounds.maximum); if (arguments->radius != 0) { record.point1_x_milli = scale(point1_x); record.point1_y_milli = scale(point1_y); record.radius_milli = borland_i32_to_real48( scale(arguments->radius)); if (record.bounds_min_x_milli < record.point1_x_milli) { record.bounds_min_x_milli = subtract_wrap( record.bounds_min_x_milli, BOUNDS_PADDING_MILLI); } else { record.bounds_min_x_milli = add_wrap( record.bounds_min_x_milli, scale(arguments->fallback_x_adjust)); } if (record.bounds_min_y_milli < record.point1_y_milli) { record.bounds_min_y_milli = subtract_wrap( record.bounds_min_y_milli, BOUNDS_PADDING_MILLI); } else { record.bounds_min_y_milli = add_wrap( record.bounds_min_y_milli, scale(arguments->fallback_y_adjust)); } if (record.point1_x_milli < record.bounds_max_x_milli) { record.bounds_max_x_milli = add_wrap( record.bounds_max_x_milli, BOUNDS_PADDING_MILLI); } else { record.bounds_max_x_milli = add_wrap( record.bounds_max_x_milli, scale(arguments->fallback_x_adjust)); } if (record.point1_y_milli < record.bounds_max_y_milli) { record.bounds_max_y_milli = add_wrap( record.bounds_max_y_milli, BOUNDS_PADDING_MILLI); } else { record.bounds_max_y_milli = add_wrap( record.bounds_max_y_milli, scale(arguments->fallback_y_adjust)); } g_collision_path_x = point1_x; g_collision_path_y = point1_y; } else { record.bounds_min_x_milli = subtract_wrap( record.bounds_min_x_milli, BOUNDS_PADDING_MILLI); record.bounds_min_y_milli = subtract_wrap( record.bounds_min_y_milli, BOUNDS_PADDING_MILLI); record.bounds_max_x_milli = add_wrap( record.bounds_max_x_milli, BOUNDS_PADDING_MILLI); record.bounds_max_y_milli = add_wrap( record.bounds_max_y_milli, BOUNDS_PADDING_MILLI); record.point1_x_milli = scale(point1_x); record.point1_y_milli = scale(point1_y); record.point2_x_milli = scale(point2_x); record.point2_y_milli = scale(point2_y); g_collision_path_x = point2_x; g_collision_path_y = point2_y; } record.response_normal = arguments->response_normal; record.response_tangent = arguments->response_tangent; record.response_auxiliary = arguments->response_auxiliary; record.response_kick = arguments->response_kick; record.flags = arguments->flags; record.contact_state = arguments->contact_state; record.score_low = arguments->score_low; record.score_high = arguments->score_high; record.layer_mask = arguments->layer_mask; record.render_left = arguments->render_left; record.render_top = arguments->render_top; record.render_right = arguments->render_right; record.render_bottom = arguments->render_bottom; uint16_t offset = (uint16_t)( DGROUP_COLLISION_RECORDS + (uint16_t)(arguments->index * sizeof(TdkpinCollisionRecord))); write_record(win16_dgroup_pointer(offset), &record); } BYrx <#ifndef TDKPIN_COLLISION_RECORDS_H #define TDKPIN_COLLISION_RECORDS_H #include "tdkpin_arithmetic.h" #include "tdkpin_real48.h" #include "tdkpin_segmented.h" #pragma pack(push, 1) typedef struct { uint8_t type; uint8_t subtype; int32_t bounds_min_x_milli; int32_t bounds_min_y_milli; int32_t bounds_max_x_milli; int32_t bounds_max_y_milli; int32_t point1_x_milli; int32_t point1_y_milli; int32_t point2_x_milli; int32_t point2_y_milli; BorlandReal48 radius_milli; BorlandReal48 response_normal; BorlandReal48 response_tangent; uint8_t active; BorlandReal48 response_auxiliary; BorlandReal48 response_kick; uint16_t flags; uint16_t contact_state; uint16_t score_low; uint16_t score_high; uint16_t layer_mask; uint16_t render_left; uint16_t render_top; uint16_t render_right; uint16_t render_bottom; } TdkpinCollisionRecord; /* Exact 40-word Pascal argument block in increasing stack-address order. */ typedef struct { uint16_t render_bottom; uint16_t render_right; uint16_t render_top; uint16_t render_left; int32_t fallback_y_adjust; int32_t fallback_x_adjust; uint16_t layer_mask; uint16_t score_low; uint16_t score_high; uint16_t contact_state; uint16_t flags; BorlandReal48 response_kick; BorlandReal48 response_auxiliary; BorlandReal48 response_tangent; BorlandReal48 response_normal; int32_t radius; int32_t point2_y; int32_t point2_x; int32_t point1_y; int32_t point1_x; uint16_t coordinate_mode; uint16_t subtype; uint16_t type; uint16_t active; uint16_t index; } TdkpinCollisionInitArgs; #pragma pack(pop) _Static_assert(sizeof(TdkpinCollisionRecord) == 0x53, "collision record layout drift"); _Static_assert(sizeof(TdkpinCollisionInitArgs) == 0x50, "collision initializer ABI drift"); _Static_assert(offsetof(TdkpinCollisionRecord, radius_milli) == 0x22, "collision radius offset drift"); _Static_assert(offsetof(TdkpinCollisionRecord, active) == 0x34, "collision active offset drift"); _Static_assert(offsetof(TdkpinCollisionRecord, flags) == 0x41, "collision flags offset drift"); void tdkpin_initialize_collision_record( const TdkpinCollisionInitArgs *arguments); /* 1008:0138 */ extern int32_t g_collision_path_x; /* 1028:0849..084c */ extern int32_t g_collision_path_y; /* 1028:084d..0850 */ #endif 0qx #include "tdkpin_command_line.h" /* * 1020:0871 — scan one DOS command-tail token. * Bytes <= space are separators. A zero starting index intentionally wraps to * ffff after the first token and counts until the zero-length terminal scan. */ BorlandCommandToken borland_scan_command_token(uint16_t index) { Win16FarPtr cursor = g_borland_command_line; while (true) { uint8_t value; do { value = win16_read_u8(cursor); cursor = win16_far_add_offset(cursor, 1); } while (value != 0 && value <= 0x20); cursor = win16_far_add_offset(cursor, 0xffff); Win16FarPtr token = cursor; do { value = win16_read_u8(cursor); cursor = win16_far_add_offset(cursor, 1); } while (value > 0x20); cursor = win16_far_add_offset(cursor, 0xffff); uint16_t length = (uint16_t)(win16_far_offset(cursor) - win16_far_offset(token)); if (length == 0) { return (BorlandCommandToken){token, 0, index}; } index--; if (index == 0) { return (BorlandCommandToken){token, length, index}; } } } /* 1020:0866 — CX=0 scan followed by XCHG/NEG returns the token count. */ uint16_t borland_parameter_count(void) { BorlandCommandToken terminal = borland_scan_command_token(0); return (uint16_t)(0 - terminal.remaining_index); } /* * 1020:082e — ParamStr with a hidden far ShortString result. * For command tokens, AL becomes the length byte while REP MOVSB retains the * complete uint16 token length; this deliberately preserves >255 overflow. */ void borland_parameter_string(uint16_t index, Win16FarPtr destination) { if (index == 0) { uint16_t length = GetModuleFileNameFar16( g_win16_instance, win16_far_add_offset(destination, 1), 0xff); win16_write_u8(destination, (uint8_t)length); return; } BorlandCommandToken token = borland_scan_command_token(index); win16_write_u8(destination, (uint8_t)token.length); for (uint16_t offset = 0; offset < token.length; offset++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(offset + 1)), win16_read_u8(win16_far_add_offset(token.token, offset))); } } 7:\%xR#ifndef TDKPIN_COMMAND_LINE_H #define TDKPIN_COMMAND_LINE_H #include "tdkpin_segmented.h" extern Win16FarPtr g_borland_command_line; /* 1028:0702/0704 */ extern HINSTANCE16 g_win16_instance; /* 1028:06fe */ typedef struct { Win16FarPtr token; uint16_t length; uint16_t remaining_index; } BorlandCommandToken; BorlandCommandToken borland_scan_command_token(uint16_t index); /* 1020:0871 */ uint16_t borland_parameter_count(void); /* 1020:0866 */ void borland_parameter_string( uint16_t index, Win16FarPtr destination); /* 1020:082e */ #endif Eixa/* Address-linked initialized DGROUP objects from TDKPIN.EXE. */ #include "tdkpin_dgroup.h" #include "tdkpin_sound.h" enum { WIN16_VK_PRIOR = 0x21, WIN16_VK_NEXT = 0x22, WIN16_VK_END = 0x23, WIN16_VK_HOME = 0x24, WIN16_VK_LEFT = 0x25, WIN16_VK_UP = 0x26, WIN16_VK_RIGHT = 0x27, WIN16_VK_DOWN = 0x28, }; /* * DGROUP 1028:0590..05bf — twelve exact four-byte key bindings consumed by * 1008:2147. Entry order is significant because the binary stops at the first * virtual-key/control-state match. */ const TpWinCrtKeyBinding g_tpwincrt_key_bindings[12] = { {WIN16_VK_LEFT, 0, 0, TPWINCRT_SB_LINEUP}, {WIN16_VK_RIGHT, 0, 0, TPWINCRT_SB_LINEDOWN}, {WIN16_VK_LEFT, 1, 0, TPWINCRT_SB_PAGEUP}, {WIN16_VK_RIGHT, 1, 0, TPWINCRT_SB_PAGEDOWN}, {WIN16_VK_HOME, 0, 0, TPWINCRT_SB_TOP}, {WIN16_VK_END, 0, 0, TPWINCRT_SB_BOTTOM}, {WIN16_VK_UP, 0, 1, TPWINCRT_SB_LINEUP}, {WIN16_VK_DOWN, 0, 1, TPWINCRT_SB_LINEDOWN}, {WIN16_VK_PRIOR, 0, 1, TPWINCRT_SB_PAGEUP}, {WIN16_VK_NEXT, 0, 1, TPWINCRT_SB_PAGEDOWN}, {WIN16_VK_HOME, 1, 1, TPWINCRT_SB_TOP}, {WIN16_VK_END, 1, 1, TPWINCRT_SB_BOTTOM}, }; /* * DGROUP 1028:03ea..0441 — payload lengths copied from WAV resources * 2001..2022. Zero entries are the six resource numbers absent from the NE * resource table; nonzero values equal the RIFF length, excluding NE padding. */ const uint32_t g_sound_resource_byte_counts[22] = { 6302, 4594, 0, 7554, 0, 2906, 30452, 39134, 0, 0, 6710, 320, 46348, 0, 7946, 3518, 34842, 0, 5148, 30000, 3194, 22122, }; _Static_assert( sizeof(g_sound_resource_byte_counts) == 88, "TDKPIN sound-resource length table drift"); (浴x4 #ifndef TDKPIN_DGROUP_H #define TDKPIN_DGROUP_H #include "tdkpin_win16.h" /* DGROUP 1028:0586; assigned from HWND at TPWinCrt window-proc entry. */ extern HWND16 g_tpwincrt_window; extern uint16_t g_tpwincrt_columns; /* 1028:0540 */ extern uint16_t g_tpwincrt_rows; /* 1028:0542 */ extern uint16_t g_tpwincrt_cursor_column; /* 1028:0544 */ extern uint16_t g_tpwincrt_cursor_row; /* 1028:0546 */ extern uint16_t g_tpwincrt_view_column; /* 1028:0548 */ extern uint16_t g_tpwincrt_view_row; /* 1028:054a */ extern uint8_t g_tpwincrt_break_check_enabled; /* 1028:0560 */ extern uint8_t g_tpwincrt_auto_scroll; /* 1028:055e */ extern uint8_t g_tpwincrt_ctrl_z_is_eof; /* 1028:055f */ extern uint16_t g_tpwincrt_input_count; /* 1028:058a */ extern uint16_t g_tpwincrt_ring_row_origin; /* 1028:0588 */ extern uint8_t g_tpwincrt_window_created; /* 1028:058c */ extern uint8_t g_tpwincrt_has_focus; /* 1028:058d */ extern uint8_t g_tpwincrt_caret_enabled; /* 1028:058e */ extern uint8_t g_tpwincrt_paint_message_active; /* 1028:058f */ extern Win16FarPtr g_tpwincrt_screen_buffer; /* 1028:4ac2/4ac4 */ extern uint16_t g_tpwincrt_character_width; /* 1028:4ace */ extern uint16_t g_tpwincrt_character_height; /* 1028:4ad0 */ extern uint16_t g_tpwincrt_caret_y_offset; /* 1028:4ad2 */ extern HDC16 g_tpwincrt_paint_dc; /* 1028:4ad4 */ extern PAINTSTRUCT16 g_tpwincrt_paint; /* 1028:4ad6..4af5 */ extern HGDIOBJ16 g_tpwincrt_previous_font; /* 1028:4af6 */ extern uint16_t g_tpwincrt_visible_columns; /* 1028:4ac6 */ extern uint16_t g_tpwincrt_visible_rows; /* 1028:4ac8 */ extern uint16_t g_tpwincrt_max_view_column; /* 1028:4aca */ extern uint16_t g_tpwincrt_max_view_row; /* 1028:4acc */ extern uint8_t g_tpwincrt_input_buffer[64]; /* 1028:4af8..4b37 */ enum TpWinCrtScrollCommand { TPWINCRT_SB_LINEUP = 0, TPWINCRT_SB_LINEDOWN = 1, TPWINCRT_SB_PAGEUP = 2, TPWINCRT_SB_PAGEDOWN = 3, TPWINCRT_SB_THUMBPOSITION = 4, TPWINCRT_SB_TOP = 6, TPWINCRT_SB_BOTTOM = 7, }; #pragma pack(push, 1) typedef struct { uint8_t virtual_key; uint8_t control_required; uint8_t vertical; uint8_t scroll_command; } TpWinCrtKeyBinding; #pragma pack(pop) _Static_assert(sizeof(TpWinCrtKeyBinding) == 4, "TPWinCrt key binding layout drift"); extern const TpWinCrtKeyBinding g_tpwincrt_key_bindings[12]; /* 1028:0590..05bf */ #endif @Jx$ /* ObjectWindows modal-dialog methods from Code2. */ #include "tdkpin_dialog.h" enum { OBJECT_WINDOW_HANDLE_OFFSET = 4, DIALOG_MODAL_FLAG_OFFSET = 0x25, DIALOG_CLOSE_SLOT = 0x50, DIALOG_CAN_CLOSE_SLOT = 0x3c, DIALOG_TRANSFER_SLOT = 0x44, DIALOG_MARK_CHILD_CALLBACK_OFFSET = 0x2bb1, }; static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } /* * 1008:2996 -- base ObjectWindows dialog constructor. The hidden VMT value * is explicit in C. A selector-zero template is an integer resource and is * retained verbatim; a real far C string is duplicated and owned by dialog. */ Win16FarPtr object_windows_dialog_construct( Win16FarPtr dialog, uint16_t vmt, Win16FarPtr template_name, Win16FarPtr parent) { BorlandObjectCallFrame frame = {dialog, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = object_windows_object_construct(frame.object, 0, parent); object_windows_clear_flag_4(frame.object); Win16FarPtr stored_template = win16_far_selector(template_name) == 0 ? template_name : borland_far_strdup(template_name); write_far(frame.object, 0x1d, stored_template); write_far(frame.object, 0x21, 0); win16_write_u8(win16_far_add_offset(frame.object, 0x25), 0); return frame.object; } /* * 1008:1607 -- derived text-entry dialog. Template 7f02 is normal and 7f05 * is selected by the process flag at 066a. Four caller fields are then stored * unaligned at +26, +2a, +2e, and +32. */ Win16FarPtr object_windows_text_dialog_construct( Win16FarPtr dialog, uint16_t vmt, INT16 control_id, Win16FarPtr text_buffer, Win16FarPtr label, Win16FarPtr caption, Win16FarPtr parent) { BorlandObjectCallFrame frame = {dialog, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } uint16_t resource = g_dialog_alternate_template != 0 ? 0x7f05 : 0x7f02; frame.object = object_windows_dialog_construct( frame.object, 0, win16_make_far_pointer(0, resource), parent); write_far(frame.object, 0x26, caption); write_far(frame.object, 0x2a, label); write_far(frame.object, 0x2e, text_buffer); win16_write_u16(frame.object, 0x32, (uint16_t)control_id); return frame.object; } static HWND16 dialog_parent_window(Win16FarPtr dialog) { Win16FarPtr parent = win16_read_far_pointer(dialog, 6); return parent == 0 ? 0 : win16_read_u16(win16_far_add_offset(parent, 4)); } /* * 1008:2a45 -- create a modeless dialog once. AL is the Boolean result, but * AH is intentionally retained from CreateDialogParam (or incoming AX when a * preexisting status skips creation), matching MOV AL,0 / INC AX exactly. */ uint16_t object_windows_create_modeless_dialog(Win16FarPtr dialog) { uint16_t status = win16_read_u16(win16_far_add_offset(dialog, 2)); uint16_t high_byte; if (status == 0) { object_windows_clear_flag_4(dialog); object_windows_set_flag_1(dialog); win16_write_u8(win16_far_add_offset(dialog, 0x25), 0); HWND16 created = win16_call_create_dialog_param( g_win16_create_dialog_param, g_win16_instance, win16_read_far_pointer(dialog, 0x1d), dialog_parent_window(dialog), win16_read_far_pointer(dialog, 0x12), (LPARAM16)win16_read_far_pointer(dialog, 0x21)); high_byte = created & 0xff00u; win16_write_u16(dialog, 4, created); if (created == 0) { win16_write_u16(dialog, 2, 0xffff); } } else { high_byte = win16_indeterminate_u16() & 0xff00u; } return high_byte | (win16_read_u16(win16_far_add_offset(dialog, 2)) == 0 ? 1u : 0u); } /* * 1008:2ae3 -- execute a modal dialog while temporarily publishing it as the * application's active dialog. DialogBox failure -1 becomes status ffff; * the object HWND is always cleared after an attempted modal call. */ INT16 object_windows_execute_modal_dialog(Win16FarPtr dialog) { uint16_t status = win16_read_u16(win16_far_add_offset(dialog, 2)); if (status != 0) { return (INT16)status; } object_windows_clear_flag_4(dialog); object_windows_set_flag_1(dialog); win16_write_u8(win16_far_add_offset(dialog, 0x25), 1); Win16FarPtr previous_active = win16_read_far_pointer(g_object_windows_application, 0x0e); INT16 result = win16_call_dialog_box_param( g_win16_dialog_box_param, g_win16_instance, win16_read_far_pointer(dialog, 0x1d), dialog_parent_window(dialog), win16_read_far_pointer(dialog, 0x12), (LPARAM16)win16_read_far_pointer(dialog, 0x21)); write_far(g_object_windows_application, 0x0e, previous_active); if (result == -1) { win16_write_u16(dialog, 2, 0xffff); } win16_write_u16(dialog, 4, 0); return result; } /* * 1008:2cf2 -- nonmodal windows use the ordinary close helper. An active * modal dialog first asks VMT +3c; approval invokes +44(object,1) followed by * +50(object,1). The incoming message record is intentionally ignored. */ void object_windows_dialog_validate_and_close( Win16FarPtr dialog, ObjectWindowsMessage *message) { (void)message; if (win16_read_u8(win16_far_add_offset( dialog, DIALOG_MODAL_FLAG_OFFSET)) == 0) { object_windows_close_if_allowed(dialog); return; } uint16_t vmt = win16_read_u16(dialog); Win16FarPtr vmt_pointer = win16_dgroup_pointer(vmt); Win16FarPtr can_close = win16_read_far_pointer(vmt_pointer, DIALOG_CAN_CLOSE_SLOT); if (!win16_call_object_bool_method(can_close, dialog)) { return; } win16_call_object_u16_method( win16_read_far_pointer(vmt_pointer, DIALOG_TRANSFER_SLOT), dialog, 1); win16_call_object_u16_method( win16_read_far_pointer(vmt_pointer, DIALOG_CLOSE_SLOT), dialog, 1); } /* 1008:2bb1 — ForEach callback: mark a child only after HWND publication. */ void object_windows_dialog_mark_child( uint16_t ignored, Win16FarPtr child) { object_windows_set_flag_4_if_windowed(ignored, child); } /* 1008:2bd1 — end an active modal dialog after marking all child windows. */ void object_windows_end_modal_dialog( Win16FarPtr dialog, INT16 result) { if (win16_read_u8(win16_far_add_offset( dialog, DIALOG_MODAL_FLAG_OFFSET)) == 0) { return; } object_windows_for_each_child( dialog, win16_relocated_code_pointer( 2, DIALOG_MARK_CHILD_CALLBACK_OFFSET)); HWND16 window = win16_read_u16(win16_far_add_offset( dialog, OBJECT_WINDOW_HANDLE_OFFSET)); (void)EndDialog16(window, result); } /* * 1008:2d3a — modal dialogs use VMT +0x50(object,2); nonmodal windows use the * ordinary close-if-allowed helper. The incoming event is ignored. */ void object_windows_dialog_close( Win16FarPtr dialog, ObjectWindowsMessage *message) { (void)message; if (win16_read_u8(win16_far_add_offset( dialog, DIALOG_MODAL_FLAG_OFFSET)) == 0) { object_windows_close_if_allowed(dialog); return; } uint16_t vmt = win16_read_u16(dialog); Win16FarPtr procedure = win16_read_far_pointer(win16_dgroup_pointer(vmt), DIALOG_CLOSE_SLOT); win16_call_object_u16_method(procedure, dialog, 2); } /* * 1008:2a0e — derived dialog destructor. The binary tests only the selector * word of the unaligned string pointer at +0x1d/+0x1f before disposing it. */ void object_windows_dialog_destruct(Win16FarPtr dialog, uint16_t vmt) { Win16FarPtr string = win16_read_far_pointer(dialog, 0x1d); if (win16_far_selector(string) != 0) { borland_far_strdispose(string); } object_windows_object_destruct(dialog, 0); BorlandObjectCallFrame frame = {dialog, vmt}; borland_finish_object_destructor(&frame, 0); } /* 1008:168e — fill the dialog's far text buffer and always return AL=1. */ bool object_windows_dialog_read_text(Win16FarPtr dialog) { HWND16 window = win16_read_u16(win16_far_add_offset(dialog, 4)); Win16FarPtr buffer = win16_read_far_pointer(dialog, 0x2e); INT16 control_id = (INT16)win16_read_u16( win16_far_add_offset(dialog, 0x32)); (void)GetDlgItemTextFar16(window, control_id, buffer, 0x65); return true; } /* * 1008:16be -- finish ObjectWindows preparation, publish the caption and two * control texts, then limit control +0x32 to length-1 with EM_LIMITTEXT 0415h. * Every USER return value is deliberately ignored. */ void object_windows_dialog_setup_text_fields(Win16FarPtr dialog) { object_windows_prepare_window(dialog); HWND16 window = win16_read_u16(win16_far_add_offset(dialog, 4)); (void)SetWindowTextFar16( window, win16_read_far_pointer(dialog, 0x26)); (void)SetDlgItemText16( window, 100, win16_read_far_pointer(dialog, 0x2a)); (void)SetDlgItemText16( window, 101, win16_read_far_pointer(dialog, 0x2e)); uint16_t capacity = win16_read_u16(win16_far_add_offset(dialog, 0x32)); (void)SendDlgItemMessage16( window, 101, 0x0415, (uint16_t)(capacity - 1), 0); } < fxg#ifndef TDKPIN_DIALOG_H #define TDKPIN_DIALOG_H #include "tdkpin_object_list.h" #include "tdkpin_window_messages.h" #include "tdkpin_object_lifecycle.h" #include "tdkpin_strings.h" void object_windows_dialog_mark_child( uint16_t ignored, Win16FarPtr child); /* 1008:2bb1 */ void object_windows_end_modal_dialog( Win16FarPtr dialog, INT16 result); /* 1008:2bd1 */ void object_windows_dialog_close( Win16FarPtr dialog, ObjectWindowsMessage *message); /* 1008:2d3a */ void object_windows_dialog_validate_and_close( Win16FarPtr dialog, ObjectWindowsMessage *message); /* 1008:2cf2 */ void object_windows_dialog_destruct( Win16FarPtr dialog, uint16_t vmt); /* 1008:2a0e */ bool object_windows_dialog_read_text( Win16FarPtr dialog); /* 1008:168e */ void object_windows_dialog_setup_text_fields( Win16FarPtr dialog); /* 1008:16be */ Win16FarPtr object_windows_dialog_construct( Win16FarPtr dialog, uint16_t vmt, Win16FarPtr template_name, Win16FarPtr parent); /* 1008:2996 */ Win16FarPtr object_windows_text_dialog_construct( Win16FarPtr dialog, uint16_t vmt, INT16 control_id, Win16FarPtr text_buffer, Win16FarPtr label, Win16FarPtr caption, Win16FarPtr parent); /* 1008:1607 */ uint16_t object_windows_create_modeless_dialog( Win16FarPtr dialog); /* 1008:2a45 */ INT16 object_windows_execute_modal_dialog( Win16FarPtr dialog); /* 1008:2ae3 */ extern Win16FarPtr g_win16_create_dialog_param; /* 1028:0652/0654 */ extern Win16FarPtr g_win16_dialog_box_param; /* 1028:0656/0658 */ extern uint8_t g_dialog_alternate_template; /* 1028:066a */ #endif x s/* Borland Pascal dynamic-method-table resolution and dispatch. */ #include "tdkpin_dispatch.h" enum { VMT_DYNAMIC_TABLE_OFFSET = 4, DYNAMIC_PARENT_OFFSET = 0, DYNAMIC_CACHE_ID_OFFSET = 2, DYNAMIC_CACHE_SLOT_OFFSET = 4, DYNAMIC_COUNT_OFFSET = 6, DYNAMIC_IDS_OFFSET = 8, }; /* * 1020:16e6 — resolve AX in the dynamic table referenced by DS:[DI+4]. * * Each near-DGROUP table node contains a parent pointer, a mutable one-entry * cache, a count, `count` method ids, then `count` far procedure pointers. * Search proceeds from the most-derived node through its parent chain. The * returned far pointer addresses the selected four-byte slot, not its target. */ Win16FarPtr borland_resolve_dynamic_method_slot( uint16_t vmt, uint16_t method_id) { uint16_t table = win16_read_u16( win16_dgroup_pointer((uint16_t)(vmt + VMT_DYNAMIC_TABLE_OFFSET))); while (true) { Win16FarPtr node = win16_dgroup_pointer(table); if (method_id == win16_read_u16(win16_far_add_offset( node, DYNAMIC_CACHE_ID_OFFSET))) { uint16_t cached_slot = win16_read_u16(win16_far_add_offset( node, DYNAMIC_CACHE_SLOT_OFFSET)); return win16_dgroup_pointer(cached_slot); } uint16_t count = win16_read_u16(win16_far_add_offset( node, DYNAMIC_COUNT_OFFSET)); for (uint16_t index = 0; index < count; index++) { uint16_t id = win16_read_u16(win16_far_add_offset( node, (uint16_t)(DYNAMIC_IDS_OFFSET + index * 2u))); if (id != method_id) { continue; } uint16_t slot = (uint16_t)( table + DYNAMIC_IDS_OFFSET + count * 2u + index * 4u); win16_write_u16(node, DYNAMIC_CACHE_ID_OFFSET, method_id); win16_write_u16(node, DYNAMIC_CACHE_SLOT_OFFSET, slot); return win16_dgroup_pointer(slot); } table = win16_read_u16(win16_far_add_offset( node, DYNAMIC_PARENT_OFFSET)); if (table == 0) { borland_runtime_error(210); } } } /* 1020:16dd — public lookup entry; DI receives the selected far slot. */ Win16FarPtr borland_find_dynamic_method(uint16_t vmt, uint16_t method_id) { return borland_resolve_dynamic_method_slot(vmt, method_id); } /* 1020:16e1 — resolve the slot and indirect through its far procedure. */ void borland_dispatch_dynamic_method(uint16_t vmt, uint16_t method_id) { Win16FarPtr slot = borland_resolve_dynamic_method_slot(vmt, method_id); win16_call_dynamic_method(win16_read_far_pointer(slot, 0)); } static void dispatch_two_far_arguments( Win16FarPtr receiver, Win16FarPtr argument, uint16_t method_id) { uint16_t vmt = win16_read_u16(receiver); Win16FarPtr slot = borland_resolve_dynamic_method_slot(vmt, method_id); win16_call_dynamic_method_two_far( win16_read_far_pointer(slot, 0), receiver, argument); } /* 1008:2d66 — generated two-far-argument dispatch for dynamic id 0x8002. */ void borland_dispatch_method_8002( Win16FarPtr receiver, Win16FarPtr argument) { dispatch_two_far_arguments(receiver, argument, 0x8002); } /* 1018:16eb — generated two-far-argument dispatch for dynamic id 0x0006. */ void borland_dispatch_method_0006( Win16FarPtr receiver, Win16FarPtr argument) { dispatch_two_far_arguments(receiver, argument, 0x0006); } 1$xO#ifndef TDKPIN_DISPATCH_H #define TDKPIN_DISPATCH_H #include "tdkpin_borland_runtime.h" Win16FarPtr borland_resolve_dynamic_method_slot( uint16_t vmt, uint16_t method_id); /* 1020:16e6 */ Win16FarPtr borland_find_dynamic_method( uint16_t vmt, uint16_t method_id); /* 1020:16dd */ void borland_dispatch_dynamic_method( uint16_t vmt, uint16_t method_id); /* 1020:16e1 */ void borland_dispatch_method_8002( Win16FarPtr receiver, Win16FarPtr argument); /* 1008:2d66 */ void borland_dispatch_method_0006( Win16FarPtr receiver, Win16FarPtr argument); /* 1018:16eb */ #endif %xJ/* Collision-record geometry mover at 1000:8b0d. */ #include "tdkpin_flippers.h" #include "tdkpin_arithmetic.h" #include "tdkpin_render.h" enum { COLLISION_RECORDS_BASE = 0x095b, COLLISION_RECORD_BYTES = 0x53, COLLISION_BOUNDS_MIN_X = 0x02, COLLISION_BOUNDS_MIN_Y = 0x06, COLLISION_BOUNDS_MAX_X = 0x0a, COLLISION_BOUNDS_MAX_Y = 0x0e, COLLISION_POINT1_X = 0x12, COLLISION_POINT1_Y = 0x16, COLLISION_POINT2_X = 0x1a, COLLISION_POINT2_Y = 0x1e, COLLISION_BOUNDS_PADDING = 5000, }; static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static Win16FarPtr collision_record(uint16_t id) { return win16_dgroup_pointer((uint16_t)( COLLISION_RECORDS_BASE + id * COLLISION_RECORD_BYTES)); } static int32_t read_record_i32(Win16FarPtr record, uint16_t offset) { return (int32_t)win16_read_u32(win16_far_add_offset(record, offset)); } static void write_record_i32( Win16FarPtr record, uint16_t offset, int32_t value) { win16_write_u32(record, offset, (uint32_t)value); } static int32_t add_wrap_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left + (uint32_t)right); } static int32_t subtract_wrap_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left - (uint32_t)right); } /* The binary spells several of these as Mul32 -> I32ToReal48 -> Round. * Every int32 is exact in Real48, so the observable result is the wrapped * low dword from the first operation. */ static int32_t scaled_delta(int32_t delta, int32_t scale) { return borland_multiply_i32(delta, scale); } static void add_scaled( Win16FarPtr record, uint16_t offset, int32_t delta, int32_t scale) { write_record_i32( record, offset, add_wrap_i32( read_record_i32(record, offset), scaled_delta(delta, scale))); } static void subtract_scaled( Win16FarPtr record, uint16_t offset, int32_t delta, int32_t scale) { write_record_i32( record, offset, subtract_wrap_i32( read_record_i32(record, offset), scaled_delta(delta, scale))); } static void recompute_segment_bounds(Win16FarPtr record) { int32_t point1_x = read_record_i32(record, COLLISION_POINT1_X); int32_t point1_y = read_record_i32(record, COLLISION_POINT1_Y); int32_t point2_x = read_record_i32(record, COLLISION_POINT2_X); int32_t point2_y = read_record_i32(record, COLLISION_POINT2_Y); int32_t minimum_x = point1_x < point2_x ? point1_x : point2_x; int32_t maximum_x = point1_x < point2_x ? point2_x : point1_x; int32_t minimum_y = point1_y < point2_y ? point1_y : point2_y; int32_t maximum_y = point1_y < point2_y ? point2_y : point1_y; write_record_i32( record, COLLISION_BOUNDS_MIN_X, subtract_wrap_i32(minimum_x, COLLISION_BOUNDS_PADDING)); write_record_i32( record, COLLISION_BOUNDS_MIN_Y, subtract_wrap_i32(minimum_y, COLLISION_BOUNDS_PADDING)); write_record_i32( record, COLLISION_BOUNDS_MAX_X, add_wrap_i32(maximum_x, COLLISION_BOUNDS_PADDING)); write_record_i32( record, COLLISION_BOUNDS_MAX_Y, add_wrap_i32(maximum_y, COLLISION_BOUNDS_PADDING)); } static void update_left_flipper_records(int32_t delta) { Win16FarPtr outer_segment = collision_record(66); add_scaled(outer_segment, COLLISION_POINT1_X, delta, 14000); add_scaled(outer_segment, COLLISION_POINT1_Y, delta, 4000); add_scaled(outer_segment, COLLISION_POINT2_X, delta, 10000); add_scaled(outer_segment, COLLISION_POINT2_Y, delta, 44000); recompute_segment_bounds(outer_segment); Win16FarPtr swept_edge = collision_record(67); add_scaled(swept_edge, COLLISION_POINT1_X, delta, 1000); add_scaled(swept_edge, COLLISION_POINT1_Y, delta, 42000); add_scaled(swept_edge, COLLISION_BOUNDS_MIN_X, delta, 2000); add_scaled(swept_edge, COLLISION_BOUNDS_MIN_Y, delta, 43000); subtract_scaled(swept_edge, COLLISION_BOUNDS_MAX_X, delta, 2000); subtract_scaled(swept_edge, COLLISION_BOUNDS_MAX_Y, delta, 43000); Win16FarPtr inner_segment = collision_record(68); subtract_scaled(inner_segment, COLLISION_POINT1_X, delta, 7000); add_scaled(inner_segment, COLLISION_POINT1_Y, delta, 43000); subtract_scaled(inner_segment, COLLISION_POINT2_X, delta, 19000); add_scaled(inner_segment, COLLISION_POINT2_Y, delta, 6000); recompute_segment_bounds(inner_segment); } static void update_right_flipper_records(int32_t delta) { Win16FarPtr outer_segment = collision_record(83); subtract_scaled(outer_segment, COLLISION_POINT2_X, delta, 16000); add_scaled(outer_segment, COLLISION_POINT2_Y, delta, 3000); subtract_scaled(outer_segment, COLLISION_POINT1_X, delta, 11000); add_scaled(outer_segment, COLLISION_POINT1_Y, delta, 45000); recompute_segment_bounds(outer_segment); Win16FarPtr swept_edge = collision_record(82); subtract_scaled(swept_edge, COLLISION_POINT1_X, delta, 2000); add_scaled(swept_edge, COLLISION_POINT1_Y, delta, 43000); subtract_scaled(swept_edge, COLLISION_BOUNDS_MIN_X, delta, 2000); add_scaled(swept_edge, COLLISION_BOUNDS_MIN_Y, delta, 43000); add_scaled(swept_edge, COLLISION_BOUNDS_MAX_X, delta, 2000); subtract_scaled(swept_edge, COLLISION_BOUNDS_MAX_Y, delta, 43000); Win16FarPtr inner_segment = collision_record(81); add_scaled(inner_segment, COLLISION_POINT2_X, delta, 6000); add_scaled(inner_segment, COLLISION_POINT2_Y, delta, 49000); add_scaled(inner_segment, COLLISION_POINT1_X, delta, 19000); add_scaled(inner_segment, COLLISION_POINT1_Y, delta, 6000); recompute_segment_bounds(inner_segment); } static void move_flipper_bitmap_geometry_with_dc( Win16FarPtr receiver, int32_t delta, uint16_t flipper, HDC16 dc) { if ((uint8_t)flipper == 1) { update_left_flipper_records(delta); if (win16_read_u16(win16_far_add_offset(receiver, 0x0bd4)) == 0) { tdkpin_restore_background_region_b(52, 47, 373, 93, dc); } else { tdkpin_restore_background_region_a(52, 47, 373, 93, dc); } tdkpin_present_background_region(52, 47, 373, 93, dc); } else if ((uint8_t)flipper == 2) { update_right_flipper_records(delta); if (win16_read_u16(win16_far_add_offset(receiver, 0x0bd6)) == 0) { tdkpin_restore_background_region_b(53, 45, 372, 175, dc); } else { tdkpin_restore_background_region_a(53, 45, 372, 175, dc); } tdkpin_present_background_region(53, 45, 372, 175, dc); } } void tdkpin_move_flipper_bitmap_geometry_for_receiver( Win16FarPtr receiver, int32_t delta, uint16_t flipper) { HWND16 handle = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(handle); move_flipper_bitmap_geometry_with_dc(receiver, delta, flipper, dc); (void)ReleaseDC16(handle, dc); } /* 1000:8b0d. parent_bp is the hidden static link to 1000:99f0. */ void tdkpin_move_flipper_bitmap_geometry( uint16_t parent_bp, int32_t delta, uint8_t flipper) { uint16_t caller_bp = win16_read_stack_u16((uint16_t)(parent_bp + 6)); Win16FarPtr receiver = caller_receiver(caller_bp); HWND16 handle = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(handle); win16_write_stack_u16((uint16_t)(parent_bp - 4), 0); win16_write_stack_u16((uint16_t)(parent_bp - 2), 0); uint32_t vertical_step = delta == 1 ? 43000u : (uint32_t)-43000; win16_write_stack_u16( (uint16_t)(parent_bp - 8), (uint16_t)vertical_step); win16_write_stack_u16( (uint16_t)(parent_bp - 6), (uint16_t)(vertical_step >> 16)); move_flipper_bitmap_geometry_with_dc(receiver, delta, flipper, dc); (void)ReleaseDC16(handle, dc); } FxE/* Moving-flipper collision response at 1000:7ed9. */ #include "tdkpin_flippers.h" #include "tdkpin_arithmetic.h" #include "tdkpin_collision_records.h" #include "tdkpin_gameplay_helpers.h" #include "tdkpin_real48.h" #include "tdkpin_sound.h" enum { COLLISION_RECORDS_BASE = 0x095b, COLLISION_RECORD_BYTES = 0x53, RECORD_RADIUS = 0x22, RECORD_RESPONSE_NORMAL = 0x28, COLLISION_SEARCH_RADIUS = 54000, COLLISION_RESPONSE_RADIUS = 44000, }; typedef struct { int32_t radius; int32_t pivot_x; int32_t pivot_y; int32_t unused_negative_point_x; int32_t unused_positive_point_x; int32_t negative_edge_x; int32_t negative_edge_y; int32_t positive_edge_x; int32_t positive_edge_y; uint16_t response_record; } FlipperCollisionGeometry; static const BorlandReal48 g_real48_one_tenth = {{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}; static const BorlandReal48 g_real48_one_half = {{0x80, 0, 0, 0, 0, 0}}; static const BorlandReal48 g_real48_two = {{0x82, 0, 0, 0, 0, 0}}; static const BorlandReal48 g_real48_two_fifths = {{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}; static const BorlandReal48 g_real48_one = {{0x81, 0, 0, 0, 0, 0}}; static const BorlandReal48 g_real48_thousand = {{0x8a, 0, 0, 0, 0, 0x7a}}; static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static Win16FarPtr collision_record(uint16_t id) { return win16_dgroup_pointer((uint16_t)( COLLISION_RECORDS_BASE + id * COLLISION_RECORD_BYTES)); } static int32_t record_i32(uint16_t id, uint16_t offset) { return (int32_t)win16_read_u32( win16_far_add_offset(collision_record(id), offset)); } static BorlandReal48 record_real48(uint16_t id, uint16_t offset) { BorlandReal48 value; Win16FarPtr source = win16_far_add_offset(collision_record(id), offset); for (uint16_t index = 0; index < sizeof(value.bytes); index++) { value.bytes[index] = win16_read_u8( win16_far_add_offset(source, index)); } return value; } static int32_t add_wrap_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left + (uint32_t)right); } static int32_t subtract_wrap_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left - (uint32_t)right); } static int32_t negate_wrap_i32(int32_t value) { return (int32_t)(0u - (uint32_t)value); } static int32_t absolute_wrap_i32(int32_t value) { return value < 0 ? negate_wrap_i32(value) : value; } static int32_t divide_by_thousand(int32_t value) { return borland_divide_i32(value, 1000).quotient; } static int32_t indeterminate_i32(void) { uint32_t low = win16_indeterminate_u16(); uint32_t high = win16_indeterminate_u16(); return (int32_t)(low | (high << 16)); } static BorlandReal48 negate_real48(BorlandReal48 value) { if (value.bytes[0] != 0) { value.bytes[5] ^= 0x80; } return value; } static FlipperCollisionGeometry load_flipper_geometry( int32_t delta, uint16_t flipper) { FlipperCollisionGeometry geometry; if (flipper == 1) { geometry.radius = borland_real48_round_to_i32( record_real48(65, RECORD_RADIUS)); geometry.pivot_x = subtract_wrap_i32( record_i32(65, offsetof(TdkpinCollisionRecord, point1_x_milli)), 10000); geometry.pivot_y = record_i32( 65, offsetof(TdkpinCollisionRecord, point1_y_milli)); geometry.unused_negative_point_x = record_i32( 66, offsetof(TdkpinCollisionRecord, point1_x_milli)); geometry.negative_edge_x = add_wrap_i32( record_i32(66, offsetof(TdkpinCollisionRecord, point2_x_milli)), 20000); geometry.negative_edge_y = record_i32( 66, offsetof(TdkpinCollisionRecord, point2_y_milli)); geometry.unused_positive_point_x = record_i32( 68, offsetof(TdkpinCollisionRecord, point2_x_milli)); geometry.positive_edge_x = add_wrap_i32( record_i32(68, offsetof(TdkpinCollisionRecord, point1_x_milli)), 20000); geometry.positive_edge_y = record_i32( 68, offsetof(TdkpinCollisionRecord, point1_y_milli)); geometry.response_record = delta == 1 ? 68 : 66; } else if (flipper == 2) { geometry.radius = borland_real48_round_to_i32( record_real48(80, RECORD_RADIUS)); geometry.pivot_x = add_wrap_i32( record_i32(80, offsetof(TdkpinCollisionRecord, point1_x_milli)), 10000); geometry.pivot_y = record_i32( 80, offsetof(TdkpinCollisionRecord, point1_y_milli)); geometry.unused_negative_point_x = record_i32( 83, offsetof(TdkpinCollisionRecord, point1_x_milli)); geometry.negative_edge_x = subtract_wrap_i32( record_i32(83, offsetof(TdkpinCollisionRecord, point1_x_milli)), 20000); geometry.negative_edge_y = record_i32( 83, offsetof(TdkpinCollisionRecord, point1_y_milli)); geometry.unused_positive_point_x = record_i32( 81, offsetof(TdkpinCollisionRecord, point1_x_milli)); geometry.positive_edge_x = subtract_wrap_i32( record_i32(81, offsetof(TdkpinCollisionRecord, point1_x_milli)), 20000); geometry.positive_edge_y = record_i32( 81, offsetof(TdkpinCollisionRecord, point1_y_milli)); geometry.response_record = delta == 1 ? 81 : 83; } else { geometry = (FlipperCollisionGeometry){ .radius = indeterminate_i32(), .pivot_x = indeterminate_i32(), .pivot_y = indeterminate_i32(), .unused_negative_point_x = indeterminate_i32(), .unused_positive_point_x = indeterminate_i32(), .negative_edge_x = indeterminate_i32(), .negative_edge_y = indeterminate_i32(), .positive_edge_x = indeterminate_i32(), .positive_edge_y = indeterminate_i32(), .response_record = win16_indeterminate_u16(), }; } geometry.pivot_y = add_wrap_i32( geometry.pivot_y, borland_multiply_i32(delta, geometry.radius)); (void)geometry.unused_negative_point_x; (void)geometry.unused_positive_point_x; return geometry; } static int32_t cross_product_for_edge( int32_t edge_x, int32_t edge_y, int32_t pivot_x, int32_t pivot_y, int32_t ball_x, int32_t ball_y) { int32_t edge_from_ball_x = divide_by_thousand( subtract_wrap_i32(edge_x, ball_x)); int32_t edge_from_pivot_y = divide_by_thousand( subtract_wrap_i32(edge_y, pivot_y)); int32_t edge_from_ball_y = divide_by_thousand( subtract_wrap_i32(edge_y, ball_y)); int32_t edge_from_pivot_x = divide_by_thousand( subtract_wrap_i32(edge_x, pivot_x)); return subtract_wrap_i32( borland_multiply_i32(edge_from_ball_y, edge_from_pivot_x), borland_multiply_i32(edge_from_ball_x, edge_from_pivot_y)); } static int32_t radial_distance_milli( int32_t ball_x, int32_t ball_y, int32_t pivot_x, int32_t pivot_y) { BorlandReal48 dx = borland_real48_divide( borland_i32_to_real48(subtract_wrap_i32(ball_x, pivot_x)), g_real48_thousand); BorlandReal48 dy = borland_real48_divide( borland_i32_to_real48(subtract_wrap_i32(ball_y, pivot_y)), g_real48_thousand); BorlandReal48 squared = borland_real48_add( borland_real48_square(dx), borland_real48_square(dy)); return borland_real48_round_to_i32( borland_real48_multiply( borland_real48_sqrt(squared), g_real48_thousand)); } static bool point_in_moving_flipper( const FlipperCollisionGeometry *geometry, int32_t delta, uint16_t flipper, uint16_t mode, int32_t ball_x, int32_t ball_y, int32_t *distance) { int32_t first_cross; int32_t second_cross; if (delta == -1) { first_cross = cross_product_for_edge( geometry->negative_edge_x, subtract_wrap_i32(geometry->negative_edge_y, 43000), geometry->pivot_x, geometry->pivot_y, ball_x, ball_y); second_cross = cross_product_for_edge( geometry->negative_edge_x, add_wrap_i32(geometry->negative_edge_y, 12000), geometry->pivot_x, geometry->pivot_y, ball_x, ball_y); } else { first_cross = cross_product_for_edge( geometry->positive_edge_x, subtract_wrap_i32(geometry->positive_edge_y, 12000), geometry->pivot_x, geometry->pivot_y, ball_x, ball_y); second_cross = cross_product_for_edge( geometry->positive_edge_x, add_wrap_i32(geometry->positive_edge_y, 43000), geometry->pivot_x, geometry->pivot_y, ball_x, ball_y); } int32_t absolute_x = absolute_wrap_i32( subtract_wrap_i32(ball_x, geometry->pivot_x)); int32_t absolute_y = absolute_wrap_i32( subtract_wrap_i32(ball_y, geometry->pivot_y)); if (absolute_x >= COLLISION_SEARCH_RADIUS || absolute_y >= COLLISION_SEARCH_RADIUS) { return false; } *distance = radial_distance_milli( ball_x, ball_y, geometry->pivot_x, geometry->pivot_y); if (*distance > COLLISION_SEARCH_RADIUS || mode != 0) { return false; } if (flipper == 1) { return first_cross > -1000 && second_cross < 1000 && ball_x > geometry->pivot_x; } if (flipper == 2) { return first_cross < 1000 && second_cross > -1000 && ball_x < geometry->pivot_x; } return false; } static int32_t collision_penetration( const FlipperCollisionGeometry *geometry, int32_t delta, int32_t ball_x, int32_t ball_y) { int32_t collision_y; if (delta == -1) { int32_t edge_dx = absolute_wrap_i32(subtract_wrap_i32( geometry->negative_edge_x, geometry->pivot_x)); if (borland_real48_compare( borland_i32_to_real48(edge_dx), g_real48_one_tenth) > 0) { collision_y = add_wrap_i32( subtract_wrap_i32( geometry->pivot_y, absolute_wrap_i32(subtract_wrap_i32( ball_x, geometry->pivot_x))), 5000); } else { collision_y = subtract_wrap_i32( geometry->negative_edge_y, 43000); } } else { int32_t edge_dx = subtract_wrap_i32( geometry->positive_edge_x, geometry->pivot_x); if (borland_real48_compare( borland_i32_to_real48(absolute_wrap_i32(edge_dx)), g_real48_one_tenth) > 0) { int32_t numerator = borland_multiply_i32( subtract_wrap_i32(ball_x, geometry->pivot_x), subtract_wrap_i32( add_wrap_i32(geometry->positive_edge_y, 43000), geometry->pivot_y)); int32_t interpolation = borland_real48_round_to_i32( borland_real48_divide( borland_i32_to_real48(numerator), borland_i32_to_real48(edge_dx))); collision_y = subtract_wrap_i32( geometry->pivot_y, interpolation); } else { collision_y = add_wrap_i32( geometry->positive_edge_y, 43000); } } int32_t penetration = subtract_wrap_i32(collision_y, ball_y); if (penetration < 0) { return negate_wrap_i32( borland_multiply_i32(penetration, delta)); } return 0; } static void apply_flipper_response( Win16FarPtr receiver, const FlipperCollisionGeometry *geometry, int32_t delta, uint16_t flipper, int32_t ball_x, int32_t ball_y, int32_t distance, int32_t penetration, uint16_t caller_bp) { int32_t normal_x_integer = borland_multiply_i32( subtract_wrap_i32(ball_x, geometry->pivot_x), delta); int32_t normal_y_integer = borland_multiply_i32( add_wrap_i32( subtract_wrap_i32(ball_y, geometry->pivot_y), 4000), delta); BorlandReal48 normal_x = borland_i32_to_real48(normal_x_integer); BorlandReal48 normal_y = borland_i32_to_real48(normal_y_integer); if (flipper == 2) { normal_x = negate_real48(normal_x); normal_y = negate_real48(normal_y); } int32_t velocity_x = (int32_t)win16_read_u32( win16_far_add_offset(receiver, 0x0baa)); int32_t velocity_y = (int32_t)win16_read_u32( win16_far_add_offset(receiver, 0x0bae)); BorlandReal48 response_radius = borland_i32_to_real48(COLLISION_RESPONSE_RADIUS); /* 1000:94ce-9553 computes this projection and then deliberately clears it. */ BorlandReal48 discarded_projection_real = borland_real48_divide( borland_real48_multiply( borland_real48_add( borland_real48_multiply( borland_i32_to_real48(velocity_y), normal_y), borland_real48_multiply( borland_i32_to_real48(velocity_x), normal_x)), g_real48_one_half), response_radius); (void)borland_real48_round_to_i32(discarded_projection_real); int32_t normal_projection = 0; int32_t tangent_projection = borland_real48_round_to_i32( borland_real48_divide( borland_real48_subtract( borland_real48_multiply( borland_i32_to_real48(velocity_x), normal_y), borland_real48_multiply( borland_i32_to_real48(velocity_y), normal_x)), response_radius)); BorlandReal48 gain = borland_real48_add( borland_real48_multiply( borland_real48_sqrt(borland_real48_divide( borland_i32_to_real48(distance), response_radius)), g_real48_two), g_real48_two_fifths); BorlandReal48 record_response = record_real48( geometry->response_record, RECORD_RESPONSE_NORMAL); tangent_projection = add_wrap_i32( borland_real48_round_to_i32( borland_real48_multiply( borland_i32_to_real48(tangent_projection), borland_real48_add(g_real48_one, record_response))), borland_real48_round_to_i32( borland_real48_multiply( borland_i32_to_real48((int32_t)win16_read_u32( win16_far_add_offset(receiver, 0x56))), gain))); int32_t delta_velocity_x = borland_real48_round_to_i32( borland_real48_divide( borland_real48_subtract( borland_real48_multiply( borland_i32_to_real48(normal_projection), normal_x), borland_real48_multiply( borland_i32_to_real48(tangent_projection), normal_y)), response_radius)); velocity_x = add_wrap_i32(velocity_x, delta_velocity_x); win16_write_u32(receiver, 0x0baa, (uint32_t)velocity_x); int32_t delta_velocity_y = borland_real48_round_to_i32( borland_real48_divide( borland_real48_add( borland_real48_multiply( borland_i32_to_real48(tangent_projection), normal_x), borland_real48_multiply( borland_i32_to_real48(normal_projection), normal_y)), response_radius)); velocity_y = add_wrap_i32(velocity_y, delta_velocity_y); win16_write_u32(receiver, 0x0bae, (uint32_t)velocity_y); int32_t movement_x = borland_real48_round_to_i32( borland_real48_divide( borland_i32_to_real48( borland_multiply_i32(penetration, velocity_x)), borland_i32_to_real48(velocity_y))); tdkpin_move_ball_and_render( caller_bp, movement_x, penetration); } void tdkpin_move_flipper_collision_geometry( uint16_t caller_bp, int32_t delta, uint16_t flipper, uint16_t mode) { tdkpin_play_sound_if_not_tilted(21); Win16FarPtr receiver = caller_receiver(caller_bp); FlipperCollisionGeometry geometry = load_flipper_geometry(delta, flipper); uint16_t ball_count = win16_read_u8( win16_far_add_offset(receiver, 0x61)); for (uint16_t ball = 1; ball <= ball_count; ball++) { if (win16_read_u8(win16_far_add_offset(receiver, 0x61)) > 1) { tdkpin_load_ball_slot(caller_bp, (uint16_t)(ball - 1u)); } int32_t ball_x = (int32_t)win16_read_u32( win16_dgroup_pointer(0x07d3)); int32_t ball_y = (int32_t)win16_read_u32( win16_dgroup_pointer(0x07d7)); int32_t distance = 0; if (point_in_moving_flipper( &geometry, delta, flipper, mode, ball_x, ball_y, &distance)) { int32_t penetration = collision_penetration( &geometry, delta, ball_x, ball_y); apply_flipper_response( receiver, &geometry, delta, flipper, ball_x, ball_y, distance, penetration, caller_bp); } if (win16_read_u8(win16_far_add_offset(receiver, 0x61)) > 1) { tdkpin_save_ball_slot(caller_bp, (uint16_t)(ball - 1u)); } } } Zx\/* Edge-triggered left/right flipper dispatcher at 1000:99f0. */ #include "tdkpin_flippers.h" static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static void update_one_flipper( uint16_t caller_bp, Win16FarPtr receiver, uint16_t key_offset, uint16_t position_offset, uint16_t flipper) { bool pressed = win16_read_u8( win16_far_add_offset(receiver, key_offset)) != 0; uint16_t position = win16_read_u16( win16_far_add_offset(receiver, position_offset)); int32_t delta; if (pressed && position < 1) { win16_write_u16(receiver, position_offset, (uint16_t)(position + 1u)); delta = -1; } else if (!pressed && position > 0) { win16_write_u16(receiver, position_offset, (uint16_t)(position - 1u)); delta = 1; } else { return; } tdkpin_move_flipper_collision_geometry( caller_bp, delta, flipper, 0); tdkpin_move_flipper_bitmap_geometry_for_receiver( receiver, delta, flipper); } void tdkpin_update_flippers(uint16_t caller_bp) { Win16FarPtr receiver = caller_receiver(caller_bp); update_one_flipper(caller_bp, receiver, 0x0bda, 0x0bd4, 1); update_one_flipper(caller_bp, receiver, 0x0bdb, 0x0bd6, 2); } O)xd#ifndef TDKPIN_FLIPPERS_H #define TDKPIN_FLIPPERS_H #include "tdkpin_segmented.h" void tdkpin_update_flippers( uint16_t caller_bp); /* 1000:99f0 */ /* Verified dependency seams whose ABI bodies are reconstructed separately. */ void tdkpin_move_flipper_collision_geometry( uint16_t caller_bp, int32_t delta, uint16_t flipper, uint16_t mode); /* 1000:7ed9 */ void tdkpin_move_flipper_bitmap_geometry_for_receiver( Win16FarPtr receiver, int32_t delta, uint16_t flipper); /* semantic core of 1000:8b0d */ void tdkpin_move_flipper_bitmap_geometry( uint16_t parent_bp, int32_t delta, uint8_t flipper); /* 1000:8b0d */ #endif lءx= /* TDKPIN-specific TApplication virtual methods. */ #include "tdkpin_game_application.h" #include "tdkpin_window_messages.h" enum { DGROUP_MODULE_NAME = 0x0222, DGROUP_APPLICATION_TITLE = 0x022c, DGROUP_ALREADY_RUNNING = 0x0245, MAIN_WINDOW_VMT = 0x009e, APPLICATION_MAIN_WINDOW_OFFSET = 8, ALREADY_RUNNING_MESSAGE_FLAGS = 0x2010, }; /* 1000:0100 — initialize ObjectWindows, then CTL3D with fixed flags 1/1/1. */ void tdkpin_application_init_instance(Win16FarPtr application) { object_windows_application_initialize(application); Win16FarPtr module_name = win16_dgroup_pointer(DGROUP_MODULE_NAME); (void)multimedia_initialize_export( 1, 1, 1, win16_far_offset(module_name), win16_far_selector(module_name)); } /* * 1000:0121 — first-instance MainWindow construction or second-instance * refusal dialog followed by Halt(0). */ void tdkpin_application_init_application(Win16FarPtr application) { Win16FarPtr title = win16_dgroup_pointer(DGROUP_APPLICATION_TITLE); if (g_win16_previous_instance == 0) { Win16FarPtr main_window = tdkpin_main_window_construct( 0, MAIN_WINDOW_VMT, title, 0); win16_write_u16( application, APPLICATION_MAIN_WINDOW_OFFSET, win16_far_offset(main_window)); win16_write_u16( application, APPLICATION_MAIN_WINDOW_OFFSET + 2, win16_far_selector(main_window)); return; } (void)win16_call_message_box_far( g_win16_message_box, 0, win16_dgroup_pointer(DGROUP_ALREADY_RUNNING), title, ALREADY_RUNNING_MESSAGE_FLAGS); borland_runtime_exit(0); } /* 1000:016c — TDKPIN main-window class overrides. */ void tdkpin_build_main_window_class( Win16FarPtr window, WNDCLASS16 *window_class) { object_windows_build_window_class(window, window_class); window_class->style = 0x3000; window_class->icon = LoadIcon16( g_win16_instance, win16_make_far_pointer(0, 0x03e4)); window_class->cursor = LoadCursor16(0, win16_make_far_pointer(0, 0x7f00)); window_class->background_brush = GetStockObject16(0); window_class->instance = g_win16_instance; window_class->class_extra_bytes = 0; window_class->window_extra_bytes = 0; } static void build_stock_brush_class( Win16FarPtr window, WNDCLASS16 *window_class) { object_windows_build_window_class(window, window_class); window_class->background_brush = GetStockObject16(5); window_class->style |= 0x3800; } void tdkpin_build_stock_brush_class_a( Win16FarPtr window, WNDCLASS16 *window_class) { build_stock_brush_class(window, window_class); } void tdkpin_build_stock_brush_class_b( Win16FarPtr window, WNDCLASS16 *window_class) { build_stock_brush_class(window, window_class); } 'xx#ifndef TDKPIN_GAME_APPLICATION_H #define TDKPIN_GAME_APPLICATION_H #include "tdkpin_game_windows.h" #include "tdkpin_multimedia.h" void tdkpin_application_init_instance( Win16FarPtr application); /* 1000:0100 */ void tdkpin_application_init_application( Win16FarPtr application); /* 1000:0121 */ void tdkpin_build_main_window_class( Win16FarPtr window, WNDCLASS16 *window_class); /* 1000:016c */ void tdkpin_build_stock_brush_class_a( Win16FarPtr window, WNDCLASS16 *window_class); /* 1000:5ab7 */ void tdkpin_build_stock_brush_class_b( Win16FarPtr window, WNDCLASS16 *window_class); /* 1000:6040 */ #endif t)xZrSt]EB,H$ ְ2;+˩*'߲̓uu铴iz3oHx2h[VH E5–u|/^j&w""h](ڎFyېH(%g ä{W'A^:,';̮cCr%u'_Å{uqFgAT`T|A@9KVkph3ՆzĄZTƐDIkF}g܊DF0"ytn@' \H`,hDetwo# ծg/9ö A0~>tǑxQq*PNu)P64r6IZm2H#a5=Vo(KbCzXɓN_V 8n1z}rx 7f]^㌊Pdܠc\ gv#դQAR9ON对ē; *PxOnqɀ_+PZ҈kUEWnwҒO4\̇Q1F ɝ)rѮ?fJ?Cf, +R*ivxoӬ&VۣQ,H^/+Βmʾ>n/ܭ Zye&jV i.TDҀ55{jm0<6Ixy>R &:<89뭤QUwr\7iVW\s&xoTqQ`7&l=0F1W4E^REs%x , `!刑$`q'TC$v+ t`SaiD%!OBUQ,bu5VNI$<('osecbt u˾N45_z+c/{U2{FH-ڱB#֞e"=IVu= f/4 P ߽n(QD(ðb ƢB!qͯEwxw`x)qRE`%gkKvZ0(M _lAB@b gi(R=`GYxܔ`/jYZ{d(N6tS&aSm,ny-1V]cr碘N| >G1&e }Y5ӲUeyBuyYe f0?$дX˓-l룉v,mEUS\^d(W XTR)V*U!豉@@aA<1i?ex w=&q%#AO$Q|KKe_3$ea"w ֙WMJovԧόzËgnpjgfnjpYi1Q"οHf4n:>odר W: VD52t'7u9g1 U TE4nf[jifcW_F^DRUW%Ū 3)yL7G WZPUGkh/ '|Z|z?bFo5͉ G_sTp_3ԜpRS23cx>#ifndef TDKPIN_GAME_ASSETS_H #define TDKPIN_GAME_ASSETS_H #include "tdkpin_segmented.h" void tdkpin_draw_loading_stage( Win16FarPtr caller_bp, uint8_t stage); /* 1000:531e */ void tdkpin_setup_overlay_window(Win16FarPtr window); /* 1000:5be5 */ uint16_t tdkpin_palette_change_variant_a( Win16FarPtr window, Win16FarPtr message); /* 1000:58e7 */ void tdkpin_palette_change_variant_b( Win16FarPtr window, Win16FarPtr message); /* 1000:5956 */ uint16_t tdkpin_wm_palette_changed( Win16FarPtr window, Win16FarPtr message); /* 1000:59a0 */ uint16_t tdkpin_wm_palette_changed_variant_b( Win16FarPtr window, Win16FarPtr message); /* 1000:5f29 */ uint16_t tdkpin_wm_palette_changed_variant_c( Win16FarPtr window, Win16FarPtr message); /* 1000:6245 */ int16_t tdkpin_wm_query_new_palette( Win16FarPtr window, Win16FarPtr message); /* 1000:5a37 */ int16_t tdkpin_wm_query_new_palette_variant_b( Win16FarPtr window, Win16FarPtr message); /* 1000:5fc0 */ int16_t tdkpin_wm_query_new_palette_variant_c( Win16FarPtr window, Win16FarPtr message); /* 1000:62dc */ void tdkpin_setup_board_window(Win16FarPtr window); /* 1000:6129 */ void tdkpin_draw_board_overlay( Win16FarPtr ignored_object, uint16_t ignored_1, uint16_t ignored_2, HDC16 destination); /* 1000:616e */ void tdkpin_initialize_assets_and_redraw( Win16FarPtr window, uint16_t ignored_1, uint16_t ignored_2, HDC16 destination); /* 1000:5390 */ void tdkpin_asset_window_destruct( Win16FarPtr window, uint16_t vmt); /* 1000:51f5 */ #endif oJx*l/* Complete game-window setup and collision/table construction at 1000:0270. */ #include "tdkpin_game_setup.h" #include "tdkpin_application.h" #include "tdkpin_command_line.h" #include "tdkpin_heap.h" #include "tdkpin_palette.h" #include "tdkpin_shortstrings.h" #include "tdkpin_strings.h" #include "tdkpin_system_timer.h" #include "tdkpin_window_placement.h" #include #include "tdkpin_game_setup_collision_data.inc" typedef struct { uint16_t word_0; uint16_t word_2; uint16_t word_4; uint16_t word_6; } SetupWordQuad; static const SetupWordQuad g_game_setup_word_quads[20] = { {0x0067, 0x0130, 0x0079, 0x0143}, {0x0077, 0x0118, 0x0089, 0x012b}, {0x0094, 0x0110, 0x00a6, 0x0123}, {0x00b1, 0x0118, 0x00c3, 0x012b}, {0x00c1, 0x012f, 0x00d3, 0x0142}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0000, 0x0014, 0x0000, 0x0014}, {0x0057, 0x0044, 0x0067, 0x0054}, {0x0069, 0x0029, 0x007b, 0x0039}, {0x008a, 0x0033, 0x009a, 0x0043}, {0x008a, 0x0053, 0x009a, 0x0063}, {0x006a, 0x005e, 0x007a, 0x006e}, {0x0009, 0x000e, 0x0019, 0x001e}, }; static void write_far(Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u32(base, offset, value); } static void fail_setup( Win16FarPtr window, Win16FarPtr text, HWND16 owner, bool close_window) { Win16FarPtr message_box = win16_read_far_pointer( win16_dgroup_pointer(0x0666), 0); (void)win16_call_message_box_far( message_box, owner, text, win16_dgroup_pointer(0x02aa), 0x2010); if (close_window && window != 0) { object_windows_close_if_allowed(window); } borland_runtime_exit(0); } static void initialize_base_state(Win16FarPtr window) { win16_write_u8(win16_dgroup_pointer(0x07cf), 0); win16_write_u8(win16_dgroup_pointer(0x0874), 0); win16_write_u8(win16_dgroup_pointer(0x0875), 0); win16_write_u16(window, 0x41, 0); win16_write_u16(window, 0x43, 0); win16_write_u16(window, 0x45, 0); win16_write_u16(window, 0x47, 0); if (borland_heap_free_space() < UINT32_C(0x00400000)) { fail_setup(window, win16_dgroup_pointer(0x0260), 0, true); } object_windows_setup_window(window); HCURSOR16 cursor = LoadCursor16(0, win16_make_far_pointer(0, 0x7f02)); (void)SetCursor16(cursor); HWND16 handle = win16_read_u16(win16_far_add_offset(window, 4)); tdkpin_realize_nocollapse_palette(handle); tdkpin_load_palette_resource( win16_dgroup_pointer(0x4450), win16_make_far_pointer(0, 999), win16_read_u16(win16_dgroup_pointer(0x06fe))); tdkpin_create_palette_from_rgb_table(); win16_write_u8(win16_dgroup_pointer(0x07cc), 1); win16_write_u16(window, 0x4d, 0); win16_write_u16(window, 0x4f, 0); win16_write_u8(win16_far_add_offset(window, 0x51), 0); win16_write_u8(win16_far_add_offset(window, 0x0bd8), 0); win16_write_u32(win16_dgroup_pointer(0x0720), 0, GetTickCount16()); win16_write_u16(window, 0x0be3, 0); win16_write_u8(win16_dgroup_pointer(0x07c7), 0); win16_write_u8(win16_dgroup_pointer(0x07c8), 0); win16_write_u16(win16_dgroup_pointer(0x086d), 0, 10); win16_write_u16(win16_dgroup_pointer(0x086f), 0, 10); win16_write_u8(win16_dgroup_pointer(0x0873), 0); win16_write_u8(win16_dgroup_pointer(0x07ca), 0); win16_write_u8(win16_dgroup_pointer(0x07cb), 0); win16_write_u8(win16_dgroup_pointer(0x07c9), 1); win16_write_u32(window, 0x0bca, 0); win16_write_u8(win16_far_add_offset(window, 0x0bd9), 0); win16_write_u32(window, 0x0bc2, 325000); win16_write_u32(window, 0x0bc6, 413000); win16_write_u32(win16_dgroup_pointer(0x07d3), 0, 325000); win16_write_u32(win16_dgroup_pointer(0x07d7), 0, 413000); win16_write_u8(win16_far_add_offset(window, 0x0bdd), 0); win16_write_u8(win16_far_add_offset(window, 0x0bdf), 0); win16_write_u8(win16_far_add_offset(window, 0x0bdc), 0); win16_write_u8(win16_far_add_offset(window, 0x0be0), 0); win16_write_u8(win16_far_add_offset(window, 0x0be1), 0); win16_write_u8(win16_far_add_offset(window, 0x0be2), 0); win16_write_u8(win16_dgroup_pointer(0x07c5), 0); win16_write_u8(win16_far_add_offset(window, 0x0bde), 1); win16_write_u8(win16_dgroup_pointer(0x07d0), 0); win16_write_u8(win16_dgroup_pointer(0x07d1), 0); win16_write_u8(win16_far_add_offset(window, 0x61), 1); win16_write_u16(win16_dgroup_pointer(0x086b), 0, 99); win16_write_u16(win16_dgroup_pointer(0x0869), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0876), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0878), 0, 0); win16_write_u16(win16_dgroup_pointer(0x087a), 0, 0); win16_write_u16(win16_dgroup_pointer(0x087c), 0, 0); } static void initialize_player_defaults(Win16FarPtr window) { for (uint16_t item = 1; item <= 20; item++) { for (uint16_t player = 1; player <= 4; player++) { win16_write_u8( win16_far_add_offset(window, (uint16_t)( 0x047b + (player - 1u) * 0x14u + item)), 0); } } for (uint16_t player = 1; player <= 4; player++) { win16_write_u32( win16_dgroup_pointer((uint16_t)(0x097e + player * 4u)), 0, 0); win16_write_u32( win16_dgroup_pointer((uint16_t)(0x098e + player * 4u)), 0, 0); win16_write_u8( win16_dgroup_pointer((uint16_t)(0x09a1 + player)), 1); win16_write_u16( win16_dgroup_pointer((uint16_t)(0x09a4 + player * 2u)), 0, 0); win16_write_u16( win16_dgroup_pointer((uint16_t)(0x081f + player * 2u)), 0, 0xffff); win16_write_u8( win16_dgroup_pointer((uint16_t)(0x0816 + player)), 1); win16_write_u32( win16_dgroup_pointer((uint16_t)(0x0835 + player * 4u)), 0, 1); win16_write_u8( win16_dgroup_pointer((uint16_t)(0x081a + player)), 1); } static const uint32_t thresholds[4] = { 140000u, 650000u, 1300000u, 4000000u}; for (uint16_t index = 0; index < 4; index++) { win16_write_u32( win16_dgroup_pointer((uint16_t)(0x0829 + index * 4u)), 0, thresholds[index]); } } static void initialize_ball_projection(Win16FarPtr window) { win16_write_u32(window, 0x0baa, 0); win16_write_u32(window, 0x0bae, 0); win16_write_u16(window, 0x0bce, 0); win16_write_u16(window, 0x0bd0, 0); win16_write_u16(window, 0x0bd2, 0); int32_t pixel_x = borland_divide_i32(325500, 1000).quotient; int32_t pixel_y = borland_divide_i32(413500, 1000).quotient; win16_write_u32(window, 0x0ba2, (uint32_t)pixel_x); win16_write_u32(window, 0x0ba6, (uint32_t)pixel_y); win16_write_u32(window, 0x0bb2, 0); win16_write_u32(window, 0x0bb6, 0); win16_write_u8(win16_far_add_offset(window, 0x0bda), 0); win16_write_u8(win16_far_add_offset(window, 0x0bdb), 0); win16_write_u32(window, 0x0bd4, 0); } static void build_ini_file_name(Win16FarPtr result) { uint8_t parameter_bytes[256]; uint8_t module_name_bytes[103]; Win16FarPtr parameter = win16_stack_pointer(parameter_bytes); Win16FarPtr module_name = win16_stack_pointer(module_name_bytes); borland_parameter_string(0, parameter); (void)borland_short_to_c_string(module_name, parameter); borland_parameter_string(0, parameter); uint16_t dot = borland_short_position( win16_relocated_code_pointer(1, 0x026e), parameter); (void)borland_far_strncpy(result, module_name, dot); (void)borland_far_strcat(result, win16_dgroup_pointer(0x02c3)); } static void initialize_profile_and_timer(Win16FarPtr window) { uint8_t ini_file_bytes[101]; Win16FarPtr ini_file = win16_stack_pointer(ini_file_bytes); build_ini_file_name(ini_file); uint16_t language = GetPrivateProfileInt16( win16_dgroup_pointer(0x02c7), win16_dgroup_pointer(0x02d0), 1, ini_file); if (language < 1 || language > 5) { language = 1; } win16_write_u16(win16_dgroup_pointer(0x07cd), 0, language); uint16_t speed_word = GetPrivateProfileInt16( win16_dgroup_pointer(0x02c7), win16_dgroup_pointer(0x02d9), 3, ini_file); uint8_t speed = (uint8_t)speed_word; if (speed < 1 || speed > 5) { speed = 3; } win16_write_u8(win16_far_add_offset(window, 0x60), speed); win16_write_u32(window, 0x5a, 15); win16_write_u32(window, 0x56, 3800); static const uint16_t delay_by_speed[5] = {50, 40, 30, 20, 10}; static const uint16_t step_by_speed[5] = {5, 4, 3, 2, 1}; uint16_t delay = delay_by_speed[speed - 1u]; win16_write_u16( win16_dgroup_pointer(0x0871), 0, step_by_speed[speed - 1u]); Win16FarPtr timer = tdkpin_system_timer_construct( 0, 0x05c0, 0, 1, delay, win16_read_u16(win16_far_add_offset(window, 4))); write_far(window, 0x49, timer); if (timer == 0) { fail_setup(window, win16_dgroup_pointer(0x02df), win16_read_u16(win16_far_add_offset(window, 4)), false); } } static void initialize_collision_and_quad_tables(void) { for (uint16_t index = 0; index < 177; index++) { tdkpin_initialize_collision_record(&g_game_setup_collision_calls[index]); } for (uint16_t index = 0; index < 20; index++) { const SetupWordQuad *quad = &g_game_setup_word_quads[index]; tdkpin_set_word_quad( quad->word_6, quad->word_4, quad->word_2, quad->word_0, (uint16_t)(index + 1u)); } } static void initialize_collision_mirrors(Win16FarPtr window) { for (uint16_t id = 1; id <= 175; id++) { Win16FarPtr record = win16_dgroup_pointer((uint16_t)( 0x095b + id * 0x53u)); win16_write_u8( win16_far_add_offset(window, (uint16_t)(0x03cc + id)), win16_read_u8(win16_far_add_offset(record, 0x34))); win16_write_u16( window, (uint16_t)(0x0a42 + id * 2u), win16_read_u16(win16_far_add_offset(record, 0x43))); win16_write_u8(win16_far_add_offset(window, (uint16_t)(0x61 + id)), 0); } } /* 1000:0270 -- complete TDKPIN game-window setup. */ void tdkpin_setup_game_window(Win16FarPtr window) { initialize_base_state(window); initialize_player_defaults(window); initialize_ball_projection(window); initialize_profile_and_timer(window); initialize_collision_and_quad_tables(); initialize_collision_mirrors(window); } l x4#ifndef TDKPIN_GAME_SETUP_H #define TDKPIN_GAME_SETUP_H #include "tdkpin_collision_records.h" #include "tdkpin_tables.h" void tdkpin_setup_game_window( Win16FarPtr window); /* 1000:0270 */ #endif AeIx/* Generated by tools/generate_game_setup_collision_data.py. * Source: TDKPIN_GHIDRA_COMPLETE_RAW.c, 1000:0270 call order. * Do not hand-edit; run the generator and its --check mode. */ static const TdkpinCollisionInitArgs g_game_setup_collision_calls[177] = { /* call 001, record 1 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001c9), .point2_x=(int32_t)UINT32_C(0x0000007d), .point1_y=(int32_t)UINT32_C(0x000001a1), .point1_x=(int32_t)UINT32_C(0x00000007), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0001u}, /* call 002, record 2 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001db), .point2_x=(int32_t)UINT32_C(0x0000012c), .point1_y=(int32_t)UINT32_C(0x000001db), .point1_x=(int32_t)UINT32_C(0x0000000a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0002u}, /* call 003, record 169 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001d8), .point2_x=(int32_t)UINT32_C(0x00000078), .point1_y=(int32_t)UINT32_C(0x000001c4), .point1_x=(int32_t)UINT32_C(0x00000078), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a9u}, /* call 004, record 170 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001c4), .point2_x=(int32_t)UINT32_C(0x000000c3), .point1_y=(int32_t)UINT32_C(0x000001d8), .point1_x=(int32_t)UINT32_C(0x000000c3), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00aau}, /* call 005, record 3 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001bd), .point2_x=(int32_t)UINT32_C(0x00000086), .point1_y=(int32_t)UINT32_C(0x000001ce), .point1_x=(int32_t)UINT32_C(0x00000086), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0003u}, /* call 006, record 4 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001be), .point1_x=(int32_t)UINT32_C(0x0000008d), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0004u}, /* call 007, record 5 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001d3), .point2_x=(int32_t)UINT32_C(0x00000094), .point1_y=(int32_t)UINT32_C(0x000001bd), .point1_x=(int32_t)UINT32_C(0x00000094), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0005u}, /* call 008, record 6 */ {.render_bottom=0x01b5u, .render_right=0x00a3u, .render_top=0x0185u, .render_left=0x0097u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0006u, .flags=0x0102u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001d3), .point2_x=(int32_t)UINT32_C(0x000000a4), .point1_y=(int32_t)UINT32_C(0x000001be), .point1_x=(int32_t)UINT32_C(0x00000094), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0000u, .index=0x0006u}, /* call 009, record 7 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001d2), .point2_x=(int32_t)UINT32_C(0x000000a4), .point1_y=(int32_t)UINT32_C(0x000001bd), .point1_x=(int32_t)UINT32_C(0x000000a5), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0007u}, /* call 010, record 8 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001be), .point1_x=(int32_t)UINT32_C(0x000000ac), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0008u}, /* call 011, record 9 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001d3), .point2_x=(int32_t)UINT32_C(0x000000b4), .point1_y=(int32_t)UINT32_C(0x000001bd), .point1_x=(int32_t)UINT32_C(0x000000b3), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0009u}, /* call 012, record 10 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000019e), .point2_x=(int32_t)UINT32_C(0x00000130), .point1_y=(int32_t)UINT32_C(0x000001c9), .point1_x=(int32_t)UINT32_C(0x000000b7), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x000au}, /* call 013, record 11 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000003d), .point2_x=(int32_t)UINT32_C(0x0000012a), .point1_y=(int32_t)UINT32_C(0x000000a5), .point1_x=(int32_t)UINT32_C(0x0000012a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x000bu}, /* call 014, record 12 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x1388u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000008e), .point2_x=(int32_t)UINT32_C(0x0000012a), .point1_y=(int32_t)UINT32_C(0x0000008e), .point1_x=(int32_t)UINT32_C(0x00000136), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x000cu}, /* call 015, record 13 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000007), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000088), .point1_x=(int32_t)UINT32_C(0x0000012a), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x000du}, /* call 016, record 14 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000068), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000088), .point1_x=(int32_t)UINT32_C(0x00000123), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x000eu}, /* call 017, record 15 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000064), .point2_x=(int32_t)UINT32_C(0x00000119), .point1_y=(int32_t)UINT32_C(0x0000006d), .point1_x=(int32_t)UINT32_C(0x0000012c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x000fu}, /* call 018, record 16 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000087), .point2_x=(int32_t)UINT32_C(0x00000113), .point1_y=(int32_t)UINT32_C(0x00000060), .point1_x=(int32_t)UINT32_C(0x00000122), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0010u}, /* call 019, record 17 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000007), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000086), .point1_x=(int32_t)UINT32_C(0x0000010d), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0011u}, /* call 020, record 26 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000007), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000073), .point1_x=(int32_t)UINT32_C(0x00000101), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x001au}, /* call 021, record 18 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000072), .point2_x=(int32_t)UINT32_C(0x000000f8), .point1_y=(int32_t)UINT32_C(0x0000008b), .point1_x=(int32_t)UINT32_C(0x00000108), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0012u}, /* call 022, record 19 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000005b), .point2_x=(int32_t)UINT32_C(0x00000101), .point1_y=(int32_t)UINT32_C(0x00000072), .point1_x=(int32_t)UINT32_C(0x000000f9), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0013u}, /* call 023, record 20 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000031), .point2_x=(int32_t)UINT32_C(0x00000115), .point1_y=(int32_t)UINT32_C(0x0000005b), .point1_x=(int32_t)UINT32_C(0x00000101), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0014u}, /* call 024, record 21 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000020), .point2_x=(int32_t)UINT32_C(0x0000011f), .point1_y=(int32_t)UINT32_C(0x00000033), .point1_x=(int32_t)UINT32_C(0x00000115), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0015u}, /* call 025, record 22 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000030), .point2_x=(int32_t)UINT32_C(0x0000012f), .point1_y=(int32_t)UINT32_C(0x0000002a), .point1_x=(int32_t)UINT32_C(0x0000011b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0016u}, /* call 026, record 23 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000044), .point2_x=(int32_t)UINT32_C(0x00000140), .point1_y=(int32_t)UINT32_C(0x00000030), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0017u}, /* call 027, record 24 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001c9), .point2_x=(int32_t)UINT32_C(0x00000140), .point1_y=(int32_t)UINT32_C(0x00000044), .point1_x=(int32_t)UINT32_C(0x00000140), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0018u}, /* call 028, record 25 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001b1), .point2_x=(int32_t)UINT32_C(0x0000014c), .point1_y=(int32_t)UINT32_C(0x000001b1), .point1_x=(int32_t)UINT32_C(0x0000013b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0019u}, /* call 029, record 27 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000043), .point2_x=(int32_t)UINT32_C(0x00000146), .point1_y=(int32_t)UINT32_C(0x0000004e), .point1_x=(int32_t)UINT32_C(0x00000148), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x001bu}, /* call 030, record 28 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000039), .point2_x=(int32_t)UINT32_C(0x00000142), .point1_y=(int32_t)UINT32_C(0x00000043), .point1_x=(int32_t)UINT32_C(0x00000146), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x001cu}, /* call 031, record 29 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000030), .point2_x=(int32_t)UINT32_C(0x0000013c), .point1_y=(int32_t)UINT32_C(0x00000039), .point1_x=(int32_t)UINT32_C(0x00000142), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x001du}, /* call 032, record 30 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000029), .point2_x=(int32_t)UINT32_C(0x00000133), .point1_y=(int32_t)UINT32_C(0x00000030), .point1_x=(int32_t)UINT32_C(0x0000013c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x001eu}, /* call 033, record 31 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000024), .point2_x=(int32_t)UINT32_C(0x00000128), .point1_y=(int32_t)UINT32_C(0x00000029), .point1_x=(int32_t)UINT32_C(0x00000133), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x001fu}, /* call 034, record 32 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000023), .point2_x=(int32_t)UINT32_C(0x0000011d), .point1_y=(int32_t)UINT32_C(0x00000024), .point1_x=(int32_t)UINT32_C(0x00000128), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0020u}, /* call 035, record 33 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000023), .point2_x=(int32_t)UINT32_C(0x00000070), .point1_y=(int32_t)UINT32_C(0x00000023), .point1_x=(int32_t)UINT32_C(0x0000011d), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0021u}, /* call 036, record 34 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000028), .point2_x=(int32_t)UINT32_C(0x00000063), .point1_y=(int32_t)UINT32_C(0x00000022), .point1_x=(int32_t)UINT32_C(0x00000079), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0022u}, /* call 037, record 35 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000033), .point2_x=(int32_t)UINT32_C(0x0000004e), .point1_y=(int32_t)UINT32_C(0x00000028), .point1_x=(int32_t)UINT32_C(0x00000064), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0023u}, /* call 038, record 36 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000045), .point2_x=(int32_t)UINT32_C(0x00000042), .point1_y=(int32_t)UINT32_C(0x00000032), .point1_x=(int32_t)UINT32_C(0x0000004f), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0024u}, /* call 039, record 37 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000005d), .point2_x=(int32_t)UINT32_C(0x00000039), .point1_y=(int32_t)UINT32_C(0x00000041), .point1_x=(int32_t)UINT32_C(0x00000044), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0025u}, /* call 040, record 38 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ae), .point2_x=(int32_t)UINT32_C(0x0000003b), .point1_y=(int32_t)UINT32_C(0x00000052), .point1_x=(int32_t)UINT32_C(0x0000003b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0026u}, /* call 041, record 39 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000be), .point2_x=(int32_t)UINT32_C(0x00000043), .point1_y=(int32_t)UINT32_C(0x000000a7), .point1_x=(int32_t)UINT32_C(0x0000003a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0027u}, /* call 042, record 40 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000c1), .point1_x=(int32_t)UINT32_C(0x0000003c), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0028u}, /* call 043, record 41 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d2), .point2_x=(int32_t)UINT32_C(0x00000029), .point1_y=(int32_t)UINT32_C(0x000000c7), .point1_x=(int32_t)UINT32_C(0x00000040), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0029u}, /* call 044, record 42 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000cb), .point1_x=(int32_t)UINT32_C(0x00000026), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x002au}, /* call 045, record 43 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000b9), .point2_x=(int32_t)UINT32_C(0x00000016), .point1_y=(int32_t)UINT32_C(0x000000ce), .point1_x=(int32_t)UINT32_C(0x0000001f), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x002bu}, /* call 046, record 44 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000001f), .point2_x=(int32_t)UINT32_C(0x00000016), .point1_y=(int32_t)UINT32_C(0x000000b9), .point1_x=(int32_t)UINT32_C(0x00000016), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x002cu}, /* call 047, record 45 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x86a0u, .score_high=0x0001u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000021), .point2_x=(int32_t)UINT32_C(0x0000000b), .point1_y=(int32_t)UINT32_C(0x00000021), .point1_x=(int32_t)UINT32_C(0x00000017), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x002du}, /* call 048, record 46 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000be), .point2_x=(int32_t)UINT32_C(0x0000000d), .point1_y=(int32_t)UINT32_C(0x0000001e), .point1_x=(int32_t)UINT32_C(0x0000000d), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x002eu}, /* call 049, record 47 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000fa), .point2_x=(int32_t)UINT32_C(0x00000020), .point1_y=(int32_t)UINT32_C(0x000000b9), .point1_x=(int32_t)UINT32_C(0x0000000c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x002fu}, /* call 050, record 48 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000fb), .point1_x=(int32_t)UINT32_C(0x00000019), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0030u}, /* call 051, record 49 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000140), .point2_x=(int32_t)UINT32_C(0x0000000a), .point1_y=(int32_t)UINT32_C(0x000000fb), .point1_x=(int32_t)UINT32_C(0x00000021), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0031u}, /* call 052, record 50 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001ab), .point2_x=(int32_t)UINT32_C(0x0000000c), .point1_y=(int32_t)UINT32_C(0x00000119), .point1_x=(int32_t)UINT32_C(0x0000000c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0032u}, /* call 053, record 51 */ {.render_bottom=0x00a3u, .render_right=0x00b4u, .render_top=0x0085u, .render_left=0x0096u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x03e8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0040u, .response_kick={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_auxiliary={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000017), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000a8), .point1_x=(int32_t)UINT32_C(0x000000a5), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0033u}, /* call 054, record 52 */ {.render_bottom=0x007du, .render_right=0x00ddu, .render_top=0x005fu, .render_left=0x00bfu, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x03e8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0040u, .response_kick={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_auxiliary={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000017), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000082), .point1_x=(int32_t)UINT32_C(0x000000ce), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0034u}, /* call 055, record 53 */ {.render_bottom=0x00b4u, .render_right=0x00eau, .render_top=0x0096u, .render_left=0x00ccu, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x03e8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0040u, .response_kick={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_auxiliary={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000017), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000b9), .point1_x=(int32_t)UINT32_C(0x000000db), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0035u}, /* call 056, record 54 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000138), .point1_x=(int32_t)UINT32_C(0x00000035), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0036u}, /* call 057, record 55 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_auxiliary={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000048), .point2_x=(int32_t)UINT32_C(0x00000030), .point1_y=(int32_t)UINT32_C(0xfffffffb), .point1_x=(int32_t)UINT32_C(0x00000006), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0037u}, /* call 058, record 56 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000000), .point1_x=(int32_t)UINT32_C(0xfffffff7), .coordinate_mode=0x0001u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0038u}, /* call 059, record 57 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0xffffffe6), .point2_x=(int32_t)UINT32_C(0xffffffd1), .point1_y=(int32_t)UINT32_C(0x00000007), .point1_x=(int32_t)UINT32_C(0xffffffff), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0039u}, /* call 060, record 58 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0xfffffff9), .point1_x=(int32_t)UINT32_C(0x00000003), .coordinate_mode=0x0001u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x003au}, /* call 061, record 59 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0xffffffd3), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000000), .point1_x=(int32_t)UINT32_C(0xfffffff8), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x003bu}, /* call 062, record 60 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000a), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000013a), .point1_x=(int32_t)UINT32_C(0x0000001d), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x003cu}, /* call 063, record 61 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000016f), .point2_x=(int32_t)UINT32_C(0x00000025), .point1_y=(int32_t)UINT32_C(0x00000138), .point1_x=(int32_t)UINT32_C(0x00000025), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x003du}, /* call 064, record 62 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7c, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000194), .point2_x=(int32_t)UINT32_C(0x0000006e), .point1_y=(int32_t)UINT32_C(0x0000016f), .point1_x=(int32_t)UINT32_C(0x00000025), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x003eu}, /* call 065, record 63 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000195), .point2_x=(int32_t)UINT32_C(0x00000013), .point1_y=(int32_t)UINT32_C(0x000001ac), .point1_x=(int32_t)UINT32_C(0x0000005c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x003fu}, /* call 066, record 64 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000137), .point2_x=(int32_t)UINT32_C(0x00000013), .point1_y=(int32_t)UINT32_C(0x00000195), .point1_x=(int32_t)UINT32_C(0x00000013), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0040u}, /* call 067, record 65 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000f), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001a1), .point1_x=(int32_t)UINT32_C(0x00000067), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0041u}, /* call 068, record 66 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001b1), .point2_x=(int32_t)UINT32_C(0x0000008d), .point1_y=(int32_t)UINT32_C(0x00000196), .point1_x=(int32_t)UINT32_C(0x00000070), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0042u}, /* call 069, record 67 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000009), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001b7), .point1_x=(int32_t)UINT32_C(0x00000086), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0043u}, /* call 070, record 68 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001af), .point2_x=(int32_t)UINT32_C(0x00000061), .point1_y=(int32_t)UINT32_C(0x000001bf), .point1_x=(int32_t)UINT32_C(0x00000082), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0044u}, /* call 071, record 69 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000138), .point1_x=(int32_t)UINT32_C(0x00000104), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0045u}, /* call 072, record 70 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000002d), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000000), .point1_x=(int32_t)UINT32_C(0x00000007), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0046u}, /* call 073, record 71 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0xffffffff), .point1_x=(int32_t)UINT32_C(0xfffffff9), .coordinate_mode=0x0001u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0047u}, /* call 074, record 72 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000016), .point2_x=(int32_t)UINT32_C(0xffffffd1), .point1_y=(int32_t)UINT32_C(0x00000008), .point1_x=(int32_t)UINT32_C(0x00000001), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0048u}, /* call 075, record 73 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0xfffffff8), .point1_x=(int32_t)UINT32_C(0x00000000), .coordinate_mode=0x0001u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0049u}, /* call 076, record 74 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_auxiliary={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0xffffffb9), .point2_x=(int32_t)UINT32_C(0x00000032), .point1_y=(int32_t)UINT32_C(0xfffffffe), .point1_x=(int32_t)UINT32_C(0xfffffff7), .coordinate_mode=0x0001u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x004au}, /* call 077, record 75 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000009), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000138), .point1_x=(int32_t)UINT32_C(0x0000011c), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x004bu}, /* call 078, record 76 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000195), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000137), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x004cu}, /* call 079, record 77 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001ac), .point2_x=(int32_t)UINT32_C(0x000000dd), .point1_y=(int32_t)UINT32_C(0x00000195), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x004du}, /* call 080, record 78 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7c, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000016f), .point2_x=(int32_t)UINT32_C(0x00000113), .point1_y=(int32_t)UINT32_C(0x00000194), .point1_x=(int32_t)UINT32_C(0x000000cd), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x004eu}, /* call 081, record 79 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000138), .point2_x=(int32_t)UINT32_C(0x00000113), .point1_y=(int32_t)UINT32_C(0x0000016f), .point1_x=(int32_t)UINT32_C(0x00000113), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x004fu}, /* call 082, record 80 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000f), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001a1), .point1_x=(int32_t)UINT32_C(0x000000d2), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0050u}, /* call 083, record 81 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000001bf), .point2_x=(int32_t)UINT32_C(0x000000b1), .point1_y=(int32_t)UINT32_C(0x000001af), .point1_x=(int32_t)UINT32_C(0x000000d8), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0051u}, /* call 084, record 82 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000009), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000001b7), .point1_x=(int32_t)UINT32_C(0x000000b3), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0052u}, /* call 085, record 83 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000196), .point2_x=(int32_t)UINT32_C(0x000000c9), .point1_y=(int32_t)UINT32_C(0x000001b1), .point1_x=(int32_t)UINT32_C(0x000000ac), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0053u}, /* call 086, record 84 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0004u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000dd), .point2_x=(int32_t)UINT32_C(0x00000028), .point1_y=(int32_t)UINT32_C(0x000000cd), .point1_x=(int32_t)UINT32_C(0x00000049), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0054u}, /* call 087, record 85 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000cd), .point2_x=(int32_t)UINT32_C(0x00000049), .point1_y=(int32_t)UINT32_C(0x000000c1), .point1_x=(int32_t)UINT32_C(0x00000043), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0055u}, /* call 088, record 86 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d1), .point2_x=(int32_t)UINT32_C(0x00000022), .point1_y=(int32_t)UINT32_C(0x000000dd), .point1_x=(int32_t)UINT32_C(0x00000028), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0056u}, /* call 089, record 87 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0055u, .flags=0x0006u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e7), .point2_x=(int32_t)UINT32_C(0x0000002a), .point1_y=(int32_t)UINT32_C(0x000000d5), .point1_x=(int32_t)UINT32_C(0x0000004c), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0000u, .index=0x0057u}, /* call 090, record 88 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0056u, .flags=0x0006u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ef), .point2_x=(int32_t)UINT32_C(0x0000002d), .point1_y=(int32_t)UINT32_C(0x000000dd), .point1_x=(int32_t)UINT32_C(0x0000004f), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0000u, .index=0x0058u}, /* call 091, record 89 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000072), .point1_x=(int32_t)UINT32_C(0x00000121), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0059u}, /* call 092, record 90 */ {.render_bottom=0x00f6u, .render_right=0x0132u, .render_top=0x00e7u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005au, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f7), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000111), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005au}, /* call 093, record 91 */ {.render_bottom=0x00f6u, .render_right=0x0132u, .render_top=0x00e7u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005au, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000111), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000111), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005bu}, /* call 094, record 92 */ {.render_bottom=0x00f6u, .render_right=0x0132u, .render_top=0x00e7u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005au, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f7), .point2_x=(int32_t)UINT32_C(0x0000012e), .point1_y=(int32_t)UINT32_C(0x000000f7), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005cu}, /* call 095, record 93 */ {.render_bottom=0x00e7u, .render_right=0x0132u, .render_top=0x00d9u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005du, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e7), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000100), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005du}, /* call 096, record 94 */ {.render_bottom=0x00e7u, .render_right=0x0132u, .render_top=0x00d9u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005du, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000100), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x00000100), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005eu}, /* call 097, record 95 */ {.render_bottom=0x00e7u, .render_right=0x0132u, .render_top=0x00d9u, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x005du, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e7), .point2_x=(int32_t)UINT32_C(0x0000012e), .point1_y=(int32_t)UINT32_C(0x000000e7), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x005fu}, /* call 098, record 96 */ {.render_bottom=0x00d8u, .render_right=0x0132u, .render_top=0x00cau, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0060u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d9), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000f1), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0060u}, /* call 099, record 97 */ {.render_bottom=0x00d8u, .render_right=0x0132u, .render_top=0x00cau, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0060u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f1), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000f1), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0061u}, /* call 100, record 98 */ {.render_bottom=0x00d8u, .render_right=0x0132u, .render_top=0x00cau, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0060u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d9), .point2_x=(int32_t)UINT32_C(0x0000012e), .point1_y=(int32_t)UINT32_C(0x000000d9), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0062u}, /* call 101, record 99 */ {.render_bottom=0x00c9u, .render_right=0x0132u, .render_top=0x00bbu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0063u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000c9), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000e2), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0063u}, /* call 102, record 100 */ {.render_bottom=0x00c9u, .render_right=0x0132u, .render_top=0x00bbu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0063u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e2), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000e2), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0064u}, /* call 103, record 101 */ {.render_bottom=0x00c9u, .render_right=0x0132u, .render_top=0x00bbu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0063u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ca), .point2_x=(int32_t)UINT32_C(0x0000012e), .point1_y=(int32_t)UINT32_C(0x000000ca), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0065u}, /* call 104, record 102 */ {.render_bottom=0x00bau, .render_right=0x0132u, .render_top=0x00aeu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0066u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000bb), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000d2), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0066u}, /* call 105, record 103 */ {.render_bottom=0x00bau, .render_right=0x0132u, .render_top=0x00aeu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0066u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d1), .point2_x=(int32_t)UINT32_C(0x00000124), .point1_y=(int32_t)UINT32_C(0x000000d2), .point1_x=(int32_t)UINT32_C(0x0000012e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0067u}, /* call 106, record 104 */ {.render_bottom=0x00bau, .render_right=0x0132u, .render_top=0x00aeu, .render_left=0x011au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0066u, .flags=0x208au, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000b7), .point2_x=(int32_t)UINT32_C(0x0000012e), .point1_y=(int32_t)UINT32_C(0x000000bc), .point1_x=(int32_t)UINT32_C(0x00000124), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0068u}, /* call 107, record 105 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e0), .point2_x=(int32_t)UINT32_C(0x00000094), .point1_y=(int32_t)UINT32_C(0x000000f2), .point1_x=(int32_t)UINT32_C(0x000000cb), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0069u}, /* call 108, record 106 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000e), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000d4), .point1_x=(int32_t)UINT32_C(0x0000009c), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x006au}, /* call 109, record 107 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x7f, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .response_auxiliary={{0x7f, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d9), .point2_x=(int32_t)UINT32_C(0x000000d7), .point1_y=(int32_t)UINT32_C(0x000000c6), .point1_x=(int32_t)UINT32_C(0x0000009e), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x006bu}, /* call 110, record 108 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000e), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000e6), .point1_x=(int32_t)UINT32_C(0x000000d2), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x006cu}, /* call 111, record 109 */ {.render_bottom=0x00ecu, .render_right=0x00ceu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x006du, .flags=0x2092u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f6), .point2_x=(int32_t)UINT32_C(0x000000bb), .point1_y=(int32_t)UINT32_C(0x000000fd), .point1_x=(int32_t)UINT32_C(0x000000d1), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x006du}, /* call 112, record 110 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000fd), .point2_x=(int32_t)UINT32_C(0x000000d1), .point1_y=(int32_t)UINT32_C(0x000000ee), .point1_x=(int32_t)UINT32_C(0x000000d6), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x006eu}, /* call 113, record 111 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ea), .point2_x=(int32_t)UINT32_C(0x000000bf), .point1_y=(int32_t)UINT32_C(0x000000f6), .point1_x=(int32_t)UINT32_C(0x000000bb), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x006fu}, /* call 114, record 112 */ {.render_bottom=0x00e7u, .render_right=0x00bfu, .render_top=0x00d1u, .render_left=0x00b2u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0070u, .flags=0x2092u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ef), .point2_x=(int32_t)UINT32_C(0x000000a9), .point1_y=(int32_t)UINT32_C(0x000000f9), .point1_x=(int32_t)UINT32_C(0x000000c6), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0070u}, /* call 115, record 113 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f9), .point2_x=(int32_t)UINT32_C(0x000000c6), .point1_y=(int32_t)UINT32_C(0x000000ed), .point1_x=(int32_t)UINT32_C(0x000000ca), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0071u}, /* call 116, record 114 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e3), .point2_x=(int32_t)UINT32_C(0x000000ad), .point1_y=(int32_t)UINT32_C(0x000000ef), .point1_x=(int32_t)UINT32_C(0x000000a9), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0072u}, /* call 117, record 115 */ {.render_bottom=0x00e2u, .render_right=0x00b1u, .render_top=0x00ccu, .render_left=0x00a3u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0073u, .flags=0x2092u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e9), .point2_x=(int32_t)UINT32_C(0x00000099), .point1_y=(int32_t)UINT32_C(0x000000f3), .point1_x=(int32_t)UINT32_C(0x000000b6), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0073u}, /* call 118, record 116 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000f3), .point2_x=(int32_t)UINT32_C(0x000000b6), .point1_y=(int32_t)UINT32_C(0x000000e7), .point1_x=(int32_t)UINT32_C(0x000000ba), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0074u}, /* call 119, record 117 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000dd), .point2_x=(int32_t)UINT32_C(0x0000009d), .point1_y=(int32_t)UINT32_C(0x000000e9), .point1_x=(int32_t)UINT32_C(0x00000099), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0075u}, /* call 120, record 118 */ {.render_bottom=0x00ddu, .render_right=0x00a3u, .render_top=0x00c6u, .render_left=0x0095u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0076u, .flags=0x2092u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000e2), .point2_x=(int32_t)UINT32_C(0x0000008b), .point1_y=(int32_t)UINT32_C(0x000000ed), .point1_x=(int32_t)UINT32_C(0x000000a3), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0076u}, /* call 121, record 119 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000ed), .point2_x=(int32_t)UINT32_C(0x000000a3), .point1_y=(int32_t)UINT32_C(0x000000e1), .point1_x=(int32_t)UINT32_C(0x000000a7), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0077u}, /* call 122, record 120 */ {.render_bottom=0x00dcu, .render_right=0x00cdu, .render_top=0x00d6u, .render_left=0x00c0u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000d3), .point2_x=(int32_t)UINT32_C(0x00000090), .point1_y=(int32_t)UINT32_C(0x000000e2), .point1_x=(int32_t)UINT32_C(0x0000008b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0078u}, /* call 123, record 121 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x07d0u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0400u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000a0), .point2_x=(int32_t)UINT32_C(0x00000054), .point1_y=(int32_t)UINT32_C(0x00000095), .point1_x=(int32_t)UINT32_C(0x00000069), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0079u}, /* call 124, record 122 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000095), .point2_x=(int32_t)UINT32_C(0x00000069), .point1_y=(int32_t)UINT32_C(0x0000008b), .point1_x=(int32_t)UINT32_C(0x00000065), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x007au}, /* call 125, record 123 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000096), .point2_x=(int32_t)UINT32_C(0x00000050), .point1_y=(int32_t)UINT32_C(0x000000a0), .point1_x=(int32_t)UINT32_C(0x00000054), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x007bu}, /* call 126, record 124 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000097), .point2_x=(int32_t)UINT32_C(0x00000057), .point1_y=(int32_t)UINT32_C(0x0000008b), .point1_x=(int32_t)UINT32_C(0x0000006f), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x007cu}, /* call 127, record 125 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000008), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000092), .point1_x=(int32_t)UINT32_C(0x00000054), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x007du}, /* call 128, record 126 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000006c), .point2_x=(int32_t)UINT32_C(0x0000004d), .point1_y=(int32_t)UINT32_C(0x00000093), .point1_x=(int32_t)UINT32_C(0x0000004d), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x007eu}, /* call 129, record 127 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000006a), .point2_x=(int32_t)UINT32_C(0x00000057), .point1_y=(int32_t)UINT32_C(0x0000006c), .point1_x=(int32_t)UINT32_C(0x0000004d), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x007fu}, /* call 130, record 128 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000008d), .point2_x=(int32_t)UINT32_C(0x0000006e), .point1_y=(int32_t)UINT32_C(0x0000006a), .point1_x=(int32_t)UINT32_C(0x00000057), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x0080u}, /* call 131, record 129 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000060), .point1_x=(int32_t)UINT32_C(0x00000060), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0081u}, /* call 132, record 130 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000045), .point1_x=(int32_t)UINT32_C(0x00000073), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0082u}, /* call 133, record 131 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000050), .point1_x=(int32_t)UINT32_C(0x00000093), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0083u}, /* call 134, record 132 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000070), .point1_x=(int32_t)UINT32_C(0x00000093), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0084u}, /* call 135, record 133 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000007b), .point1_x=(int32_t)UINT32_C(0x00000073), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0085u}, /* call 136, record 134 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000014), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000060), .point1_x=(int32_t)UINT32_C(0x0000007c), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0086u}, /* call 137, record 135 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000004e), .point1_x=(int32_t)UINT32_C(0x00000064), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0087u}, /* call 138, record 136 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000044), .point1_x=(int32_t)UINT32_C(0x00000085), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0088u}, /* call 139, record 137 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000060), .point1_x=(int32_t)UINT32_C(0x0000009a), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x0089u}, /* call 140, record 138 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000007d), .point1_x=(int32_t)UINT32_C(0x00000085), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x008au}, /* call 141, record 139 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000072), .point1_x=(int32_t)UINT32_C(0x00000064), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x008bu}, /* call 142, record 140 */ {.render_bottom=0x00bcu, .render_right=0x001fu, .render_top=0x00aeu, .render_left=0x0011u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x03e8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000ca), .point1_x=(int32_t)UINT32_C(0x00000018), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x008cu}, /* call 143, record 141 */ {.render_bottom=0x00a9u, .render_right=0x0019u, .render_top=0x009bu, .render_left=0x000bu, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x03e8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000b6), .point1_x=(int32_t)UINT32_C(0x00000012), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x008du}, /* call 144, record 142 */ {.render_bottom=0x0096u, .render_right=0x0018u, .render_top=0x0088u, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000a4), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x008eu}, /* call 145, record 143 */ {.render_bottom=0x0083u, .render_right=0x0018u, .render_top=0x0075u, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x05dcu, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000091), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x008fu}, /* call 146, record 144 */ {.render_bottom=0x0070u, .render_right=0x0018u, .render_top=0x0062u, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x07d0u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000007e), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0090u}, /* call 147, record 145 */ {.render_bottom=0x005du, .render_right=0x0018u, .render_top=0x004fu, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x07d0u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000006b), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0091u}, /* call 148, record 146 */ {.render_bottom=0x004fu, .render_right=0x0018u, .render_top=0x003cu, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x09c4u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000057), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0092u}, /* call 149, record 147 */ {.render_bottom=0x0037u, .render_right=0x0018u, .render_top=0x0029u, .render_left=0x000au, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0bb8u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x00c0u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000c), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000044), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0093u}, /* call 150, record 148 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0001u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000013), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000002b), .point1_x=(int32_t)UINT32_C(0x00000011), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0003u, .active=0x0001u, .index=0x0094u}, /* call 151, record 149 */ {.render_bottom=0x0049u, .render_right=0x004du, .render_top=0x0039u, .render_left=0x003cu, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x01f4u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0140u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000010), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000055), .point1_x=(int32_t)UINT32_C(0x00000044), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0000u, .index=0x0095u}, /* call 152, record 150 */ {.render_bottom=0x0032u, .render_right=0x00d3u, .render_top=0x0028u, .render_left=0x00c7u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x01f4u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x1000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000043), .point1_x=(int32_t)UINT32_C(0x000000cd), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0096u}, /* call 153, record 151 */ {.render_bottom=0x0033u, .render_right=0x00f0u, .render_top=0x0029u, .render_left=0x00e4u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x01f4u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x1000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000042), .point1_x=(int32_t)UINT32_C(0x000000e9), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0097u}, /* call 154, record 152 */ {.render_bottom=0x0034u, .render_right=0x010du, .render_top=0x002au, .render_left=0x0101u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x01f4u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x1000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000042), .point1_x=(int32_t)UINT32_C(0x00000108),L@ .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0001u, .index=0x0098u}, /* call 155, record 153 */ {.render_bottom=0x0188u, .render_right=0x0017u, .render_top=0x0158u, .render_left=0x000bu, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0100u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000194), .point2_x=(int32_t)UINT32_C(0x0000001b), .point1_y=(int32_t)UINT32_C(0x00000154), .point1_x=(int32_t)UINT32_C(0x00000006), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0000u, .index=0x0099u}, /* call 156, record 154 */ {.render_bottom=0x018au, .render_right=0x012fu, .render_top=0x015au, .render_left=0x0123u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0002u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0100u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000192), .point2_x=(int32_t)UINT32_C(0x00000133), .point1_y=(int32_t)UINT32_C(0x00000154), .point1_x=(int32_t)UINT32_C(0x0000011b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0004u, .active=0x0000u, .index=0x009au}, /* call 157, record 155 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000004f), .point1_x=(int32_t)UINT32_C(0x000000b7), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x009bu}, /* call 158, record 156 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000034), .point2_x=(int32_t)UINT32_C(0x000000b8), .point1_y=(int32_t)UINT32_C(0x0000004b), .point1_x=(int32_t)UINT32_C(0x000000ac), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x009cu}, /* call 159, record 157 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000038), .point1_x=(int32_t)UINT32_C(0x000000c3), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x009du}, /* call 160, record 158 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000052), .point2_x=(int32_t)UINT32_C(0x000000c1), .point1_y=(int32_t)UINT32_C(0x0000003d), .point1_x=(int32_t)UINT32_C(0x000000cd), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x009eu}, /* call 161, record 159 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000004f), .point1_x=(int32_t)UINT32_C(0x000000d4), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x009fu}, /* call 162, record 160 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000034), .point2_x=(int32_t)UINT32_C(0x000000d5), .point1_y=(int32_t)UINT32_C(0x0000004b), .point1_x=(int32_t)UINT32_C(0x000000c9), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a0u}, /* call 163, record 161 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000038), .point1_x=(int32_t)UINT32_C(0x000000e0), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x00a1u}, /* call 164, record 162 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000052), .point2_x=(int32_t)UINT32_C(0x000000de), .point1_y=(int32_t)UINT32_C(0x0000003d), .point1_x=(int32_t)UINT32_C(0x000000ea), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a2u}, /* call 165, record 163 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000004f), .point1_x=(int32_t)UINT32_C(0x000000f1), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x00a3u}, /* call 166, record 164 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000034), .point2_x=(int32_t)UINT32_C(0x000000f2), .point1_y=(int32_t)UINT32_C(0x0000004b), .point1_x=(int32_t)UINT32_C(0x000000e6), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a4u}, /* call 167, record 165 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x0000000b), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000038), .point1_x=(int32_t)UINT32_C(0x000000fd), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x00a5u}, /* call 168, record 166 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0001u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000052), .point2_x=(int32_t)UINT32_C(0x000000fb), .point1_y=(int32_t)UINT32_C(0x0000003d), .point1_x=(int32_t)UINT32_C(0x00000107), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a6u}, /* call 169, record 167 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000009), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x0000010c), .point1_x=(int32_t)UINT32_C(0x0000012b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0001u, .active=0x0001u, .index=0x00a7u}, /* call 170, record 168 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000111), .point2_x=(int32_t)UINT32_C(0x00000123), .point1_y=(int32_t)UINT32_C(0x00000123), .point1_x=(int32_t)UINT32_C(0x0000012a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a8u}, /* call 171, record 169 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x7d, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x0000004e), .point2_x=(int32_t)UINT32_C(0x00000148), .point1_y=(int32_t)UINT32_C(0x000001ba), .point1_x=(int32_t)UINT32_C(0x00000148), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00a9u}, /* call 172, record 170 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x00000064), .point2_x=(int32_t)UINT32_C(0x0000012a), .point1_y=(int32_t)UINT32_C(0x000001a4), .point1_x=(int32_t)UINT32_C(0x0000012a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00aau}, /* call 173, record 171 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000be), .point2_x=(int32_t)UINT32_C(0x0000012a), .point1_y=(int32_t)UINT32_C(0x0000010b), .point1_x=(int32_t)UINT32_C(0x0000012a), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00abu}, /* call 174, record 172 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000009), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x000000bf), .point1_x=(int32_t)UINT32_C(0x0000012b), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0001u, .active=0x0001u, .index=0x00acu}, /* call 175, record 173 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}, .radius=(int32_t)UINT32_C(0x00000000), .point2_y=(int32_t)UINT32_C(0x000000a5), .point2_x=(int32_t)UINT32_C(0x0000012a), .point1_y=(int32_t)UINT32_C(0x000000bc), .point1_x=(int32_t)UINT32_C(0x00000123), .coordinate_mode=0x0000u, .subtype=0x0000u, .type=0x0002u, .active=0x0001u, .index=0x00adu}, /* call 176, record 174 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x66, 0x66, 0x66, 0x66, 0x66}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000000), .point1_x=(int32_t)UINT32_C(0x00000000), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0001u, .index=0x00aeu}, /* call 177, record 175 */ {.render_bottom=0x0000u, .render_right=0x0000u, .render_top=0x0000u, .render_left=0x0000u, .fallback_y_adjust=(int32_t)UINT32_C(0x00000000), .fallback_x_adjust=(int32_t)UINT32_C(0x00000000), .layer_mask=0x0003u, .score_low=0x0000u, .score_high=0x0000u, .contact_state=0x0000u, .flags=0x0000u, .response_kick={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_auxiliary={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_tangent={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, .response_normal={{0x80, 0x66, 0x66, 0x66, 0x66, 0x66}}, .radius=(int32_t)UINT32_C(0x00000011), .point2_y=(int32_t)UINT32_C(0x00000000), .point2_x=(int32_t)UINT32_C(0x00000000), .point1_y=(int32_t)UINT32_C(0x00000000), .point1_x=(int32_t)UINT32_C(0x00000000), .coordinate_mode=0x0000u, .subtype=0x0001u, .type=0x0001u, .active=0x0000u, .index=0x00afu}, }; 8xs /* TDKPIN-specific TWindow-derived constructors from Code1. */ #include "tdkpin_game_windows.h" static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } /* 1000:01d3 -- fixed 640x480 main window centered on the Win16 screen. */ Win16FarPtr tdkpin_main_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { BorlandObjectCallFrame frame = {window, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = object_windows_window_construct( frame.object, 0, title, parent); win16_write_u16(frame.object, 0x2d, 640); win16_write_u16(frame.object, 0x2f, 480); INT16 x = (INT16)(GetSystemMetrics16(0) / 2 - 640 / 2); INT16 y = (INT16)(GetSystemMetrics16(1) / 2 - 480 / 2); win16_write_u16(frame.object, 0x29, (uint16_t)x); win16_write_u16(frame.object, 0x2b, (uint16_t)y); win16_write_u32(frame.object, 0x21, 0x86ca0000u); return frame.object; } /* 1000:5aea -- centered 360x300 child/overlay window with additive styles. */ Win16FarPtr tdkpin_centered_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { BorlandObjectCallFrame frame = {window, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = object_windows_window_construct( frame.object, 0, title, parent); write_far(frame.object, 0x41, parent); win16_write_u16(frame.object, 0x2d, 360); win16_write_u16(frame.object, 0x2f, 300); win16_write_u16(frame.object, 0x29, 140); win16_write_u16(frame.object, 0x2b, 80); uint32_t style = win16_read_u32(win16_far_add_offset(frame.object, 0x21)); win16_write_u32(frame.object, 0x21, style | 0x46800002u); (void)SetFocus16(win16_read_u16(win16_far_add_offset(frame.object, 4))); return frame.object; } /* 1000:6073 -- fixed 640x460 origin window with replaced style dword. */ Win16FarPtr tdkpin_full_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { BorlandObjectCallFrame frame = {window, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = object_windows_window_construct( frame.object, 0, title, parent); write_far(frame.object, 0x41, parent); win16_write_u16(frame.object, 0x2d, 640); win16_write_u16(frame.object, 0x2f, 460); win16_write_u16(frame.object, 0x29, 0); win16_write_u16(frame.object, 0x2b, 0); win16_write_u32(frame.object, 0x21, 0x46000002u); (void)SetFocus16(win16_read_u16(win16_far_add_offset(frame.object, 4))); return frame.object; } j#x7#ifndef TDKPIN_GAME_WINDOWS_H #define TDKPIN_GAME_WINDOWS_H #include "tdkpin_window_placement.h" Win16FarPtr tdkpin_main_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent); /* 1000:01d3 */ Win16FarPtr tdkpin_centered_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent); /* 1000:5aea */ Win16FarPtr tdkpin_full_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent); /* 1000:6073 */ #endif 0x=o6xtH8If;X@IYJtb([JNڭG"{|__} ?Iゖ8M4YMJP,Ed1de’<;nhQ^ׯ=ɢtS?n,POVHݚ$eb޳d%=+ "iJMi1&S/7rYR7p8(>[> 8pSҔF,/zZ(@e"}# 6y1Z DwsE{bЇz'&%]ӌ)Xt>Obx(F&f&7[ޓtKO1D?DG{|zx MLvG!$G0ak재4N6-i a%i- YȦb?޾%/?sO;Ǐs#E,p>Eh GVQ`?HAAWI ڻsʞ"n8Bfd4%!<\.M^&BQ;aN4 M?\g%,d@X?paeΟ-m?{]o -!iBhE~~{؟IƁlH, gy8AlPNIVL #Ŋ !Zﱷ*o J}7%aJѠ/ 5z`l2/޴V1TjyPx!Oc~ЈA 06Y#)Di/S3ZS3hfbjFw2MmIX$&#BBn&x;ϋ"ϛx[ǚ\vkM8`є2!,6;{Nd](NYS{7TfQ%r rC&ﻷUc8P;[c#>ſm-=rz fvH_H -Ω99 0"h& J!DjMʏ5YQiQٛHƍebr&M6CAm.OSH%=UFJ-Bᴙ+ `YkyΓr)_6W*'y,ǁpt ,eoӄfo|5 Ѷ@M*cغ]1x;"0~:%Xo>C7fh~ɨ0jlGwS-o1BGŨ1Z$cI`h¼H_$A2Ԭ=͇qו]N4sc / a1#{Diod2ðSy^V1-Y Vp=_lo7ڗ(;IƇSBkē ̘j?t8jJ@L&mB1Y 8'z4k9 Djϝz2KO͡= ;A3)k޶\{yzwgInNYfmߕX8y77T|yRy >O-a0=SϟKCfJ5=`ê~6l ch xOJAja!hK(/ÚV\ jnP+*Ui(NgÎn^o4-sԌTn+.(-Y^Y/mcD>ɷ%kӊ&yv4pA%Z(b= Un-i]Ζ.#%*=֔>[`N?S/-=UAgqhO#~>rwPY)-ݭ|+"8s_1 .r!#𺵤i23=ՖvY;9 ˿Wp~ 77i[SmV@qBׅs[z@ne<dIU&,a[i_F) xx[k[x\^Mʹ'YndBHʱCpODTy%I2Ye4".Fx>sPlSZ{rl GS/Gk,ΡBr>WlP9/7#?]>]fam~ X`q O]ҫ+]j56g\0hWF(7tzs^ 4-#i yG•ɴ?D&=ш8ȴoA GJcش (puqU%VX᜞&?*)^h%'ýf,G Ap,zS aRQ)_'\]p{[pCd'5#c, !].EqDM0fH;>^:"㲺#e??du`(3%XMdߣAuVT_‰:5stq)Klm£Lh)`wE]GJ898#mȸrg%Ә0_oR'jwxuN̿c"p7g1D穂E2YE!bNZ~}sVknޖؘpGCyIR\)VHuցrОbGܳG:/Z^E :8`|-qx3yמajS짓KZ4̟V/X`H*/ꟐV #ڵeun9gԆgtЮe so& P c~x /,,{: Sΰ&GuW, Z@3m(3bw8<(FzbLG/5Lk'БDlu,kͶprVXU%8 n(o1)_oSl=Q`a-ƤZ {˴Jy'kܩ/G"訚vQ3i~g=>h' O+)}mצ¹8Jv;tsJ5k-f#jbrWxtykV!T:UDڝxʻznu,˪+tIpJ5m\UYsrmHY4~BRywF+F/n.ۤI0fgpL2QZ*cv"Fî4mXUniWNe|qn00I{l81V];ag&N9zK o+qç7lF[*6ҎL=M^L/u]:O-_tŤ5t׬0˜~)L.?u;nlZoIU|ScvH7bhcJahv_$ Yjƃ+4.ӗa͹ZifY-Gc ~d:80~$~de+^ccDZ!mLAÃo_zdT%v5˲[qZ#:Z!0g,_O S7t)_wr\JPĺOug`D5q*jr!bݰ$|tzt+`mHZ"D *%2c9qs{WKc"e%,/(%Q7X? aq (hIfFj|9AMCn,gֺѬ_b"a\ӎ= ʫn?QɒԶk[@ .ŝX7f:OOȴ\k1RTֳdugCHFTA#0|-O_޼ALX{V%a<~FR"XZQE˅;y*Cwc=H39>uLPfl >>τ?eޢZwÆf1V"a= rrvJ*wȻ՟:KuN2gkxeSH!V;NIwhW=_47\`&uw;t*B=k c 4`_[.&m ;X%f;!%oQU\vIlEjQ ,lĿ>R+9ANu*/_W wkkthp~T128k\r詓xZmZeVU%u ,[3GLGֲq,`wxuQ\mNıJoZRH!WQ]\r6Ϳt@s!*Qu}7F$/1=S)6ow9ARgx*p&/biQHs"ij(xbrDmԐ*Cڨ.;T/[nH<q,: 0-6P"@Jl䛞0& <0"צgQ x"X#X]iIĒ𲽄5׭a)Zy`ۀ8+0b%AR.ejٱ!6B-."!9䯕k,;9 7H']4pk(;NbˡU@vqtPuGa6Op LZNq:]%K>,a{PMET X$sCL!㵆RۋWԟhD wyI`^fǴ}抇IOb|RG]NvYhl<>]ICp+@he&1 SUR @Q[`ǮVb#uu:qC;z+mfoHL|3D KS^k)Y\x%ZskD)Ɔcn≳@0GMCmXDϧ}J?M]kc6[Uy!WM5 ^gh:&nب/~PK!bc+'\4g[anE1ٶ:<~hp` McZiO(l t(v z"nY#VtA`Чa``yʘwDH Q [*2r^v5i\I<,ulK~B )͛~zum%=V9n;`?4ӣF_m9ϖ*-M$㶼xVnH+%%&16& _rj4TE-pM`0G^3 c_vszϿvv C Oh.J]*`H=h__fT#Ɉ x!3|~Fm-0O0_SWEE`5_'L?>woFKUđԻ]kY@+oBqZcY|y-U]iѲ6gmSރ6ټNEE:=e,x0/* Application-side Win16 global-memory helpers from Code2. */ #include "tdkpin_global_memory.h" /* 1008:15c7 — allocate a movable/fixed block and return its locked far view. */ Win16FarPtr tdkpin_global_allocate_locked(UINT16 flags, uint32_t bytes) { HGLOBAL16 allocation = GlobalAlloc16(flags, bytes); return GlobalLock16(allocation); } /* * 1008:15e7 — recover the allocation handle from the pointer selector, unlock * it, then free it. The offset half of the supplied far pointer is ignored. */ void tdkpin_global_unlock_and_free(Win16FarPtr block) { HGLOBAL16 allocation = GlobalHandle16(win16_far_selector(block)); (void)GlobalUnlock16(allocation); (void)GlobalFree16(allocation); } /3x#ifndef TDKPIN_GLOBAL_MEMORY_H #define TDKPIN_GLOBAL_MEMORY_H #include "tdkpin_win16.h" Win16FarPtr tdkpin_global_allocate_locked( UINT16 flags, uint32_t bytes); /* 1008:15c7 */ void tdkpin_global_unlock_and_free(Win16FarPtr block); /* 1008:15e7 */ #endif 4Rx$"/* Borland local/global Win16 heap core reconstructed from Code5. */ #include "tdkpin_heap.h" static Win16FarPtr heap_address(uint16_t selector, uint16_t offset) { return win16_make_far_pointer(selector, offset); } static uint16_t heap_read(uint16_t selector, uint16_t offset) { return win16_read_u16(heap_address(selector, offset)); } static void heap_write(uint16_t selector, uint16_t offset, uint16_t value) { win16_write_u16(heap_address(selector, 0), offset, value); } static uint16_t align_heap_size(uint16_t bytes) { return (uint16_t)((bytes + 3u) & 0xfffcu); } uint32_t borland_heap_free_space(void) { uint32_t total = GetFreeSpace16(0x1000); uint16_t selector = g_borland_heap_segment_head; if (selector != 0) { do { total += heap_read(selector, 8); selector = heap_read(selector, 10); } while (selector != g_borland_heap_segment_head); } return total; } uint32_t borland_heap_largest_block(void) { uint32_t largest = GlobalCompact16(0); if ((largest >> 16) != 0) { return largest; } uint16_t selector = g_borland_heap_segment_head; if (selector != 0) { do { uint16_t local_free = heap_read(selector, 8); if ((uint16_t)largest < local_free) { largest = local_free; } selector = heap_read(selector, 10); } while (selector != g_borland_heap_segment_head); } return largest; } BorlandLocalAllocation borland_local_allocate_in_segment( uint16_t selector, uint16_t aligned_bytes) { uint16_t previous_link = 4; while (true) { uint16_t block = heap_read(selector, previous_link); if (block == 0) { return (BorlandLocalAllocation){0, true}; } uint16_t block_size = heap_read(selector, (uint16_t)(block + 2)); if (block_size < aligned_bytes) { previous_link = block; continue; } uint16_t remaining = (uint16_t)(block_size - aligned_bytes); uint16_t replacement = heap_read(selector, block); if (remaining != 0) { replacement = (uint16_t)(block + aligned_bytes); heap_write(selector, replacement, heap_read(selector, block)); heap_write(selector, (uint16_t)(replacement + 2), remaining); } heap_write(selector, previous_link, replacement); heap_write( selector, 8, (uint16_t)(heap_read(selector, 8) - aligned_bytes)); return (BorlandLocalAllocation){block, false}; } } void borland_local_merge_next(uint16_t selector, uint16_t block) { uint16_t next = heap_read(selector, block); uint16_t adjacent = (uint16_t)(block + heap_read(selector, (uint16_t)(block + 2))); if (adjacent == next) { heap_write(selector, block, heap_read(selector, next)); heap_write( selector, (uint16_t)(block + 2), (uint16_t)(heap_read(selector, (uint16_t)(block + 2)) + heap_read(selector, (uint16_t)(next + 2)))); } } uint16_t borland_create_local_heap_segment(void) { Win16FarPtr allocation = borland_global_allocate(g_borland_heap_segment_bytes); if (allocation == 0) { return 0; } uint16_t selector = win16_far_selector(allocation); uint16_t free_bytes = (uint16_t)(g_borland_heap_segment_bytes - BORLAND_LOCAL_HEAP_HEADER_BYTES); heap_write(selector, 0, BORLAND_LOCAL_HEAP_MAGIC); heap_write(selector, 2, 0); heap_write(selector, 4, BORLAND_LOCAL_HEAP_HEADER_BYTES); heap_write(selector, 6, 0); heap_write(selector, 8, free_bytes); uint16_t next = selector; if (g_borland_heap_segment_head != 0) { next = heap_read(g_borland_heap_segment_head, 10); heap_write(g_borland_heap_segment_head, 10, selector); } heap_write(selector, 10, next); heap_write(selector, 12, 0); heap_write(selector, 14, free_bytes); return selector; } static BorlandAllocationAttempt borland_try_local_allocation(uint16_t bytes) { uint16_t aligned = align_heap_size(bytes); uint16_t selector = g_borland_heap_segment_head; if (selector != 0) { do { BorlandLocalAllocation local = borland_local_allocate_in_segment(selector, aligned); if (!local.failed) { g_borland_heap_segment_head = selector; return (BorlandAllocationAttempt){ heap_address(selector, local.offset), false}; } selector = heap_read(selector, 10); } while (selector != g_borland_heap_segment_head); } selector = borland_create_local_heap_segment(); if (selector == 0) { return (BorlandAllocationAttempt){0, true}; } BorlandLocalAllocation local = borland_local_allocate_in_segment(selector, aligned); if (local.failed) { return (BorlandAllocationAttempt){0, true}; } g_borland_heap_segment_head = selector; return (BorlandAllocationAttempt){ heap_address(selector, local.offset), false}; } BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes) { if (bytes == 0) { return (BorlandAllocationAttempt){0, false}; } while (true) { BorlandAllocationAttempt result; if (bytes < g_borland_local_heap_limit) { result = borland_try_local_allocation(bytes); if (!result.failed) { return result; } Win16FarPtr global = borland_global_allocate(bytes); if (global != 0) { return (BorlandAllocationAttempt){global, false}; } } else { Win16FarPtr global = borland_global_allocate(bytes); if (global != 0) { return (BorlandAllocationAttempt){global, false}; } if (g_borland_local_heap_limit != 0 && bytes <= (uint16_t)(g_borland_heap_segment_bytes - BORLAND_LOCAL_HEAP_HEADER_BYTES)) { result = borland_try_local_allocation(bytes); if (!result.failed) { return result; } } } uint16_t action = g_borland_heap_error_handler == 0 ? 0 : win16_call_pascal_u16(g_borland_heap_error_handler, bytes); if (action > 1) { continue; } return (BorlandAllocationAttempt){0, action == 0}; } } static bool borland_global_free_selector(uint16_t selector) { if (selector == win16_far_selector(win16_dgroup_pointer(0))) { return true; } HGLOBAL16 handle = GlobalHandle16(selector); if (handle == 0) { return true; } (void)GlobalUnlock16(handle); (void)GlobalFree16(handle); return false; } static bool borland_release_empty_local_segment(uint16_t selector) { uint16_t next = heap_read(selector, 10); uint16_t new_head = 0; if (next != selector) { uint16_t previous = g_borland_heap_segment_head; while (heap_read(previous, 10) != selector) { previous = heap_read(previous, 10); } heap_write(previous, 10, next); new_head = previous; } g_borland_heap_segment_head = new_head; return borland_global_free_selector(selector); } bool borland_try_free_mem(Win16FarPtr block, uint16_t bytes) { if (bytes == 0) { return false; } uint16_t selector = win16_far_selector(block); uint16_t offset = win16_far_offset(block); if (offset == 0) { return borland_global_free_selector(selector); } uint16_t aligned = align_heap_size(bytes); if (heap_read(selector, 0) != BORLAND_LOCAL_HEAP_MAGIC || (offset & 3) != 0) { return true; } uint16_t previous_link = 4; uint16_t current = heap_read(selector, previous_link); while (current != 0 && offset > current) { previous_link = current; current = heap_read(selector, current); } if (offset == current) { return true; } heap_write(selector, offset, current); heap_write(selector, (uint16_t)(offset + 2), aligned); uint16_t free_bytes = (uint16_t)(heap_read(selector, 8) + aligned); heap_write(selector, 8, free_bytes); if ((uint16_t)(free_bytes + BORLAND_LOCAL_HEAP_HEADER_BYTES) == g_borland_heap_segment_bytes) { return borland_release_empty_local_segment(selector); } borland_local_merge_next(selector, offset); heap_write(selector, previous_link, offset); borland_local_merge_next(selector, previous_link); return false; } D|>x#ifndef TDKPIN_HEAP_H #define TDKPIN_HEAP_H #include "tdkpin_borland_runtime.h" enum { BORLAND_LOCAL_HEAP_MAGIC = 0x5054, BORLAND_LOCAL_HEAP_HEADER_BYTES = 12, }; extern uint16_t g_borland_heap_segment_head; /* 1028:0706 */ extern uint16_t g_borland_local_heap_limit; /* 1028:0708 */ extern uint16_t g_borland_heap_segment_bytes; /* 1028:070a */ typedef struct { uint16_t offset; bool failed; } BorlandLocalAllocation; BorlandLocalAllocation borland_local_allocate_in_segment( uint16_t selector, uint16_t aligned_bytes); /* 1020:02a6 */ void borland_local_merge_next(uint16_t selector, uint16_t block); /* 1020:0327 */ uint16_t borland_create_local_heap_segment(void); /* 1020:026a */ BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes); /* 1020:01ca */ bool borland_try_free_mem(Win16FarPtr block, uint16_t bytes); /* 1020:02d7 */ uint32_t borland_heap_free_space(void); /* 1020:0167 */ uint32_t borland_heap_largest_block(void); /* 1020:0195 */ #endif ?x> 8 : residue)); } } /* * 1000:a8ea -- persist the complete high-score table. * * The binary's 260-byte local payload has the 220-byte name table first and * the 40-byte encrypted score table immediately after it. Each one-based * global score is XORed with the same static dword key. The file order is * header, encrypted scores, then names, despite the reverse local ordering. */ void tdkpin_save_highscores(uint16_t ignored_static_link) { (void)ignored_static_link; HFILE16 file = LCreate16(win16_dgroup_pointer(HIGHSCORE_FILE_NAME), 0); if (file == (HFILE16)-1) { return; } uint8_t local_payload[HIGHSCORE_NAMES_BYTES + HIGHSCORE_SCORES_BYTES]; Win16FarPtr names = win16_stack_pointer(local_payload); Win16FarPtr encrypted_scores = win16_far_add_offset(names, HIGHSCORE_NAMES_BYTES); borland_fill_bytes(names, HIGHSCORE_NAMES_BYTES, 0); uint32_t key = win16_read_u32( win16_dgroup_pointer(HIGHSCORE_XOR_KEY)); for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint16_t score_offset = (uint16_t)( HIGHSCORE_SCORE_INDEX_ZERO + index * 4u); uint16_t name_offset = (uint16_t)( HIGHSCORE_NAME_INDEX_ZERO + index * TDKPIN_HIGHSCORE_NAME_BYTES); win16_write_u32( encrypted_scores, (uint16_t)((index - 1u) * 4u), win16_read_u32(win16_dgroup_pointer(score_offset)) ^ key); (void)borland_far_strcpy( win16_far_add_offset( names, (uint16_t)((index - 1u) * TDKPIN_HIGHSCORE_NAME_BYTES)), win16_dgroup_pointer(name_offset)); } (void)LWrite16( file, win16_dgroup_pointer(HIGHSCORE_FILE_HEADER), HIGHSCORE_FILE_HEADER_BYTES); (void)LWrite16(file, encrypted_scores, HIGHSCORE_SCORES_BYTES); (void)LWrite16(file, names, HIGHSCORE_NAMES_BYTES); (void)LClose16(file); } /* * 1000:a99c -- load and authenticate the complete high-score table. * * The same file is first opened with mode 0 and retried with mode 0x40. A * 16-byte header is compared through the compiler's ShortString helpers. All * _lread returns are ignored by the original: a short score read therefore * leaves stale SS bytes to be decoded, while a short name read leaves the * untouched tail of the global name table. Invalid or unavailable files * install descending 1,000,000..100,000 scores and ten copies of "No Name". */ void tdkpin_load_highscores(uint16_t ignored_static_link) { (void)ignored_static_link; bool loaded = false; HFILE16 file = LOpen16( win16_dgroup_pointer(HIGHSCORE_LOAD_FILE_NAME), 0); if (file == (HFILE16)-1) { file = LOpen16( win16_dgroup_pointer(HIGHSCORE_LOAD_FILE_NAME), 0x40); } if (file != (HFILE16)-1) { uint8_t raw_header[HIGHSCORE_FILE_HEADER_BYTES]; uint8_t encrypted_score_bytes[HIGHSCORE_SCORES_BYTES]; uint8_t file_header_short[256]; uint8_t expected_header_short[256]; Win16FarPtr raw_header_far = win16_stack_pointer(raw_header); Win16FarPtr encrypted_scores = win16_stack_pointer(encrypted_score_bytes); Win16FarPtr file_header = win16_stack_pointer(file_header_short); Win16FarPtr expected_header = win16_stack_pointer(expected_header_short); fill_indeterminate_stack_bytes( raw_header_far, HIGHSCORE_FILE_HEADER_BYTES); fill_indeterminate_stack_bytes( encrypted_scores, HIGHSCORE_SCORES_BYTES); (void)LRead16( file, raw_header_far, HIGHSCORE_FILE_HEADER_BYTES); borland_bytes_to_short( file_header, raw_header_far, HIGHSCORE_FILE_HEADER_BYTES); borland_bytes_to_short( expected_header, win16_dgroup_pointer(HIGHSCORE_FILE_HEADER), HIGHSCORE_FILE_HEADER_BYTES); if (borland_short_compare(file_header, expected_header) == 0) { loaded = true; (void)LRead16(file, encrypted_scores, HIGHSCORE_SCORES_BYTES); (void)LRead16( file, win16_dgroup_pointer( HIGHSCORE_NAME_INDEX_ZERO + TDKPIN_HIGHSCORE_NAME_BYTES), HIGHSCORE_NAMES_BYTES); uint32_t key = win16_read_u32( win16_dgroup_pointer(HIGHSCORE_XOR_KEY)); for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint32_t encrypted = win16_read_u32( win16_far_add_offset( encrypted_scores, (uint16_t)((index - 1u) * 4u))); win16_write_u32( win16_dgroup_pointer((uint16_t)( HIGHSCORE_SCORE_INDEX_ZERO + index * 4u)), 0, encrypted ^ key); } } (void)LClose16(file); } if (!loaded) { for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { int32_t score = borland_multiply_i32( (int32_t)(11u - index), 100000); win16_write_u32( win16_dgroup_pointer((uint16_t)( HIGHSCORE_SCORE_INDEX_ZERO + index * 4u)), 0, (uint32_t)score); (void)borland_far_strcpy( win16_dgroup_pointer((uint16_t)( HIGHSCORE_NAME_INDEX_ZERO + index * TDKPIN_HIGHSCORE_NAME_BYTES)), win16_dgroup_pointer(HIGHSCORE_DEFAULT_NAME)); } } } /* * 1000:ab3c -- run optional name editing, then create/show the score window. * The argument is the caller's BP; SS:[BP+6] is the actual window receiver. */ void tdkpin_show_highscore_windows(uint16_t caller_bp) { Win16FarPtr receiver = highscore_caller_receiver(caller_bp); uint8_t insertion = win16_read_u8( win16_dgroup_pointer(HIGHSCORE_INSERT_INDEX)); Win16FarPtr application = win16_read_far_pointer( win16_dgroup_pointer(OBJECT_WINDOWS_APPLICATION_POINTER), 0); if (insertion != 0) { Win16FarPtr name = highscore_name(insertion); (void)borland_far_strcpy( name, win16_dgroup_pointer(HIGHSCORE_EDIT_INITIAL_NAME)); Win16FarPtr dialog = object_windows_text_dialog_construct( 0, 0x01ce, 0x0016, name, win16_dgroup_pointer(HIGHSCORE_EDIT_LABEL), win16_dgroup_pointer(HIGHSCORE_EDIT_CAPTION), receiver); (void)win16_call_application_dialog_method( application_virtual_method(application, 0x38), application, dialog); } Win16FarPtr child = tdkpin_centered_child_window_construct( 0, 0x010e, win16_dgroup_pointer(HIGHSCORE_WINDOW_TITLE), receiver); child = win16_call_application_window_method( application_virtual_method(application, 0x34), application, child); win16_write_u32(receiver, 0x41, child); object_windows_show( win16_read_far_pointer(receiver, 0x41), 1); } static bool score_is_greater(uint32_t left, uint32_t right) { int16_t left_high = (int16_t)(left >> 16); int16_t right_high = (int16_t)(right >> 16); return left_high > right_high || (left_high == right_high && (uint16_t)left > (uint16_t)right); } /* 1000:abe5 -- insert the active player's score into the descending top ten. */ void tdkpin_insert_current_score(uint16_t caller_bp) { uint8_t current_player = win16_read_u8( win16_dgroup_pointer(CURRENT_PLAYER)); uint32_t new_score = win16_read_u32( win16_dgroup_pointer((uint16_t)( PLAYER_SCORE_INDEX_ZERO + (uint16_t)current_player * 4u))); uint16_t insertion = 1; while (!score_is_greater( new_score, win16_read_u32(highscore_score(insertion)))) { if (insertion == TDKPIN_HIGHSCORE_COUNT) { return; } insertion++; } if ((uint16_t)(insertion + 1u) <= TDKPIN_HIGHSCORE_COUNT) { for (uint16_t destination = TDKPIN_HIGHSCORE_COUNT; destination != insertion; destination--) { win16_write_u32( highscore_score(destination), 0, win16_read_u32(highscore_score( (uint16_t)(destination - 1u)))); borland_far_copy( highscore_name(destination), highscore_name((uint16_t)(destination - 1u)), TDKPIN_HIGHSCORE_NAME_BYTES); } } win16_write_u32(highscore_score(insertion), 0, new_score); win16_write_u8( win16_dgroup_pointer(HIGHSCORE_INSERT_INDEX), (uint8_t)insertion); tdkpin_show_highscore_windows(caller_bp); tdkpin_save_highscores(caller_bp); } static void text_out_c_string( HDC16 dc, INT16 x, INT16 y, Win16FarPtr text) { (void)TextOut16( dc, x, y, text, (INT16)borland_far_strlen(text)); } /* * 1000:5c13 -- TWindow +4c paint override for the 360x300 high-score panel. * The receiver and PAINTSTRUCT are ABI-visible but unused; all drawing uses * the HDC supplied as the fifth word in the ten-byte Pascal argument frame. */ void tdkpin_paint_highscores( Win16FarPtr ignored_window, PAINTSTRUCT16 *ignored_paint, HDC16 dc) { (void)ignored_window; (void)ignored_paint; HPALETTE16 palette = win16_read_u16( win16_dgroup_pointer(0x444e)); HBITMAP16 background = win16_read_u16( win16_dgroup_pointer(0x0867)); HPALETTE16 old_palette = SelectPalette16(dc, palette, 0); (void)UnrealizeObject16(palette); (void)RealizePalette16(dc); HDC16 background_dc = CreateCompatibleDC16(dc); HGDIOBJ16 old_background_bitmap = SelectObject16(background_dc, background); HDC16 buffer_dc = CreateCompatibleDC16(dc); HBITMAP16 buffer_bitmap = CreateCompatibleBitmap16(dc, 360, 300); HGDIOBJ16 old_buffer_bitmap = SelectObject16(buffer_dc, buffer_bitmap); COLORREF16 old_text_color = GetTextColor16(buffer_dc); UINT16 old_text_alignment = SetTextAlign16(buffer_dc, 6); INT16 old_background_mode = SetBkMode16(buffer_dc, 1); (void)BitBlt16( buffer_dc, 0, 0, 360, 300, background_dc, 32, 204, 0x00cc0020u); (void)SetTextColor16(buffer_dc, 0); uint8_t display_bytes[41]; uint8_t conversion_bytes[41]; uint8_t number_short_bytes[256]; uint8_t name_short_bytes[256]; Win16FarPtr display = win16_stack_pointer(display_bytes); Win16FarPtr conversion = win16_stack_pointer(conversion_bytes); Win16FarPtr number_short = win16_stack_pointer(number_short_bytes); Win16FarPtr name_short = win16_stack_pointer(name_short_bytes); (void)borland_far_strcpy( display, win16_dgroup_pointer(HIGHSCORE_HEADING)); text_out_c_string(buffer_dc, 180, 27, display); for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { INT16 y = (INT16)(index * 20u + 40u); (void)SetTextAlign16(buffer_dc, 0); (void)borland_far_strcpy( display, win16_dgroup_pointer( index < 10 ? HIGHSCORE_SINGLE_DIGIT_PREFIX : 0x02ff)); borland_format_i32_short_string(255, number_short, 0, index); (void)borland_short_to_c_string(conversion, number_short); (void)borland_far_strcat(display, conversion); (void)borland_far_strcat( display, win16_dgroup_pointer(HIGHSCORE_RANK_SUFFIX)); borland_bytes_to_short( name_short, highscore_name(index), TDKPIN_HIGHSCORE_NAME_BYTES); (void)borland_short_to_c_string(conversion, name_short); (void)borland_far_strcat(display, conversion); text_out_c_string(buffer_dc, 30, y, display); (void)SetTextAlign16(buffer_dc, 2); borland_format_i32_short_string( 255, number_short, 0, (int32_t)win16_read_u32(highscore_score(index))); (void)borland_short_to_c_string(display, number_short); text_out_c_string(buffer_dc, 320, y, display); } (void)BitBlt16( dc, 0, 0, 360, 300, buffer_dc, 0, 0, 0x00cc0020u); (void)SetTextColor16(buffer_dc, old_text_color); (void)SetTextAlign16(buffer_dc, old_text_alignment); (void)SetBkMode16(buffer_dc, old_background_mode); (void)SelectObject16(buffer_dc, old_buffer_bitmap); (void)DeleteObject16(buffer_bitmap); (void)DeleteDC16(buffer_dc); (void)SelectObject16(background_dc, old_background_bitmap); (void)DeleteDC16(background_dc); (void)SelectPalette16(dc, old_palette, 0); } 9mbx+#ifndef TDKPIN_HIGHSCORES_H #define TDKPIN_HIGHSCORES_H #include "tdkpin_arithmetic.h" #include "tdkpin_numeric.h" #include "tdkpin_shortstrings.h" #include "tdkpin_strings.h" enum { TDKPIN_HIGHSCORE_COUNT = 10, TDKPIN_HIGHSCORE_NAME_BYTES = 22, }; typedef struct { uint16_t object_size; int16_t negative_size; uint32_t reserved; Win16FarPtr destruct; Win16FarPtr call_original_window_proc; Win16FarPtr route_command_target; Win16FarPtr forward_default; Win16FarPtr forward_event_to_parent; Win16FarPtr register_class; Win16FarPtr create_native_window; Win16FarPtr destroy_native_window; Win16FarPtr get_field_35; Win16FarPtr class_name; Win16FarPtr get_mdi_client; Win16FarPtr all_children_can_close; Win16FarPtr build_window_class; Win16FarPtr setup_window; Win16FarPtr zero_word_default; Win16FarPtr transfer_child_data; Win16FarPtr route_scroll_notification; Win16FarPtr paint; } TdkpinHighscoreWindowVmt; /* 1028:010e..015d */ _Static_assert( sizeof(TdkpinHighscoreWindowVmt) == 80, "high-score window VMT layout drift"); void tdkpin_save_highscores( uint16_t ignored_static_link); /* 1000:a8ea */ void tdkpin_load_highscores( uint16_t ignored_static_link); /* 1000:a99c */ void tdkpin_show_highscore_windows( uint16_t caller_bp); /* 1000:ab3c */ void tdkpin_insert_current_score( uint16_t caller_bp); /* 1000:abe5 */ void tdkpin_paint_highscores( Win16FarPtr ignored_window, PAINTSTRUCT16 *ignored_paint, HDC16 dc); /* 1000:5c13 */ #endif g.(x/* Binary-exact no-op unit initializers from the Code2 startup chain. */ #include "tdkpin_initialization.h" /* * Each function is the same five-byte far routine in the image: * PUSH BP; MOV BP,SP; LEAVE; RETF. The NE entry point invokes ordinals 91, * 86, and 72 in that order before querying the Windows version. The original * Pascal unit names are not encoded at these entry points, so the stable NE * ordinals remain in the descriptive names rather than inventing unit names. */ void tdkpin_initialize_unit_ordinal_72(void) { } void tdkpin_initialize_unit_ordinal_86(void) { } void tdkpin_initialize_unit_ordinal_91(void) { } xxP#ifndef TDKPIN_INITIALIZATION_H #define TDKPIN_INITIALIZATION_H /* No-op unit initializers called directly by the NE program entry point. */ void tdkpin_initialize_unit_ordinal_72(void); /* 1008:0f27 */ void tdkpin_initialize_unit_ordinal_86(void); /* 1008:11b8 */ void tdkpin_initialize_unit_ordinal_91(void); /* 1008:15c2 */ #endif mx`6/* Address-linked keyboard handlers at 1000:638e and 1000:6bf8. */ #include "tdkpin_key_input.h" #include "tdkpin_application.h" #include "tdkpin_arithmetic.h" #include "tdkpin_random.h" #include "tdkpin_real48.h" #include "tdkpin_sound.h" static Win16FarPtr application_virtual_method( Win16FarPtr application, uint16_t slot) { uint16_t vmt = win16_read_u16(application); return win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); } static bool no_auxiliary_windows(Win16FarPtr window) { return win16_read_u16(win16_far_add_offset(window, 0x41)) == 0 && win16_read_u16(win16_far_add_offset(window, 0x43)) == 0 && win16_read_u16(win16_far_add_offset(window, 0x45)) == 0 && win16_read_u16(win16_far_add_offset(window, 0x47)) == 0; } static uint16_t open_help_window(Win16FarPtr window) { Win16FarPtr child = tdkpin_full_child_window_construct( 0, 0x017e, win16_dgroup_pointer(0x0306), window); Win16FarPtr application = win16_read_far_pointer( win16_dgroup_pointer(0x064e), 0); child = win16_call_application_window_method( application_virtual_method(application, 0x34), application, child); win16_write_u32(window, 0x45, child); object_windows_show(win16_read_far_pointer(window, 0x45), 1); return win16_indeterminate_u16(); } static void apply_down_key(Win16FarPtr window) { int32_t scalar = (int32_t)win16_read_u32( win16_far_add_offset(window, 0x5a)); int32_t step = borland_multiply_i32(scalar, 50); uint32_t velocity = win16_read_u32( win16_far_add_offset(window, 0x0bae)); velocity -= (uint32_t)step; win16_write_u32(window, 0x0bae, velocity); win16_write_u32(window, 0x0baa, 0); if (win16_read_u8(win16_dgroup_pointer(0x07d0)) == 0) { return; } HWND16 handle = win16_read_u16(win16_far_add_offset(window, 4)); HDC16 dc = GetDC16(handle); INT16 y = 231; for (int32_t multiple = 1; multiple <= 10; multiple++) { int32_t threshold = borland_multiply_i32(step, -multiple); if (threshold < (int32_t)velocity) { y = (INT16)(multiple * 21); break; } } tdkpin_draw_board_decoration_row_on_dc(y, dc); (void)ReleaseDC16(handle, dc); } uint16_t tdkpin_handle_key_press( Win16FarPtr window, Win16FarPtr event) { if (no_auxiliary_windows(window)) { uint16_t scan_code = win16_read_u16( win16_far_add_offset(event, 8)) & 0x00ffu; if (scan_code == 0x3b) { return open_help_window(window); } if (win16_read_u8(win16_far_add_offset(window, 0x0bdd)) == 0 && win16_read_u8(win16_far_add_offset(window, 0x0bdf)) == 0 && scan_code == 0x50) { apply_down_key(window); } else if (win16_read_u8(win16_dgroup_pointer(0x07c6)) == 0) { if (scan_code == 0x1d) { win16_write_u8(win16_far_add_offset(window, 0x0bda), 1); } if (scan_code == 0x1c) { win16_write_u8(win16_far_add_offset(window, 0x0bdb), 1); } } } win16_write_u16(event, 0x0a, 0); win16_write_u16(event, 0x0c, 0); return 0; } static int32_t random_horizontal_nudge(int32_t scalar) { static const BorlandReal48 scale = {{0x85, 0x00, 0x00, 0x00, 0x00, 0x20}}; static const BorlandReal48 offset = {{0x84, 0x00, 0x00, 0x00, 0x00, 0x20}}; BorlandReal48 random = borland_random_real48_registers(); BorlandReal48 factor = borland_real48_subtract( borland_real48_multiply(random, scale), offset); return borland_real48_round_to_i32( borland_real48_multiply(borland_i32_to_real48(scalar), factor)); } static void apply_release_down_impulse(Win16FarPtr window) { int32_t scalar = (int32_t)win16_read_u32( win16_far_add_offset(window, 0x5a)); int32_t base = (int32_t)win16_read_u32( win16_far_add_offset(window, 0x56)); uint32_t velocity = win16_read_u32( win16_far_add_offset(window, 0x0bae)); velocity -= (uint32_t)borland_multiply_i32(scalar, 100); int32_t signed_velocity = (int32_t)velocity; uint32_t negative_base_bits = 0u - (uint32_t)base; int32_t negative_base = (int32_t)negative_base_bits; if (signed_velocity < negative_base) { velocity = negative_base_bits + borland_random_below((uint16_t)base) / 40u; } else { /* 1000:71eb loads Real48 0.6 as CX:SI:DI = * 9a80:9999:1999. Keep the exact target encoding here. */ static const BorlandReal48 factor_three_fifths = {{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}; int32_t scaled_base = borland_real48_round_to_i32( borland_real48_multiply( borland_i32_to_real48(base), factor_three_fifths)); int32_t upper = (int32_t)(0u - (uint32_t)scaled_base); if (upper < signed_velocity) { velocity -= borland_random_below((uint16_t)base) / 40u; } } win16_write_u32(window, 0x0bae, velocity); win16_write_u32(window, 0x0baa, 0); win16_write_u32(win16_dgroup_pointer(0x07fb), 0, velocity); win16_write_u8(win16_far_add_offset(window, 0x0bdd), 1); win16_write_u8(win16_far_add_offset(window, 0x0bde), 0); tdkpin_play_sound_if_not_tilted(2); HWND16 handle = win16_read_u16(win16_far_add_offset(window, 4)); HDC16 dc = GetDC16(handle); tdkpin_blit_bitmap_and_present( win16_read_u16(win16_dgroup_pointer(0x0865)), 18, 21, 426, 314, dc); (void)ReleaseDC16(handle, dc); } static void add_wrap_to_dgroup(uint16_t address, int32_t amount) { Win16FarPtr value = win16_dgroup_pointer(address); win16_write_u32(value, 0, win16_read_u32(value) + (uint32_t)amount); } static void apply_nudge(Win16FarPtr window, uint16_t scan_code) { int32_t scalar = (int32_t)win16_read_u32( win16_far_add_offset(window, 0x5a)); tdkpin_play_sound_if_not_tilted(19); int32_t horizontal = 0; int32_t vertical = 0; if (scan_code == 0x2a || scan_code == 0x51) { int32_t amount = borland_multiply_i32( (int32_t)(50u - borland_random_below(20)), scalar); horizontal = scan_code == 0x2a ? -amount : amount; } else { horizontal = random_horizontal_nudge(scalar); vertical = (int32_t)(0u - (uint32_t)borland_multiply_i32( (int32_t)(60u - borland_random_below(20)), scalar)); } win16_write_u32( window, 0x0baa, win16_read_u32(win16_far_add_offset(window, 0x0baa)) + (uint32_t)horizontal); win16_write_u32( window, 0x0bae, win16_read_u32(win16_far_add_offset(window, 0x0bae)) + (uint32_t)vertical); if (win16_read_u8(win16_far_add_offset(window, 0x61)) > 1) { if (scan_code == 0x2a || scan_code == 0x51) { int32_t slot_amount = borland_multiply_i32(scalar, 40); if (scan_code == 0x2a) { slot_amount = (int32_t)(0u - (uint32_t)slot_amount); } add_wrap_to_dgroup(0x07f3, slot_amount); add_wrap_to_dgroup(0x07f7, slot_amount); } else { int32_t slot_x = borland_multiply_i32( (int32_t)borland_random_below(21) - 10, scalar); int32_t slot_y = (int32_t)(0u - (uint32_t)borland_multiply_i32( (int32_t)borland_random_below(100) + 50, scalar)); add_wrap_to_dgroup(0x07f3, slot_x); add_wrap_to_dgroup(0x07f7, slot_x); add_wrap_to_dgroup(0x07fb, slot_y); add_wrap_to_dgroup(0x07ff, slot_y); } } uint16_t counter = (uint16_t)( win16_read_u16(win16_far_add_offset(window, 0x5e)) + 25u); win16_write_u16(window, 0x5e, counter); uint16_t threshold = (uint16_t)(borland_random_below(10) + 30u); if (threshold < counter) { tdkpin_play_sound_if_not_tilted(20); win16_write_u8(win16_dgroup_pointer(0x07c6), 1); win16_write_u8(win16_far_add_offset(window, 0x0bda), 0); win16_write_u8(win16_far_add_offset(window, 0x0bdb), 0); HWND16 handle = win16_read_u16(win16_far_add_offset(window, 4)); HDC16 dc = GetDC16(handle); tdkpin_restore_background_region_a(20, 148, 243, 84, dc); tdkpin_present_background_region(20, 148, 243, 84, dc); (void)ReleaseDC16(handle, dc); } } static void toggle_sound(void) { uint8_t enabled = win16_read_u8(win16_dgroup_pointer(0x43f2)); if (enabled == 0) { if (win16_read_u16(win16_dgroup_pointer(0x43ee)) != 0) { win16_write_u8(win16_dgroup_pointer(0x43f2), 1); } } else { win16_write_u8(win16_dgroup_pointer(0x43f2), 0); } } static void add_player(Win16FarPtr window) { win16_write_u8(win16_dgroup_pointer(0x07c9), 0); tdkpin_play_sound_if_not_tilted(1); uint8_t player_count = (uint8_t)( win16_read_u8(win16_dgroup_pointer(0x07d0)) + 1u); win16_write_u8(win16_dgroup_pointer(0x07d0), player_count); win16_write_u8(win16_far_add_offset(window, 0x0bdd), 0); win16_write_u8(win16_far_add_offset(window, 0x0bdf), 0); win16_write_u8(win16_dgroup_pointer(0x07c5), 1); win16_write_u8(win16_far_add_offset(window, 0x61), 1); win16_write_u8(win16_dgroup_pointer(0x0874), 0); HWND16 handle = win16_read_u16(win16_far_add_offset(window, 4)); for (uint16_t player = 1; player <= 4; player++) { win16_write_u16( win16_dgroup_pointer((uint16_t)(0x081f + player * 2u)), 0, 0xffff); for (uint16_t id = 1; id <= 175; id++) { win16_write_u8( win16_far_add_offset(window, (uint16_t)( 0x0061 + player * 0x00afu + id)), win16_read_u8(win16_far_add_offset( window, (uint16_t)(0x03cc + id)))); win16_write_u16( window, (uint16_t)(0x036c + player * 0x015eu + id * 2u), win16_read_u16(win16_far_add_offset( window, (uint16_t)(0x0a42 + id * 2u)))); } HDC16 dc = GetDC16(handle); if (player_count < player) { win16_write_u32( win16_dgroup_pointer((uint16_t)(0x097e + player * 4u)), 0, 0); tdkpin_restore_background_region_b( 42, 284, (INT16)((player - 1u) * 45u + 270u), 348, dc); tdkpin_present_background_region( 42, 284, (INT16)((player - 1u) * 45u + 270u), 348, dc); } tdkpin_draw_item_status(0, dc); (void)ReleaseDC16(handle, dc); if (player == 1) { dc = GetDC16(handle); tdkpin_restore_background_region_a(30, 284, 232, 371, dc); tdkpin_present_background_region(30, 284, 232, 371, dc); tdkpin_draw_score(dc, 0); tdkpin_update_status_display(1, dc); (void)ReleaseDC16(handle, dc); } } for (uint16_t id = 1; id <= 175; id++) { Win16FarPtr record = win16_dgroup_pointer((uint16_t)( 0x095b + id * 0x53u)); win16_write_u8( win16_far_add_offset(record, 0x34), win16_read_u8(win16_far_add_offset( window, (uint16_t)(0x03cc + id)))); win16_write_u16( record, 0x43, win16_read_u16(win16_far_add_offset( window, (uint16_t)(0x0a42 + id * 2u)))); } win16_write_u8(win16_dgroup_pointer(0x07d1), 1); } uint16_t tdkpin_handle_key_release( Win16FarPtr window, Win16FarPtr event) { if (no_auxiliary_windows(window)) { uint16_t scan_code = win16_read_u16( win16_far_add_offset(event, 8)) & 0x00ffu; if (win16_read_u8(win16_dgroup_pointer(0x07cf)) != 0 && scan_code == 0x3c) { win16_write_u32(win16_dgroup_pointer(0x0855), 0, 0); win16_write_u8(win16_dgroup_pointer(0x07c7), 1); } if (win16_read_u8(win16_dgroup_pointer(0x07cf)) != 0 && scan_code == 0x41) { win16_write_u32( win16_dgroup_pointer(0x07d3), 0, win16_read_u32(win16_dgroup_pointer(0x3340))); win16_write_u32( win16_dgroup_pointer(0x07d7), 0, win16_read_u32(win16_dgroup_pointer(0x3344))); win16_write_u32(window, 0x0baa, 0); win16_write_u32(window, 0x0bae, 0); } if (win16_read_u8(win16_far_add_offset(window, 0x0bdd)) == 0 && win16_read_u8(win16_far_add_offset(window, 0x0bdf)) == 0 && scan_code == 0x50 && win16_read_u8(win16_dgroup_pointer(0x07d0)) != 0) { apply_release_down_impulse(window); } else if (scan_code == 0x1d) { win16_write_u8(win16_far_add_offset(window, 0x0bda), 0); } else if (scan_code == 0x1c) { win16_write_u8(win16_far_add_offset(window, 0x0bdb), 0); } else if (win16_read_u8(win16_dgroup_pointer(0x07c6)) == 0 && (scan_code == 0x2a || scan_code == 0x51 || scan_code == 0x39)) { apply_nudge(window, scan_code); } else if (scan_code == 0x58) { toggle_sound(); } else if (win16_read_u8( win16_far_add_offset(window, 0x0bde)) != 0 && (scan_code == 0x4e || scan_code == 0x1b) && win16_read_u8(win16_dgroup_pointer(0x07d0)) < 4) { add_player(window); } } win16_write_u16(event, 0x0a, 0); win16_write_u16(event, 0x0c, 0); return 0; } S8xL#ifndef TDKPIN_KEY_INPUT_H #define TDKPIN_KEY_INPUT_H #include "tdkpin_game_windows.h" #include "tdkpin_gameplay_helpers.h" uint16_t tdkpin_handle_key_press( Win16FarPtr window, Win16FarPtr event); /* 1000:6bf8 */ uint16_t tdkpin_handle_key_release( Win16FarPtr window, Win16FarPtr event); /* 1000:638e */ #endif f9j!x/* Five-target rotation and 91x90 panel compositor from TDKPIN Code1. */ #include "tdkpin_mechanism_render.h" #include "tdkpin_sound.h" typedef struct { INT16 x; INT16 y; } TargetPoint; static const TargetPoint g_target_positions[6][5] = { {{9, 41}, {23, 11}, {56, 14}, {63, 47}, {35, 63}}, {{11, 45}, {18, 13}, {52, 11}, {63, 42}, {39, 64}}, {{13, 50}, {15, 17}, {46, 9}, {64, 37}, {44, 62}}, {{17, 55}, {11, 23}, {39, 7}, {64, 30}, {50, 59}}, {{21, 60}, {9, 28}, {35, 7}, {62, 25}, {54, 56}}, {{8, 35}, {26, 8}, {59, 18}, {59, 50}, {27, 61}}, }; static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static void rotate_target_state(uint16_t caller_bp, Win16FarPtr receiver) { static const uint16_t record_words[5] = { 0x3371, 0x33c4, 0x3417, 0x346a, 0x34bd}; uint16_t first_word = win16_read_u16( win16_dgroup_pointer(record_words[0])); for (uint16_t index = 0; index < 4; index++) { win16_write_u16( win16_dgroup_pointer(record_words[index]), 0, win16_read_u16(win16_dgroup_pointer(record_words[index + 1]))); } win16_write_u16( win16_dgroup_pointer(record_words[4]), 0, first_word); uint16_t row = (uint16_t)( 0x0476 + (uint16_t)g_current_player * 0x14u); uint8_t first_byte = win16_read_u8( win16_far_add_offset(receiver, row)); for (uint16_t index = 0; index < 4; index++) { win16_write_u8( win16_far_add_offset(receiver, (uint16_t)(row + index)), win16_read_u8(win16_far_add_offset( receiver, (uint16_t)(row + index + 1)))); } win16_write_u8( win16_far_add_offset(receiver, (uint16_t)(row + 4)), first_byte); for (uint16_t item = 15; item <= 19; item++) { tdkpin_refresh_player_item(caller_bp, item); } } /* 1000:6f27 -- render and optionally rotate the five-target panel. */ void tdkpin_rotate_and_draw_targets(uint16_t caller_bp) { Win16FarPtr receiver = caller_receiver(caller_bp); HWND16 window = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(window); HDC16 source_dc = CreateCompatibleDC16(dc); HDC16 panel_dc = CreateCompatibleDC16(dc); HBITMAP16 panel_bitmap = CreateCompatibleBitmap16(dc, 91, 90); HGDIOBJ16 old_source = SelectObject16( source_dc, win16_read_u16(win16_dgroup_pointer(0x0859))); HGDIOBJ16 old_panel = SelectObject16(panel_dc, panel_bitmap); int32_t state = (int32_t)win16_read_u32(win16_dgroup_pointer(0x0855)); if (state < 6) { INT16 source_x = (INT16)(uint16_t)( ((uint32_t)state - 1u) * 91u); (void)BitBlt16( panel_dc, 0, 0, 91, 90, source_dc, source_x, 0, 0x00cc0020u); } else { (void)SelectObject16( source_dc, win16_read_u16(win16_dgroup_pointer(0x085d))); (void)BitBlt16( panel_dc, 0, 0, 91, 90, source_dc, 79, 33, 0x00cc0020u); (void)SelectObject16( source_dc, win16_read_u16(win16_dgroup_pointer(0x0859))); rotate_target_state(caller_bp, receiver); } if (state == 1) { tdkpin_play_sound_if_not_tilted(11); } if (state >= 1 && state <= 6) { static const uint16_t target_words[5] = { 0x3371, 0x33c4, 0x3417, 0x346a, 0x34bd}; const TargetPoint *positions = g_target_positions[state - 1]; for (uint16_t index = 0; index < 5; index++) { if (win16_read_u16( win16_dgroup_pointer(target_words[index])) != 0) { (void)BitBlt16( panel_dc, positions[index].x, positions[index].y, 17, 17, source_dc, 455, 17, 0x008800c6u); (void)BitBlt16( panel_dc, positions[index].x, positions[index].y, 17, 17, source_dc, 455, 0, 0x00ee0086u); } } } (void)BitBlt16( dc, 79, 33, 91, 90, panel_dc, 0, 0, 0x00cc0020u); (void)SelectObject16(source_dc, old_source); (void)SelectObject16(panel_dc, old_panel); (void)DeleteObject16(panel_bitmap); (void)DeleteDC16(panel_dc); (void)DeleteDC16(source_dc); (void)ReleaseDC16(window, dc); } )1K x>#ifndef TDKPIN_MECHANISM_RENDER_H #define TDKPIN_MECHANISM_RENDER_H #include "tdkpin_gameplay_helpers.h" void tdkpin_rotate_and_draw_targets( uint16_t caller_bp); /* 1000:6f27 */ #endif W=x(/* TDKPIN's bounded Win16 queue drain and two close-method pairs. */ #include "tdkpin_message_pump.h" enum { WIN16_PM_REMOVE = 1, TDKPIN_MAX_DRAIN_MESSAGE = 0x0032, TDKPIN_TIMER_MESSAGE = 0x0580, WIN16_WM_KEYDOWN_LOCAL = 0x0100, WIN16_WM_KEYUP_LOCAL = 0x0101, }; /* 1008:00e2 — drain messages 0..0x32 until PeekMessage reports empty. */ void tdkpin_drain_messages_except_input(void) { MSG16 message; while (PeekMessage16( &message, 0, 0, TDKPIN_MAX_DRAIN_MESSAGE, WIN16_PM_REMOVE) != 0) { if (message.message != TDKPIN_TIMER_MESSAGE && message.message != WIN16_WM_KEYDOWN_LOCAL && message.message != WIN16_WM_KEYUP_LOCAL) { (void)TranslateMessage16(&message); (void)DispatchMessage16(&message); } } } static void drain_and_close(Win16FarPtr window) { tdkpin_drain_messages_except_input(); object_windows_close_if_allowed(window); } /* 1000:5ee6 and 6202 — identical methods in two derived window VMTs. */ void tdkpin_close_variant_a(Win16FarPtr window) { drain_and_close(window); } void tdkpin_close_variant_b(Win16FarPtr window) { drain_and_close(window); } static uint16_t conditional_drain_and_close( Win16FarPtr window, ObjectWindowsMessage *message, uint8_t suppressed_notification) { uint8_t notification = (uint8_t)((uint32_t)message->lparam >> 16); if (notification != suppressed_notification) { drain_and_close(window); } return win16_indeterminate_u16(); } /* * 1000:5efc and 6218 — suppress close for notification 0x1c/0x3b. * Both routines return an uninitialized local word on every path. */ uint16_t tdkpin_conditional_close_variant_a( Win16FarPtr window, ObjectWindowsMessage *message) { return conditional_drain_and_close(window, message, 0x1c); } uint16_t tdkpin_conditional_close_variant_b( Win16FarPtr window, ObjectWindowsMessage *message) { return conditional_drain_and_close(window, message, 0x3b); } ku!x#ifndef TDKPIN_MESSAGE_PUMP_H #define TDKPIN_MESSAGE_PUMP_H #include "tdkpin_window_messages.h" void tdkpin_drain_messages_except_input(void); /* 1008:00e2 */ void tdkpin_close_variant_a(Win16FarPtr window); /* 1000:5ee6 */ uint16_t tdkpin_conditional_close_variant_a( Win16FarPtr window, ObjectWindowsMessage *message); /* 1000:5efc */ void tdkpin_close_variant_b(Win16FarPtr window); /* 1000:6202 */ uint16_t tdkpin_conditional_close_variant_b( Win16FarPtr window, ObjectWindowsMessage *message); /* 1000:6218 */ #endif ѶdxH/* Dynamic Win16 multimedia helper DLL lifecycle from Code3. */ #include "tdkpin_multimedia.h" extern Win16FarPtr g_multimedia_procedures[11]; /* 1028:4750..477b */ extern HINSTANCE16 g_multimedia_module; /* 1028:4781 unaligned */ extern uint8_t g_multimedia_initialized; /* 1028:4784 */ static const char *const multimedia_procedure_names[11] = { "CTL3DAUTOSUBCLASS", "CTL3DCOLORCHANGE", "CTL3DCTLCOLOREX", "CTL3DENABLED", "CTL3DDLGFRAMEPAINT", "CTL3DGETVER", "CTL3DREGISTER", "CTL3DSUBCLASSDLG", "CTL3DSUBCLASSDLGEX", "CTL3DSUBCLASSCTL", "CTL3DUNREGISTER", }; /* * 1010:00a2 — test whether the CTL3D file can be found in the exact original * search order. The 80-byte result is only a success indicator; LoadLibrary * later receives the unchanged global library name/path buffer. */ bool multimedia_locate_library( Win16FarPtr module, Win16FarPtr library_path) { uint8_t search_path_bytes[256]; uint8_t result_bytes[80]; uint8_t extension_bytes[5]; uint8_t file_name_bytes[9]; Win16FarPtr search_path = win16_stack_pointer(search_path_bytes); Win16FarPtr result = win16_stack_pointer(result_bytes); Win16FarPtr extension = win16_stack_pointer(extension_bytes); Win16FarPtr file_name = win16_stack_pointer(file_name_bytes); win16_write_u8(search_path, 0); (void)multimedia_search_file(search_path, library_path, result); if (win16_read_u8(result) != 0) { return true; } (void)GetWindowsDirectoryFar16(search_path, 0xff); (void)multimedia_search_file(search_path, library_path, result); if (win16_read_u8(result) != 0) { return true; } (void)GetSystemDirectoryFar16(search_path, 0xff); (void)multimedia_search_file(search_path, library_path, result); if (win16_read_u8(result) != 0) { return true; } HINSTANCE16 module_handle = GetModuleHandle16(module); (void)GetModuleFileNameFar16(module_handle, search_path, 0x100); (void)multimedia_split_path( extension, file_name, search_path, search_path); (void)multimedia_search_file(search_path, library_path, result); if (win16_read_u8(result) != 0) { return true; } Win16FarPtr environment_path = multimedia_environment_value( win16_dgroup_pointer(0x046a)); (void)multimedia_search_file(environment_path, library_path, result); return win16_read_u8(result) != 0; } /* 1010:0002 — unload the helper and clear every dynamically resolved slot. */ void multimedia_unload(void) { if (g_multimedia_module >= 0x20) { (void)FreeLibrary16(g_multimedia_module); } g_multimedia_initialized = 0; for (unsigned index = 0; index < 11; index++) { g_multimedia_procedures[index] = 0; } } /* 1010:0079 — notify the helper for this task, then perform common unload. */ void multimedia_finalize_current_task(void) { Win16FarPtr terminate_task = g_multimedia_procedures[10]; if (g_multimedia_initialized && terminate_task != 0) { (void)win16_call_pascal_u16(terminate_task, GetCurrentTask16()); multimedia_unload(); } } /* * 1010:03e0 — multimedia-aware TApplication destructor. Finalize the current * helper task before the application/root destructors and owned-allocation * cleanup. The hidden VMT zero passed to TApplication prevents double free. */ void multimedia_application_destruct( Win16FarPtr object, uint16_t vmt) { multimedia_finalize_current_task(); object_windows_application_destruct(object, 0); BorlandObjectCallFrame frame = {object, vmt}; borland_finish_object_destructor(&frame, 0); } /* * 1010:03af — exported loader wrapper. Each byte argument occupies a 16-bit * Pascal stack slot; only AL is returned. The target always clears 1028:4783 * after the underlying 1010:01c2 call, regardless of its result. */ uint8_t multimedia_initialize_export( uint8_t argument_1, uint8_t argument_2, uint8_t argument_3, uint16_t argument_4, uint16_t argument_5) { uint8_t result = multimedia_initialize( argument_1, argument_2, argument_3, argument_4, argument_5); g_multimedia_pending = 0; return result; } /* * 1010:01c2 — load and validate CTL3D.DLL/CTL3DV2.DLL. * Procedure slots retain their exact binary order at 1028:4750..477b. */ uint8_t multimedia_initialize( uint8_t argument_1, uint8_t argument_2, uint8_t auto_subclass, uint16_t module_offset, uint16_t module_selector) { if (g_multimedia_initialized) { return 1; } if (!g_multimedia_legacy_windows) { (void)SetErrorMode16(0x8000); g_multimedia_module = LoadLibrary16(g_multimedia_library_path); (void)SetErrorMode16(0); } else { bool located = multimedia_locate_library( win16_make_far_pointer(module_selector, module_offset), win16_dgroup_pointer(0x478d)); g_multimedia_module = located ? LoadLibrary16(g_multimedia_library_path) : 0; } if (g_multimedia_module < 0x20) { return 0; } for (unsigned index = 0; index < 11; index++) { if (index == 8 && g_multimedia_legacy_windows) { g_multimedia_procedures[index] = 0; } else { g_multimedia_procedures[index] = GetProcAddress16( g_multimedia_module, multimedia_procedure_names[index]); } } g_multimedia_initialized = win16_call_pascal_u16( g_multimedia_procedures[6], GetCurrentTask16()) != 0; if (g_multimedia_initialized) { g_multimedia_version = win16_call_pascal_u16_no_args(g_multimedia_procedures[5]); bool enabled = win16_call_pascal_u16_no_args( g_multimedia_procedures[3]) != 0; g_multimedia_initialized = enabled && g_multimedia_version >= 9; } if (!g_multimedia_initialized) { multimedia_unload(); return 0; } g_multimedia_argument_2 = argument_2; g_multimedia_argument_1 = argument_1; if (!g_multimedia_legacy_windows && auto_subclass != 0) { g_multimedia_auto_subclassed = win16_call_pascal_u16( g_multimedia_procedures[0], g_win16_instance) != 0; } else { g_multimedia_auto_subclassed = 0; } return 1; } 0\vxl#ifndef TDKPIN_MULTIMEDIA_H #define TDKPIN_MULTIMEDIA_H #include "tdkpin_application.h" void multimedia_unload(void); /* 1010:0002 */ void multimedia_finalize_current_task(void); /* 1010:0079 */ void multimedia_application_destruct( Win16FarPtr object, uint16_t vmt); /* 1010:03e0 */ uint8_t multimedia_initialize_export( uint8_t argument_1, uint8_t argument_2, uint8_t argument_3, uint16_t argument_4, uint16_t argument_5); /* 1010:03af */ uint8_t multimedia_initialize( uint8_t argument_1, uint8_t argument_2, uint8_t argument_3, uint16_t argument_4, uint16_t argument_5); /* 1010:01c2 */ extern uint8_t g_multimedia_pending; /* 1028:4783 */ extern uint16_t g_multimedia_version; /* 1028:477c */ extern uint8_t g_multimedia_auto_subclassed; /* 1028:477e */ extern uint8_t g_multimedia_argument_2; /* 1028:477f */ extern uint8_t g_multimedia_argument_1; /* 1028:4780 */ extern uint8_t g_multimedia_legacy_windows; /* 1028:478c */ extern char g_multimedia_library_path[21]; /* 1028:478d..47a1 */ bool multimedia_locate_library( Win16FarPtr module, Win16FarPtr library_path); /* 1010:00a2 */ Win16DosFileAttributesResult borland_dos_get_file_attributes_ansi( Win16FarPtr name); /* 1008:2608 */ Win16FarPtr multimedia_search_file( Win16FarPtr search_path, Win16FarPtr file_name, Win16FarPtr result); /* 1008:2643 */ uint16_t multimedia_split_path( Win16FarPtr extension, Win16FarPtr file_name, Win16FarPtr directory, Win16FarPtr input); /* 1008:26b0 */ Win16FarPtr multimedia_environment_value( Win16FarPtr name); /* 1008:2819 */ bool multimedia_short_file_exists(Win16FarPtr short_name); /* 1010:0405 */ void multimedia_initialize_runtime_unit(void); /* 1010:0472 */ extern uint16_t g_multimedia_system_directory_length; /* 1028:47a2 */ extern uint16_t g_multimedia_windows_version; /* 1028:478a/478b */ #endif dVx"/* DOS/Win16 path and environment helpers used by CTL3D discovery. */ #include "tdkpin_multimedia.h" #include "tdkpin_strings.h" /* * 1008:2608 -- copy at most 79 ANSI bytes to a stack ASCIIZ buffer, translate * it in-place to OEM, then issue DOS AX=4300h. The helper's original register * interface preserves CX for the returned attributes; the typed bridge makes * carry and that CX value explicit. */ Win16DosFileAttributesResult borland_dos_get_file_attributes_ansi( Win16FarPtr name) { uint8_t oem_name[80]; uint16_t copied = 0; while (copied < 79) { uint8_t byte = win16_read_u8(win16_far_add_offset(name, copied)); if (byte == 0) { break; } oem_name[copied++] = byte; } oem_name[copied] = 0; Win16FarPtr local = win16_stack_pointer(oem_name); (void)AnsiToOem16(local, local); return win16_dos_get_file_attributes(local); } static uint16_t append_c_string( Win16FarPtr output, uint16_t cursor, uint16_t *remaining, Win16FarPtr source) { uint16_t source_index = 0; while (*remaining != 0) { uint8_t byte = win16_read_u8( win16_far_add_offset(source, source_index++)); if (byte == 0) { break; } win16_write_u8(win16_far_add_offset(output, cursor++), byte); (*remaining)--; } win16_write_u8(win16_far_add_offset(output, cursor), 0); return cursor; } /* * 1008:2643 -- search for file_name first as given, then under each semicolon- * separated directory. Result capacity is exactly 79 characters plus NUL. * DOS volume labels/directories (attribute bits 08/10) do not count as files. */ Win16FarPtr multimedia_search_file( Win16FarPtr search_path, Win16FarPtr file_name, Win16FarPtr result) { uint16_t search_index = 0; uint16_t remaining = 79; uint16_t cursor = append_c_string(result, 0, &remaining, file_name); for (;;) { Win16DosFileAttributesResult attributes = borland_dos_get_file_attributes_ansi(result); if (!attributes.carry && (attributes.attributes & 0x18u) == 0) { return result; } remaining = 79; cursor = 0; uint8_t character = win16_read_u8( win16_far_add_offset(search_path, search_index)); uint8_t last_copied = 0; if (character == 0) { win16_write_u8(result, 0); return result; } for (;;) { search_index++; if (character == ';') { break; } if (remaining != 0) { last_copied = character; win16_write_u8( win16_far_add_offset(result, cursor++), character); remaining--; } character = win16_read_u8( win16_far_add_offset(search_path, search_index)); if (character == 0) { break; } } if (remaining != 0 && last_copied != ':' && last_copied != '\\') { win16_write_u8(win16_far_add_offset(result, cursor++), '\\'); remaining--; } cursor = append_c_string( result, cursor, &remaining, file_name); } } /* * 1008:26b0 -- Borland-style path splitter. Optional outputs receive the * directory/drive prefix (max 67), basename (max 8), and extension (max 4). * Return bits are 8 wildcard, 4 prefix, 2 basename, and 1 extension. */ uint16_t multimedia_split_path( Win16FarPtr extension, Win16FarPtr file_name, Win16FarPtr directory, Win16FarPtr input) { Win16FarPtr base = borland_far_strrchr(input, '\\'); if (base == 0) { base = borland_far_strrchr(input, ':'); } if (base == 0) { base = input; } else { base = win16_far_add_offset(base, 1); } Win16FarPtr dot = borland_far_strchr(base, '.'); if (dot == 0) { dot = borland_far_strend(base); } uint16_t prefix_length = (uint16_t)( win16_far_offset(base) - win16_far_offset(input)); if (prefix_length > 0x43) { prefix_length = 0x43; } uint16_t name_length = (uint16_t)( win16_far_offset(dot) - win16_far_offset(base)); if (name_length > 8) { name_length = 8; } uint16_t flags = 0; if (borland_far_strchr(base, '?') != 0 || borland_far_strchr(base, '*') != 0) { flags |= 8; } if (prefix_length != 0) { flags |= 4; } if (name_length != 0) { flags |= 2; } if (win16_read_u8(dot) != 0) { flags |= 1; } if (directory != 0) { (void)borland_far_strncpy(directory, input, prefix_length); } if (file_name != 0) { (void)borland_far_strncpy(file_name, base, name_length); } if (extension != 0) { (void)borland_far_strncpy(extension, dot, 4); } return flags; } /* 1008:2819 -- case-insensitive NAME= lookup in the DOS environment block. */ Win16FarPtr multimedia_environment_value(Win16FarPtr name) { uint16_t name_length = borland_far_strlen(name); Win16FarPtr variable = GetDOSEnvironment16(); while (win16_read_u8(variable) != 0) { if (borland_far_strnicmp(name, variable, name_length) == 0 && win16_read_u8(win16_far_add_offset(variable, name_length)) == '=') { return win16_far_add_offset(variable, (uint16_t)(name_length + 1)); } variable = win16_far_add_offset( variable, (uint16_t)(borland_far_strlen(variable) + 1)); } return 0; } }}x?/* CTL3D file probing and Pascal unit initialization from Code3. */ #include "tdkpin_multimedia.h" #include "tdkpin_borland_files.h" #include "tdkpin_borland_records.h" #include "tdkpin_shortstrings.h" #include "tdkpin_strings.h" extern Win16FarPtr g_multimedia_procedures[11]; /* 1028:4750..477b */ extern HINSTANCE16 g_multimedia_module; /* 1028:4781 */ extern uint8_t g_multimedia_initialized; /* 1028:4784 */ enum { DGROUP_CTL3D_DLL = 0x0522, DGROUP_CTL3DV2_DLL = 0x052c, DGROUP_MULTIMEDIA_LIBRARY_PATH = 0x478d, DGROUP_SYSTEM_DIRECTORY = 0x47a4, DGROUP_CTL3D_FULL_SHORT = 0x486d, DGROUP_CTL3DV2_FULL_SHORT = 0x496d, }; /* * 1010:0405 -- existence probe for one Pascal ShortString path. A failed * open is consumed through IOResult and reported false. A successful open is * closed, and any close failure follows the original RuntimeError path. */ bool multimedia_short_file_exists(Win16FarPtr short_name) { uint8_t copied_name[256]; uint8_t length = win16_read_u8(short_name); copied_name[0] = length; for (uint16_t index = 0; index < length; index++) { copied_name[index + 1] = win16_read_u8( win16_far_add_offset(short_name, (uint16_t)(index + 1))); } uint8_t record_bytes[128]; Win16FarPtr copied_name_far = win16_stack_pointer(copied_name); Win16FarPtr record = win16_stack_pointer(record_bytes); borland_assign_file_short(copied_name_far, record); borland_open_generic_file(1, record); if (borland_take_io_result() != 0) { return false; } borland_close_generic_file(record); borland_require_io_success(); return true; } static void construct_system_path( Win16FarPtr destination, Win16FarPtr file_name, Win16FarPtr temporary_directory, Win16FarPtr temporary_file) { borland_c_to_short_string( temporary_directory, win16_dgroup_pointer(DGROUP_SYSTEM_DIRECTORY)); borland_short_concat( temporary_directory, win16_relocated_code_pointer(3, 0x0470)); borland_c_to_short_string(temporary_file, file_name); borland_short_concat(temporary_directory, temporary_file); borland_short_assign_truncated( destination, temporary_directory, 0xff); } /* * 1010:0472 -- initialize all CTL3D unit state and Windows-version policy. * The two 256-byte temporaries are Pascal ShortStrings. The system-directory * paths remain ShortStrings at 486d/496d; only the selected DLL basename at * 478d is converted back to a NUL-terminated C string for LoadLibrary. */ void multimedia_initialize_runtime_unit(void) { g_multimedia_system_directory_length = GetSystemDirectoryFar16( win16_dgroup_pointer(DGROUP_SYSTEM_DIRECTORY), 200); uint8_t directory_short[256]; uint8_t file_short[256]; Win16FarPtr directory = win16_stack_pointer(directory_short); Win16FarPtr file = win16_stack_pointer(file_short); construct_system_path( win16_dgroup_pointer(DGROUP_CTL3D_FULL_SHORT), win16_dgroup_pointer(DGROUP_CTL3D_DLL), directory, file); construct_system_path( win16_dgroup_pointer(DGROUP_CTL3DV2_FULL_SHORT), win16_dgroup_pointer(DGROUP_CTL3DV2_DLL), directory, file); if (g_multimedia_system_directory_length != 0) { borland_c_to_short_string( file, win16_dgroup_pointer(DGROUP_CTL3DV2_DLL)); (void)borland_short_to_c_string( win16_dgroup_pointer(DGROUP_MULTIMEDIA_LIBRARY_PATH), file); if (!multimedia_short_file_exists( win16_dgroup_pointer(DGROUP_CTL3DV2_FULL_SHORT)) && multimedia_short_file_exists( win16_dgroup_pointer(DGROUP_CTL3D_FULL_SHORT))) { borland_c_to_short_string( file, win16_dgroup_pointer(DGROUP_CTL3D_DLL)); (void)borland_short_to_c_string( win16_dgroup_pointer(DGROUP_MULTIMEDIA_LIBRARY_PATH), file); } } for (uint16_t index = 0; index < 11; index++) { g_multimedia_procedures[index] = 0; } g_multimedia_windows_version = (uint16_t)GetVersion16(); uint8_t major = (uint8_t)g_multimedia_windows_version; uint8_t minor = (uint8_t)(g_multimedia_windows_version >> 8); g_multimedia_legacy_windows = major == 3 && minor < 10; g_multimedia_auto_subclassed = 0; g_multimedia_argument_2 = 0; g_multimedia_argument_1 = 1; g_multimedia_module = 0; g_multimedia_pending = 0; g_multimedia_initialized = 0; } xq#include "tdkpin_numeric.h" static uint8_t digit_character(uint8_t digit) { return (uint8_t)(digit + (digit < 10 ? '0' : 'A' - 10)); } BorlandFormattedSlice borland_format_u32_backward( Win16FarPtr end, uint32_t value, uint16_t base) { Win16FarPtr cursor = end; do { uint8_t digit = (uint8_t)(value % base); value /= base; cursor = win16_far_add_offset(cursor, 0xffff); win16_write_u8(cursor, digit_character(digit)); } while (value != 0); return (BorlandFormattedSlice){ cursor, (uint16_t)(win16_far_offset(end) - win16_far_offset(cursor)), }; } BorlandFormattedSlice borland_format_i32_decimal_backward( Win16FarPtr end, int32_t value) { bool negative = value < 0; uint32_t magnitude = negative ? (uint32_t)(0u - (uint32_t)value) : (uint32_t)value; BorlandFormattedSlice result = borland_format_u32_backward(end, magnitude, 10); if (negative) { result.start = win16_far_add_offset(result.start, 0xffff); win16_write_u8(result.start, '-'); result.length++; } return result; } /* * 1020:1629 — format an int32_t into a Pascal ShortString with a signed field * width, left space padding, and a caller-supplied maximum length. If the * decimal representation is truncated, the target copies its leading bytes. */ void borland_format_i32_short_string( int16_t maximum_length, Win16FarPtr destination, int16_t field_width, int32_t value) { uint8_t workspace[32]; Win16FarPtr end = win16_stack_pointer(workspace + sizeof(workspace)); BorlandFormattedSlice formatted = borland_format_i32_decimal_backward(end, value); int16_t copy_length = (int16_t)formatted.length; if (field_width > maximum_length) { field_width = maximum_length; } if (copy_length > maximum_length) { copy_length = maximum_length; } if (field_width < copy_length) { field_width = copy_length; } win16_write_u8(destination, (uint8_t)field_width); Win16FarPtr output = win16_far_add_offset(destination, 1); uint16_t padding = (uint16_t)(field_width - copy_length); for (uint16_t index = 0; index < padding; index++) { win16_write_u8(win16_far_add_offset(output, index), ' '); } output = win16_far_add_offset(output, padding); for (uint16_t index = 0; index < (uint16_t)copy_length; index++) { win16_write_u8( win16_far_add_offset(output, index), win16_read_u8(win16_far_add_offset(formatted.start, index))); } } static BorlandParseI32Result parse_finish( uint32_t magnitude, bool negative, Win16FarPtr cursor, uint16_t remaining, bool validate_signed_range) { uint32_t result = negative ? 0u - magnitude : magnitude; if (validate_signed_range && magnitude != 0 && negative != ((result & 0x80000000u) != 0)) { return (BorlandParseI32Result){0, cursor, remaining, true}; } return (BorlandParseI32Result){(int32_t)result, cursor, remaining, false}; } BorlandParseI32Result borland_parse_i32_span( Win16FarPtr text, uint16_t length) { Win16FarPtr cursor = text; uint16_t remaining = length; bool negative = false; if (remaining == 0) { return (BorlandParseI32Result){0, cursor, 0, true}; } uint8_t current = win16_read_u8(cursor); if (current == '+' || current == '-') { negative = current == '-'; cursor = win16_far_add_offset(cursor, 1); remaining--; if (remaining == 0) { return (BorlandParseI32Result){0, cursor, 0, true}; } current = win16_read_u8(cursor); } uint32_t magnitude = 0; if (current == '$') { cursor = win16_far_add_offset(cursor, 1); remaining--; if (remaining == 0) { return (BorlandParseI32Result){0, cursor, 0, true}; } while (remaining != 0) { uint8_t value = win16_read_u8(cursor); if (value > 0x60) { value = (uint8_t)(value - 0x20); } uint8_t digit; if (value >= '0' && value <= '9') { digit = (uint8_t)(value - '0'); } else if (value >= 'A' && value <= 'F') { digit = (uint8_t)(value - 'A' + 10); } else { return parse_finish( magnitude, negative, cursor, remaining, true); } if ((magnitude & 0xf0000000u) != 0) { return (BorlandParseI32Result){0, cursor, remaining, true}; } magnitude = (magnitude << 4) | digit; cursor = win16_far_add_offset(cursor, 1); remaining--; } return parse_finish(magnitude, negative, cursor, 0, false); } while (remaining != 0) { uint8_t value = win16_read_u8(cursor); if (value < '0' || value > '9') { break; } if ((magnitude & 0xf0000000u) != 0) { return (BorlandParseI32Result){0, cursor, remaining, true}; } magnitude = magnitude * 10u + (uint8_t)(value - '0'); cursor = win16_far_add_offset(cursor, 1); remaining--; } return parse_finish(magnitude, negative, cursor, remaining, true); } BorlandValI32Result borland_val_i32_short_string(Win16FarPtr string) { uint16_t remaining = win16_read_u8(string); Win16FarPtr cursor = win16_far_add_offset(string, 1); while (remaining != 0 && win16_read_u8(cursor) == ' ') { cursor = win16_far_add_offset(cursor, 1); remaining--; } BorlandParseI32Result parsed = borland_parse_i32_span(cursor, remaining); if (parsed.failed || parsed.remaining != 0) { return (BorlandValI32Result){ 0, (uint16_t)( win16_far_offset(parsed.cursor) - win16_far_offset(string)), }; } return (BorlandValI32Result){parsed.value, 0}; } H9պx E/* ObjectWindows base object destruction protocol. */ #include "tdkpin_object_lifecycle.h" enum { OBJECT_PARENT_OFFSET = 6, OBJECT_BOUND_THUNK_OFFSET = 0x12, OBJECT_TEARDOWN_SLOT = 0x24, DISPOSE_CHILD_CALLBACK_OFFSET = 0x03e9, }; static void write_far( Win16FarPtr object, uint16_t offset, Win16FarPtr value) { win16_write_u16(object, offset, win16_far_offset(value)); win16_write_u16( object, (uint16_t)(offset + 2), win16_far_selector(value)); } /* * 1018:0341 — construct the ObjectWindows base object and its bound thunk. * The object joins its parent's circular child ring before publishing its own * empty child tail and callback thunk. */ Win16FarPtr object_windows_object_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr parent) { BorlandObjectCallFrame frame = {object, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = borland_default_object_constructor(frame.object, 0); win16_write_u16(frame.object, 2, 0); win16_write_u16(frame.object, 4, 0); win16_write_u16(frame.object, 0x17, 0); write_far(frame.object, OBJECT_PARENT_OFFSET, parent); if (parent == 0) { write_far(frame.object, 0x19, 0); } else { object_windows_append_child(parent, frame.object); } write_far(frame.object, 0x0a, 0); write_far(frame.object, 0x0e, 0); write_far( frame.object, OBJECT_BOUND_THUNK_OFFSET, object_windows_allocate_bound_thunk(frame.object)); win16_write_u8(win16_far_add_offset(frame.object, 0x16), 0); object_windows_set_flag_4(frame.object); return frame.object; } /* * 1018:03ff — destroy one ObjectWindows object. * Ordering is binary-significant: virtual teardown, child disposal, parent * unlink, bound-thunk release, root destruction, then owned-allocation free. */ void object_windows_object_destruct( Win16FarPtr object, uint16_t vmt) { uint16_t installed_vmt = win16_read_u16(object); Win16FarPtr teardown = win16_read_far_pointer( win16_dgroup_pointer(installed_vmt), OBJECT_TEARDOWN_SLOT); win16_call_object_method(teardown, object); object_windows_for_each_child( object, win16_relocated_code_pointer(4, DISPOSE_CHILD_CALLBACK_OFFSET)); Win16FarPtr parent = win16_read_far_pointer(object, OBJECT_PARENT_OFFSET); if (parent != 0) { object_windows_remove_child(parent, object); } object_windows_release_bound_thunk( win16_read_far_pointer(object, OBJECT_BOUND_THUNK_OFFSET)); borland_default_object_destructor(object, 0); BorlandObjectCallFrame frame = {object, vmt}; borland_finish_object_destructor(&frame, 0); } -;vxI#ifndef TDKPIN_OBJECT_LIFECYCLE_H #define TDKPIN_OBJECT_LIFECYCLE_H #include "tdkpin_borland_objects.h" #include "tdkpin_object_list.h" #include "tdkpin_object_windows.h" #include "tdkpin_window_messages.h" Win16FarPtr object_windows_object_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr parent); /* 1018:0341 */ void object_windows_object_destruct( Win16FarPtr object, uint16_t vmt); /* 1018:03ff */ #endif яLx'J/* ObjectWindows circular child-object list. */ #include "tdkpin_object_list.h" enum { CONTAINER_CHILD_TAIL_OFFSET = 0x0a, CHILD_NEXT_OFFSET = 0x19, CHILD_WINDOW_HANDLE_OFFSET = 4, CHILD_CAN_CLOSE_SLOT = 0x3c, CHILD_BLOCKS_CLOSE_OFFSET = 0x0ec0, CHILD_GROUP_OFFSET = 0x17, CHILD_FLAGS_OFFSET = 0x16, CHILD_ACTIVATE_SLOT = 0x20, CHILD_TRANSFER_SLOT = 0x40, CHILD_TRANSFER_FLAG = 0x10, OBJECT_TRANSFER_POINTER_OFFSET = 0x0e, }; static Win16FarPtr read_far(Win16FarPtr object, uint16_t offset) { return win16_read_far_pointer(object, offset); } static void write_far( Win16FarPtr object, uint16_t offset, Win16FarPtr value) { win16_write_u16(object, offset, win16_far_offset(value)); win16_write_u16( object, (uint16_t)(offset + 2), win16_far_selector(value)); } /* * 1018:069a — append one child to a circular singly linked ring. * The container stores the tail; tail->next is the oldest/head child. */ void object_windows_append_child( Win16FarPtr container, Win16FarPtr child) { if (child == 0) { return; } Win16FarPtr tail = read_far(container, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { write_far(child, CHILD_NEXT_OFFSET, child); } else { write_far(child, CHILD_NEXT_OFFSET, read_far(tail, CHILD_NEXT_OFFSET)); write_far(tail, CHILD_NEXT_OFFSET, child); } write_far(container, CONTAINER_CHILD_TAIL_OFFSET, child); } /* 1018:071c — unlink one exact far child, maintaining the tail invariant. */ void object_windows_remove_child( Win16FarPtr container, Win16FarPtr child) { Win16FarPtr tail = read_far(container, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { return; } Win16FarPtr previous = tail; while (true) { Win16FarPtr candidate = read_far(previous, CHILD_NEXT_OFFSET); if (candidate == child || candidate == tail) { if (candidate != child) { return; } if (candidate == previous) { write_far(container, CONTAINER_CHILD_TAIL_OFFSET, 0); return; } if (candidate == tail) { write_far(container, CONTAINER_CHILD_TAIL_OFFSET, previous); } write_far(previous, CHILD_NEXT_OFFSET, read_far(candidate, CHILD_NEXT_OFFSET)); return; } previous = candidate; } } /* 1018:080d — visit head-to-tail and return the first matching child. */ Win16FarPtr object_windows_find_child( Win16FarPtr container, Win16FarPtr predicate) { Win16FarPtr tail = read_far(container, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { return 0; } Win16FarPtr child = read_far(tail, CHILD_NEXT_OFFSET); while (true) { if (win16_call_object_predicate(predicate, child)) { return child; } if (child == tail) { return 0; } child = read_far(child, CHILD_NEXT_OFFSET); } } /* * 1018:085a — visit every child head-to-tail. The next far pointer is read * before each callback so the callback may unlink or destroy the current node. */ void object_windows_for_each_child( Win16FarPtr container, Win16FarPtr action) { Win16FarPtr tail = read_far(container, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { return; } Win16FarPtr child = read_far(tail, CHILD_NEXT_OFFSET); while (child != tail) { Win16FarPtr next = read_far(child, CHILD_NEXT_OFFSET); win16_call_object_action(action, child); child = next; } win16_call_object_action(action, tail); } /* 1018:08ac — inherited virtual default returning AX=0xffff. */ uint16_t object_windows_minus_one_default(Win16FarPtr object) { (void)object; return 0xffff; } /* 1018:0ec0 — predicate: a windowed child whose CanClose returns false. */ bool object_windows_child_blocks_close( uint16_t ignored, Win16FarPtr child) { (void)ignored; if (win16_read_u16(win16_far_add_offset( child, CHILD_WINDOW_HANDLE_OFFSET)) == 0) { return false; } uint16_t vmt = win16_read_u16(child); Win16FarPtr can_close = win16_read_far_pointer(win16_dgroup_pointer(vmt), CHILD_CAN_CLOSE_SLOT); return !win16_call_object_bool_method(can_close, child); } /* 1018:0ef4 — true exactly when no child blocks container shutdown. */ bool object_windows_all_children_can_close(Win16FarPtr container) { Win16FarPtr blocker = object_windows_find_child( container, win16_relocated_code_pointer(4, CHILD_BLOCKS_CLOSE_OFFSET)); return blocker == 0; } /* 1018:03e9 — nested ForEach callback: dispose the supplied child object. */ void object_windows_dispose_child_callback( uint16_t ignored, Win16FarPtr child) { (void)ignored; borland_dispose_object(child); } /* 1018:0466 — nested predicate for signed group field +0x17. */ bool object_windows_child_group_matches( int16_t group, Win16FarPtr child) { return group >= 0 && win16_read_u16(win16_far_add_offset(child, CHILD_GROUP_OFFSET)) == (uint16_t)group; } /* * 1018:049e — evaluate one child and preserve the minimized-window text * refresh side effect. The function returns true only for flag-4 children * whose VMT +0x20 method returns false. */ bool object_windows_try_child_activation( uint16_t ignored, Win16FarPtr child) { (void)ignored; bool continue_processing = true; uint8_t flags = win16_read_u8( win16_far_add_offset(child, CHILD_FLAGS_OFFSET)); if ((flags & 4) != 0) { uint16_t vmt = win16_read_u16(child); Win16FarPtr procedure = win16_read_far_pointer( win16_dgroup_pointer(vmt), CHILD_ACTIVATE_SLOT); if (!win16_call_object_bool_method(procedure, child)) { continue_processing = false; } } if (continue_processing) { HWND16 window = win16_read_u16(win16_far_add_offset( child, CHILD_WINDOW_HANDLE_OFFSET)); if (IsIconic16(window) != 0) { char text[82]; (void)GetWindowText16(window, text, 81); (void)SetWindowText16(window, text); } } return !continue_processing; } /* 1018:0524 — group-zero predicate gated by 1018:049e. */ bool object_windows_unindexed_child_matches( uint16_t ignored, Win16FarPtr child) { return win16_read_u16(win16_far_add_offset( child, CHILD_GROUP_OFFSET)) == 0 && object_windows_try_child_activation(ignored, child); } static Win16FarPtr find_child_in_group( Win16FarPtr container, int16_t group, bool require_activation) { Win16FarPtr tail = read_far(container, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { return 0; } Win16FarPtr child = read_far(tail, CHILD_NEXT_OFFSET); while (true) { bool matches = object_windows_child_group_matches(group, child); if (matches && (!require_activation || object_windows_try_child_activation(0, child))) { return child; } if (child == tail) { return 0; } child = read_far(child, CHILD_NEXT_OFFSET); } } /* * 1018:055c — scan numbered groups starting at one. Each found child is passed * through 049e; after the first missing group, group zero is searched for a * child whose 049e result is true. The unusual final inversion is preserved. */ bool object_windows_validate_child_groups(Win16FarPtr container) { int16_t group = 1; bool result = false; Win16FarPtr child; do { child = find_child_in_group(container, group, false); if (child != 0) { result = object_windows_try_child_activation(0, child); } group++; } while (!result && child != 0); if (!result) { return find_child_in_group(container, 0, true) == 0; } return true; } /* 1018:0d9b — validate child groups, store status -4, or call VMT +0x44(2). */ void object_windows_prepare_window(Win16FarPtr window) { if (!object_windows_validate_child_groups(window)) { win16_write_u16(window, 2, 0xfffc); return; } uint16_t vmt = win16_read_u16(window); Win16FarPtr procedure = win16_read_far_pointer(win16_dgroup_pointer(vmt), 0x44); win16_call_object_u16_method(procedure, window, 2); } /* * 1018:0dcd — nested transfer callback. Flag 0x10 selects participants; * VMT +0x40 receives child, direction, and the current far cursor. AX advances * only the cursor offset with 16-bit wrap, preserving its selector. */ void object_windows_transfer_child_callback( ObjectWindowsTransferContext *context, Win16FarPtr child) { uint8_t flags = win16_read_u8( win16_far_add_offset(child, CHILD_FLAGS_OFFSET)); if ((flags & CHILD_TRANSFER_FLAG) == 0) { return; } uint16_t vmt = win16_read_u16(child); Win16FarPtr procedure = win16_read_far_pointer( win16_dgroup_pointer(vmt), CHILD_TRANSFER_SLOT); uint16_t consumed = win16_call_object_transfer_method( procedure, child, context->direction, context->cursor); context->cursor = win16_make_far_pointer( win16_far_selector(context->cursor), (uint16_t)(win16_far_offset(context->cursor) + consumed)); } /* 1018:0e0a — transfer across the circular child list head-to-tail. */ void object_windows_transfer_child_data( Win16FarPtr object, uint16_t direction) { Win16FarPtr cursor = read_far(object, OBJECT_TRANSFER_POINTER_OFFSET); if (cursor == 0) { return; } ObjectWindowsTransferContext context = {cursor, direction}; Win16FarPtr tail = read_far(object, CONTAINER_CHILD_TAIL_OFFSET); if (tail == 0) { return; } Win16FarPtr child = read_far(tail, CHILD_NEXT_OFFSET); while (child != tail) { Win16FarPtr next = read_far(child, CHILD_NEXT_OFFSET); object_windows_transfer_child_callback(&context, child); child = next; } object_windows_transfer_child_callback(&context, tail); } $9̵xZ#ifndef TDKPIN_OBJECT_LIST_H #define TDKPIN_OBJECT_LIST_H #include "tdkpin_segmented.h" void object_windows_append_child( Win16FarPtr container, Win16FarPtr child); /* 1018:069a */ void object_windows_remove_child( Win16FarPtr container, Win16FarPtr child); /* 1018:071c */ Win16FarPtr object_windows_find_child( Win16FarPtr container, Win16FarPtr predicate); /* 1018:080d */ void object_windows_for_each_child( Win16FarPtr container, Win16FarPtr action); /* 1018:085a */ uint16_t object_windows_minus_one_default( Win16FarPtr object); /* 1018:08ac */ bool object_windows_child_blocks_close( uint16_t ignored, Win16FarPtr child); /* 1018:0ec0 */ bool object_windows_all_children_can_close( Win16FarPtr container); /* 1018:0ef4 */ void object_windows_dispose_child_callback( uint16_t ignored, Win16FarPtr child); /* 1018:03e9 */ bool object_windows_child_group_matches( int16_t group, Win16FarPtr child); /* 1018:0466 */ bool object_windows_try_child_activation( uint16_t ignored, Win16FarPtr child); /* 1018:049e */ bool object_windows_unindexed_child_matches( uint16_t ignored, Win16FarPtr child); /* 1018:0524 */ bool object_windows_validate_child_groups( Win16FarPtr container); /* 1018:055c */ void object_windows_prepare_window( Win16FarPtr window); /* 1018:0d9b */ typedef struct { Win16FarPtr cursor; uint16_t direction; } ObjectWindowsTransferContext; void object_windows_transfer_child_callback( ObjectWindowsTransferContext *context, Win16FarPtr child); /* 1018:0dcd */ void object_windows_transfer_child_data( Win16FarPtr object, uint16_t direction); /* 1018:0e0a */ void borland_dispose_object(Win16FarPtr object); bool win16_call_object_predicate( Win16FarPtr procedure, Win16FarPtr child); void win16_call_object_action( Win16FarPtr procedure, Win16FarPtr child); bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object); void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument); uint16_t win16_call_object_transfer_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t direction, Win16FarPtr cursor); #endif x2X/* * Borland ObjectWindows callback bootstrap reconstructed from TDKPIN.EXE. * * Target: a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c * Functions: 1018:0045 and 1018:018b (NE export ordinals 208 and 211) */ #include "tdkpin_object_windows.h" #include "tdkpin_borland_runtime.h" enum { OBJECT_WINDOW_VMT_OFFSET = 0, OBJECT_WINDOW_HANDLE_OFFSET = 4, OBJECT_WINDOW_BOUND_PROC_OFFSET = 0x12, WIN16_GWL_WNDPROC = -4, DGROUP_OBJECT_SELECTOR_PROPERTY = 0x067a, /* "OW1" */ DGROUP_OBJECT_OFFSET_PROPERTY = 0x067e, /* "OW2" */ }; enum { VMT_MESSAGE_TABLE_OFFSET = 4, VMT_DEFAULT_MESSAGE_SLOT = 0x0c, MESSAGE_TABLE_PARENT_OFFSET = 0, MESSAGE_TABLE_CACHE_ID_OFFSET = 2, MESSAGE_TABLE_CACHE_SLOT_OFFSET = 4, MESSAGE_TABLE_COUNT_OFFSET = 6, MESSAGE_TABLE_IDS_OFFSET = 8, }; /* DGROUP 1028:0676/0678; valid only while CreateWindow16 is in progress. */ extern Win16FarPtr g_object_windows_creating_object; LRESULT16 SetWindowLong16(HWND16 window, INT16 index, int32_t value); BOOL16 SetProp16(HWND16 window, Win16FarPtr name, Win16Handle value); Win16Handle RemoveProp16(HWND16 window, Win16FarPtr name); Win16Handle GetProp16(HWND16 window, Win16FarPtr name); BOOL16 IsWindow16(HWND16 window); int32_t GetWindowLong16(HWND16 window, INT16 index); /* * 1018:0045 — associate a far ObjectWindows object with one HWND. * * Win16 SetProp stores only a 16-bit HANDLE, so ObjectWindows deliberately * splits the far pointer into two properties. OW1 holds the selector and OW2 * holds the offset; the inverse lookup routine recombines them. */ void object_windows_bind_window(HWND16 window, Win16FarPtr object) { (void)SetProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_SELECTOR_PROPERTY), win16_far_selector(object)); (void)SetProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_OFFSET_PROPERTY), win16_far_offset(object)); } /* 1018:0071 — remove both halves of the HWND/object association. */ void object_windows_unbind_window(HWND16 window) { (void)RemoveProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_SELECTOR_PROPERTY)); (void)RemoveProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_OFFSET_PROPERTY)); } /* * 1018:0097 — recover the bound ObjectWindows object for one HWND. * Generated thunks carry the object at +3/+5; subclassed/native procedures use * the OW1 selector and OW2 offset properties installed by 1018:0045. */ Win16FarPtr object_windows_object_from_window(HWND16 window) { if (!IsWindow16(window)) { return 0; } Win16FarPtr procedure = (Win16FarPtr)GetWindowLong16(window, WIN16_GWL_WNDPROC); uint16_t procedure_offset = win16_far_offset(procedure); bool generated_thunk = win16_read_u8(procedure) == 0xe8 && win16_read_u16(win16_far_add_offset(procedure, 1)) == (uint16_t)(0xffff - procedure_offset) && win16_read_u16(win16_make_far_pointer( win16_far_selector(procedure), 2)) == 0x2e5b; if (generated_thunk) { return win16_read_far_pointer(procedure, 3); } uint16_t selector = GetProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_SELECTOR_PROPERTY)); uint16_t offset = GetProp16( window, win16_dgroup_pointer(DGROUP_OBJECT_OFFSET_PROPERTY)); return win16_make_far_pointer(selector, offset); } /* * 1018:018b — class bootstrap WNDPROC16. * * The initial class procedure is used for the first message only. It replaces * itself with the object's generated 7-byte bound thunk, publishes the HWND to * object association, then tail-dispatches the unchanged 10-byte WNDPROC frame. * AX:DX from that direct far call is returned unchanged. */ LRESULT16 object_window_bootstrap_proc( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { Win16FarPtr object = g_object_windows_creating_object; Win16FarPtr bound_proc = win16_read_far_pointer(object, OBJECT_WINDOW_BOUND_PROC_OFFSET); (void)SetWindowLong16(window, WIN16_GWL_WNDPROC, (int32_t)bound_proc); object_windows_bind_window(window, object); return win16_call_window_proc(bound_proc, window, message, wparam, lparam); } /* * 1018:0002 — resolve a nonnegative ObjectWindows message id. * * The most-derived VMT points at a linked dynamic-message table. Every node * contains a parent pointer, ids, and far handler slots in the same compact * layout as Borland dynamic methods. Unlike 1020:16e6, a miss selects a caller- * supplied VMT fallback slot, and a parent hit is cached in the most-derived * table rather than in the node where it was found. */ Win16FarPtr object_windows_resolve_message_handler( uint16_t vmt, uint16_t message, uint16_t fallback_slot) { uint16_t root_table = win16_read_u16(win16_dgroup_pointer( (uint16_t)(vmt + VMT_MESSAGE_TABLE_OFFSET))); if (root_table == 0) { return win16_dgroup_pointer((uint16_t)(vmt + fallback_slot)); } Win16FarPtr root = win16_dgroup_pointer(root_table); if (message == win16_read_u16(win16_far_add_offset( root, MESSAGE_TABLE_CACHE_ID_OFFSET))) { uint16_t cached_slot = win16_read_u16(win16_far_add_offset( root, MESSAGE_TABLE_CACHE_SLOT_OFFSET)); return win16_dgroup_pointer(cached_slot); } uint16_t table = root_table; while (table != 0) { Win16FarPtr node = win16_dgroup_pointer(table); uint16_t count = win16_read_u16(win16_far_add_offset( node, MESSAGE_TABLE_COUNT_OFFSET)); for (uint16_t index = 0; index < count; index++) { uint16_t id = win16_read_u16(win16_far_add_offset( node, (uint16_t)(MESSAGE_TABLE_IDS_OFFSET + index * 2u))); if (id != message) { continue; } uint16_t slot = (uint16_t)( table + MESSAGE_TABLE_IDS_OFFSET + count * 2u + index * 4u); win16_write_u16( root, MESSAGE_TABLE_CACHE_ID_OFFSET, message); win16_write_u16( root, MESSAGE_TABLE_CACHE_SLOT_OFFSET, slot); return win16_dgroup_pointer(slot); } table = win16_read_u16(win16_far_add_offset( node, MESSAGE_TABLE_PARENT_OFFSET)); } return win16_dgroup_pointer((uint16_t)(vmt + fallback_slot)); } /* 1018:0103 — invoke the optional process-wide message instrumentation hook. */ void object_windows_call_message_hook( Win16FarPtr object, Win16FarPtr handler, const ObjectWindowsMessage *message) { win16_call_object_message_hook( g_object_windows_message_hook, object, handler, message->window, message->message, message->wparam, message->lparam); } /* * 1018:0133 — shared WNDPROC16/DLGPROC16 reached by every generated thunk. * The thunk supplies ES:BX = object. The Pascal Win16 argument order places * HWND at BP+0e and LPARAM at BP+06/+08; the explicit C signature restores the * logical API order while preserving all original field widths. */ LRESULT16 object_dispatch_window_or_dialog_proc( Win16FarPtr object, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { win16_write_u16(object, OBJECT_WINDOW_HANDLE_OFFSET, window); ObjectWindowsMessage record = { .window = window, .message = message, .wparam = wparam, .lparam = lparam, .result = 1, }; uint16_t vmt = win16_read_u16(win16_far_add_offset( object, OBJECT_WINDOW_VMT_OFFSET)); Win16FarPtr handler_slot; if ((int16_t)message < 0) { handler_slot = win16_dgroup_pointer( (uint16_t)(vmt + VMT_DEFAULT_MESSAGE_SLOT)); } else { handler_slot = object_windows_resolve_message_handler( vmt, message, VMT_DEFAULT_MESSAGE_SLOT); } Win16FarPtr handler = win16_read_far_pointer(handler_slot, 0); if (win16_far_selector(g_object_windows_message_hook) != 0) { object_windows_call_message_hook(object, handler, &record); } win16_call_object_message_handler(handler, object, &record); return record.result; } /* * 1018:08c3 — generic ObjectWindows event dispatch used by command/focus/menu * paths. DX supplies the fallback VMT slot and AX the dynamic method id. The * existing far event record is passed unchanged to the selected handler. */ void object_windows_dispatch_event( uint16_t fallback_slot, uint16_t method_id, Win16FarPtr event, Win16FarPtr object) { uint16_t vmt = win16_read_u16(object); Win16FarPtr handler_slot = object_windows_resolve_message_handler( vmt, method_id, fallback_slot); Win16FarPtr handler = win16_read_far_pointer(handler_slot, 0); if (win16_far_selector(g_object_windows_message_hook) != 0) { ObjectWindowsMessage hook_record = { .window = win16_read_u16(event), .message = win16_read_u16(win16_far_add_offset(event, 2)), .wparam = win16_read_u16(win16_far_add_offset(event, 4)), .lparam = (LPARAM16)(uint32_t)( win16_read_u16(win16_far_add_offset(event, 6)) | ((uint32_t)win16_read_u16( win16_far_add_offset(event, 8)) << 16)), .result = 0, }; object_windows_call_message_hook(object, handler, &hook_record); } win16_call_object_event_handler(handler, object, event); } enum { BOUND_THUNK_POOL_BYTES = 0x0100, BOUND_THUNK_SHARED_CODE_OFFSET = 2, BOUND_THUNK_SHARED_CODE_BYTES = 5, BOUND_THUNK_DISPATCH_PROC_OFFSET = 7, BOUND_THUNK_FIRST_OFFSET = 0x000b, BOUND_THUNK_BYTES = 7, BOUND_THUNK_OBJECT_OFFSET = 3, DGROUP_BOUND_THUNK_TEMPLATE = 0x0686, }; static void write_far_pointer( Win16FarPtr destination, uint16_t byte_offset, Win16FarPtr value) { win16_write_u16(destination, byte_offset, win16_far_offset(value)); win16_write_u16( destination, (uint16_t)(byte_offset + 2), win16_far_selector(value)); } /* * Build one 256-byte executable block. Offset 2 contains the shared sequence * `POP BX; CS: LES BX,[BX]; JMP FAR dispatch_proc`. Each seven-byte thunk is * `CALL block:0002` followed by a mutable far object/free-list pointer. The * near displacement -1-offset makes every CALL land at block offset 2. */ static void allocate_bound_thunk_pool(void) { HGLOBAL16 allocation = GlobalAlloc16(0, BOUND_THUNK_POOL_BYTES); Win16FarPtr block = GlobalLock16(allocation); uint16_t selector = win16_far_selector(block); win16_write_u16(block, 0, g_object_windows_thunk_code_selector); borland_move_bytes( win16_far_add_offset(block, BOUND_THUNK_SHARED_CODE_OFFSET), win16_dgroup_pointer(DGROUP_BOUND_THUNK_TEMPLATE), BOUND_THUNK_SHARED_CODE_BYTES); write_far_pointer( block, BOUND_THUNK_DISPATCH_PROC_OFFSET, g_object_windows_dispatch_proc); uint16_t offset = BOUND_THUNK_FIRST_OFFSET; do { Win16FarPtr thunk = win16_make_far_pointer(selector, offset); win16_write_u8(thunk, 0xe8); win16_write_u16( thunk, 1, (uint16_t)(0xffffu - offset)); write_far_pointer( thunk, BOUND_THUNK_OBJECT_OFFSET, g_object_windows_free_thunk); g_object_windows_free_thunk = thunk; offset = (uint16_t)(offset + BOUND_THUNK_BYTES); } while (offset != BOUND_THUNK_POOL_BYTES); g_object_windows_thunk_code_selector = selector; (void)PrestoChangoSelector16(selector, selector); } /* * 1018:01dc — pop a generated WNDPROC thunk and bind its embedded far object. * Executable selectors are modified only through a temporary CS-to-DS alias. */ Win16FarPtr object_windows_allocate_bound_thunk(Win16FarPtr object) { if (g_object_windows_free_thunk == 0) { allocate_bound_thunk_pool(); } Win16FarPtr thunk = g_object_windows_free_thunk; uint16_t alias = AllocCStoDSAlias16(win16_far_selector(thunk)); Win16FarPtr writable = win16_make_far_pointer( alias, win16_far_offset(thunk)); g_object_windows_free_thunk = win16_read_far_pointer(writable, BOUND_THUNK_OBJECT_OFFSET); write_far_pointer(writable, BOUND_THUNK_OBJECT_OFFSET, object); (void)FreeSelector16(alias); return thunk; } /* 1018:02fa — push one bound WNDPROC thunk back onto the global free list. */ void object_windows_release_bound_thunk(Win16FarPtr thunk) { uint16_t alias = AllocCStoDSAlias16(win16_far_selector(thunk)); Win16FarPtr writable = win16_make_far_pointer( alias, win16_far_offset(thunk)); write_far_pointer( writable, BOUND_THUNK_OBJECT_OFFSET, g_object_windows_free_thunk); (void)FreeSelector16(alias); g_object_windows_free_thunk = thunk; } vx! #ifndef TDKPIN_OBJECT_WINDOWS_H #define TDKPIN_OBJECT_WINDOWS_H #include "tdkpin_segmented.h" #pragma pack(push, 1) typedef struct { HWND16 window; UINT16 message; WPARAM16 wparam; LPARAM16 lparam; LRESULT16 result; } ObjectWindowsMessage; #pragma pack(pop) _Static_assert( sizeof(ObjectWindowsMessage) == 14, "ObjectWindows message record layout drift"); #pragma pack(push, 1) typedef struct { uint16_t parent_table; uint16_t cached_message; uint16_t cached_handler_slot; uint16_t count; uint16_t message_ids[9]; Win16FarPtr handlers[9]; } ObjectWindowsMessageTable9; #pragma pack(pop) _Static_assert( sizeof(ObjectWindowsMessageTable9) == 62, "ObjectWindows dynamic message table layout drift"); extern ObjectWindowsMessageTable9 g_object_windows_base_message_table; /* Binary overlay: 1028:05cc..0609; cache words are mutable. */ void object_windows_bind_window(HWND16 window, Win16FarPtr object); void object_windows_unbind_window(HWND16 window); Win16FarPtr object_windows_object_from_window(HWND16 window); LRESULT16 object_window_bootstrap_proc( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); Win16FarPtr object_windows_allocate_bound_thunk( Win16FarPtr object); /* 1018:01dc */ void object_windows_release_bound_thunk( Win16FarPtr thunk); /* 1018:02fa */ extern uint16_t g_object_windows_thunk_code_selector; /* 1028:066c */ extern Win16FarPtr g_object_windows_free_thunk; /* 1028:066e/0670 */ extern Win16FarPtr g_object_windows_dispatch_proc; /* 1028:0672/0674 */ extern Win16FarPtr g_object_windows_message_hook; /* 1028:0682/0684 */ extern Win16FarPtr g_object_windows_creating_object; /* 1028:0676/0678 */ Win16FarPtr object_windows_resolve_message_handler( uint16_t vmt, uint16_t message, uint16_t fallback_slot); /* 1018:0002 */ void object_windows_call_message_hook( Win16FarPtr object, Win16FarPtr handler, const ObjectWindowsMessage *message); /* 1018:0103 */ LRESULT16 object_dispatch_window_or_dialog_proc( Win16FarPtr object, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); /* 1018:0133 */ void object_windows_dispatch_event( uint16_t fallback_slot, uint16_t method_id, Win16FarPtr event, Win16FarPtr object); /* 1018:08c3 */ /* Platform bridge for the original indirect far calls. */ void win16_call_object_message_handler( Win16FarPtr procedure, Win16FarPtr object, ObjectWindowsMessage *message); void win16_call_object_message_hook( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr handler, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); void win16_call_object_event_handler( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr event); void win16_call_object_scroll_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t position, uint16_t command); void win16_call_object_paint_method( Win16FarPtr procedure, Win16FarPtr object, PAINTSTRUCT16 *paint, HDC16 dc); #endif =FxW/* TDKPIN logical-palette creation and PAL resource loading. */ #include "tdkpin_palette.h" #include "tdkpin_strings.h" enum { DGROUP_PALETTE_HANDLE = 0x444e, DGROUP_PALETTE_RGB = 0x4450, DGROUP_PAL_RESOURCE_TYPE = 0x045a, DGROUP_DAT_RESOURCE_TYPE = 0x045e, DGROUP_DISPLAY_DRIVER = 0x0462, PALETTE_COLOR_COUNT = 256, PALETTE_RGB_BYTES = 768, LOGPALETTE_VERSION_0300 = 0x0300, PALETTE_ENTRY_NOCOLLAPSE = 0x04, CREATE_DIBITMAP_INITIALIZE = 0x00000004, }; /* Code2 1008:11bd and 131e, represented with their exact signed bounds. */ static const BorlandInt32Range g_uint16_range = {0, 0xffff}; static const BorlandInt32Range g_palette_byte_range = {0, 0x02ff}; /* * 1008:0023 — create and briefly realize a 256-entry PC_NOCOLLAPSE palette in * the supplied window DC. Allocation failure is the sole guarded palette path; * all GDI results are otherwise consumed exactly as returned. */ void tdkpin_realize_nocollapse_palette(HWND16 window) { Win16FarPtr logical_palette = borland_get_mem(sizeof(LOGPALETTE256)); if (logical_palette == 0) { return; } win16_write_u16(logical_palette, 0, LOGPALETTE_VERSION_0300); win16_write_u16(logical_palette, 2, PALETTE_COLOR_COUNT); for (uint16_t index = 0; index < PALETTE_COLOR_COUNT; index++) { Win16FarPtr entry = win16_far_add_offset( logical_palette, (uint16_t)(4 + index * sizeof(PALETTEENTRY16))); win16_write_u8(entry, 0); win16_write_u8(win16_far_add_offset(entry, 1), 0); win16_write_u8(win16_far_add_offset(entry, 2), 0); win16_write_u8( win16_far_add_offset(entry, 3), PALETTE_ENTRY_NOCOLLAPSE); } HDC16 dc = GetDC16(window); HPALETTE16 palette = CreatePalette16(logical_palette); HPALETTE16 previous = SelectPalette16(dc, palette, 0); (void)RealizePalette16(dc); (void)SelectPalette16(dc, previous, 1); (void)DeleteObject16(palette); (void)ReleaseDC16(window, dc); borland_free_mem(logical_palette, sizeof(LOGPALETTE256)); } /* * 1008:11c5 — materialize a 256-entry LOGPALETTE from the packed DGROUP RGB * table, create the GDI palette, then range-check and free the temporary block. */ void tdkpin_create_palette_from_rgb_table(void) { const uint32_t allocation_bytes = sizeof(LOGPALETTE256); Win16FarPtr logical_palette = borland_get_mem((uint16_t)allocation_bytes); win16_write_u16(logical_palette, 0, LOGPALETTE_VERSION_0300); win16_write_u16(logical_palette, 2, PALETTE_COLOR_COUNT); for (uint16_t index = 0; index < PALETTE_COLOR_COUNT; index++) { Win16FarPtr source = win16_far_add_offset( win16_dgroup_pointer(DGROUP_PALETTE_RGB), (uint16_t)(index * 3)); Win16FarPtr entry = win16_far_add_offset( logical_palette, (uint16_t)(4 + index * sizeof(PALETTEENTRY16))); win16_write_u8(entry, win16_read_u8(source)); win16_write_u8( win16_far_add_offset(entry, 1), win16_read_u8(win16_far_add_offset(source, 1))); win16_write_u8( win16_far_add_offset(entry, 2), win16_read_u8(win16_far_add_offset(source, 2))); win16_write_u8(win16_far_add_offset(entry, 3), 0); } HPALETTE16 palette = CreatePalette16(logical_palette); win16_write_u16( win16_dgroup_pointer(DGROUP_PALETTE_HANDLE), 0, palette); borland_check_int32_range((int32_t)allocation_bytes, &g_uint16_range); borland_free_mem(logical_palette, (uint16_t)allocation_bytes); } /* * 1008:1326 — load a custom "pal" resource and copy exactly 768 bytes. Both * source and destination index expressions pass through the compiler-emitted * 0..767 range descriptor on every iteration. The loaded resource is unlocked * but deliberately not FreeResource'd here, matching the binary. */ void tdkpin_load_palette_resource( Win16FarPtr destination, Win16FarPtr resource_name, HINSTANCE16 instance) { HRSRC16 found = FindResource16( instance, resource_name, win16_dgroup_pointer(DGROUP_PAL_RESOURCE_TYPE)); HGLOBAL16 resource = LoadResource16(instance, found); Win16FarPtr source = LockResource16(resource); for (uint16_t index = 0; index < PALETTE_RGB_BYTES; index++) { borland_check_int32_range(index, &g_palette_byte_range); uint8_t value = win16_read_u8(win16_far_add_offset(source, index)); borland_check_int32_range(index, &g_palette_byte_range); win16_write_u8(win16_far_add_offset(destination, index), value); } (void)GlobalUnlock16(resource); } /* * 1008:13a8 — project all 256 packed RGB triplets to BITMAPINFO RGBQUADs. * The compiler's dead ((1< #pragma pack(push, 1) typedef struct { uint8_t red; uint8_t green; uint8_t blue; uint8_t flags; } PALETTEENTRY16; typedef struct { uint16_t version; uint16_t entry_count; PALETTEENTRY16 entries[256]; } LOGPALETTE256; typedef struct { uint8_t blue; uint8_t green; uint8_t red; uint8_t reserved; } RGBQUAD16; typedef struct { uint32_t size; int32_t width; int32_t height; uint16_t planes; uint16_t bit_count; uint32_t compression; uint32_t image_bytes; int32_t x_pixels_per_meter; int32_t y_pixels_per_meter; uint32_t colors_used; uint32_t important_colors; } BITMAPINFOHEADER16; typedef struct { BITMAPINFOHEADER16 header; RGBQUAD16 colors[256]; } BITMAPINFO256; #pragma pack(pop) _Static_assert(sizeof(PALETTEENTRY16) == 4, "Win16 PALETTEENTRY drift"); _Static_assert(sizeof(LOGPALETTE256) == 1028, "Win16 LOGPALETTE drift"); _Static_assert(sizeof(RGBQUAD16) == 4, "Win16 RGBQUAD drift"); _Static_assert(sizeof(BITMAPINFOHEADER16) == 40, "BITMAPINFOHEADER drift"); _Static_assert( offsetof(BITMAPINFOHEADER16, bit_count) == 14, "BITMAPINFO bit-count drift"); _Static_assert(offsetof(BITMAPINFO256, colors) == 40, "BITMAPINFO color offset drift"); _Static_assert(sizeof(BITMAPINFO256) == 1064, "BITMAPINFO256 drift"); void tdkpin_create_palette_from_rgb_table(void); /* 1008:11c5 */ void tdkpin_realize_nocollapse_palette(HWND16 window); /* 1008:0023 */ void tdkpin_load_palette_resource( Win16FarPtr destination, Win16FarPtr resource_name, HINSTANCE16 instance); /* 1008:1326 */ void tdkpin_fill_bitmap_info_palette( Win16FarPtr bitmap_info); /* 1008:13a8 */ HBITMAP16 tdkpin_load_bitmap_resource( Win16FarPtr resource_name, HINSTANCE16 instance); /* 1008:149d */ #endif PRݰxO/* 281-frame, mask/image-composited panel animation from TDKPIN Code1. */ #include "tdkpin_panel_animation.h" #include "tdkpin_sound.h" static Win16FarPtr caller_receiver(uint16_t caller_bp) { uint16_t offset = win16_read_stack_u16((uint16_t)(caller_bp + 6)); uint16_t selector = win16_read_stack_u16((uint16_t)(caller_bp + 8)); return win16_make_far_pointer(selector, offset); } static INT16 twice(int32_t value) { return (INT16)(uint16_t)((uint32_t)value * 2u); } static void copy_region( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y) { (void)BitBlt16( destination, destination_x, destination_y, width, height, source, source_x, source_y, 0x00cc0020u); } static void mask_image_pair( HDC16 panel, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 atlas, INT16 mask_x, INT16 mask_y, INT16 image_x, INT16 image_y) { (void)BitBlt16( panel, destination_x, destination_y, width, height, atlas, mask_x, mask_y, 0x008800c6u); (void)BitBlt16( panel, destination_x, destination_y, width, height, atlas, image_x, image_y, 0x00ee0086u); } static void phase_1_to_44( int32_t frame, HDC16 panel, HDC16 atlas) { mask_image_pair( panel, 20, 0, 45, twice(frame), atlas, 45, (INT16)(twice(45 - frame) + 89), 0, (INT16)(twice(45 - frame) + 89)); } static void phase_66_to_128( int32_t frame, HDC16 panel, HDC16 atlas) { copy_region(panel, 0, 33, 91, 90, atlas, 180, 90); if (frame < 83) { mask_image_pair( panel, 0, twice(82 - frame), 91, 90, atlas, 362, 90, 271, 90); } else { INT16 height = twice(128 - frame); INT16 source_y = (INT16)(twice(frame - 82) + 90); mask_image_pair( panel, 0, 0, 91, height, atlas, 362, source_y, 271, source_y); } if (frame < 111) { INT16 height = twice(110 - frame); INT16 source_y = (INT16)(twice(frame - 66) + 90); mask_image_pair( panel, 20, 0, 45, height, atlas, 135, source_y, 90, source_y); } } static void phase_159_to_221( int32_t frame, HDC16 panel, HDC16 atlas) { copy_region(panel, 0, 33, 91, 90, atlas, 180, 90); if (frame < 204) { INT16 height = twice(frame - 159); INT16 source_y = (INT16)(twice(204 - frame) + 90); mask_image_pair( panel, 0, 0, 91, height, atlas, 362, source_y, 453, source_y); } else { mask_image_pair( panel, 0, twice(frame - 204), 91, 90, atlas, 362, 90, 453, 90); } if (frame > 176) { if (frame == 221) { mask_image_pair( panel, 20, 0, 45, 88, atlas, 135, 90, 90, 90); } else { INT16 height = twice(frame - 177); INT16 source_y = (INT16)(twice(222 - frame) + 89); mask_image_pair( panel, 20, 0, 45, height, atlas, 135, source_y, 90, source_y); } } } static void full_panel_mask_image(HDC16 panel, HDC16 atlas) { mask_image_pair( panel, 0, 33, 91, 90, atlas, 362, 90, 453, 90); } static void phase_238_to_281( int32_t frame, HDC16 panel, HDC16 atlas) { full_panel_mask_image(panel, atlas); INT16 height = twice(281 - frame); INT16 source_y = (INT16)(twice(frame - 238) + 90); mask_image_pair( panel, 20, 0, 45, height, atlas, 45, source_y, 0, source_y); } /* 1000:7440 -- render one frame of the 91x123 board-panel animation. */ void tdkpin_draw_panel_animation(uint16_t caller_bp) { Win16FarPtr receiver = caller_receiver(caller_bp); HWND16 window = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(window); HDC16 atlas_dc = CreateCompatibleDC16(dc); HGDIOBJ16 old_atlas = SelectObject16( atlas_dc, win16_read_u16(win16_dgroup_pointer(0x085f))); HDC16 panel_dc = CreateCompatibleDC16(dc); HBITMAP16 panel_bitmap = CreateCompatibleBitmap16(dc, 91, 123); HGDIOBJ16 old_panel = SelectObject16(panel_dc, panel_bitmap); copy_region(panel_dc, 0, 0, 91, 123, atlas_dc, 79, 0); (void)SelectObject16( atlas_dc, win16_read_u16(win16_dgroup_pointer(0x0859))); int32_t frame = (int32_t)win16_read_u32(win16_dgroup_pointer(0x0851)); int16_t phase_frame = (int16_t)frame; if (phase_frame >= 1 && phase_frame <= 44) { if (frame == 1) { tdkpin_play_sound_if_not_tilted(13); (void)SelectObject16( panel_dc, win16_read_u16(win16_dgroup_pointer(0x085b))); copy_region(panel_dc, 79, 0, 91, 90, atlas_dc, 271, 90); (void)SelectObject16(panel_dc, panel_bitmap); } phase_1_to_44(frame, panel_dc, atlas_dc); } else if (phase_frame >= 45 && phase_frame <= 57) { if (frame == 45) { (void)tdkpin_stop_sound_if_active(); } mask_image_pair( panel_dc, 20, 0, 45, 88, atlas_dc, 45, 90, 0, 90); } else if (phase_frame >= 58 && phase_frame <= 65) { if (frame == 58) { tdkpin_play_sound_if_not_tilted(12); } mask_image_pair( panel_dc, 20, 0, 45, 88, atlas_dc, 135, 90, 90, 90); } else if (phase_frame >= 66 && phase_frame <= 128) { if (frame == 66) { tdkpin_play_sound_if_not_tilted(13); } phase_66_to_128(frame, panel_dc, atlas_dc); } else if (phase_frame >= 129 && phase_frame <= 158) { if (frame == 129) { (void)tdkpin_stop_sound_if_active(); } copy_region(panel_dc, 0, 33, 91, 90, atlas_dc, 180, 90); } else if (phase_frame >= 159 && phase_frame <= 221) { if (frame == 159) { tdkpin_play_sound_if_not_tilted(13); } phase_159_to_221(frame, panel_dc, atlas_dc); } else if (phase_frame >= 222 && phase_frame <= 229) { if (frame == 222) { (void)tdkpin_stop_sound_if_active(); } full_panel_mask_image(panel_dc, atlas_dc); mask_image_pair( panel_dc, 20, 0, 45, 88, atlas_dc, 135, 90, 90, 90); } else if (phase_frame >= 230 && phase_frame <= 237) { if (frame == 230) { tdkpin_play_sound_if_not_tilted(12); } full_panel_mask_image(panel_dc, atlas_dc); mask_image_pair( panel_dc, 20, 0, 45, 88, atlas_dc, 45, 90, 0, 90); } else if (phase_frame >= 238 && phase_frame <= 281) { if (frame == 238) { tdkpin_play_sound_if_not_tilted(13); } phase_238_to_281(frame, panel_dc, atlas_dc); if (frame == 281) { (void)SelectObject16( panel_dc, win16_read_u16(win16_dgroup_pointer(0x085b))); (void)SelectObject16( atlas_dc, win16_read_u16(win16_dgroup_pointer(0x085d))); copy_region(panel_dc, 79, 0, 91, 90, atlas_dc, 79, 0); (void)SelectObject16(panel_dc, panel_bitmap); } } copy_region(dc, 79, 0, 91, 123, panel_dc, 0, 0); (void)SelectObject16(panel_dc, old_panel); (void)SelectObject16(atlas_dc, old_atlas); (void)DeleteObject16(panel_bitmap); (void)DeleteDC16(panel_dc); (void)DeleteDC16(atlas_dc); (void)ReleaseDC16(window, dc); } !l\ xJ#ifndef TDKPIN_PANEL_ANIMATION_H #define TDKPIN_PANEL_ANIMATION_H #include "tdkpin_segmented.h" void tdkpin_draw_panel_animation( uint16_t caller_bp); /* 1000:7440 */ #endif 8x=ko8+8@{Ӊ3y헽[,w D'%$w~ )RE(S{wfqj HdX,V_oiQfhZ&yٲǚUMh*ɫdymjB[2]z}%rLMm~iik#i<ߝϺ̈́}`e)T3#]uAw+֬ N -P2V'Fϧ2c56e~i7ucr͊|ߝn]%k7SDfӓvf[7i۵vvDR9ɳ;۪.h(Oʪ^"|oyٞ%zU;b͚uU6,e|de;Xnyzy~V5^m%MYMK˔ݝ|&;ū23ڲ;k $m&iXNZN0dB5xֳ4)ڴ$eo50jL(u^ZTY3qRp!ͫ3x*M}6 Asx{CX^ϟ U%@f=P*/ۤM@+8MR1vYmjz4?RE:nT3f>gu#=9A_.:<5/gWF?5IiQk`Db==dd\6%sp2.fv5 Ԓ7 +X8@7 P͸{,i-iꉂuNN>$3q챮6k] ihSg䵡 JrNgӂ6, n3 L6g''ͲDVHU:oYQ/#ia )٪ñ FDPI ++AlE)bMHYV5#Zfl {)Qbײf}<=v?/&nnp*KpL7NeS؟0wA(0pF(:o(gT@hs_2)g :CF$MN皮UH:|A 5+ENA"bY5Mۣ5&ْ=Җu7.؄=7B,ybk ty`K/9}?xC$ٮ~&_&w9ڭ#U^r&႞#p9)G}9J'N# v u|Ap)b}[m6_;ٮ@󷺵+,t]gCk6D@g5ɦLXuKȳ4ߺz:+'k^/(uqpܡ欞DHnxn3".tI0>qro ێO0ͅ;;ԣ#k!*`(l%(ƱÛNi(msIi~ PӂJxkA=ה~ˬzkƠ18 X)6_mVdޯ6J^lAՀ jRmS4ɒK"ޫ6=A <t304xbojn)mIAUUE]lDUҼluͲ rF^.0GU!l/te3Eri4"gӷTm#VM`; \?Ld)ĕYkܱ)G)`MBj8KOʪ)E^<:tXDckzZ$Q߀v05PsIlJGL%\Azf9ڙquqc8|CFC#ָ}† +dA0* qmyo ݔܓ7&aWCe81Nz*3PC~d:{k"Eީ0cV"MSVZKÜt*^t7 atohq%F+ʓ7R$TWzgo~.5fg]հ6=a{zrC'fo:ٖ@ehpdv~5C\WA fWE#n ϔ󩌥6EN Bf)h+(4 ;n9UdM.6v mbjS#Ut-dvs ⎎[fuWj`wb.k"rn>#jX/STu{,XQ=O.jWK𨜃~%/usn_iӏcs[fQ&YZ,7 9d϶'E/&)xF% dJj~jp'o?BRk0v@\B_EX0>^o 'ı)&r A-`YƐ3z^zB1?{~'<0V낉i :?;ɿRpr|O^PXk@]l)N͔Lx_\_m|qJ{h:erD<4l8?pu^:0YMu8 4d 0 | HČT ]3x =LICy |Cd{Ȕ9|yiaWJ9Ru TzU]ģ`(ay5pZ>U*O4\#b^K087Pme|I \>" xC!}C RDx3~q :%up AxtfQnC]AP"9c><+k ۱2ުGל64[.YBÄ)x^عa5AQkp {~yD."r}KH+E Ct\8\3n5-Tqp}6xpvԹhK>i8+ni.y"c.9g-t[lGx#s9k7uF7X.:)q6/MJ&9dB~tB\2S2jϐ$ӢjX"S}* w[{ &.QxPvp~"?6:\Nȷo\=y%ˮ; 8U]8Ҷ*yռTT 䀾8CdX93 ryחo0 =wlb3+[TZs!Gٔ<>j@0GDK8\RA@ctOF",_s0u%x>@ǁ-GfQ[/.|e){O~Gj w9`K<ԣ+P&9HpGu1qNOZS* Oր`݆ss3l}?ayy4[Sf,{i,9J | n!ܒ0|x_ WT_ox-/&>'%aI:'Vj7 [<e aJ{v}[&[]/M[V/KubX," rXmچ߻ JF+[Jb?SfNG^>K̪dj/EӲuc'nIܰH:3㰢WNU}565 /Ly Eo̜3g[cZиop' 2zTII]w2W]=@wиyR @_O8ޏȂ"\?P!oM@^B7D-$=7~ ?d^Ҽ Ŕ5O>V/?·:>TWdYs?<&ߐyGze^Ձ"53 s;(rJzݓe}#/q$hcS> 16)); uint16_t sprite = win16_read_u16( win16_dgroup_pointer((uint16_t)(0x09a4 + player * 2u))); tdkpin_composite_player_sprite(sprite, dc); tdkpin_present_background_region(123, 42, 79, 55, dc); tdkpin_restore_background_region_a(11, 11, marker_y, 372, dc); } else { tdkpin_add_score_from_caller_frame(caller_bp, -1); tdkpin_restore_background_region_b(11, 11, marker_y, 372, dc); } tdkpin_present_background_region(11, 11, marker_y, 372, dc); } g_current_player = saved_player; (void)ReleaseDC16(window, dc); } static Win16FarPtr active_secondary_score(void) { return win16_dgroup_pointer((uint16_t)( 0x098e + (uint16_t)g_current_player * 4u)); } static uint8_t active_score_multiplier(void) { return win16_read_u8(win16_dgroup_pointer((uint16_t)( 0x09a1 + (uint16_t)g_current_player))); } static void draw_active_secondary_score(uint16_t caller_bp) { int32_t shown = borland_multiply_i32( (int32_t)win16_read_u32(active_secondary_score()), active_score_multiplier()); tdkpin_draw_score_from_caller_frame( caller_bp, (uint16_t)shown, (uint16_t)((uint32_t)shown >> 16)); } /* 1000:c4e1 -- apply the effect selected by the active player's sprite index. */ void tdkpin_apply_player_sprite_effect( uint16_t caller_bp, int16_t argument) { uint16_t effect = win16_read_u16(win16_dgroup_pointer((uint16_t)( 0x09a4 + (uint16_t)g_current_player * 2u))); static const uint32_t additions[5] = { 10000u, 20000u, 50000u, 100000u, 200000u}; if (effect >= 1 && effect <= 5) { Win16FarPtr secondary = active_secondary_score(); win16_write_u32( secondary, 0, win16_read_u32(secondary) + additions[effect - 1u]); draw_active_secondary_score(caller_bp); } else if (effect == 6) { int32_t transfer = borland_multiply_i32( (int32_t)win16_read_u32(active_secondary_score()), active_score_multiplier()); tdkpin_add_score_from_caller_frame(caller_bp, transfer); win16_write_u32(active_secondary_score(), 0, 0); tdkpin_draw_score_from_caller_frame(caller_bp, 0, 0); } else if (effect == 7) { uint16_t required = win16_read_u16( win16_dgroup_pointer(0x399a)); if (required != 0 && (argument < 0 || required != (uint16_t)argument)) { Win16FarPtr receiver = caller_receiver(caller_bp); win16_write_u8(win16_far_add_offset(receiver, 0x0be0), 1); win16_write_u8(win16_dgroup_pointer(0x0874), 1); } } } {Rxe#ifndef TDKPIN_PLAYER_STATE_H #define TDKPIN_PLAYER_STATE_H #include "tdkpin_gameplay_helpers.h" void tdkpin_initialize_player_state( uint16_t caller_bp); /* 1000:a72c */ void tdkpin_redraw_all_players( uint16_t caller_bp); /* 1000:acc2 */ void tdkpin_apply_player_sprite_effect( uint16_t caller_bp, int16_t argument); /* 1000:c4e1 */ #endif t:xj /* Complete NE program entry sequence for TDKPIN.EXE. */ #include "tdkpin_program_entry.h" #include "tdkpin_application.h" #include "tdkpin_borland_runtime.h" #include "tdkpin_initialization.h" #include "tdkpin_multimedia.h" #include "tdkpin_stack.h" #include "tdkpin_tpwincrt_lifecycle.h" enum { DGROUP_APPLICATION_VMT = 0x0024, DGROUP_VERSION_ERROR_TEXT = 0x0396, DGROUP_APPLICATION_TITLE = 0x03c8, DGROUP_APPLICATION_NAME = 0x03e1, DGROUP_APPLICATION_OBJECT = 0x0748, APPLICATION_RUN_SLOT = 0x1c, APPLICATION_DESTRUCTOR_SLOT = 0x08, WIN16_MB_ICONHAND = 0x0010, }; static bool windows_version_is_supported(uint32_t version) { uint8_t major = (uint8_t)version; uint8_t minor = (uint8_t)(version >> 8); return major > 3 || (major == 3 && minor >= 10); } /* * 1000:fd85 -- process entry named by the NE header. InitTask supplies the * register contract consumed by 1020:0002. Unit initializers run in the exact * image order before the independent Windows 3.10 gate. The application Run * and destructor calls remain indirect through VMT +1c and +08 respectively. * Both the unsupported-version path and normal application return Halt(0). */ _Noreturn void tdkpin_ne_program_entry(void) { BorlandWin16StartupRegisters registers = InitTask16(); borland_initialize_win16_runtime(®isters); tdkpin_initialize_stack_guard(); tpwincrt_initialize_runtime_unit(); multimedia_initialize_runtime_unit(); tdkpin_initialize_unit_ordinal_91(); tdkpin_initialize_unit_ordinal_86(); tdkpin_initialize_unit_ordinal_72(); g_tdkpin_windows_version = GetVersion16(); if (!windows_version_is_supported(g_tdkpin_windows_version)) { (void)win16_call_message_box_far( g_win16_message_box, 0, win16_dgroup_pointer(DGROUP_VERSION_ERROR_TEXT), win16_dgroup_pointer(DGROUP_APPLICATION_TITLE), WIN16_MB_ICONHAND); } else { Win16FarPtr application = win16_dgroup_pointer(DGROUP_APPLICATION_OBJECT); (void)object_windows_application_construct( application, DGROUP_APPLICATION_VMT, win16_dgroup_pointer(DGROUP_APPLICATION_NAME)); uint16_t vmt_offset = win16_read_u16(application); Win16FarPtr vmt = win16_dgroup_pointer(vmt_offset); win16_call_object_method( win16_read_far_pointer(vmt, APPLICATION_RUN_SLOT), application); win16_call_object_destructor( win16_read_far_pointer(vmt, APPLICATION_DESTRUCTOR_SLOT), application, 0); } borland_runtime_exit(0); } 0Fܻx#ifndef TDKPIN_PROGRAM_ENTRY_H #define TDKPIN_PROGRAM_ENTRY_H #include "tdkpin_borland_startup.h" _Noreturn void tdkpin_ne_program_entry(void); /* 1000:fd85 */ extern uint32_t g_tdkpin_windows_version; /* 1028:07bf..07c2 */ #endif fLubx'/* Borland Win16 random-number support reconstructed from Code5. */ #include "tdkpin_random.h" enum { BORLAND_RANDOM_MULTIPLIER = 0x08088405u }; uint32_t borland_next_random(void) { g_borland_random_seed = g_borland_random_seed * BORLAND_RANDOM_MULTIPLIER + 1u; return g_borland_random_seed; } uint16_t borland_random_below(uint16_t upper_bound) { uint32_t random = borland_next_random(); return (uint16_t)(((uint64_t)random * upper_bound) >> 32); } BorlandReal48 borland_random_real48_registers(void) { uint32_t random = borland_next_random(); if (random == 0) { return (BorlandReal48){{0, 0, 0, 0, 0, 0}}; } uint8_t exponent = 0x80; while ((random & 0x80000000u) == 0) { random <<= 1; exponent--; } random &= 0x7fffffffu; return (BorlandReal48){{ exponent, 0, (uint8_t)random, (uint8_t)(random >> 8), (uint8_t)(random >> 16), (uint8_t)(random >> 24), }}; } int8_t borland_random_exponent(void) { return (int8_t)borland_random_real48_registers().bytes[0]; } /* * 1020:14de — x87 Random: reinterpret the signed FILD of RandSeed as unsigned * by adding exactly 2^31, then FSCALE by -32. Binary64 represents every * uint32_t/2^32 result exactly, so this host spelling loses no target bits. */ double borland_random_unit_interval(void) { uint32_t random = borland_next_random(); return (double)random / 4294967296.0; } void borland_seed_random_from_dos_time(void) { g_borland_random_seed = win16_dos_time_words(); } N$xG#ifndef TDKPIN_RANDOM_H #define TDKPIN_RANDOM_H #include "tdkpin_segmented.h" #include "tdkpin_real48.h" extern uint32_t g_borland_random_seed; /* 1028:0720/0722 */ uint32_t borland_next_random(void); /* 1020:1501 */ uint16_t borland_random_below(uint16_t upper_bound); /* 1020:14a4 */ BorlandReal48 borland_random_real48_registers(void); /* 1020:14c1 */ int8_t borland_random_exponent(void); /* 1020:14c1 */ double borland_random_unit_interval(void); /* 1020:14de */ void borland_seed_random_from_dos_time(void); /* 1020:1539 */ #endif Hxz/* Bit-exact core conversions and comparisons for Borland's software Real48. */ #include "tdkpin_real48.h" #include "tdkpin_borland_runtime.h" #include enum { REAL48_EXPONENT_BIAS = 129, REAL48_EXPLICIT_FRACTION_BITS = 39, REAL48_SIGN = 0x80, BORLAND_RUNTIME_ERROR_DIVIDE_BY_ZERO = 200, BORLAND_RUNTIME_ERROR_FLOAT_OVERFLOW = 205, BORLAND_RUNTIME_ERROR_INVALID_FLOAT = 207, }; /* Code5 1020:1418..1435 — ArcTan odd-series coefficients, highest first. */ static const BorlandReal48 g_arctan_coefficients[5] = { {{0x7d, 0xe8, 0xa2, 0x8b, 0x2e, 0xba}}, /* -1/11 */ {{0x7d, 0x8e, 0xe3, 0x38, 0x8e, 0x63}}, /* +1/9 */ {{0x7e, 0x49, 0x92, 0x24, 0x49, 0x92}}, /* -1/7 */ {{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, /* +1/5 */ {{0x7f, 0xab, 0xaa, 0xaa, 0xaa, 0xaa}}, /* -1/3 */ }; /* Code5 1020:13e8..1417 — ArcTan reduction thresholds and tan/angle pairs. */ static const BorlandReal48 g_arctan_direct_limit = {{0x7e, 0x4a, 0x8e, 0xe9, 0x6f, 0x0c}}; static const BorlandReal48 g_arctan_tan_pi_over_8 = {{0x7f, 0xe7, 0xcf, 0xcc, 0x13, 0x54}}; static const BorlandReal48 g_arctan_tan_pi_over_12 = {{0x7f, 0xf6, 0xf4, 0xa2, 0x30, 0x09}}; static const BorlandReal48 g_pi_over_12 = {{0x7f, 0x6a, 0xc1, 0x91, 0x0a, 0x06}}; static const BorlandReal48 g_arctan_second_threshold = {{0x80, 0xb5, 0x9e, 0x8a, 0x6f, 0x44}}; static const BorlandReal48 g_arctan_tan_pi_over_6 = {{0x80, 0x82, 0x2c, 0x3a, 0xcd, 0x13}}; static const BorlandReal48 g_pi_over_6 = {{0x80, 0x6a, 0xc1, 0x91, 0x0a, 0x06}}; static const BorlandReal48 g_real48_one = {{0x81, 0, 0, 0, 0, 0}}; static const BorlandReal48 g_pi_over_4 = {{0x80, 0x21, 0xa2, 0xda, 0x0f, 0x49}}; static const BorlandReal48 g_pi_over_2 = {{0x81, 0x21, 0xa2, 0xda, 0x0f, 0x49}}; /* Code5 1020:1240..1263 and constants used by Ln at 11bb. */ static const BorlandReal48 g_ln_coefficients[6] = { {{0x7d, 0x8a, 0x9d, 0xd8, 0x89, 0x1d}}, /* 1/13 */ {{0x7d, 0xe9, 0xa2, 0x8b, 0x2e, 0x3a}}, /* 1/11 */ {{0x7d, 0x8e, 0xe3, 0x38, 0x8e, 0x63}}, /* 1/9 */ {{0x7e, 0x49, 0x92, 0x24, 0x49, 0x12}}, /* 1/7 */ {{0x7e, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}}, /* 1/5 */ {{0x7f, 0xab, 0xaa, 0xaa, 0xaa, 0x2a}}, /* 1/3 */ }; static const BorlandReal48 g_sqrt_one_half = {{0x80, 0xfb, 0x33, 0xf3, 0x04, 0x35}}; static const BorlandReal48 g_half_ln_two = {{0x7f, 0xd2, 0xf7, 0x17, 0x72, 0x31}}; static const BorlandReal48 g_ln_two = {{0x80, 0xd2, 0xf7, 0x17, 0x72, 0x31}}; /* Code5 1020:12d7..1306 — Exp polynomial, highest coefficient first. */ static const BorlandReal48 g_exp_coefficients[8] = { {{0x6d, 0x2e, 0x1d, 0x11, 0x60, 0x31}}, {{0x70, 0x46, 0x2c, 0xfe, 0xe5, 0x7f}}, {{0x74, 0x36, 0x7c, 0x89, 0x84, 0x21}}, {{0x77, 0x53, 0x3c, 0xff, 0xc3, 0x2e}}, {{0x7a, 0xd2, 0x7d, 0x5b, 0x95, 0x1d}}, {{0x7c, 0x25, 0xb8, 0x46, 0x58, 0x63}}, {{0x7e, 0x16, 0xfc, 0xef, 0xfd, 0x75}}, {{0x80, 0xd2, 0xf7, 0x17, 0x72, 0x31}}, }; static const BorlandReal48 g_sqrt_two = {{0x81, 0xfb, 0x33, 0xf3, 0x04, 0x35}}; /* Code5 1020:1191..11ba — Sin odd-series coefficients, highest first. */ static const BorlandReal48 g_sin_coefficients[7] = { {{0x58, 0x9d, 0x39, 0x9f, 0x3f, 0xd7}}, /* -1/15! */ {{0x60, 0x43, 0x9d, 0x30, 0x92, 0x30}}, /* +1/13! */ {{0x67, 0xaa, 0x3f, 0x28, 0x32, 0xd7}}, /* -1/11! */ {{0x6e, 0xb6, 0x2a, 0x1d, 0xef, 0x38}}, /* +1/9! */ {{0x74, 0x0d, 0xd0, 0x00, 0x0d, 0xd0}}, /* -1/7! */ {{0x7a, 0x88, 0x88, 0x88, 0x88, 0x08}}, /* +1/5! */ {{0x7e, 0xab, 0xaa, 0xaa, 0xaa, 0xaa}}, /* -1/3! */ }; static const BorlandReal48 g_two_pi = {{0x83, 0x21, 0xa2, 0xda, 0x0f, 0x49}}; static uint8_t real48_exponent(BorlandReal48 value) { return value.bytes[0]; } static bool real48_negative(BorlandReal48 value) { return (value.bytes[5] & REAL48_SIGN) != 0; } static uint64_t real48_fraction(BorlandReal48 value) { return (uint64_t)value.bytes[1] | ((uint64_t)value.bytes[2] << 8) | ((uint64_t)value.bytes[3] << 16) | ((uint64_t)value.bytes[4] << 24) | ((uint64_t)(value.bytes[5] & 0x7f) << 32); } static uint64_t real48_significand(BorlandReal48 value) { return (UINT64_C(1) << REAL48_EXPLICIT_FRACTION_BITS) | real48_fraction(value); } static BorlandReal48 make_real48( uint8_t exponent, bool negative, uint64_t fraction) { BorlandReal48 result = {{0, 0, 0, 0, 0, 0}}; result.bytes[0] = exponent; result.bytes[1] = (uint8_t)fraction; result.bytes[2] = (uint8_t)(fraction >> 8); result.bytes[3] = (uint8_t)(fraction >> 16); result.bytes[4] = (uint8_t)(fraction >> 24); result.bytes[5] = (uint8_t)((fraction >> 32) | (negative ? REAL48_SIGN : 0)); return result; } static BorlandReal48Result real48_pack_internal( uint64_t internal, int16_t exponent, bool negative) { internal += UINT64_C(0x80); if ((internal & (UINT64_C(1) << 48)) != 0) { internal >>= 1; exponent++; } if (exponent <= 0) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, false}; } if (exponent > UINT8_MAX) { return (BorlandReal48Result){ borland_real48_zero_registers(), true, false}; } uint64_t significand = internal >> 8; uint64_t fraction = significand - (UINT64_C(1) << REAL48_EXPLICIT_FRACTION_BITS); return (BorlandReal48Result){ make_real48((uint8_t)exponent, negative, fraction), false, false}; } static BorlandReal48Result real48_add_with_signs( BorlandReal48 left, BorlandReal48 right, bool right_negative) { uint8_t left_exponent = real48_exponent(left); uint8_t right_exponent = real48_exponent(right); if (right_exponent == 0) { return (BorlandReal48Result){left, false, false}; } if (left_exponent == 0) { right.bytes[5] = (uint8_t)( (right.bytes[5] & 0x7f) | (right_negative ? REAL48_SIGN : 0)); return (BorlandReal48Result){right, false, false}; } BorlandReal48 high = left; BorlandReal48 low = right; bool high_negative = real48_negative(left); bool low_negative = right_negative; if (right_exponent > left_exponent) { high = right; low = left; uint8_t temporary_exponent = left_exponent; left_exponent = right_exponent; right_exponent = temporary_exponent; high_negative = right_negative; low_negative = real48_negative(left); } uint8_t difference = (uint8_t)(left_exponent - right_exponent); if (difference >= 41) { high.bytes[5] = (uint8_t)( (high.bytes[5] & 0x7f) | (high_negative ? REAL48_SIGN : 0)); return (BorlandReal48Result){high, false, false}; } uint64_t high_internal = real48_significand(high) << 8; uint64_t low_internal = (real48_significand(low) << 8) >> difference; uint64_t magnitude; bool result_negative; int16_t result_exponent = left_exponent; if (high_negative == low_negative) { magnitude = high_internal + low_internal; result_negative = high_negative; if ((magnitude & (UINT64_C(1) << 48)) != 0) { magnitude >>= 1; result_exponent++; if (result_exponent > UINT8_MAX) { return (BorlandReal48Result){ borland_real48_zero_registers(), true, false}; } } } else { if (high_internal == low_internal) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, false}; } if (high_internal > low_internal) { magnitude = high_internal - low_internal; result_negative = high_negative; } else { magnitude = low_internal - high_internal; result_negative = low_negative; } while ((magnitude & (UINT64_C(1) << 47)) == 0) { magnitude <<= 1; result_exponent--; if (result_exponent == 0) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, false}; } } } return real48_pack_internal( magnitude, result_exponent, result_negative); } /* 1020:0cd4 — register-form software Real48 addition. */ BorlandReal48Result borland_real48_add_registers( BorlandReal48 left, BorlandReal48 right) { return real48_add_with_signs(left, right, real48_negative(right)); } /* 1020:0cd0 — toggle DI's sign bit, then enter the shared addition body. */ BorlandReal48Result borland_real48_subtract_registers( BorlandReal48 left, BorlandReal48 right) { return real48_add_with_signs(left, right, !real48_negative(right)); } typedef struct { uint64_t low; uint16_t high; } Real48Product80; static Real48Product80 multiply_40_by_40(uint64_t left, uint64_t right) { uint64_t low_product = (uint64_t)(uint32_t)left * (uint32_t)right; uint64_t cross = (left >> 32) * (uint32_t)right + (right >> 32) * (uint32_t)left; uint64_t low = low_product + (cross << 32); uint32_t high = (uint32_t)( (left >> 32) * (right >> 32) + (cross >> 32) + (low < low_product)); return (Real48Product80){low, (uint16_t)high}; } /* 1020:0d97 — exact 40x40 product followed by Borland's eight guard bits. */ BorlandReal48Result borland_real48_multiply_registers( BorlandReal48 left, BorlandReal48 right) { if (real48_exponent(left) == 0 || real48_exponent(right) == 0) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, false}; } Real48Product80 product = multiply_40_by_40( real48_significand(left), real48_significand(right)); bool top_bit_79 = (product.high & 0x8000) != 0; uint8_t shift = top_bit_79 ? 32 : 31; uint64_t internal = (product.low >> shift) | ((uint64_t)product.high << (64 - shift)); int16_t exponent = (int16_t)real48_exponent(left) + real48_exponent(right) - (top_bit_79 ? 128 : 129); return real48_pack_internal( internal, exponent, real48_negative(left) != real48_negative(right)); } /* 1020:0e93 — shared underflow/zero result: AX=BX=DX=0. */ BorlandReal48 borland_real48_zero_registers(void) { return (BorlandReal48){{0, 0, 0, 0, 0, 0}}; } /* 1020:0e9a — restoring division generating 40 result plus eight guard bits. */ BorlandReal48Result borland_real48_divide_registers( BorlandReal48 left, BorlandReal48 right) { if (real48_exponent(right) == 0) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, true}; } if (real48_exponent(left) == 0) { return (BorlandReal48Result){ borland_real48_zero_registers(), false, false}; } uint64_t numerator = real48_significand(left); uint64_t denominator = real48_significand(right); int16_t exponent = (int16_t)real48_exponent(left) - real48_exponent(right) + 129; if (numerator < denominator) { numerator <<= 1; exponent--; } uint64_t internal = 0; uint64_t remainder = numerator; for (uint8_t bit = 0; bit < 48; bit++) { bool quotient_bit = remainder >= denominator; if (quotient_bit) { remainder -= denominator; } internal = (internal << 1) | quotient_bit; remainder <<= 1; } return real48_pack_internal( internal, exponent, real48_negative(left) != real48_negative(right)); } /* * 1020:1031/103b/1045/104f — near arithmetic entries that save and restore * CX:SI:DI around the corresponding core. C by-value operands express that * register-preservation contract directly. */ BorlandReal48Result borland_real48_add_preserving_right( BorlandReal48 left, BorlandReal48 right) { return borland_real48_add_registers(left, right); } BorlandReal48Result borland_real48_subtract_preserving_right( BorlandReal48 left, BorlandReal48 right) { return borland_real48_subtract_registers(left, right); } BorlandReal48Result borland_real48_multiply_preserving_right( BorlandReal48 left, BorlandReal48 right) { return borland_real48_multiply_registers(left, right); } BorlandReal48Result borland_real48_divide_preserving_right( BorlandReal48 left, BorlandReal48 right) { return borland_real48_divide_registers(left, right); } /* 1020:1059 — Pascal Int: clear fractional significand bits toward zero. */ BorlandReal48 borland_real48_integer_part(BorlandReal48 value) { uint8_t exponent = real48_exponent(value); if (exponent >= 168) { return value; } if (exponent <= 128) { return borland_real48_zero_registers(); } uint8_t fractional_bits = (uint8_t)(168 - exponent); uint64_t significand = real48_significand(value); uint64_t mask = ~((UINT64_C(1) << fractional_bits) - 1); uint64_t integer_significand = significand & mask; uint64_t fraction = integer_significand - (UINT64_C(1) << REAL48_EXPLICIT_FRACTION_BITS); return make_real48(exponent, real48_negative(value), fraction); } /* 1020:10aa — Pascal Frac: original minus Int(original). */ BorlandReal48 borland_real48_fractional_part(BorlandReal48 value) { return borland_real48_subtract_registers( value, borland_real48_integer_part(value)) .value; } /* * 1020:10be — Borland Sqrt Newton iteration. The initial exponent transform, * retained input mantissa, divide/add/exponent-decrement step, and convergence * test on the exponent of new-old follow the register routine exactly. */ BorlandReal48 borland_real48_sqrt(BorlandReal48 value) { if (real48_exponent(value) == 0) { return value; } if (real48_negative(value)) { borland_runtime_error(BORLAND_RUNTIME_ERROR_INVALID_FLOAT); } BorlandReal48 guess = value; int8_t halved = (int8_t)(uint8_t)(real48_exponent(value) + 0x80); halved >>= 1; guess.bytes[0] = (uint8_t)((uint8_t)halved + 0x80); uint8_t convergence_exponent = (uint8_t)(guess.bytes[0] - 0x14); while (true) { BorlandReal48 quotient = borland_real48_divide_preserving_right(value, guess).value; BorlandReal48 next = borland_real48_add_preserving_right(quotient, guess).value; next.bytes[0]--; BorlandReal48 difference = borland_real48_subtract_registers(next, guess).value; guess = next; if (difference.bytes[0] < convergence_exponent) { return guess; } } } /* * 1020:1455 — Horner evaluator used by the transcendental routines: * result = 1 + x*(c[n-1] + x*(... + x*c[0])). The target multiplies once * before advancing to each later coefficient, so table order is significant. */ BorlandReal48 borland_real48_polynomial_plus_one( BorlandReal48 argument, const BorlandReal48 *coefficients, uint16_t count) { BorlandReal48 result = coefficients[0]; for (uint16_t index = 0; index < count; index++) { if (index != 0) { result = borland_real48_add_registers( result, coefficients[index]) .value; } result = borland_real48_multiply_registers(result, argument).value; } return borland_real48_add_registers( result, make_real48(0x81, false, 0)) .value; } /* 1020:143c — x * polynomial_plus_one(x*x, table, count). */ BorlandReal48 borland_real48_odd_polynomial( BorlandReal48 argument, const BorlandReal48 *coefficients, uint16_t count) { BorlandReal48 squared = borland_real48_multiply_registers(argument, argument).value; BorlandReal48 polynomial = borland_real48_polynomial_plus_one( squared, coefficients, count); return borland_real48_multiply_registers(polynomial, argument).value; } /* 1020:1436 — fixed-table ArcTan series entry sharing the 143c tail. */ BorlandReal48 borland_real48_arctan_series(BorlandReal48 argument) { return borland_real48_odd_polynomial( argument, g_arctan_coefficients, (uint16_t)(sizeof(g_arctan_coefficients) / sizeof(g_arctan_coefficients[0]))); } /* * 1020:1307 — ArcTan with Borland's fixed argument reductions. Values above * one are inverted; three tan-addition ranges reduce to the direct odd series; * then the reciprocal and original-sign transforms are applied in that order. */ BorlandReal48 borland_real48_arctan(BorlandReal48 argument) { if (real48_exponent(argument) == 0) { return argument; } bool negative = real48_negative(argument); argument.bytes[5] &= 0x7f; bool reciprocal = borland_real48_compare_registers(argument, g_real48_one) >= 0; if (reciprocal) { argument = borland_real48_divide_registers( g_real48_one, argument) .value; } BorlandReal48 result; if (borland_real48_compare_registers( argument, g_arctan_direct_limit) < 0) { result = borland_real48_arctan_series(argument); } else { const BorlandReal48 *tangent; const BorlandReal48 *angle; if (borland_real48_compare_registers( argument, g_arctan_tan_pi_over_8) < 0) { tangent = &g_arctan_tan_pi_over_12; angle = &g_pi_over_12; } else if (borland_real48_compare_registers( argument, g_arctan_second_threshold) < 0) { tangent = &g_arctan_tan_pi_over_6; angle = &g_pi_over_6; } else { tangent = &g_real48_one; angle = &g_pi_over_4; } BorlandReal48 numerator = borland_real48_subtract_preserving_right( argument, *tangent) .value; BorlandReal48 denominator = borland_real48_add_registers( borland_real48_multiply_registers(argument, *tangent).value, g_real48_one) .value; BorlandReal48 reduced = borland_real48_divide_registers(numerator, denominator).value; result = borland_real48_add_registers( borland_real48_arctan_series(reduced), *angle) .value; } if (reciprocal) { result = borland_real48_subtract_registers(g_pi_over_2, result).value; } if (negative && real48_exponent(result) != 0) { result.bytes[5] ^= REAL48_SIGN; } return result; } /* * 1020:11bb — natural logarithm. Normalize the input exponent, center its * mantissa with sqrt(1/2), evaluate the atanh odd series, double it, and add * the signed exponent displacement times ln(2). Results below exponent 67 are * flushed to canonical zero exactly like the final CMP/JAE sequence. */ BorlandReal48 borland_real48_ln(BorlandReal48 argument) { if (real48_exponent(argument) == 0 || real48_negative(argument)) { borland_runtime_error(BORLAND_RUNTIME_ERROR_INVALID_FLOAT); } int8_t exponent_displacement = (int8_t)(uint8_t)(real48_exponent(argument) - 0x81); argument.bytes[0] = 0x81; BorlandReal48 centered = borland_real48_multiply_registers(argument, g_sqrt_one_half).value; BorlandReal48 numerator = borland_real48_subtract_registers(centered, g_real48_one).value; BorlandReal48 denominator = borland_real48_add_registers(centered, g_real48_one).value; BorlandReal48 ratio = borland_real48_divide_registers(numerator, denominator).value; BorlandReal48 mantissa_log = borland_real48_odd_polynomial( ratio, g_ln_coefficients, (uint16_t)(sizeof(g_ln_coefficients) / sizeof(g_ln_coefficients[0]))); mantissa_log.bytes[0]++; mantissa_log = borland_real48_add_registers( mantissa_log, g_half_ln_two) .value; BorlandReal48 exponent_term = borland_real48_multiply_registers( borland_i32_to_real48_registers(exponent_displacement), g_ln_two) .value; BorlandReal48 result = borland_real48_add_registers(mantissa_log, exponent_term).value; return real48_exponent(result) < 0x67 ? borland_real48_zero_registers() : result; } /* * 1020:1264 — exponential. Reduce |x| by ln(2), round twice the quotient, * evaluate the fixed 2^r polynomial, apply sqrt(2) for an odd reduction, and * scale through the Real48 exponent byte. A negative original input takes the * reciprocal only after the positive path is complete. */ BorlandReal48 borland_real48_exp(BorlandReal48 argument) { bool negative = real48_negative(argument); argument.bytes[5] &= 0x7f; BorlandReal48 quotient = borland_real48_divide_registers(argument, g_ln_two).value; if (real48_exponent(quotient) >= 0x88) { borland_runtime_error(BORLAND_RUNTIME_ERROR_FLOAT_OVERFLOW); } BorlandReal48 doubled_quotient = quotient; doubled_quotient.bytes[0]++; BorlandReal48IntegerResult rounded = borland_real48_to_i32_registers(doubled_quotient, true); if (rounded.overflow) { borland_runtime_error(BORLAND_RUNTIME_ERROR_FLOAT_OVERFLOW); } uint16_t reduction = (uint16_t)rounded.value; BorlandReal48 half_reduction = borland_i32_to_real48_registers(rounded.value); if (real48_exponent(half_reduction) != 0) { half_reduction.bytes[0]--; } BorlandReal48 reduced = borland_real48_subtract_registers( quotient, half_reduction) .value; BorlandReal48 result = borland_real48_polynomial_plus_one( reduced, g_exp_coefficients, (uint16_t)(sizeof(g_exp_coefficients) / sizeof(g_exp_coefficients[0]))); if ((reduction & 1) != 0) { result = borland_real48_multiply_registers(result, g_sqrt_two).value; } uint8_t exponent_increment = (uint8_t)(reduction >> 1); uint16_t scaled_exponent = (uint16_t)real48_exponent(result) + exponent_increment; if (scaled_exponent > UINT8_MAX) { borland_runtime_error(BORLAND_RUNTIME_ERROR_FLOAT_OVERFLOW); } result.bytes[0] = (uint8_t)scaled_exponent; if (negative) { result = borland_real48_divide_registers(g_real48_one, result).value; } return result; } /* * 1020:1130 — Sin shared entry inside the containing Cos routine. Reduce by * 2*pi through Frac, fold [0,2*pi) through pi and pi/2, evaluate the odd * series only above exponent 6c, then restore the half-cycle sign. */ BorlandReal48 borland_real48_sin(BorlandReal48 argument) { if (real48_exponent(argument) < 0x6c) { return argument; } BorlandReal48 reduced = argument; BorlandReal48 absolute = argument; absolute.bytes[5] &= 0x7f; if (borland_real48_compare_registers(absolute, g_two_pi) >= 0) { BorlandReal48 quotient = borland_real48_divide_preserving_right(argument, g_two_pi).value; reduced = borland_real48_multiply_preserving_right( borland_real48_fractional_part(quotient), g_two_pi) .value; } if (real48_negative(reduced)) { reduced = borland_real48_add_preserving_right(reduced, g_two_pi).value; } BorlandReal48 pi = g_two_pi; pi.bytes[0]--; bool positive_half_cycle = borland_real48_compare_registers(reduced, pi) < 0; if (!positive_half_cycle) { reduced = borland_real48_subtract_preserving_right(reduced, pi).value; } BorlandReal48 half_pi = pi; half_pi.bytes[0]--; if (borland_real48_compare_registers(reduced, half_pi) >= 0) { reduced.bytes[5] |= REAL48_SIGN; reduced = borland_real48_add_registers(reduced, pi).value; } if (real48_exponent(reduced) >= 0x6c) { reduced = borland_real48_odd_polynomial( reduced, g_sin_coefficients, (uint16_t)(sizeof(g_sin_coefficients) / sizeof(g_sin_coefficients[0]))); } if (!positive_half_cycle && real48_exponent(reduced) != 0) { reduced.bytes[5] ^= REAL48_SIGN; } return reduced; } /* 1020:111d — Cos prelude computes pi/2-x, then enters Sin at 1130. */ BorlandReal48 borland_real48_cos(BorlandReal48 argument) { BorlandReal48 minus_half_pi = g_pi_over_2; minus_half_pi.bytes[5] |= REAL48_SIGN; BorlandReal48 shifted = borland_real48_add_registers(argument, minus_half_pi).value; if (real48_exponent(shifted) != 0) { shifted.bytes[5] ^= REAL48_SIGN; } return borland_real48_sin(shifted); } /* * 1020:0f28 — unsigned Real48 magnitude ordering materialized from the flags. * Equal zero exponents compare equal without inspecting the remaining bytes, * exactly matching OR AL,AL followed by the early RET. */ int16_t borland_real48_compare_magnitude_registers( BorlandReal48 left, BorlandReal48 right) { uint8_t left_exponent = real48_exponent(left); uint8_t right_exponent = real48_exponent(right); if (left_exponent != right_exponent) { return left_exponent < right_exponent ? -1 : 1; } if (left_exponent == 0) { return 0; } uint64_t left_fraction = real48_fraction(left); uint64_t right_fraction = real48_fraction(right); if (left_fraction == right_fraction) { return 0; } return left_fraction < right_fraction ? -1 : 1; } /* 1020:0f11 — sign-aware comparison, reversing magnitude order if negative. */ int16_t borland_real48_compare_registers( BorlandReal48 left, BorlandReal48 right) { bool left_negative = real48_negative(left); bool right_negative = real48_negative(right); if (left_negative != right_negative) { return left_negative ? -1 : 1; } int16_t magnitude = borland_real48_compare_magnitude_registers(left, right); return left_negative ? (int16_t)-magnitude : magnitude; } /* * 1020:0f3b — signed DX:AX integer to register-form Real48. Every int32_t is * exact because Real48 carries forty significand bits. */ BorlandReal48 borland_i32_to_real48_registers(int32_t value) { if (value == 0) { return borland_real48_zero_registers(); } bool negative = value < 0; uint32_t magnitude = negative ? (uint32_t)(0U - (uint32_t)value) : (uint32_t)value; uint8_t highest_bit = 0; for (uint32_t scan = magnitude; scan > 1; scan >>= 1) { highest_bit++; } uint64_t significand = (uint64_t)magnitude << (REAL48_EXPLICIT_FRACTION_BITS - highest_bit); uint64_t fraction = significand - (UINT64_C(1) << REAL48_EXPLICIT_FRACTION_BITS); return make_real48( (uint8_t)(REAL48_EXPONENT_BIAS + highest_bit), negative, fraction); } /* * 1020:0f77 — Real48 to signed DX:AX. `round` is the entry's CH byte: zero * truncates, nonzero adds the first discarded bit before the signed-range * check. Thus exact halves round away from zero, as Borland Round requires. */ BorlandReal48IntegerResult borland_real48_to_i32_registers( BorlandReal48 value, bool round) { uint8_t exponent = real48_exponent(value); if (exponent == 0) { return (BorlandReal48IntegerResult){0, false}; } int16_t highest_bit = (int16_t)exponent - REAL48_EXPONENT_BIAS; if (highest_bit >= 32) { return (BorlandReal48IntegerResult){0, true}; } uint64_t significand = real48_significand(value); int16_t shift = REAL48_EXPLICIT_FRACTION_BITS - highest_bit; uint64_t magnitude = shift >= 64 ? 0 : significand >> shift; if (round && shift > 0 && shift <= 40 && ((significand >> (shift - 1)) & 1) != 0) { magnitude++; } bool negative = real48_negative(value); uint64_t limit = negative ? UINT64_C(0x80000000) : (uint64_t)INT32_MAX; bool overflow = magnitude > limit; if (!negative) { int32_t candidate = magnitude == UINT64_C(0x80000000) ? INT32_MIN : (int32_t)(uint32_t)magnitude; return (BorlandReal48IntegerResult){candidate, overflow}; } uint32_t twos_complement = 0U - (uint32_t)magnitude; int32_t candidate = twos_complement == UINT32_C(0x80000000) ? INT32_MIN : (int32_t)twos_complement; return (BorlandReal48IntegerResult){candidate, overflow}; } /* 1020:1007 — far comparison entry around the near flags-only core. */ int16_t borland_real48_compare( BorlandReal48 left, BorlandReal48 right) { return borland_real48_compare_registers(left, right); } static BorlandReal48 require_real48_arithmetic( BorlandReal48Result result) { if (result.divide_by_zero) { borland_runtime_error(BORLAND_RUNTIME_ERROR_DIVIDE_BY_ZERO); } if (result.overflow) { borland_runtime_error(BORLAND_RUNTIME_ERROR_FLOAT_OVERFLOW); } return result.value; } /* 1020:0fe5 — far Add wrapper; carry maps to Runtime Error 205. */ BorlandReal48 borland_real48_add( BorlandReal48 left, BorlandReal48 right) { return require_real48_arithmetic( borland_real48_add_registers(left, right)); } /* 1020:0feb — far Subtract wrapper around the sign-toggle entry. */ BorlandReal48 borland_real48_subtract( BorlandReal48 left, BorlandReal48 right) { return require_real48_arithmetic( borland_real48_subtract_registers(left, right)); } /* 1020:0ff1 — copy AX:BX:DX to CX:SI:DI, then share Multiply. */ BorlandReal48 borland_real48_square(BorlandReal48 value) { return require_real48_arithmetic( borland_real48_multiply_registers(value, value)); } /* 1020:0ff7 — far Multiply wrapper; carry maps to Runtime Error 205. */ BorlandReal48 borland_real48_multiply( BorlandReal48 left, BorlandReal48 right) { return require_real48_arithmetic( borland_real48_multiply_registers(left, right)); } /* 1020:0ffd — denominator zero is Error 200; overflow is Error 205. */ BorlandReal48 borland_real48_divide( BorlandReal48 left, BorlandReal48 right) { return require_real48_arithmetic( borland_real48_divide_registers(left, right)); } /* 1020:100b — far integer-to-Real48 entry around 1020:0f3b. */ BorlandReal48 borland_i32_to_real48(int32_t value) { return borland_i32_to_real48_registers(value); } /* 1020:100f — CH=0 Trunc entry sharing the error tail at 101f with Round. */ int32_t borland_real48_truncate_to_i32(BorlandReal48 value) { BorlandReal48IntegerResult converted = borland_real48_to_i32_registers(value, false); if (converted.overflow) { borland_runtime_error(BORLAND_RUNTIME_ERROR_INVALID_FLOAT); } return converted.value; } /* 1020:1017 — CH=1 Round entry; carry becomes Runtime Error 207. */ int32_t borland_real48_round_to_i32(BorlandReal48 value) { BorlandReal48IntegerResult converted = borland_real48_to_i32_registers(value, true); if (converted.overflow) { borland_runtime_error(BORLAND_RUNTIME_ERROR_INVALID_FLOAT); } return converted.value; } Wx#ifndef TDKPIN_REAL48_H #define TDKPIN_REAL48_H #include #include /* * Turbo Pascal Real48 memory layout: biased exponent followed by 39 explicit * fraction bits in little-endian order; byte 5 bit 7 is the sign. A nonzero * value has an implicit leading significand bit. Exponent zero denotes zero. */ typedef struct { uint8_t bytes[6]; } BorlandReal48; typedef struct { int32_t value; bool overflow; } BorlandReal48IntegerResult; typedef struct { BorlandReal48 value; bool overflow; bool divide_by_zero; } BorlandReal48Result; BorlandReal48Result borland_real48_add_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0cd4 */ BorlandReal48Result borland_real48_subtract_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0cd0 */ BorlandReal48Result borland_real48_multiply_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0d97 */ BorlandReal48 borland_real48_zero_registers(void); /* 1020:0e93 */ BorlandReal48Result borland_real48_divide_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0e9a */ BorlandReal48Result borland_real48_add_preserving_right( BorlandReal48 left, BorlandReal48 right); /* 1020:1031 */ BorlandReal48Result borland_real48_subtract_preserving_right( BorlandReal48 left, BorlandReal48 right); /* 1020:103b */ BorlandReal48Result borland_real48_multiply_preserving_right( BorlandReal48 left, BorlandReal48 right); /* 1020:1045 */ BorlandReal48Result borland_real48_divide_preserving_right( BorlandReal48 left, BorlandReal48 right); /* 1020:104f */ BorlandReal48 borland_real48_integer_part( BorlandReal48 value); /* 1020:1059 */ BorlandReal48 borland_real48_fractional_part( BorlandReal48 value); /* 1020:10aa */ BorlandReal48 borland_real48_sqrt(BorlandReal48 value); /* 1020:10be */ BorlandReal48 borland_real48_polynomial_plus_one( BorlandReal48 argument, const BorlandReal48 *coefficients, uint16_t count); /* 1020:1455 */ BorlandReal48 borland_real48_odd_polynomial( BorlandReal48 argument, const BorlandReal48 *coefficients, uint16_t count); /* 1020:143c */ BorlandReal48 borland_real48_arctan_series( BorlandReal48 argument); /* 1020:1436 */ BorlandReal48 borland_real48_arctan(BorlandReal48 argument); /* 1020:1307 */ BorlandReal48 borland_real48_ln(BorlandReal48 argument); /* 1020:11bb */ BorlandReal48 borland_real48_exp(BorlandReal48 argument); /* 1020:1264 */ BorlandReal48 borland_real48_sin( BorlandReal48 argument); /* 1020:1130 shared entry */ BorlandReal48 borland_real48_cos(BorlandReal48 argument); /* 1020:111d */ int16_t borland_real48_compare_magnitude_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0f28 */ int16_t borland_real48_compare_registers( BorlandReal48 left, BorlandReal48 right); /* 1020:0f11 */ BorlandReal48 borland_i32_to_real48_registers( int32_t value); /* 1020:0f3b */ BorlandReal48IntegerResult borland_real48_to_i32_registers( BorlandReal48 value, bool round); /* 1020:0f77 */ int16_t borland_real48_compare( BorlandReal48 left, BorlandReal48 right); /* 1020:1007 */ BorlandReal48 borland_real48_add( BorlandReal48 left, BorlandReal48 right); /* 1020:0fe5 */ BorlandReal48 borland_real48_subtract( BorlandReal48 left, BorlandReal48 right); /* 1020:0feb */ BorlandReal48 borland_real48_square(BorlandReal48 value); /* 1020:0ff1 */ BorlandReal48 borland_real48_multiply( BorlandReal48 left, BorlandReal48 right); /* 1020:0ff7 */ BorlandReal48 borland_real48_divide( BorlandReal48 left, BorlandReal48 right); /* 1020:0ffd */ BorlandReal48 borland_i32_to_real48(int32_t value); /* 1020:100b */ int32_t borland_real48_truncate_to_i32( BorlandReal48 value); /* 1020:100f shared entry */ int32_t borland_real48_round_to_i32( BorlandReal48 value); /* 1020:1017 */ #endif (އx~/* Low-level TDKPIN background/overlay bitmap blits. */ #include "tdkpin_render.h" #include "tdkpin_arithmetic.h" enum { DGROUP_BACKGROUND_BITMAP = 0x085b, DGROUP_OVERLAY_BITMAP_B = 0x085d, DGROUP_OVERLAY_BITMAP_A = 0x085f, WIN16_SRCCOPY = 0x00cc0020, WIN16_SRCAND = 0x008800c6, DGROUP_DIGIT_BITMAP = 0x0861, DGROUP_PLAYER_SCORE_INDEX_BASE = 0x097e, }; static HBITMAP16 dgroup_bitmap(uint16_t offset) { return win16_read_u16(win16_dgroup_pointer(offset)); } /* 1008:07b6 — copy a supplied bitmap's origin into the background bitmap. */ void tdkpin_blit_bitmap_to_background( HBITMAP16 bitmap, INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { HDC16 background_dc = CreateCompatibleDC16(reference_dc); HDC16 bitmap_dc = CreateCompatibleDC16(reference_dc); HGDIOBJ16 old_background = SelectObject16( background_dc, dgroup_bitmap(DGROUP_BACKGROUND_BITMAP)); HGDIOBJ16 old_bitmap = SelectObject16(bitmap_dc, bitmap); (void)BitBlt16( background_dc, x, y, width, height, bitmap_dc, 0, 0, WIN16_SRCCOPY); (void)SelectObject16(bitmap_dc, old_bitmap); (void)SelectObject16(background_dc, old_background); (void)DeleteDC16(bitmap_dc); (void)DeleteDC16(background_dc); } /* 1008:0837 — restore a rectangle from overlay bitmap 085f. */ void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { HDC16 background_dc = CreateCompatibleDC16(reference_dc); HDC16 overlay_dc = CreateCompatibleDC16(reference_dc); HGDIOBJ16 old_background = SelectObject16( background_dc, dgroup_bitmap(DGROUP_BACKGROUND_BITMAP)); HGDIOBJ16 old_overlay = SelectObject16( overlay_dc, dgroup_bitmap(DGROUP_OVERLAY_BITMAP_A)); (void)BitBlt16( background_dc, x, y, width, height, overlay_dc, x, y, WIN16_SRCCOPY); (void)SelectObject16(overlay_dc, old_overlay); (void)SelectObject16(background_dc, old_background); (void)DeleteDC16(overlay_dc); (void)DeleteDC16(background_dc); } /* 1008:08bb — byte-identical restore using overlay bitmap 085d. */ void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { HDC16 background_dc = CreateCompatibleDC16(reference_dc); HDC16 overlay_dc = CreateCompatibleDC16(reference_dc); HGDIOBJ16 old_background = SelectObject16( background_dc, dgroup_bitmap(DGROUP_BACKGROUND_BITMAP)); HGDIOBJ16 old_overlay = SelectObject16( overlay_dc, dgroup_bitmap(DGROUP_OVERLAY_BITMAP_B)); (void)BitBlt16( background_dc, x, y, width, height, overlay_dc, x, y, WIN16_SRCCOPY); (void)SelectObject16(overlay_dc, old_overlay); (void)SelectObject16(background_dc, old_background); (void)DeleteDC16(overlay_dc); (void)DeleteDC16(background_dc); } /* 1008:093f — copy one background rectangle to the destination DC. */ void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 destination) { HDC16 background_dc = CreateCompatibleDC16(destination); HGDIOBJ16 old_background = SelectObject16( background_dc, dgroup_bitmap(DGROUP_BACKGROUND_BITMAP)); (void)BitBlt16( destination, x, y, width, height, background_dc, x, y, WIN16_SRCCOPY); (void)SelectObject16(background_dc, old_background); (void)DeleteDC16(background_dc); } static int16_t score_destination_x(uint16_t player_or_value) { switch (player_or_value) { case 1: return 0x129 - 20; case 2: return 0x155 - 20; case 3: return 0x181 - 20; case 4: return 0x1ad - 20; default: return 0x0fd - 20; } } static int32_t resolve_score_value(int32_t value_or_player) { if (value_or_player < 1 || value_or_player > 4) { return value_or_player; } uint16_t offset = (uint16_t)( DGROUP_PLAYER_SCORE_INDEX_BASE + (uint16_t)value_or_player * 4); return (int32_t)win16_read_u32(win16_dgroup_pointer(offset)); } /* * 1008:0996 — compose an eight-place decimal score into a 40x150 temporary * bitmap. Values 1..4 select the corresponding one-based player score; all * other int32 values render directly. Leading zeroes are suppressed except the * least-significant position, and digit sprites are combined with SRCAND. */ void tdkpin_draw_score(HDC16 destination, int32_t value_or_player) { HDC16 background_dc = CreateCompatibleDC16(destination); HDC16 score_dc = CreateCompatibleDC16(destination); HBITMAP16 score_bitmap = CreateCompatibleBitmap16(destination, 40, 150); int16_t destination_x = score_destination_x((uint16_t)value_or_player); int32_t value = resolve_score_value(value_or_player); HGDIOBJ16 old_background = SelectObject16( background_dc, dgroup_bitmap(DGROUP_BACKGROUND_BITMAP)); HGDIOBJ16 old_score = SelectObject16(score_dc, score_bitmap); (void)BitBlt16( score_dc, 0, 0, 40, 130, background_dc, destination_x, 478, WIN16_SRCCOPY); for (uint8_t position = 0; position < 8; position++) { BorlandDivI32Result digit_division = borland_divide_i32(value, 10); uint8_t digit = (uint8_t)digit_division.remainder; BorlandDivI32Result quotient_division = borland_divide_i32(value, 10); value = quotient_division.quotient; if (digit != 0 || value > 0 || position == 0) { (void)SelectObject16( background_dc, dgroup_bitmap(DGROUP_DIGIT_BITMAP)); (void)BitBlt16( score_dc, 0, (INT16)((7 - position) * 16), 28, 16, background_dc, (INT16)((uint16_t)digit << 4), 0, WIN16_SRCAND); } } (void)BitBlt16( destination, destination_x, 478, 40, 130, score_dc, 0, 0, WIN16_SRCCOPY); (void)SelectObject16(background_dc, old_background); (void)SelectObject16(score_dc, old_score); (void)DeleteObject16(score_bitmap); (void)DeleteDC16(background_dc); (void)DeleteDC16(score_dc); } qйBx)#ifndef TDKPIN_RENDER_H #define TDKPIN_RENDER_H #include "tdkpin_segmented.h" void tdkpin_blit_bitmap_to_background( HBITMAP16 bitmap, INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc); /* 1008:07b6 */ void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc); /* 1008:0837 */ void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc); /* 1008:08bb */ void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 destination); /* 1008:093f */ void tdkpin_draw_score( HDC16 destination, int32_t value_or_player); /* 1008:0996 */ void tdkpin_update_status_display( uint8_t player, HDC16 destination); /* 1008:0b9e */ void tdkpin_draw_item_status( int16_t item, HDC16 destination); /* 1008:0dbd */ void tdkpin_draw_claw_frame( uint8_t alternate, uint16_t frame, HDC16 destination); /* 1008:0e08 */ #endif m9/x!Q/* Complete semantic catalog of the 63 resources in TDKPIN.EXE. */ #include "tdkpin_resources.h" #define IMAGE(type_, id_, off_, alloc_, used_, width_, height_, disp_, role_) \ {type_, id_, off_, alloc_, used_, 0x0c00, width_, height_, 0, disp_, role_} #define WAV(id_, off_, alloc_, used_, flags_, rate_, role_) \ {TDKPIN_RESOURCE_WAV, id_, off_, alloc_, used_, flags_, 0, 0, rate_, \ TDKPIN_RESOURCE_DIRECT, role_} #define WINRES(type_, id_, off_, alloc_, used_, disp_, role_) \ {type_, id_, off_, alloc_, used_, 0x1c30, 0, 0, 0, disp_, role_} const TdkpinResourceDescriptor tdkpin_resource_catalog[TDKPIN_RESOURCE_COUNT] = { IMAGE(TDKPIN_RESOURCE_DAT, 400, 118272, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 0"), IMAGE(TDKPIN_RESOURCE_DAT, 401, 123904, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 1"), IMAGE(TDKPIN_RESOURCE_DAT, 402, 129536, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 2"), IMAGE(TDKPIN_RESOURCE_DAT, 403, 135168, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 3"), IMAGE(TDKPIN_RESOURCE_DAT, 404, 140800, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 4"), IMAGE(TDKPIN_RESOURCE_DAT, 405, 146432, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 5"), IMAGE(TDKPIN_RESOURCE_DAT, 406, 152064, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 6"), IMAGE(TDKPIN_RESOURCE_DAT, 407, 157696, 5632, 5452, 42, 123, TDKPIN_RESOURCE_DIRECT, "player emblem sprite 7"), IMAGE(TDKPIN_RESOURCE_DAT, 600, 163328, 98048, 97960, 544, 180, TDKPIN_RESOURCE_DIRECT, "rotating-target and panel-animation atlas"), IMAGE(TDKPIN_RESOURCE_DAT, 701, 261376, 21248, 21056, 146, 142, TDKPIN_RESOURCE_DIRECT, "score status level 1"), IMAGE(TDKPIN_RESOURCE_DAT, 702, 282624, 21248, 21056, 146, 142, TDKPIN_RESOURCE_DIRECT, "score status level 2"), IMAGE(TDKPIN_RESOURCE_DAT, 703, 303872, 21248, 21056, 146, 142, TDKPIN_RESOURCE_DIRECT, "score status level 3"), IMAGE(TDKPIN_RESOURCE_DAT, 704, 325120, 21248, 21056, 146, 142, TDKPIN_RESOURCE_DIRECT, "score status level 4"), IMAGE(TDKPIN_RESOURCE_DAT, 801, 346368, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 1"), IMAGE(TDKPIN_RESOURCE_DAT, 802, 350720, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 2"), IMAGE(TDKPIN_RESOURCE_DAT, 803, 355072, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 3"), IMAGE(TDKPIN_RESOURCE_DAT, 804, 359424, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 4"), IMAGE(TDKPIN_RESOURCE_DAT, 805, 363776, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 5"), IMAGE(TDKPIN_RESOURCE_DAT, 806, 368128, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 6"), IMAGE(TDKPIN_RESOURCE_DAT, 807, 372480, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 7"), IMAGE(TDKPIN_RESOURCE_DAT, 808, 376832, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 8"), IMAGE(TDKPIN_RESOURCE_DAT, 809, 381184, 4352, 4188, 68, 61, TDKPIN_RESOURCE_DIRECT, "collected-item display count 9"), IMAGE(TDKPIN_RESOURCE_DAT, 900, 385536, 266496, 266440, 900, 296, TDKPIN_RESOURCE_DIRECT, "18-frame claw sprite atlas"), IMAGE(TDKPIN_RESOURCE_DAT, 901, 652032, 4096, 3984, 230, 17, TDKPIN_RESOURCE_DIRECT, "launcher and velocity-row decoration atlas"), IMAGE(TDKPIN_RESOURCE_DAT, 993, 656128, 108288, 108040, 360, 300, TDKPIN_RESOURCE_DIRECT, "high-score window background"), IMAGE(TDKPIN_RESOURCE_DAT, 994, 764416, 3328, 3160, 237, 13, TDKPIN_RESOURCE_DIRECT, "asset-loading progress strip"), IMAGE(TDKPIN_RESOURCE_DAT, 995, 767744, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "one-shot board splash"), IMAGE(TDKPIN_RESOURCE_DAT, 997, 1062400, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "immutable restore overlay A"), IMAGE(TDKPIN_RESOURCE_DAT, 998, 1357056, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "restore overlay B and mutable background"), IMAGE(TDKPIN_RESOURCE_DAT, 1001, 1651712, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "board background selected by index 1"), IMAGE(TDKPIN_RESOURCE_DAT, 1002, 1946368, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "board background selected by index 2"), IMAGE(TDKPIN_RESOURCE_DAT, 1003, 2241024, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "board background selected by index 3"), IMAGE(TDKPIN_RESOURCE_DAT, 1004, 2535680, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "board background selected by index 4"), IMAGE(TDKPIN_RESOURCE_DAT, 1005, 2830336, 294656, 294440, 640, 460, TDKPIN_RESOURCE_DIRECT, "board background selected by index 5"), {TDKPIN_RESOURCE_PAL, 999, 3124992, 768, 768, 0x0c00, 0, 0, 0, TDKPIN_RESOURCE_DIRECT, "256 RGB triples shared by all custom DAT DIBs"}, WAV(2001, 3125760, 6400, 6302, 0x1c70, 22222, "add-player cue"), WAV(2002, 3132160, 4608, 4594, 0x1c70, 22222, "launcher release cue"), WAV(2004, 3136768, 7680, 7554, 0x1c70, 22222, "trigger activation cue"), WAV(2006, 3144448, 3072, 2906, 0x0c60, 22050, "timed target 51..53 hit cue"), WAV(2007, 3147520, 30464, 30452, 0x1c70, 22222, "score-marker or full-item-bank award cue"), WAV(2008, 3177984, 39168, 39134, 0x1c70, 22050, "normal ball-end cue"), WAV(2011, 3217152, 6912, 6710, 0x0c60, 22050, "rotating-target mechanism start cue"), WAV(2012, 3224064, 512, 320, 0x0c60, 22050, "target and panel transition cue"), WAV(2013, 3224576, 46592, 46348, 0x0c60, 22050, "panel mechanism motion cue"), WAV(2015, 3271168, 8192, 7946, 0x1c70, 22050, "ball capture cue"), WAV(2016, 3279360, 3584, 3518, 0x1c70, 22222, "claw ball-release cue"), WAV(2017, 3282944, 35072, 34842, 0x1c70, 22050, "completed target-bank/item award cue"), WAV(2019, 3318016, 5376, 5148, 0x1c70, 22222, "table nudge or kick-response cue"), WAV(2020, 3323392, 30208, 30000, 0x1c70, 22222, "tilt cue"), WAV(2021, 3353600, 3328, 3194, 0x1c70, 22222, "flipper motion cue"), WAV(2022, 3356928, 22272, 22122, 0x1c70, 22050, "reserved present sound slot with no direct literal call"), {TDKPIN_RESOURCE_BITMAP, 101, 3379200, 256, 232, 0x0c30, 16, 16, 0, TDKPIN_RESOURCE_DIRECT, "16x16 SRCPAINT object-composition image"}, {TDKPIN_RESOURCE_BITMAP, 102, 3379456, 256, 232, 0x0c30, 16, 16, 0, TDKPIN_RESOURCE_DIRECT, "16x16 SRCAND object-composition mask"}, {TDKPIN_RESOURCE_BITMAP, 500, 3379712, 13568, 13320, 0x0c30, 944, 28, 0, TDKPIN_RESOURCE_DIRECT, "score-digit and timer indicator atlas"}, {TDKPIN_RESOURCE_ICON, 1, 3393280, 768, 744, 0x1c30, 32, 32, 0, TDKPIN_RESOURCE_SYSTEM_RESOLVED, "image selected by GROUP_ICON 996"}, WINRES(TDKPIN_RESOURCE_GROUP_ICON, 996, 3394048, 256, 20, TDKPIN_RESOURCE_DIRECT, "main-window icon group loaded at 1000:016c"), {TDKPIN_RESOURCE_VERSION, 1, 3394304, 512, 416, 0x0c30, 0, 0, 0, TDKPIN_RESOURCE_SYSTEM_RESOLVED, "Windows version metadata; no image-code loader"}, WINRES(TDKPIN_RESOURCE_DIALOG, 32512, 3394816, 256, 250, TDKPIN_RESOURCE_LINKED_UNUSED, "Borland 2D File Open template"), WINRES(TDKPIN_RESOURCE_DIALOG, 32513, 3395072, 256, 212, TDKPIN_RESOURCE_LINKED_UNUSED, "Borland 2D File Save As template"), WINRES(TDKPIN_RESOURCE_DIALOG, 32514, 3395328, 256, 99, TDKPIN_RESOURCE_DIRECT, "2D text-entry template selected at 1008:1607"), WINRES(TDKPIN_RESOURCE_DIALOG, 32515, 3395584, 512, 372, TDKPIN_RESOURCE_LINKED_UNUSED, "Borland CTL3D File Open template"), WINRES(TDKPIN_RESOURCE_DIALOG, 32516, 3396096, 512, 309, TDKPIN_RESOURCE_LINKED_UNUSED, "Borland CTL3D File Save As template"), WINRES(TDKPIN_RESOURCE_DIALOG, 32517, 3396608, 256, 146, TDKPIN_RESOURCE_DIRECT, "CTL3D text-entry template selected at 1008:1607"), }; _Static_assert( sizeof(tdkpin_resource_catalog) / sizeof(tdkpin_resource_catalog[0]) == TDKPIN_RESOURCE_COUNT, "TDKPIN resource catalog must remain complete"); #undef WINRES #undef WAV #undef IMAGE ѡYxa#ifndef TDKPIN_RESOURCES_H #define TDKPIN_RESOURCES_H #include #include /* * Semantic C view of TDKPIN.EXE's NE resource table. The immutable payload * bytes live in assets/raw and are tied to these entries by type, id, file * offset, allocation size, and assets/manifest.json's SHA-256 digests. */ typedef enum { TDKPIN_RESOURCE_DAT, TDKPIN_RESOURCE_PAL, TDKPIN_RESOURCE_WAV, TDKPIN_RESOURCE_BITMAP, TDKPIN_RESOURCE_ICON, TDKPIN_RESOURCE_GROUP_ICON, TDKPIN_RESOURCE_VERSION, TDKPIN_RESOURCE_DIALOG, } TdkpinResourceType; typedef enum { /* Loaded or selected by an instruction path reconstructed from the image. */ TDKPIN_RESOURCE_DIRECT, /* Resolved by Windows as a dependency or metadata, rather than image code. */ TDKPIN_RESOURCE_SYSTEM_RESOLVED, /* Linked Borland library resource with no reachable in-image selector. */ TDKPIN_RESOURCE_LINKED_UNUSED, } TdkpinResourceDisposition; typedef struct { TdkpinResourceType type; uint16_t id; uint32_t file_offset; uint32_t allocated_size; uint32_t meaningful_size; uint16_t flags; uint16_t width; uint16_t height; uint32_t sample_rate; TdkpinResourceDisposition disposition; const char *role; } TdkpinResourceDescriptor; enum { TDKPIN_RESOURCE_COUNT = 63 }; extern const TdkpinResourceDescriptor tdkpin_resource_catalog[TDKPIN_RESOURCE_COUNT]; #endif h xPr/* * Borland TPWinCrt window runtime reconstructed from TDKPIN.EXE. * * Target: a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c * Function: 1008:2219 (NE export ordinal 119) * Registration: WNDCLASS16 at DGROUP 1028:0562, relocation source 1028:0564 * * The original callback is a 10-byte far-Pascal WNDPROC16. Therefore its * source parameters are HWND16, UINT16, WPARAM16, and a 32-bit LPARAM—not the * five guessed parameters shown by an untyped decompiler signature. */ #include "tdkpin_runtime_ui.h" #include "tdkpin_borland_runtime.h" /* Address-linked dependencies reconstructed in later rows of the same module. */ void tpwincrt_on_create(void); /* 1008:1d77 */ void tpwincrt_on_paint(void); /* 1008:1dcc */ void tpwincrt_handle_scroll(uint16_t thumb_position, uint16_t command, uint16_t vertical); /* 1008:1f0c */ void tpwincrt_on_size(int16_t client_width, int16_t client_height); /* 1008:1f68 */ void tpwincrt_update_scrollbars(void); /* 1008:1865 */ void tpwincrt_fill_minmax_info(Win16FarPtr minmax_info); /* 1008:1fe8 */ void tpwincrt_queue_character(uint8_t character); /* 1008:211a */ void tpwincrt_handle_keydown(uint8_t virtual_key); /* 1008:2147 */ void tpwincrt_on_set_focus(void); /* 1008:21ba */ void tpwincrt_on_kill_focus(void); /* 1008:21ce */ void tpwincrt_on_destroy(void); /* 1008:21e2 */ void tpwincrt_abort_on_ctrl_c(void); /* 1008:18d0 */ void tpwincrt_create_caret(void); /* 1008:1818 */ void tpwincrt_destroy_caret(void); /* 1008:185b */ /* 1008:172f and 1008:1754 — signed 16-bit bounds helpers. */ int16_t tpwincrt_min_i16(int16_t left, int16_t right) { return right < left ? right : left; } int16_t tpwincrt_max_i16(int16_t left, int16_t right) { return left < right ? right : left; } /* * 1008:1e8a — apply one Win16 scrollbar command. * * The binary receives a near SS pointer to 1008:1f0c's BP and reads the two * incoming message words at +4/+6. This typed view preserves that intentional * caller-frame aliasing while all additions/subtractions retain 16-bit wrap. */ int16_t tpwincrt_apply_scroll_command( const TpWinCrtScrollMessage *message, int16_t maximum, int16_t page, int16_t current) { switch (message->command) { case TPWINCRT_SB_LINEUP: return (int16_t)((uint16_t)current - 1); case TPWINCRT_SB_LINEDOWN: return (int16_t)((uint16_t)current + 1); case TPWINCRT_SB_PAGEUP: return (int16_t)((uint16_t)current - (uint16_t)page); case TPWINCRT_SB_PAGEDOWN: return (int16_t)((uint16_t)current + (uint16_t)page); case TPWINCRT_SB_TOP: return 0; case TPWINCRT_SB_BOTTOM: return maximum; case TPWINCRT_SB_THUMBPOSITION: return message->thumb_position; default: return current; } } /* * 1008:19f8 — address one character in the circular screen buffer. * * The row adjustment and all address arithmetic wrap at 16 bits. The original * performs one signed wrap test only and deliberately leaves the selector * unchanged when the computed offset wraps. */ Win16FarPtr tpwincrt_cell_pointer(int16_t logical_row, int16_t column) { int16_t physical_row = (int16_t)((uint16_t)logical_row + g_tpwincrt_ring_row_origin); if (physical_row >= (int16_t)g_tpwincrt_rows) { physical_row = (int16_t)(physical_row - (int16_t)g_tpwincrt_rows); } uint16_t relative = (uint16_t)( (uint16_t)((uint16_t)physical_row * g_tpwincrt_columns) + (uint16_t)column); uint16_t target_offset = (uint16_t)(win16_far_offset(g_tpwincrt_screen_buffer) + relative); return win16_make_far_pointer( win16_far_selector(g_tpwincrt_screen_buffer), target_offset); } /* * 1008:18ee — clamp and apply the text viewport origin. * * The pixel deltas use unsigned MUL and retain AX only. Passing those bits as * INT16 preserves Win16 ScrollWindow's signed interpretation after wrap. */ void tpwincrt_scroll_to(int16_t target_column, int16_t target_row) { if (!g_tpwincrt_window_created) { return; } int16_t new_column = tpwincrt_max_i16( tpwincrt_min_i16((int16_t)g_tpwincrt_max_view_column, target_column), 0); int16_t new_row = tpwincrt_max_i16( tpwincrt_min_i16((int16_t)g_tpwincrt_max_view_row, target_row), 0); if (new_column == (int16_t)g_tpwincrt_view_column && new_row == (int16_t)g_tpwincrt_view_row) { return; } if (new_column != (int16_t)g_tpwincrt_view_column) { (void)SetScrollPos16(g_tpwincrt_window, 0, new_column, 1); } if (new_row != (int16_t)g_tpwincrt_view_row) { (void)SetScrollPos16(g_tpwincrt_window, 1, new_row, 1); } int16_t delta_x = (int16_t)(uint16_t)( (uint16_t)(g_tpwincrt_view_column - (uint16_t)new_column) * g_tpwincrt_character_width); int16_t delta_y = (int16_t)(uint16_t)( (uint16_t)(g_tpwincrt_view_row - (uint16_t)new_row) * g_tpwincrt_character_height); (void)ScrollWindow16(g_tpwincrt_window, delta_x, delta_y, 0, 0); g_tpwincrt_view_column = (uint16_t)new_column; g_tpwincrt_view_row = (uint16_t)new_row; (void)UpdateWindow16(g_tpwincrt_window); } /* * 1008:1f0c — decode WM_HSCROLL/WM_VSCROLL and move the matching axis. * The non-moving axis is copied unchanged before the common scroll routine. */ void tpwincrt_handle_scroll( uint16_t thumb_position, uint16_t command, uint16_t vertical) { TpWinCrtScrollMessage message = { .thumb_position = (int16_t)thumb_position, .command = command, }; int16_t column = (int16_t)g_tpwincrt_view_column; int16_t row = (int16_t)g_tpwincrt_view_row; if (vertical == 0) { column = tpwincrt_apply_scroll_command( &message, (int16_t)g_tpwincrt_max_view_column, (int16_t)((int16_t)g_tpwincrt_visible_columns / 2), column); } else if (vertical == 1) { row = tpwincrt_apply_scroll_command( &message, (int16_t)g_tpwincrt_max_view_row, (int16_t)g_tpwincrt_visible_rows, row); } tpwincrt_scroll_to(column, row); } /* * 1008:1f68 — WM_SIZE handler. * Signed IDIV derives visible character dimensions. Subsequent subtraction * wraps at 16 bits before the signed max/min bounds are applied. */ void tpwincrt_on_size(int16_t client_width, int16_t client_height) { if (g_tpwincrt_has_focus && g_tpwincrt_caret_enabled) { tpwincrt_destroy_caret(); } g_tpwincrt_visible_columns = (uint16_t)(client_width / (int16_t)g_tpwincrt_character_width); g_tpwincrt_visible_rows = (uint16_t)(client_height / (int16_t)g_tpwincrt_character_height); g_tpwincrt_max_view_column = (uint16_t)tpwincrt_max_i16( (int16_t)(g_tpwincrt_columns - g_tpwincrt_visible_columns), 0); g_tpwincrt_max_view_row = (uint16_t)tpwincrt_max_i16( (int16_t)(g_tpwincrt_rows - g_tpwincrt_visible_rows), 0); g_tpwincrt_view_column = (uint16_t)tpwincrt_min_i16( (int16_t)g_tpwincrt_max_view_column, (int16_t)g_tpwincrt_view_column); g_tpwincrt_view_row = (uint16_t)tpwincrt_min_i16( (int16_t)g_tpwincrt_max_view_row, (int16_t)g_tpwincrt_view_row); tpwincrt_update_scrollbars(); if (g_tpwincrt_has_focus && g_tpwincrt_caret_enabled) { tpwincrt_create_caret(); } } /* * 1008:1d77 — WM_CREATE handler. * Both size calculations intentionally retain only the low word of unsigned * MUL. When Ctrl-C checking is disabled, the system Close command is disabled. */ void tpwincrt_on_create(void) { g_tpwincrt_window_created = 1; uint16_t buffer_bytes = (uint16_t)((uint32_t)g_tpwincrt_columns * g_tpwincrt_rows); g_tpwincrt_screen_buffer = borland_get_mem(buffer_bytes); borland_fill_bytes(g_tpwincrt_screen_buffer, buffer_bytes, ' '); if (!g_tpwincrt_break_check_enabled) { HMENU16 system_menu = GetSystemMenu16(g_tpwincrt_window, 0); (void)EnableMenuItem16(system_menu, 0xf060, 3); } } /* * 1008:1779 — acquire and configure a TPWinCrt drawing context. * WM_PAINT uses BeginPaint16 and the persistent PAINTSTRUCT16 at 1028:4ad6; * non-paint drawing uses GetDC16. The selected stock font is restored later. */ void tpwincrt_begin_drawing(void) { enum { SYSTEM_FIXED_FONT = 0x10, COLOR_WINDOW = 5, COLOR_WINDOWTEXT = 8, DGROUP_PAINT_STRUCT = 0x4ad6, }; if (g_tpwincrt_paint_message_active) { g_tpwincrt_paint_dc = BeginPaint16( g_tpwincrt_window, win16_dgroup_pointer(DGROUP_PAINT_STRUCT)); } else { g_tpwincrt_paint_dc = GetDC16(g_tpwincrt_window); } HGDIOBJ16 font = GetStockObject16(SYSTEM_FIXED_FONT); g_tpwincrt_previous_font = SelectObject16(g_tpwincrt_paint_dc, font); (void)SetTextColor16( g_tpwincrt_paint_dc, GetSysColor16(COLOR_WINDOWTEXT)); (void)SetBkColor16(g_tpwincrt_paint_dc, GetSysColor16(COLOR_WINDOW)); } /* 1008:17e2 — restore the font and release the matching DC acquisition path. */ void tpwincrt_end_drawing(void) { enum { DGROUP_PAINT_STRUCT = 0x4ad6 }; (void)SelectObject16(g_tpwincrt_paint_dc, g_tpwincrt_previous_font); if (g_tpwincrt_paint_message_active) { (void)EndPaint16( g_tpwincrt_window, win16_dgroup_pointer(DGROUP_PAINT_STRUCT)); } else { (void)ReleaseDC16(g_tpwincrt_window, g_tpwincrt_paint_dc); } } /* * 1008:1dcc — WM_PAINT handler for the circular character buffer. * Paint bounds are converted with signed IDIV; right/bottom use the original * add-(cell-1) rounding with 16-bit wrap before division. */ void tpwincrt_on_paint(void) { g_tpwincrt_paint_message_active = 1; tpwincrt_begin_drawing(); int16_t first_column = tpwincrt_max_i16( (int16_t)((uint16_t)(g_tpwincrt_paint.paint.left / (int16_t)g_tpwincrt_character_width) + g_tpwincrt_view_column), 0); int16_t rounded_right = (int16_t)( (uint16_t)g_tpwincrt_paint.paint.right + g_tpwincrt_character_width - 1); int16_t past_last_column = tpwincrt_min_i16( (int16_t)g_tpwincrt_columns, (int16_t)((uint16_t)(rounded_right / (int16_t)g_tpwincrt_character_width) + g_tpwincrt_view_column)); int16_t first_row = tpwincrt_max_i16( (int16_t)((uint16_t)(g_tpwincrt_paint.paint.top / (int16_t)g_tpwincrt_character_height) + g_tpwincrt_view_row), 0); int16_t rounded_bottom = (int16_t)( (uint16_t)g_tpwincrt_paint.paint.bottom + g_tpwincrt_character_height - 1); int16_t past_last_row = tpwincrt_min_i16( (int16_t)g_tpwincrt_rows, (int16_t)((uint16_t)(rounded_bottom / (int16_t)g_tpwincrt_character_height) + g_tpwincrt_view_row)); for (int16_t row = first_row; row < past_last_row; row = (int16_t)((uint16_t)row + 1)) { int16_t x = (int16_t)(uint16_t)( (uint16_t)(first_column - (int16_t)g_tpwincrt_view_column) * g_tpwincrt_character_width); int16_t y = (int16_t)(uint16_t)( (uint16_t)(row - (int16_t)g_tpwincrt_view_row) * g_tpwincrt_character_height); Win16FarPtr text = tpwincrt_cell_pointer(row, first_column); int16_t count = (int16_t)(past_last_column - first_column); (void)TextOut16(g_tpwincrt_paint_dc, x, y, text, count); } tpwincrt_end_drawing(); g_tpwincrt_paint_message_active = 0; } /* * 1008:1fe8 — WM_GETMINMAXINFO handler and font-metric initialization. * Only six words of the caller's MINMAXINFO16 are written, matching the binary; * ptReserved and ptMaxPosition are intentionally left untouched. */ void tpwincrt_fill_minmax_info(Win16FarPtr minmax_info) { enum { SM_CXSCREEN = 0, SM_CYSCREEN = 1, SM_CXVSCROLL = 2, SM_CYHSCROLL = 3, SM_CYCAPTION = 4, SM_CXFRAME = 32, SM_CYFRAME = 33, }; tpwincrt_begin_drawing(); TEXTMETRIC16 metrics; (void)GetTextMetrics16( g_tpwincrt_paint_dc, win16_stack_pointer(&metrics)); g_tpwincrt_character_width = (uint16_t)metrics.maximum_character_width; g_tpwincrt_character_height = (uint16_t)(metrics.height + metrics.external_leading); g_tpwincrt_caret_y_offset = (uint16_t)metrics.ascent; uint16_t frame_width_twice = (uint16_t)((uint16_t)GetSystemMetrics16(SM_CXFRAME) << 1); uint16_t maximum_client_width = (uint16_t)( (uint16_t)(g_tpwincrt_columns * g_tpwincrt_character_width) + (uint16_t)GetSystemMetrics16(SM_CXVSCROLL)); uint16_t maximum_width = (uint16_t)( (uint16_t)tpwincrt_min_i16( (int16_t)maximum_client_width, GetSystemMetrics16(SM_CXSCREEN)) + frame_width_twice); uint16_t frame_height_twice = (uint16_t)((uint16_t)GetSystemMetrics16(SM_CYFRAME) << 1); uint16_t caption_height = (uint16_t)GetSystemMetrics16(SM_CYCAPTION); uint16_t maximum_client_height = (uint16_t)( (uint16_t)(g_tpwincrt_rows * g_tpwincrt_character_height) + (uint16_t)GetSystemMetrics16(SM_CYHSCROLL) + caption_height); uint16_t maximum_height = (uint16_t)( (uint16_t)tpwincrt_min_i16( (int16_t)maximum_client_height, GetSystemMetrics16(SM_CYSCREEN)) + frame_height_twice); uint16_t minimum_width = (uint16_t)( (uint16_t)(g_tpwincrt_character_width << 4) + (uint16_t)GetSystemMetrics16(SM_CXVSCROLL) + frame_width_twice); uint16_t minimum_height = (uint16_t)( (uint16_t)(g_tpwincrt_character_height << 2) + (uint16_t)GetSystemMetrics16(SM_CYHSCROLL) + (uint16_t)((uint16_t)GetSystemMetrics16(SM_CYFRAME) << 1) + caption_height); win16_write_u16(minmax_info, 4, maximum_width); win16_write_u16(minmax_info, 6, maximum_height); win16_write_u16(minmax_info, 12, minimum_width); win16_write_u16(minmax_info, 14, minimum_height); win16_write_u16(minmax_info, 16, maximum_width); win16_write_u16(minmax_info, 18, maximum_height); tpwincrt_end_drawing(); } /* 1008:2147 — translate one WM_KEYDOWN through the exact 12-entry table. */ void tpwincrt_handle_keydown(uint8_t virtual_key) { if (g_tpwincrt_break_check_enabled && virtual_key == 3) { tpwincrt_abort_on_ctrl_c(); } uint8_t control_down = GetKeyState16(0x11) < 0; for (uint16_t index = 0; index < 12; index++) { const TpWinCrtKeyBinding *binding = &g_tpwincrt_key_bindings[index]; if (binding->virtual_key == virtual_key && binding->control_required == control_down) { tpwincrt_handle_scroll(0, binding->scroll_command, binding->vertical); return; } } } /* 1008:1865 — publish horizontal and vertical scrollbar ranges/positions. */ void tpwincrt_update_scrollbars(void) { int16_t horizontal_max = tpwincrt_max_i16((int16_t)g_tpwincrt_max_view_column, 1); (void)SetScrollRange16(g_tpwincrt_window, 0, 0, horizontal_max, 0); (void)SetScrollPos16( g_tpwincrt_window, 0, (int16_t)g_tpwincrt_view_column, 1); int16_t vertical_max = tpwincrt_max_i16((int16_t)g_tpwincrt_max_view_row, 1); (void)SetScrollRange16(g_tpwincrt_window, 1, 0, vertical_max, 0); (void)SetScrollPos16( g_tpwincrt_window, 1, (int16_t)g_tpwincrt_view_row, 1); } /* 1008:19b7 — scroll only far enough to keep the cursor visible. */ void tpwincrt_scroll_cursor_into_view(void) { int16_t leftmost = (int16_t)( (uint16_t)(g_tpwincrt_cursor_column - g_tpwincrt_visible_columns) + 1); int16_t target_column = tpwincrt_max_i16( tpwincrt_min_i16( (int16_t)g_tpwincrt_cursor_column, (int16_t)g_tpwincrt_view_column), leftmost); int16_t topmost = (int16_t)( (uint16_t)(g_tpwincrt_cursor_row - g_tpwincrt_visible_rows) + 1); int16_t target_row = tpwincrt_max_i16( tpwincrt_min_i16( (int16_t)g_tpwincrt_cursor_row, (int16_t)g_tpwincrt_view_row), topmost); tpwincrt_scroll_to(target_column, target_row); } /* * 1008:2219 — process-wide TPWinCrt WNDPROC16. * * Every handled message returns zero, exactly as the zeroed DX:AX local in the * binary. Only unhandled messages preserve DefWindowProc16's 32-bit result. * WM_SIZE carries width in LOWORD(lParam) and height in HIWORD(lParam). */ LRESULT16 tpwincrt_window_proc( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { g_tpwincrt_window = window; switch (message) { case WIN16_WM_CREATE: tpwincrt_on_create(); break; case WIN16_WM_PAINT: tpwincrt_on_paint(); break; case WIN16_WM_VSCROLL: tpwincrt_handle_scroll((uint16_t)lparam, wparam, 1); break; case WIN16_WM_HSCROLL: tpwincrt_handle_scroll((uint16_t)lparam, wparam, 0); break; case WIN16_WM_SIZE: tpwincrt_on_size((int16_t)lparam, (int16_t)((uint32_t)lparam >> 16)); break; case WIN16_WM_GETMINMAXINFO: tpwincrt_fill_minmax_info((Win16FarPtr)lparam); break; case WIN16_WM_CHAR: tpwincrt_queue_character((uint8_t)wparam); break; case WIN16_WM_KEYDOWN: tpwincrt_handle_keydown((uint8_t)wparam); break; case WIN16_WM_SETFOCUS: tpwincrt_on_set_focus(); break; case WIN16_WM_KILLFOCUS: tpwincrt_on_kill_focus(); break; case WIN16_WM_DESTROY: tpwincrt_on_destroy(); break; default: return DefWindowProc16(window, message, wparam, lparam); } return 0; } /* 1008:211a — append one WM_CHAR byte to the fixed 64-byte input queue. */ void tpwincrt_queue_character(uint8_t character) { if (g_tpwincrt_break_check_enabled && character == 3) { tpwincrt_abort_on_ctrl_c(); } if ((int16_t)g_tpwincrt_input_count < 64) { g_tpwincrt_input_buffer[g_tpwincrt_input_count] = character; g_tpwincrt_input_count++; } } /* 1008:21ba — WM_SETFOCUS handler. */ void tpwincrt_on_set_focus(void) { g_tpwincrt_has_focus = 1; if (g_tpwincrt_caret_enabled) { tpwincrt_create_caret(); } } /* 1008:21ce — WM_KILLFOCUS handler. */ void tpwincrt_on_kill_focus(void) { if (g_tpwincrt_caret_enabled) { tpwincrt_destroy_caret(); } g_tpwincrt_has_focus = 0; } /* * 1008:21e2 — WM_DESTROY handler. * MUL leaves the low 16 bits in AX, so the buffer byte count intentionally * wraps at 16 bits before it is passed to Borland's far-heap release routine. */ void tpwincrt_on_destroy(void) { uint16_t buffer_bytes = (uint16_t)((uint32_t)g_tpwincrt_columns * g_tpwincrt_rows); borland_free_mem(g_tpwincrt_screen_buffer, buffer_bytes); g_tpwincrt_cursor_column = 0; g_tpwincrt_cursor_row = 0; g_tpwincrt_view_column = 0; g_tpwincrt_view_row = 0; PostQuitMessage16(0); g_tpwincrt_window_created = 0; } /* * 1008:1818 — create, position, and show the text caret. * Both coordinate multiplications intentionally retain only AX, matching the * unsigned 16-bit MUL instructions at 1818:1836 and 1818:1842. */ void tpwincrt_create_caret(void) { uint16_t x = (uint16_t)( (uint16_t)(g_tpwincrt_cursor_column - g_tpwincrt_view_column) * g_tpwincrt_character_width); uint16_t y = (uint16_t)( (uint16_t)(g_tpwincrt_cursor_row - g_tpwincrt_view_row) * g_tpwincrt_character_height + g_tpwincrt_caret_y_offset); (void)CreateCaret16( g_tpwincrt_window, 0, (INT16)g_tpwincrt_character_width, 2); (void)SetCaretPos16((INT16)x, (INT16)y); (void)ShowCaret16(g_tpwincrt_window); } /* 1008:185b — destroy the process caret; the BOOL16 result is ignored. */ void tpwincrt_destroy_caret(void) { (void)DestroyCaret16(); } /* 1008:18d0 — Ctrl-C termination path. */ _Noreturn void tpwincrt_abort_on_ctrl_c(void) { if (g_tpwincrt_has_focus && g_tpwincrt_caret_enabled) { tpwincrt_destroy_caret(); } borland_runtime_exit(0xff); } ƻTxK#ifndef TDKPIN_RUNTIME_UI_H #define TDKPIN_RUNTIME_UI_H #include "tdkpin_dgroup.h" #include typedef struct { int16_t thumb_position; uint16_t command; } TpWinCrtScrollMessage; int16_t tpwincrt_min_i16(int16_t left, int16_t right); int16_t tpwincrt_max_i16(int16_t left, int16_t right); int16_t tpwincrt_apply_scroll_command( const TpWinCrtScrollMessage *message, int16_t maximum, int16_t page, int16_t current); Win16FarPtr tpwincrt_cell_pointer(int16_t logical_row, int16_t column); void tpwincrt_scroll_to(int16_t target_column, int16_t target_row); void tpwincrt_update_scrollbars(void); void tpwincrt_scroll_cursor_into_view(void); void tpwincrt_begin_drawing(void); void tpwincrt_end_drawing(void); void tpwincrt_create_caret(void); void tpwincrt_destroy_caret(void); void tpwincrt_handle_scroll( uint16_t thumb_position, uint16_t command, uint16_t vertical); void tpwincrt_on_size(int16_t client_width, int16_t client_height); void tpwincrt_handle_keydown(uint8_t virtual_key); void tpwincrt_queue_character(uint8_t character); _Noreturn void tpwincrt_abort_on_ctrl_c(void); void tpwincrt_on_create(void); void tpwincrt_on_destroy(void); void tpwincrt_fill_minmax_info(Win16FarPtr minmax_info); LRESULT16 tpwincrt_window_proc( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); #endif мx</* Portable selector-backed implementation of explicit Win16 memory access. */ #include "tdkpin_segmented.h" #include #include enum { MAX_BOUND_SEGMENTS = 32 }; typedef struct { uint16_t ne_segment; uint16_t selector; uint8_t *bytes; size_t size; bool writable; } BoundSegment; static BoundSegment g_segments[MAX_BOUND_SEGMENTS]; static size_t g_segment_count; static uint16_t g_dgroup_selector; static uint16_t g_stack_selector; static uint16_t g_stack_pointer_offset; static Win16FarPtr g_current_return_address; static uint32_t g_dos_time_words; static uint16_t g_indeterminate_u16; static BoundSegment *find_segment(uint16_t selector) { for (size_t index = 0; index < g_segment_count; index++) { if (g_segments[index].selector == selector) { return &g_segments[index]; } } abort(); /* Invalid selectors fault in the original Win16 environment. */ } static uint8_t *resolve(Win16FarPtr address, size_t bytes, bool write) { BoundSegment *segment = find_segment(win16_far_selector(address)); size_t offset = win16_far_offset(address); if (offset + bytes > segment->size || (write && !segment->writable)) { abort(); } return segment->bytes + offset; } void win16_reset_segment_bindings(void) { g_segment_count = 0; g_dgroup_selector = 0; g_stack_selector = 0; g_stack_pointer_offset = 0; g_current_return_address = 0; g_dos_time_words = 0; g_indeterminate_u16 = 0; } void win16_bind_segment( uint16_t selector, void *bytes, size_t size, bool writable) { win16_bind_ne_segment(0, selector, bytes, size, writable); } void win16_bind_ne_segment( uint16_t ne_segment, uint16_t selector, void *bytes, size_t size, bool writable) { if (g_segment_count == MAX_BOUND_SEGMENTS || size > 0x10000) { abort(); } g_segments[g_segment_count++] = (BoundSegment){ne_segment, selector, bytes, size, writable}; } void win16_set_dgroup_selector(uint16_t selector) { (void)find_segment(selector); g_dgroup_selector = selector; } void win16_set_current_return_address(Win16FarPtr address) { g_current_return_address = address; } void win16_set_dos_time_words(uint32_t words) { g_dos_time_words = words; } void win16_set_indeterminate_u16(uint16_t value) { g_indeterminate_u16 = value; } void win16_set_stack_state(uint16_t selector, uint16_t stack_pointer) { (void)find_segment(selector); g_stack_selector = selector; g_stack_pointer_offset = stack_pointer; } Win16FarPtr win16_dgroup_pointer(uint16_t offset) { if (g_dgroup_selector == 0) { abort(); } return win16_make_far_pointer(g_dgroup_selector, offset); } Win16FarPtr win16_relocated_code_pointer(uint16_t ne_segment, uint16_t offset) { for (size_t index = 0; index < g_segment_count; index++) { if (g_segments[index].ne_segment == ne_segment) { return win16_make_far_pointer(g_segments[index].selector, offset); } } abort(); } Win16FarPtr win16_stack_pointer(void *pointer) { uintptr_t value = (uintptr_t)pointer; for (size_t index = 0; index < g_segment_count; index++) { uintptr_t base = (uintptr_t)g_segments[index].bytes; if (value >= base && value < base + g_segments[index].size) { return win16_make_far_pointer( g_segments[index].selector, (uint16_t)(value - base)); } } abort(); } Win16FarPtr win16_current_stack_address(uint16_t offset) { if (g_stack_selector == 0) { abort(); } return win16_make_far_pointer(g_stack_selector, offset); } uint8_t win16_read_u8(Win16FarPtr address) { return *resolve(address, 1, false); } uint16_t win16_read_u16(Win16FarPtr address) { return (uint16_t)( win16_read_u8(address) | ((uint16_t)win16_read_u8(win16_far_add_offset(address, 1)) << 8)); } uint32_t win16_read_u32(Win16FarPtr address) { return (uint32_t)win16_read_u16(address) | ((uint32_t)win16_read_u16(win16_far_add_offset(address, 2)) << 16); } void win16_write_u8(Win16FarPtr address, uint8_t value) { *resolve(address, 1, true) = value; } Win16FarPtr win16_read_far_pointer(Win16FarPtr base, uint16_t byte_offset) { Win16FarPtr address = win16_far_add_offset(base, byte_offset); uint16_t offset = win16_read_u16(address); uint16_t selector = win16_read_u16(win16_far_add_offset(address, 2)); return win16_make_far_pointer(selector, offset); } void win16_write_u16(Win16FarPtr base, uint16_t byte_offset, uint16_t value) { Win16FarPtr address = win16_far_add_offset(base, byte_offset); win16_write_u8(address, (uint8_t)value); win16_write_u8(win16_far_add_offset(address, 1), (uint8_t)(value >> 8)); } void win16_write_u32(Win16FarPtr base, uint16_t byte_offset, uint32_t value) { win16_write_u16(base, byte_offset, (uint16_t)value); win16_write_u16(base, (uint16_t)(byte_offset + 2), (uint16_t)(value >> 16)); } void win16_fill_bytes(Win16FarPtr destination, uint16_t count, uint8_t value) { for (uint16_t index = 0; index != count; index++) { win16_write_u8(win16_far_add_offset(destination, index), value); } } uint16_t win16_indeterminate_u16(void) { return g_indeterminate_u16; } uint32_t win16_dos_time_words(void) { return g_dos_time_words; } Win16FarPtr win16_current_return_address(void) { return g_current_return_address; } uint16_t win16_current_stack_pointer(void) { if (g_stack_selector == 0) { abort(); } return g_stack_pointer_offset; } uint16_t win16_read_stack_u16(uint16_t offset) { if (g_stack_selector == 0) { abort(); } return win16_read_u16(win16_make_far_pointer(g_stack_selector, offset)); } void win16_write_stack_u16(uint16_t offset, uint16_t value) { if (g_stack_selector == 0) { abort(); } win16_write_u16( win16_make_far_pointer(g_stack_selector, offset), 0, value); } uint16_t win16_exchange_u16(Win16FarPtr address, uint16_t value) { uint16_t previous = win16_read_u16(address); win16_write_u16(address, 0, value); return previous; } &xG#ifndef TDKPIN_SEGMENTED_H #define TDKPIN_SEGMENTED_H #include "tdkpin_win16.h" #include #include /* * Explicit operations whose semantics depend on a live Win16 selector table. * Keeping them visible prevents a host pointer cast from silently replacing * segmented 16:16 behavior in the reconstructed source. */ Win16FarPtr win16_dgroup_pointer(uint16_t offset); Win16FarPtr win16_relocated_code_pointer(uint16_t ne_segment, uint16_t offset); Win16FarPtr win16_stack_pointer(void *pointer); Win16FarPtr win16_current_stack_address(uint16_t offset); Win16FarPtr win16_read_far_pointer(Win16FarPtr base, uint16_t byte_offset); uint8_t win16_read_u8(Win16FarPtr address); uint16_t win16_read_u16(Win16FarPtr address); uint32_t win16_read_u32(Win16FarPtr address); void win16_write_u8(Win16FarPtr address, uint8_t value); void win16_write_u16(Win16FarPtr base, uint16_t byte_offset, uint16_t value); void win16_write_u32(Win16FarPtr base, uint16_t byte_offset, uint32_t value); LRESULT16 win16_call_window_proc( Win16FarPtr procedure, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); uint16_t win16_call_pascal_u16( Win16FarPtr procedure, uint16_t argument); uint16_t win16_call_pascal_u16_no_args(Win16FarPtr procedure); void win16_call_exit_proc(Win16FarPtr procedure); void win16_call_object_destructor( Win16FarPtr procedure, Win16FarPtr object, uint16_t dispose_mode); void win16_call_dynamic_method(Win16FarPtr procedure); void win16_call_dynamic_method_two_far( Win16FarPtr procedure, Win16FarPtr receiver, Win16FarPtr argument); void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object); void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument); void win16_fill_bytes(Win16FarPtr destination, uint16_t count, uint8_t value); _Noreturn void win16_dos_terminate(uint8_t status); uint16_t win16_indeterminate_u16(void); uint32_t win16_dos_time_words(void); Win16FarPtr win16_current_return_address(void); uint16_t win16_current_stack_pointer(void); uint16_t win16_read_stack_u16(uint16_t offset); void win16_write_stack_u16(uint16_t offset, uint16_t value); uint16_t win16_exchange_u16(Win16FarPtr address, uint16_t value); _Noreturn void win16_integer_divide_fault(void); typedef struct { uint16_t ax; bool carry; } Win16DosResult; /* Register-complete result for DOS calls whose successful value is DX:AX. */ typedef struct { uint16_t ax; uint16_t dx; bool carry; } Win16DosExtendedResult; typedef struct { uint16_t attributes; bool carry; } Win16DosFileAttributesResult; Win16DosResult win16_dos_read( uint16_t handle, Win16FarPtr buffer, uint16_t count); Win16DosResult win16_dos_write( uint16_t handle, Win16FarPtr buffer, uint16_t count); Win16DosResult win16_dos_close(uint16_t handle); Win16DosResult win16_dos_seek( uint16_t handle, uint32_t offset, uint8_t origin); Win16DosResult win16_dos_open( Win16FarPtr name, uint8_t access_mode); Win16DosResult win16_dos_create( Win16FarPtr name, uint16_t attributes); Win16DosExtendedResult win16_dos_seek_extended( uint16_t handle, uint32_t offset, uint8_t origin); Win16DosExtendedResult win16_dos_get_device_info(uint16_t handle); Win16DosFileAttributesResult win16_dos_get_file_attributes( Win16FarPtr oem_name); /* Portable verification/runtime binding for selector-backed host memory. */ void win16_reset_segment_bindings(void); void win16_bind_segment( uint16_t selector, void *bytes, size_t size, bool writable); void win16_bind_ne_segment( uint16_t ne_segment, uint16_t selector, void *bytes, size_t size, bool writable); void win16_set_dgroup_selector(uint16_t selector); void win16_set_current_return_address(Win16FarPtr address); void win16_set_dos_time_words(uint32_t words); void win16_set_indeterminate_u16(uint16_t value); void win16_set_stack_state(uint16_t selector, uint16_t stack_pointer); #endif ahx /* Borland 32-bit shift and Turbo Pascal ShortString helpers from Code5. */ #include "tdkpin_shortstrings.h" uint32_t borland_shift_right_u32(uint32_t value, uint16_t count) { return value >> (count & 0x1f); } uint32_t borland_shift_left_u32(uint32_t value, uint16_t count) { return value << (count & 0x1f); } void borland_short_assign(Win16FarPtr destination, Win16FarPtr source) { uint8_t length = win16_read_u8(source); win16_write_u8(destination, length); for (uint16_t index = 1; index <= length; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } } void borland_short_assign_truncated( Win16FarPtr destination, Win16FarPtr source, uint8_t maximum_length) { uint8_t length = win16_read_u8(source); if (length > maximum_length) { length = maximum_length; } win16_write_u8(destination, length); for (uint16_t index = 1; index <= length; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } } void borland_short_substring( Win16FarPtr destination, Win16FarPtr source, int16_t index, int16_t count) { if (index < 1) { index = 1; } uint16_t source_length = win16_read_u8(source); uint16_t available = 0; if ((uint16_t)index <= source_length) { available = (uint16_t)(source_length - (uint16_t)index + 1); } uint16_t requested = count < 0 ? 0 : (uint16_t)count; uint8_t copied = (uint8_t)(available < requested ? available : requested); win16_write_u8(destination, copied); for (uint16_t offset = 0; offset < copied; offset++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(offset + 1)), win16_read_u8(win16_far_add_offset( source, (uint16_t)((uint16_t)index + offset)))); } } void borland_short_concat(Win16FarPtr destination, Win16FarPtr source) { uint8_t destination_length = win16_read_u8(destination); uint8_t source_length = win16_read_u8(source); uint16_t sum = (uint16_t)destination_length + source_length; uint8_t copied = source_length; if (sum > 0xff) { copied = (uint8_t)~destination_length; win16_write_u8(destination, 0xff); } else { win16_write_u8(destination, (uint8_t)sum); } for (uint16_t index = 1; index <= copied; index++) { win16_write_u8( win16_far_add_offset( destination, (uint16_t)(destination_length + index)), win16_read_u8(win16_far_add_offset(source, index))); } } uint16_t borland_short_position(Win16FarPtr pattern, Win16FarPtr text) { uint8_t pattern_length = win16_read_u8(pattern); uint8_t text_length = win16_read_u8(text); if (pattern_length == 0 || pattern_length > text_length) { return 0; } uint16_t last = (uint16_t)(text_length - pattern_length + 1); for (uint16_t position = 1; position <= last; position++) { bool equal = true; for (uint16_t index = 1; index <= pattern_length; index++) { if (win16_read_u8(win16_far_add_offset(pattern, index)) != win16_read_u8(win16_far_add_offset( text, (uint16_t)(position + index - 1)))) { equal = false; break; } } if (equal) { return position; } } return 0; } /* Materialize the original FLAGS-only comparison as a signed C result. */ int16_t borland_short_compare(Win16FarPtr left, Win16FarPtr right) { uint8_t left_length = win16_read_u8(left); uint8_t right_length = win16_read_u8(right); uint8_t common = left_length < right_length ? left_length : right_length; for (uint16_t index = 1; index <= common; index++) { uint8_t left_byte = win16_read_u8(win16_far_add_offset(left, index)); uint8_t right_byte = win16_read_u8(win16_far_add_offset(right, index)); if (left_byte != right_byte) { return (int16_t)left_byte - right_byte; } } return (int16_t)left_length - right_length; } void borland_character_to_short(Win16FarPtr destination, uint8_t character) { win16_write_u8(destination, 1); win16_write_u8(win16_far_add_offset(destination, 1), character); } void borland_bytes_to_short( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { win16_write_u8(destination, (uint8_t)count); for (uint16_t index = 0; index < count; index++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(index + 1)), win16_read_u8(win16_far_add_offset(source, index))); } } static uint8_t copy_short_slice( uint8_t *output, uint8_t output_length, Win16FarPtr source, uint16_t first, uint16_t count, uint8_t maximum) { uint8_t source_length = win16_read_u8(source); if (first < 1) { first = 1; } uint16_t available = first <= source_length ? (uint16_t)(source_length - first + 1) : 0; uint16_t copied = available < count ? available : count; if (copied > (uint16_t)(maximum - output_length)) { copied = (uint16_t)(maximum - output_length); } for (uint16_t offset = 0; offset < copied; offset++) { output[output_length++] = win16_read_u8(win16_far_add_offset( source, (uint16_t)(first + offset))); } return output_length; } /* 1020:0b1b — Insert(insertion,destination,index) with destination max length. */ void borland_short_insert( Win16FarPtr destination, Win16FarPtr insertion, int16_t index, uint8_t maximum_length) { if (index < 1) { index = 1; } uint8_t result[255]; uint8_t length = 0; length = copy_short_slice( result, length, destination, 1, (uint16_t)(index - 1), maximum_length); length = copy_short_slice( result, length, insertion, 1, 255, maximum_length); length = copy_short_slice( result, length, destination, (uint16_t)index, 255, maximum_length); win16_write_u8(destination, length); for (uint16_t offset = 0; offset < length; offset++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(offset + 1)), result[offset]); } } /* 1020:0b7a — Delete(string,index,count); invalid ranges leave it unchanged. */ void borland_short_delete(Win16FarPtr string, int16_t index, int16_t count) { if (index <= 0 || count <= 0 || count >= 256) { return; } if (index > 255) { index = 255; } uint8_t result[255]; uint8_t length = 0; length = copy_short_slice( result, length, string, 1, (uint16_t)(index - 1), 255); length = copy_short_slice( result, length, string, (uint16_t)(index + count), 255, 255); win16_write_u8(string, length); for (uint16_t offset = 0; offset < length; offset++) { win16_write_u8( win16_far_add_offset(string, (uint16_t)(offset + 1)), result[offset]); } } Fxm#ifndef TDKPIN_SHORTSTRINGS_H #define TDKPIN_SHORTSTRINGS_H #include "tdkpin_segmented.h" uint32_t borland_shift_right_u32(uint32_t value, uint16_t count); uint32_t borland_shift_left_u32(uint32_t value, uint16_t count); void borland_short_assign(Win16FarPtr destination, Win16FarPtr source); void borland_short_assign_truncated( Win16FarPtr destination, Win16FarPtr source, uint8_t maximum_length); void borland_short_substring( Win16FarPtr destination, Win16FarPtr source, int16_t index, int16_t count); void borland_short_concat(Win16FarPtr destination, Win16FarPtr source); uint16_t borland_short_position(Win16FarPtr pattern, Win16FarPtr text); int16_t borland_short_compare(Win16FarPtr left, Win16FarPtr right); void borland_character_to_short(Win16FarPtr destination, uint8_t character); void borland_bytes_to_short( Win16FarPtr destination, Win16FarPtr source, uint16_t count); void borland_short_insert( Win16FarPtr destination, Win16FarPtr insertion, int16_t index, uint8_t maximum_length); void borland_short_delete( Win16FarPtr string, int16_t index, int16_t count); #endif @ɽx]/* TDKPIN Win16 waveform resource lifecycle. */ #include "tdkpin_sound.h" #include "tdkpin_borland_runtime.h" #include "tdkpin_command_line.h" #include "tdkpin_global_memory.h" #include "tdkpin_shortstrings.h" #include "tdkpin_strings.h" #include enum { DGROUP_SOUND_SIZE_INDEX_BASE = 0x03e6, DGROUP_INI_SUFFIX = 0x0442, DGROUP_INI_SECTION_SETTINGS = 0x0446, DGROUP_INI_KEY_SOUND = 0x044f, DGROUP_WAVE_RESOURCE_TYPE = 0x0455, DGROUP_GAME_TILTED = 0x07c6, DGROUP_WAVE_CAPABILITIES = 0x43be, DGROUP_WAVE_DEVICE_COUNT = 0x43ee, DGROUP_WAVE_DEVICE_ID = 0x43f0, DGROUP_SOUND_INDEX_BASE = 0x43f2, DGROUP_SOUND_ENABLED = 0x43f2, DGROUP_SOUND_PLAYING = 0x43f3, DGROUP_SOUND_VOLUME_STEP = 0x43f4, CODE2_EXTENSION_DOT = 0x0f2c, WAVE_RESOURCE_ID_BASE = 2000, SOUND_FIRST = 1, SOUND_LAST = 22, GMEM_MOVEABLE_ZEROINIT = 0x0042, WAVECAPS_VOLUME = 0x0004, SND_ASYNC_NODEFAULT = 0x0005, }; /* * 1008:0002 — central gameplay sound dispatcher. Tilt suppresses every sound; * the duplicated Enabled test is retained even though 1008:1131 tests it too. */ void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { if (win16_read_u8(win16_dgroup_pointer(DGROUP_GAME_TILTED)) == 0 && win16_read_u8(win16_dgroup_pointer(DGROUP_SOUND_ENABLED)) != 0) { (void)tdkpin_play_sound(sound_number); } } /* Preserve the original 16-bit shift and DGROUP-offset wrapping. */ static uint16_t sound_index_byte_offset(uint16_t sound_number) { return (uint16_t)(sound_number << 2); } static uint32_t sound_resource_byte_count(uint16_t sound_number) { uint16_t offset = (uint16_t)( DGROUP_SOUND_SIZE_INDEX_BASE + sound_index_byte_offset(sound_number)); return win16_read_u32(win16_dgroup_pointer(offset)); } static Win16FarPtr sound_buffer(uint16_t sound_number) { return win16_read_far_pointer( win16_dgroup_pointer(DGROUP_SOUND_INDEX_BASE), sound_index_byte_offset(sound_number)); } static void set_sound_buffer(uint16_t sound_number, Win16FarPtr buffer) { Win16FarPtr base = win16_dgroup_pointer(DGROUP_SOUND_INDEX_BASE); win16_write_u32(base, sound_index_byte_offset(sound_number), buffer); } /* * 1008:0f2e — initialize optional waveform playback. * * The two ParamStr(0) calls and Borland string operations deliberately mirror * the binary: they replace the first dot in the module path with "INI". The * routine then reads [Settings] Sound (default 1), probes wave device zero, * records volume support, and copies each present WAV resource into its own * GMEM_MOVEABLE|GMEM_ZEROINIT block. The original has no resource/allocation * failure checks and this reconstruction intentionally does not add any. */ void tdkpin_initialize_sounds(void) { uint8_t parameter_string[512]; uint8_t ini_file_name[102]; uint8_t module_file_name[102]; win16_write_u8(win16_dgroup_pointer(DGROUP_SOUND_ENABLED), 0); win16_write_u8(win16_dgroup_pointer(DGROUP_SOUND_PLAYING), 0); win16_write_u16( win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT), 0, 0); Win16FarPtr parameter = win16_stack_pointer(parameter_string); Win16FarPtr module_file = win16_stack_pointer(module_file_name); Win16FarPtr ini_file = win16_stack_pointer(ini_file_name); borland_parameter_string(0, parameter); (void)borland_short_to_c_string(module_file, parameter); borland_parameter_string(0, parameter); uint16_t extension_position = borland_short_position( win16_relocated_code_pointer(2, CODE2_EXTENSION_DOT), parameter); (void)borland_far_strncpy( ini_file, module_file, extension_position); (void)borland_far_strcat( ini_file, win16_dgroup_pointer(DGROUP_INI_SUFFIX)); if (GetPrivateProfileInt16( win16_dgroup_pointer(DGROUP_INI_SECTION_SETTINGS), win16_dgroup_pointer(DGROUP_INI_KEY_SOUND), 1, ini_file) == 0) { return; } UINT16 device_count = WaveOutGetNumDevs16(); win16_write_u16( win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT), 0, device_count); if (device_count == 0) { return; } UINT16 device_id = win16_read_u16(win16_dgroup_pointer(DGROUP_WAVE_DEVICE_ID)); if (WaveOutGetDevCaps16( device_id, win16_dgroup_pointer(DGROUP_WAVE_CAPABILITIES), sizeof(WAVEOUTCAPS16)) != 0) { win16_write_u16( win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT), 0, 0); return; } uint32_t support = win16_read_u32( win16_dgroup_pointer( (uint16_t)(DGROUP_WAVE_CAPABILITIES + offsetof(WAVEOUTCAPS16, support)))); if ((support & WAVECAPS_VOLUME) == 0) { win16_write_u8( win16_dgroup_pointer(DGROUP_SOUND_VOLUME_STEP), 0xff); } else { uint32_t volume = 0; (void)WaveOutGetVolume16(device_id, win16_stack_pointer(&volume)); uint8_t high_byte = (uint8_t)(volume >> 8); win16_write_u8( win16_dgroup_pointer(DGROUP_SOUND_VOLUME_STEP), (uint8_t)((high_byte / 10) * 10)); } for (uint16_t sound_number = SOUND_FIRST; sound_number <= SOUND_LAST; sound_number++) { uint32_t byte_count = sound_resource_byte_count(sound_number); if (byte_count == 0) { continue; } HRSRC16 found = FindResource16( g_win16_instance, win16_make_far_pointer( 0, (uint16_t)(sound_number + WAVE_RESOURCE_ID_BASE)), win16_dgroup_pointer(DGROUP_WAVE_RESOURCE_TYPE)); HGLOBAL16 resource = LoadResource16(g_win16_instance, found); Win16FarPtr allocation = tdkpin_global_allocate_locked(GMEM_MOVEABLE_ZEROINIT, byte_count); set_sound_buffer(sound_number, allocation); Win16FarPtr resource_bytes = LockResource16(resource); borland_move_bytes( allocation, resource_bytes, (uint16_t)byte_count); (void)GlobalUnlock16(resource); (void)FreeResource16(resource); } win16_write_u8(win16_dgroup_pointer(DGROUP_SOUND_ENABLED), 1); } /* * 1008:10e3 — stop playback, release sound slots 1..22, clear Playing. * Device count, enabled state, and the freed far pointers remain unchanged. */ void tdkpin_unload_sounds(void) { if (win16_read_u16( win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT)) == 0) { return; } if (win16_read_u8(win16_dgroup_pointer(DGROUP_SOUND_PLAYING)) != 0) { (void)SndPlaySound16(0, 0); } for (uint16_t sound_number = SOUND_FIRST; sound_number <= SOUND_LAST; sound_number++) { tdkpin_global_unlock_and_free(sound_buffer(sound_number)); } win16_write_u8(win16_dgroup_pointer(DGROUP_SOUND_PLAYING), 0); } /* 1008:1131 — play one loaded sound with SND_ASYNC|SND_NODEFAULT. */ uint16_t tdkpin_play_sound(uint16_t sound_number) { if (win16_read_u16(win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT)) != 0 && win16_read_u8(win16_dgroup_pointer(DGROUP_SOUND_ENABLED)) != 0 && sound_resource_byte_count(sound_number) != 0) { if (win16_read_u8(win16_dgroup_pointer(DGROUP_SOUND_PLAYING)) != 0) { (void)SndPlaySound16(0, 0); } BOOL16 played = SndPlaySound16( sound_buffer(sound_number), SND_ASYNC_NODEFAULT); win16_write_u8( win16_dgroup_pointer(DGROUP_SOUND_PLAYING), played != 0); } return win16_indeterminate_u16(); } /* * 1008:118f — stop only while a wave device exists and a sound is marked * playing. The target does not clear Playing and returns an uninitialized word. */ uint16_t tdkpin_stop_sound_if_active(void) { if (win16_read_u16(win16_dgroup_pointer(DGROUP_WAVE_DEVICE_COUNT)) != 0 && win16_read_u8(win16_dgroup_pointer(DGROUP_SOUND_PLAYING)) != 0) { (void)SndPlaySound16(0, 0); } return win16_indeterminate_u16(); } I(xt#ifndef TDKPIN_SOUND_H #define TDKPIN_SOUND_H #include "tdkpin_segmented.h" /* Exact initialized lengths for WAV resource numbers 2001..2022. */ extern const uint32_t g_sound_resource_byte_counts[22]; /* 1028:03ea..0441 */ void tdkpin_initialize_sounds(void); /* 1008:0f2e */ void tdkpin_play_sound_if_not_tilted(uint16_t sound_number); /* 1008:0002 */ uint16_t tdkpin_stop_sound_if_active(void); /* 1008:118f */ void tdkpin_unload_sounds(void); /* 1008:10e3 */ uint16_t tdkpin_play_sound(uint16_t sound_number); /* 1008:1131 */ BOOL16 SndPlaySound16(Win16FarPtr sound, UINT16 flags); void tdkpin_global_unlock_and_free(Win16FarPtr block); #endif _ϾYxa/* Borland 16-bit stack-overflow guard and TDKPIN startup entry. */ #include "tdkpin_stack.h" enum { BORLAND_STACK_SAFETY_BYTES = 0x0400, BORLAND_STACK_LOWER_LIMIT_OFFSET = 0x000a, BORLAND_STACK_LOW_WATER_OFFSET = 0x000e, }; /* * 1020:03cb — check AX bytes plus the Borland 0x400-byte safety reserve. * All comparisons are unsigned 16-bit operations against the live SS layout. * Runtime Error 202 covers addition overflow, collision with SP, and crossing * the absolute lower limit. A successful deeper use updates SS:000e. */ uint16_t borland_check_stack(uint16_t requested_bytes) { uint16_t required = (uint16_t)(requested_bytes + BORLAND_STACK_SAFETY_BYTES); if (required < requested_bytes) { borland_runtime_error(202); } uint16_t stack_pointer = win16_current_stack_pointer(); if (required >= stack_pointer) { borland_runtime_error(202); } uint16_t remaining = (uint16_t)(stack_pointer - required); if (remaining < win16_read_stack_u16(BORLAND_STACK_LOWER_LIMIT_OFFSET)) { borland_runtime_error(202); } if (remaining < win16_read_stack_u16(BORLAND_STACK_LOW_WATER_OFFSET)) { win16_write_stack_u16(BORLAND_STACK_LOW_WATER_OFFSET, remaining); } return remaining; } /* 1008:298a — startup unit entry: execute the stack guard with AX=0. */ void tdkpin_initialize_stack_guard(void) { borland_check_stack(0); } ȇx#ifndef TDKPIN_STACK_H #define TDKPIN_STACK_H #include "tdkpin_borland_runtime.h" uint16_t borland_check_stack(uint16_t requested_bytes); /* 1020:03cb */ void tdkpin_initialize_stack_guard(void); /* 1008:298a */ #endif YcJ*x/* Player status threshold and indicator rendering. */ #include "tdkpin_render.h" enum { DGROUP_CURRENT_PLAYER = 0x07d1, DGROUP_DISPLAYED_STATUS_LEVEL = 0x086b, DGROUP_PLAYER_SCORE_INDEX_BASE = 0x097e, DGROUP_STATUS_BITMAP_INDEX_BASE = 0x4319, DGROUP_ITEM_BITMAP_INDEX_BASE = 0x4321, }; static int32_t player_score(uint8_t player) { uint16_t offset = (uint16_t)( DGROUP_PLAYER_SCORE_INDEX_BASE + (uint16_t)player * 4); return (int32_t)win16_read_u32(win16_dgroup_pointer(offset)); } static uint16_t status_level_for_score(int32_t score) { if (score > 1300000) { return 4; } if (score > 650000) { return 3; } if (score > 140000) { return 2; } if (score > 2000) { return 1; } return 0; } static void draw_status_indicators( HDC16 destination, uint16_t active_level, bool all_inactive) { for (uint16_t index = 0; index <= 4; index++) { int16_t x = (int16_t)((4 - index) * 23 + 77); if (!all_inactive && index == active_level) { tdkpin_restore_background_region_a(11, 11, 544, x, destination); } else { tdkpin_restore_background_region_b(11, 11, 544, x, destination); } tdkpin_present_background_region(11, 11, 544, x, destination); } } /* * 1008:0b9e — update the current player's four score-threshold status levels * and five indicator cells. Player zero clears the display and restores the * sentinel 99; unrelated/invalid players leave every pixel and state unchanged. */ void tdkpin_update_status_display(uint8_t player, HDC16 destination) { uint8_t current_player = win16_read_u8( win16_dgroup_pointer(DGROUP_CURRENT_PLAYER)); uint16_t displayed = win16_read_u16( win16_dgroup_pointer(DGROUP_DISPLAYED_STATUS_LEVEL)); if ((player == current_player || displayed == 99) && player != 0 && player < 5) { uint16_t level = status_level_for_score(player_score(player)); if (level != displayed) { if (level == 0) { tdkpin_restore_background_region_a( 142, 146, 69, 380, destination); } else { uint16_t offset = (uint16_t)( DGROUP_STATUS_BITMAP_INDEX_BASE + level * 2); HBITMAP16 bitmap = win16_read_u16(win16_dgroup_pointer(offset)); tdkpin_blit_bitmap_to_background( bitmap, 142, 146, 69, 380, destination); } tdkpin_present_background_region( 142, 146, 69, 380, destination); draw_status_indicators(destination, level, false); } win16_write_u16( win16_dgroup_pointer(DGROUP_DISPLAYED_STATUS_LEVEL), 0, level); return; } if (player == 0) { tdkpin_restore_background_region_b( 142, 146, 69, 380, destination); tdkpin_present_background_region( 142, 146, 69, 380, destination); draw_status_indicators(destination, 0, true); win16_write_u16( win16_dgroup_pointer(DGROUP_DISPLAYED_STATUS_LEVEL), 0, 99); } } /* 1008:0dbd — draw one item state in the fixed 68x61 panel rectangle. */ void tdkpin_draw_item_status(int16_t item, HDC16 destination) { if (item == 0) { tdkpin_restore_background_region_b( 61, 68, 300, 123, destination); } else { uint16_t offset = (uint16_t)( DGROUP_ITEM_BITMAP_INDEX_BASE + (uint16_t)item * 2); HBITMAP16 bitmap = win16_read_u16(win16_dgroup_pointer(offset)); tdkpin_blit_bitmap_to_background( bitmap, 61, 68, 300, 123, destination); } tdkpin_present_background_region( 61, 68, 300, 123, destination); } 2V;xL/* Borland far-string and memory helpers reconstructed from Code2. */ #include "tdkpin_strings.h" #include typedef struct { Win16FarPtr after; uint16_t remaining; bool found; } FarNulScan; static FarNulScan scan_nul(Win16FarPtr string, uint16_t maximum) { Win16FarPtr current = string; uint16_t remaining = maximum; bool found = false; while (remaining != 0) { uint8_t value = win16_read_u8(current); current = win16_far_add_offset(current, 1); remaining--; if (value == 0) { found = true; break; } } return (FarNulScan){current, remaining, found}; } /* 1020:0891 — unconditional forward CLD/REP MOVSB far copy. */ void borland_far_copy( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { for (uint16_t index = 0; index != count; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } } /* 1008:2e92 — REPNE SCASB strlen with CX=ffff. */ uint16_t borland_far_strlen(Win16FarPtr string) { FarNulScan scan = scan_nul(string, 0xffff); return (uint16_t)(0xfffe - scan.remaining); } /* 1008:2ea9 — pointer to the NUL found by the same bounded scan. */ Win16FarPtr borland_far_strend(Win16FarPtr string) { FarNulScan scan = scan_nul(string, 0xffff); return win16_far_add_offset(scan.after, 0xffff); } /* * 1008:2ec0 — far memmove. * Direction is selected solely by the unsigned source/destination offsets; * selectors are deliberately not compared, exactly like CMP SI,DI. */ Win16FarPtr borland_far_memmove( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { if (win16_far_offset(source) < win16_far_offset(destination)) { for (uint16_t remaining = count; remaining != 0; remaining--) { uint16_t index = (uint16_t)(remaining - 1); win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } } else { for (uint16_t index = 0; index != count; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } } return destination; } /* 1008:2ee5 — copy through and including the bounded NUL. */ Win16FarPtr borland_far_strcpy(Win16FarPtr destination, Win16FarPtr source) { FarNulScan scan = scan_nul(source, 0xffff); uint16_t count = (uint16_t)~scan.remaining; for (uint16_t index = 0; index != count; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } return destination; } /* * 1008:2f07 — bounded copy followed by an unconditional extra NUL. * If the source NUL lies within maximum, that NUL is copied and a second one is * appended; if not, maximum bytes plus one NUL are written. */ Win16FarPtr borland_far_strncpy( Win16FarPtr destination, Win16FarPtr source, uint16_t maximum) { FarNulScan scan = scan_nul(source, maximum); uint16_t count = (uint16_t)(maximum - scan.remaining); for (uint16_t index = 0; index != count; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } win16_write_u8(win16_far_add_offset(destination, count), 0); return destination; } /* 1008:2f2f — Turbo Pascal short string to NUL-terminated far string. */ Win16FarPtr borland_short_to_c_string( Win16FarPtr destination, Win16FarPtr short_string) { uint8_t length = win16_read_u8(short_string); for (uint16_t index = 0; index < length; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(short_string, (uint16_t)(index + 1)))); } win16_write_u8(win16_far_add_offset(destination, length), 0); return destination; } /* 1008:2f4d — append source at destination's bounded NUL. */ Win16FarPtr borland_far_strcat(Win16FarPtr destination, Win16FarPtr source) { (void)borland_far_strcpy(borland_far_strend(destination), source); return destination; } static uint8_t ascii_upper(uint8_t value) { return value >= 'a' && value <= 'z' ? (uint8_t)(value - 0x20) : value; } /* * 1008:2f70 — ASCII-only case-insensitive comparison of at most maximum bytes. * Comparison length is min(maximum, strlen(second)+1), so the second string's * NUL participates when it lies inside the bound. */ int16_t borland_far_strnicmp( Win16FarPtr first, Win16FarPtr second, uint16_t maximum) { if (maximum == 0) { return 0; } FarNulScan scan = scan_nul(second, maximum); uint16_t count = (uint16_t)(maximum - scan.remaining); for (uint16_t index = 0; index < count; index++) { uint8_t first_byte = win16_read_u8(win16_far_add_offset(first, index)); uint8_t second_byte = win16_read_u8(win16_far_add_offset(second, index)); if (first_byte != second_byte) { int16_t difference = (int16_t)ascii_upper(first_byte) - ascii_upper(second_byte); if (difference != 0) { return difference; } } } return 0; } /* 1008:2fbb — forward character search including the terminating NUL. */ Win16FarPtr borland_far_strchr(Win16FarPtr string, uint8_t character) { FarNulScan scan = scan_nul(string, 0xffff); uint16_t count = (uint16_t)~scan.remaining; for (uint16_t index = 0; index < count; index++) { Win16FarPtr current = win16_far_add_offset(string, index); if (win16_read_u8(current) == character) { return current; } } return 0; } /* 1008:2fe3 — reverse character search including the terminating NUL. */ Win16FarPtr borland_far_strrchr(Win16FarPtr string, uint8_t character) { FarNulScan scan = scan_nul(string, 0xffff); uint16_t count = (uint16_t)~scan.remaining; Win16FarPtr current = win16_far_add_offset(scan.after, 0xffff); for (uint16_t remaining = count; remaining != 0; remaining--) { if (win16_read_u8(current) == character) { return current; } current = win16_far_add_offset(current, 0xffff); } return 0; } /* * 1008:300a — NUL-terminated far string to Turbo Pascal short string. * CL alone becomes the length byte, but REP MOVSB still uses the full 16-bit * length; this preserves the original overflow behavior for strings >255. */ void borland_c_to_short_string(Win16FarPtr destination, Win16FarPtr source) { FarNulScan scan = scan_nul(source, 0xffff); uint16_t length = (uint16_t)(~scan.remaining - 1); win16_write_u8(destination, (uint8_t)length); for (uint16_t index = 0; index < length; index++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(index + 1)), win16_read_u8(win16_far_add_offset(source, index))); } } /* 1008:302c — allocate and copy one nonempty far C string. */ Win16FarPtr borland_far_strdup(Win16FarPtr source) { if (source == 0 || win16_read_u8(source) == 0) { return 0; } uint16_t bytes = (uint16_t)(borland_far_strlen(source) + 1); Win16FarPtr copy = borland_get_mem(bytes); return copy == 0 ? 0 : borland_far_memmove(copy, source, bytes); } /* 1008:3099 — release one allocated far C string including its NUL. */ void borland_far_strdispose(Win16FarPtr string) { if (string != 0) { borland_free_mem(string, (uint16_t)(borland_far_strlen(string) + 1)); } } 3Gx|#ifndef TDKPIN_STRINGS_H #define TDKPIN_STRINGS_H #include "tdkpin_borland_runtime.h" uint16_t borland_far_strlen(Win16FarPtr string); Win16FarPtr borland_far_strend(Win16FarPtr string); Win16FarPtr borland_far_memmove( Win16FarPtr destination, Win16FarPtr source, uint16_t count); Win16FarPtr borland_far_strcpy(Win16FarPtr destination, Win16FarPtr source); Win16FarPtr borland_far_strncpy( Win16FarPtr destination, Win16FarPtr source, uint16_t maximum); Win16FarPtr borland_short_to_c_string( Win16FarPtr destination, Win16FarPtr short_string); Win16FarPtr borland_far_strcat(Win16FarPtr destination, Win16FarPtr source); int16_t borland_far_strnicmp( Win16FarPtr first, Win16FarPtr second, uint16_t maximum); Win16FarPtr borland_far_strchr(Win16FarPtr string, uint8_t character); Win16FarPtr borland_far_strrchr(Win16FarPtr string, uint8_t character); void borland_c_to_short_string(Win16FarPtr destination, Win16FarPtr source); Win16FarPtr borland_far_strdup(Win16FarPtr source); void borland_far_strdispose(Win16FarPtr string); void borland_far_copy( Win16FarPtr destination, Win16FarPtr source, uint16_t count); #endif 껷x{ /* TDKPIN's small ObjectWindows/MMTIMER system-timer class. */ #include "tdkpin_system_timer.h" enum { SYSTEM_TIMER_VMT_OFFSET = 0, SYSTEM_TIMER_ID_OFFSET = 2, SYSTEM_TIMER_RECIPIENT_OFFSET = 4, }; /* * 1008:295c — create the underlying MMTIMER timer. * MOV AL,[BP+0a] deliberately preserves AH returned by the stack checker, so * the imported word-valued one_shot argument is not merely zero or one. */ uint16_t tdkpin_system_timer_start( Win16FarPtr object, uint8_t one_shot, uint16_t resolution_ms, uint16_t delay_ms) { uint16_t stack_result = borland_check_stack(2); uint16_t one_shot_word = (uint16_t)((stack_result & 0xff00u) | one_shot); HWND16 recipient = win16_read_u16(win16_far_add_offset( object, SYSTEM_TIMER_RECIPIENT_OFFSET)); return SystemTimerMake16( recipient, delay_ms, resolution_ms, one_shot_word); } /* 1008:2932 — cancel a live multimedia timer, then clear its id. */ void tdkpin_system_timer_stop(Win16FarPtr object) { (void)borland_check_stack(0); uint16_t timer_id = win16_read_u16(win16_far_add_offset(object, SYSTEM_TIMER_ID_OFFSET)); if (timer_id != 0) { (void)TimeKillEvent16(timer_id); } win16_write_u16(object, SYSTEM_TIMER_ID_OFFSET, 0); } /* * 1008:28a3 — construct the six-byte timer object and start its timer. * A zero timer id invokes the Borland constructor-failure cleanup. That frees * newly allocated instances but leaves caller-owned instances in place because * 1020:03ef cleared their hidden VMT ownership argument. */ Win16FarPtr tdkpin_system_timer_construct( Win16FarPtr object, uint16_t vmt, uint8_t one_shot, uint16_t resolution_ms, uint16_t delay_ms, HWND16 recipient) { (void)borland_check_stack(0); BorlandObjectCallFrame frame = {object, vmt}; if (!borland_enter_object_constructor( &frame, SYSTEM_TIMER_VMT_OFFSET)) { return frame.object; } frame.object = borland_default_object_constructor(frame.object, 0); win16_write_u16(frame.object, SYSTEM_TIMER_ID_OFFSET, 0); win16_write_u16(frame.object, SYSTEM_TIMER_RECIPIENT_OFFSET, recipient); uint16_t timer_id = tdkpin_system_timer_start( frame.object, one_shot, resolution_ms, delay_ms); win16_write_u16(frame.object, SYSTEM_TIMER_ID_OFFSET, timer_id); if (timer_id == 0) { borland_finish_object_destructor( &frame, SYSTEM_TIMER_VMT_OFFSET); } return frame.object; } /* 1008:2906 — stop the timer, run the root destructor, and release if owned. */ void tdkpin_system_timer_destruct(Win16FarPtr object, uint16_t vmt) { (void)borland_check_stack(0); BorlandObjectCallFrame frame = {object, vmt}; tdkpin_system_timer_stop(frame.object); borland_default_object_destructor(frame.object, 0); borland_finish_object_destructor(&frame, SYSTEM_TIMER_VMT_OFFSET); } 'x|#ifndef TDKPIN_SYSTEM_TIMER_H #define TDKPIN_SYSTEM_TIMER_H #include "tdkpin_borland_objects.h" #include "tdkpin_stack.h" Win16FarPtr tdkpin_system_timer_construct( Win16FarPtr object, uint16_t vmt, uint8_t one_shot, uint16_t resolution_ms, uint16_t delay_ms, HWND16 recipient); /* 1008:28a3 */ void tdkpin_system_timer_destruct( Win16FarPtr object, uint16_t vmt); /* 1008:2906 */ void tdkpin_system_timer_stop(Win16FarPtr object); /* 1008:2932 */ uint16_t tdkpin_system_timer_start( Win16FarPtr object, uint8_t one_shot, uint16_t resolution_ms, uint16_t delay_ms); /* 1008:295c */ #endif ´1x/* Address-linked compact word tables used by TDKPIN game setup. */ #include "tdkpin_tables.h" enum { DGROUP_WORD_QUADS = 0x4263 }; /* * 1008:0787 — write one eight-byte record. The Pascal argument order is the * reverse of in-memory field order; index multiplication retains 16 bits. */ void tdkpin_set_word_quad( uint16_t source_word_6, uint16_t source_word_4, uint16_t source_word_2, uint16_t source_word_0, uint16_t index) { uint16_t offset = (uint16_t)(DGROUP_WORD_QUADS + (uint16_t)(index * 8u)); Win16FarPtr record = win16_dgroup_pointer(offset); win16_write_u16(record, 0, source_word_0); win16_write_u16(record, 2, source_word_2); win16_write_u16(record, 4, source_word_4); win16_write_u16(record, 6, source_word_6); } x#ifndef TDKPIN_TABLES_H #define TDKPIN_TABLES_H #include "tdkpin_segmented.h" #pragma pack(push, 1) typedef struct { uint16_t word_0; uint16_t word_2; uint16_t word_4; uint16_t word_6; } TdkpinWordQuad; #pragma pack(pop) _Static_assert(sizeof(TdkpinWordQuad) == 8, "word-quad layout drift"); void tdkpin_set_word_quad( uint16_t source_word_6, uint16_t source_word_4, uint16_t source_word_2, uint16_t source_word_0, uint16_t index); /* 1008:0787 */ #endif z xkM$K]ڦȣHEDٓ%Gv/ԃ(Y]|k3gá>Bߕ %9 $[O,8BEi_`g}>H0)#@G ԧ$| 'ti$!R?aGWƻIq}8pө(;Q8JTgXP? &k;8HuOS︋L#m -%7iy@f!ׯO~my27!4?-5|olǘ=f#eH+%IInYI)I4WYi# I8ivz:,AqH Nqf +0K *6;q/m;@4My?{g֦a6|m'?xI8wKaxז׋ />=B<|җvgذΖ=Z9@K֮^ xV@A 9 #0O%Z\C5ctѐӍ:Q0= < t>wktslrk UeJ9w-KF2ՕM[1ۡg d/+q2 yvм,O%Ztg'r, L3nGr +I-HJ\4ˆD~)i̵|+3JpJ=p|“";:|ޟhAkj:9>\Oԟo4GjNw6s)0F$BWRDЫl91(#| i=b=d5Аڱ!8qs|Gw8md/$* -1S^|(8,߿ [nqAM̐ym( S1v8E qy\z4@QX!B8)9s\9ې*.DRuQ!ʃ ڧ(H(ӀbAK<8:tqlsap%FW1I#)ZqyA~`Z`> ]xD yO/ Π*gHv ]@"OApe[a|m Gh E[k5ԸR72ul4rKpr `_4]]άѸF[(H?LGȆӌYN.-.,݌R0l~IlQy26jyуx*ȣ" 楲CVϙ  AMx" G&" dUEpf#e0O+w8N]JD5|>w4cȕdc(|XdL??ϣd׹2Eyk-hă$y}k0eY'fԧ$8[]6s1܍bcP KGyڃ {aX 5skY,SZoW9Ni_$s\Q= wxbɶ$`EeKUU.|A`G{ B ~) K;㊠-EAS9G?Xue` ZDT˜m?^l™H`4tVkM:!ekp,<{ei1!6 5r/6Jk~u-Gqw|,yDHjZnnn&iTio^Uw5);aHA4re X.q"fhBa m),JX 䞋׫ц{<DUK>KŁR)T߉LG[O?(Sq,w )'YY4nYr>jҜD \aM@Gtr~liS#ojY@d+qA?2wxS gLd31UcHXK [ q,ݤ,+x*?h ' Ԉ8a X+@x<Y QZ$2xt =7f02JO7\ECa/M?w]-1hcO*W*Jt :NKRgՋ{RI}X)Dr#¢舩?yaT)(쥰jZ% Ջ-}fO(>Al~FcJάZ7ԁ˾cpL8ڙm^ a̞`c.L%Mdgn%0ZA7eu%^Rj(i~"K:8Y>+-[?6r VQpeZI"PB.;W;h.nTu13wgN|QEN}']S<3eEtL"[4AB~p-|YܠramP^(v4'ż`=1/idg!Hn!!8e?MKMJ@T&~q=]p˂ t*9U0 c [,+Kr%ݺA/=Ǽ0tbca@#p4μ59/]n\_MiQ#i\9L.H Eh-sCx.ˁúڵP|˦L d,_ k݄j{0xSVz X3ib% Z6"҂i$}NHY@u_gc@.nd;S|8fy?ꛟovk`@!؜o_-eI7C '8?C*F1,x7)]ȟBi2*$|EDR9\3Gxp X C\68 k{"^xm}_r"Lkds$Hgq/Z.E'Y*cs^ڞ DHpv芅O^fֳٔ8&DB2 FV()~'|].Iq4[~T^p3iT`2a3 &ctFZzv@E2`=Z4Ҫhɔjh}Y_Hc2f'+iqjKSӹo< l}ەSo&e pL0;/{#N 5EP]t~՚7b5 Z*fi ]%]6͕_x0 n'Y BB[}ađS׶S.rm)Lk9{+QtT-,BQ|xfˮC= end_column) { return; } tpwincrt_begin_drawing(); int16_t x = (int16_t)(uint16_t)( (uint16_t)(start_column - (int16_t)g_tpwincrt_view_column) * g_tpwincrt_character_width); int16_t y = (int16_t)(uint16_t)( (uint16_t)((int16_t)g_tpwincrt_cursor_row - (int16_t)g_tpwincrt_view_row) * g_tpwincrt_character_height); (void)TextOut16( g_tpwincrt_paint_dc, x, y, tpwincrt_cell_pointer(g_tpwincrt_cursor_row, start_column), (int16_t)(end_column - start_column)); tpwincrt_end_drawing(); } /* * 1008:1a82 -- carriage return/line advance. The binary aliases two locals * in 1b11 through SS:BP; explicit pointers preserve the same updates without * pretending those caller-frame addresses are ordinary Pascal arguments. */ void tpwincrt_advance_line(int16_t *changed_start, int16_t *changed_end) { tpwincrt_draw_row_range(*changed_end, *changed_start); *changed_start = 0; *changed_end = 0; g_tpwincrt_cursor_column = 0; uint16_t next_row = (uint16_t)(g_tpwincrt_cursor_row + 1); if (next_row == g_tpwincrt_rows) { next_row--; g_tpwincrt_ring_row_origin++; if (g_tpwincrt_ring_row_origin == g_tpwincrt_rows) { g_tpwincrt_ring_row_origin = 0; } Win16FarPtr row = tpwincrt_cell_pointer(g_tpwincrt_cursor_row, 0); borland_fill_bytes(row, g_tpwincrt_columns, ' '); (void)ScrollWindow16( g_tpwincrt_window, 0, (INT16)(uint16_t)(0u - g_tpwincrt_character_height), 0, 0); (void)UpdateWindow16(g_tpwincrt_window); } g_tpwincrt_cursor_row = next_row; } /* 1008:1b11 -- write control/printable bytes into the circular text screen. */ void tpwincrt_write_bytes(uint16_t count, Win16FarPtr bytes) { tpwincrt_create_window(); int16_t changed_start = (int16_t)g_tpwincrt_cursor_column; int16_t changed_end = changed_start; while (count != 0) { uint8_t character = win16_read_u8(bytes); if (character >= 0x20) { win16_write_u8( tpwincrt_cell_pointer( g_tpwincrt_cursor_row, (int16_t)g_tpwincrt_cursor_column), character); g_tpwincrt_cursor_column++; if (changed_end < (int16_t)g_tpwincrt_cursor_column) { changed_end = (int16_t)g_tpwincrt_cursor_column; } if (g_tpwincrt_cursor_column == g_tpwincrt_columns) { tpwincrt_advance_line(&changed_start, &changed_end); } } else if (character == '\r') { tpwincrt_advance_line(&changed_start, &changed_end); } else if (character == '\b') { if ((int16_t)g_tpwincrt_cursor_column > 0) { g_tpwincrt_cursor_column--; win16_write_u8( tpwincrt_cell_pointer( g_tpwincrt_cursor_row, (int16_t)g_tpwincrt_cursor_column), ' '); if ((int16_t)g_tpwincrt_cursor_column < changed_start) { changed_start = (int16_t)g_tpwincrt_cursor_column; } } } else if (character == '\a') { (void)MessageBeep16(0); } bytes = win16_far_add_offset(bytes, 1); count--; } tpwincrt_draw_row_range(changed_end, changed_start); if (g_tpwincrt_auto_scroll != 0) { tpwincrt_scroll_cursor_into_view(); } } /* 1008:1be9 -- one-byte stack wrapper around the bulk writer. */ void tpwincrt_write_character(uint8_t character) { uint8_t byte = character; tpwincrt_write_bytes(1, win16_stack_pointer(&byte)); } /* 1008:1c03 -- drain all queued Win16 messages and report input availability. */ bool tpwincrt_poll_input(void) { tpwincrt_create_window(); MSG16 message; while (PeekMessage16(&message, 0, 0, 0, 1)) { if (message.message == 0x0012) { /* WM_QUIT */ tpwincrt_abort_on_ctrl_c(); } (void)TranslateMessage16(&message); (void)DispatchMessage16(&message); } return (int16_t)g_tpwincrt_input_count > 0; } /* 1008:1c5f -- block until one queued character is available, then dequeue it. */ uint8_t tpwincrt_read_character(void) { tpwincrt_scroll_cursor_into_view(); if (!tpwincrt_poll_input()) { g_tpwincrt_caret_enabled = 1; if (g_tpwincrt_has_focus != 0) { tpwincrt_create_caret(); } do { (void)WaitMessage16(); } while (!tpwincrt_poll_input()); if (g_tpwincrt_has_focus != 0) { tpwincrt_destroy_caret(); } g_tpwincrt_caret_enabled = 0; } g_tpwincrt_input_count--; uint8_t character = g_tpwincrt_input_buffer[0]; borland_move_bytes( win16_dgroup_pointer(0x4af8), win16_dgroup_pointer(0x4af9), g_tpwincrt_input_count); return character; } /* 1008:1cc6 -- edited line input with CR/LF and optional Ctrl-Z termination. */ uint16_t tpwincrt_read_line(uint16_t capacity, Win16FarPtr destination) { uint16_t length = 0; uint8_t character; do { character = tpwincrt_read_character(); if (character == '\b') { if (length != 0) { length--; tpwincrt_write_character('\b'); } } else if ( character >= 0x20 && (uint16_t)(capacity - 2) > length) { win16_write_u8( win16_far_add_offset(destination, length), character); length++; tpwincrt_write_character(character); } } while ( character != '\r' && (g_tpwincrt_ctrl_z_is_eof == 0 || character != 0x1a)); win16_write_u8(win16_far_add_offset(destination, length), character); length++; if (character == '\r') { win16_write_u8(win16_far_add_offset(destination, length), '\n'); length++; tpwincrt_write_character('\r'); } tpwincrt_scroll_cursor_into_view(); return length; } /* 1008:22fc -- TextRec output InOutFunc/FlushFunc. */ uint16_t tpwincrt_text_write_buffer(Win16FarPtr record) { uint16_t count = win16_read_u16(win16_far_add_offset(record, 8)); if (count != 0) { tpwincrt_write_bytes(count, win16_read_far_pointer(record, 0x0c)); win16_write_u16(record, 8, 0); (void)tpwincrt_poll_input(); } return 0; } /* 1008:233c -- TextRec input InOutFunc. */ uint16_t tpwincrt_text_read_buffer(Win16FarPtr record) { uint16_t count = tpwincrt_read_line( win16_read_u16(win16_far_add_offset(record, 4)), win16_read_far_pointer(record, 0x0c)); win16_write_u16(record, 0x0a, count); win16_write_u16(record, 8, 0); return 0; } static void write_text_procedure( Win16FarPtr record, uint16_t offset, Win16FarPtr procedure) { win16_write_u16(record, offset, win16_far_offset(procedure)); win16_write_u16( record, (uint16_t)(offset + 2), win16_far_selector(procedure)); } /* 1008:238b -- attach TPWinCrt callbacks to an input or output TextRec. */ uint16_t tpwincrt_open_text_record(Win16FarPtr record) { if (win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_INPUT) { write_text_procedure( record, 0x14, win16_relocated_code_pointer(2, 0x233c)); write_text_procedure(record, 0x18, 0); } else { win16_write_u16(record, 2, BORLAND_FILE_OUTPUT); Win16FarPtr write = win16_relocated_code_pointer(2, 0x22fc); write_text_procedure(record, 0x14, write); write_text_procedure(record, 0x18, write); } write_text_procedure( record, 0x1c, win16_relocated_code_pointer(2, 0x2374)); return 0; } /* * 1008:23fd -- initialize only the fields written by the binary. BufPos, * BufEnd, callbacks other than OpenFunc, and UserData deliberately retain * their prior bytes until Reset/Rewrite invokes 238b. */ void tpwincrt_initialize_text_record(Win16FarPtr record) { win16_write_u16(record, 0, 0xffff); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); win16_write_u16(record, 4, 0x80); Win16FarPtr buffer = win16_far_add_offset(record, 0x80); write_text_procedure(record, 0x0c, buffer); write_text_procedure( record, 0x10, win16_relocated_code_pointer(2, 0x238b)); win16_write_u8(win16_far_add_offset(record, 0x30), 0); } ۷=x(#ifndef TDKPIN_TPWINCRT_TEXT_H #define TDKPIN_TPWINCRT_TEXT_H #include "tdkpin_runtime_ui.h" void tpwincrt_draw_row_range( int16_t end_column, int16_t start_column); /* 1008:1a39 */ void tpwincrt_advance_line( int16_t *changed_start, int16_t *changed_end); /* 1008:1a82 */ void tpwincrt_write_bytes( uint16_t count, Win16FarPtr bytes); /* 1008:1b11 */ void tpwincrt_write_character(uint8_t character); /* 1008:1be9 */ bool tpwincrt_poll_input(void); /* 1008:1c03 */ uint8_t tpwincrt_read_character(void); /* 1008:1c5f */ uint16_t tpwincrt_read_line( uint16_t capacity, Win16FarPtr destination); /* 1008:1cc6 */ uint16_t tpwincrt_text_write_buffer(Win16FarPtr record); /* 1008:22fc */ uint16_t tpwincrt_text_read_buffer(Win16FarPtr record); /* 1008:233c */ uint16_t tpwincrt_open_text_record(Win16FarPtr record); /* 1008:238b */ void tpwincrt_initialize_text_record(Win16FarPtr record); /* 1008:23fd */ void tpwincrt_create_window(void); /* 1008:2442 */ #endif 0) { break; } } while (g_current_player != previous_player); if ((int16_t)win16_read_u16( player_marker_count(g_current_player)) < 1) { g_current_player = 0; tdkpin_set_gameplay_transition_flags(caller_bp); if (win16_read_u8(win16_dgroup_pointer(0x07d2)) == 0) { win16_write_u8(win16_far_add_offset(receiver, 0x0bda), 0); win16_write_u8(win16_far_add_offset(receiver, 0x0bdb), 0); tdkpin_show_highscore_windows(caller_bp); } return; } load_next_collision_mirrors(caller_bp, receiver, previous_player); for (uint16_t item = 1; item <= 20; item++) { if (g_current_player != previous_player) { tdkpin_refresh_player_item(caller_bp, item); } } uint8_t ready = win16_read_u8(win16_dgroup_pointer((uint16_t)( 0x0816 + (uint16_t)g_current_player))); for (uint16_t item = 2; item <= 6; item++) { if (item <= ready) { tdkpin_restore_record_or_item_a( caller_bp, (uint16_t)(item + 999u)); } } refresh_changed_player_ui(receiver, previous_player); tdkpin_redraw_all_players(caller_bp); Win16FarPtr markers = player_marker_count(g_current_player); win16_write_u16( markers, 0, (uint16_t)(win16_read_u16(markers) - 1u)); tdkpin_reset_ball_state(caller_bp); HWND16 window = win16_read_u16(win16_far_add_offset(receiver, 4)); HDC16 dc = GetDC16(window); tdkpin_restore_background_region_b(20, 148, 243, 84, dc); tdkpin_present_background_region(20, 148, 243, 84, dc); (void)ReleaseDC16(window, dc); tdkpin_refresh_player_progress_markers(caller_bp); } /* 1000:ae6e -- complete ball-end and player-advance state machine. */ void tdkpin_finish_ball_or_advance_player(uint16_t caller_bp) { Win16FarPtr receiver = caller_receiver(caller_bp); if (win16_read_u8(win16_dgroup_pointer(0x0874)) == 0 && win16_read_u16(win16_dgroup_pointer(0x399a)) != 0) { special_respawn(caller_bp, receiver); } else { normal_ball_end(caller_bp, receiver); } } =x#ifndef TDKPIN_TURN_STATE_H #define TDKPIN_TURN_STATE_H #include "tdkpin_highscores.h" #include "tdkpin_player_state.h" #include "tdkpin_real48.h" void tdkpin_finish_ball_or_advance_player( uint16_t caller_bp); /* 1000:ae6e */ #endif ?OxP7#ifndef TDKPIN_WIN16_H #define TDKPIN_WIN16_H #include /* * Source-level Win16 model used by the readable reconstruction. * Handles and scalar API arguments are 16-bit. A segmented far pointer is * stored as offset:selector in one 32-bit value, matching the NE image and * Borland stack representation rather than a host pointer. */ typedef uint16_t Win16Handle; typedef uint16_t HBRUSH16; typedef uint16_t HBITMAP16; typedef uint16_t HDC16; typedef uint16_t HGDIOBJ16; typedef uint16_t HGLOBAL16; typedef uint16_t HCURSOR16; typedef uint16_t HICON16; typedef uint16_t HINSTANCE16; typedef uint16_t HPALETTE16; typedef uint16_t HRSRC16; typedef uint16_t HACCEL16; typedef uint16_t HMENU16; typedef uint16_t HWND16; typedef uint16_t WPARAM16; typedef uint16_t UINT16; typedef int16_t BOOL16; typedef int16_t INT16; typedef int16_t HFILE16; typedef int32_t LPARAM16; typedef int32_t LRESULT16; typedef uint32_t Win16FarPtr; typedef uint32_t COLORREF16; #pragma pack(push, 1) typedef struct { INT16 left; INT16 top; INT16 right; INT16 bottom; } RECT16; typedef struct { HDC16 dc; BOOL16 erase; RECT16 paint; BOOL16 restore; BOOL16 incremental_update; uint8_t reserved[16]; } PAINTSTRUCT16; typedef struct { INT16 x; INT16 y; } POINT16; typedef struct { HWND16 window; UINT16 message; WPARAM16 wparam; LPARAM16 lparam; uint32_t time; POINT16 point; } MSG16; typedef struct { POINT16 reserved; POINT16 maximum_size; POINT16 maximum_position; POINT16 minimum_track_size; POINT16 maximum_track_size; } MINMAXINFO16; typedef struct { Win16FarPtr class_name; Win16FarPtr title; HINSTANCE16 owner; INT16 x; INT16 y; INT16 width; INT16 height; uint32_t style; LPARAM16 parameter; } MDICREATESTRUCT16; typedef struct { INT16 height; INT16 ascent; INT16 descent; INT16 internal_leading; INT16 external_leading; INT16 average_character_width; INT16 maximum_character_width; INT16 weight; uint8_t italic; uint8_t underlined; uint8_t struck_out; uint8_t first_character; uint8_t last_character; uint8_t default_character; uint8_t break_character; uint8_t pitch_and_family; uint8_t character_set; INT16 overhang; INT16 digitized_aspect_x; INT16 digitized_aspect_y; } TEXTMETRIC16; /* Windows 3.1 packed layout passed by TDKPIN to waveOutGetDevCaps. */ typedef struct { UINT16 manufacturer_id; UINT16 product_id; UINT16 driver_version; char product_name[32]; uint32_t formats; UINT16 channels; uint32_t support; } WAVEOUTCAPS16; #pragma pack(pop) _Static_assert(sizeof(RECT16) == 8, "Win16 RECT layout drift"); _Static_assert(sizeof(PAINTSTRUCT16) == 32, "Win16 PAINTSTRUCT layout drift"); _Static_assert(sizeof(POINT16) == 4, "Win16 POINT layout drift"); _Static_assert(sizeof(MSG16) == 18, "Win16 MSG layout drift"); _Static_assert(sizeof(MINMAXINFO16) == 20, "Win16 MINMAXINFO layout drift"); _Static_assert(sizeof(MDICREATESTRUCT16) == 26, "Win16 MDICREATESTRUCT layout drift"); _Static_assert(sizeof(TEXTMETRIC16) == 31, "Win16 TEXTMETRIC layout drift"); _Static_assert(sizeof(WAVEOUTCAPS16) == 48, "Win16 WAVEOUTCAPS layout drift"); static inline uint16_t win16_far_offset(Win16FarPtr pointer) { return (uint16_t)pointer; } static inline uint16_t win16_far_selector(Win16FarPtr pointer) { return (uint16_t)(pointer >> 16); } static inline Win16FarPtr win16_make_far_pointer(uint16_t selector, uint16_t offset) { return ((uint32_t)selector << 16) | offset; } static inline Win16FarPtr win16_far_add_offset(Win16FarPtr pointer, uint16_t delta) { return win16_make_far_pointer( win16_far_selector(pointer), (uint16_t)(win16_far_offset(pointer) + delta)); } #pragma pack(push, 1) typedef struct { UINT16 style; Win16FarPtr window_proc; INT16 class_extra_bytes; INT16 window_extra_bytes; HINSTANCE16 instance; HICON16 icon; HCURSOR16 cursor; HBRUSH16 background_brush; Win16FarPtr menu_name; Win16FarPtr class_name; } WNDCLASS16; #pragma pack(pop) _Static_assert(sizeof(WNDCLASS16) == 26, "Win16 WNDCLASS layout drift"); enum Win16WindowMessage { WIN16_WM_CREATE = 0x0001, WIN16_WM_DESTROY = 0x0002, WIN16_WM_SIZE = 0x0005, WIN16_WM_SETFOCUS = 0x0007, WIN16_WM_KILLFOCUS = 0x0008, WIN16_WM_PAINT = 0x000f, WIN16_WM_GETMINMAXINFO = 0x0024, WIN16_WM_KEYDOWN = 0x0100, WIN16_WM_CHAR = 0x0102, WIN16_WM_HSCROLL = 0x0114, WIN16_WM_VSCROLL = 0x0115, }; /* USER ordinal 107, Wine 11.15 user.exe16.spec. */ LRESULT16 DefWindowProc16(HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); INT16 MessageBox16( HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type); void PostQuitMessage16(INT16 exit_code); BOOL16 CreateCaret16(HWND16 window, HBITMAP16 bitmap, INT16 width, INT16 height); BOOL16 DestroyCaret16(void); BOOL16 SetCaretPos16(INT16 x, INT16 y); BOOL16 ShowCaret16(HWND16 window); INT16 SetScrollPos16(HWND16 window, INT16 bar, INT16 position, BOOL16 redraw); BOOL16 SetScrollRange16( HWND16 window, INT16 bar, INT16 minimum, INT16 maximum, BOOL16 redraw); BOOL16 ScrollWindow16( HWND16 window, INT16 delta_x, INT16 delta_y, Win16FarPtr scroll_rect, Win16FarPtr clip_rect); BOOL16 UpdateWindow16(HWND16 window); BOOL16 GetClientRect16(HWND16 window, Win16FarPtr rectangle); BOOL16 InvalidateRect16( HWND16 window, Win16FarPtr rectangle, BOOL16 erase); INT16 GetKeyState16(INT16 virtual_key); HMENU16 GetSystemMenu16(HWND16 window, BOOL16 revert); BOOL16 EnableMenuItem16(HMENU16 menu, UINT16 item, UINT16 flags); HDC16 GetDC16(HWND16 window); INT16 ReleaseDC16(HWND16 window, HDC16 dc); HDC16 BeginPaint16(HWND16 window, Win16FarPtr paint); BOOL16 EndPaint16(HWND16 window, Win16FarPtr paint); HGDIOBJ16 GetStockObject16(INT16 object); HPALETTE16 CreatePalette16(Win16FarPtr logical_palette); HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background); UINT16 RealizePalette16(HDC16 dc); BOOL16 UpdateColors16(HDC16 dc); BOOL16 UnrealizeObject16(HGDIOBJ16 object); BOOL16 DeleteObject16(HGDIOBJ16 object); BOOL16 DeleteDC16(HDC16 dc); HDC16 CreateDC16( Win16FarPtr driver, Win16FarPtr device, Win16FarPtr output, Win16FarPtr initialization_data); HBITMAP16 CreateDIBitmap16( HDC16 dc, Win16FarPtr header, uint32_t initialization, Win16FarPtr bits, Win16FarPtr bitmap_info, UINT16 color_usage); HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object); HDC16 CreateCompatibleDC16(HDC16 dc); HBITMAP16 CreateCompatibleBitmap16( HDC16 dc, INT16 width, INT16 height); BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation); COLORREF16 GetSysColor16(INT16 index); COLORREF16 SetTextColor16(HDC16 dc, COLORREF16 color); COLORREF16 GetTextColor16(HDC16 dc); UINT16 SetTextAlign16(HDC16 dc, UINT16 alignment); INT16 SetBkMode16(HDC16 dc, INT16 mode); COLORREF16 SetBkColor16(HDC16 dc, COLORREF16 color); BOOL16 TextOut16( HDC16 dc, INT16 x, INT16 y, Win16FarPtr text, INT16 character_count); BOOL16 GetTextMetrics16(HDC16 dc, Win16FarPtr metrics); INT16 GetSystemMetrics16(INT16 index); uint32_t GetTickCount16(void); HFILE16 LCreate16(Win16FarPtr file_name, INT16 attributes); HFILE16 LOpen16(Win16FarPtr file_name, INT16 mode); UINT16 LRead16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count); UINT16 LWrite16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count); HFILE16 LClose16(HFILE16 file); HGLOBAL16 GlobalAlloc16(UINT16 flags, uint32_t bytes); Win16FarPtr GlobalLock16(HGLOBAL16 allocation); HGLOBAL16 GlobalHandle16(uint16_t selector); BOOL16 GlobalUnlock16(HGLOBAL16 allocation); HGLOBAL16 GlobalFree16(HGLOBAL16 allocation); HRSRC16 FindResource16( HINSTANCE16 instance, Win16FarPtr name, Win16FarPtr type); HGLOBAL16 LoadResource16(HINSTANCE16 instance, HRSRC16 resource); Win16FarPtr LockResource16(HGLOBAL16 resource); BOOL16 FreeResource16(HGLOBAL16 resource); UINT16 GetPrivateProfileInt16( Win16FarPtr section, Win16FarPtr key, INT16 default_value, Win16FarPtr file_name); UINT16 WaveOutGetNumDevs16(void); UINT16 WaveOutGetDevCaps16( UINT16 device_id, Win16FarPtr capabilities, UINT16 byte_count); UINT16 WaveOutGetVolume16(UINT16 device_id, Win16FarPtr volume); uint16_t TimeKillEvent16(uint16_t timer_id); uint16_t SystemTimerMake16( HWND16 recipient, uint16_t delay_ms, uint16_t resolution_ms, uint16_t one_shot); uint16_t AllocCStoDSAlias16(uint16_t code_selector); uint16_t FreeSelector16(uint16_t selector); uint16_t PrestoChangoSelector16( uint16_t source_selector, uint16_t destination_selector); Win16FarPtr MakeProcInstance16( Win16FarPtr procedure, HINSTANCE16 instance); void FreeProcInstance16(Win16FarPtr procedure); BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message); BOOL16 WaitMessage16(void); BOOL16 GetMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message); BOOL16 TranslateMessage16(const MSG16 *message); LRESULT16 DispatchMessage16(const MSG16 *message); BOOL16 IsDialogMessage16(HWND16 dialog, MSG16 *message); INT16 TranslateAccelerator16( HWND16 window, HACCEL16 accelerator, MSG16 *message); BOOL16 TranslateMDISysAccel16(HWND16 client, MSG16 *message); BOOL16 ShowWindow16(HWND16 window, INT16 command); int32_t GetWindowLong16(HWND16 window, INT16 index); HWND16 GetDlgItem16(HWND16 dialog, INT16 control_id); LRESULT16 SendMessage16( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); HWND16 GetFocus16(void); HWND16 GetParent16(HWND16 window); uint16_t GetWindowWord16(HWND16 window, INT16 index); BOOL16 DestroyWindow16(HWND16 window); BOOL16 IsChild16(HWND16 parent, HWND16 child); BOOL16 IsIconic16(HWND16 window); BOOL16 IsZoomed16(HWND16 window); BOOL16 IsWindow16(HWND16 window); HWND16 SetFocus16(HWND16 window); HWND16 SetCapture16(HWND16 window); BOOL16 ReleaseCapture16(void); BOOL16 GetWindowRect16(HWND16 window, Win16FarPtr rectangle); BOOL16 ScreenToClient16(HWND16 window, Win16FarPtr point); INT16 GetWindowText16(HWND16 window, char *text, INT16 maximum); BOOL16 SetWindowText16(HWND16 window, const char *text); BOOL16 SetWindowTextFar16(HWND16 window, Win16FarPtr text); BOOL16 SetDlgItemText16( HWND16 dialog, INT16 control_id, Win16FarPtr text); LRESULT16 SendDlgItemMessage16( HWND16 dialog, INT16 control_id, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); HWND16 CreateWindow16( Win16FarPtr class_name, Win16FarPtr window_name, uint32_t style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, Win16FarPtr parameter); HWND16 CreateWindowEx16( uint32_t extended_style, Win16FarPtr class_name, Win16FarPtr window_name, uint32_t style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, Win16FarPtr parameter); int32_t SetWindowLong16(HWND16 window, INT16 index, int32_t value); Win16FarPtr win16_def_window_proc_pointer(void); Win16FarPtr win16_def_mdi_child_proc_pointer(void); LRESULT16 CallWindowProc16( Win16FarPtr procedure, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam); BOOL16 GetClassInfo16( HINSTANCE16 instance, Win16FarPtr class_name, WNDCLASS16 *window_class); uint16_t RegisterClass16(const WNDCLASS16 *window_class); BOOL16 EndDialog16(HWND16 dialog, INT16 result); HICON16 LoadIcon16(HINSTANCE16 instance, Win16FarPtr resource); HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource); HBITMAP16 LoadBitmap16(HINSTANCE16 instance, Win16FarPtr resource); HCURSOR16 SetCursor16(HCURSOR16 cursor); UINT16 GetDlgItemTextFar16( HWND16 dialog, INT16 control_id, Win16FarPtr buffer, INT16 maximum); INT16 AnsiToOem16(Win16FarPtr source, Win16FarPtr destination); INT16 OemToAnsi16(Win16FarPtr source, Win16FarPtr destination); BOOL16 MessageBeep16(UINT16 type); INT16 wvsprintf16( char *output, const char *format, const uint16_t *arguments); INT16 win16_call_message_box( Win16FarPtr procedure, HWND16 owner, const char *text, const char *caption, UINT16 type); INT16 win16_call_message_box_far( Win16FarPtr procedure, HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type); HWND16 win16_call_create_dialog_param( Win16FarPtr procedure, HINSTANCE16 instance, Win16FarPtr template_name, HWND16 parent, Win16FarPtr dialog_proc, LPARAM16 init_parameter); INT16 win16_call_dialog_box_param( Win16FarPtr procedure, HINSTANCE16 instance, Win16FarPtr template_name, HWND16 parent, Win16FarPtr dialog_proc, LPARAM16 init_parameter); UINT16 SetErrorMode16(UINT16 mode); HINSTANCE16 LoadLibrary16(const char *library_name); Win16FarPtr GetProcAddress16( HINSTANCE16 module, const char *procedure_name); UINT16 GetWindowsDirectory16(char *buffer, UINT16 size); UINT16 GetWindowsDirectoryFar16(Win16FarPtr buffer, UINT16 size); UINT16 GetSystemDirectory16(char *buffer, UINT16 size); UINT16 GetSystemDirectoryFar16(Win16FarPtr buffer, UINT16 size); HINSTANCE16 GetModuleHandle16(Win16FarPtr module_name); UINT16 GetModuleFileName16( HINSTANCE16 module, char *buffer, UINT16 size); UINT16 GetModuleFileNameFar16( HINSTANCE16 module, Win16FarPtr buffer, UINT16 size); uint32_t GetFreeSpace16(UINT16 flags); uint32_t GlobalCompact16(uint32_t requested_bytes); BOOL16 FreeLibrary16(HINSTANCE16 module); Win16Handle GetCurrentTask16(void); uint32_t GetVersion16(void); Win16FarPtr GetDOSEnvironment16(void); void WaitEvent16(uint16_t event); uint16_t InitApp16(HINSTANCE16 instance); uint32_t GetWinFlags16(void); #endif $xU /* Derived ObjectWindows window destruction chains used by TDKPIN. */ #include "tdkpin_window_lifecycle.h" #include "tdkpin_strings.h" enum { WINDOW_TITLE_OFFSET = 0x1d, WINDOW_ATTACHED_OBJECT_OFFSET = 0x3b, OVERLAY_PEER_OFFSET = 0x41, DGROUP_OVERLAY_BITMAP = 0x0867, }; static void write_far( Win16FarPtr object, uint16_t offset, Win16FarPtr value) { win16_write_u32(object, offset, value); } /* * 1018:121b — destroy TWindow-owned title and attached object before chaining * into TObjectWindow and the caller's hidden ownership cleanup. */ void object_windows_window_destruct( Win16FarPtr window, uint16_t vmt) { borland_far_strdispose( win16_read_far_pointer(window, WINDOW_TITLE_OFFSET)); Win16FarPtr attached = win16_read_far_pointer(window, WINDOW_ATTACHED_OBJECT_OFFSET); if (attached != 0) { borland_dispose_object(attached); write_far(window, WINDOW_ATTACHED_OBJECT_OFFSET, 0); } object_windows_object_destruct(window, 0); BorlandObjectCallFrame frame = {window, vmt}; borland_finish_object_destructor(&frame, 0); } /* * 1000:5ba6 — delete DAT-993 overlay bitmap, break the reciprocal +41 peer * links, then run the ordinary TWindow and derived Borland destructor exits. */ void tdkpin_overlay_window_destruct( Win16FarPtr window, uint16_t vmt) { HBITMAP16 bitmap = win16_read_u16( win16_dgroup_pointer(DGROUP_OVERLAY_BITMAP)); (void)DeleteObject16(bitmap); Win16FarPtr peer = win16_read_far_pointer(window, OVERLAY_PEER_OFFSET); write_far(peer, OVERLAY_PEER_OFFSET, 0); write_far(window, OVERLAY_PEER_OFFSET, 0); object_windows_window_destruct(window, 0); BorlandObjectCallFrame frame = {window, vmt}; borland_finish_object_destructor(&frame, 0); } /* 1000:60e7 — reciprocal board peer uses its +45 field for this window. */ void tdkpin_board_window_destruct( Win16FarPtr window, uint16_t vmt) { Win16FarPtr peer = win16_read_far_pointer(window, OVERLAY_PEER_OFFSET); write_far(peer, 0x45, 0); write_far(window, OVERLAY_PEER_OFFSET, 0); HBITMAP16 bitmap = win16_read_u16( win16_dgroup_pointer(DGROUP_OVERLAY_BITMAP)); (void)DeleteObject16(bitmap); object_windows_window_destruct(window, 0); BorlandObjectCallFrame frame = {window, vmt}; borland_finish_object_destructor(&frame, 0); } xn#ifndef TDKPIN_WINDOW_LIFECYCLE_H #define TDKPIN_WINDOW_LIFECYCLE_H #include "tdkpin_object_lifecycle.h" void object_windows_window_destruct( Win16FarPtr window, uint16_t vmt); /* 1018:121b */ void tdkpin_overlay_window_destruct( Win16FarPtr window, uint16_t vmt); /* 1000:5ba6 */ void tdkpin_board_window_destruct( Win16FarPtr window, uint16_t vmt); /* 1000:60e7 */ #endif K~鸆 xhh/* ObjectWindows dynamic handlers from message table 1028:05cc. */ #include "tdkpin_window_messages.h" #include "tdkpin_object_list.h" enum { OBJECT_VMT_OFFSET = 0, OBJECT_STATUS_OFFSET = 2, OBJECT_WINDOW_HANDLE_OFFSET = 4, OBJECT_FLAGS_OFFSET = 0x16, OBJECT_PARENT_OFFSET = 6, WINDOW_DEFAULT_HANDLER_SLOT = 0x0c, WINDOW_MESSAGE_0014_SLOT = 0x10, WINDOW_CAN_CLOSE_SLOT = 0x3c, WINDOW_SCROLL_HANDLER_SLOT = 0x48, APPLICATION_MAIN_WINDOW_OFFSET = 8, APPLICATION_CAN_CLOSE_SLOT = 0x44, WIN16_GWL_STYLE = -16, WIN16_WS_HSCROLL_HIGH = 0x0010, WIN16_WS_VSCROLL_HIGH = 0x0020, WIN16_WM_GETDLGCODE = 0x0087, WIN16_WM_COMMAND = 0x0111, WIN16_DLGC_BUTTON_MASK = 0x0030, WIN16_GWW_ID = -12, DGROUP_TURBO_WINDOW_CLASS_NAME = 0x068c, CHILD_WINDOWED_CALLBACK_OFFSET = 0x0cc7, WINDOW_MDI_CLIENT_SLOT = 0x30, WIN16_WM_MDIDESTROY = 0x0221, WINDOW_SAVED_FOCUS_OFFSET = 0x3f, WINDOW_ATTACHED_OBJECT_OFFSET = 0x3b, WINDOW_WIDTH_OFFSET = 0x2d, WINDOW_HEIGHT_OFFSET = 0x2f, WIN16_WM_LBUTTONUP = 0x0202, }; static Win16FarPtr object_vmt_procedure( Win16FarPtr object, uint16_t slot) { uint16_t vmt = win16_read_u16( win16_far_add_offset(object, OBJECT_VMT_OFFSET)); return win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); } static Win16FarPtr application_main_window(void) { return win16_read_far_pointer( g_object_windows_application, APPLICATION_MAIN_WINDOW_OFFSET); } static void call_default_handler( Win16FarPtr window, ObjectWindowsMessage *message) { win16_call_object_message_handler( object_vmt_procedure(window, WINDOW_DEFAULT_HANDLER_SLOT), window, message); } static Win16FarPtr attached_object(Win16FarPtr window) { return win16_read_far_pointer(window, WINDOW_ATTACHED_OBJECT_OFFSET); } static void dispatch_attached_scroll( Win16FarPtr window, ObjectWindowsMessage *message, uint32_t required_style, uint16_t attached_slot) { HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); uint32_t style = (uint32_t)GetWindowLong16(handle, WIN16_GWL_STYLE); if ((style & required_style) == 0) { win16_call_object_message_handler( object_vmt_procedure(window, WINDOW_SCROLL_HANDLER_SLOT), window, message); return; } Win16FarPtr attached = attached_object(window); if (attached == 0) { call_default_handler(window, message); return; } win16_call_object_scroll_method( object_vmt_procedure(attached, attached_slot), attached, (uint16_t)message->lparam, message->wparam); } /* 1018:1788 -- horizontal scrolling with optional attached controller. */ void object_windows_wm_hscroll_attached( Win16FarPtr window, ObjectWindowsMessage *message) { dispatch_attached_scroll( window, message, 0x00100000u, 0x20); } /* 1018:17f8 -- vertical scrolling with optional attached controller. */ void object_windows_wm_vscroll_attached( Win16FarPtr window, ObjectWindowsMessage *message) { dispatch_attached_scroll( window, message, 0x00200000u, 0x1c); } /* * 1018:1868 -- BeginPaint/EndPaint lifetime around attached +14/+18 and window * +4c virtuals. All three receive the same 32-byte PAINTSTRUCT16 stack object. */ void object_windows_wm_paint_attached( Win16FarPtr window, ObjectWindowsMessage *message) { (void)message; PAINTSTRUCT16 paint; HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); (void)BeginPaint16(handle, win16_stack_pointer(&paint)); Win16FarPtr attached = attached_object(window); if (attached != 0) { win16_call_object_paint_method( object_vmt_procedure(attached, 0x14), attached, &paint, paint.dc); } win16_call_object_paint_method( object_vmt_procedure(window, 0x4c), window, &paint, paint.dc); if (attached != 0) { win16_call_object_method( object_vmt_procedure(attached, 0x18), attached); } (void)EndPaint16(handle, win16_stack_pointer(&paint)); } /* 1018:18e9 -- attached resize notification and cached outer dimensions. */ void object_windows_wm_size_attached( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr attached = attached_object(window); if (attached != 0 && message->wparam != 1) { win16_call_object_method( object_vmt_procedure(attached, 0x0c), attached); } if (message->wparam == 0) { RECT16 rectangle; HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); (void)GetWindowRect16(handle, win16_stack_pointer(&rectangle)); win16_write_u16( window, WINDOW_WIDTH_OFFSET, (uint16_t)(rectangle.right - rectangle.left)); win16_write_u16( window, WINDOW_HEIGHT_OFFSET, (uint16_t)(rectangle.bottom - rectangle.top)); } call_default_handler(window, message); } /* * 1018:1986 -- attached mouse tracking. The original keeps the last/unfilled * MSG contents when PeekMessage is false, so the initial message id is made an * explicit indeterminate word instead of invoking undefined host-C behavior. */ void object_windows_track_mouse_until_button_up( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr attached = attached_object(window); if (attached != 0 && win16_read_u8(win16_far_add_offset(attached, 0x22)) != 0) { HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); (void)SetCapture16(handle); MSG16 queued = {.message = win16_indeterminate_u16()}; do { if (PeekMessage16(&queued, 0, 0, 0, 1) != 0) { (void)TranslateMessage16(&queued); (void)DispatchMessage16(&queued); } win16_call_object_u16_method( object_vmt_procedure(attached, 0x24), attached, handle); } while (queued.message != WIN16_WM_LBUTTONUP); (void)ReleaseCapture16(); } call_default_handler(window, message); } /* 1018:0673 — AL=1 exactly when every requested bit is set at object +0x16. */ bool object_windows_has_flags(Win16FarPtr object, uint8_t mask) { uint8_t flags = win16_read_u8( win16_far_add_offset(object, OBJECT_FLAGS_OFFSET)); return (flags & mask) == mask; } /* 1018:05dc — inherited virtual default returning AX=0. */ uint16_t object_windows_zero_word_default(Win16FarPtr object) { (void)object; return 0; } /* 1018:0641 — set or clear a mask in the packed object flag byte at +0x16. */ void object_windows_update_flags( Win16FarPtr object, bool set, uint8_t mask) { Win16FarPtr address = win16_far_add_offset(object, OBJECT_FLAGS_OFFSET); uint8_t flags = win16_read_u8(address); win16_write_u8(address, set ? (uint8_t)(flags | mask) : (uint8_t)(flags & (uint8_t)~mask)); } /* 1018:05f3, 060d, 0627 — fixed-mask compiler wrappers. */ void object_windows_set_flag_1(Win16FarPtr object) { object_windows_update_flags(object, true, 1); } void object_windows_set_flag_4(Win16FarPtr object) { object_windows_update_flags(object, true, 4); } void object_windows_clear_flag_4(Win16FarPtr object) { object_windows_update_flags(object, false, 4); } /* 1018:0f38 — ask the appropriate CanClose virtual and dispose on approval. */ void object_windows_close_if_allowed(Win16FarPtr window) { bool allowed; if (window == application_main_window()) { allowed = win16_call_object_bool_method( object_vmt_procedure( g_object_windows_application, APPLICATION_CAN_CLOSE_SLOT), g_object_windows_application); } else { allowed = win16_call_object_bool_method( object_vmt_procedure(window, WINDOW_CAN_CLOSE_SLOT), window); } if (allowed) { borland_dispose_object(window); } } /* 1018:0f22 — dynamic id 0x0010 (WM_CLOSE). */ void object_windows_wm_close( Win16FarPtr window, ObjectWindowsMessage *message) { (void)message; object_windows_close_if_allowed(window); } /* 1018:0f8d — dynamic id 0x0002 (WM_DESTROY). */ void object_windows_wm_destroy( Win16FarPtr window, ObjectWindowsMessage *message) { if (window == application_main_window()) { PostQuitMessage16(win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET))); } call_default_handler(window, message); } /* 1018:0fcc — dynamic id 0x0082 (WM_NCDESTROY). */ void object_windows_wm_nc_destroy( Win16FarPtr window, ObjectWindowsMessage *message) { HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); object_windows_unbind_window(handle); call_default_handler(window, message); win16_write_u16(window, OBJECT_WINDOW_HANDLE_OFFSET, 0); } /* 1018:0ffd — dynamic id 0x0006 (WM_ACTIVATE). */ void object_windows_wm_activate( Win16FarPtr window, ObjectWindowsMessage *message) { call_default_handler(window, message); if (message->wparam == 0) { return; } Win16FarPtr active = object_windows_has_flags(window, 1) ? window : 0; object_windows_application_set_active_dialog( g_object_windows_application, active); } /* 1018:1054 — dynamic id 0x0011 (WM_QUERYENDSESSION). */ void object_windows_wm_query_end_session( Win16FarPtr window, ObjectWindowsMessage *message) { bool allowed; if (window == application_main_window()) { allowed = win16_call_object_bool_method( object_vmt_procedure( g_object_windows_application, APPLICATION_CAN_CLOSE_SLOT), g_object_windows_application); } else { allowed = win16_call_object_bool_method( object_vmt_procedure(window, WINDOW_CAN_CLOSE_SLOT), window); } message->result = allowed ? 1 : 0; } /* * 1018:10aa — dynamic id 0x0014. The numeric id and exact behavior are kept * explicit because a stronger source-level OWL method name is not encoded. */ void object_windows_message_0014( Win16FarPtr window, ObjectWindowsMessage *message) { if (window == application_main_window()) { object_windows_close_if_allowed(window); return; } win16_call_object_message_handler( object_vmt_procedure(window, WINDOW_MESSAGE_0014_SLOT), window, message); } static void dispatch_scroll_message( Win16FarPtr window, ObjectWindowsMessage *message, uint16_t style_high_mask) { uint32_t style = (uint32_t)GetWindowLong16( win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)), WIN16_GWL_STYLE); uint16_t style_high = (uint16_t)(style >> 16); uint16_t slot = (style_high & style_high_mask) == 0 ? WINDOW_SCROLL_HANDLER_SLOT : WINDOW_DEFAULT_HANDLER_SLOT; win16_call_object_message_handler( object_vmt_procedure(window, slot), window, message); } /* 1018:0b6c — dynamic id 0x0114 (WM_HSCROLL). */ void object_windows_wm_hscroll( Win16FarPtr window, ObjectWindowsMessage *message) { dispatch_scroll_message( window, message, WIN16_WS_HSCROLL_HIGH); } /* 1018:0b25 — dynamic id 0x0115 (WM_VSCROLL). */ void object_windows_wm_vscroll( Win16FarPtr window, ObjectWindowsMessage *message) { dispatch_scroll_message( window, message, WIN16_WS_VSCROLL_HIGH); } /* * 1018:08f0 — dynamic id 0x0111 (WM_COMMAND). * * Win16 encodes the command id in WPARAM, a control HWND in LOWORD(LPARAM), * and the notification in HIWORD(LPARAM). ObjectWindows maps three numeric * bands into dynamic ids by 16-bit subtraction: command-0x6000, * control-0x8000, and notification-0x7000. */ void object_windows_wm_command( Win16FarPtr window, ObjectWindowsMessage *message) { uint16_t control_window = (uint16_t)message->lparam; uint16_t notification = (uint16_t)((uint32_t)message->lparam >> 16); if (object_windows_has_flags(window, 1) && control_window == 0 && notification == 0) { HWND16 dialog = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); HWND16 control = GetDlgItem16(dialog, (INT16)message->wparam); if (control != 0 && (((uint16_t)SendMessage16( control, WIN16_WM_GETDLGCODE, 0, 0) & WIN16_DLGC_BUTTON_MASK) != 0)) { control_window = control; message->lparam = (LPARAM16)control; } } if (control_window == 0) { if (message->wparam < 0x6000) { HWND16 focus = GetFocus16(); Win16FarPtr target = object_windows_object_from_window(focus); HWND16 owner = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); while (target == 0 && focus != 0 && focus != owner) { focus = GetParent16(focus); target = object_windows_object_from_window(focus); } if (target == 0) { target = window; } object_windows_dispatch_event( 0x10, (uint16_t)(message->wparam - 0x6000u), win16_stack_pointer(message), target); return; } call_default_handler(window, message); return; } HWND16 owner = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); HWND16 child_window = GetDlgItem16(owner, (INT16)message->wparam); Win16FarPtr child = object_windows_object_from_window(child_window); if (child != 0 && notification < 0x1000) { object_windows_dispatch_event( 0x18, (uint16_t)(notification - 0x7000u), win16_stack_pointer(message), child); return; } if (message->wparam < 0x1000) { object_windows_dispatch_event( 0x14, (uint16_t)(message->wparam - 0x8000u), win16_stack_pointer(message), window); return; } win16_call_object_message_handler( object_vmt_procedure(window, 0x14), window, message); } /* 1018:0d6a — shared TWindow VMT +0x2c class-name provider. */ Win16FarPtr object_windows_turbo_window_class_name(Win16FarPtr window) { (void)window; return win16_dgroup_pointer(DGROUP_TURBO_WINDOW_CLASS_NAME); } /* * 1018:0a85 — VMT +0x48 shared by WM_HSCROLL/WM_VSCROLL. * HIWORD(LPARAM) identifies the control window. Bound controls dispatch their * notification as id-0x7000; native controls use GWW_ID and id-0x8000. */ void object_windows_route_scroll_notification( Win16FarPtr window, ObjectWindowsMessage *message) { HWND16 control = (HWND16)((uint32_t)message->lparam >> 16); if (control == 0) { call_default_handler(window, message); return; } Win16FarPtr child = object_windows_object_from_window(control); if (child != 0) { object_windows_dispatch_event( 0x18, (uint16_t)(message->wparam - 0x7000u), win16_stack_pointer(message), child); return; } uint16_t control_id = GetWindowWord16(control, WIN16_GWW_ID); if (control_id < 0x1000) { object_windows_dispatch_event( 0x14, (uint16_t)(control_id - 0x8000u), win16_stack_pointer(message), window); return; } win16_call_object_message_handler( object_vmt_procedure(window, 0x14), window, message); } /* * 1018:0bb3 — select a command target from the event HWND, explicit parent * object (+6/+8), or HWND property lookup. A missing/self target falls back to * the current window's VMT +0x0c; otherwise id WPARAM-0x6000 is dispatched. */ void object_windows_route_command_target( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr target = 0; HWND16 own_window = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); if (message->window != own_window) { target = win16_read_far_pointer(window, OBJECT_PARENT_OFFSET); if (target == 0) { target = object_windows_object_from_window(message->window); } } if (target == 0) { call_default_handler(window, message); return; } object_windows_dispatch_event( 0x10, (uint16_t)(message->wparam - 0x6000u), win16_stack_pointer(message), target); } /* * 1018:0c59 — forward to the explicit parent object. WM_COMMAND uses WPARAM; * every other message derives the dynamic id from this window's GWW_ID. */ void object_windows_forward_event_to_parent( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr parent = win16_read_far_pointer(window, OBJECT_PARENT_OFFSET); if (parent == 0) { return; } uint16_t id = message->message == WIN16_WM_COMMAND ? message->wparam : GetWindowWord16( win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)), WIN16_GWW_ID); object_windows_dispatch_event( 0x14, (uint16_t)(id - 0x8000u), win16_stack_pointer(message), parent); } /* * 1018:0ce7 — mark all windowed children, then destroy the native HWND. * Flag 8 selects MDI destruction: the parent VMT +0x30 getter is deliberately * called twice, and the second returned client HWND receives WM_MDIDESTROY. */ void object_windows_destroy_native_window(Win16FarPtr window) { HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); if (handle == 0) { return; } object_windows_for_each_child( window, win16_relocated_code_pointer(4, CHILD_WINDOWED_CALLBACK_OFFSET)); if (object_windows_has_flags(window, 8)) { Win16FarPtr parent = win16_read_far_pointer(window, OBJECT_PARENT_OFFSET); uint16_t parent_vmt = win16_read_u16(parent); Win16FarPtr getter = win16_read_far_pointer( win16_dgroup_pointer(parent_vmt), WINDOW_MDI_CLIENT_SLOT); if (win16_call_object_far_method(getter, parent) != 0) { Win16FarPtr client = win16_call_object_far_method(getter, parent); HWND16 client_window = win16_read_u16(win16_far_add_offset( client, OBJECT_WINDOW_HANDLE_OFFSET)); (void)SendMessage16( client_window, WIN16_WM_MDIDESTROY, handle, 0); return; } } (void)DestroyWindow16(handle); } /* * 1018:0e46 — register an ObjectWindows class only when GetClassInfo cannot * find it. VMT +0x2c returns the far class name and +0x34 fills WNDCLASS16. */ bool object_windows_register_class(Win16FarPtr window) { uint16_t vmt = win16_read_u16(window); Win16FarPtr class_name_proc = win16_read_far_pointer(win16_dgroup_pointer(vmt), 0x2c); Win16FarPtr class_name = win16_call_object_far_method(class_name_proc, window); WNDCLASS16 window_class; if (GetClassInfo16( g_win16_instance, class_name, &window_class) != 0) { return true; } Win16FarPtr builder = win16_read_far_pointer(win16_dgroup_pointer(vmt), 0x34); win16_call_object_wndclass_method(builder, window, &window_class); return RegisterClass16(&window_class) != 0; } /* 1018:1274 — construct the shared ObjectWindows WNDCLASS16 descriptor. */ void object_windows_build_window_class( Win16FarPtr window, WNDCLASS16 *window_class) { window_class->style = 3; window_class->window_proc = win16_relocated_code_pointer(4, 0x018b); window_class->class_extra_bytes = 0; window_class->window_extra_bytes = 0; window_class->instance = g_win16_instance; window_class->icon = LoadIcon16(0, win16_make_far_pointer(0, 0x7f00)); window_class->cursor = LoadCursor16(0, win16_make_far_pointer(0, 0x7f00)); window_class->background_brush = 6; window_class->menu_name = 0; uint16_t vmt = win16_read_u16(window); Win16FarPtr class_name_proc = win16_read_far_pointer(win16_dgroup_pointer(vmt), 0x2c); window_class->class_name = win16_call_object_far_method(class_name_proc, window); } /* 1018:12f5 — unaligned uint16 virtual field getter at object +0x35. */ uint16_t object_windows_get_field_35(Win16FarPtr window) { return win16_read_u16(win16_far_add_offset(window, 0x35)); } /* 1018:1586 — remember focus only when it is a child of this native HWND. */ void object_windows_remember_child_focus(Win16FarPtr window) { HWND16 focus = GetFocus16(); if (focus == 0) { return; } HWND16 parent = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); if (IsChild16(parent, focus) != 0) { win16_write_u16(window, WINDOW_SAVED_FOCUS_OFFSET, focus); } } /* 1018:1547 — restore a saved child focus when both HWNDs remain suitable. */ void object_windows_restore_child_focus(Win16FarPtr window) { HWND16 saved = win16_read_u16(win16_far_add_offset( window, WINDOW_SAVED_FOCUS_OFFSET)); if (saved == 0 || IsWindow16(saved) == 0) { return; } HWND16 owner = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); if (IsIconic16(owner) == 0) { (void)SetFocus16(saved); } } /* 1018:169d — base WM_ACTIVATE behavior plus dialog focus save/restore. */ void object_windows_wm_activate_with_focus( Win16FarPtr window, ObjectWindowsMessage *message) { object_windows_wm_activate(window, message); if (!object_windows_has_flags(window, 1)) { return; } if (message->wparam == 0) { object_windows_remember_child_focus(window); } else { object_windows_restore_child_focus(window); } } /* 1018:1a0e — SC_MINIMIZE/SC_RESTORE focus handling before default dispatch. */ void object_windows_wm_syscommand_focus( Win16FarPtr window, ObjectWindowsMessage *message) { if (object_windows_has_flags(window, 1)) { if (message->wparam == 0xf020) { object_windows_remember_child_focus(window); } else if (message->wparam == 0xf120) { object_windows_restore_child_focus(window); } } call_default_handler(window, message); } /* 1018:1761 — receiver-only VMT +0x38 hook, then default event handler. */ void object_windows_call_slot_38_then_default( Win16FarPtr window, ObjectWindowsMessage *message) { win16_call_object_method( object_vmt_procedure(window, 0x38), window); call_default_handler(window, message); } /* 1018:1960 — save child focus before forwarding the unchanged event. */ void object_windows_remember_focus_then_default( Win16FarPtr window, ObjectWindowsMessage *message) { object_windows_remember_child_focus(window); call_default_handler(window, message); } /* * 1018:1311 — forward through the original far WNDPROC stored unaligned at * object +0x37/+0x39, then publish DX:AX into message result +0x0a/+0x0c. */ void object_windows_call_original_window_proc( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr procedure = win16_read_far_pointer(window, 0x37); HWND16 handle = win16_read_u16(win16_far_add_offset( window, OBJECT_WINDOW_HANDLE_OFFSET)); message->result = CallWindowProc16( procedure, handle, message->message, message->wparam, message->lparam); } /* 1008:2c08 — receiver-only VMT +0x38 call; event argument is ignored. */ void object_windows_call_slot_38( Win16FarPtr window, ObjectWindowsMessage *message) { (void)message; win16_call_object_method( object_vmt_procedure(window, 0x38), window); } /* 1008:2cd9 — dialog default handler: set the 32-bit result to zero. */ void object_windows_zero_message_result( Win16FarPtr window, ObjectWindowsMessage *message) { (void)window; message->result = 0; } /* * 1008:2c1f -- query whether session termination must be rejected. The main * window delegates to TApplication.CanClose at VMT +44; other windows use * their own CanClose at +3c. The message result is the exact logical inverse. */ void object_windows_query_end_session_result( Win16FarPtr window, ObjectWindowsMessage *message) { Win16FarPtr receiver = window; uint16_t slot = 0x3c; if (window == win16_read_far_pointer( g_object_windows_application, 8)) { receiver = g_object_windows_application; slot = 0x44; } uint16_t vmt = win16_read_u16(receiver); Win16FarPtr procedure = win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); bool can_close = win16_call_object_bool_method(procedure, receiver); message->result = can_close ? 0 : 1; } /* * 1008:2c83 -- focus the HWND in message.wParam, recover its ObjectWindows * object, and invoke VMT +0c on the optional unaligned far child at +0x43. * The process marker is set on every path and has no reader in this image. */ void object_windows_focus_message( Win16FarPtr ignored, ObjectWindowsMessage *message) { (void)ignored; (void)SetFocus16(message->wparam); Win16FarPtr window = object_windows_object_from_window(message->wparam); if (window != 0) { Win16FarPtr attached = win16_read_far_pointer(window, 0x43); if (attached != 0) { uint16_t vmt = win16_read_u16(attached); Win16FarPtr procedure = win16_read_far_pointer(win16_dgroup_pointer(vmt), 0x0c); win16_call_object_method(procedure, attached); } } g_object_windows_focus_event_marker = 1; } /* 1018:0c3d — generated receiver/event forwarding call to VMT +0x0c. */ void object_windows_forward_default( Win16FarPtr window, ObjectWindowsMessage *message) { call_default_handler(window, message); } /* 1018:0cc7 — set object flag 4 only after field +4 becomes nonzero. */ void object_windows_set_flag_4_if_windowed( uint16_t ignored, Win16FarPtr object) { (void)ignored; if (win16_read_u16(win16_far_add_offset( object, OBJECT_WINDOW_HANDLE_OFFSET)) != 0) { object_windows_set_flag_4(object); } } ldZx#ifndef TDKPIN_WINDOW_MESSAGES_H #define TDKPIN_WINDOW_MESSAGES_H #include "tdkpin_application.h" bool object_windows_has_flags( Win16FarPtr object, uint8_t mask); /* 1018:0673 */ uint16_t object_windows_zero_word_default( Win16FarPtr object); /* 1018:05dc */ void object_windows_update_flags( Win16FarPtr object, bool set, uint8_t mask); /* 1018:0641 */ void object_windows_set_flag_1(Win16FarPtr object); /* 1018:05f3 */ void object_windows_set_flag_4(Win16FarPtr object); /* 1018:060d */ void object_windows_clear_flag_4(Win16FarPtr object); /* 1018:0627 */ void object_windows_close_if_allowed( Win16FarPtr window); /* 1018:0f38 */ void object_windows_wm_close( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0f22 */ void object_windows_wm_destroy( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0f8d */ void object_windows_wm_nc_destroy( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0fcc */ void object_windows_wm_activate( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0ffd */ void object_windows_wm_query_end_session( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1054 */ void object_windows_message_0014( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:10aa */ void object_windows_wm_hscroll( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0b6c */ void object_windows_wm_vscroll( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0b25 */ void object_windows_wm_command( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:08f0 */ void object_windows_route_scroll_notification( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0a85 */ void object_windows_route_command_target( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0bb3 */ void object_windows_forward_event_to_parent( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0c59 */ void object_windows_destroy_native_window( Win16FarPtr window); /* 1018:0ce7 */ bool object_windows_register_class( Win16FarPtr window); /* 1018:0e46 */ void object_windows_build_window_class( Win16FarPtr window, WNDCLASS16 *window_class); /* 1018:1274 */ uint16_t object_windows_get_field_35( Win16FarPtr window); /* 1018:12f5 */ void object_windows_remember_child_focus( Win16FarPtr window); /* 1018:1586 */ void object_windows_restore_child_focus( Win16FarPtr window); /* 1018:1547 */ void object_windows_wm_activate_with_focus( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:169d */ void object_windows_wm_syscommand_focus( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1a0e */ void object_windows_call_slot_38_then_default( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1761 */ void object_windows_remember_focus_then_default( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1960 */ void object_windows_call_original_window_proc( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1311 */ void object_windows_call_slot_38( Win16FarPtr window, ObjectWindowsMessage *message); /* 1008:2c08 */ void object_windows_zero_message_result( Win16FarPtr window, ObjectWindowsMessage *message); /* 1008:2cd9 */ void object_windows_query_end_session_result( Win16FarPtr window, ObjectWindowsMessage *message); /* 1008:2c1f */ void object_windows_focus_message( Win16FarPtr ignored, ObjectWindowsMessage *message); /* 1008:2c83 */ void object_windows_wm_hscroll_attached( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1788 */ void object_windows_wm_vscroll_attached( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:17f8 */ void object_windows_wm_paint_attached( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1868 */ void object_windows_wm_size_attached( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:18e9 */ void object_windows_track_mouse_until_button_up( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:1986 */ extern uint8_t g_object_windows_focus_event_marker; /* 1028:06f2 */ void win16_call_object_wndclass_method( Win16FarPtr procedure, Win16FarPtr object, WNDCLASS16 *window_class); Win16FarPtr object_windows_turbo_window_class_name( Win16FarPtr window); /* 1018:0d6a */ void object_windows_forward_default( Win16FarPtr window, ObjectWindowsMessage *message); /* 1018:0c3d */ void object_windows_set_flag_4_if_windowed( uint16_t ignored, Win16FarPtr object); /* 1018:0cc7 */ #endif ̵xE*/* ObjectWindows native-window setup and normal-placement bookkeeping. */ #include "tdkpin_window_placement.h" #include "tdkpin_strings.h" #include "tdkpin_object_list.h" #include "tdkpin_object_lifecycle.h" enum { WINDOW_VMT_OFFSET = 0, WINDOW_HANDLE_OFFSET = 4, WINDOW_PARENT_OFFSET = 6, WINDOW_FLAGS_OFFSET = 0x16, WINDOW_ATTRIBUTES_OFFSET = 0x21, WINDOW_NORMAL_X_OFFSET = 0x29, WINDOW_NORMAL_Y_OFFSET = 0x2b, WINDOW_NORMAL_WIDTH_OFFSET = 0x2d, WINDOW_NORMAL_HEIGHT_OFFSET = 0x2f, WINDOW_ATTACHED_OBJECT_OFFSET = 0x3b, VMT_SETUP_SLOT = 0x10, VMT_MDI_CLIENT_SLOT = 0x30, WINDOW_FLAG_AUTO_FOCUS = 0x08, WINDOW_FLAG_DIALOG_ITEM = 0x02, WINDOW_TITLE_OFFSET = 0x1d, WINDOW_STYLE_OFFSET = 0x21, WINDOW_EXTENDED_STYLE_OFFSET = 0x25, WINDOW_X_OFFSET = 0x29, WINDOW_Y_OFFSET = 0x2b, WINDOW_WIDTH_OFFSET = 0x2d, WINDOW_HEIGHT_OFFSET = 0x2f, WINDOW_PARAMETER_OFFSET = 0x31, WINDOW_MENU_OFFSET = 0x35, WINDOW_ORIGINAL_PROC_OFFSET = 0x37, WINDOW_ATTACHED_OFFSET = 0x3b, WINDOW_SAVED_FOCUS_OFFSET = 0x3f, WINDOW_REGISTER_CLASS_SLOT = 0x1c, WINDOW_CLASS_NAME_SLOT = 0x2c, WINDOW_CREATED_SLOT = 0x38, PARENT_MDI_CLIENT_SLOT = 0x30, }; static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } static Win16FarPtr vmt_procedure(Win16FarPtr object, uint16_t slot) { return win16_read_far_pointer( win16_dgroup_pointer(win16_read_u16(object)), slot); } /* 1018:1106 -- construct the complete ObjectWindows TWindow state. */ Win16FarPtr object_windows_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { BorlandObjectCallFrame frame = {window, vmt}; if (!borland_enter_object_constructor(&frame, 0)) { return frame.object; } frame.object = object_windows_object_construct(frame.object, 0, parent); write_far(frame.object, WINDOW_TITLE_OFFSET, borland_far_strdup(title)); write_far( frame.object, WINDOW_ORIGINAL_PROC_OFFSET, win16_def_window_proc_pointer()); uint32_t style; if (parent == 0) { style = 0x00cf0000u; } else { Win16FarPtr mdi_client = win16_call_object_far_method( vmt_procedure(parent, PARENT_MDI_CLIENT_SLOT), parent); if (mdi_client == 0) { style = 0x10000000u; } else { object_windows_update_flags(frame.object, true, 8); write_far( frame.object, WINDOW_ORIGINAL_PROC_OFFSET, win16_def_mdi_child_proc_pointer()); style = 0x04000000u; } } win16_write_u32(frame.object, WINDOW_STYLE_OFFSET, style); win16_write_u32(frame.object, WINDOW_EXTENDED_STYLE_OFFSET, 0); win16_write_u16(frame.object, WINDOW_X_OFFSET, 0x8000); win16_write_u16(frame.object, WINDOW_Y_OFFSET, 0); win16_write_u16(frame.object, WINDOW_WIDTH_OFFSET, 0x8000); win16_write_u16(frame.object, WINDOW_HEIGHT_OFFSET, 0); write_far(frame.object, WINDOW_PARAMETER_OFFSET, 0); win16_write_u16(frame.object, WINDOW_MENU_OFFSET, 0); write_far(frame.object, WINDOW_ATTACHED_OFFSET, 0); win16_write_u16(frame.object, WINDOW_SAVED_FOCUS_OFFSET, 0); return frame.object; } /* 1018:134f -- create or attach the native HWND represented by one TWindow. */ uint16_t object_windows_create_native_window(Win16FarPtr window) { if (win16_read_u16(win16_far_add_offset(window, 2)) != 0) { return (win16_indeterminate_u16() & 0xff00u); } object_windows_clear_flag_4(window); Win16FarPtr parent = win16_read_far_pointer(window, 6); HWND16 parent_window = parent == 0 ? 0 : win16_read_u16(win16_far_add_offset(parent, 4)); HWND16 created = 0; if (object_windows_has_flags(window, WINDOW_FLAG_DIALOG_ITEM)) { created = GetDlgItem16( parent_window, (INT16)win16_read_u16(win16_far_add_offset( window, WINDOW_MENU_OFFSET))); } else { bool registered = win16_call_object_bool_method( vmt_procedure(window, WINDOW_REGISTER_CLASS_SLOT), window); if (!registered) { created = win16_indeterminate_u16() & 0xff00u; } else { g_object_windows_creating_object = window; Win16FarPtr class_name = win16_call_object_far_method( vmt_procedure(window, WINDOW_CLASS_NAME_SLOT), window); if (!object_windows_has_flags(window, WINDOW_FLAG_AUTO_FOCUS)) { created = CreateWindowEx16( win16_read_u32(win16_far_add_offset( window, WINDOW_EXTENDED_STYLE_OFFSET)), class_name, win16_read_far_pointer(window, WINDOW_TITLE_OFFSET), win16_read_u32(win16_far_add_offset(window, WINDOW_STYLE_OFFSET)), (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_X_OFFSET)), (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_Y_OFFSET)), (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_WIDTH_OFFSET)), (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_HEIGHT_OFFSET)), parent_window, win16_read_u16(win16_far_add_offset(window, WINDOW_MENU_OFFSET)), g_win16_instance, win16_read_far_pointer(window, WINDOW_PARAMETER_OFFSET)); } else { Win16FarPtr mdi_client = win16_call_object_far_method( vmt_procedure(parent, PARENT_MDI_CLIENT_SLOT), parent); if (mdi_client != 0) { MDICREATESTRUCT16 create = { .class_name = class_name, .title = win16_read_far_pointer(window, WINDOW_TITLE_OFFSET), .owner = g_win16_instance, .x = (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_X_OFFSET)), .y = (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_Y_OFFSET)), .width = (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_WIDTH_OFFSET)), .height = (INT16)win16_read_u16(win16_far_add_offset(window, WINDOW_HEIGHT_OFFSET)), .style = win16_read_u32(win16_far_add_offset(window, WINDOW_STYLE_OFFSET)), .parameter = (LPARAM16)win16_read_far_pointer(window, WINDOW_PARAMETER_OFFSET), }; HWND16 client_window = win16_read_u16( win16_far_add_offset(mdi_client, 4)); created = (HWND16)SendMessage16( client_window, 0x0220, 0, (LPARAM16)win16_stack_pointer(&create)); } } } } win16_write_u16(window, 4, created); if (created == 0) { win16_write_u16(window, 2, 0xffff); } else if (object_windows_object_from_window(created) == 0) { object_windows_bind_window(created, window); int32_t previous = SetWindowLong16( created, -4, (int32_t)win16_read_far_pointer(window, 0x12)); write_far(window, WINDOW_ORIGINAL_PROC_OFFSET, (Win16FarPtr)previous); win16_call_object_method( vmt_procedure(window, WINDOW_CREATED_SLOT), window); } return (win16_indeterminate_u16() & 0xff00u) | (win16_read_u16(win16_far_add_offset(window, 2)) == 0 ? 1u : 0u); } static Win16FarPtr virtual_method( Win16FarPtr object, uint16_t slot) { uint16_t vmt = win16_read_u16(object); return win16_read_far_pointer(win16_dgroup_pointer(vmt), slot); } /* * 1018:15c0 — capture the native window's normal screen rectangle. * Minimized or maximized windows leave all four saved words untouched. For a * child window, the top-left point is translated to the MDI client when the * client exists and flag 08 is set; otherwise attribute bit 40000000 selects * translation to the parent window. GetWindowRect/ScreenToClient BOOL results * are deliberately ignored, matching the target. */ void object_windows_capture_normal_placement(Win16FarPtr window) { HWND16 handle = win16_read_u16(win16_far_add_offset(window, WINDOW_HANDLE_OFFSET)); if (IsIconic16(handle) != 0 || IsZoomed16(handle) != 0) { return; } RECT16 rectangle; (void)GetWindowRect16(handle, win16_stack_pointer(&rectangle)); win16_write_u16( window, WINDOW_NORMAL_WIDTH_OFFSET, (uint16_t)(rectangle.right - rectangle.left)); win16_write_u16( window, WINDOW_NORMAL_HEIGHT_OFFSET, (uint16_t)(rectangle.bottom - rectangle.top)); Win16FarPtr parent = win16_read_far_pointer(window, WINDOW_PARENT_OFFSET); if (parent != 0) { Win16FarPtr client = win16_call_object_far_method( virtual_method(parent, VMT_MDI_CLIENT_SLOT), parent); if (client != 0 && object_windows_has_flags(window, WINDOW_FLAG_AUTO_FOCUS)) { HWND16 client_handle = win16_read_u16( win16_far_add_offset(client, WINDOW_HANDLE_OFFSET)); (void)ScreenToClient16( client_handle, win16_stack_pointer(&rectangle)); } else if ((win16_read_u32( win16_far_add_offset( window, WINDOW_ATTRIBUTES_OFFSET)) & 0x40000000U) != 0) { HWND16 parent_handle = win16_read_u16( win16_far_add_offset(parent, WINDOW_HANDLE_OFFSET)); (void)ScreenToClient16( parent_handle, win16_stack_pointer(&rectangle)); } } win16_write_u16(window, WINDOW_NORMAL_X_OFFSET, (uint16_t)rectangle.left); win16_write_u16(window, WINDOW_NORMAL_Y_OFFSET, (uint16_t)rectangle.top); } /* * 1018:170c — ObjectWindows SetupWindow sequence: validate/prepare the native * window, optionally focus it, set up the attached object at +3b through VMT * slot 10, then capture the normal placement. */ void object_windows_setup_window(Win16FarPtr window) { object_windows_prepare_window(window); if (object_windows_has_flags(window, WINDOW_FLAG_AUTO_FOCUS)) { (void)SetFocus16( win16_read_u16( win16_far_add_offset(window, WINDOW_HANDLE_OFFSET))); } Win16FarPtr attached = win16_read_far_pointer(window, WINDOW_ATTACHED_OBJECT_OFFSET); if (attached != 0) { win16_call_object_method( virtual_method(attached, VMT_SETUP_SLOT), attached); } object_windows_capture_normal_placement(window); } Hoɽx#ifndef TDKPIN_WINDOW_PLACEMENT_H #define TDKPIN_WINDOW_PLACEMENT_H #include "tdkpin_window_messages.h" void object_windows_capture_normal_placement( Win16FarPtr window); /* 1018:15c0 */ void object_windows_setup_window(Win16FarPtr window); /* 1018:170c */ Win16FarPtr object_windows_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent); /* 1018:1106 */ uint16_t object_windows_create_native_window( Win16FarPtr window); /* 1018:134f */ #endif xuy9tLRR!R/Km`x|ۗ1+|6i]{3\7`(w`]!뿔!$b_`gv<IG3,1V"=:{T Qd;L!r >FUjoȈ5uAZjOn5wK MR85 GVߋ̕W퇭mS'C`) ֭$WV9(?B@>^7O*ۺp~~=AB@06J]/?5 6VZߖWzf3H $;KL׍˭\YS9LCq+;,sζf*z[E{IT=ߧU¿gQ]eYG$<Ջex/6LqqFWR| 0:~N d\rZZWq:gø `>Z~ehs\o}HΊ٢<4s'򥍵y^[1` )ho;͙D)>IWɏ;&`&ڒE<,ֲ&*  >赇:w/Su[_/ +];߸RQjԥFd5Q!/Z,hMoYFajˋԿ8Ț_8Y3rC\CHd*8kv`` HL2ZTH E9\AAss9AMUGkSf fمheT+j&`OR ݓ&s*_~;X! pN&jhuS)\BW|-3/@7\V7މ';[lٶ=|7}!i1:6ӒK$嬨 ]m .+xT T'|)>ɂ²[quPĐ@ aC,4UY܇஼Pi_-K=I3n>ޙ$?wq+ SN-jXya4+/Ƭx@>41@ M (GxHBpc;kkv|zD1 n@ǬXeQQqϴ`0|-@r{#gζE:VORW|96p*9Y[F<y=_ҋT.pXסe21cC7\$Ջe5ڬ5W1@DW_5{Xba? HRN+4}zZ9/[ hF,UF9ir,I*+HoFL-3=)7u1A6/3TSC0ʆXmQQ-\u))t;:AϾf^RۋWlEa8F6ʟ^:ŕv5i#ʩ.m2;c gb hdɌYZ]Ot{qJG7?L-96z~@( Q-McnY_{ G Ƀu[񵉻ZԈ*F04XzWe_2 2`@^;9A+&!519Kə0B0)Q*~b?du(dxU'Co/p M_ߔQ#)~A3 ,RIN65˻ڒ+)VP[mo.ZۜL)u] z$9H 1Ӛc_1> A 9aB{U#ٲ)yo!T4ְ[-LdRqOaxhE]<9YGKz Fv(ߓ=hyO4]AAvi^1H/Sb i(E53&u `Ty"%|Z7VIHx#include "../tdkpin_application.h" #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; static Win16FarPtr g_make_source; static HINSTANCE16 g_make_instance; static Win16FarPtr g_freed_proc; static Win16FarPtr g_first_method; static Win16FarPtr g_second_method; static unsigned g_method_calls; static bool g_first_sets_error; static unsigned g_heap_reserve_initializations; static Win16FarPtr g_freed_object; static uint16_t g_freed_size; static Win16FarPtr g_setup_method; static Win16FarPtr g_create_main_method; static Win16FarPtr g_created_main_window; static HWND16 g_shown_window; static INT16 g_show_command; BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes) { (void)bytes; return (BorlandAllocationAttempt){0, true}; } bool borland_try_free_mem(Win16FarPtr object, uint16_t bytes) { g_freed_object = object; g_freed_size = bytes; return false; } _Noreturn void borland_runtime_error(uint16_t code) { (void)code; assert(false); __builtin_unreachable(); } Win16FarPtr MakeProcInstance16( Win16FarPtr procedure, HINSTANCE16 instance) { g_make_source = procedure; g_make_instance = instance; return win16_make_far_pointer(0x6200, 0x2222); } void FreeProcInstance16(Win16FarPtr procedure) { g_freed_proc = procedure; } void borland_initialize_heap_reserve(void) { g_heap_reserve_initializations++; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { g_method_calls++; if (procedure == g_setup_method) { return; } if (procedure == g_first_method) { if (g_first_sets_error) { win16_write_u16(object, 2, 5); } return; } assert(procedure == g_second_method); } Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; assert(procedure == g_create_main_method); return g_created_main_window; } BOOL16 ShowWindow16(HWND16 window, INT16 command) { g_shown_window = window; g_show_command = command; return 1; } static void reset_calls(void) { g_method_calls = 0; g_first_sets_error = false; g_heap_reserve_initializations = 0; g_freed_proc = 0; g_freed_object = 0; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t code[0x200]; static uint8_t object_bytes[64]; static uint8_t main_window_bytes[32]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_ne_segment(4, 0x6000, code, sizeof(code), false); win16_bind_segment( 0x7000, object_bytes, sizeof(object_bytes), true); win16_bind_segment( 0x7100, main_window_bytes, sizeof(main_window_bytes), true); uint16_t vmt = 0x0200; win16_write_u16(win16_dgroup_pointer(vmt), 0, 18); g_first_method = win16_make_far_pointer(0x6100, 0x1000); g_second_method = win16_make_far_pointer(0x6100, 0x2000); g_setup_method = win16_make_far_pointer(0x6100, 0x3000); g_create_main_method = win16_make_far_pointer(0x6100, 0x4000); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x10)), 0, win16_far_offset(g_first_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x12)), 0, win16_far_selector(g_first_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x14)), 0, win16_far_offset(g_second_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x16)), 0, win16_far_selector(g_second_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x18)), 0, win16_far_offset(g_setup_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x1a)), 0, win16_far_selector(g_setup_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x34)), 0, win16_far_offset(g_create_main_method)); win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 0x36)), 0, win16_far_selector(g_create_main_method)); Win16FarPtr object = win16_make_far_pointer(0x7000, 4); Win16FarPtr name = win16_make_far_pointer(0x5000, 0x0300); g_win16_instance = 0x1111; g_win16_previous_instance = 0; reset_calls(); assert(object_windows_application_construct(object, vmt, name) == object); assert(win16_read_u16(object) == vmt); assert(win16_read_far_pointer(object, 4) == name); assert(g_object_windows_application == object); assert(g_make_source == win16_make_far_pointer(0x6000, 0x0133)); assert(g_make_instance == 0x1111); assert(g_object_windows_dispatch_proc == win16_make_far_pointer(0x6200, 0x2222)); assert(g_heap_reserve_initializations == 1 && g_method_calls == 2); assert(!object_windows_application_idle_default(object)); object_windows_application_init_application_default(object); Win16FarPtr dialog = win16_make_far_pointer(0x7200, 0x3456); object_windows_application_set_active_dialog(object, dialog); assert(win16_read_far_pointer(object, 0x0e) == dialog); g_created_main_window = win16_make_far_pointer(0x7100, 2); win16_write_u16(g_created_main_window, 4, 0x0088); g_win16_show_command = 7; g_shown_window = 0; object_windows_application_initialize(object); assert(win16_read_far_pointer(object, 8) == g_created_main_window); assert(g_shown_window == 0x0088 && g_show_command == 7); g_created_main_window = 0; win16_write_u16(object, 2, 0); object_windows_application_initialize(object); assert(win16_read_far_pointer(object, 8) == 0); assert(win16_read_u16(win16_far_add_offset(object, 2)) == 0xfffb); g_shown_window = 0; object_windows_show(win16_make_far_pointer(0x7100, 10), 3); assert(g_shown_window == 0); reset_calls(); g_win16_previous_instance = 9; assert(object_windows_application_construct(object, vmt, name) == object); assert(g_method_calls == 1); /* With InitApplication skipped, the first observed call is InitInstance. */ assert(g_second_method != g_first_method); reset_calls(); g_win16_previous_instance = 0; g_first_sets_error = true; (void)object_windows_application_construct(object, vmt, name); assert(g_method_calls == 1); assert(win16_read_u16(win16_far_add_offset(object, 2)) == 5); win16_write_u16(object, 0, vmt); object_windows_application_destruct(object, 1); assert(g_freed_proc == g_object_windows_dispatch_proc); assert(g_freed_object == object && g_freed_size == 18); return 0; } .6ϔx8"#include "../tdkpin_application.h" #include #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; static MSG16 g_messages[4]; static unsigned g_message_index; static unsigned g_message_count; static unsigned g_empty_before_messages; static unsigned g_wait_calls; static unsigned g_translate_calls; static unsigned g_dispatch_calls; static bool g_idle_result; static bool g_main_filter_result; static Win16FarPtr g_filter_order[4]; static unsigned g_filter_calls; static Win16FarPtr g_true_filter; static BOOL16 g_dialog_result; static HWND16 g_dialog_window; static INT16 g_accelerator_result; static HWND16 g_accelerator_window; static HACCEL16 g_accelerator; static BOOL16 g_mdi_result; static HWND16 g_mdi_window; static Win16FarPtr g_client_object; static Win16FarPtr g_client_getter; static Win16FarPtr g_bool_procedure; static Win16FarPtr g_void_method; static Win16FarPtr g_error_method; static uint16_t g_error_argument; BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message) { assert(window == 0 && minimum_message == 0 && maximum_message == 0); assert(remove_message == 1); if (g_empty_before_messages != 0) { g_empty_before_messages--; return 0; } assert(g_message_index < g_message_count); *message = g_messages[g_message_index++]; return 1; } BOOL16 WaitMessage16(void) { g_wait_calls++; return 1; } BOOL16 TranslateMessage16(const MSG16 *message) { assert(message->message != 0x12); g_translate_calls++; return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { assert(message->message != 0x12); g_dispatch_calls++; return 0; } BOOL16 IsDialogMessage16(HWND16 dialog, MSG16 *message) { (void)message; g_dialog_window = dialog; return g_dialog_result; } INT16 TranslateAccelerator16( HWND16 window, HACCEL16 accelerator, MSG16 *message) { (void)message; g_accelerator_window = window; g_accelerator = accelerator; return g_accelerator_result; } BOOL16 TranslateMDISysAccel16(HWND16 client, MSG16 *message) { (void)message; g_mdi_window = client; return g_mdi_result; } bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { (void)procedure; (void)object; g_bool_procedure = procedure; return g_idle_result; } bool win16_call_application_message_filter( Win16FarPtr procedure, Win16FarPtr application, MSG16 *message) { (void)application; (void)message; g_filter_order[g_filter_calls++] = procedure; if (g_filter_calls == 1 && g_main_filter_result) { return true; } return procedure == g_true_filter; } Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == g_client_getter); (void)object; return g_client_object; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; g_void_method = procedure; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { (void)object; g_error_method = procedure; g_error_argument = argument; } static void write_far(uint16_t selector, uint16_t offset, Win16FarPtr value) { Win16FarPtr base = win16_make_far_pointer(selector, offset); win16_write_u16(base, 0, win16_far_offset(value)); win16_write_u16(base, 2, win16_far_selector(value)); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t application_bytes[64]; static uint8_t window_bytes[64]; static uint8_t dialog_bytes[32]; static uint8_t client_bytes[32]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment( 0x7000, application_bytes, sizeof(application_bytes), true); win16_bind_segment(0x7100, window_bytes, sizeof(window_bytes), true); win16_bind_segment(0x7200, dialog_bytes, sizeof(dialog_bytes), true); win16_bind_segment(0x7300, client_bytes, sizeof(client_bytes), true); Win16FarPtr application = win16_make_far_pointer(0x7000, 2); Win16FarPtr main_window = win16_make_far_pointer(0x7100, 2); Win16FarPtr dialog = win16_make_far_pointer(0x7200, 2); g_client_object = win16_make_far_pointer(0x7300, 2); const uint16_t app_vmt = 0x0100; const uint16_t window_vmt = 0x0200; win16_write_u16(application, 0, app_vmt); win16_write_u16(main_window, 0, window_vmt); write_far(0x7000, 10, main_window); write_far(0x7000, 16, dialog); win16_write_u16(main_window, 4, 0x1111); win16_write_u16(dialog, 4, 0x2222); win16_write_u16(g_client_object, 4, 0x3333); Win16FarPtr idle_proc = win16_make_far_pointer(0x6000, 0x1000); Win16FarPtr main_filter = win16_make_far_pointer(0x6000, 0x2000); Win16FarPtr run_proc = win16_make_far_pointer(0x6000, 0x2100); Win16FarPtr error_proc = win16_make_far_pointer(0x6000, 0x2200); Win16FarPtr filters[3] = { win16_make_far_pointer(0x6000, 0x3000), win16_make_far_pointer(0x6000, 0x4000), win16_make_far_pointer(0x6000, 0x5000), }; write_far(0x5000, app_vmt + 0x0c, idle_proc); write_far(0x5000, app_vmt + 0x24, main_filter); write_far(0x5000, app_vmt + 0x20, run_proc); write_far(0x5000, app_vmt + 0x40, error_proc); write_far(0x5000, app_vmt + 0x28, filters[0]); write_far(0x5000, app_vmt + 0x30, filters[1]); write_far(0x5000, app_vmt + 0x2c, filters[2]); g_client_getter = win16_make_far_pointer(0x6100, 0x6000); Win16FarPtr can_close = win16_make_far_pointer(0x6100, 0x7000); write_far(0x5000, window_vmt + 0x30, g_client_getter); write_far(0x5000, window_vmt + 0x3c, can_close); memset(g_messages, 0, sizeof(g_messages)); g_messages[0].message = 0x0100; g_messages[1].message = 0x0012; g_messages[1].wparam = 0x55aa; g_message_count = 2; g_message_index = 0; g_empty_before_messages = 1; g_wait_calls = 0; g_translate_calls = 0; g_dispatch_calls = 0; g_filter_calls = 0; g_idle_result = false; g_main_filter_result = false; g_true_filter = 0; object_windows_application_message_loop(application); assert(g_wait_calls == 1); assert(g_translate_calls == 1 && g_dispatch_calls == 1); assert(g_filter_calls == 1 && g_filter_order[0] == main_filter); assert(win16_read_u16(win16_far_add_offset(application, 2)) == 0x55aa); MSG16 message = {0}; g_filter_calls = 0; g_true_filter = filters[1]; assert(object_windows_application_preprocess_message( application, &message)); assert(g_filter_calls == 2); assert(g_filter_order[0] == filters[0] && g_filter_order[1] == filters[1]); g_filter_calls = 0; g_true_filter = 0; assert(!object_windows_application_preprocess_message( application, &message)); assert(g_filter_calls == 3); g_dialog_result = 1; assert(object_windows_application_process_dialog_message( application, &message) == 0xff01); assert(g_dialog_window == 0x2222); g_dialog_result = 0; assert(object_windows_application_process_dialog_message( application, &message) == 0); win16_write_u16(application, 0x0c, 0x4444); g_accelerator_result = 1; assert(object_windows_application_process_accelerator( application, &message)); assert(g_accelerator_window == 0x1111 && g_accelerator == 0x4444); g_mdi_result = 1; assert(object_windows_application_process_mdi_accelerator( application, &message)); assert(g_mdi_window == 0x3333); g_client_object = 0; assert(!object_windows_application_process_mdi_accelerator( application, &message)); assert(object_windows_window_get_mdi_client_default(main_window) == 0); win16_write_u16(application, 2, 0); g_void_method = 0; object_windows_application_run(application); assert(g_void_method == run_proc); win16_write_u16(application, 2, 0xfffb); g_error_method = 0; object_windows_application_run(application); assert(g_error_method == error_proc && g_error_argument == 0xfffb); g_idle_result = true; assert(object_windows_application_can_close(application)); assert(g_bool_procedure == can_close); g_idle_result = false; assert(!object_windows_application_can_close(application)); return 0; } 0x:#include "../tdkpin_application.h" #include #include #include #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; Win16FarPtr g_win16_message_box; static bool g_reserve_unallocated; static unsigned g_ensure_calls; static Win16FarPtr g_disposed; static uint16_t g_error; static Win16FarPtr g_validator_result; static bool g_create_result; static int16_t g_execute_result; static Win16FarPtr g_validate_proc; static Win16FarPtr g_error_proc; static Win16FarPtr g_create_proc; static Win16FarPtr g_execute_proc; static INT16 g_message_box_response; static char g_message_text[32]; static uint16_t g_exit_status; static jmp_buf g_exit_jump; bool borland_heap_reserve_is_unallocated(void) { return g_reserve_unallocated; } void borland_ensure_heap_reserve(void) { g_ensure_calls++; } void borland_dispose_object(Win16FarPtr object) { g_disposed = object; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { (void)object; assert(procedure == g_error_proc); g_error = argument; } Win16FarPtr win16_call_application_window_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr window) { (void)application; (void)window; assert(procedure == g_validate_proc); return g_validator_result; } bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; assert(procedure == g_create_proc); return g_create_result; } int16_t win16_call_object_int_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; assert(procedure == g_execute_proc); return g_execute_result; } INT16 wvsprintf16( char *output, const char *format, const uint16_t *arguments) { assert(strcmp(format, "Error code = %d. Continue?") == 0); return (INT16)snprintf( output, 32, format, (int16_t)arguments[0]); } INT16 win16_call_message_box( Win16FarPtr procedure, HWND16 owner, const char *text, const char *caption, UINT16 type) { assert(procedure == g_win16_message_box); assert(owner == 0 && type == 0x14); assert(strcmp(caption, "Application Error") == 0); strcpy(g_message_text, text); return g_message_box_response; } _Noreturn void borland_runtime_exit(uint16_t status) { g_exit_status = status; longjmp(g_exit_jump, 1); } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } static void reset_state(void) { g_reserve_unallocated = false; g_ensure_calls = 0; g_disposed = 0; g_error = 0; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t application_bytes[64]; static uint8_t window_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment( 0x7000, application_bytes, sizeof(application_bytes), true); win16_bind_segment(0x7100, window_bytes, sizeof(window_bytes), true); Win16FarPtr application = win16_make_far_pointer(0x7000, 2); Win16FarPtr window = win16_make_far_pointer(0x7100, 2); uint16_t app_vmt = 0x0100; uint16_t window_vmt = 0x0200; win16_write_u16(application, 0, app_vmt); win16_write_u16(window, 0, window_vmt); g_validate_proc = win16_make_far_pointer(0x6000, 0x1000); g_error_proc = win16_make_far_pointer(0x6000, 0x2000); g_create_proc = win16_make_far_pointer(0x6100, 0x3000); g_execute_proc = win16_make_far_pointer(0x6100, 0x4000); g_win16_message_box = win16_make_far_pointer(0x6200, 0x5000); write_far(app_vmt + 0x3c, g_validate_proc); write_far(app_vmt + 0x40, g_error_proc); write_far(window_vmt + 0x20, g_create_proc); write_far(window_vmt + 0x4c, g_execute_proc); reset_state(); assert(object_windows_application_validate_window(application, 0) == 0); win16_write_u16(window, 2, 0); assert(object_windows_application_validate_window(application, window) == window); reset_state(); win16_write_u16(window, 2, 5); assert(object_windows_application_validate_window(application, window) == 0); assert(g_error == 5 && g_disposed == window && g_ensure_calls == 0); reset_state(); g_reserve_unallocated = true; win16_write_u16(window, 2, 0); assert(object_windows_application_validate_window(application, window) == 0); assert(g_error == 0xfffe && g_disposed == window && g_ensure_calls == 1); reset_state(); g_validator_result = window; g_create_result = true; assert(object_windows_application_make_window(application, window) == window); assert(g_disposed == 0); reset_state(); g_validator_result = window; g_create_result = false; win16_write_u16(window, 2, 7); assert(object_windows_application_make_window(application, window) == 0); assert(g_error == 7 && g_disposed == window); reset_state(); g_validator_result = 0; assert(object_windows_application_make_window(application, window) == 0); assert(g_disposed == 0); reset_state(); g_validator_result = window; g_execute_result = 4; assert(object_windows_application_exec_dialog(application, window) == 4); assert(g_disposed == window && g_error == 0); reset_state(); g_validator_result = window; g_execute_result = -1; assert(object_windows_application_exec_dialog(application, window) == 2); assert(g_error == 0xffff && g_disposed == window); reset_state(); g_validator_result = 0; assert(object_windows_application_exec_dialog(application, window) == 2); assert(g_disposed == 0); g_message_box_response = 6; object_windows_application_error(application, 123); assert(strcmp(g_message_text, "Error code = 123. Continue?") == 0); g_message_box_response = 7; if (setjmp(g_exit_jump) == 0) { object_windows_application_error(application, 0x8123); assert(false); } assert(g_exit_status == 0x8123); assert(strcmp(g_message_text, "Error code = -32477. Continue?") == 0); return 0; } |G_x#include "../tdkpin_arithmetic.h" #include #include #include #include uint8_t g_borland_cpu_level; static jmp_buf g_fault_jump; static uint16_t g_runtime_code; static bool g_divide_fault; _Noreturn void borland_runtime_error(uint16_t code) { g_runtime_code = code; longjmp(g_fault_jump, 1); } _Noreturn void win16_integer_divide_fault(void) { g_divide_fault = true; longjmp(g_fault_jump, 1); } int main(void) { assert(borland_multiply_i32(123456, -789) == -97406784); assert((uint32_t)borland_multiply_i32(INT32_MAX, INT32_MAX) == 1); assert((uint32_t)borland_multiply_i32(INT32_MIN, 2) == 0); BorlandDivI32Result result = borland_divide_i32(-100, 7); assert(result.quotient == -14 && result.remainder == -2); result = borland_divide_i32(100, -7); assert(result.quotient == -14 && result.remainder == 2); result = borland_divide_i32(-100, -7); assert(result.quotient == 14 && result.remainder == -2); g_borland_cpu_level = 1; result = borland_divide_i32(INT32_MIN, -1); assert(result.quotient == INT32_MIN && result.remainder == 0); g_runtime_code = 0; if (setjmp(g_fault_jump) == 0) { (void)borland_divide_i32(1, 0); assert(false); } assert(g_runtime_code == 200); g_borland_cpu_level = 2; g_divide_fault = false; if (setjmp(g_fault_jump) == 0) { (void)borland_divide_i32(INT32_MIN, -1); assert(false); } assert(g_divide_fault); return 0; } ux#include "../tdkpin_game_assets.h" #include "../tdkpin_borland_objects.h" #include static uint8_t g_dgroup[0x5000]; static uint8_t g_window_bytes[0x0c00]; static Win16FarPtr g_window; static Win16FarPtr g_owned; static HGDIOBJ16 g_deleted[32]; static unsigned g_delete_count; static unsigned g_step; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(++g_step == 1 && instance == 0); assert(resource == win16_make_far_pointer(0, 0x7f02)); return 0x1111; } HCURSOR16 SetCursor16(HCURSOR16 cursor) { if (++g_step == 2) { assert(cursor == 0x1111); return 0x2222; } assert(cursor == 0x2222); return 0; } void tdkpin_unload_sounds(void) { assert(++g_step == 3); } void borland_dispose_object(Win16FarPtr object) { assert(++g_step == 4 && object == g_owned); } void tdkpin_drain_messages_except_input(void) { assert(++g_step == 5); } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object != 0 && g_delete_count < 32); g_deleted[g_delete_count++] = object; return 1; } void PostQuitMessage16(INT16 exit_code) { assert(exit_code == 0x12); } void object_windows_window_destruct( Win16FarPtr window, uint16_t vmt) { assert(window == g_window && vmt == 0); } BOOL16 InvalidateRect16( HWND16 window, Win16FarPtr rectangle, BOOL16 erase) { assert(window == 0x3333 && rectangle == 0 && erase == 1); return 1; } void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(frame->object == g_window && frame->vmt_argument == 0x9999); assert(vmt_field_offset == 0); } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_window_bytes, sizeof(g_window_bytes), true); win16_set_dgroup_selector(0x5000); g_window = win16_make_far_pointer(0x6000, 0); g_owned = win16_make_far_pointer(0x6000, 0x0800); win16_write_u16(g_window, 4, 0x3333); win16_write_u16(g_window, 0x52, 1); win16_write_u32(g_window, 0x49, g_owned); static const uint16_t global_offsets[] = { 0x0859, 0x0863, 0x0865, 0x085f, 0x085b, 0x0861, 0x085d, }; for (uint16_t index = 0; index < 7; index++) { win16_write_u16(dgroup_at(global_offsets[index]), 0, (uint16_t)(index + 2)); } for (uint16_t index = 0; index < 8; index++) { win16_write_u16(dgroup_at(0x430b), (uint16_t)(index * 2), (uint16_t)(10 + index)); } for (uint16_t index = 1; index <= 4; index++) { win16_write_u16(dgroup_at(0x4319), (uint16_t)(index * 2), (uint16_t)(19 + index)); } for (uint16_t index = 1; index <= 9; index++) { win16_write_u16(dgroup_at(0x4321), (uint16_t)(index * 2), (uint16_t)(29 + index)); } tdkpin_asset_window_destruct(g_window, 0x9999); assert(g_delete_count == 29); for (uint16_t index = 0; index < 8; index++) { assert(g_deleted[index] == index + 1); } for (uint16_t index = 0; index < 8; index++) { assert(g_deleted[8 + index] == 10 + index); } for (uint16_t index = 0; index < 4; index++) { assert(g_deleted[16 + index] == 20 + index); } for (uint16_t index = 0; index < 9; index++) { assert(g_deleted[20 + index] == 30 + index); } assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bd8)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bd9)) == 1); return 0; } G$Ux[&#include "../tdkpin_game_assets.h" #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_window_bytes[0x0c00]; HINSTANCE16 g_win16_instance; static Win16FarPtr g_window; static uint16_t g_dat_ids[40]; static unsigned g_dat_count; static uint16_t g_bitmap_ids[8]; static unsigned g_bitmap_count; static uint8_t g_stages[40]; static unsigned g_stage_count; static int32_t g_drawn_scores[8]; static unsigned g_draw_score_count; static unsigned g_select_palette_calls; static unsigned g_unrealize_calls; static unsigned g_realize_calls; static unsigned g_drain_calls; static unsigned g_sound_calls; static unsigned g_create_dc_calls; static unsigned g_create_bitmap_calls; static unsigned g_select_object_calls; static unsigned g_blit_calls; static unsigned g_delete_object_calls; static unsigned g_delete_dc_calls; static unsigned g_client_rect_calls; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_cursor_calls; static unsigned g_status_calls; static uint8_t g_status_player; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } static void reset_calls(void) { g_dat_count = 0; g_bitmap_count = 0; g_stage_count = 0; g_draw_score_count = 0; g_select_palette_calls = 0; g_unrealize_calls = 0; g_realize_calls = 0; g_drain_calls = 0; g_sound_calls = 0; g_create_dc_calls = 0; g_create_bitmap_calls = 0; g_select_object_calls = 0; g_blit_calls = 0; g_delete_object_calls = 0; g_delete_dc_calls = 0; g_client_rect_calls = 0; g_get_dc_calls = 0; g_release_dc_calls = 0; g_cursor_calls = 0; g_status_calls = 0; g_status_player = 0; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x1111 && force_background == 0); g_select_palette_calls++; if (g_select_palette_calls == 1) { assert(palette == 0x2222); return 0x3333; } assert(palette == 0x3333); return 0x2222; } BOOL16 UnrealizeObject16(HGDIOBJ16 object) { assert(object == 0x2222); g_unrealize_calls++; return 1; } UINT16 RealizePalette16(HDC16 dc) { assert(dc == 0x1111); g_realize_calls++; return 256; } void tdkpin_drain_messages_except_input(void) { g_drain_calls++; } HBITMAP16 tdkpin_load_bitmap_resource( Win16FarPtr resource_name, HINSTANCE16 instance) { assert(instance == g_win16_instance); assert(win16_far_selector(resource_name) == 0); uint16_t id = win16_far_offset(resource_name); g_dat_ids[g_dat_count++] = id; return (HBITMAP16)(0x1000 + g_dat_count); } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x1111); g_create_dc_calls++; return (HDC16)(0x4000 + g_create_dc_calls); } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { (void)dc; assert(object != 0); g_select_object_calls++; return (HGDIOBJ16)(0x5000 + g_select_object_calls); } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(destination != 0 && source != 0); (void)destination_x; (void)destination_y; (void)width; (void)height; assert(source_x == 0 && source_y == 0); assert(raster_operation == 0x00cc0020 || raster_operation == 0x00c60088 || raster_operation == 0x00ee0086); if (raster_operation != 0x00cc0020) { assert(destination == 0x1111); assert(destination_x == 10 && destination_y == 20); assert(width == 29 && height == 39); } g_blit_calls++; return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object != 0); g_delete_object_calls++; return 1; } void tdkpin_draw_loading_stage(Win16FarPtr caller_bp, uint8_t stage) { assert(win16_read_u16(win16_far_add_offset(caller_bp, 0x0e)) == 0x1111); if (stage >= 2) { assert(win16_read_u16(win16_far_add_offset(caller_bp, 0xfffe)) != 0); } g_stages[g_stage_count++] = stage; } void tdkpin_initialize_sounds(void) { g_sound_calls++; } HBITMAP16 LoadBitmap16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == g_win16_instance && win16_far_selector(resource) == 0); uint16_t id = win16_far_offset(resource); g_bitmap_ids[g_bitmap_count++] = id; return (HBITMAP16)(0x2000 + id); } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); g_cursor_calls++; return 0x7777; } HCURSOR16 SetCursor16(HCURSOR16 cursor) { assert(cursor == 0x7777); return 0; } BOOL16 GetClientRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x8888); win16_write_u16(rectangle, 0, 0); win16_write_u16(rectangle, 2, 0); win16_write_u16(rectangle, 4, 640); win16_write_u16(rectangle, 6, 460); g_client_rect_calls++; return 1; } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x1111 && width == 641 && height == 461); g_create_bitmap_calls++; return 0x6666; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc != 0); g_delete_dc_calls++; return 1; } HDC16 GetDC16(HWND16 window) { assert(window == 0x8888); g_get_dc_calls++; return 0x9999; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x8888 && dc == 0x9999); g_release_dc_calls++; return 1; } int32_t borland_multiply_i32(int32_t left, int32_t right) { return left * right; } void tdkpin_draw_score(HDC16 destination, int32_t value_or_player) { assert(destination == 0x9999); g_drawn_scores[g_draw_score_count++] = value_or_player; } void tdkpin_update_status_display(uint8_t player, HDC16 destination) { assert(destination == 0x9999); g_status_player = player; g_status_calls++; } static void assert_dat_ids(void) { static const uint16_t expected[] = { 995, 994, 998, 998, 400, 401, 402, 403, 404, 405, 406, 407, 701, 702, 703, 704, 801, 802, 803, 804, 805, 806, 807, 808, 809, 900, 997, 901, 600, }; assert(g_dat_count == sizeof(expected) / sizeof(expected[0])); assert(memcmp(g_dat_ids, expected, sizeof(expected)) == 0); } static void test_asset_loading(void) { reset_calls(); win16_write_u8(dgroup_at(0x07cc), 1); win16_write_u8(win16_far_add_offset(g_window, 0x0bd8), 1); tdkpin_initialize_assets_and_redraw(g_window, 0xbeef, 0xcafe, 0x1111); assert_dat_ids(); assert(g_bitmap_count == 3); assert(g_bitmap_ids[0] == 500 && g_bitmap_ids[1] == 102 && g_bitmap_ids[2] == 101); assert(g_stage_count == 34); for (unsigned index = 0; index < 34; index++) { assert(g_stages[index] == index + 2); } assert(g_sound_calls == 1 && g_drain_calls == 1); assert(g_select_palette_calls == 2 && g_cursor_calls == 1); assert(win16_read_u8(dgroup_at(0x07cc)) == 0); assert(win16_read_u16(win16_far_add_offset(g_window, 0x54)) == 0x2066); assert(win16_read_u16(win16_far_add_offset(g_window, 0x52)) == 0x2065); assert(g_get_dc_calls == 0); } static void test_redraw(void) { reset_calls(); win16_write_u8(dgroup_at(0x07cc), 0); win16_write_u8(win16_far_add_offset(g_window, 0x0bd8), 0); win16_write_u8(win16_far_add_offset(g_window, 0x0bde), 0); win16_write_u32(g_window, 0x0ba2, 10); win16_write_u32(g_window, 0x0ba6, 20); win16_write_u16(g_window, 0x54, 0xaaaa); win16_write_u16(g_window, 0x52, 0xbbbb); win16_write_u8(dgroup_at(0x07d1), 2); win16_write_u8(dgroup_at(0x09a3), 3); win16_write_u32(dgroup_at(0x098e), 8, 10); win16_write_u32(dgroup_at(0x097e), 4, 0); win16_write_u32(dgroup_at(0x097e), 8, 42); win16_write_u32(dgroup_at(0x097e), 12, (uint32_t)-1); win16_write_u32(dgroup_at(0x097e), 16, 5); tdkpin_initialize_assets_and_redraw(g_window, 1, 2, 0x1111); assert(g_dat_count == 0 && g_bitmap_count == 0 && g_stage_count == 0); assert(g_client_rect_calls == 2 && g_get_dc_calls == 1 && g_release_dc_calls == 1); assert(g_draw_score_count == 3); assert(g_drawn_scores[0] == 30 && g_drawn_scores[1] == 2 && g_drawn_scores[2] == 4); assert(g_status_calls == 1 && g_status_player == 2); assert(g_blit_calls == 5 && g_select_object_calls == 7); assert(win16_read_u8(dgroup_at(0x07cb)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bd9)) == 0); assert(g_select_palette_calls == 2 && g_cursor_calls == 1); } static void test_already_redrawn_palette_behavior(void) { reset_calls(); win16_write_u8(dgroup_at(0x07cc), 0); win16_write_u8(win16_far_add_offset(g_window, 0x0bd8), 1); tdkpin_initialize_assets_and_redraw(g_window, 0, 0, 0x1111); assert(g_select_palette_calls == 1); assert(g_unrealize_calls == 1 && g_realize_calls == 1 && g_drain_calls == 1); assert(g_cursor_calls == 0 && g_get_dc_calls == 0); } int main(void) { uint8_t stack_marker; uintptr_t stack_base = (uintptr_t)&stack_marker - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_window_bytes, sizeof(g_window_bytes), true); win16_bind_segment(0x7000, (void *)stack_base, 0x10000, true); win16_set_dgroup_selector(0x5000); g_window = win16_make_far_pointer(0x6000, 0); g_win16_instance = 0x4444; win16_write_u16(dgroup_at(0x444e), 0, 0x2222); win16_write_u16(dgroup_at(0x085b), 0, 0xaaaa); win16_write_u16(g_window, 4, 0x8888); test_asset_loading(); test_redraw(); test_already_redrawn_palette_behavior(); return 0; } <x%"#include "../tdkpin_gameplay_helpers.h" #include #include #include int32_t g_ball_x_milli; int32_t g_ball_y_milli; uint8_t g_borland_cpu_level = 2; _Noreturn void borland_runtime_error(uint16_t code) { (void)code; __builtin_trap(); } _Noreturn void win16_integer_divide_fault(void) { __builtin_trap(); } static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_client_rect_calls; static unsigned g_get_dc_calls; static unsigned g_create_dc_calls; static unsigned g_create_bitmap_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_object_calls; static unsigned g_delete_dc_calls; static unsigned g_release_dc_calls; static INT16 g_expected_x; static INT16 g_expected_y; static INT16 g_expected_height; BOOL16 GetClientRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x2222); assert(rectangle == win16_make_far_pointer(0x7000, 0x00e6)); win16_write_u16(rectangle, 0, 0); win16_write_u16(rectangle, 2, 0); win16_write_u16(rectangle, 4, 640); win16_write_u16(rectangle, 6, 460); g_client_rect_calls++; return 1; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x3333 && g_create_dc_calls < 3); return (HDC16)(0x4001 + g_create_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 100 && height == 100); g_create_bitmap_calls++; return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { switch (g_select_calls++) { case 0: assert(dc == 0x4001 && object == 0x6000); return 0x7001; case 1: assert(dc == 0x4002 && object == 0x5000); return 0x7002; case 2: assert(dc == 0x4001 && object == 0x6100); return 0x6000; case 3: assert(dc == 0x4001 && object == 0x6200); return 0x6100; case 4: assert(dc == 0x4001 && object == 0x7001); return 0x6200; case 5: assert(dc == 0x4002 && object == 0x7002); return 0x5000; default: assert(g_select_calls == 7); assert(dc == 0x4003 && object == 0x7003); return 0; } } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { switch (g_blit_calls++) { case 0: assert(destination == 0x4002); assert(destination_x == 0 && destination_y == 0); assert(width == 19 && height == 19 && source == 0x4001); assert(source_x == g_expected_x && source_y == g_expected_y); assert(raster_operation == 0x00cc0020u); break; case 1: assert(destination == 0x4002 && destination_x == 1); assert(destination_y == 1 && width == 19 && height == 19); assert(source == 0x4001 && source_x == 0 && source_y == 0); assert(raster_operation == 0x008800c6u); break; case 2: assert(destination == 0x4002 && destination_x == 1); assert(destination_y == 1 && width == 19 && height == 19); assert(source == 0x4001 && source_x == 0 && source_y == 0); assert(raster_operation == 0x00ee0086u); break; default: assert(g_blit_calls == 4); assert(destination == 0x3333); assert(destination_x == g_expected_x && destination_y == g_expected_y); assert(width == 19 && height == g_expected_height); assert(source == 0x4002 && source_x == 0 && source_y == 0); assert(raster_operation == 0x00cc0020u); break; } return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); g_delete_object_calls++; return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (HDC16)(0x4001 + g_delete_dc_calls)); g_delete_dc_calls++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } static void reset_counters(void) { g_client_rect_calls = 0; g_get_dc_calls = 0; g_create_dc_calls = 0; g_create_bitmap_calls = 0; g_select_calls = 0; g_blit_calls = 0; g_delete_object_calls = 0; g_delete_dc_calls = 0; g_release_dc_calls = 0; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_stack_u16(0x00fa, 0x7003); win16_write_u16(g_receiver, 4, 0x2222); win16_write_u16(g_receiver, 0x52, 0x6200); win16_write_u16(g_receiver, 0x54, 0x6100); win16_write_u16(win16_dgroup_pointer(0x085b), 0, 0x6000); reset_counters(); } static void assert_complete_gdi_lifecycle(void) { assert(g_client_rect_calls == 1 && g_get_dc_calls == 1); assert(g_create_dc_calls == 3 && g_create_bitmap_calls == 1); assert(g_select_calls == 7 && g_blit_calls == 4); assert(g_delete_object_calls == 1 && g_delete_dc_calls == 3); assert(g_release_dc_calls == 1); assert(win16_read_stack_u16(0x00f4) == 0x3333); assert(win16_read_stack_u16(0x00f2) == 0x4001); assert(win16_read_stack_u16(0x00f0) == 0x4002); assert(win16_read_stack_u16(0x00ee) == 0x4003); assert(win16_read_stack_u16(0x00f8) == 0x5000); assert(win16_read_stack_u16(0x00fe) == 0x7001); assert(win16_read_stack_u16(0x00fc) == 0x7002); } static void test_render_and_bottom_clipping(void) { prepare_fixture(); g_ball_x_milli = 100000; g_ball_y_milli = 440000; g_expected_x = 91; g_expected_y = 431; g_expected_height = 12; tdkpin_render_ball_from_caller_frame(0x0100); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0ba2)) == 92); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0ba6)) == 432); assert(win16_read_stack_u16(0x00d6) == 12); assert_complete_gdi_lifecycle(); prepare_fixture(); g_ball_x_milli = 100000; g_ball_y_milli = 500000; g_expected_x = 91; g_expected_y = 491; g_expected_height = 0; tdkpin_render_ball_from_caller_frame(0x0100); assert(win16_read_stack_u16(0x00d6) == 0); assert_complete_gdi_lifecycle(); } static void test_reset_branches_and_state(void) { prepare_fixture(); static const uint16_t completion_words[5] = { 0x3371, 0x33c4, 0x3417, 0x346a, 0x34bd}; for (unsigned index = 0; index < 5; index++) { win16_write_u16( win16_dgroup_pointer(completion_words[index]), 0, 1); } win16_write_u16(win16_dgroup_pointer(0x0851), 0, 0xaaaa); win16_write_u16(win16_dgroup_pointer(0x0853), 0, 0xbbbb); win16_write_u8(win16_dgroup_pointer(0x07c8), 0); win16_write_u8(win16_dgroup_pointer(0x07c6), 1); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bdd), 1); g_expected_x = 316; g_expected_y = 404; g_expected_height = 19; tdkpin_reset_ball_state(0x0100); assert(win16_read_u16(win16_dgroup_pointer(0x0851)) == 0); assert(win16_read_u16(win16_dgroup_pointer(0x0853)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x07c8)) == 1); assert(win16_read_u8(win16_dgroup_pointer(0x07c6)) == 0); assert(g_ball_x_milli == 325000 && g_ball_y_milli == 413000); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bba)) == 325000u); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bbe)) == 413000u); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bc2)) == 325000u); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bc6)) == 413000u); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0baa)) == 0); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bae)) == 0); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bca)) == 0); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bce)) == 0); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd0)) == 0); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd2)) == 0); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x0bdd)) == 0); assert_complete_gdi_lifecycle(); prepare_fixture(); win16_write_u16(win16_dgroup_pointer(0x3371), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0851), 0, 0xaaaa); win16_write_u16(win16_dgroup_pointer(0x0853), 0, 0xbbbb); win16_write_u8(win16_dgroup_pointer(0x07c8), 7); g_expected_x = 316; g_expected_y = 404; g_expected_height = 19; tdkpin_reset_ball_state(0x0100); assert(win16_read_u16(win16_dgroup_pointer(0x0851)) == 0xaaaa); assert(win16_read_u16(win16_dgroup_pointer(0x0853)) == 0xbbbb); assert(win16_read_u8(win16_dgroup_pointer(0x07c8)) == 7); assert_complete_gdi_lifecycle(); } int main(void) { test_render_and_bottom_clipping(); test_reset_branches_and_state(); return 0; } EXx1#include "../tdkpin_gameplay_helpers.h" #include #include uint8_t g_borland_cpu_level = 2; _Noreturn void borland_runtime_error(uint16_t code) { (void)code; __builtin_trap(); } _Noreturn void win16_integer_divide_fault(void) { __builtin_trap(); } static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_create_dc_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_dc_calls; static unsigned g_release_calls; static bool g_expect_present; BOOL16 GetClientRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x2222); assert(rectangle == win16_make_far_pointer(0x7000, 0x00e6)); return 1; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); return 0x3333; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x3333 && g_create_dc_calls < 3); return (HDC16)(0x4001 + g_create_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 100 && height == 100); return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { switch (g_select_calls++) { case 0: assert(dc == 0x4001 && object == 0x6000); return 0x7001; case 1: assert(dc == 0x4002 && object == 0x5000); return 0x7002; case 2: assert(dc == 0x4001 && object == 0x7001); return 0x6000; case 3: assert(dc == 0x4002 && object == 0x7002); return 0x5000; default: assert(g_select_calls == 5); assert(dc == 0x4003 && object == 0x7003); return 0; } } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(raster_operation == 0x00cc0020u); if (g_blit_calls == 0) { assert(destination == 0x4002 && destination_x == 0); assert(destination_y == 0 && width == 19 && height == 19); assert(source == 0x4001 && source_x == 91 && source_y == 431); } else { assert(g_expect_present && g_blit_calls == 1); assert(destination == 0x3333 && destination_x == 91); assert(destination_y == 431 && width == 19 && height == 12); assert(source == 0x4002 && source_x == 0 && source_y == 0); } g_blit_calls++; return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (HDC16)(0x4001 + g_delete_dc_calls)); g_delete_dc_calls++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_calls++; return 1; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_stack_u16(0x00fa, 0x7003); win16_write_u16(g_receiver, 4, 0x2222); win16_write_u32(g_receiver, 0x0bc2, 100000); win16_write_u32(g_receiver, 0x0bc6, 440000); win16_write_u32(g_receiver, 0x0baa, 0xaaaaaaaau); win16_write_u32(g_receiver, 0x0bae, 0xbbbbbbbbu); win16_write_u16(win16_dgroup_pointer(0x085b), 0, 0x6000); g_create_dc_calls = 0; g_select_calls = 0; g_blit_calls = 0; g_delete_dc_calls = 0; g_release_calls = 0; } static void run_case(uint8_t suppress) { prepare_fixture(); g_expect_present = suppress == 0; tdkpin_restore_previous_ball_region(0x0100, suppress); assert(g_create_dc_calls == 3 && g_select_calls == 5); assert(g_blit_calls == (g_expect_present ? 2u : 1u)); assert(g_delete_dc_calls == 3 && g_release_calls == 1); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0ba2)) == 92); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0ba6)) == 432); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0baa)) == 0); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bae)) == 0); assert(win16_read_stack_u16(0x00d6) == 12); } int main(void) { run_case(0); run_case(1); return 0; } wGx!#include "../tdkpin_gameplay_helpers.h" #include #include int32_t g_ball_x_milli; int32_t g_ball_y_milli; uint8_t g_borland_cpu_level = 2; _Noreturn void borland_runtime_error(uint16_t code) { (void)code; __builtin_trap(); } _Noreturn void win16_integer_divide_fault(void) { __builtin_trap(); } static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_create_dc_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_dc_calls; static INT16 g_dest_x; static INT16 g_dest_y; static INT16 g_source_x; static INT16 g_source_y; static INT16 g_width; static INT16 g_capture_height; static INT16 g_present_height; BOOL16 GetClientRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x2222); assert(rectangle == win16_make_far_pointer(0x7000, 0x00e6)); return 1; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); return 0x3333; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x3333 && g_create_dc_calls < 3); return (HDC16)(0x4001 + g_create_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 100 && height == 100); return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { switch (g_select_calls++) { case 0: assert(dc == 0x4001 && object == 0x6000); return 0x7001; case 1: assert(dc == 0x4002 && object == 0x5000); return 0x7002; case 2: assert(dc == 0x4001 && object == 0x6100); return 0x6000; case 3: assert(dc == 0x4001 && object == 0x6200); return 0x6100; case 4: assert(dc == 0x4001 && object == 0x7001); return 0x6200; case 5: assert(dc == 0x4002 && object == 0x7002); return 0x5000; default: assert(g_select_calls == 7); assert(dc == 0x4003 && object == 0x7003); return 0; } } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { switch (g_blit_calls++) { case 0: assert(destination == 0x4002 && destination_x == 0); assert(destination_y == 0 && width == g_width); assert(height == g_capture_height && source == 0x4001); assert(source_x == g_dest_x && source_y == g_dest_y); assert(raster_operation == 0x00cc0020u); break; case 1: assert(destination == 0x4002 && destination_x == g_source_x); assert(destination_y == g_source_y && width == 19 && height == 19); assert(source == 0x4001 && source_x == 0 && source_y == 0); assert(raster_operation == 0x008800c6u); break; case 2: assert(destination == 0x4002 && destination_x == g_source_x); assert(destination_y == g_source_y && width == 19 && height == 19); assert(source == 0x4001 && source_x == 0 && source_y == 0); assert(raster_operation == 0x00ee0086u); break; default: assert(g_blit_calls == 4); assert(destination == 0x3333 && destination_x == g_dest_x); assert(destination_y == g_dest_y && width == g_width); assert(height == g_present_height && source == 0x4002); assert(source_x == 0 && source_y == 0); assert(raster_operation == 0x00cc0020u); break; } return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (HDC16)(0x4001 + g_delete_dc_calls)); g_delete_dc_calls++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); return 1; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_stack_u16(0x00fa, 0x7003); win16_write_u16(g_receiver, 4, 0x2222); win16_write_u16(g_receiver, 0x52, 0x6200); win16_write_u16(g_receiver, 0x54, 0x6100); win16_write_u16(win16_dgroup_pointer(0x085b), 0, 0x6000); g_create_dc_calls = 0; g_select_calls = 0; g_blit_calls = 0; g_delete_dc_calls = 0; } static void run_case( int32_t current_x, int32_t current_y, int32_t previous_x, int32_t previous_y, INT16 expected_dest_x, INT16 expected_dest_y, INT16 expected_source_x, INT16 expected_source_y, INT16 expected_width, INT16 expected_capture_height, INT16 expected_present_height, int32_t expected_delta_x, int32_t expected_delta_y) { prepare_fixture(); g_ball_x_milli = current_x; g_ball_y_milli = current_y; win16_write_u32(g_receiver, 0x0bc2, (uint32_t)previous_x); win16_write_u32(g_receiver, 0x0bc6, (uint32_t)previous_y); g_dest_x = expected_dest_x; g_dest_y = expected_dest_y; g_source_x = expected_source_x; g_source_y = expected_source_y; g_width = expected_width; g_capture_height = expected_capture_height; g_present_height = expected_present_height; tdkpin_render_ball_swept_region(0x0100); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bb2)) == expected_delta_x); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bb6)) == expected_delta_y); assert(g_create_dc_calls == 3 && g_select_calls == 7); assert(g_blit_calls == 4 && g_delete_dc_calls == 3); } int main(void) { run_case( 120000, 430000, 100000, 440000, 91, 421, 21, 1, 39, 29, 22, 20, -10); run_case( 80000, 400000, 100000, 380000, 71, 371, 1, 21, 39, 39, 39, -20, 20); prepare_fixture(); g_ball_x_milli = 100000; g_ball_y_milli = 400000; g_dest_x = 91; g_dest_y = 381; g_source_x = 21; g_source_y = 1; g_width = 39; g_capture_height = 29; g_present_height = 29; tdkpin_move_ball_and_render(0x0100, 20000, -10000); assert(g_ball_x_milli == 120000 && g_ball_y_milli == 390000); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bc2)) == 100000u); assert(win16_read_u32(win16_far_add_offset(g_receiver, 0x0bc6)) == 400000u); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bb2)) == 20); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bb6)) == -10); return 0; } -Rߵx#include "../tdkpin_palette.h" #include #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_resource[2048]; static uint8_t g_bitmap_info[sizeof(BITMAPINFO256)]; static unsigned g_copy_calls; static unsigned g_step; static unsigned g_allocations; static Win16FarPtr g_stack_header; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } void borland_far_copy( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { assert(count == sizeof(BITMAPINFOHEADER16)); for (uint16_t index = 0; index < count; index++) { win16_write_u8( win16_far_add_offset(destination, index), win16_read_u8(win16_far_add_offset(source, index))); } g_copy_calls++; } Win16FarPtr borland_get_mem(uint16_t bytes) { assert(bytes == sizeof(BITMAPINFO256)); g_allocations++; return win16_make_far_pointer(0x7000, 0); } HRSRC16 FindResource16( HINSTANCE16 instance, Win16FarPtr name, Win16FarPtr type) { assert(++g_step == 1 && instance == 0x4444); assert(name == win16_make_far_pointer(0, 900)); assert(type == dgroup_at(0x045e)); return 0x1111; } HGLOBAL16 LoadResource16(HINSTANCE16 instance, HRSRC16 resource) { assert(++g_step == 2 && instance == 0x4444 && resource == 0x1111); return 0x2222; } Win16FarPtr LockResource16(HGLOBAL16 resource) { assert(++g_step == 3 && resource == 0x2222); return win16_make_far_pointer(0x6000, 0); } HDC16 CreateDC16( Win16FarPtr driver, Win16FarPtr device, Win16FarPtr output, Win16FarPtr initialization_data) { assert(++g_step == 4); assert(driver == dgroup_at(0x0462)); assert(device == 0 && output == 0 && initialization_data == 0); return 0x3333; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x3333 && force_background == 0); if (++g_step == 5) { assert(palette == 0x4444); return 0x5555; } assert(g_step == 9 && palette == 0x5555); return 0x4444; } BOOL16 UnrealizeObject16(HGDIOBJ16 object) { assert(++g_step == 6 && object == 0x4444); return 1; } UINT16 RealizePalette16(HDC16 dc) { assert(++g_step == 7 && dc == 0x3333); return 256; } HBITMAP16 CreateDIBitmap16( HDC16 dc, Win16FarPtr header, uint32_t initialization, Win16FarPtr bits, Win16FarPtr bitmap_info, UINT16 color_usage) { assert(++g_step == 8 && dc == 0x3333); assert(initialization == 4 && color_usage == 0); assert(bits == win16_make_far_pointer(0x6000, 40)); assert(bitmap_info == win16_make_far_pointer(0x7000, 0)); assert(win16_read_u16( win16_far_add_offset(header, offsetof(BITMAPINFOHEADER16, bit_count))) == 8); g_stack_header = header; for (uint16_t index = 0; index < 40; index++) { assert(win16_read_u8(win16_far_add_offset(bitmap_info, index)) == g_resource[index]); } for (uint16_t index = 0; index < 256; index++) { uint16_t color = (uint16_t)(40 + index * 4); assert(win16_read_u8(win16_far_add_offset(bitmap_info, color)) == g_dgroup[0x4452 + index * 3]); assert(win16_read_u8(win16_far_add_offset(bitmap_info, (uint16_t)(color + 1))) == g_dgroup[0x4451 + index * 3]); assert(win16_read_u8(win16_far_add_offset(bitmap_info, (uint16_t)(color + 2))) == g_dgroup[0x4450 + index * 3]); assert(win16_read_u8(win16_far_add_offset(bitmap_info, (uint16_t)(color + 3))) == 0); } return 0x6666; } BOOL16 DeleteDC16(HDC16 dc) { assert(++g_step == 10 && dc == 0x3333); return 1; } BOOL16 GlobalUnlock16(HGLOBAL16 resource) { assert(++g_step == 11 && resource == 0x2222); return 1; } BOOL16 FreeResource16(HGLOBAL16 resource) { assert(++g_step == 12 && resource == 0x2222); return 1; } int main(void) { uint8_t stack_marker; uintptr_t stack_base = (uintptr_t)&stack_marker - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_resource, sizeof(g_resource), true); win16_bind_segment(0x7000, g_bitmap_info, sizeof(g_bitmap_info), true); win16_bind_segment(0x8000, (void *)stack_base, 0x10000, true); win16_set_dgroup_selector(0x5000); memcpy(&g_dgroup[0x045e], "DAT", 4); memcpy(&g_dgroup[0x0462], "Display", 8); win16_write_u16(dgroup_at(0x444e), 0, 0x4444); for (uint16_t index = 0; index < 768; index++) { g_dgroup[0x4450 + index] = (uint8_t)(index * 13 + 9); } memset(g_resource, 0, sizeof(g_resource)); g_resource[0] = 40; g_resource[14] = 8; for (uint16_t index = 40; index < sizeof(g_resource); index++) { g_resource[index] = (uint8_t)(index * 7 + 3); } HBITMAP16 bitmap = tdkpin_load_bitmap_resource( win16_make_far_pointer(0, 900), 0x4444); assert(bitmap == 0x6666 && g_step == 12); assert(g_copy_calls == 2 && g_allocations == 1 && g_stack_header != 0); return 0; } - x g#include "../tdkpin_game_assets.h" #include static uint8_t g_dgroup[0x5000]; static uint8_t g_window_bytes[32]; HINSTANCE16 g_win16_instance; static Win16FarPtr g_window; static unsigned g_setup_step; static unsigned g_draw_step; void object_windows_setup_window(Win16FarPtr window) { assert(++g_setup_step == 1 && window == g_window); } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0); if (win16_far_offset(resource) == 0x7f02) { assert(++g_setup_step == 2); return 0x1111; } assert(++g_draw_step == 10); assert(resource == win16_make_far_pointer(0, 0x7f00)); return 0x2222; } HCURSOR16 SetCursor16(HCURSOR16 cursor) { if (cursor == 0x1111) { assert(++g_setup_step == 3); } else { assert(++g_draw_step == 11 && cursor == 0x2222); } return 0; } HBITMAP16 tdkpin_load_bitmap_resource( Win16FarPtr resource_name, HINSTANCE16 instance) { assert(++g_setup_step == 4); assert(resource_name == win16_make_far_pointer(0, 1005)); assert(instance == g_win16_instance); return 0x3333; } HWND16 SetFocus16(HWND16 window) { assert(++g_setup_step == 5 && window == 0x7777); return 0; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x8888 && force_background == 0); if (++g_draw_step == 1) { assert(palette == 0x4444); return 0x5555; } assert(g_draw_step == 9 && palette == 0x5555); return 0x4444; } BOOL16 UnrealizeObject16(HGDIOBJ16 object) { assert(++g_draw_step == 2 && object == 0x4444); return 1; } UINT16 RealizePalette16(HDC16 dc) { assert(++g_draw_step == 3 && dc == 0x8888); return 256; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(++g_draw_step == 4 && dc == 0x8888); return 0x9999; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { assert(dc == 0x9999); if (++g_draw_step == 5) { assert(object == 0x3333); return 0xaaaa; } assert(g_draw_step == 7 && object == 0xaaaa); return 0x3333; } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(++g_draw_step == 6); assert(destination == 0x8888 && source == 0x9999); assert(destination_x == 0 && destination_y == 0); assert(width == 640 && height == 460); assert(source_x == 0 && source_y == 0); assert(raster_operation == 0x00cc0020); return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(++g_draw_step == 8 && dc == 0x9999); return 1; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_window_bytes, sizeof(g_window_bytes), true); win16_set_dgroup_selector(0x5000); g_window = win16_make_far_pointer(0x6000, 0); g_win16_instance = 0x6666; win16_write_u16(g_window, 4, 0x7777); win16_write_u16(win16_make_far_pointer(0x5000, 0x07cd), 0, 5); win16_write_u16(win16_make_far_pointer(0x5000, 0x444e), 0, 0x4444); tdkpin_setup_board_window(g_window); assert(g_setup_step == 5); assert(win16_read_u16(win16_make_far_pointer(0x5000, 0x0867)) == 0x3333); tdkpin_draw_board_overlay(g_window, 0xbeef, 0xcafe, 0x8888); assert(g_draw_step == 11); return 0; }  xbQ#include "../tdkpin_borland_files.h" #include #include _Atomic uint16_t g_borland_io_result; uint8_t g_borland_file_mode = 2; static Win16FarPtr g_open_proc; static Win16FarPtr g_flush_proc; static Win16FarPtr g_close_proc; static uint16_t g_open_result; static uint16_t g_flush_result; static uint16_t g_close_result; static Win16FarPtr g_call_order[8]; static unsigned g_call_count; static Win16DosResult g_dos_read_result; static Win16DosResult g_dos_write_result; static Win16DosResult g_dos_close_result; static uint16_t g_dos_handle; static Win16FarPtr g_dos_buffer; static uint16_t g_dos_count; static unsigned g_dos_calls; static Win16DosResult g_dos_seek_result; static uint32_t g_seek_offset; static uint8_t g_seek_origin; static Win16DosResult g_dos_open_result; static Win16DosResult g_dos_create_result; static Win16DosExtendedResult g_dos_extended_seek_results[4]; static unsigned g_dos_extended_seek_count; static unsigned g_dos_extended_seek_index; static Win16DosExtendedResult g_dos_device_info_result; static Win16FarPtr g_dos_name; static uint16_t g_dos_open_argument; static uint32_t g_extended_seek_offsets[4]; static uint8_t g_extended_seek_origins[4]; static Win16FarPtr g_last_write_buffer; enum DosOperation { DOS_OPERATION_READ, DOS_OPERATION_WRITE, DOS_OPERATION_CLOSE, DOS_OPERATION_SEEK, DOS_OPERATION_OPEN, DOS_OPERATION_CREATE, DOS_OPERATION_SEEK_EXTENDED, DOS_OPERATION_DEVICE_INFO, }; static enum DosOperation g_dos_operations[16]; static void record_dos_operation(enum DosOperation operation) { assert(g_dos_calls < sizeof(g_dos_operations) / sizeof(*g_dos_operations)); g_dos_operations[g_dos_calls++] = operation; } uint16_t win16_call_file_procedure( Win16FarPtr procedure, Win16FarPtr record) { assert(record == win16_make_far_pointer(0x7000, 2)); g_call_order[g_call_count++] = procedure; if (procedure == g_open_proc) return g_open_result; if (procedure == g_flush_proc) return g_flush_result; assert(procedure == g_close_proc); return g_close_result; } static void write_far( Win16FarPtr record, uint16_t offset, Win16FarPtr procedure) { win16_write_u16(record, offset, win16_far_offset(procedure)); win16_write_u16(record, (uint16_t)(offset + 2), win16_far_selector(procedure)); } static void reset_calls(void) { g_call_count = 0; g_open_result = 0; g_flush_result = 0; g_close_result = 0; atomic_store(&g_borland_io_result, 0); g_dos_calls = 0; g_dos_extended_seek_count = 0; g_dos_extended_seek_index = 0; } Win16DosResult win16_dos_read( uint16_t handle, Win16FarPtr buffer, uint16_t count) { g_dos_handle = handle; g_dos_buffer = buffer; g_dos_count = count; record_dos_operation(DOS_OPERATION_READ); return g_dos_read_result; } Win16DosResult win16_dos_write( uint16_t handle, Win16FarPtr buffer, uint16_t count) { g_dos_handle = handle; g_dos_buffer = buffer; g_last_write_buffer = buffer; g_dos_count = count; record_dos_operation(DOS_OPERATION_WRITE); return g_dos_write_result; } Win16DosResult win16_dos_close(uint16_t handle) { g_dos_handle = handle; record_dos_operation(DOS_OPERATION_CLOSE); return g_dos_close_result; } Win16DosResult win16_dos_seek( uint16_t handle, uint32_t offset, uint8_t origin) { g_dos_handle = handle; g_seek_offset = offset; g_seek_origin = origin; record_dos_operation(DOS_OPERATION_SEEK); return g_dos_seek_result; } _Noreturn void win16_integer_divide_fault(void) { assert(false); __builtin_unreachable(); } Win16DosResult win16_dos_open(Win16FarPtr name, uint8_t access_mode) { g_dos_name = name; g_dos_open_argument = access_mode; record_dos_operation(DOS_OPERATION_OPEN); return g_dos_open_result; } Win16DosResult win16_dos_create(Win16FarPtr name, uint16_t attributes) { g_dos_name = name; g_dos_open_argument = attributes; record_dos_operation(DOS_OPERATION_CREATE); return g_dos_create_result; } Win16DosExtendedResult win16_dos_seek_extended( uint16_t handle, uint32_t offset, uint8_t origin) { assert(g_dos_extended_seek_index < g_dos_extended_seek_count); unsigned index = g_dos_extended_seek_index++; g_dos_handle = handle; g_extended_seek_offsets[index] = offset; g_extended_seek_origins[index] = origin; record_dos_operation(DOS_OPERATION_SEEK_EXTENDED); return g_dos_extended_seek_results[index]; } Win16DosExtendedResult win16_dos_get_device_info(uint16_t handle) { g_dos_handle = handle; record_dos_operation(DOS_OPERATION_DEVICE_INFO); return g_dos_device_info_result; } int main(void) { static uint8_t record_bytes[512]; static uint8_t code_bytes[0x700]; win16_reset_segment_bindings(); win16_bind_segment(0x7000, record_bytes, sizeof(record_bytes), true); win16_bind_ne_segment( 5, 0x6000, code_bytes, sizeof(code_bytes), false); Win16FarPtr record = win16_make_far_pointer(0x7000, 2); g_open_proc = win16_make_far_pointer(0x6000, 0x1000); g_flush_proc = win16_make_far_pointer(0x6000, 0x2000); g_close_proc = win16_make_far_pointer(0x6000, 0x3000); write_far(record, 0x10, g_open_proc); write_far(record, 0x14, g_flush_proc); write_far(record, 0x1c, g_close_proc); reset_calls(); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); win16_write_u16(record, 8, 9); win16_write_u16(record, 10, 10); borland_reset_file(record); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_INPUT); assert(win16_read_u16(win16_far_add_offset(record, 8)) == 0); assert(win16_read_u16(win16_far_add_offset(record, 10)) == 0); assert(g_call_count == 1 && g_call_order[0] == g_open_proc); reset_calls(); g_open_result = 5; win16_write_u16(record, 2, BORLAND_FILE_CLOSED); borland_rewrite_file(record); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); assert(atomic_load(&g_borland_io_result) == 5); reset_calls(); win16_write_u16(record, 2, BORLAND_FILE_OUTPUT); g_flush_result = 6; borland_close_file(record); assert(g_call_count == 2); assert(g_call_order[0] == g_flush_proc && g_call_order[1] == g_close_proc); assert(atomic_load(&g_borland_io_result) == 6); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); reset_calls(); win16_write_u16(record, 2, BORLAND_FILE_INPUT); borland_close_file(record); assert(g_call_count == 1 && g_call_order[0] == g_close_proc); reset_calls(); win16_write_u16(record, 2, 0x1111); borland_close_file(record); assert(g_call_count == 0 && atomic_load(&g_borland_io_result) == 0x67); atomic_store(&g_borland_io_result, 0); borland_reset_file(record); assert(g_call_count == 0 && atomic_load(&g_borland_io_result) == 0x66); reset_calls(); win16_write_u16(record, 2, BORLAND_FILE_OUTPUT); borland_reset_file(record); assert(g_call_count == 3); assert(g_call_order[0] == g_flush_proc); assert(g_call_order[1] == g_close_proc); assert(g_call_order[2] == g_open_proc); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_INPUT); Win16FarPtr buffer = win16_make_far_pointer(0x7100, 0x0200); win16_write_u16(record, 0, 9); win16_write_u16(record, 4, 100); write_far(record, 12, buffer); win16_write_u16(record, 8, 7); g_dos_read_result = (Win16DosResult){60, false}; reset_calls(); assert(borland_file_read_buffer(record) == 0); assert(g_dos_handle == 9 && g_dos_buffer == buffer && g_dos_count == 100); assert(win16_read_u16(win16_far_add_offset(record, 8)) == 0); assert(win16_read_u16(win16_far_add_offset(record, 10)) == 60); g_dos_read_result = (Win16DosResult){5, true}; assert(borland_file_read_buffer(record) == 5); assert(win16_read_u16(win16_far_add_offset(record, 10)) == 0); win16_write_u16(record, 8, 20); g_dos_write_result = (Win16DosResult){20, false}; reset_calls(); assert(borland_file_flush_buffer(record) == 0); assert(g_dos_count == 20); assert(win16_read_u16(win16_far_add_offset(record, 8)) == 0); win16_write_u16(record, 8, 20); g_dos_write_result = (Win16DosResult){19, false}; assert(borland_file_flush_buffer(record) == 0x65); win16_write_u16(record, 8, 20); g_dos_write_result = (Win16DosResult){6, true}; assert(borland_file_flush_buffer(record) == 6); win16_write_u16(record, 8, 20); g_dos_write_result = (Win16DosResult){19, false}; assert(borland_file_write_buffer(record) == 0); win16_write_u16(record, 8, 20); g_dos_write_result = (Win16DosResult){7, true}; assert(borland_file_write_buffer(record) == 7); win16_write_u16(record, 0, 4); reset_calls(); assert(borland_file_close_handle(record) == 0 && g_dos_calls == 0); win16_write_u16(record, 0, 9); g_dos_close_result = (Win16DosResult){0, false}; assert(borland_file_close_handle(record) == 0 && g_dos_calls == 1); g_dos_close_result = (Win16DosResult){8, true}; assert(borland_file_close_handle(record) == 8); atomic_store(&g_borland_io_result, 0); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); assert(!borland_validate_open_file(record)); assert(atomic_load(&g_borland_io_result) == 0x67); unsigned dos_calls = g_dos_calls; borland_truncate_file(record); assert(g_dos_calls == dos_calls); atomic_store(&g_borland_io_result, 0); win16_set_indeterminate_u16(0xbeef); win16_write_u16(record, 0, 9); win16_write_u16(record, 2, 0xd7b3); g_dos_write_result = (Win16DosResult){0, false}; borland_truncate_file(record); assert(g_dos_count == 0); assert(g_dos_buffer == win16_make_far_pointer(0xbeef, 0xbeef)); g_dos_write_result = (Win16DosResult){9, true}; borland_truncate_file(record); assert(atomic_load(&g_borland_io_result) == 9); atomic_store(&g_borland_io_result, 0); g_dos_close_result = (Win16DosResult){10, true}; borland_close_generic_file(record); assert(atomic_load(&g_borland_io_result) == 10); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); win16_write_u16(record, 0, 4); win16_write_u16(record, 2, 0xd7b3); dos_calls = g_dos_calls; borland_close_generic_file(record); assert(g_dos_calls == dos_calls); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); Win16FarPtr transfer = win16_make_far_pointer(0x7100, 0x0200); static uint8_t transfer_bytes[0x400]; win16_bind_segment( 0x7100, transfer_bytes, sizeof(transfer_bytes), true); win16_write_u16(record, 0, 9); win16_write_u16(record, 2, 0xd7b3); win16_write_u16(record, 4, 4); atomic_store(&g_borland_io_result, 0); g_dos_read_result = (Win16DosResult){4, false}; borland_file_read_record(transfer, record); assert(atomic_load(&g_borland_io_result) == 0); g_dos_read_result = (Win16DosResult){3, false}; borland_file_read_record(transfer, record); assert(atomic_load(&g_borland_io_result) == 0x64); atomic_store(&g_borland_io_result, 0); g_dos_write_result = (Win16DosResult){3, false}; borland_file_write_record(transfer, record); assert(atomic_load(&g_borland_io_result) == 0x65); atomic_store(&g_borland_io_result, 0); g_dos_write_result = (Win16DosResult){11, true}; borland_file_write_record(transfer, record); assert(atomic_load(&g_borland_io_result) == 11); Win16FarPtr result_count = win16_make_far_pointer(0x7100, 0); atomic_store(&g_borland_io_result, 0); g_dos_read_result = (Win16DosResult){8, false}; borland_file_block_read(result_count, 3, transfer, record); assert(win16_read_u16(result_count) == 2); assert(atomic_load(&g_borland_io_result) == 0); borland_file_block_read(0, 3, transfer, record); assert(atomic_load(&g_borland_io_result) == 0x64); atomic_store(&g_borland_io_result, 0); g_dos_write_result = (Win16DosResult){8, false}; borland_file_block_write(0, 3, transfer, record); assert(atomic_load(&g_borland_io_result) == 0x65); borland_file_block_write(result_count, 3, transfer, record); assert(win16_read_u16(result_count) == 2); g_dos_seek_result = (Win16DosResult){0, false}; borland_file_seek_record(0x00010002u, record); assert(g_seek_offset == 0x00040008u && g_seek_origin == 0); g_dos_seek_result = (Win16DosResult){12, true}; borland_file_seek_record(3, record); assert(atomic_load(&g_borland_io_result) == 12); Win16FarPtr name = win16_far_add_offset(record, 48); win16_write_u8(name, 'F'); win16_write_u8(win16_far_add_offset(name, 1), 0); atomic_store(&g_borland_io_result, 0); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); g_dos_open_result = (Win16DosResult){15, false}; reset_calls(); borland_open_generic_file(4, record); assert(g_dos_name == name && g_dos_open_argument == 2); assert(win16_read_u16(record) == 15); assert(win16_read_u16(win16_far_add_offset(record, 2)) == 0xd7b3); assert(win16_read_u16(win16_far_add_offset(record, 4)) == 4); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); g_dos_create_result = (Win16DosResult){16, false}; borland_create_generic_file(8, record); assert(g_dos_open_argument == 0 && win16_read_u16(record) == 16); win16_write_u8(name, 0); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); reset_calls(); borland_open_generic_file(4, record); assert(g_dos_calls == 0 && win16_read_u16(record) == 0); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); borland_create_generic_file(4, record); assert(g_dos_calls == 0 && win16_read_u16(record) == 1); win16_write_u8(name, 'F'); win16_write_u16(record, 2, BORLAND_FILE_CLOSED); atomic_store(&g_borland_io_result, 0); g_dos_open_result = (Win16DosResult){13, true}; borland_open_generic_file(4, record); assert(atomic_load(&g_borland_io_result) == 13); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); atomic_store(&g_borland_io_result, 0); win16_write_u16(record, 2, 0x1111); borland_open_generic_file(4, record); assert(atomic_load(&g_borland_io_result) == 0x66); win16_write_u16(record, 2, 0xd7b3); win16_write_u16(record, 0, 9); g_dos_close_result = (Win16DosResult){0, false}; g_dos_open_result = (Win16DosResult){17, false}; reset_calls(); borland_open_generic_file(4, record); assert(g_dos_calls == 2 && win16_read_u16(record) == 17); assert(tdkpin_file_close_noop(record) == 0); Win16FarPtr text_name = win16_far_add_offset(record, 0x30); Win16FarPtr read_buffer_proc = win16_make_far_pointer(0x6000, 0x05d8); Win16FarPtr flush_buffer_proc = win16_make_far_pointer(0x6000, 0x0608); Win16FarPtr write_buffer_proc = win16_make_far_pointer(0x6000, 0x062d); Win16FarPtr close_handle_proc = win16_make_far_pointer(0x6000, 0x064d); reset_calls(); win16_write_u8(text_name, 'I'); win16_write_u8(win16_far_add_offset(text_name, 1), 0); win16_write_u16(record, 2, BORLAND_FILE_INPUT); g_dos_open_result = (Win16DosResult){7, false}; assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 1 && g_dos_operations[0] == DOS_OPERATION_OPEN); assert(g_dos_open_argument == 0 && win16_read_u16(record) == 7); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_INPUT); assert(win16_read_far_pointer(record, 0x14) == read_buffer_proc); assert(win16_read_far_pointer(record, 0x18) == 0); assert(win16_read_far_pointer(record, 0x1c) == close_handle_proc); reset_calls(); win16_write_u8(text_name, 'O'); win16_write_u16(record, 2, BORLAND_FILE_OUTPUT); g_dos_create_result = (Win16DosResult){8, false}; g_dos_device_info_result = (Win16DosExtendedResult){0, 0, false}; assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 2); assert(g_dos_operations[0] == DOS_OPERATION_CREATE); assert(g_dos_operations[1] == DOS_OPERATION_DEVICE_INFO); assert(g_dos_open_argument == 0 && win16_read_u16(record) == 8); assert(win16_read_far_pointer(record, 0x14) == flush_buffer_proc); assert(win16_read_far_pointer(record, 0x18) == 0); assert(win16_read_far_pointer(record, 0x1c) == close_handle_proc); reset_calls(); win16_write_u8(text_name, 'A'); win16_write_u16(record, 2, BORLAND_TEXT_APPEND); g_dos_open_result = (Win16DosResult){9, false}; g_dos_device_info_result = (Win16DosExtendedResult){5, 0x0080, true}; assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 2); assert(g_dos_operations[0] == DOS_OPERATION_OPEN); assert(g_dos_operations[1] == DOS_OPERATION_DEVICE_INFO); assert(g_dos_open_argument == 2 && win16_read_u16(record) == 9); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_OUTPUT); assert(win16_read_far_pointer(record, 0x14) == write_buffer_proc); assert(win16_read_far_pointer(record, 0x18) == write_buffer_proc); reset_calls(); win16_write_u8(text_name, 'A'); win16_write_u16(record, 2, BORLAND_TEXT_APPEND); g_dos_open_result = (Win16DosResult){10, false}; g_dos_device_info_result = (Win16DosExtendedResult){0, 0, false}; g_dos_extended_seek_count = 3; g_dos_extended_seek_results[0] = (Win16DosExtendedResult){0x0090, 0x0001, false}; g_dos_extended_seek_results[1] = (Win16DosExtendedResult){0, 0, false}; g_dos_extended_seek_results[2] = (Win16DosExtendedResult){0x000c, 0x1234, false}; g_dos_read_result = (Win16DosResult){6, false}; Win16FarPtr text_buffer = win16_far_add_offset(record, 0x80); for (uint16_t index = 0; index < 6; index++) { win16_write_u8(win16_far_add_offset(text_buffer, index), 'x'); } win16_write_u8(win16_far_add_offset(text_buffer, 2), 0x1a); g_dos_write_result = (Win16DosResult){0, false}; assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 7 && g_dos_extended_seek_index == 3); assert(g_dos_operations[0] == DOS_OPERATION_OPEN); assert(g_dos_operations[1] == DOS_OPERATION_DEVICE_INFO); assert(g_dos_operations[2] == DOS_OPERATION_SEEK_EXTENDED); assert(g_dos_operations[3] == DOS_OPERATION_SEEK_EXTENDED); assert(g_dos_operations[4] == DOS_OPERATION_READ); assert(g_dos_operations[5] == DOS_OPERATION_SEEK_EXTENDED); assert(g_dos_operations[6] == DOS_OPERATION_WRITE); assert(g_extended_seek_offsets[0] == 0 && g_extended_seek_origins[0] == 2); assert(g_extended_seek_offsets[1] == 0x00010010u && g_extended_seek_origins[1] == 0); assert(g_extended_seek_offsets[2] == 0xfffffffcu && g_extended_seek_origins[2] == 2); assert(g_dos_count == 0); assert(g_last_write_buffer == win16_make_far_pointer(0x7000, 0x1234)); assert(win16_read_far_pointer(record, 0x14) == flush_buffer_proc); assert(win16_read_far_pointer(record, 0x18) == 0); reset_calls(); win16_write_u8(text_name, 0); win16_write_u16(record, 2, BORLAND_FILE_INPUT); assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 0 && win16_read_u16(record) == 0); win16_write_u16(record, 2, BORLAND_FILE_OUTPUT); g_dos_device_info_result = (Win16DosExtendedResult){0, 0x0080, false}; assert(borland_open_text_record(record) == 0); assert(g_dos_calls == 1 && win16_read_u16(record) == 1); reset_calls(); win16_write_u8(text_name, 'E'); win16_write_u16(record, 2, BORLAND_FILE_INPUT); write_far(record, 0x14, win16_make_far_pointer(0x1111, 0x2222)); g_dos_open_result = (Win16DosResult){13, true}; assert(borland_open_text_record(record) == 13); assert(g_dos_calls == 1 && win16_read_u16(record) == 0); assert(win16_read_far_pointer(record, 0x14) == win16_make_far_pointer(0x1111, 0x2222)); reset_calls(); win16_write_u16(record, 0, 11); g_dos_extended_seek_count = 2; g_dos_extended_seek_results[0] = (Win16DosExtendedResult){4, 0, true}; g_dos_extended_seek_results[1] = (Win16DosExtendedResult){0, 0, true}; g_dos_read_result = (Win16DosResult){5, true}; borland_text_truncate_at_ctrl_z(record); assert(g_dos_calls == 3 && g_dos_extended_seek_index == 2); assert(g_extended_seek_offsets[1] == 0); assert(g_dos_operations[2] == DOS_OPERATION_READ); return 0; } Yx #include "../tdkpin_borland_objects.h" #include #include #include static BorlandAllocationAttempt g_allocation; static Win16FarPtr g_freed_object; static uint16_t g_freed_size; static bool g_free_failed; static jmp_buf g_runtime_error_jump; static uint16_t g_runtime_error_code; static Win16FarPtr g_called_destructor; static Win16FarPtr g_destructor_object; static uint16_t g_dispose_mode; BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes) { assert(bytes == 16); return g_allocation; } bool borland_try_free_mem(Win16FarPtr object, uint16_t bytes) { g_freed_object = object; g_freed_size = bytes; return g_free_failed; } _Noreturn void borland_runtime_error(uint16_t code) { g_runtime_error_code = code; longjmp(g_runtime_error_jump, 1); } void win16_call_object_destructor( Win16FarPtr procedure, Win16FarPtr object, uint16_t dispose_mode) { g_called_destructor = procedure; g_destructor_object = object; g_dispose_mode = dispose_mode; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t existing_bytes[64]; static uint8_t allocated_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment( 0x7000, existing_bytes, sizeof(existing_bytes), true); win16_bind_segment( 0x7100, allocated_bytes, sizeof(allocated_bytes), true); win16_write_u16(win16_make_far_pointer(0x5000, 0x0200), 0, 16); BorlandObjectCallFrame existing = { win16_make_far_pointer(0x7000, 4), 0x0200}; borland_enter_object_constructor(&existing, 2); assert(existing.object == win16_make_far_pointer(0x7000, 4)); assert(existing.vmt_argument == 0); assert(win16_read_u16(win16_make_far_pointer(0x7000, 6)) == 0x0200); g_allocation = (BorlandAllocationAttempt){ win16_make_far_pointer(0x7100, 8), false}; BorlandObjectCallFrame allocated = {0, 0x0200}; borland_enter_object_constructor(&allocated, 2); assert(allocated.object == win16_make_far_pointer(0x7100, 8)); assert(allocated.vmt_argument == 0x0200); assert(win16_read_u16(win16_make_far_pointer(0x7100, 10)) == 0x0200); BorlandObjectCallFrame inactive = { win16_make_far_pointer(0x7000, 20), 0}; borland_enter_object_constructor(&inactive, 0); assert(inactive.object == win16_make_far_pointer(0x7000, 20)); g_allocation = (BorlandAllocationAttempt){0, false}; BorlandObjectCallFrame suppressed = {0, 0x0200}; borland_enter_object_constructor(&suppressed, 0); assert(suppressed.object == 0 && suppressed.vmt_argument == 0x0200); g_allocation = (BorlandAllocationAttempt){0, true}; if (setjmp(g_runtime_error_jump) == 0) { borland_enter_object_constructor(&suppressed, 0); assert(false); } assert(g_runtime_error_code == 203); win16_write_u16(win16_make_far_pointer(0x7000, 4), 0, 0x0200); BorlandObjectCallFrame destroyed = { win16_make_far_pointer(0x7000, 4), 1}; g_free_failed = false; borland_finish_object_destructor(&destroyed, 0); assert(destroyed.object == 0); assert(g_freed_object == win16_make_far_pointer(0x7000, 4)); assert(g_freed_size == 16); BorlandObjectCallFrame borrowed = { win16_make_far_pointer(0x7000, 4), 0}; g_freed_object = 0; borland_finish_object_destructor(&borrowed, 0); assert(borrowed.object == win16_make_far_pointer(0x7000, 4)); assert(g_freed_object == 0); g_free_failed = true; destroyed.object = win16_make_far_pointer(0x7000, 4); if (setjmp(g_runtime_error_jump) == 0) { borland_finish_object_destructor(&destroyed, 0); assert(false); } assert(g_runtime_error_code == 204); g_allocation = (BorlandAllocationAttempt){ win16_make_far_pointer(0x7100, 8), false}; assert(borland_default_object_constructor(0, 0x0200) == win16_make_far_pointer(0x7100, 8)); g_free_failed = false; g_freed_object = 0; borland_default_object_destructor( win16_make_far_pointer(0x7000, 4), 1); assert(g_freed_object == win16_make_far_pointer(0x7000, 4)); assert(g_freed_size == 16); Win16FarPtr destructor = win16_make_far_pointer(0x6000, 0x1234); win16_write_u16(win16_make_far_pointer(0x5000, 0x0208), 0, win16_far_offset(destructor)); win16_write_u16(win16_make_far_pointer(0x5000, 0x020a), 0, win16_far_selector(destructor)); borland_dispose_object(win16_make_far_pointer(0x7000, 4)); assert(g_called_destructor == destructor); assert(g_destructor_object == win16_make_far_pointer(0x7000, 4)); assert(g_dispose_mode == 1); if (setjmp(g_runtime_error_jump) == 0) { borland_abstract_method_error(); assert(false); } assert(g_runtime_error_code == 211); if (setjmp(g_runtime_error_jump) == 0) { object_windows_abstract_method(); assert(false); } assert(g_runtime_error_code == 211); return 0; } zx. #include "../tdkpin_borland_records.h" #include #include #include static jmp_buf g_error_jump; static uint16_t g_error_code; static unsigned g_ansi_calls; _Noreturn void borland_runtime_error(uint16_t code) { g_error_code = code; longjmp(g_error_jump, 1); } INT16 AnsiToOem16(Win16FarPtr source, Win16FarPtr destination) { assert(source == destination); assert(win16_far_offset(source) == 0x230); g_ansi_calls++; return 1; } static void expect_vmt_error(Win16FarPtr vmt) { g_error_code = 0; if (setjmp(g_error_jump) == 0) { borland_validate_vmt_descriptor(vmt); assert(false); } assert(g_error_code == 210); } int main(void) { static uint8_t data[0x400]; static uint8_t code[0x1000]; win16_reset_segment_bindings(); win16_bind_segment(0x7000, data, sizeof(data), true); win16_bind_ne_segment(5, 0x6000, code, sizeof(code), false); Win16FarPtr vmt = win16_make_far_pointer(0x7000, 0); win16_write_u16(vmt, 0, 18); win16_write_u16(vmt, 2, (uint16_t)-18); borland_validate_vmt_descriptor(vmt); win16_write_u16(vmt, 0, 0); expect_vmt_error(vmt); win16_write_u16(vmt, 0, 18); win16_write_u16(vmt, 2, (uint16_t)-17); expect_vmt_error(vmt); Win16FarPtr source = win16_make_far_pointer(0x7000, 0x100); Win16FarPtr record = win16_make_far_pointer(0x7000, 0x200); memcpy(&data[0x100], "name.txt", 9); g_ansi_calls = 0; borland_assign_text_c(source, record); assert(win16_read_u16(record) == 0); assert(win16_read_u16(win16_far_add_offset(record, 2)) == 0xd7b0); assert(win16_read_u16(win16_far_add_offset(record, 4)) == 128); assert(win16_read_far_pointer(record, 12) == win16_make_far_pointer(0x7000, 0x280)); assert(win16_read_far_pointer(record, 16) == win16_make_far_pointer(0x6000, 0x0be9)); assert(memcmp(&data[0x230], "name.txt", 9) == 0); assert(g_ansi_calls == 1); memset(&data[0x200], 0xcc, 128); data[0x100] = 3; memcpy(&data[0x101], "abc", 3); borland_assign_text_short(source, record); assert(memcmp(&data[0x230], "abc", 4) == 0); for (uint16_t offset = 20; offset < 48; offset++) { assert(data[0x200 + offset] == 0); } memset(&data[0x200], 0xcc, 32); borland_initialize_file_record(1, 2, 3, record); assert(win16_read_u16(win16_far_add_offset(record, 4)) == 1); assert(win16_read_u16(win16_far_add_offset(record, 8)) == 0); assert(win16_read_u16(win16_far_add_offset(record, 10)) == 0); assert(win16_read_u16(win16_far_add_offset(record, 12)) == 2); assert(win16_read_u16(win16_far_add_offset(record, 14)) == 3); memset(&data[0x200], 0xcc, 128); data[0x100] = 4; memcpy(&data[0x101], "file", 4); borland_assign_file_short(source, record); assert(win16_read_u16(record) == 0); assert(win16_read_u16(win16_far_add_offset(record, 2)) == 0xd7b0); for (uint16_t offset = 4; offset < 48; offset++) { assert(data[0x200 + offset] == 0); } assert(memcmp(&data[0x230], "file", 5) == 0); memset(&data[0x101], 'x', 100); data[0x100] = 100; borland_assign_file_short(source, record); for (uint16_t index = 0; index < 79; index++) { assert(data[0x230 + index] == 'x'); } assert(data[0x230 + 79] == 0); return 0; } KV xm #include "../tdkpin_borland_startup.h" #include #include HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_borland_command_line; uint16_t g_borland_windows_mode; uint16_t g_borland_huge_pointer_increment; uint8_t g_borland_cpu_level; static jmp_buf g_termination_jump; static uint8_t g_termination_status; static unsigned g_call_count; static uint16_t g_init_app_result; static uint32_t g_win_flags; static BorlandWin16StartupRegisters g_expected; void WaitEvent16(uint16_t event) { assert(g_call_count++ == 0); assert(event == 0); assert(g_win16_previous_instance == g_expected.previous_instance); assert(g_win16_instance == g_expected.instance); assert(g_win16_show_command == g_expected.show_command); assert(g_borland_command_line == g_expected.command_line); assert(g_borland_windows_mode == win16_far_selector(g_expected.command_line)); } uint16_t InitApp16(HINSTANCE16 instance) { assert(g_call_count++ == 1); assert(instance == g_expected.instance); return g_init_app_result; } uint32_t GetWinFlags16(void) { assert(g_call_count++ == 2); return g_win_flags; } _Noreturn void win16_dos_terminate(uint8_t status) { g_termination_status = status; longjmp(g_termination_jump, 1); } static void run_success(uint32_t flags, uint8_t expected_cpu_level) { g_call_count = 0; g_init_app_result = 1; g_win_flags = flags; g_borland_huge_pointer_increment = 0; borland_initialize_win16_runtime(&g_expected); assert(g_call_count == 3); assert(g_borland_cpu_level == expected_cpu_level); assert(g_borland_huge_pointer_increment == 8); } int main(void) { g_expected = (BorlandWin16StartupRegisters){ .loader_ax = 1, .command_line = win16_make_far_pointer(0x3456, 0x789a), .show_command = 7, .previous_instance = 0x1111, .instance = 0x2222, }; run_success(0x40, 0); /* WF_CPU086 */ run_success(0x02, 1); /* WF_CPU286 */ run_success(0x04, 2); /* WF_CPU386 */ run_success(0x0104, 2); /* only AL participates */ g_expected.loader_ax = 0; g_call_count = 0; g_win16_instance = 0xaaaa; if (setjmp(g_termination_jump) == 0) { borland_initialize_win16_runtime(&g_expected); assert(false); } assert(g_termination_status == 0xff); assert(g_call_count == 0 && g_win16_instance == 0xaaaa); g_expected.loader_ax = 1; g_call_count = 0; g_init_app_result = 0; g_borland_huge_pointer_increment = 0xaaaa; if (setjmp(g_termination_jump) == 0) { borland_initialize_win16_runtime(&g_expected); assert(false); } assert(g_termination_status == 0xff); assert(g_call_count == 2); assert(g_win16_instance == g_expected.instance); assert(g_borland_huge_pointer_increment == 0xaaaa); return 0; } ҽx #include "../tdkpin_object_windows.h" #include #include uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_dispatch_proc; static uint8_t g_pool[0x100]; static HGLOBAL16 g_allocation = 0x1234; static unsigned g_allocations; static unsigned g_alias_allocations; static unsigned g_alias_frees; static unsigned g_presto_calls; HGLOBAL16 GlobalAlloc16(UINT16 flags, uint32_t bytes) { assert(flags == 0 && bytes == sizeof(g_pool)); g_allocations++; return g_allocation; } Win16FarPtr GlobalLock16(HGLOBAL16 allocation) { assert(allocation == g_allocation); return win16_make_far_pointer(0x8000, 0); } uint16_t AllocCStoDSAlias16(uint16_t code_selector) { assert(code_selector == 0x8000); g_alias_allocations++; return 0x8100; } uint16_t FreeSelector16(uint16_t selector) { assert(selector == 0x8100); g_alias_frees++; return 0; } uint16_t PrestoChangoSelector16( uint16_t source_selector, uint16_t destination_selector) { assert(source_selector == 0x8000 && destination_selector == 0x8000); g_presto_calls++; return 0x8000; } int main(void) { static uint8_t dgroup[0x1000]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x8000, g_pool, sizeof(g_pool), true); win16_bind_segment(0x8100, g_pool, sizeof(g_pool), true); const uint8_t template_bytes[5] = {0x5b, 0x2e, 0xc4, 0x1f, 0xea}; memcpy(&dgroup[0x0686], template_bytes, sizeof(template_bytes)); g_object_windows_dispatch_proc = win16_make_far_pointer(0x6000, 0x1234); Win16FarPtr first_object = win16_make_far_pointer(0x7000, 0x0020); Win16FarPtr first = object_windows_allocate_bound_thunk(first_object); assert(first == win16_make_far_pointer(0x8000, 0x00f9)); assert(g_allocations == 1 && g_presto_calls == 1); assert(win16_read_u16(win16_make_far_pointer(0x8000, 0)) == 0); for (uint16_t index = 0; index < sizeof(template_bytes); index++) { assert(win16_read_u8( win16_make_far_pointer(0x8000, (uint16_t)(2 + index))) == template_bytes[index]); } assert(win16_read_far_pointer( win16_make_far_pointer(0x8000, 7), 0) == g_object_windows_dispatch_proc); assert(win16_read_u8(first) == 0xe8); assert(win16_read_u16(win16_far_add_offset(first, 1)) == 0xff06); assert(win16_read_far_pointer(first, 3) == first_object); assert(g_object_windows_free_thunk == win16_make_far_pointer(0x8000, 0x00f2)); Win16FarPtr second_object = win16_make_far_pointer(0x7000, 0x0040); Win16FarPtr second = object_windows_allocate_bound_thunk(second_object); assert(second == win16_make_far_pointer(0x8000, 0x00f2)); assert(win16_read_far_pointer(second, 3) == second_object); assert(g_allocations == 1); object_windows_release_bound_thunk(first); assert(g_object_windows_free_thunk == first); assert(win16_read_far_pointer(first, 3) == win16_make_far_pointer(0x8000, 0x00eb)); assert(object_windows_allocate_bound_thunk(first_object) == first); assert(g_alias_allocations == 4 && g_alias_frees == 4); return 0; } ZF7x#include "../tdkpin_object_list.h" #include #include static Win16FarPtr g_false_child; static HWND16 g_iconic_window; static unsigned g_get_text_calls; static unsigned g_set_text_calls; static Win16FarPtr g_prepare_proc; static uint16_t g_prepare_argument; static Win16FarPtr g_transfer_children[4]; static Win16FarPtr g_transfer_cursors[4]; static unsigned g_transfer_calls; bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == win16_make_far_pointer(0x6100, 0x0200)); return object != g_false_child; } BOOL16 IsIconic16(HWND16 window) { return window == g_iconic_window; } INT16 GetWindowText16(HWND16 window, char *text, INT16 maximum) { assert(window == g_iconic_window && maximum == 81); strcpy(text, "title"); g_get_text_calls++; return 5; } BOOL16 SetWindowText16(HWND16 window, const char *text) { assert(window == g_iconic_window && strcmp(text, "title") == 0); g_set_text_calls++; return 1; } void borland_dispose_object(Win16FarPtr object) { (void)object; } bool win16_call_object_predicate( Win16FarPtr procedure, Win16FarPtr child) { (void)procedure; (void)child; return false; } void win16_call_object_action( Win16FarPtr procedure, Win16FarPtr child) { (void)procedure; (void)child; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { (void)object; g_prepare_proc = procedure; g_prepare_argument = argument; } uint16_t win16_call_object_transfer_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t direction, Win16FarPtr cursor) { assert(procedure == win16_make_far_pointer(0x6100, 0x0400)); assert(direction == 2); g_transfer_children[g_transfer_calls] = object; g_transfer_cursors[g_transfer_calls] = cursor; return g_transfer_calls++ == 0 ? 3 : 5; } static void configure_child( Win16FarPtr child, uint16_t group, uint8_t flags, HWND16 window) { win16_write_u16(child, 0, 0x0100); win16_write_u16(child, 4, window); win16_write_u8(win16_far_add_offset(child, 0x16), flags); win16_write_u16(child, 0x17, group); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t container_bytes[64]; static uint8_t a_bytes[64]; static uint8_t b_bytes[64]; static uint8_t c_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x7000, container_bytes, sizeof(container_bytes), true); win16_bind_segment(0x7100, a_bytes, sizeof(a_bytes), true); win16_bind_segment(0x7200, b_bytes, sizeof(b_bytes), true); win16_bind_segment(0x7300, c_bytes, sizeof(c_bytes), true); win16_write_u16(win16_dgroup_pointer(0x0120), 0, 0x0200); win16_write_u16(win16_dgroup_pointer(0x0122), 0, 0x6100); Win16FarPtr prepare_proc = win16_make_far_pointer(0x6100, 0x0300); win16_write_u16(win16_dgroup_pointer(0x0144), 0, win16_far_offset(prepare_proc)); win16_write_u16(win16_dgroup_pointer(0x0146), 0, win16_far_selector(prepare_proc)); win16_write_u16(win16_dgroup_pointer(0x0140), 0, 0x0400); win16_write_u16(win16_dgroup_pointer(0x0142), 0, 0x6100); Win16FarPtr container = win16_make_far_pointer(0x7000, 2); Win16FarPtr a = win16_make_far_pointer(0x7100, 2); Win16FarPtr b = win16_make_far_pointer(0x7200, 2); Win16FarPtr c = win16_make_far_pointer(0x7300, 2); configure_child(a, 1, 4, 0x11); configure_child(b, 2, 4, 0x22); configure_child(c, 0, 4, 0x33); object_windows_append_child(container, a); object_windows_append_child(container, b); object_windows_append_child(container, c); assert(object_windows_child_group_matches(1, a)); assert(!object_windows_child_group_matches(-1, a)); assert(!object_windows_child_group_matches(2, a)); g_false_child = a; assert(object_windows_try_child_activation(0, a)); g_false_child = 0; g_iconic_window = 0x22; g_get_text_calls = 0; g_set_text_calls = 0; assert(!object_windows_try_child_activation(0, b)); assert(g_get_text_calls == 1 && g_set_text_calls == 1); assert(!object_windows_unindexed_child_matches(0, b)); g_false_child = a; assert(object_windows_validate_child_groups(container)); g_false_child = c; assert(!object_windows_validate_child_groups(container)); g_false_child = 0; assert(object_windows_validate_child_groups(container)); static uint8_t empty_bytes[64]; win16_bind_segment(0x7400, empty_bytes, sizeof(empty_bytes), true); assert(object_windows_validate_child_groups( win16_make_far_pointer(0x7400, 2))); Win16FarPtr empty = win16_make_far_pointer(0x7400, 2); win16_write_u16(empty, 0, 0x0100); g_prepare_proc = 0; object_windows_prepare_window(empty); assert(g_prepare_proc == prepare_proc && g_prepare_argument == 2); g_false_child = c; win16_write_u16(container, 2, 0); g_prepare_proc = 0; object_windows_prepare_window(container); assert(win16_read_u16(win16_far_add_offset(container, 2)) == 0xfffc); assert(g_prepare_proc == 0); win16_write_u8(win16_far_add_offset(a, 0x16), 0x10); win16_write_u8(win16_far_add_offset(b, 0x16), 0); win16_write_u8(win16_far_add_offset(c, 0x16), 0x10); win16_write_u16(container, 0x0e, 0x0100); win16_write_u16(container, 0x10, 0x8000); g_transfer_calls = 0; object_windows_transfer_child_data(container, 2); assert(g_transfer_calls == 2); assert(g_transfer_children[0] == a && g_transfer_children[1] == c); assert(g_transfer_cursors[0] == win16_make_far_pointer(0x8000, 0x0100)); assert(g_transfer_cursors[1] == win16_make_far_pointer(0x8000, 0x0103)); ObjectWindowsTransferContext context = { win16_make_far_pointer(0x8000, 0xfffe), 2}; g_transfer_calls = 0; object_windows_transfer_child_callback(&context, a); assert(context.cursor == win16_make_far_pointer(0x8000, 1)); return 0; } úpx#include "../tdkpin_window_messages.h" #include #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_win16_message_box; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; Win16FarPtr g_object_windows_creating_object; static Win16FarPtr g_class_name_proc; static Win16FarPtr g_builder_proc; static Win16FarPtr g_class_name; static BOOL16 g_class_exists; static uint16_t g_register_result; static unsigned g_builder_calls; static unsigned g_register_calls; static unsigned g_load_icon_calls; static unsigned g_load_cursor_calls; Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; assert(procedure == g_class_name_proc); return g_class_name; } void win16_call_object_wndclass_method( Win16FarPtr procedure, Win16FarPtr object, WNDCLASS16 *window_class) { (void)object; assert(procedure == g_builder_proc); memset(window_class, 0, sizeof(*window_class)); window_class->style = 3; window_class->class_name = g_class_name; g_builder_calls++; } BOOL16 GetClassInfo16( HINSTANCE16 instance, Win16FarPtr class_name, WNDCLASS16 *window_class) { assert(instance == g_win16_instance && class_name == g_class_name); (void)window_class; return g_class_exists; } uint16_t RegisterClass16(const WNDCLASS16 *window_class) { assert(window_class->style == 3); assert(window_class->class_name == g_class_name); g_register_calls++; return g_register_result; } HICON16 LoadIcon16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); g_load_icon_calls++; return 0x1111; } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); g_load_cursor_calls++; return 0x2222; } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t window_bytes[64]; static uint8_t code[0x200]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x7000, window_bytes, sizeof(window_bytes), true); win16_bind_ne_segment(4, 0x6000, code, sizeof(code), false); Win16FarPtr window = win16_make_far_pointer(0x7000, 2); uint16_t vmt = 0x0100; win16_write_u16(window, 0, vmt); g_class_name_proc = win16_make_far_pointer(0x6000, 0x1000); g_builder_proc = win16_make_far_pointer(0x6000, 0x2000); g_class_name = win16_make_far_pointer(0x5000, 0x068c); g_win16_instance = 0x1234; write_far(vmt + 0x2c, g_class_name_proc); write_far(vmt + 0x34, g_builder_proc); g_class_exists = 1; g_builder_calls = 0; g_register_calls = 0; assert(object_windows_register_class(window)); assert(g_builder_calls == 0 && g_register_calls == 0); g_class_exists = 0; g_register_result = 7; assert(object_windows_register_class(window)); assert(g_builder_calls == 1 && g_register_calls == 1); g_register_result = 0; assert(!object_windows_register_class(window)); assert(g_builder_calls == 2 && g_register_calls == 2); WNDCLASS16 descriptor; g_load_icon_calls = 0; g_load_cursor_calls = 0; object_windows_build_window_class(window, &descriptor); assert(descriptor.style == 3); assert(descriptor.window_proc == win16_make_far_pointer(0x6000, 0x018b)); assert(descriptor.class_extra_bytes == 0 && descriptor.window_extra_bytes == 0); assert(descriptor.instance == g_win16_instance); assert(descriptor.icon == 0x1111 && descriptor.cursor == 0x2222); assert(descriptor.background_brush == 6); assert(descriptor.menu_name == 0 && descriptor.class_name == g_class_name); assert(g_load_icon_calls == 1 && g_load_cursor_calls == 1); return 0; } rsx #include "../tdkpin_render.h" #include static uint8_t g_dgroup[0x1000]; static unsigned g_restore_calls; static unsigned g_present_calls; static unsigned g_create_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_calls; static INT16 g_expected_source_x; static INT16 g_expected_source_y; void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 74 && width == 100 && y == 47 && x == 238 && dc == 0x1111); g_restore_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 74 && width == 100 && y == 47 && x == 238 && dc == 0x1111); g_present_calls++; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x1111); return (HDC16)(0x2001 + g_create_calls++); } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { g_select_calls++; if (g_select_calls == 1) { assert(dc == 0x2001 && object == 0x3001); return 0x4001; } if (g_select_calls == 2) { assert(dc == 0x2002 && object == 0x3002); return 0x4002; } if (g_select_calls == 3) { assert(dc == 0x2001 && object == 0x4001); } else { assert(g_select_calls == 4 && dc == 0x2002 && object == 0x4002); } return 0; } BOOL16 BitBlt16( HDC16 destination, INT16 x, INT16 y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { g_blit_calls++; assert(destination == (g_blit_calls == 1 ? 0x2001 : 0x1111)); assert(x == 238 && y == 47 && width == 100 && height == 74); assert(source == 0x2002); assert(source_x == g_expected_source_x && source_y == g_expected_source_y); assert(raster_operation == 0x00cc0020); return 1; } BOOL16 DeleteDC16(HDC16 dc) { g_delete_calls++; assert(dc == (g_delete_calls == 1 ? 0x2002 : 0x2001)); return 1; } static void reset_active(INT16 source_x, INT16 source_y) { g_create_calls = 0; g_select_calls = 0; g_blit_calls = 0; g_delete_calls = 0; g_expected_source_x = source_x; g_expected_source_y = source_y; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x5000); win16_write_u16(win16_make_far_pointer(0x5000, 0x085b), 0, 0x3001); win16_write_u16(win16_make_far_pointer(0x5000, 0x0863), 0, 0x3002); tdkpin_draw_claw_frame(0, 0, 0x1111); assert(g_restore_calls == 1 && g_present_calls == 1); reset_active(0, 148); tdkpin_draw_claw_frame(0, 1, 0x1111); assert(g_blit_calls == 2 && g_select_calls == 4 && g_delete_calls == 2); reset_active(0, 74); tdkpin_draw_claw_frame(1, 10, 0x1111); assert(g_blit_calls == 2 && g_select_calls == 4 && g_delete_calls == 2); reset_active(800, 222); tdkpin_draw_claw_frame(0, 18, 0x1111); assert(g_blit_calls == 2); return 0; } _x(#include "../tdkpin_collision_events.h" #include #include uint8_t g_current_player; static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static uint16_t g_restore_ids[64]; static uint16_t g_refresh_ids[64]; static uint16_t g_sounds[32]; static int32_t g_scores[32]; static unsigned g_restore_calls; static unsigned g_refresh_calls; static unsigned g_sound_calls; static unsigned g_score_calls; static unsigned g_draw_score_calls; static unsigned g_composite_calls; static unsigned g_present_calls; static unsigned g_restore_background_calls; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_random_calls; static uint16_t g_random_values[4]; static uint16_t g_last_sprite; static int32_t g_last_drawn_score; static Win16FarPtr record(uint16_t id) { return win16_dgroup_pointer((uint16_t)(0x095b + id * 0x53u)); } void tdkpin_restore_record_or_item_a(uint16_t caller_bp, uint16_t id) { assert(caller_bp == 0x0100 && g_restore_calls < 64); g_restore_ids[g_restore_calls++] = id; } void tdkpin_refresh_collision_record(uint16_t caller_bp, uint16_t id) { assert(caller_bp == 0x0100 && g_refresh_calls < 64); g_refresh_ids[g_refresh_calls++] = id; } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { assert(g_sound_calls < 32); g_sounds[g_sound_calls++] = sound_number; } void tdkpin_add_score_from_caller_frame(uint16_t caller_bp, int32_t delta) { assert(caller_bp == 0x0100 && g_score_calls < 32); g_scores[g_score_calls++] = delta; } void tdkpin_draw_score_from_caller_frame( uint16_t caller_bp, uint16_t low, uint16_t high) { assert(caller_bp == 0x0100); g_last_drawn_score = (int32_t)((uint32_t)low | ((uint32_t)high << 16)); g_draw_score_calls++; } uint16_t borland_random_below(uint16_t upper_bound) { assert(upper_bound == 6 && g_random_calls < 4); return g_random_values[g_random_calls++]; } int32_t borland_multiply_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left * (uint32_t)right); } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } void tdkpin_composite_player_sprite(uint16_t sprite_index, HDC16 dc) { assert(dc == 0x3333); g_last_sprite = sprite_index; g_composite_calls++; } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height > 0 && width > 0 && dc == 0x3333); (void)y; (void)x; g_restore_background_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height > 0 && width > 0 && dc == 0x3333); (void)y; (void)x; g_present_calls++; } static void reset_counters(void) { memset(g_restore_ids, 0, sizeof(g_restore_ids)); memset(g_refresh_ids, 0, sizeof(g_refresh_ids)); memset(g_sounds, 0, sizeof(g_sounds)); memset(g_scores, 0, sizeof(g_scores)); g_restore_calls = 0; g_refresh_calls = 0; g_sound_calls = 0; g_score_calls = 0; g_draw_score_calls = 0; g_composite_calls = 0; g_present_calls = 0; g_restore_background_calls = 0; g_get_dc_calls = 0; g_release_dc_calls = 0; g_random_calls = 0; memset(g_random_values, 0, sizeof(g_random_values)); g_last_sprite = 0; g_last_drawn_score = 0; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_receiver, 4, 0x2222); g_current_player = 2; reset_counters(); } static void seed_bounds(uint16_t id, INT16 left, INT16 top) { win16_write_u16(record(id), 0x4b, (uint16_t)left); win16_write_u16(record(id), 0x4d, (uint16_t)top); win16_write_u16(record(id), 0x4f, (uint16_t)(left + 2)); win16_write_u16(record(id), 0x51, (uint16_t)(top + 3)); } static void test_tilt_and_combined_low_events(void) { prepare_fixture(); win16_write_u8(win16_dgroup_pointer(0x07c6), 1); tdkpin_handle_collision_events(0x0100, 0xffff, 129); assert(g_restore_calls == 0 && g_sound_calls == 0); prepare_fixture(); win16_write_u16(record(129), 0x43, 20); win16_write_u8(win16_far_add_offset(record(20), 0x34), 1); win16_write_u8(win16_far_add_offset(record(21), 0x34), 1); win16_write_u8(win16_far_add_offset(record(22), 0x34), 1); tdkpin_handle_collision_events( 0x0100, 0x0001u | 0x0002u | 0x2000u | 0x0400u, 129); assert(win16_read_u8(win16_far_add_offset( g_receiver, (uint16_t)(0x0467 + 2u * 20u + 15u))) == 1); assert(g_restore_calls == 1 && g_restore_ids[0] == 1015); assert(g_refresh_calls == 1 && g_refresh_ids[0] == 20); assert(win16_read_u8(win16_far_add_offset(record(20), 0x34)) == 0); assert(win16_read_u8(win16_far_add_offset(record(21), 0x34)) == 0); assert(win16_read_u8(win16_far_add_offset(record(22), 0x34)) == 0); assert(win16_read_u32(win16_dgroup_pointer(0x0855)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x07c7)) == 1); } static void test_sprite_award(void) { prepare_fixture(); win16_write_u16(win16_dgroup_pointer(0x09a8), 0, 2); g_random_values[0] = 1; g_random_values[1] = 2; tdkpin_handle_collision_events(0x0100, 0x0004, 0); assert(g_sound_calls == 1 && g_sounds[0] == 12); assert(win16_read_u8(win16_far_add_offset(record(149), 0x34)) == 1); assert(g_restore_ids[0] == 149 && g_random_calls == 2); assert(win16_read_u16(win16_dgroup_pointer(0x09a8)) == 3); assert(g_composite_calls == 1 && g_last_sprite == 3); assert(g_present_calls == 1 && g_get_dc_calls == 1); prepare_fixture(); win16_write_u16(win16_dgroup_pointer(0x399a), 0, 1); tdkpin_handle_collision_events(0x0100, 0x0004, 0); assert(win16_read_u16(win16_dgroup_pointer(0x09a8)) == 7); assert(g_random_calls == 0 && g_last_sprite == 7); } static void set_group_heads(uint16_t first, uint16_t groups, uint8_t active) { for (uint16_t group = 0; group < groups; group++) { win16_write_u8( win16_far_add_offset(record((uint16_t)(first + group * 3u)), 0x34), active); } } static void test_ready_bank(void) { prepare_fixture(); set_group_heads(90, 5, 0); win16_write_u8(win16_dgroup_pointer(0x0818), 6); tdkpin_handle_collision_events(0x0100, 0x0008, 0); assert(g_sound_calls == 2 && g_sounds[0] == 12 && g_sounds[1] == 17); assert(g_score_calls == 1 && g_scores[0] == 50000); assert(g_refresh_calls == 5); prepare_fixture(); set_group_heads(90, 5, 0); win16_write_u8(win16_dgroup_pointer(0x0818), 2); tdkpin_handle_collision_events(0x0100, 0x0008, 0); assert(win16_read_u8(win16_dgroup_pointer(0x0818)) == 3); assert(g_restore_calls == 1 && g_restore_ids[0] == 1002); assert(g_score_calls == 0 && g_refresh_calls == 5); } static void set_item_bank_count(uint16_t count) { for (uint16_t item = 1; item <= count; item++) { win16_write_u8(win16_far_add_offset( g_receiver, (uint16_t)(0x046c + 2u * 20u + item)), 1); } } static void test_item_bank_branches(void) { prepare_fixture(); set_group_heads(109, 4, 0); tdkpin_handle_collision_events(0x0100, 0x0010, 0); assert(g_restore_ids[0] == 1006 && g_scores[0] == 10000); assert(g_refresh_calls == 4); prepare_fixture(); set_group_heads(109, 4, 0); set_item_bank_count(8); seed_bounds(153, 1, 2); seed_bounds(6, 3, 4); seed_bounds(154, 5, 6); tdkpin_handle_collision_events(0x0100, 0x0010, 0); assert(g_restore_ids[0] == 1014 && g_scores[0] == 24464); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x0bdc)) == 1); assert(g_restore_background_calls == 3 && g_present_calls == 3); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); prepare_fixture(); set_group_heads(109, 4, 0); set_item_bank_count(9); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bdc), 1); win16_write_u32(win16_dgroup_pointer(0x0996), 0, 10); win16_write_u8(win16_dgroup_pointer(0x09a3), 3); tdkpin_handle_collision_events(0x0100, 0x0010, 0); assert(win16_read_u32(win16_dgroup_pointer(0x0996)) == 100010u); assert(g_draw_score_calls == 1 && g_last_drawn_score == 300030); assert(g_sounds[1] == 7); } static void test_switch_and_timed_records(void) { static const uint16_t event_ids[3] = {150, 151, 152}; static const uint16_t related[3] = {153, 6, 154}; for (uint16_t index = 0; index < 3; index++) { prepare_fixture(); tdkpin_handle_collision_events(0x0100, 0x1000, event_ids[index]); assert(win16_read_u8(win16_far_add_offset( g_receiver, (uint16_t)(0x00f7 + index))) == 10); assert(g_restore_calls == 2); assert(g_restore_ids[0] == event_ids[index]); assert(g_restore_ids[1] == related[index]); assert(win16_read_u8(win16_far_add_offset( record(related[index]), 0x34)) == 1); } prepare_fixture(); win16_write_u8(win16_dgroup_pointer(0x0818), 3); tdkpin_handle_collision_events(0x0100, 0x0040, 51); assert(g_sounds[0] == 6 && g_restore_ids[0] == 51); assert(g_scores[0] == 2000); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x94)) == 5); prepare_fixture(); tdkpin_handle_collision_events(0x0100, 0x0040, 140); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x00ed)) == 20); assert(g_restore_ids[0] == 140 && g_sound_calls == 0); } int main(void) { test_tilt_and_combined_low_events(); test_sprite_award(); test_ready_bank(); test_item_bank_branches(); test_switch_and_timed_records(); return 0; } Fz_xW#include "../tdkpin_collision_records.h" #include #include #include int32_t g_collision_path_x; int32_t g_collision_path_y; uint8_t g_borland_cpu_level = 2; _Noreturn void borland_runtime_error(uint16_t code) { (void)code; assert(false); __builtin_unreachable(); } _Noreturn void win16_integer_divide_fault(void) { assert(false); __builtin_unreachable(); } static TdkpinCollisionRecord read_record( const uint8_t *dgroup, uint16_t index) { TdkpinCollisionRecord record; memcpy( &record, dgroup + 0x095b + index * sizeof(record), sizeof(record)); return record; } static BorlandReal48 tagged_real48(uint8_t tag) { return (BorlandReal48){{tag, 1, 2, 3, 4, 5}}; } static TdkpinCollisionInitArgs base_arguments(uint16_t index) { return (TdkpinCollisionInitArgs){ .render_bottom = 44, .render_right = 33, .render_top = 22, .render_left = 11, .layer_mask = 2, .score_low = 0x5678, .score_high = 0x1234, .contact_state = 9, .flags = 0x0040, .response_kick = tagged_real48(0x81), .response_auxiliary = tagged_real48(0x82), .response_tangent = tagged_real48(0x83), .response_normal = tagged_real48(0x84), .subtype = 7, .type = 4, .active = 1, .index = index, }; } static void assert_common_fields( const TdkpinCollisionRecord *record, const TdkpinCollisionInitArgs *arguments) { assert(record->type == (uint8_t)arguments->type); assert(record->subtype == (uint8_t)arguments->subtype); assert(record->active == (uint8_t)arguments->active); assert(memcmp( &record->response_normal, &arguments->response_normal, 6) == 0); assert(memcmp( &record->response_tangent, &arguments->response_tangent, 6) == 0); assert(memcmp( &record->response_auxiliary, &arguments->response_auxiliary, 6) == 0); assert(memcmp( &record->response_kick, &arguments->response_kick, 6) == 0); assert(record->flags == arguments->flags); assert(record->contact_state == arguments->contact_state); assert(record->score_low == arguments->score_low); assert(record->score_high == arguments->score_high); assert(record->layer_mask == arguments->layer_mask); assert(record->render_left == arguments->render_left); assert(record->render_top == arguments->render_top); assert(record->render_right == arguments->render_right); assert(record->render_bottom == arguments->render_bottom); } int main(void) { static uint8_t dgroup[0x4d3a]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); /* OBJECTS.tsv row 1 geometry: absolute line with the historical Y-20. */ TdkpinCollisionInitArgs line = base_arguments(1); line.type = 2; line.subtype = 0; line.point1_x = 7; line.point1_y = 417; line.point2_x = 125; line.point2_y = 457; line.radius = 0; line.coordinate_mode = 0; tdkpin_initialize_collision_record(&line); TdkpinCollisionRecord record = read_record(dgroup, 1); assert(record.bounds_min_x_milli == 2000); assert(record.bounds_min_y_milli == 392000); assert(record.bounds_max_x_milli == 130000); assert(record.bounds_max_y_milli == 442000); assert(record.point1_x_milli == 7000); assert(record.point1_y_milli == 397000); assert(record.point2_x_milli == 125000); assert(record.point2_y_milli == 437000); assert(record.radius_milli.bytes[0] == 0); assert(g_collision_path_x == 125 && g_collision_path_y == 437); assert_common_fields(&record, &line); /* OBJECTS.tsv row 4 geometry: circle center (141,426), radius 8. */ TdkpinCollisionInitArgs circle = base_arguments(4); circle.type = 1; circle.subtype = 1; circle.point1_x = 141; circle.point1_y = 446; circle.point2_x = 0; circle.point2_y = 20; circle.radius = 8; circle.coordinate_mode = 0; tdkpin_initialize_collision_record(&circle); record = read_record(dgroup, 4); assert(record.bounds_min_x_milli == 128000); assert(record.bounds_min_y_milli == 413000); assert(record.bounds_max_x_milli == 154000); assert(record.bounds_max_y_milli == 439000); assert(record.point1_x_milli == 141000); assert(record.point1_y_milli == 426000); assert(record.point2_x_milli == 0 && record.point2_y_milli == 0); BorlandReal48 expected_radius = borland_i32_to_real48(8000); assert(memcmp(&record.radius_milli, &expected_radius, 6) == 0); assert(g_collision_path_x == 141 && g_collision_path_y == 426); assert_common_fields(&record, &circle); /* Relative segment: point1 continues from globals, point2 is a delta. */ TdkpinCollisionInitArgs relative = base_arguments(10); g_collision_path_x = 100; g_collision_path_y = 200; relative.coordinate_mode = 1; relative.point1_x = 5; relative.point1_y = 7; relative.point2_x = 10; relative.point2_y = -20; relative.radius = 0; tdkpin_initialize_collision_record(&relative); record = read_record(dgroup, 10); assert(record.bounds_min_x_milli == 100000); assert(record.bounds_max_x_milli == 120000); assert(record.bounds_min_y_milli == 182000); assert(record.bounds_max_y_milli == 212000); assert(record.point1_x_milli == 105000); assert(record.point1_y_milli == 207000); assert(record.point2_x_milli == 115000); assert(record.point2_y_milli == 187000); assert(g_collision_path_x == 115 && g_collision_path_y == 187); /* Negative radius reaches all four fallback-adjust branches exactly. */ TdkpinCollisionInitArgs fallback = base_arguments(11); fallback.point1_x = 10; fallback.point1_y = 30; fallback.point2_x = 0; fallback.point2_y = 0; fallback.radius = -1; fallback.fallback_x_adjust = 2; fallback.fallback_y_adjust = 3; tdkpin_initialize_collision_record(&fallback); record = read_record(dgroup, 11); assert(record.bounds_min_x_milli == 13000); assert(record.bounds_max_x_milli == 11000); assert(record.bounds_min_y_milli == 14000); assert(record.bounds_max_y_milli == 12000); expected_radius = borland_i32_to_real48(-1000); assert(memcmp(&record.radius_milli, &expected_radius, 6) == 0); /* Index 176 is rejected before either table or continuation state changes. */ memset(dgroup + 0x095b, 0xa5, 0x53); TdkpinCollisionInitArgs rejected = base_arguments(176); rejected.point1_x = INT32_MAX; g_collision_path_x = 123; g_collision_path_y = 456; tdkpin_initialize_collision_record(&rejected); for (uint16_t index = 0; index < 0x53; index++) { assert(dgroup[0x095b + index] == 0xa5); } assert(g_collision_path_x == 123 && g_collision_path_y == 456); return 0; } x#include "../tdkpin_command_line.h" #include #include static uint8_t g_command_segment[0x10000]; Win16FarPtr g_borland_command_line; HINSTANCE16 g_win16_instance; UINT16 GetModuleFileNameFar16( HINSTANCE16 module, Win16FarPtr buffer, UINT16 size) { assert(module == g_win16_instance && size == 0xff); static const char path[] = "C:\\TDKPIN.EXE"; for (uint16_t index = 0; index < sizeof(path); index++) { win16_write_u8(win16_far_add_offset(buffer, index), path[index]); } return (UINT16)(sizeof(path) - 1); } int main(void) { static const char command[] = " one two\tthree"; memcpy(&g_command_segment[0x100], command, sizeof(command)); win16_reset_segment_bindings(); win16_bind_segment( 0x5555, g_command_segment, sizeof(g_command_segment), true); static uint8_t result_segment[0x10000]; win16_bind_segment( 0x6666, result_segment, sizeof(result_segment), true); g_borland_command_line = win16_make_far_pointer(0x5555, 0x100); assert(borland_parameter_count() == 3); BorlandCommandToken first = borland_scan_command_token(1); assert(first.token == win16_make_far_pointer(0x5555, 0x102)); assert(first.length == 3); BorlandCommandToken second = borland_scan_command_token(2); assert(second.token == win16_make_far_pointer(0x5555, 0x106)); assert(second.length == 3); BorlandCommandToken missing = borland_scan_command_token(4); assert(missing.length == 0); Win16FarPtr result = win16_make_far_pointer(0x6666, 0x100); borland_parameter_string(1, result); assert(result_segment[0x100] == 3); assert(memcmp(&result_segment[0x101], "one", 3) == 0); borland_parameter_string(4, result); assert(result_segment[0x100] == 0); g_win16_instance = 0x1234; borland_parameter_string(0, result); assert(result_segment[0x100] == 13); assert(memcmp(&result_segment[0x101], "C:\\TDKPIN.EXE", 13) == 0); memset(&g_command_segment[0x200], 'x', 260); g_command_segment[0x304] = 0; g_borland_command_line = win16_make_far_pointer(0x5555, 0x200); borland_parameter_string(1, result); assert(result_segment[0x100] == 4); assert(memcmp(&result_segment[0x101], &g_command_segment[0x200], 260) == 0); return 0; } <xb9#include "../tdkpin_dialog.h" #include static Win16FarPtr g_dialog; static Win16FarPtr g_child; static Win16FarPtr g_close_proc; static Win16FarPtr g_closed_window; static HWND16 g_end_window; static INT16 g_end_result; static unsigned g_for_each_calls; static Win16FarPtr g_virtual_proc; static uint16_t g_virtual_argument; static Win16FarPtr g_disposed_string; static unsigned g_destruct_sequence; static HWND16 g_text_window; static INT16 g_text_control; static Win16FarPtr g_text_buffer; static INT16 g_text_maximum; static unsigned g_prepare_calls; static Win16FarPtr g_caption; static INT16 g_set_ids[2]; static Win16FarPtr g_set_texts[2]; static unsigned g_set_text_calls; static INT16 g_send_id; static UINT16 g_send_message; static WPARAM16 g_send_wparam; static LPARAM16 g_send_lparam; Win16FarPtr g_win16_create_dialog_param; Win16FarPtr g_win16_dialog_box_param; uint8_t g_dialog_alternate_template; Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_instance; static bool g_constructor_enters = true; static unsigned g_constructor_entry_calls; static Win16FarPtr g_construct_parent; static unsigned g_clear_flag_calls; static unsigned g_set_flag_calls; static Win16FarPtr g_duplicate_result; static Win16FarPtr g_duplicate_source; static HWND16 g_create_result; static INT16 g_modal_result; static unsigned g_create_calls; static unsigned g_modal_calls; static Win16FarPtr g_expected_template; static HWND16 g_expected_parent_window; static Win16FarPtr g_expected_dialog_proc; static LPARAM16 g_expected_init_parameter; void object_windows_for_each_child( Win16FarPtr container, Win16FarPtr action) { assert(container == g_dialog); assert(action == win16_make_far_pointer(0x6000, 0x2bb1)); g_for_each_calls++; object_windows_dialog_mark_child(0xffff, g_child); } void object_windows_set_flag_4_if_windowed( uint16_t ignored, Win16FarPtr object) { (void)ignored; if (win16_read_u16(win16_far_add_offset(object, 4)) != 0) { Win16FarPtr flags = win16_far_add_offset(object, 0x16); win16_write_u8(flags, (uint8_t)(win16_read_u8(flags) | 4)); } } BOOL16 EndDialog16(HWND16 dialog, INT16 result) { g_end_window = dialog; g_end_result = result; return 1; } void object_windows_close_if_allowed(Win16FarPtr window) { g_closed_window = window; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { assert(object == g_dialog); g_virtual_proc = procedure; g_virtual_argument = argument; } void borland_far_strdispose(Win16FarPtr string) { assert(++g_destruct_sequence == 1); g_disposed_string = string; } void object_windows_object_destruct(Win16FarPtr object, uint16_t vmt) { unsigned expected = g_disposed_string == 0 ? 1u : 2u; assert(++g_destruct_sequence == expected); assert(object == g_dialog && vmt == 0); } void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { unsigned expected = g_disposed_string == 0 ? 2u : 3u; assert(++g_destruct_sequence == expected); assert(frame->object == g_dialog && frame->vmt_argument == 0x0200); assert(vmt_field_offset == 0); } UINT16 GetDlgItemTextFar16( HWND16 dialog, INT16 control_id, Win16FarPtr buffer, INT16 maximum) { g_text_window = dialog; g_text_control = control_id; g_text_buffer = buffer; g_text_maximum = maximum; return 7; } void object_windows_prepare_window(Win16FarPtr window) { assert(window == g_dialog); g_prepare_calls++; } BOOL16 SetWindowTextFar16(HWND16 window, Win16FarPtr text) { assert(window == 0x77); g_caption = text; return 0; } BOOL16 SetDlgItemText16( HWND16 dialog, INT16 control_id, Win16FarPtr text) { assert(dialog == 0x77 && g_set_text_calls < 2); g_set_ids[g_set_text_calls] = control_id; g_set_texts[g_set_text_calls] = text; g_set_text_calls++; return 0; } LRESULT16 SendDlgItemMessage16( HWND16 dialog, INT16 control_id, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { assert(dialog == 0x77); g_send_id = control_id; g_send_message = message; g_send_wparam = wparam; g_send_lparam = lparam; return -1; } bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(vmt_field_offset == 0); g_constructor_entry_calls++; if (g_constructor_enters && frame->vmt_argument != 0) { win16_write_u16(frame->object, 0, frame->vmt_argument); } return g_constructor_enters; } Win16FarPtr object_windows_object_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr parent) { assert(object == g_dialog && vmt == 0); g_construct_parent = parent; return object; } void object_windows_clear_flag_4(Win16FarPtr object) { assert(object == g_dialog); g_clear_flag_calls++; } void object_windows_set_flag_1(Win16FarPtr object) { assert(object == g_dialog); g_set_flag_calls++; } Win16FarPtr borland_far_strdup(Win16FarPtr source) { g_duplicate_source = source; return g_duplicate_result; } HWND16 win16_call_create_dialog_param( Win16FarPtr procedure, HINSTANCE16 instance, Win16FarPtr template_name, HWND16 parent, Win16FarPtr dialog_proc, LPARAM16 init_parameter) { assert(procedure == g_win16_create_dialog_param); assert(instance == g_win16_instance); assert(template_name == g_expected_template); assert(parent == g_expected_parent_window); assert(dialog_proc == g_expected_dialog_proc); assert(init_parameter == g_expected_init_parameter); g_create_calls++; return g_create_result; } INT16 win16_call_dialog_box_param( Win16FarPtr procedure, HINSTANCE16 instance, Win16FarPtr template_name, HWND16 parent, Win16FarPtr dialog_proc, LPARAM16 init_parameter) { assert(procedure == g_win16_dialog_box_param); assert(instance == g_win16_instance); assert(template_name == g_expected_template); assert(parent == g_expected_parent_window); assert(dialog_proc == g_expected_dialog_proc); assert(init_parameter == g_expected_init_parameter); g_modal_calls++; win16_write_u16(g_object_windows_application, 0x0e, 0xdead); win16_write_u16(g_object_windows_application, 0x10, 0xbeef); return g_modal_result; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t code[0x3000]; static uint8_t dialog_bytes[80]; static uint8_t child_bytes[80]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_ne_segment(2, 0x6000, code, sizeof(code), false); win16_bind_segment(0x7000, dialog_bytes, sizeof(dialog_bytes), true); win16_bind_segment(0x7100, child_bytes, sizeof(child_bytes), true); g_dialog = win16_make_far_pointer(0x7000, 2); g_child = win16_make_far_pointer(0x7100, 2); win16_write_u16(g_dialog, 0, 0x0100); win16_write_u16(g_dialog, 4, 0x77); win16_write_u16(g_child, 4, 0x88); g_close_proc = win16_make_far_pointer(0x6200, 0x1234); win16_write_u16(win16_dgroup_pointer(0x0150), 0, win16_far_offset(g_close_proc)); win16_write_u16(win16_dgroup_pointer(0x0152), 0, win16_far_selector(g_close_proc)); object_windows_end_modal_dialog(g_dialog, 5); assert(g_for_each_calls == 0 && g_end_window == 0); win16_write_u8(win16_far_add_offset(g_dialog, 0x25), 1); object_windows_end_modal_dialog(g_dialog, 5); assert(g_for_each_calls == 1); assert(g_end_window == 0x77 && g_end_result == 5); assert((win16_read_u8(win16_far_add_offset(g_child, 0x16)) & 4) != 0); ObjectWindowsMessage message = {0}; win16_write_u8(win16_far_add_offset(g_dialog, 0x25), 0); object_windows_dialog_close(g_dialog, &message); assert(g_closed_window == g_dialog); win16_write_u8(win16_far_add_offset(g_dialog, 0x25), 1); object_windows_dialog_close(g_dialog, &message); assert(g_virtual_proc == g_close_proc && g_virtual_argument == 2); Win16FarPtr string = win16_make_far_pointer(0x7300, 0x1111); win16_write_u16(g_dialog, 0x1d, win16_far_offset(string)); win16_write_u16(g_dialog, 0x1f, win16_far_selector(string)); g_destruct_sequence = 0; g_disposed_string = 0; object_windows_dialog_destruct(g_dialog, 0x0200); assert(g_destruct_sequence == 3 && g_disposed_string == string); win16_write_u16(g_dialog, 0x1f, 0); g_destruct_sequence = 0; g_disposed_string = 0; object_windows_dialog_destruct(g_dialog, 0x0200); assert(g_destruct_sequence == 2 && g_disposed_string == 0); Win16FarPtr text_buffer = win16_make_far_pointer(0x7400, 0x2222); win16_write_u16(g_dialog, 0x2e, win16_far_offset(text_buffer)); win16_write_u16(g_dialog, 0x30, win16_far_selector(text_buffer)); win16_write_u16(g_dialog, 0x32, 0x1234); assert(object_windows_dialog_read_text(g_dialog)); assert(g_text_window == 0x77 && g_text_control == 0x1234); assert(g_text_buffer == text_buffer && g_text_maximum == 0x65); Win16FarPtr caption = win16_make_far_pointer(0x7500, 0x0100); Win16FarPtr label = win16_make_far_pointer(0x7500, 0x0200); win16_write_u16(g_dialog, 0x26, win16_far_offset(caption)); win16_write_u16(g_dialog, 0x28, win16_far_selector(caption)); win16_write_u16(g_dialog, 0x2a, win16_far_offset(label)); win16_write_u16(g_dialog, 0x2c, win16_far_selector(label)); win16_write_u16(g_dialog, 0x32, 0); g_prepare_calls = 0; g_set_text_calls = 0; object_windows_dialog_setup_text_fields(g_dialog); assert(g_prepare_calls == 1 && g_caption == caption); assert(g_set_text_calls == 2); assert(g_set_ids[0] == 100 && g_set_texts[0] == label); assert(g_set_ids[1] == 101 && g_set_texts[1] == text_buffer); assert(g_send_id == 101 && g_send_message == 0x0415); assert(g_send_wparam == 0xffff && g_send_lparam == 0); Win16FarPtr parent = g_child; Win16FarPtr template_name = win16_make_far_pointer(0x7500, 0x0300); g_duplicate_result = win16_make_far_pointer(0x7600, 0x0400); g_constructor_entry_calls = 0; g_clear_flag_calls = 0; g_duplicate_source = 0; assert(object_windows_dialog_construct( g_dialog, 0x0120, template_name, parent) == g_dialog); assert(g_constructor_entry_calls == 1 && g_construct_parent == parent); assert(g_duplicate_source == template_name); assert(win16_read_far_pointer(g_dialog, 0x1d) == g_duplicate_result); assert(win16_read_far_pointer(g_dialog, 0x21) == 0); assert(win16_read_u8(win16_far_add_offset(g_dialog, 0x25)) == 0); assert(g_clear_flag_calls == 1); Win16FarPtr integer_template = win16_make_far_pointer(0, 0x7f02); g_duplicate_source = 0; (void)object_windows_dialog_construct( g_dialog, 0, integer_template, 0); assert(g_duplicate_source == 0); assert(win16_read_far_pointer(g_dialog, 0x1d) == integer_template); g_constructor_enters = false; assert(object_windows_dialog_construct( g_dialog, 0x0120, template_name, parent) == g_dialog); g_constructor_enters = true; g_dialog_alternate_template = 1; g_constructor_entry_calls = 0; Win16FarPtr input_text = win16_make_far_pointer(0x7500, 0x0500); (void)object_windows_text_dialog_construct( g_dialog, 0x0130, 0x1234, input_text, label, caption, parent); assert(g_constructor_entry_calls == 2); assert(win16_read_far_pointer(g_dialog, 0x1d) == win16_make_far_pointer(0, 0x7f05)); assert(win16_read_far_pointer(g_dialog, 0x26) == caption); assert(win16_read_far_pointer(g_dialog, 0x2a) == label); assert(win16_read_far_pointer(g_dialog, 0x2e) == input_text); assert(win16_read_u16(win16_far_add_offset(g_dialog, 0x32)) == 0x1234); g_win16_instance = 0x4444; g_win16_create_dialog_param = win16_make_far_pointer(0x6000, 0x1000); g_win16_dialog_box_param = win16_make_far_pointer(0x6000, 0x2000); g_expected_template = win16_make_far_pointer(0, 0x7f05); g_expected_dialog_proc = win16_make_far_pointer(0x6000, 0x3000); g_expected_init_parameter = (LPARAM16)win16_make_far_pointer( 0x7000, 0x0040); win16_write_u16(g_dialog, 0x12, win16_far_offset(g_expected_dialog_proc)); win16_write_u16(g_dialog, 0x14, win16_far_selector(g_expected_dialog_proc)); win16_write_u16(g_dialog, 0x21, (uint16_t)g_expected_init_parameter); win16_write_u16( g_dialog, 0x23, (uint16_t)((uint32_t)g_expected_init_parameter >> 16)); win16_write_u16(g_dialog, 6, win16_far_offset(parent)); win16_write_u16(g_dialog, 8, win16_far_selector(parent)); g_expected_parent_window = 0x88; win16_write_u16(g_dialog, 2, 0); g_create_result = 0x12fe; g_create_calls = 0; assert(object_windows_create_modeless_dialog(g_dialog) == 0x1201); assert(g_create_calls == 1); assert(win16_read_u16(win16_far_add_offset(g_dialog, 4)) == 0x12fe); assert(win16_read_u8(win16_far_add_offset(g_dialog, 0x25)) == 0); win16_write_u16(g_dialog, 2, 0); g_create_result = 0; assert(object_windows_create_modeless_dialog(g_dialog) == 0); assert(win16_read_u16(win16_far_add_offset(g_dialog, 2)) == 0xffff); win16_set_indeterminate_u16(0xabcd); assert(object_windows_create_modeless_dialog(g_dialog) == 0xab00); static uint8_t application_bytes[32]; win16_bind_segment( 0x7700, application_bytes, sizeof(application_bytes), true); g_object_windows_application = win16_make_far_pointer(0x7700, 0); Win16FarPtr previous_active = win16_make_far_pointer(0x7800, 0x1111); win16_write_u16( g_object_windows_application, 0x0e, win16_far_offset(previous_active)); win16_write_u16( g_object_windows_application, 0x10, win16_far_selector(previous_active)); win16_write_u16(g_dialog, 2, 0); g_modal_result = 5; g_modal_calls = 0; assert(object_windows_execute_modal_dialog(g_dialog) == 5); assert(g_modal_calls == 1); assert(win16_read_far_pointer(g_object_windows_application, 0x0e) == previous_active); assert(win16_read_u16(win16_far_add_offset(g_dialog, 4)) == 0); assert(win16_read_u8(win16_far_add_offset(g_dialog, 0x25)) == 1); win16_write_u16(g_dialog, 2, 0); g_modal_result = -1; assert(object_windows_execute_modal_dialog(g_dialog) == -1); assert(win16_read_u16(win16_far_add_offset(g_dialog, 2)) == 0xffff); assert(object_windows_execute_modal_dialog(g_dialog) == -1); return 0; } wޏxw#include "../tdkpin_dispatch.h" #include #include static jmp_buf g_error_jump; static uint16_t g_error_code; static Win16FarPtr g_dispatched_procedure; static Win16FarPtr g_receiver; static Win16FarPtr g_argument; _Noreturn void borland_runtime_error(uint16_t code) { g_error_code = code; longjmp(g_error_jump, 1); } void win16_call_dynamic_method(Win16FarPtr procedure) { g_dispatched_procedure = procedure; } void win16_call_dynamic_method_two_far( Win16FarPtr procedure, Win16FarPtr receiver, Win16FarPtr argument) { g_dispatched_procedure = procedure; g_receiver = receiver; g_argument = argument; } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t object[32]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x6000, object, sizeof(object), true); /* VMT 0x0100 -> derived dynamic table 0x0200. */ win16_write_u16(win16_dgroup_pointer(0x0104), 0, 0x0200); win16_write_u16(win16_dgroup_pointer(0x0200), 0, 0x0300); win16_write_u16(win16_dgroup_pointer(0x0202), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0204), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0206), 0, 2); win16_write_u16(win16_dgroup_pointer(0x0208), 0, 10); win16_write_u16(win16_dgroup_pointer(0x020a), 0, 20); write_far(0x020c, win16_make_far_pointer(0x7000, 0x1111)); write_far(0x0210, win16_make_far_pointer(0x7000, 0x2222)); win16_write_u16(win16_dgroup_pointer(0x0300), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0302), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0304), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0306), 0, 1); win16_write_u16(win16_dgroup_pointer(0x0308), 0, 30); write_far(0x030a, win16_make_far_pointer(0x7100, 0x3333)); Win16FarPtr slot = borland_resolve_dynamic_method_slot(0x0100, 20); assert(slot == win16_dgroup_pointer(0x0210)); assert(win16_read_u16(win16_dgroup_pointer(0x0202)) == 20); assert(win16_read_u16(win16_dgroup_pointer(0x0204)) == 0x0210); /* The cache bypasses the now-corrupted method-count word. */ win16_write_u16(win16_dgroup_pointer(0x0206), 0, 0xffff); assert(borland_find_dynamic_method(0x0100, 20) == slot); win16_write_u16(win16_dgroup_pointer(0x0206), 0, 2); slot = borland_resolve_dynamic_method_slot(0x0100, 30); assert(slot == win16_dgroup_pointer(0x030a)); assert(win16_read_u16(win16_dgroup_pointer(0x0302)) == 30); assert(win16_read_u16(win16_dgroup_pointer(0x0304)) == 0x030a); g_dispatched_procedure = 0; borland_dispatch_dynamic_method(0x0100, 10); assert(g_dispatched_procedure == win16_make_far_pointer(0x7000, 0x1111)); /* Generated callers use the receiver VMT and preserve both far args. */ win16_write_u16(win16_dgroup_pointer(0x0404), 0, 0x0500); win16_write_u16(win16_dgroup_pointer(0x0500), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0502), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0504), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0506), 0, 2); win16_write_u16(win16_dgroup_pointer(0x0508), 0, 0x8002); win16_write_u16(win16_dgroup_pointer(0x050a), 0, 0x0006); write_far(0x050c, win16_make_far_pointer(0x7200, 0x4444)); write_far(0x0510, win16_make_far_pointer(0x7300, 0x5555)); Win16FarPtr receiver = win16_make_far_pointer(0x6000, 4); Win16FarPtr argument = win16_make_far_pointer(0x6100, 0x1234); win16_write_u16(receiver, 0, 0x0400); borland_dispatch_method_8002(receiver, argument); assert(g_dispatched_procedure == win16_make_far_pointer(0x7200, 0x4444)); assert(g_receiver == receiver && g_argument == argument); borland_dispatch_method_0006(receiver, argument); assert(g_dispatched_procedure == win16_make_far_pointer(0x7300, 0x5555)); assert(g_receiver == receiver && g_argument == argument); if (setjmp(g_error_jump) == 0) { (void)borland_resolve_dynamic_method_slot(0x0100, 99); assert(false); } assert(g_error_code == 210); return 0; } !sgx# #include "../tdkpin_flippers.h" #include "../tdkpin_collision_records.h" #include #include #include enum { RECORDS_BASE = 0x095b, LEFT_OUTER = 66, LEFT_EDGE = 67, LEFT_INNER = 68, RIGHT_INNER = 81, RIGHT_EDGE = 82, RIGHT_OUTER = 83, }; static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x1000]; static uint8_t g_stack[0x1000]; static Win16FarPtr g_receiver; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_restore_a_calls; static unsigned g_restore_b_calls; static unsigned g_present_calls; static bool g_expect_parent_stack_untouched; static uint16_t g_expected_parent_bp; int32_t borland_multiply_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left * (uint32_t)right); } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); if (g_expect_parent_stack_untouched) { assert(win16_read_stack_u16( (uint16_t)(g_expected_parent_bp - 8)) == 0xaaaa); assert(win16_read_stack_u16( (uint16_t)(g_expected_parent_bp - 6)) == 0xbbbb); assert(win16_read_stack_u16( (uint16_t)(g_expected_parent_bp - 4)) == 0xcccc); assert(win16_read_stack_u16( (uint16_t)(g_expected_parent_bp - 2)) == 0xdddd); g_expect_parent_stack_untouched = false; } g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } static void assert_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(dc == 0x3333); if (height == 52) { assert(width == 47 && y == 373 && x == 93); } else { assert(height == 53 && width == 45 && y == 372 && x == 175); } } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert_region(height, width, y, x, dc); g_restore_a_calls++; } void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert_region(height, width, y, x, dc); g_restore_b_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert_region(height, width, y, x, dc); g_present_calls++; } static Win16FarPtr record(uint16_t id) { return win16_dgroup_pointer((uint16_t)( RECORDS_BASE + id * sizeof(TdkpinCollisionRecord))); } static void put(uint16_t id, size_t offset, int32_t value) { win16_write_u32(record(id), (uint16_t)offset, (uint32_t)value); } static int32_t get(uint16_t id, size_t offset) { return (int32_t)win16_read_u32( win16_far_add_offset(record(id), (uint16_t)offset)); } static void put_points( uint16_t id, int32_t point1_x, int32_t point1_y, int32_t point2_x, int32_t point2_y) { put(id, offsetof(TdkpinCollisionRecord, point1_x_milli), point1_x); put(id, offsetof(TdkpinCollisionRecord, point1_y_milli), point1_y); put(id, offsetof(TdkpinCollisionRecord, point2_x_milli), point2_x); put(id, offsetof(TdkpinCollisionRecord, point2_y_milli), point2_y); } static void assert_points( uint16_t id, int32_t point1_x, int32_t point1_y, int32_t point2_x, int32_t point2_y) { assert(get(id, offsetof(TdkpinCollisionRecord, point1_x_milli)) == point1_x); assert(get(id, offsetof(TdkpinCollisionRecord, point1_y_milli)) == point1_y); assert(get(id, offsetof(TdkpinCollisionRecord, point2_x_milli)) == point2_x); assert(get(id, offsetof(TdkpinCollisionRecord, point2_y_milli)) == point2_y); } static void put_bounds( uint16_t id, int32_t minimum_x, int32_t minimum_y, int32_t maximum_x, int32_t maximum_y) { put(id, offsetof(TdkpinCollisionRecord, bounds_min_x_milli), minimum_x); put(id, offsetof(TdkpinCollisionRecord, bounds_min_y_milli), minimum_y); put(id, offsetof(TdkpinCollisionRecord, bounds_max_x_milli), maximum_x); put(id, offsetof(TdkpinCollisionRecord, bounds_max_y_milli), maximum_y); } static void assert_bounds( uint16_t id, int32_t minimum_x, int32_t minimum_y, int32_t maximum_x, int32_t maximum_y) { assert(get(id, offsetof(TdkpinCollisionRecord, bounds_min_x_milli)) == minimum_x); assert(get(id, offsetof(TdkpinCollisionRecord, bounds_min_y_milli)) == minimum_y); assert(get(id, offsetof(TdkpinCollisionRecord, bounds_max_x_milli)) == maximum_x); assert(get(id, offsetof(TdkpinCollisionRecord, bounds_max_y_milli)) == maximum_y); } static void prepare_fixture(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_objects, 0, sizeof(g_objects)); memset(g_stack, 0, sizeof(g_stack)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x7300, g_stack, sizeof(g_stack), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7300, 0); g_receiver = win16_make_far_pointer(0x7000, 0); win16_write_u16(g_receiver, 4, 0x2222); g_get_dc_calls = 0; g_release_dc_calls = 0; g_restore_a_calls = 0; g_restore_b_calls = 0; g_present_calls = 0; g_expect_parent_stack_untouched = false; g_expected_parent_bp = 0; } static void prepare_static_link(uint16_t parent_bp, uint16_t caller_bp) { win16_write_stack_u16((uint16_t)(parent_bp + 6), caller_bp); win16_write_stack_u16( (uint16_t)(caller_bp + 6), win16_far_offset(g_receiver)); win16_write_stack_u16( (uint16_t)(caller_bp + 8), win16_far_selector(g_receiver)); win16_write_stack_u16((uint16_t)(parent_bp - 8), 0xaaaa); win16_write_stack_u16((uint16_t)(parent_bp - 6), 0xbbbb); win16_write_stack_u16((uint16_t)(parent_bp - 4), 0xcccc); win16_write_stack_u16((uint16_t)(parent_bp - 2), 0xdddd); g_expect_parent_stack_untouched = true; g_expected_parent_bp = parent_bp; } static void test_left_flipper_raise(void) { const uint16_t parent_bp = 0x0200; const uint16_t caller_bp = 0x0300; prepare_fixture(); prepare_static_link(parent_bp, caller_bp); put_points(LEFT_OUTER, 100000, 200000, 300000, 400000); put_bounds(LEFT_EDGE, 10000, 20000, 100000, 200000); put_points(LEFT_EDGE, 30000, 40000, 0, 0); put_points(LEFT_INNER, 300000, 100000, 100000, 400000); win16_write_u16(g_receiver, 0x0bd4, 0); tdkpin_move_flipper_bitmap_geometry(parent_bp, 1, 1); assert_points(LEFT_OUTER, 114000, 204000, 310000, 444000); assert_bounds(LEFT_OUTER, 109000, 199000, 315000, 449000); assert_points(LEFT_EDGE, 31000, 82000, 0, 0); assert_bounds(LEFT_EDGE, 12000, 63000, 98000, 157000); assert_points(LEFT_INNER, 293000, 143000, 81000, 406000); assert_bounds(LEFT_INNER, 76000, 138000, 298000, 411000); assert(win16_read_stack_u16((uint16_t)(parent_bp - 4)) == 0); assert(win16_read_stack_u16((uint16_t)(parent_bp - 2)) == 0); assert(win16_read_stack_u16((uint16_t)(parent_bp - 8)) == 0xa7f8); assert(win16_read_stack_u16((uint16_t)(parent_bp - 6)) == 0); assert(g_restore_b_calls == 1 && g_restore_a_calls == 0); assert(g_present_calls == 1); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); } static void test_right_flipper_lower(void) { const uint16_t parent_bp = 0x0200; const uint16_t caller_bp = 0x0300; prepare_fixture(); prepare_static_link(parent_bp, caller_bp); put_points(RIGHT_OUTER, 100000, 200000, 300000, 400000); put_bounds(RIGHT_EDGE, 10000, 200000, 100000, 400000); put_points(RIGHT_EDGE, 30000, 200000, 0, 0); put_points(RIGHT_INNER, 300000, 400000, 100000, 200000); win16_write_u16(g_receiver, 0x0bd6, 1); tdkpin_move_flipper_bitmap_geometry(parent_bp, -1, 2); assert_points(RIGHT_OUTER, 111000, 155000, 316000, 397000); assert_bounds(RIGHT_OUTER, 106000, 150000, 321000, 402000); assert_points(RIGHT_EDGE, 32000, 157000, 0, 0); assert_bounds(RIGHT_EDGE, 12000, 157000, 98000, 443000); assert_points(RIGHT_INNER, 281000, 394000, 94000, 151000); assert_bounds(RIGHT_INNER, 89000, 146000, 286000, 399000); assert(win16_read_stack_u16((uint16_t)(parent_bp - 8)) == 0x5808); assert(win16_read_stack_u16((uint16_t)(parent_bp - 6)) == 0xffff); assert(g_restore_a_calls == 1 && g_restore_b_calls == 0); assert(g_present_calls == 1); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); } static void test_unknown_flipper_only_balances_dc(void) { prepare_fixture(); win16_write_u32(record(66), 0, 0x12345678); tdkpin_move_flipper_bitmap_geometry_for_receiver(g_receiver, 7, 3); assert(win16_read_u32(record(66)) == 0x12345678); assert(g_restore_a_calls == 0 && g_restore_b_calls == 0); assert(g_present_calls == 0); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); } int main(void) { test_left_flipper_raise(); test_right_flipper_lower(); test_unknown_flipper_only_balances_dc(); return 0; } x,"#include "../tdkpin_flippers.h" #include "../tdkpin_borland_runtime.h" #include "../tdkpin_collision_records.h" #include "../tdkpin_real48.h" #include #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x1000]; static uint8_t g_stack[0x1000]; static Win16FarPtr g_receiver; static uint16_t g_sounds[4]; static unsigned g_sound_count; static unsigned g_move_calls; static int32_t g_move_x; static int32_t g_move_y; static unsigned g_load_calls; static unsigned g_save_calls; uint8_t g_borland_cpu_level = 2; _Noreturn void borland_runtime_error(uint16_t code) { (void)code; abort(); } _Noreturn void win16_integer_divide_fault(void) { abort(); } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { assert(g_sound_count < sizeof(g_sounds) / sizeof(g_sounds[0])); g_sounds[g_sound_count++] = sound_number; } void tdkpin_move_ball_and_render( uint16_t caller_bp, int32_t delta_x, int32_t delta_y) { assert(caller_bp == 0x0300); g_move_calls++; g_move_x = delta_x; g_move_y = delta_y; } void tdkpin_load_ball_slot(uint16_t caller_bp, uint16_t slot) { assert(caller_bp == 0x0300); assert(slot == g_load_calls); g_load_calls++; } void tdkpin_save_ball_slot(uint16_t caller_bp, uint16_t slot) { assert(caller_bp == 0x0300); assert(slot == g_save_calls); g_save_calls++; } static Win16FarPtr record(uint16_t id) { return win16_dgroup_pointer((uint16_t)( 0x095b + id * sizeof(TdkpinCollisionRecord))); } static void write_i32(uint16_t id, size_t offset, int32_t value) { win16_write_u32(record(id), (uint16_t)offset, (uint32_t)value); } static void write_real48( uint16_t id, size_t offset, BorlandReal48 value) { Win16FarPtr destination = win16_far_add_offset( record(id), (uint16_t)offset); for (uint16_t index = 0; index < sizeof(value.bytes); index++) { win16_write_u8( win16_far_add_offset(destination, index), value.bytes[index]); } } static void write_points( uint16_t id, int32_t point1_x, int32_t point1_y, int32_t point2_x, int32_t point2_y) { write_i32(id, offsetof(TdkpinCollisionRecord, point1_x_milli), point1_x); write_i32(id, offsetof(TdkpinCollisionRecord, point1_y_milli), point1_y); write_i32(id, offsetof(TdkpinCollisionRecord, point2_x_milli), point2_x); write_i32(id, offsetof(TdkpinCollisionRecord, point2_y_milli), point2_y); } static void prepare_fixture(void) { static const BorlandReal48 one_half = {{0x80, 0, 0, 0, 0, 0}}; static const BorlandReal48 one_quarter = {{0x7f, 0, 0, 0, 0, 0}}; static const BorlandReal48 three_quarters = {{0x80, 0, 0, 0, 0, 0x40}}; static const BorlandReal48 zero = {{0, 0, 0, 0, 0, 0}}; memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_objects, 0, sizeof(g_objects)); memset(g_stack, 0, sizeof(g_stack)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x7300, g_stack, sizeof(g_stack), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7300, 0); g_receiver = win16_make_far_pointer(0x7000, 0); win16_write_stack_u16(0x0306, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0308, win16_far_selector(g_receiver)); win16_write_u8(win16_far_add_offset(g_receiver, 0x61), 1); win16_write_u32(g_receiver, 0x56, 1000); write_points(65, 103000, 397000, 0, 0); write_real48( 65, offsetof(TdkpinCollisionRecord, radius_milli), borland_i32_to_real48(15000)); write_points(66, 112000, 386000, 141000, 413000); write_real48( 66, offsetof(TdkpinCollisionRecord, response_normal), one_half); write_points(68, 130000, 427000, 97000, 411000); write_real48( 68, offsetof(TdkpinCollisionRecord, response_normal), one_quarter); write_points(80, 210000, 397000, 0, 0); write_real48( 80, offsetof(TdkpinCollisionRecord, radius_milli), borland_i32_to_real48(15000)); write_points(81, 216000, 411000, 177000, 427000); write_real48( 81, offsetof(TdkpinCollisionRecord, response_normal), three_quarters); write_points(83, 172000, 413000, 201000, 386000); write_real48( 83, offsetof(TdkpinCollisionRecord, response_normal), zero); g_sound_count = 0; g_move_calls = 0; g_move_x = 0; g_move_y = 0; g_load_calls = 0; g_save_calls = 0; } static void set_ball(int32_t x, int32_t y, int32_t vx, int32_t vy) { win16_write_u32(win16_dgroup_pointer(0x07d3), 0, (uint32_t)x); win16_write_u32(win16_dgroup_pointer(0x07d7), 0, (uint32_t)y); win16_write_u32(g_receiver, 0x0baa, (uint32_t)vx); win16_write_u32(g_receiver, 0x0bae, (uint32_t)vy); } static void test_left_negative_contact(void) { prepare_fixture(); set_ball(104000, 384000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 1, 0); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0baa)) == 1266); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bae)) == 1511); assert(g_move_x == -6703 && g_move_y == -8000); assert(g_sound_count == 1 && g_sounds[0] == 21); assert(g_move_calls == 1); } static void test_right_positive_contact(void) { prepare_fixture(); set_ball(209000, 419000, -1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, 1, 2, 0); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0baa)) == -737); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bae)) == 2263); assert(g_move_x == -8549 && g_move_y == 26250); assert(g_sound_count == 1 && g_sounds[0] == 21); assert(g_move_calls == 1); } static void test_left_positive_contact(void) { prepare_fixture(); set_ball(104000, 421000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, 1, 1, 0); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0baa)) == 622); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bae)) == 2320); assert(g_move_x == 5414 && g_move_y == 20193); assert(g_move_calls == 1); } static void test_right_negative_contact(void) { prepare_fixture(); set_ball(209000, 385000, -1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 2, 0); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0baa)) == -1280); assert((int32_t)win16_read_u32( win16_far_add_offset(g_receiver, 0x0bae)) == 1560); assert(g_move_x == 7385 && g_move_y == -9000); assert(g_move_calls == 1); } static void test_vertical_edge_fallbacks(void) { prepare_fixture(); write_i32( 66, offsetof(TdkpinCollisionRecord, point2_x_milli), 73000); set_ball(94000, 371000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 1, 0); assert(g_move_calls == 1 && g_move_y == -1000); prepare_fixture(); write_i32( 81, offsetof(TdkpinCollisionRecord, point1_x_milli), 240000); set_ball(197000, 455000, -1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, 1, 2, 0); assert(g_move_calls == 1 && g_move_y == 1000); } static void test_multiball_slot_loop_and_invalid_flipper(void) { prepare_fixture(); win16_write_u8(win16_far_add_offset(g_receiver, 0x61), 2); set_ball(300000, 300000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 1, 0); assert(g_load_calls == 2 && g_save_calls == 2); assert(g_move_calls == 0); prepare_fixture(); win16_write_u8(win16_far_add_offset(g_receiver, 0x61), 0); tdkpin_move_flipper_collision_geometry(0x0300, 7, 3, 0); assert(g_sound_count == 1 && g_sounds[0] == 21); assert(g_move_calls == 0 && g_load_calls == 0 && g_save_calls == 0); } static void test_gates(void) { prepare_fixture(); set_ball(300000, 300000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 1, 0); assert(g_move_calls == 0); prepare_fixture(); set_ball(104000, 384000, 1000, 2000); tdkpin_move_flipper_collision_geometry(0x0300, -1, 1, 1); assert(g_move_calls == 0); } int main(void) { test_left_negative_contact(); test_right_positive_contact(); test_left_positive_contact(); test_right_negative_contact(); test_vertical_edge_fallbacks(); test_multiball_slot_loop_and_invalid_flipper(); test_gates(); return 0; } a[Hx- #include "../tdkpin_flippers.h" #include #include static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static Win16FarPtr g_receiver; static unsigned g_collision_calls; static unsigned g_bitmap_calls; static int32_t g_deltas[4]; static uint16_t g_flippers[4]; void tdkpin_move_flipper_collision_geometry( uint16_t caller_bp, int32_t delta, uint16_t flipper, uint16_t mode) { assert(caller_bp == 0x0100 && mode == 0); g_deltas[g_collision_calls] = delta; g_flippers[g_collision_calls] = flipper; g_collision_calls++; } void tdkpin_move_flipper_bitmap_geometry_for_receiver( Win16FarPtr receiver, int32_t delta, uint16_t flipper) { assert(receiver == g_receiver); assert(g_bitmap_calls < g_collision_calls); assert(delta == g_deltas[g_bitmap_calls]); assert(flipper == g_flippers[g_bitmap_calls]); g_bitmap_calls++; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); g_collision_calls = 0; g_bitmap_calls = 0; memset(g_deltas, 0, sizeof(g_deltas)); memset(g_flippers, 0, sizeof(g_flippers)); } int main(void) { prepare_fixture(); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bda), 1); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bdb), 1); tdkpin_update_flippers(0x0100); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd4)) == 1); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd6)) == 1); assert(g_collision_calls == 2 && g_bitmap_calls == 2); assert(g_deltas[0] == -1 && g_flippers[0] == 1); assert(g_deltas[1] == -1 && g_flippers[1] == 2); g_collision_calls = 0; g_bitmap_calls = 0; tdkpin_update_flippers(0x0100); assert(g_collision_calls == 0 && g_bitmap_calls == 0); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bda), 0); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bdb), 0); tdkpin_update_flippers(0x0100); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd4)) == 0); assert(win16_read_u16(win16_far_add_offset(g_receiver, 0x0bd6)) == 0); assert(g_collision_calls == 2 && g_bitmap_calls == 2); assert(g_deltas[0] == 1 && g_flippers[0] == 1); assert(g_deltas[1] == 1 && g_flippers[1] == 2); g_collision_calls = 0; g_bitmap_calls = 0; tdkpin_update_flippers(0x0100); assert(g_collision_calls == 0 && g_bitmap_calls == 0); return 0; } ۶xf#include "../tdkpin_game_application.h" #include #include static unsigned g_sequence; static Win16FarPtr g_application; static uint8_t g_multimedia_args[3]; static uint16_t g_module_offset; static uint16_t g_module_selector; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; Win16FarPtr g_win16_message_box; static Win16FarPtr g_constructed_main; static Win16FarPtr g_constructor_title; static INT16 g_message_box_result; static uint16_t g_exit_status; static jmp_buf g_exit_jump; static unsigned g_base_builder_calls; void object_windows_application_initialize(Win16FarPtr application) { assert(++g_sequence == 1); assert(application == g_application); } uint8_t multimedia_initialize_export( uint8_t argument_1, uint8_t argument_2, uint8_t argument_3, uint16_t argument_4, uint16_t argument_5) { assert(++g_sequence == 2); g_multimedia_args[0] = argument_1; g_multimedia_args[1] = argument_2; g_multimedia_args[2] = argument_3; g_module_offset = argument_4; g_module_selector = argument_5; return 0; } Win16FarPtr tdkpin_main_window_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { assert(object == 0 && vmt == 0x009e && parent == 0); g_constructor_title = title; return g_constructed_main; } INT16 win16_call_message_box_far( Win16FarPtr procedure, HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type) { assert(procedure == g_win16_message_box && owner == 0); assert(text == win16_make_far_pointer(0x5000, 0x0245)); assert(caption == win16_make_far_pointer(0x5000, 0x022c)); assert(type == 0x2010); return g_message_box_result; } _Noreturn void borland_runtime_exit(uint16_t status) { g_exit_status = status; longjmp(g_exit_jump, 1); } void object_windows_build_window_class( Win16FarPtr window, WNDCLASS16 *window_class) { assert(window == g_application); *window_class = (WNDCLASS16){.style = 3, .background_brush = 6}; g_base_builder_calls++; } HICON16 LoadIcon16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == g_win16_instance); assert(resource == win16_make_far_pointer(0, 0x03e4)); return 0x1111; } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); return 0x2222; } HGDIOBJ16 GetStockObject16(INT16 object) { assert(object == 0 || object == 5); return (HGDIOBJ16)(0x3000 + object); } int main(void) { static uint8_t dgroup[0x1000]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); g_application = win16_make_far_pointer(0x7000, 2); g_sequence = 0; tdkpin_application_init_instance(g_application); assert(g_sequence == 2); assert(g_multimedia_args[0] == 1 && g_multimedia_args[1] == 1); assert(g_multimedia_args[2] == 1); assert(g_module_offset == 0x0222 && g_module_selector == 0x5000); static uint8_t application_bytes[32]; win16_bind_segment( 0x7000, application_bytes, sizeof(application_bytes), true); g_application = win16_make_far_pointer(0x7000, 2); g_win16_previous_instance = 0; g_constructed_main = win16_make_far_pointer(0x7100, 0x1234); tdkpin_application_init_application(g_application); assert(g_constructor_title == win16_make_far_pointer(0x5000, 0x022c)); assert(win16_read_far_pointer(g_application, 8) == g_constructed_main); g_win16_previous_instance = 1; g_win16_message_box = win16_make_far_pointer(0x6000, 0x1111); g_message_box_result = 1; g_exit_status = 0xffff; if (setjmp(g_exit_jump) == 0) { tdkpin_application_init_application(g_application); assert(false); } assert(g_exit_status == 0); WNDCLASS16 descriptor; g_win16_instance = 0x4444; g_base_builder_calls = 0; tdkpin_build_main_window_class(g_application, &descriptor); assert(descriptor.style == 0x3000); assert(descriptor.icon == 0x1111 && descriptor.cursor == 0x2222); assert(descriptor.background_brush == 0x3000); assert(descriptor.instance == 0x4444); assert(descriptor.class_extra_bytes == 0 && descriptor.window_extra_bytes == 0); tdkpin_build_stock_brush_class_a(g_application, &descriptor); assert(descriptor.style == 0x3803 && descriptor.background_brush == 0x3005); tdkpin_build_stock_brush_class_b(g_application, &descriptor); assert(descriptor.style == 0x3803 && descriptor.background_brush == 0x3005); assert(g_base_builder_calls == 3); return 0; } d rxTQk0~8Z( 2NB=ekXa gGk,IYҍ!ɊeTN7d2y-b5Rj5YDѩyk@'w2X4<j,ASB~ΏBJ`aq{o?KfPQS9P%V\H иE2{-FX`fHK&BÌ KȖ0! g#˲݄u[H\!+$|LYatG#+ ڔ5}:?g-R E\h#c\_W w\ը'A}qGS ;/S$>~5]ĐfOpë7 <[" x .#include "../tdkpin_game_setup.h" #include #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_window_bytes[0x0c00]; static uint8_t g_code[0x300]; static Win16FarPtr g_window; static uint32_t g_heap_free; static uint16_t g_language; static uint16_t g_speed; static Win16FarPtr g_timer_result; static unsigned g_setup_window_calls; static unsigned g_palette_realize_calls; static unsigned g_palette_load_calls; static unsigned g_palette_create_calls; static unsigned g_timer_calls; static unsigned g_collision_calls; static unsigned g_quad_calls; static unsigned g_message_calls; static unsigned g_close_calls; static uint16_t g_collision_ids[177]; static uint8_t g_final_active[176]; static uint16_t g_final_contact[176]; static TdkpinWordQuad g_quads[21]; static Win16FarPtr g_last_message_text; static HWND16 g_last_message_owner; static jmp_buf g_exit_jump; static bool g_expect_exit; uint32_t borland_heap_free_space(void) { return g_heap_free; } void object_windows_setup_window(Win16FarPtr window) { assert(window == g_window); g_setup_window_calls++; } void object_windows_close_if_allowed(Win16FarPtr window) { assert(window == g_window); g_close_calls++; } _Noreturn void borland_runtime_exit(uint16_t status) { assert(g_expect_exit && status == 0); longjmp(g_exit_jump, 1); } INT16 win16_call_message_box_far( Win16FarPtr procedure, HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type) { assert(procedure == win16_make_far_pointer(0x8000, 0x1111)); assert(caption == win16_dgroup_pointer(0x02aa)); assert(type == 0x2010); g_last_message_owner = owner; g_last_message_text = text; g_message_calls++; return 1; } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f02)); return 0x4444; } HCURSOR16 SetCursor16(HCURSOR16 cursor) { assert(cursor == 0x4444); return 0x5555; } void tdkpin_realize_nocollapse_palette(HWND16 window) { assert(window == 0x2222); g_palette_realize_calls++; } void tdkpin_load_palette_resource( Win16FarPtr destination, Win16FarPtr resource_name, HINSTANCE16 instance) { assert(destination == win16_dgroup_pointer(0x4450)); assert(resource_name == win16_make_far_pointer(0, 999)); assert(instance == 0x1234); g_palette_load_calls++; } void tdkpin_create_palette_from_rgb_table(void) { g_palette_create_calls++; } uint32_t GetTickCount16(void) { return 0x11223344u; } BorlandDivI32Result borland_divide_i32(int32_t dividend, int32_t divisor) { assert(divisor == 1000); return (BorlandDivI32Result){dividend / divisor, dividend % divisor}; } void borland_parameter_string(uint16_t index, Win16FarPtr destination) { static const char module[] = "C:\\TDKPIN.EXE"; assert(index == 0); win16_write_u8(destination, (uint8_t)(sizeof(module) - 1)); for (uint16_t byte = 0; byte < sizeof(module) - 1; byte++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)(byte + 1)), (uint8_t)module[byte]); } } Win16FarPtr borland_short_to_c_string( Win16FarPtr destination, Win16FarPtr source) { uint8_t length = win16_read_u8(source); for (uint16_t byte = 0; byte < length; byte++) { win16_write_u8( win16_far_add_offset(destination, byte), win16_read_u8(win16_far_add_offset(source, (uint16_t)(byte + 1)))); } win16_write_u8(win16_far_add_offset(destination, length), 0); return destination; } uint16_t borland_short_position(Win16FarPtr pattern, Win16FarPtr text) { assert(pattern == win16_make_far_pointer(0x7300, 0x026e)); assert(win16_read_u8(text) == 13); return 10; } Win16FarPtr borland_far_strncpy( Win16FarPtr destination, Win16FarPtr source, uint16_t maximum) { assert(maximum == 10); for (uint16_t byte = 0; byte < maximum; byte++) { win16_write_u8( win16_far_add_offset(destination, byte), win16_read_u8(win16_far_add_offset(source, byte))); } win16_write_u8(win16_far_add_offset(destination, maximum), 0); return destination; } Win16FarPtr borland_far_strcat(Win16FarPtr destination, Win16FarPtr source) { uint16_t end = 0; while (win16_read_u8(win16_far_add_offset(destination, end)) != 0) { end++; } uint16_t byte = 0; do { uint8_t value = win16_read_u8(win16_far_add_offset(source, byte)); win16_write_u8( win16_far_add_offset(destination, (uint16_t)(end + byte)), value); byte++; if (value == 0) { break; } } while (true); return destination; } static void assert_far_c_string(Win16FarPtr string, const char *expected) { for (uint16_t index = 0;; index++) { uint8_t actual = win16_read_u8(win16_far_add_offset(string, index)); assert(actual == (uint8_t)expected[index]); if (actual == 0) { break; } } } UINT16 GetPrivateProfileInt16( Win16FarPtr section, Win16FarPtr key, INT16 default_value, Win16FarPtr file_name) { assert(section == win16_dgroup_pointer(0x02c7)); assert_far_c_string(file_name, "C:\\TDKPIN.INI"); if (key == win16_dgroup_pointer(0x02d0)) { assert(default_value == 1); return g_language; } assert(key == win16_dgroup_pointer(0x02d9) && default_value == 3); return g_speed; } Win16FarPtr tdkpin_system_timer_construct( Win16FarPtr object, uint16_t vmt, uint8_t one_shot, uint16_t resolution_ms, uint16_t delay_ms, HWND16 recipient) { assert(object == 0 && vmt == 0x05c0 && one_shot == 0); assert(resolution_ms == 1 && delay_ms == 20 && recipient == 0x2222); g_timer_calls++; return g_timer_result; } void tdkpin_initialize_collision_record( const TdkpinCollisionInitArgs *arguments) { assert(g_collision_calls < 177 && arguments->index <= 175); g_collision_ids[g_collision_calls++] = arguments->index; g_final_active[arguments->index] = (uint8_t)arguments->active; g_final_contact[arguments->index] = arguments->contact_state; Win16FarPtr target = win16_dgroup_pointer((uint16_t)( 0x095b + arguments->index * 0x53u)); win16_write_u8(win16_far_add_offset(target, 0x34), (uint8_t)arguments->active); win16_write_u16(target, 0x43, arguments->contact_state); } void tdkpin_set_word_quad( uint16_t source_word_6, uint16_t source_word_4, uint16_t source_word_2, uint16_t source_word_0, uint16_t index) { assert(index == g_quad_calls + 1 && index <= 20); g_quads[index] = (TdkpinWordQuad){ source_word_0, source_word_2, source_word_4, source_word_6}; g_quad_calls++; } static void prepare_fixture(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_window_bytes, 0xa5, sizeof(g_window_bytes)); memset(g_code, 0, sizeof(g_code)); memset(g_collision_ids, 0, sizeof(g_collision_ids)); memset(g_final_active, 0, sizeof(g_final_active)); memset(g_final_contact, 0, sizeof(g_final_contact)); memset(g_quads, 0, sizeof(g_quads)); win16_reset_segment_bindings(); win16_bind_segment(0x7100, g_window_bytes, sizeof(g_window_bytes), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_bind_ne_segment(1, 0x7300, g_code, sizeof(g_code), false); win16_set_dgroup_selector(0x7200); uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000u; win16_bind_segment(0x7000, (void *)stack_base, 0x10000, true); g_window = win16_make_far_pointer(0x7100, 0); win16_write_u16(g_window, 4, 0x2222); win16_write_u16(win16_dgroup_pointer(0x06fe), 0, 0x1234); win16_write_u32( win16_dgroup_pointer(0x0666), 0, win16_make_far_pointer(0x8000, 0x1111)); memcpy(&g_dgroup[0x02aa], "TDK Pinball Machine 1.00", 25); memcpy(&g_dgroup[0x02c3], "INI", 4); memcpy(&g_dgroup[0x02c7], "Settings", 9); memcpy(&g_dgroup[0x02d0], "Language", 9); memcpy(&g_dgroup[0x02d9], "Speed", 6); memcpy(&g_dgroup[0x02df], "No timer available!", 20); g_heap_free = UINT32_C(0x00400000); g_language = 7; g_speed = 4; g_timer_result = win16_make_far_pointer(0x7400, 0x0100); g_setup_window_calls = 0; g_palette_realize_calls = 0; g_palette_load_calls = 0; g_palette_create_calls = 0; g_timer_calls = 0; g_collision_calls = 0; g_quad_calls = 0; g_message_calls = 0; g_close_calls = 0; g_last_message_text = 0; g_last_message_owner = 0; g_expect_exit = false; } static void test_successful_setup(void) { prepare_fixture(); tdkpin_setup_game_window(g_window); assert(g_setup_window_calls == 1); assert(g_palette_realize_calls == 1 && g_palette_load_calls == 1); assert(g_palette_create_calls == 1 && g_timer_calls == 1); assert(g_collision_calls == 177 && g_quad_calls == 20); assert(g_collision_ids[0] == 1 && g_collision_ids[1] == 2); assert(g_collision_ids[2] == 169 && g_collision_ids[3] == 170); assert(g_collision_ids[4] == 3); assert(g_collision_ids[170] == 169 && g_collision_ids[171] == 170); assert(g_collision_ids[176] == 175); assert(win16_read_u16(win16_dgroup_pointer(0x07cd)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x60)) == 4); assert(win16_read_u16(win16_dgroup_pointer(0x0871)) == 2); assert(win16_read_far_pointer(g_window, 0x49) == g_timer_result); assert(win16_read_u32(win16_dgroup_pointer(0x0720)) == 0x11223344u); assert(win16_read_u32(win16_dgroup_pointer(0x0829)) == 140000u); assert(win16_read_u32(win16_dgroup_pointer(0x082d)) == 650000u); assert(win16_read_u32(win16_dgroup_pointer(0x0831)) == 1300000u); assert(win16_read_u32(win16_dgroup_pointer(0x0835)) == 4000000u); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0ba2)) == 325u); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0ba6)) == 413u); assert(g_quads[1].word_0 == 0x0067 && g_quads[1].word_6 == 0x0143); assert(g_quads[20].word_0 == 0x0009 && g_quads[20].word_6 == 0x001e); for (uint16_t id = 1; id <= 175; id++) { assert(win16_read_u8(win16_far_add_offset( g_window, (uint16_t)(0x03cc + id))) == g_final_active[id]); assert(win16_read_u16(win16_far_add_offset( g_window, (uint16_t)(0x0a42 + id * 2u))) == g_final_contact[id]); assert(win16_read_u8(win16_far_add_offset( g_window, (uint16_t)(0x61 + id))) == 0); } assert(g_message_calls == 0 && g_close_calls == 0); } static void test_low_memory_failure(void) { prepare_fixture(); g_heap_free = UINT32_C(0x003fffff); g_expect_exit = true; if (setjmp(g_exit_jump) == 0) { tdkpin_setup_game_window(g_window); assert(false); } assert(g_message_calls == 1 && g_last_message_owner == 0); assert(g_last_message_text == win16_dgroup_pointer(0x0260)); assert(g_close_calls == 1 && g_setup_window_calls == 0); assert(g_collision_calls == 0); } static void test_timer_failure(void) { prepare_fixture(); g_timer_result = 0; g_expect_exit = true; if (setjmp(g_exit_jump) == 0) { tdkpin_setup_game_window(g_window); assert(false); } assert(g_message_calls == 1 && g_last_message_owner == 0x2222); assert(g_last_message_text == win16_dgroup_pointer(0x02df)); assert(g_close_calls == 0 && g_collision_calls == 0); } int main(void) { test_successful_setup(); test_low_memory_failure(); test_timer_failure(); return 0; } ;y(xP#include "../tdkpin_game_windows.h" #include #include #include #include enum { WINDOW_HANDLE = 4, WINDOW_ATTRIBUTES = 0x21, WINDOW_X = 0x29, WINDOW_Y = 0x2b, WINDOW_WIDTH = 0x2d, WINDOW_HEIGHT = 0x2f, WINDOW_OWNER = 0x41, }; static uint8_t g_objects[0x1000]; static bool g_enter; static uint32_t g_base_style; static INT16 g_screen_width; static INT16 g_screen_height; static unsigned g_base_calls; static Win16FarPtr g_expected_title; static Win16FarPtr g_expected_parent; static unsigned g_focus_calls; static HWND16 g_focused_window; static Win16FarPtr object_at(uint16_t offset) { return win16_make_far_pointer(0x6000, offset); } static void reset_fixture(void) { memset(g_objects, 0, sizeof(g_objects)); win16_reset_segment_bindings(); win16_bind_segment(0x6000, g_objects, sizeof(g_objects), true); g_enter = true; g_base_style = 0; g_screen_width = 1024; g_screen_height = 768; g_base_calls = 0; g_expected_title = object_at(0x700); g_expected_parent = object_at(0x800); g_focus_calls = 0; g_focused_window = 0; } bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t offset) { assert(offset == 0); if (g_enter && frame->vmt_argument != 0) { win16_write_u16(frame->object, 0, frame->vmt_argument); } return g_enter; } Win16FarPtr object_windows_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { assert(vmt == 0); assert(title == g_expected_title); assert(parent == g_expected_parent); g_base_calls++; win16_write_u32(window, WINDOW_ATTRIBUTES, g_base_style); win16_write_u16(window, WINDOW_HANDLE, 0x4444); return window; } INT16 GetSystemMetrics16(INT16 index) { assert(index == 0 || index == 1); return index == 0 ? g_screen_width : g_screen_height; } HWND16 SetFocus16(HWND16 window) { g_focus_calls++; g_focused_window = window; return 0x9999; } static void assert_geometry( Win16FarPtr window, INT16 x, INT16 y, uint16_t width, uint16_t height) { assert((INT16)win16_read_u16( win16_far_add_offset(window, WINDOW_X)) == x); assert((INT16)win16_read_u16( win16_far_add_offset(window, WINDOW_Y)) == y); assert(win16_read_u16( win16_far_add_offset(window, WINDOW_WIDTH)) == width); assert(win16_read_u16( win16_far_add_offset(window, WINDOW_HEIGHT)) == height); } static void test_main_window(void) { reset_fixture(); Win16FarPtr window = object_at(0x100); assert(tdkpin_main_window_construct( window, 0x1234, g_expected_title, g_expected_parent) == window); assert(g_base_calls == 1); assert(win16_read_u16(window) == 0x1234); assert_geometry(window, 192, 144, 640, 480); assert(win16_read_u32( win16_far_add_offset(window, WINDOW_ATTRIBUTES)) == 0x86ca0000u); assert(g_focus_calls == 0); reset_fixture(); window = object_at(0x100); g_screen_width = 801; g_screen_height = 601; (void)tdkpin_main_window_construct( window, 0, g_expected_title, g_expected_parent); assert_geometry(window, 80, 60, 640, 480); } static void test_centered_child_window(void) { reset_fixture(); Win16FarPtr window = object_at(0x200); g_base_style = 0x00010000u; assert(tdkpin_centered_child_window_construct( window, 0x2345, g_expected_title, g_expected_parent) == window); assert(g_base_calls == 1); assert(win16_read_far_pointer(window, WINDOW_OWNER) == g_expected_parent); assert_geometry(window, 140, 80, 360, 300); assert(win16_read_u32( win16_far_add_offset(window, WINDOW_ATTRIBUTES)) == 0x46810002u); assert(g_focus_calls == 1 && g_focused_window == 0x4444); } static void test_full_child_window(void) { reset_fixture(); Win16FarPtr window = object_at(0x300); g_base_style = 0xffffffffu; assert(tdkpin_full_child_window_construct( window, 0x3456, g_expected_title, g_expected_parent) == window); assert(g_base_calls == 1); assert(win16_read_far_pointer(window, WINDOW_OWNER) == g_expected_parent); assert_geometry(window, 0, 0, 640, 460); assert(win16_read_u32( win16_far_add_offset(window, WINDOW_ATTRIBUTES)) == 0x46000002u); assert(g_focus_calls == 1 && g_focused_window == 0x4444); } static void test_constructor_entry_failure(void) { reset_fixture(); Win16FarPtr window = object_at(0x400); win16_write_u32(window, WINDOW_ATTRIBUTES, 0x11223344u); g_enter = false; assert(tdkpin_centered_child_window_construct( window, 0x4567, g_expected_title, g_expected_parent) == window); assert(g_base_calls == 0 && g_focus_calls == 0); assert(win16_read_u32( win16_far_add_offset(window, WINDOW_ATTRIBUTES)) == 0x11223344u); } int main(void) { test_main_window(); test_centered_child_window(); test_full_child_window(); test_constructor_entry_failure(); return 0; } KV_xm{~u'M5SgWnޞړj 8:RcfH_12:_}V$yb۷!+CTo;WQUaB>q6n" v$JʺwƺE *fepfn8X}clFm*[-sA(DWGIcMvf3n)yq<"ZF1Jw i#̫Q!D'.IY0|K+Zl(c9ZVKN)w _ Ё@K뉳<#@ Stdν[D"֤}約,9F2<(aH(;,]ː)A":hV :`>=NX aFr؊ֵ%c*9E>\zضʊrɬjx] Rs6+]pcHuOM>db-4J9pUwV\7o$m@J:nнkzDAԻz(c&SEuN-VcD b6@;ϟ>9;^3qZrԌmO&+3 ^UY0bAI⵺U<`2:*su4[`6"!8ԫBnBܮ(ت{]}5B:Ŝh:1UG^ԝ+UqG;iȹ?(EVPGY`,=eQQ<~¯wCͿ&c )˹F$y 7`Qw{3T܄a W .X Peo'q]+$2^NPFc!lؕA$ik o ψB 5p ڣGmeVPL]$8GL`P@gv[a(濃f ?ms,}X@[rI=qZ*wd`e`e!RGyu+|[KD(e|frs:WZbٳYTS2V[pz6LŁ-T>ϭT'iqz|v x zyܾ W+V]=_x[t{[5;rGpUE{D1ߍIYp[! P0 I6 T(?(;HX~0WwUE7kRTLF;toY̧pӲMq6; |ظ.s*K@Wj9<k}3 05;qEw B37CS䢊'L؜91޶X-ۢ:)-ftBke%9>{sbD[X9ج=7(og*֐N3Bȶh.)VZ+viK%WZqY$Hs6G{ ?qsE6cğBK;*@qX.bQ{hۍ֓YzOB]s+U>5b40Mf!I9 .İh {W$m׷ףn ^<{c\e_h%m '@ e}Wyg{QB(T"21(.P!}Zic:˿kFs,?r 7o@޸@BW9>S:r9zS:ƾr`wo!#w .9mGy9u}ԓ!ٯ^Grv.NpO}٧pj Px zc5@YDSH6\ANm 1Xh)Bcz6-ѢBOx Z9b12e"=⅄D}?js)XG cqW \K?謒Xx#include "../tdkpin_global_memory.h" #include static UINT16 g_alloc_flags; static uint32_t g_alloc_bytes; static HGLOBAL16 g_handle; static Win16FarPtr g_locked_pointer; static uint16_t g_handle_selector; static unsigned g_unlock_sequence; static unsigned g_free_sequence; HGLOBAL16 GlobalAlloc16(UINT16 flags, uint32_t bytes) { g_alloc_flags = flags; g_alloc_bytes = bytes; return g_handle; } Win16FarPtr GlobalLock16(HGLOBAL16 allocation) { assert(allocation == g_handle); return g_locked_pointer; } HGLOBAL16 GlobalHandle16(uint16_t selector) { g_handle_selector = selector; return g_handle; } BOOL16 GlobalUnlock16(HGLOBAL16 allocation) { assert(allocation == g_handle); g_unlock_sequence = 1; return 0; } HGLOBAL16 GlobalFree16(HGLOBAL16 allocation) { assert(allocation == g_handle && g_unlock_sequence == 1); g_free_sequence = 2; return 0; } int main(void) { g_handle = 0x1234; g_locked_pointer = win16_make_far_pointer(0xa100, 0x0040); Win16FarPtr block = tdkpin_global_allocate_locked(0x0042, 0x12345678u); assert(block == g_locked_pointer); assert(g_alloc_flags == 0x0042 && g_alloc_bytes == 0x12345678u); tdkpin_global_unlock_and_free( win16_make_far_pointer(0xa100, 0xbeef)); assert(g_handle_selector == 0xa100); assert(g_unlock_sequence == 1 && g_free_sequence == 2); return 0; } x- #include "../tdkpin_heap.h" #include #include uint16_t g_borland_heap_segment_head; uint16_t g_borland_local_heap_limit = 0x0400; uint16_t g_borland_heap_segment_bytes = 0x2000; Win16FarPtr g_borland_heap_error_handler; static uint8_t g_dgroup[0x10000]; static uint8_t g_heap[0x2000]; static bool g_heap_bound; static HGLOBAL16 g_freed_handle; static uint32_t g_free_space; static uint32_t g_compact_result; uint32_t GetFreeSpace16(UINT16 flags) { assert(flags == 0x1000); return g_free_space; } uint32_t GlobalCompact16(uint32_t requested_bytes) { assert(requested_bytes == 0); return g_compact_result; } Win16FarPtr borland_global_allocate(uint16_t bytes) { assert(bytes == 0x2000); if (!g_heap_bound) { memset(g_heap, 0, sizeof(g_heap)); win16_bind_ne_segment(0, 0x9000, g_heap, sizeof(g_heap), true); g_heap_bound = true; } return win16_make_far_pointer(0x9000, 0); } HGLOBAL16 GlobalHandle16(uint16_t selector) { return selector == 0x9000 ? 0x77 : 0; } BOOL16 GlobalUnlock16(HGLOBAL16 allocation) { assert(allocation == 0x77); return 1; } HGLOBAL16 GlobalFree16(HGLOBAL16 allocation) { assert(allocation == 0x77); g_freed_handle = allocation; return 0; } uint16_t win16_call_pascal_u16(Win16FarPtr procedure, uint16_t argument) { (void)procedure; (void)argument; return 0; } int main(void) { win16_reset_segment_bindings(); win16_bind_ne_segment(6, 0x5000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x5000); g_borland_heap_segment_head = 0; g_borland_heap_error_handler = 0; g_heap_bound = false; g_freed_handle = 0; BorlandAllocationAttempt zero = borland_try_get_mem(0); assert(!zero.failed && zero.block == 0); BorlandAllocationAttempt first = borland_try_get_mem(100); assert(!first.failed && first.block == win16_make_far_pointer(0x9000, 12)); assert(g_borland_heap_segment_head == 0x9000); assert(win16_read_u16(win16_make_far_pointer(0x9000, 0)) == 0x5054); assert(win16_read_u16(win16_make_far_pointer(0x9000, 8)) == 0x1f90); g_free_space = 0x10000; assert(borland_heap_free_space() == 0x11f90); g_compact_result = 100; assert(borland_heap_largest_block() == 0x1f90); g_compact_result = 0x10000; assert(borland_heap_largest_block() == 0x10000); BorlandAllocationAttempt second = borland_try_get_mem(20); assert(!second.failed && second.block == win16_make_far_pointer(0x9000, 112)); assert(win16_read_u16(win16_make_far_pointer(0x9000, 8)) == 0x1f7c); assert(!borland_try_free_mem(first.block, 100)); assert(borland_try_free_mem(first.block, 100)); assert(!borland_try_free_mem(second.block, 20)); assert(g_borland_heap_segment_head == 0); assert(g_freed_handle == 0x77); return 0; } బx?#include "../tdkpin_heap.h" #include #include uint16_t g_borland_heap_segment_head; uint16_t g_borland_local_heap_limit; uint16_t g_borland_heap_segment_bytes; Win16FarPtr g_borland_heap_error_handler; static uint8_t g_dgroup[0x10000]; static uint8_t g_segments[4][0x100]; static unsigned g_segment_count; static bool g_fail_segment; static bool g_fail_direct; static Win16FarPtr g_direct_pointer; static uint16_t g_handler_action; static unsigned g_handler_calls; static unsigned g_global_frees; Win16FarPtr borland_global_allocate(uint16_t bytes) { if (bytes == g_borland_heap_segment_bytes) { if (g_fail_segment) { return 0; } assert(g_segment_count < 4 && bytes <= sizeof(g_segments[0])); uint16_t selector = (uint16_t)(0x9000 + g_segment_count); memset(g_segments[g_segment_count], 0, sizeof(g_segments[0])); win16_bind_segment( selector, g_segments[g_segment_count], bytes, true); g_segment_count++; return win16_make_far_pointer(selector, 0); } return g_fail_direct ? 0 : g_direct_pointer; } HGLOBAL16 GlobalHandle16(uint16_t selector) { return selector >= 0x9000 && selector < 0x9004 ? (HGLOBAL16)(selector - 0x8f00) : 0; } BOOL16 GlobalUnlock16(HGLOBAL16 allocation) { assert(allocation >= 0x100 && allocation < 0x104); return 1; } HGLOBAL16 GlobalFree16(HGLOBAL16 allocation) { assert(allocation >= 0x100 && allocation < 0x104); g_global_frees++; return 0; } uint16_t win16_call_pascal_u16(Win16FarPtr procedure, uint16_t argument) { assert(procedure == g_borland_heap_error_handler && argument != 0); g_handler_calls++; if (g_handler_action == 2) { g_fail_segment = false; g_fail_direct = false; } return g_handler_action; } static void reset_environment(void) { win16_reset_segment_bindings(); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x5000); g_borland_heap_segment_head = 0; g_borland_local_heap_limit = 64; g_borland_heap_segment_bytes = 64; g_borland_heap_error_handler = 0; g_segment_count = 0; g_fail_segment = false; g_fail_direct = false; g_direct_pointer = win16_make_far_pointer(0xa000, 0); g_handler_action = 0; g_handler_calls = 0; g_global_frees = 0; } static void test_global_and_fallback_paths(void) { reset_environment(); BorlandAllocationAttempt direct = borland_try_get_mem(100); assert(!direct.failed && direct.block == g_direct_pointer); reset_environment(); g_borland_local_heap_limit = 32; g_fail_direct = true; BorlandAllocationAttempt fallback = borland_try_get_mem(40); assert(!fallback.failed); assert(fallback.block == win16_make_far_pointer(0x9000, 12)); } static void test_heap_error_actions(void) { reset_environment(); g_fail_segment = true; g_fail_direct = true; g_borland_heap_error_handler = win16_make_far_pointer(0x7000, 0x0100); g_handler_action = 1; BorlandAllocationAttempt result = borland_try_get_mem(20); assert(!result.failed && result.block == 0 && g_handler_calls == 1); g_handler_calls = 0; g_handler_action = 0; result = borland_try_get_mem(20); assert(result.failed && result.block == 0 && g_handler_calls == 1); g_handler_calls = 0; g_handler_action = 2; result = borland_try_get_mem(20); assert(!result.failed && result.block == win16_make_far_pointer(0x9000, 12)); assert(g_handler_calls == 1); } static void test_multi_segment_ring_and_release(void) { reset_environment(); BorlandAllocationAttempt first = borland_try_get_mem(20); BorlandAllocationAttempt second = borland_try_get_mem(20); BorlandAllocationAttempt third = borland_try_get_mem(20); assert(first.block == win16_make_far_pointer(0x9000, 12)); assert(second.block == win16_make_far_pointer(0x9000, 32)); assert(third.block == win16_make_far_pointer(0x9001, 12)); assert(g_borland_heap_segment_head == 0x9001); assert(win16_read_u16(win16_make_far_pointer(0x9000, 10)) == 0x9001); assert(win16_read_u16(win16_make_far_pointer(0x9001, 10)) == 0x9000); assert(!borland_try_free_mem(first.block, 20)); assert(!borland_try_free_mem(second.block, 20)); assert(g_borland_heap_segment_head == 0x9001 && g_global_frees == 1); assert(win16_read_u16(win16_make_far_pointer(0x9001, 10)) == 0x9001); assert(!borland_try_free_mem(third.block, 20)); assert(g_borland_heap_segment_head == 0 && g_global_frees == 2); } int main(void) { test_global_and_fallback_paths(); test_heap_error_actions(); test_multi_segment_ring_and_release(); return 0; } 'x(#include "../tdkpin_borland_runtime.h" #include #include #include #include #include uint16_t g_borland_heap_reserve_bytes = 0x2000; Win16FarPtr g_borland_heap_reserve; uint8_t g_borland_heap_reserve_disabled; Win16FarPtr g_borland_heap_error_handler; Win16FarPtr g_borland_exit_proc; uint16_t g_borland_exit_code_word; uint16_t g_borland_error_offset; uint16_t g_borland_error_segment; uint16_t g_borland_windows_mode; _Atomic uint16_t g_borland_io_result; char g_borland_runtime_error_text[32]; static Win16FarPtr g_next_allocation; static Win16FarPtr g_freed_block; static uint16_t g_freed_bytes; uint16_t g_borland_global_alloc_flags = 2; static HGLOBAL16 g_global_handle; static Win16FarPtr g_global_pointer; static bool g_try_get_failed; static bool g_try_free_failed; static jmp_buf g_terminate_jump; static bool g_expect_terminate; static uint8_t g_terminated_status; static Win16FarPtr g_exit_calls[4]; static unsigned g_exit_call_count; static Win16FarPtr g_exit_successor; static unsigned g_message_box_calls; static UINT16 g_message_box_type; HGLOBAL16 GlobalAlloc16(UINT16 flags, uint32_t bytes) { assert(flags == 2 && bytes == 1234); return g_global_handle; } Win16FarPtr GlobalLock16(HGLOBAL16 allocation) { assert(allocation == g_global_handle); return g_global_pointer; } INT16 MessageBox16( HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type) { (void)owner; (void)text; (void)caption; g_message_box_calls++; g_message_box_type = type; return 0; } void win16_call_exit_proc(Win16FarPtr procedure) { assert(g_borland_exit_proc == 0); assert(atomic_load(&g_borland_io_result) == 0); g_exit_calls[g_exit_call_count++] = procedure; if (g_exit_successor != 0) { g_borland_exit_proc = g_exit_successor; g_exit_successor = 0; } } _Noreturn void win16_dos_terminate(uint8_t status) { g_terminated_status = status; if (g_expect_terminate) { longjmp(g_terminate_jump, 1); } abort(); } BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes) { assert(bytes == g_borland_heap_reserve_bytes); return (BorlandAllocationAttempt){g_next_allocation, g_try_get_failed}; } bool borland_try_free_mem(Win16FarPtr block, uint16_t bytes) { g_freed_block = block; g_freed_bytes = bytes; return g_try_free_failed; } int main(void) { static uint8_t code[0x4000]; static uint8_t dgroup[0x1000]; win16_reset_segment_bindings(); win16_bind_ne_segment(2, 0x6000, code, sizeof(code), false); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_set_indeterminate_u16(0xbeef); code[0] = 2; g_global_handle = 0; assert(borland_global_allocate(1234) == 0); g_global_handle = 9; g_global_pointer = win16_make_far_pointer(0x8123, 0x0040); assert(borland_global_allocate(1234) == g_global_pointer); static uint8_t move_source[32]; static uint8_t move_destination[32]; for (uint8_t index = 0; index < sizeof(move_source); index++) { move_source[index] = index; } memset(move_destination, 0, sizeof(move_destination)); win16_bind_segment(0x7100, move_source, sizeof(move_source), true); win16_bind_segment( 0x7200, move_destination, sizeof(move_destination), true); borland_move_bytes( win16_make_far_pointer(0x7200, 2), win16_make_far_pointer(0x7100, 8), 6); assert(memcmp(&move_destination[2], &move_source[8], 6) == 0); /* Source offset below destination selects STD even across selectors. */ borland_move_bytes( win16_make_far_pointer(0x7200, 12), win16_make_far_pointer(0x7100, 2), 6); assert(memcmp(&move_destination[12], &move_source[2], 6) == 0); memcpy(move_destination, move_source, sizeof(move_destination)); borland_move_bytes( win16_make_far_pointer(0x7200, 6), win16_make_far_pointer(0x7200, 2), 12); assert(memcmp(&move_destination[6], &move_source[2], 12) == 0); uint8_t before_zero_move[sizeof(move_destination)]; memcpy(before_zero_move, move_destination, sizeof(move_destination)); borland_move_bytes( win16_make_far_pointer(0x7200, 30), win16_make_far_pointer(0x7100, 31), 0); assert(memcmp( move_destination, before_zero_move, sizeof(move_destination)) == 0); static uint8_t record_source[24]; static uint8_t record_destination[24]; for (uint8_t index = 0; index < sizeof(record_source); index++) { record_source[index] = (uint8_t)(0xa0u + index); } memset(record_destination, 0x55, sizeof(record_destination)); win16_bind_segment( 0x7300, record_source, sizeof(record_source), true); win16_bind_segment( 0x7400, record_destination, sizeof(record_destination), true); win16_write_u16(win16_make_far_pointer(0x5000, 0x0300), 0, 10); win16_write_u16(win16_make_far_pointer(0x7400, 10), 0, 0x0300); borland_copy_typed_record( 6, win16_make_far_pointer(0x7400, 4), win16_make_far_pointer(0x7300, 2)); assert(memcmp(&record_destination[4], &record_source[2], 6) == 0); assert(record_destination[12] == record_source[10]); assert(record_destination[13] == record_source[11]); assert(win16_read_u16(win16_make_far_pointer(0x7400, 10)) == 0x0300); win16_write_u16(win16_make_far_pointer(0x5000, 0x0302), 0, 0); win16_write_u16(win16_make_far_pointer(0x7400, 16), 0, 0x0302); borland_copy_typed_record( 1, win16_make_far_pointer(0x7400, 15), win16_make_far_pointer(0x7500, 0xffff)); assert(win16_read_u16(win16_make_far_pointer(0x7400, 16)) == 0x0302); g_borland_heap_reserve = 0; g_next_allocation = win16_make_far_pointer(0x7000, 0x0100); assert(borland_heap_reserve_is_unallocated()); borland_ensure_heap_reserve(); assert(g_borland_heap_reserve == g_next_allocation); borland_ensure_heap_reserve(); assert(g_borland_heap_reserve == g_next_allocation); g_borland_heap_reserve_disabled = 1; assert(borland_release_heap_reserve_on_oom(64) == 1); assert(g_borland_heap_reserve == g_next_allocation); g_borland_heap_reserve_disabled = 0; g_freed_block = 0; assert(borland_release_heap_reserve_on_oom(64) == 2); assert(g_freed_block == g_next_allocation && g_freed_bytes == 0x2000); assert(g_borland_heap_reserve == 0); assert(borland_release_heap_reserve_on_oom(64) == 0); assert(borland_release_heap_reserve_on_oom(0) == 0xbeef); borland_initialize_heap_reserve(); assert(g_borland_heap_reserve == g_next_allocation); assert(g_borland_heap_error_handler == win16_make_far_pointer(0x6000, 0x2e22)); g_try_get_failed = false; g_next_allocation = win16_make_far_pointer(0x7000, 0x0200); assert(borland_get_mem(g_borland_heap_reserve_bytes) == g_next_allocation); g_try_free_failed = false; borland_free_mem(g_next_allocation, g_borland_heap_reserve_bytes); g_borland_windows_mode = 0; g_expect_terminate = true; g_try_get_failed = true; win16_set_current_return_address( win16_make_far_pointer(0xffff, 0x2222)); if (setjmp(g_terminate_jump) == 0) { (void)borland_get_mem(g_borland_heap_reserve_bytes); assert(false); } assert(g_terminated_status == 203); assert(g_borland_error_offset == 0x2222); assert(g_borland_error_segment == 0xffff); g_try_get_failed = false; g_try_free_failed = true; win16_set_current_return_address( win16_make_far_pointer(0x6000, 0x3333)); if (setjmp(g_terminate_jump) == 0) { borland_free_mem(g_next_allocation, g_borland_heap_reserve_bytes); assert(false); } assert(g_terminated_status == 204); assert(g_borland_error_offset == 0x3333); assert(g_borland_error_segment == 2); atomic_store(&g_borland_io_result, 0); borland_require_io_success(); BorlandInt32Range range = {-10, 20}; borland_check_int32_range(-10, &range); borland_check_int32_range(20, &range); atomic_store(&g_borland_io_result, 5); win16_set_current_return_address( win16_make_far_pointer(0xffff, 0x4444)); if (setjmp(g_terminate_jump) == 0) { borland_require_io_success(); assert(false); } assert(g_terminated_status == 5); win16_set_current_return_address( win16_make_far_pointer(0xffff, 0x5555)); if (setjmp(g_terminate_jump) == 0) { borland_check_int32_range(-11, &range); assert(false); } assert(g_terminated_status == 201); if (setjmp(g_terminate_jump) == 0) { borland_check_int32_range(21, &range); assert(false); } assert(g_terminated_status == 201); if (setjmp(g_terminate_jump) == 0) { borland_runtime_error_215(); assert(false); } assert(g_terminated_status == 215); g_exit_call_count = 0; g_borland_exit_proc = win16_make_far_pointer(0x7000, 0x0100); g_exit_successor = win16_make_far_pointer(0x7000, 0x0200); atomic_store(&g_borland_io_result, 99); borland_run_exit_procedures(); assert(g_exit_call_count == 2); assert(g_exit_calls[0] == win16_make_far_pointer(0x7000, 0x0100)); assert(g_exit_calls[1] == win16_make_far_pointer(0x7000, 0x0200)); assert(g_borland_exit_proc == 0); assert(atomic_load(&g_borland_io_result) == 0); g_borland_windows_mode = 0; if (setjmp(g_terminate_jump) == 0) { borland_runtime_exit(0x1234); assert(false); } assert(g_borland_exit_code_word == 0x1234); assert(g_terminated_status == 0x34); assert(g_borland_error_offset == 0 && g_borland_error_segment == 0); strcpy(g_borland_runtime_error_text, "Runtime error 000 at 0000:0000."); g_borland_windows_mode = 1; g_message_box_calls = 0; win16_set_current_return_address( win16_make_far_pointer(0x6000, 0x3333)); if (setjmp(g_terminate_jump) == 0) { borland_runtime_error(201); assert(false); } assert(g_terminated_status == 201); assert(g_message_box_calls == 1 && g_message_box_type == 0x1010); assert(strcmp(g_borland_runtime_error_text, "Runtime error 201 at 0002:3333.") == 0); g_expect_terminate = false; return 0; } S3Fſ xW #include "../tdkpin_highscores.h" #include #include #include #include enum { FILE_HEADER_BYTES = 16, SCORE_BYTES = TDKPIN_HIGHSCORE_COUNT * 4, NAME_BYTES = TDKPIN_HIGHSCORE_COUNT * TDKPIN_HIGHSCORE_NAME_BYTES, FILE_BYTES = FILE_HEADER_BYTES + SCORE_BYTES + NAME_BYTES, }; static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x1000]; static uint8_t g_call_stack[0x1000]; static uint8_t g_file_bytes[FILE_BYTES]; static uint8_t g_input_bytes[FILE_BYTES]; static bool g_create_fails; static unsigned g_create_calls; static HFILE16 g_open_results[2]; static unsigned g_open_calls; static uint16_t g_input_position; static uint16_t g_input_size; static uint16_t g_read_limits[3]; static unsigned g_read_calls; static unsigned g_write_calls; static unsigned g_close_calls; static uint16_t g_file_position; static unsigned g_dialog_construct_calls; static unsigned g_dialog_exec_calls; static unsigned g_child_construct_calls; static unsigned g_make_window_calls; static unsigned g_show_calls; static Win16FarPtr g_dialog; static Win16FarPtr g_child; static Win16FarPtr g_made_child; static Win16FarPtr g_application; static Win16FarPtr g_receiver; static Win16FarPtr g_exec_dialog_procedure; static Win16FarPtr g_make_window_procedure; static unsigned g_select_palette_calls; static unsigned g_unrealize_calls; static unsigned g_realize_calls; static unsigned g_compatible_dc_calls; static unsigned g_compatible_bitmap_calls; static unsigned g_select_object_calls; static unsigned g_bitblt_calls; static unsigned g_text_color_calls; static unsigned g_text_align_calls; static unsigned g_bk_mode_calls; static unsigned g_text_out_calls; static unsigned g_delete_object_calls; static unsigned g_delete_dc_calls; static char g_drawn_text[21][64]; static INT16 g_drawn_x[21]; static INT16 g_drawn_y[21]; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } static Win16FarPtr object_at(uint16_t offset) { return win16_make_far_pointer(0x6000, offset); } Win16FarPtr object_windows_text_dialog_construct( Win16FarPtr dialog, uint16_t vmt, INT16 control_id, Win16FarPtr text_buffer, Win16FarPtr label, Win16FarPtr caption, Win16FarPtr parent) { assert(dialog == 0 && vmt == 0x01ce && control_id == 0x0016); uint8_t insertion = g_dgroup[0x07d2]; assert(text_buffer == dgroup_at((uint16_t)(0x0890 + insertion * 22u))); assert(label == dgroup_at(0x0373)); assert(caption == dgroup_at(0x0349)); assert(parent == g_receiver); g_dialog_construct_calls++; return g_dialog; } Win16FarPtr tdkpin_centered_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { assert(window == 0 && vmt == 0x010e); assert(title == dgroup_at(0x038b) && parent == g_receiver); g_child_construct_calls++; return g_child; } int16_t win16_call_application_dialog_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr dialog) { assert(procedure == g_exec_dialog_procedure); assert(application == g_application && dialog == g_dialog); g_dialog_exec_calls++; return 17; } Win16FarPtr win16_call_application_window_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr window) { assert(procedure == g_make_window_procedure); assert(application == g_application && window == g_child); g_make_window_calls++; return g_made_child; } void object_windows_show(Win16FarPtr object, INT16 command) { assert(object == g_made_child && command == 1); g_show_calls++; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x1111 && force_background == 0); if (g_select_palette_calls == 0) { assert(palette == 0x2222); g_select_palette_calls++; return 0x3333; } assert(g_select_palette_calls == 1 && palette == 0x3333); g_select_palette_calls++; return 0x2222; } BOOL16 UnrealizeObject16(HGDIOBJ16 object) { assert(object == 0x2222); g_unrealize_calls++; return 1; } UINT16 RealizePalette16(HDC16 dc) { assert(dc == 0x1111); g_realize_calls++; return 5; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x1111 && g_compatible_dc_calls < 2); return (HDC16)(0x4001 + g_compatible_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x1111 && width == 360 && height == 300); g_compatible_bitmap_calls++; return 0x5002; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { switch (g_select_object_calls++) { case 0: assert(dc == 0x4001 && object == 0x5001); return 0x6001; case 1: assert(dc == 0x4002 && object == 0x5002); return 0x6002; case 2: assert(dc == 0x4002 && object == 0x6002); return 0x5002; default: assert(g_select_object_calls == 4); assert(dc == 0x4001 && object == 0x6001); return 0x5001; } } COLORREF16 GetTextColor16(HDC16 dc) { assert(dc == 0x4002); return 0x00112233u; } COLORREF16 SetTextColor16(HDC16 dc, COLORREF16 color) { assert(dc == 0x4002 && g_text_color_calls < 2); assert(color == (g_text_color_calls == 0 ? 0 : 0x00112233u)); g_text_color_calls++; return color == 0 ? 0x00112233u : 0; } UINT16 SetTextAlign16(HDC16 dc, UINT16 alignment) { assert(dc == 0x4002 && g_text_align_calls < 22); if (g_text_align_calls == 0) { assert(alignment == 6); } else if (g_text_align_calls == 21) { assert(alignment == 7); } else { assert(alignment == (g_text_align_calls & 1u ? 0 : 2)); } g_text_align_calls++; return g_text_align_calls == 1 ? 7 : 0; } INT16 SetBkMode16(HDC16 dc, INT16 mode) { assert(dc == 0x4002 && g_bk_mode_calls < 2); assert(mode == (g_bk_mode_calls == 0 ? 1 : 2)); g_bk_mode_calls++; return mode == 1 ? 2 : 1; } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(destination_x == 0 && destination_y == 0); assert(width == 360 && height == 300); assert(raster_operation == 0x00cc0020u); if (g_bitblt_calls == 0) { assert(destination == 0x4002 && source == 0x4001); assert(source_x == 32 && source_y == 204); } else { assert(g_bitblt_calls == 1); assert(destination == 0x1111 && source == 0x4002); assert(source_x == 0 && source_y == 0); } g_bitblt_calls++; return 1; } BOOL16 TextOut16( HDC16 dc, INT16 x, INT16 y, Win16FarPtr text, INT16 character_count) { assert(dc == 0x4002 && g_text_out_calls < 21); assert(character_count >= 0 && character_count < 64); for (INT16 index = 0; index < character_count; index++) { g_drawn_text[g_text_out_calls][index] = (char)win16_read_u8( win16_far_add_offset(text, (uint16_t)index)); } g_drawn_text[g_text_out_calls][character_count] = '\0'; g_drawn_x[g_text_out_calls] = x; g_drawn_y[g_text_out_calls] = y; g_text_out_calls++; return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5002); g_delete_object_calls++; return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (g_delete_dc_calls == 0 ? 0x4002 : 0x4001)); g_delete_dc_calls++; return 1; } HFILE16 LCreate16(Win16FarPtr file_name, INT16 attributes) { static const char expected_name[] = "HiScores.Dat"; assert(file_name == dgroup_at(0x0312)); assert(attributes == 0); for (size_t index = 0; index < sizeof(expected_name); index++) { assert(win16_read_u8(win16_far_add_offset(file_name, index)) == (uint8_t)expected_name[index]); } g_create_calls++; return g_create_fails ? (HFILE16)-1 : (HFILE16)7; } HFILE16 LOpen16(Win16FarPtr file_name, INT16 mode) { assert(file_name == dgroup_at(0x0320)); assert(g_open_calls < 2); assert(mode == (g_open_calls == 0 ? 0 : 0x40)); return g_open_results[g_open_calls++]; } UINT16 LRead16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count) { assert(file == 9 && g_read_calls < 3); static const uint16_t expected_counts[3] = { FILE_HEADER_BYTES, SCORE_BYTES, NAME_BYTES}; assert(byte_count == expected_counts[g_read_calls]); uint16_t copied = byte_count; if (copied > g_read_limits[g_read_calls]) { copied = g_read_limits[g_read_calls]; } uint16_t available = (uint16_t)(g_input_size - g_input_position); if (copied > available) { copied = available; } for (uint16_t index = 0; index < copied; index++) { win16_write_u8( win16_far_add_offset(bytes, index), g_input_bytes[g_input_position + index]); } g_input_position = (uint16_t)(g_input_position + copied); g_read_calls++; return copied; } UINT16 LWrite16(HFILE16 file, Win16FarPtr bytes, UINT16 byte_count) { assert(file == 7); if (g_write_calls == 0) { assert(bytes == dgroup_at(0x0014)); assert(byte_count == FILE_HEADER_BYTES); } else if (g_write_calls == 1) { assert(byte_count == SCORE_BYTES); } else { assert(g_write_calls == 2 && byte_count == NAME_BYTES); } for (uint16_t index = 0; index < byte_count; index++) { g_file_bytes[g_file_position + index] = win16_read_u8(win16_far_add_offset(bytes, index)); } g_file_position = (uint16_t)(g_file_position + byte_count); g_write_calls++; return byte_count; } HFILE16 LClose16(HFILE16 file) { assert(file == 7 || file == 9); g_close_calls++; return 0; } static void prepare_fixture(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_objects, 0, sizeof(g_objects)); memset(g_call_stack, 0, sizeof(g_call_stack)); memset(g_file_bytes, 0xcc, sizeof(g_file_bytes)); memset(g_input_bytes, 0, sizeof(g_input_bytes)); memcpy(&g_dgroup[0x0010], "IWIKTDK Highscores\0\0", 20); memcpy(&g_dgroup[0x0312], "HiScores.Dat", 13); memcpy(&g_dgroup[0x0320], "HiScores.Dat", 13); memcpy(&g_dgroup[0x032d], "No Name", 8); memcpy(&g_dgroup[0x0336], "TDK Pinball Player", 19); memcpy( &g_dgroup[0x0349], "Congratulations! This is a Top Ten Score!", 42); memcpy(&g_dgroup[0x0373], "Please input your name:", 24); memcpy(&g_dgroup[0x038b], "HighScore", 10); memcpy(&g_dgroup[0x02f4], "HIGH SCORES", 12); memcpy(&g_dgroup[0x0300], " ", 3); memcpy(&g_dgroup[0x0303], ". ", 3); for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint32_t score = 0x10203040u + (uint32_t)index * 0x01010101u; g_dgroup[0x087a + index * 4u] = (uint8_t)score; g_dgroup[0x087b + index * 4u] = (uint8_t)(score >> 8); g_dgroup[0x087c + index * 4u] = (uint8_t)(score >> 16); g_dgroup[0x087d + index * 4u] = (uint8_t)(score >> 24); char name[TDKPIN_HIGHSCORE_NAME_BYTES]; memset(name, 0, sizeof(name)); name[0] = 'P'; name[1] = (char)('0' + index / 10u); name[2] = (char)('0' + index % 10u); memcpy( &g_dgroup[0x0890 + index * TDKPIN_HIGHSCORE_NAME_BYTES], name, sizeof(name)); } g_create_fails = false; g_create_calls = 0; g_open_results[0] = (HFILE16)-1; g_open_results[1] = (HFILE16)-1; g_open_calls = 0; g_input_position = 0; g_input_size = FILE_BYTES; for (unsigned index = 0; index < 3; index++) { g_read_limits[index] = UINT16_MAX; } g_read_calls = 0; g_write_calls = 0; g_close_calls = 0; g_file_position = 0; g_dialog_construct_calls = 0; g_dialog_exec_calls = 0; g_child_construct_calls = 0; g_make_window_calls = 0; g_show_calls = 0; g_dialog = object_at(0x200); g_child = object_at(0x300); g_made_child = object_at(0x350); g_application = object_at(0x400); g_receiver = object_at(0x100); g_exec_dialog_procedure = win16_make_far_pointer(0x8000, 0x0038); g_make_window_procedure = win16_make_far_pointer(0x8000, 0x0034); g_select_palette_calls = 0; g_unrealize_calls = 0; g_realize_calls = 0; g_compatible_dc_calls = 0; g_compatible_bitmap_calls = 0; g_select_object_calls = 0; g_bitblt_calls = 0; g_text_color_calls = 0; g_text_align_calls = 0; g_bk_mode_calls = 0; g_text_out_calls = 0; g_delete_object_calls = 0; g_delete_dc_calls = 0; memset(g_drawn_text, 0, sizeof(g_drawn_text)); win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x7100, g_call_stack, sizeof(g_call_stack), true); win16_set_dgroup_selector(0x5000); uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000u; win16_bind_segment(0x7000, (void *)stack_base, 0x10000, true); win16_set_stack_state(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_application, 0, 0x0200); win16_write_u32(dgroup_at(0x0234), 0, g_make_window_procedure); win16_write_u32(dgroup_at(0x0238), 0, g_exec_dialog_procedure); win16_write_u32( dgroup_at(0x064e), 0, g_application); win16_write_u16(dgroup_at(0x444e), 0, 0x2222); win16_write_u16(dgroup_at(0x0867), 0, 0x5001); } static uint32_t read_dgroup_u32(uint16_t offset) { return (uint32_t)g_dgroup[offset] | ((uint32_t)g_dgroup[offset + 1] << 8) | ((uint32_t)g_dgroup[offset + 2] << 16) | ((uint32_t)g_dgroup[offset + 3] << 24); } static void prepare_valid_input_file(void) { memcpy(g_input_bytes, &g_dgroup[0x0014], FILE_HEADER_BYTES); const uint32_t key = 0x4b495749u; for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint32_t score = 0x01020304u * index; uint32_t encrypted = score ^ key; uint16_t score_offset = (uint16_t)( FILE_HEADER_BYTES + (index - 1u) * 4u); g_input_bytes[score_offset] = (uint8_t)encrypted; g_input_bytes[score_offset + 1] = (uint8_t)(encrypted >> 8); g_input_bytes[score_offset + 2] = (uint8_t)(encrypted >> 16); g_input_bytes[score_offset + 3] = (uint8_t)(encrypted >> 24); uint16_t name_offset = (uint16_t)( FILE_HEADER_BYTES + SCORE_BYTES + (index - 1u) * TDKPIN_HIGHSCORE_NAME_BYTES); g_input_bytes[name_offset] = 'L'; g_input_bytes[name_offset + 1] = (uint8_t)('0' + index / 10u); g_input_bytes[name_offset + 2] = (uint8_t)('0' + index % 10u); } } static uint32_t file_u32(uint16_t offset) { return (uint32_t)g_file_bytes[offset] | ((uint32_t)g_file_bytes[offset + 1] << 8) | ((uint32_t)g_file_bytes[offset + 2] << 16) | ((uint32_t)g_file_bytes[offset + 3] << 24); } static void test_complete_file_layout(void) { prepare_fixture(); tdkpin_save_highscores(0xbeef); assert(g_create_calls == 1 && g_write_calls == 3 && g_close_calls == 1); assert(g_file_position == FILE_BYTES); assert(memcmp(g_file_bytes, "TDK Highscores\0\0", FILE_HEADER_BYTES) == 0); const uint32_t key = 0x4b495749u; for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint32_t score = 0x10203040u + (uint32_t)index * 0x01010101u; assert(file_u32((uint16_t)( FILE_HEADER_BYTES + (index - 1u) * 4u)) == (score ^ key)); const uint8_t *name = &g_file_bytes[ FILE_HEADER_BYTES + SCORE_BYTES + (index - 1u) * TDKPIN_HIGHSCORE_NAME_BYTES]; assert(name[0] == 'P'); assert(name[1] == (uint8_t)('0' + index / 10u)); assert(name[2] == (uint8_t)('0' + index % 10u)); for (uint16_t byte = 3; byte < TDKPIN_HIGHSCORE_NAME_BYTES; byte++) { assert(name[byte] == 0); } } } static void test_create_failure_is_silent(void) { prepare_fixture(); g_create_fails = true; tdkpin_save_highscores(0x1234); assert(g_create_calls == 1); assert(g_write_calls == 0 && g_close_calls == 0 && g_file_position == 0); } static void assert_default_table(void) { for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { assert(read_dgroup_u32((uint16_t)(0x087a + index * 4u)) == (uint32_t)(11u - index) * 100000u); const uint8_t *name = &g_dgroup[0x0890 + index * TDKPIN_HIGHSCORE_NAME_BYTES]; assert(memcmp(name, "No Name", 8) == 0); } } static void test_valid_load_and_open_retry(void) { prepare_fixture(); prepare_valid_input_file(); g_open_results[0] = (HFILE16)-1; g_open_results[1] = 9; tdkpin_load_highscores(0xaaaa); assert(g_open_calls == 2 && g_read_calls == 3 && g_close_calls == 1); for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { assert(read_dgroup_u32((uint16_t)(0x087a + index * 4u)) == 0x01020304u * index); const uint8_t *name = &g_dgroup[0x0890 + index * TDKPIN_HIGHSCORE_NAME_BYTES]; assert(name[0] == 'L'); assert(name[1] == (uint8_t)('0' + index / 10u)); assert(name[2] == (uint8_t)('0' + index % 10u)); } } static void test_missing_and_invalid_files_install_defaults(void) { prepare_fixture(); tdkpin_load_highscores(0); assert(g_open_calls == 2 && g_read_calls == 0 && g_close_calls == 0); assert_default_table(); prepare_fixture(); prepare_valid_input_file(); g_input_bytes[0] ^= 0xffu; g_open_results[0] = 9; tdkpin_load_highscores(0); assert(g_open_calls == 1 && g_read_calls == 1 && g_close_calls == 1); assert_default_table(); } static void test_short_score_read_retains_stack_residue(void) { prepare_fixture(); prepare_valid_input_file(); g_open_results[0] = 9; g_read_limits[1] = 4; win16_set_indeterminate_u16(0x5a5a); tdkpin_load_highscores(0); assert(g_read_calls == 3 && g_close_calls == 1); assert(read_dgroup_u32(0x087e) == 0x01020304u); for (uint16_t index = 2; index <= TDKPIN_HIGHSCORE_COUNT; index++) { assert(read_dgroup_u32((uint16_t)(0x087a + index * 4u)) == (0x5a5a5a5au ^ 0x4b495749u)); } } static void test_highscore_windows(void) { prepare_fixture(); g_dgroup[0x07d2] = 0; tdkpin_show_highscore_windows(0x0100); assert(g_dialog_construct_calls == 0 && g_dialog_exec_calls == 0); assert(g_child_construct_calls == 1 && g_make_window_calls == 1); assert(g_show_calls == 1); assert(win16_read_far_pointer(g_receiver, 0x41) == g_made_child); prepare_fixture(); g_dgroup[0x07d2] = 3; memcpy(&g_dgroup[0x0890 + 3 * 22], "old", 4); tdkpin_show_highscore_windows(0x0100); assert(memcmp(&g_dgroup[0x0890 + 3 * 22], "TDK Pinball Player", 19) == 0); assert(g_dialog_construct_calls == 1 && g_dialog_exec_calls == 1); assert(g_child_construct_calls == 1 && g_make_window_calls == 1); assert(g_show_calls == 1); } static void prepare_descending_scores(void) { for (uint16_t index = 1; index <= TDKPIN_HIGHSCORE_COUNT; index++) { uint32_t score = (uint32_t)(11u - index) * 100u; win16_write_u32(dgroup_at((uint16_t)(0x087a + index * 4u)), 0, score); uint8_t *name = &g_dgroup[0x0890 + index * 22u]; memset(name, 0, 22); name[0] = 'P'; name[1] = (uint8_t)('0' + index / 10u); name[2] = (uint8_t)('0' + index % 10u); } g_dgroup[0x07d1] = 1; } static void test_score_insertion_and_no_qualification(void) { prepare_fixture(); prepare_descending_scores(); win16_write_u32(dgroup_at(0x0982), 0, 750); tdkpin_insert_current_score(0x0100); assert(g_dgroup[0x07d2] == 4); assert(read_dgroup_u32(0x088a) == 750); assert(read_dgroup_u32(0x088e) == 700); assert(memcmp(&g_dgroup[0x0890 + 5 * 22], "P04", 4) == 0); assert(memcmp(&g_dgroup[0x0890 + 4 * 22], "TDK Pinball Player", 19) == 0); assert(g_dialog_exec_calls == 1 && g_show_calls == 1); assert(g_create_calls == 1 && g_write_calls == 3 && g_close_calls == 1); prepare_fixture(); prepare_descending_scores(); win16_write_u32(dgroup_at(0x0982), 0, 100); tdkpin_insert_current_score(0x0100); assert(g_dgroup[0x07d2] == 0); assert(g_dialog_exec_calls == 0 && g_show_calls == 0); assert(g_create_calls == 0 && g_write_calls == 0 && g_close_calls == 0); } static void test_highscore_paint(void) { prepare_fixture(); prepare_descending_scores(); PAINTSTRUCT16 ignored_paint; memset(&ignored_paint, 0xa5, sizeof(ignored_paint)); tdkpin_paint_highscores(object_at(0x777), &ignored_paint, 0x1111); assert(g_select_palette_calls == 2); assert(g_unrealize_calls == 1 && g_realize_calls == 1); assert(g_compatible_dc_calls == 2 && g_compatible_bitmap_calls == 1); assert(g_select_object_calls == 4 && g_bitblt_calls == 2); assert(g_text_color_calls == 2 && g_text_align_calls == 22); assert(g_bk_mode_calls == 2 && g_text_out_calls == 21); assert(g_delete_object_calls == 1 && g_delete_dc_calls == 2); assert(strcmp(g_drawn_text[0], "HIGH SCORES") == 0); assert(g_drawn_x[0] == 180 && g_drawn_y[0] == 27); assert(strcmp(g_drawn_text[1], " 1. P01") == 0); assert(g_drawn_x[1] == 30 && g_drawn_y[1] == 60); assert(strcmp(g_drawn_text[2], "1000") == 0); assert(g_drawn_x[2] == 320 && g_drawn_y[2] == 60); assert(strcmp(g_drawn_text[19], "10. P10") == 0); assert(g_drawn_x[19] == 30 && g_drawn_y[19] == 240); assert(strcmp(g_drawn_text[20], "100") == 0); assert(g_drawn_x[20] == 320 && g_drawn_y[20] == 240); } int main(void) { test_complete_file_layout(); test_create_failure_is_silent(); test_valid_load_and_open_retry(); test_missing_and_invalid_files_install_defaults(); test_short_score_read_retains_stack_residue(); test_highscore_windows(); test_score_insertion_and_no_qualification(); test_highscore_paint(); return 0; } 7筳 x<#include "../tdkpin_initialization.h" int main(void) { tdkpin_initialize_unit_ordinal_91(); tdkpin_initialize_unit_ordinal_86(); tdkpin_initialize_unit_ordinal_72(); return 0; } Bvxn#include "../tdkpin_key_input.h" #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x1000]; static Win16FarPtr g_window; static Win16FarPtr g_event; static Win16FarPtr g_application; static Win16FarPtr g_child; static unsigned g_construct_calls; static unsigned g_make_calls; static unsigned g_show_calls; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_row_calls; static INT16 g_last_row; Win16FarPtr tdkpin_full_child_window_construct( Win16FarPtr window, uint16_t vmt, Win16FarPtr title, Win16FarPtr parent) { assert(window == 0 && vmt == 0x017e); assert(title == win16_dgroup_pointer(0x0306) && parent == g_window); g_construct_calls++; return g_child; } Win16FarPtr win16_call_application_window_method( Win16FarPtr procedure, Win16FarPtr application, Win16FarPtr window) { assert(procedure == win16_make_far_pointer(0x8000, 0x0034)); assert(application == g_application && window == g_child); g_make_calls++; return g_child; } void object_windows_show(Win16FarPtr object, INT16 command) { assert(object == g_child && command == 1); g_show_calls++; } int32_t borland_multiply_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left * (uint32_t)right); } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } void tdkpin_draw_board_decoration_row_on_dc(INT16 y, HDC16 dc) { assert(dc == 0x3333); g_last_row = y; g_row_calls++; } static void prepare_fixture(uint16_t scan_code) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_objects, 0, sizeof(g_objects)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); g_window = win16_make_far_pointer(0x7000, 0x0000); g_event = win16_make_far_pointer(0x7000, 0x0c00); g_application = win16_make_far_pointer(0x7000, 0x0800); g_child = win16_make_far_pointer(0x7000, 0x0900); win16_write_u16(g_window, 4, 0x2222); win16_write_u16(g_event, 8, scan_code); win16_write_u16(g_event, 0x0a, 0xaaaa); win16_write_u16(g_event, 0x0c, 0xbbbb); win16_write_u16(g_application, 0, 0x0200); win16_write_u32( win16_dgroup_pointer(0x0234), 0, win16_make_far_pointer(0x8000, 0x0034)); win16_write_u32(win16_dgroup_pointer(0x064e), 0, g_application); g_construct_calls = 0; g_make_calls = 0; g_show_calls = 0; g_get_dc_calls = 0; g_release_dc_calls = 0; g_row_calls = 0; g_last_row = 0; } static void test_help_and_auxiliary_gate(void) { prepare_fixture(0x3b); win16_set_indeterminate_u16(0xabcd); assert(tdkpin_handle_key_press(g_window, g_event) == 0xabcd); assert(g_construct_calls == 1 && g_make_calls == 1 && g_show_calls == 1); assert(win16_read_far_pointer(g_window, 0x45) == g_child); assert(win16_read_u16(win16_far_add_offset(g_event, 0x0a)) == 0xaaaa); prepare_fixture(0x1d); win16_write_u16(g_window, 0x41, 1); assert(tdkpin_handle_key_press(g_window, g_event) == 0); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bda)) == 0); assert(win16_read_u16(win16_far_add_offset(g_event, 0x0a)) == 0); assert(win16_read_u16(win16_far_add_offset(g_event, 0x0c)) == 0); } static void test_down_key_threshold_and_player_gate(void) { prepare_fixture(0x50); win16_write_u32(g_window, 0x5a, 100); win16_write_u32(g_window, 0x0bae, (uint32_t)-12000); win16_write_u32(g_window, 0x0baa, 0x12345678u); win16_write_u8(win16_dgroup_pointer(0x07d0), 1); tdkpin_handle_key_press(g_window, g_event); assert((int32_t)win16_read_u32( win16_far_add_offset(g_window, 0x0bae)) == -17000); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 0); assert(g_row_calls == 1 && g_last_row == 84); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); prepare_fixture(0x50); win16_write_u32(g_window, 0x5a, 100); win16_write_u32(g_window, 0x0bae, 1000); tdkpin_handle_key_press(g_window, g_event); assert((int32_t)win16_read_u32( win16_far_add_offset(g_window, 0x0bae)) == -4000); assert(g_row_calls == 0 && g_get_dc_calls == 0); } static void test_flipper_keys_and_tilt(void) { prepare_fixture(0x1d); tdkpin_handle_key_press(g_window, g_event); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bda)) == 1); prepare_fixture(0x1c); tdkpin_handle_key_press(g_window, g_event); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bdb)) == 1); prepare_fixture(0x1d); win16_write_u8(win16_dgroup_pointer(0x07c6), 1); tdkpin_handle_key_press(g_window, g_event); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bda)) == 0); } int main(void) { test_help_and_auxiliary_gate(); test_down_key_threshold_and_player_gate(); test_flipper_keys_and_tilt(); return 0; } }4xE^#include "../tdkpin_key_input.h" #include "../tdkpin_random.h" #include "../tdkpin_real48.h" #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x2000]; static Win16FarPtr g_window; static Win16FarPtr g_event; static uint16_t g_random_values[16]; static uint16_t g_random_bounds[16]; static size_t g_random_count; static size_t g_random_index; static uint16_t g_sounds[8]; static size_t g_sound_count; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_blit_calls; static unsigned g_restore_a_calls; static unsigned g_restore_b_calls; static unsigned g_present_calls; static unsigned g_draw_item_calls; static unsigned g_draw_score_calls; static unsigned g_status_calls; typedef enum { REAL_MODE_NONE, REAL_MODE_UPPER_CLAMP, REAL_MODE_HORIZONTAL_NUDGE, } RealMode; static RealMode g_real_mode; static unsigned g_real_multiply_calls; static const BorlandReal48 g_real_random = {{0x80, 1, 2, 3, 4, 5}}; static const BorlandReal48 g_real_product = {{0x81, 6, 7, 8, 9, 10}}; static const BorlandReal48 g_real_factor = {{0x82, 11, 12, 13, 14, 15}}; static const BorlandReal48 g_real_integer = {{0x83, 16, 17, 18, 19, 20}}; static const BorlandReal48 g_real_result = {{0x84, 21, 22, 23, 24, 25}}; static void assert_real48(BorlandReal48 actual, BorlandReal48 expected) { assert(memcmp(actual.bytes, expected.bytes, sizeof(actual.bytes)) == 0); } int32_t borland_multiply_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left * (uint32_t)right); } uint16_t borland_random_below(uint16_t upper_bound) { assert(g_random_index < g_random_count); assert(upper_bound == g_random_bounds[g_random_index]); return g_random_values[g_random_index++]; } BorlandReal48 borland_random_real48_registers(void) { assert(g_real_mode == REAL_MODE_HORIZONTAL_NUDGE); return g_real_random; } BorlandReal48 borland_i32_to_real48(int32_t value) { if (g_real_mode == REAL_MODE_UPPER_CLAMP) { assert(value == 1000); } else { assert(g_real_mode == REAL_MODE_HORIZONTAL_NUDGE); assert(value == 3); } return g_real_integer; } BorlandReal48 borland_real48_multiply( BorlandReal48 left, BorlandReal48 right) { static const BorlandReal48 three_fifths = {{0x80, 0x9a, 0x99, 0x99, 0x99, 0x19}}; static const BorlandReal48 nudge_scale = {{0x85, 0, 0, 0, 0, 0x20}}; if (g_real_mode == REAL_MODE_UPPER_CLAMP) { assert(g_real_multiply_calls++ == 0); assert_real48(left, g_real_integer); assert_real48(right, three_fifths); return g_real_result; } assert(g_real_mode == REAL_MODE_HORIZONTAL_NUDGE); if (g_real_multiply_calls++ == 0) { assert_real48(left, g_real_random); assert_real48(right, nudge_scale); return g_real_product; } assert_real48(left, g_real_integer); assert_real48(right, g_real_factor); return g_real_result; } BorlandReal48 borland_real48_subtract( BorlandReal48 left, BorlandReal48 right) { static const BorlandReal48 nudge_offset = {{0x84, 0, 0, 0, 0, 0x20}}; assert(g_real_mode == REAL_MODE_HORIZONTAL_NUDGE); assert_real48(left, g_real_product); assert_real48(right, nudge_offset); return g_real_factor; } int32_t borland_real48_round_to_i32(BorlandReal48 value) { assert_real48(value, g_real_result); return g_real_mode == REAL_MODE_UPPER_CLAMP ? 600 : 7; } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { assert(g_sound_count < sizeof(g_sounds) / sizeof(g_sounds[0])); g_sounds[g_sound_count++] = sound_number; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } void tdkpin_blit_bitmap_and_present( HBITMAP16 bitmap, INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(bitmap == 0x4444); assert(height == 18 && width == 21); assert(y == 426 && x == 314 && dc == 0x3333); g_blit_calls++; } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(dc == 0x3333); if (height == 20) { assert(width == 148 && y == 243 && x == 84); } else { assert(height == 30 && width == 284 && y == 232 && x == 371); } g_restore_a_calls++; } void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 42 && width == 284 && x == 348 && dc == 0x3333); assert(y == 360 || y == 405); g_restore_b_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(dc == 0x3333); if (height == 20) { assert(width == 148 && y == 243 && x == 84); } else if (height == 30) { assert(width == 284 && y == 232 && x == 371); } else { assert(height == 42 && width == 284 && x == 348); assert(y == 360 || y == 405); } g_present_calls++; } void tdkpin_draw_item_status(int16_t item, HDC16 dc) { assert(item == 0 && dc == 0x3333); g_draw_item_calls++; } void tdkpin_draw_score(HDC16 dc, int32_t value_or_player) { assert(dc == 0x3333 && value_or_player == 0); g_draw_score_calls++; } void tdkpin_update_status_display(uint8_t player, HDC16 dc) { assert(player == 1 && dc == 0x3333); g_status_calls++; } static void set_random_script( const uint16_t *bounds, const uint16_t *values, size_t count) { assert(count <= sizeof(g_random_values) / sizeof(g_random_values[0])); memcpy(g_random_bounds, bounds, count * sizeof(bounds[0])); memcpy(g_random_values, values, count * sizeof(values[0])); g_random_count = count; g_random_index = 0; } static void prepare_fixture(uint16_t scan_code) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_objects, 0, sizeof(g_objects)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); g_window = win16_make_far_pointer(0x7000, 0); g_event = win16_make_far_pointer(0x7000, 0x1000); win16_write_u16(g_window, 4, 0x2222); win16_write_u16(g_event, 8, scan_code); win16_write_u16(g_event, 0x0a, 0xaaaa); win16_write_u16(g_event, 0x0c, 0xbbbb); win16_write_u16(win16_dgroup_pointer(0x0865), 0, 0x4444); g_random_count = 0; g_random_index = 0; g_sound_count = 0; g_get_dc_calls = 0; g_release_dc_calls = 0; g_blit_calls = 0; g_restore_a_calls = 0; g_restore_b_calls = 0; g_present_calls = 0; g_draw_item_calls = 0; g_draw_score_calls = 0; g_status_calls = 0; g_real_mode = REAL_MODE_NONE; g_real_multiply_calls = 0; } static void assert_event_consumed(void) { assert(win16_read_u16(win16_far_add_offset(g_event, 0x0a)) == 0); assert(win16_read_u16(win16_far_add_offset(g_event, 0x0c)) == 0); } static void test_debug_keys_and_auxiliary_gate(void) { prepare_fixture(0x3c); win16_write_u8(win16_dgroup_pointer(0x07cf), 1); win16_write_u32(win16_dgroup_pointer(0x0855), 0, 0x12345678); assert(tdkpin_handle_key_release(g_window, g_event) == 0); assert(win16_read_u32(win16_dgroup_pointer(0x0855)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x07c7)) == 1); assert_event_consumed(); prepare_fixture(0x41); win16_write_u8(win16_dgroup_pointer(0x07cf), 1); win16_write_u32(win16_dgroup_pointer(0x3340), 0, 0x12345678); win16_write_u32(win16_dgroup_pointer(0x3344), 0, 0x90abcdef); win16_write_u32(g_window, 0x0baa, 1); win16_write_u32(g_window, 0x0bae, 2); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u32(win16_dgroup_pointer(0x07d3)) == 0x12345678); assert(win16_read_u32(win16_dgroup_pointer(0x07d7)) == 0x90abcdef); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 0); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0bae)) == 0); prepare_fixture(0x3c); win16_write_u8(win16_dgroup_pointer(0x07cf), 1); win16_write_u16(g_window, 0x41, 1); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_dgroup_pointer(0x07c7)) == 0); assert_event_consumed(); } static void test_release_down_impulse_clamps(void) { static const uint16_t lower_bounds[] = {1000}; static const uint16_t lower_values[] = {80}; prepare_fixture(0x50); win16_write_u8(win16_dgroup_pointer(0x07d0), 1); win16_write_u32(g_window, 0x56, 1000); win16_write_u32(g_window, 0x5a, 2); win16_write_u32(g_window, 0x0baa, 0x12345678); win16_write_u32(g_window, 0x0bae, (uint32_t)-2000); set_random_script(lower_bounds, lower_values, 1); tdkpin_handle_key_release(g_window, g_event); assert((int32_t)win16_read_u32( win16_far_add_offset(g_window, 0x0bae)) == -998); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 0); assert(win16_read_u32(win16_dgroup_pointer(0x07fb)) == (uint32_t)-998); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bdd)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bde)) == 0); assert(g_random_index == 1); assert(g_sound_count == 1 && g_sounds[0] == 2); assert(g_blit_calls == 1 && g_get_dc_calls == 1 && g_release_dc_calls == 1); static const uint16_t upper_bounds[] = {1000}; static const uint16_t upper_values[] = {80}; prepare_fixture(0x50); win16_write_u8(win16_dgroup_pointer(0x07d0), 1); win16_write_u32(g_window, 0x56, 1000); win16_write_u32(g_window, 0x5a, 2); win16_write_u32(g_window, 0x0bae, (uint32_t)-399); g_real_mode = REAL_MODE_UPPER_CLAMP; set_random_script(upper_bounds, upper_values, 1); tdkpin_handle_key_release(g_window, g_event); assert((int32_t)win16_read_u32( win16_far_add_offset(g_window, 0x0bae)) == -601); assert(g_real_multiply_calls == 1 && g_random_index == 1); } static void test_flipper_key_release(void) { prepare_fixture(0x1d); win16_write_u8(win16_far_add_offset(g_window, 0x0bda), 1); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bda)) == 0); prepare_fixture(0x1c); win16_write_u8(win16_far_add_offset(g_window, 0x0bdb), 1); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bdb)) == 0); } static void test_directional_and_multiball_nudges(void) { static const uint16_t left_bounds[] = {20, 10}; static const uint16_t left_values[] = {10, 9}; prepare_fixture(0x2a); win16_write_u32(g_window, 0x5a, 3); win16_write_u32(g_window, 0x0baa, 1000); set_random_script(left_bounds, left_values, 2); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 880); assert(win16_read_u16(win16_far_add_offset(g_window, 0x5e)) == 25); assert(g_sound_count == 1 && g_sounds[0] == 19); static const uint16_t right_bounds[] = {20, 10}; static const uint16_t right_values[] = {10, 9}; prepare_fixture(0x51); win16_write_u32(g_window, 0x5a, 3); win16_write_u8(win16_far_add_offset(g_window, 0x61), 2); win16_write_u32(win16_dgroup_pointer(0x07f3), 0, 1000); win16_write_u32(win16_dgroup_pointer(0x07f7), 0, 2000); set_random_script(right_bounds, right_values, 2); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 120); assert(win16_read_u32(win16_dgroup_pointer(0x07f3)) == 1120); assert(win16_read_u32(win16_dgroup_pointer(0x07f7)) == 2120); static const uint16_t space_bounds[] = {20, 21, 100, 10}; static const uint16_t space_values[] = {10, 12, 20, 9}; prepare_fixture(0x39); win16_write_u32(g_window, 0x5a, 3); win16_write_u8(win16_far_add_offset(g_window, 0x61), 2); win16_write_u32(g_window, 0x0baa, 100); win16_write_u32(g_window, 0x0bae, 200); win16_write_u32(win16_dgroup_pointer(0x07f3), 0, 1000); win16_write_u32(win16_dgroup_pointer(0x07f7), 0, 2000); win16_write_u32(win16_dgroup_pointer(0x07fb), 0, 3000); win16_write_u32(win16_dgroup_pointer(0x07ff), 0, 4000); g_real_mode = REAL_MODE_HORIZONTAL_NUDGE; set_random_script(space_bounds, space_values, 4); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u32(win16_far_add_offset(g_window, 0x0baa)) == 107); assert((int32_t)win16_read_u32( win16_far_add_offset(g_window, 0x0bae)) == 50); assert(win16_read_u32(win16_dgroup_pointer(0x07f3)) == 1006); assert(win16_read_u32(win16_dgroup_pointer(0x07f7)) == 2006); assert(win16_read_u32(win16_dgroup_pointer(0x07fb)) == 2790); assert(win16_read_u32(win16_dgroup_pointer(0x07ff)) == 3790); assert(g_real_multiply_calls == 2 && g_random_index == 4); } static void test_tilt_threshold(void) { static const uint16_t bounds[] = {20, 10}; static const uint16_t values[] = {10, 0}; prepare_fixture(0x2a); win16_write_u32(g_window, 0x5a, 1); win16_write_u16(g_window, 0x5e, 14); win16_write_u8(win16_far_add_offset(g_window, 0x0bda), 1); win16_write_u8(win16_far_add_offset(g_window, 0x0bdb), 1); set_random_script(bounds, values, 2); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u16(win16_far_add_offset(g_window, 0x5e)) == 39); assert(win16_read_u8(win16_dgroup_pointer(0x07c6)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bda)) == 0); assert(win16_read_u8(win16_far_add_offset(g_window, 0x0bdb)) == 0); assert(g_sound_count == 2 && g_sounds[0] == 19 && g_sounds[1] == 20); assert(g_restore_a_calls == 1 && g_present_calls == 1); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); } static void test_sound_toggle(void) { prepare_fixture(0x58); win16_write_u16(win16_dgroup_pointer(0x43ee), 0, 1); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_dgroup_pointer(0x43f2)) == 1); prepare_fixture(0x58); win16_write_u8(win16_dgroup_pointer(0x43f2), 1); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_dgroup_pointer(0x43f2)) == 0); prepare_fixture(0x58); tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_dgroup_pointer(0x43f2)) == 0); } static void test_add_player_copies_all_state(void) { prepare_fixture(0x4e); win16_write_u8(win16_far_add_offset(g_window, 0x0bde), 1); win16_write_u8(win16_dgroup_pointer(0x07d0), 1); win16_write_u32(win16_dgroup_pointer(0x0982), 0, 0x11111111); win16_write_u32(win16_dgroup_pointer(0x0986), 0, 0x22222222); win16_write_u32(win16_dgroup_pointer(0x098a), 0, 0x33333333); win16_write_u32(win16_dgroup_pointer(0x098e), 0, 0x44444444); for (uint16_t id = 1; id <= 175; id++) { win16_write_u8( win16_far_add_offset(g_window, (uint16_t)(0x03cc + id)), (uint8_t)(id ^ 0x5a)); win16_write_u16( g_window, (uint16_t)(0x0a42 + id * 2u), (uint16_t)(id * 257u)); } tdkpin_handle_key_release(g_window, g_event); assert(win16_read_u8(win16_dgroup_pointer(0x07d0)) == 2); assert(win16_read_u8(win16_dgroup_pointer(0x07c9)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x07c5)) == 1); assert(win16_read_u8(win16_dgroup_pointer(0x0874)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x07d1)) == 1); assert(win16_read_u8(win16_far_add_offset(g_window, 0x61)) == 1); assert(g_sound_count == 1 && g_sounds[0] == 1); for (uint16_t player = 1; player <= 4; player++) { assert(win16_read_u16(win16_dgroup_pointer( (uint16_t)(0x081f + player * 2u))) == 0xffff); for (uint16_t id = 1; id <= 175; id++) { uint8_t expected_byte = (uint8_t)(id ^ 0x5a); uint16_t expected_word = (uint16_t)(id * 257u); assert(win16_read_u8(win16_far_add_offset( g_window, (uint16_t)(0x0061 + player * 0x00afu + id))) == expected_byte); assert(win16_read_u16(win16_far_add_offset( g_window, (uint16_t)(0x036c + player * 0x015eu + id * 2u))) == expected_word); } } for (uint16_t id = 1; id <= 175; id++) { Win16FarPtr record = win16_dgroup_pointer( (uint16_t)(0x095b + id * 0x53u)); assert(win16_read_u8(win16_far_add_offset(record, 0x34)) == (uint8_t)(id ^ 0x5a)); assert(win16_read_u16(win16_far_add_offset(record, 0x43)) == (uint16_t)(id * 257u)); } assert(win16_read_u32(win16_dgroup_pointer(0x0982)) == 0x11111111); assert(win16_read_u32(win16_dgroup_pointer(0x0986)) == 0x22222222); assert(win16_read_u32(win16_dgroup_pointer(0x098a)) == 0); assert(win16_read_u32(win16_dgroup_pointer(0x098e)) == 0); assert(g_restore_b_calls == 2 && g_restore_a_calls == 1); assert(g_present_calls == 3 && g_draw_item_calls == 4); assert(g_draw_score_calls == 1 && g_status_calls == 1); assert(g_get_dc_calls == 5 && g_release_dc_calls == 5); } int main(void) { test_debug_keys_and_auxiliary_gate(); test_release_down_impulse_clamps(); test_flipper_key_release(); test_directional_and_multiball_nudges(); test_tilt_threshold(); test_sound_toggle(); test_add_player_copies_all_state(); return 0; } xQ#include "../tdkpin_mechanism_render.h" #include #include uint8_t g_current_player; static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_refresh_calls; static unsigned g_sound_calls; static unsigned g_delete_dc_calls; static int32_t g_state; HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); return 0x3333; } HDC16 CreateCompatibleDC16(HDC16 dc) { static unsigned calls; assert(dc == 0x3333); HDC16 result = (HDC16)(0x4001 + calls); calls = (calls + 1u) % 2u; return result; } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 91 && height == 90); return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { unsigned call = g_select_calls++; if (call == 0) { assert(dc == 0x4001 && object == 0x6000); return 0x7001; } if (call == 1) { assert(dc == 0x4002 && object == 0x5000); return 0x7002; } if (g_state >= 6 && call == 2) { assert(dc == 0x4001 && object == 0x6001); return 0x6000; } if (g_state >= 6 && call == 3) { assert(dc == 0x4001 && object == 0x6000); return 0x6001; } unsigned cleanup_base = g_state >= 6 ? 4u : 2u; if (call == cleanup_base) { assert(dc == 0x4001 && object == 0x7001); return 0x6000; } assert(call == cleanup_base + 1u); assert(dc == 0x4002 && object == 0x7002); return 0x5000; } static const INT16 state_one_positions[5][2] = { {9, 41}, {23, 11}, {56, 14}, {63, 47}, {35, 63}}; static const INT16 state_six_positions[5][2] = { {8, 35}, {26, 8}, {59, 18}, {59, 50}, {27, 61}}; BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { unsigned call = g_blit_calls++; if (call == 0) { assert(destination == 0x4002 && destination_x == 0); assert(destination_y == 0 && width == 91 && height == 90); assert(source == 0x4001); assert(source_x == (g_state < 6 ? 0 : 79)); assert(source_y == (g_state < 6 ? 0 : 33)); assert(raster_operation == 0x00cc0020u); return 1; } if (call <= 10) { unsigned target = (call - 1u) / 2u; const INT16 (*positions)[2] = g_state == 1 ? state_one_positions : state_six_positions; assert(destination == 0x4002); assert(destination_x == positions[target][0]); assert(destination_y == positions[target][1]); assert(width == 17 && height == 17 && source == 0x4001); assert(source_x == 455); if ((call & 1u) != 0) { assert(source_y == 17 && raster_operation == 0x008800c6u); } else { assert(source_y == 0 && raster_operation == 0x00ee0086u); } return 1; } assert(call == 11); assert(destination == 0x3333 && destination_x == 79); assert(destination_y == 33 && width == 91 && height == 90); assert(source == 0x4002 && source_x == 0 && source_y == 0); assert(raster_operation == 0x00cc0020u); return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (g_delete_dc_calls == 0 ? 0x4002 : 0x4001)); g_delete_dc_calls++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); return 1; } void tdkpin_refresh_player_item(uint16_t caller_bp, uint16_t item) { assert(caller_bp == 0x0100 && item == 15 + g_refresh_calls); g_refresh_calls++; } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { assert(sound_number == 11); g_sound_calls++; } static void prepare_fixture(int32_t state) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_receiver, 4, 0x2222); win16_write_u16(win16_dgroup_pointer(0x0859), 0, 0x6000); win16_write_u16(win16_dgroup_pointer(0x085d), 0, 0x6001); win16_write_u32(win16_dgroup_pointer(0x0855), 0, (uint32_t)state); static const uint16_t words[5] = { 0x3371, 0x33c4, 0x3417, 0x346a, 0x34bd}; for (uint16_t index = 0; index < 5; index++) { win16_write_u16( win16_dgroup_pointer(words[index]), 0, (uint16_t)(index + 1)); } g_current_player = 2; for (uint16_t index = 0; index < 5; index++) { win16_write_u8( win16_far_add_offset( g_receiver, (uint16_t)(0x0476 + 2u * 0x14u + index)), (uint8_t)(0xa0 + index)); } g_state = state; g_select_calls = 0; g_blit_calls = 0; g_refresh_calls = 0; g_sound_calls = 0; g_delete_dc_calls = 0; } static void test_state_one(void) { prepare_fixture(1); tdkpin_rotate_and_draw_targets(0x0100); assert(g_blit_calls == 12 && g_select_calls == 4); assert(g_sound_calls == 1 && g_refresh_calls == 0); } static void test_state_six_rotation(void) { prepare_fixture(6); tdkpin_rotate_and_draw_targets(0x0100); assert(g_blit_calls == 12 && g_select_calls == 6); assert(g_sound_calls == 0 && g_refresh_calls == 5); static const uint16_t words[5] = { 0x3371, 0x33c4, 0x3417, 0x346a, 0x34bd}; static const uint16_t expected_words[5] = {2, 3, 4, 5, 1}; for (uint16_t index = 0; index < 5; index++) { assert(win16_read_u16(win16_dgroup_pointer(words[index])) == expected_words[index]); assert(win16_read_u8(win16_far_add_offset( g_receiver, (uint16_t)(0x0476 + 2u * 0x14u + index))) == (uint8_t)(0xa0 + (index + 1u) % 5u)); } } int main(void) { test_state_one(); test_state_six_rotation(); return 0; } ]2xr#include "../tdkpin_object_windows.h" #include Win16FarPtr g_object_windows_creating_object; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_dispatch_proc; Win16FarPtr g_object_windows_message_hook; static Win16FarPtr g_expected_handler; static Win16FarPtr g_expected_object; static unsigned g_handler_calls; static unsigned g_hook_calls; static ObjectWindowsMessage g_hook_message; static Win16FarPtr g_event_pointer; void win16_call_object_message_handler( Win16FarPtr procedure, Win16FarPtr object, ObjectWindowsMessage *message) { assert(procedure == g_expected_handler); assert(object == g_expected_object); assert(message->window == 0x77); assert(message->wparam == 0x3344); assert(message->lparam == (LPARAM16)0x89abcdefu); message->result = (LRESULT16)0x12345678u; g_handler_calls++; } void win16_call_object_message_hook( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr handler, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { assert(procedure == g_object_windows_message_hook); assert(object == g_expected_object && handler == g_expected_handler); g_hook_message = (ObjectWindowsMessage){ window, message, wparam, lparam, 0}; g_hook_calls++; } void win16_call_object_event_handler( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr event) { assert(procedure == g_expected_handler); assert(object == g_expected_object); g_event_pointer = event; } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t object_bytes[64]; static uint8_t event_bytes[32]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment( 0x7000, object_bytes, sizeof(object_bytes), true); win16_bind_segment( 0x7100, event_bytes, sizeof(event_bytes), true); const uint16_t vmt = 0x0100; const uint16_t derived_table = 0x0200; const uint16_t parent_table = 0x0300; Win16FarPtr fallback = win16_make_far_pointer(0x6100, 0x1111); Win16FarPtr derived = win16_make_far_pointer(0x6200, 0x2222); Win16FarPtr parent = win16_make_far_pointer(0x6300, 0x3333); write_far((uint16_t)(vmt + 0x0c), fallback); win16_write_u16( win16_dgroup_pointer((uint16_t)(vmt + 4)), 0, derived_table); win16_write_u16(win16_dgroup_pointer(derived_table), 0, parent_table); win16_write_u16(win16_dgroup_pointer(derived_table + 2), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(derived_table + 4), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(derived_table + 6), 0, 1); win16_write_u16(win16_dgroup_pointer(derived_table + 8), 0, 0x0100); write_far((uint16_t)(derived_table + 10), derived); win16_write_u16(win16_dgroup_pointer(parent_table), 0, 0); win16_write_u16(win16_dgroup_pointer(parent_table + 2), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(parent_table + 4), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(parent_table + 6), 0, 1); win16_write_u16(win16_dgroup_pointer(parent_table + 8), 0, 0x0200); write_far((uint16_t)(parent_table + 10), parent); assert(object_windows_resolve_message_handler(vmt, 0x0100, 0x0c) == win16_dgroup_pointer(derived_table + 10)); assert(object_windows_resolve_message_handler(vmt, 0x0200, 0x0c) == win16_dgroup_pointer(parent_table + 10)); assert(win16_read_u16(win16_dgroup_pointer(derived_table + 2)) == 0x0200); assert(win16_read_u16(win16_dgroup_pointer(derived_table + 4)) == parent_table + 10); /* Cache lookup still works after the table contents become unusable. */ win16_write_u16(win16_dgroup_pointer(derived_table + 6), 0, 0xffff); assert(object_windows_resolve_message_handler(vmt, 0x0200, 0x0c) == win16_dgroup_pointer(parent_table + 10)); win16_write_u16(win16_dgroup_pointer(derived_table + 6), 0, 1); assert(object_windows_resolve_message_handler(vmt, 0x0999, 0x0c) == win16_dgroup_pointer(vmt + 0x0c)); Win16FarPtr object = win16_make_far_pointer(0x7000, 4); win16_write_u16(object, 0, vmt); g_expected_object = object; g_object_windows_message_hook = win16_make_far_pointer(0x6400, 0x4444); g_expected_handler = parent; g_handler_calls = 0; g_hook_calls = 0; LRESULT16 result = object_dispatch_window_or_dialog_proc( object, 0x77, 0x0200, 0x3344, (LPARAM16)0x89abcdefu); assert(result == (LRESULT16)0x12345678u); assert(win16_read_u16(win16_far_add_offset(object, 4)) == 0x77); assert(g_handler_calls == 1 && g_hook_calls == 1); assert(g_hook_message.message == 0x0200); assert(g_hook_message.lparam == (LPARAM16)0x89abcdefu); g_object_windows_message_hook = win16_make_far_pointer(0, 0x9999); g_expected_handler = fallback; g_hook_calls = 0; (void)object_dispatch_window_or_dialog_proc( object, 0x77, 0xffff, 0x3344, (LPARAM16)0x89abcdefu); assert(g_hook_calls == 0); Win16FarPtr event = win16_make_far_pointer(0x7100, 2); win16_write_u16(event, 0, 0x77); win16_write_u16(event, 2, 0x0100); win16_write_u16(event, 4, 0x3344); win16_write_u16(event, 6, 0xcdef); win16_write_u16(event, 8, 0x89ab); g_object_windows_message_hook = win16_make_far_pointer(0x6400, 0x4444); g_expected_handler = derived; g_hook_calls = 0; g_event_pointer = 0; object_windows_dispatch_event(0x0c, 0x0100, event, object); assert(g_event_pointer == event); assert(g_hook_calls == 1); assert(g_hook_message.window == 0x77); assert(g_hook_message.message == 0x0100); assert(g_hook_message.wparam == 0x3344); assert(g_hook_message.lparam == (LPARAM16)0x89abcdefu); return 0; } Akx #include "../tdkpin_message_pump.h" #include static MSG16 g_queue[8]; static unsigned g_queue_count; static unsigned g_queue_index; static UINT16 g_peek_maximum; static unsigned g_translate_calls; static unsigned g_dispatch_calls; static Win16FarPtr g_closed_window; BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message) { assert(window == 0 && minimum_message == 0 && remove_message == 1); g_peek_maximum = maximum_message; if (g_queue_index == g_queue_count) { return 0; } *message = g_queue[g_queue_index++]; return 1; } BOOL16 TranslateMessage16(const MSG16 *message) { assert(message->message == 0x0020); g_translate_calls++; return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { assert(message->message == 0x0020); g_dispatch_calls++; return 0; } void object_windows_close_if_allowed(Win16FarPtr window) { g_closed_window = window; } static void reset_queue(void) { g_queue_count = 4; g_queue_index = 0; g_queue[0].message = 0x0580; g_queue[1].message = 0x0100; g_queue[2].message = 0x0101; g_queue[3].message = 0x0020; g_translate_calls = 0; g_dispatch_calls = 0; g_closed_window = 0; } int main(void) { win16_set_indeterminate_u16(0xbeef); Win16FarPtr window = win16_make_far_pointer(0x7000, 2); reset_queue(); tdkpin_drain_messages_except_input(); assert(g_queue_index == 4 && g_peek_maximum == 0x32); assert(g_translate_calls == 1 && g_dispatch_calls == 1); reset_queue(); tdkpin_close_variant_a(window); assert(g_closed_window == window); reset_queue(); tdkpin_close_variant_b(window); assert(g_closed_window == window); ObjectWindowsMessage message = {0}; reset_queue(); message.lparam = (LPARAM16)0x001c0000u; assert(tdkpin_conditional_close_variant_a(window, &message) == 0xbeef); assert(g_closed_window == 0 && g_queue_index == 0); message.lparam = (LPARAM16)0x001d0000u; assert(tdkpin_conditional_close_variant_a(window, &message) == 0xbeef); assert(g_closed_window == window); reset_queue(); message.lparam = (LPARAM16)0x003b0000u; assert(tdkpin_conditional_close_variant_b(window, &message) == 0xbeef); assert(g_closed_window == 0 && g_queue_index == 0); message.lparam = (LPARAM16)0x003a0000u; assert(tdkpin_conditional_close_variant_b(window, &message) == 0xbeef); assert(g_closed_window == window); return 0; } >:yx1-#include "../tdkpin_multimedia.h" #include #include #include Win16FarPtr g_multimedia_procedures[11]; HINSTANCE16 g_multimedia_module; uint8_t g_multimedia_initialized; uint8_t g_multimedia_pending; uint16_t g_multimedia_version; uint8_t g_multimedia_auto_subclassed; uint8_t g_multimedia_argument_2; uint8_t g_multimedia_argument_1; uint8_t g_multimedia_legacy_windows; char g_multimedia_library_path[21] = "CTL3D.DLL"; Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_win16_message_box; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; static HINSTANCE16 g_freed_module; static Win16FarPtr g_called_procedure; static uint16_t g_called_argument; static unsigned g_sequence; static bool g_check_sequence; static Win16FarPtr g_destroyed_application; static HINSTANCE16 g_load_result; static uint16_t g_register_result; static uint16_t g_version_result; static uint16_t g_enabled_result; static uint16_t g_auto_result; static int g_search_success_attempt; static unsigned g_search_calls; static char g_search_paths[5][256]; static unsigned g_load_calls; static unsigned g_proc_calls; static UINT16 g_error_modes[4]; static unsigned g_error_mode_calls; static uint8_t g_dgroup[0x5000]; static void write_far_string(Win16FarPtr destination, const char *source) { size_t length = strlen(source); for (size_t index = 0; index <= length; index++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)index), (uint8_t)source[index]); } } static void read_far_string( Win16FarPtr source, char *destination, size_t capacity) { size_t index = 0; while (index + 1 < capacity) { uint8_t byte = win16_read_u8( win16_far_add_offset(source, (uint16_t)index)); destination[index++] = (char)byte; if (byte == 0) { return; } } destination[capacity - 1] = 0; } BOOL16 FreeLibrary16(HINSTANCE16 module) { if (g_check_sequence) { assert(++g_sequence == 2); } g_freed_module = module; return 1; } Win16Handle GetCurrentTask16(void) { return 0x1234; } uint16_t win16_call_pascal_u16(Win16FarPtr procedure, uint16_t argument) { if (g_check_sequence) { assert(++g_sequence == 1); } g_called_procedure = procedure; g_called_argument = argument; if (procedure == g_multimedia_procedures[6]) { return g_register_result; } if (procedure == g_multimedia_procedures[0]) { assert(argument == g_win16_instance); return g_auto_result; } return 0xabcd; } uint16_t win16_call_pascal_u16_no_args(Win16FarPtr procedure) { if (procedure == g_multimedia_procedures[5]) { return g_version_result; } assert(procedure == g_multimedia_procedures[3]); return g_enabled_result; } void object_windows_application_destruct( Win16FarPtr object, uint16_t vmt) { assert(++g_sequence == 3); assert(vmt == 0); g_destroyed_application = object; } void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(++g_sequence == 4); assert(frame->object == g_destroyed_application); assert(frame->vmt_argument == 0x0200 && vmt_field_offset == 0); } UINT16 SetErrorMode16(UINT16 mode) { g_error_modes[g_error_mode_calls++] = mode; return 0; } HINSTANCE16 LoadLibrary16(const char *library_name) { assert(strcmp(library_name, g_multimedia_library_path) == 0); g_load_calls++; return g_load_result; } Win16FarPtr GetProcAddress16( HINSTANCE16 module, const char *procedure_name) { static const char *const names[11] = { "CTL3DAUTOSUBCLASS", "CTL3DCOLORCHANGE", "CTL3DCTLCOLOREX", "CTL3DENABLED", "CTL3DDLGFRAMEPAINT", "CTL3DGETVER", "CTL3DREGISTER", "CTL3DSUBCLASSDLG", "CTL3DSUBCLASSDLGEX", "CTL3DSUBCLASSCTL", "CTL3DUNREGISTER", }; assert(module == g_load_result && g_proc_calls < 11); unsigned index = 0; while (index < 11 && strcmp(procedure_name, names[index]) != 0) { index++; } assert(index < 11); g_proc_calls++; return win16_make_far_pointer( 0x9000, (uint16_t)(0x100 + index)); } Win16FarPtr multimedia_search_file( Win16FarPtr search_path, Win16FarPtr file_name, Win16FarPtr result) { char file_name_text[32]; read_far_string(file_name, file_name_text, sizeof(file_name_text)); assert(strcmp(file_name_text, g_multimedia_library_path) == 0); assert(g_search_calls < 5); read_far_string( search_path, g_search_paths[g_search_calls], sizeof(g_search_paths[g_search_calls])); bool found = (int)g_search_calls == g_search_success_attempt; g_search_calls++; win16_write_u8(result, found ? 'X' : 0); win16_write_u8(win16_far_add_offset(result, 1), 0); return result; } UINT16 GetWindowsDirectoryFar16(Win16FarPtr buffer, UINT16 size) { assert(size == 0xff); write_far_string(buffer, "WIN"); return 3; } UINT16 GetSystemDirectoryFar16(Win16FarPtr buffer, UINT16 size) { assert(size == 0xff); write_far_string(buffer, "SYS"); return 3; } HINSTANCE16 GetModuleHandle16(Win16FarPtr module_name) { assert(module_name == win16_make_far_pointer(0x7000, 0x1234)); return 0x5555; } UINT16 GetModuleFileNameFar16( HINSTANCE16 module, Win16FarPtr buffer, UINT16 size) { assert(module == 0x5555 && size == 0x100); write_far_string(buffer, "C:\\APP\\GAME.EXE"); return 15; } uint16_t multimedia_split_path( Win16FarPtr extension, Win16FarPtr file_name, Win16FarPtr directory, Win16FarPtr input) { char input_text[32]; read_far_string(input, input_text, sizeof(input_text)); assert(strcmp(input_text, "C:\\APP\\GAME.EXE") == 0); assert(extension != 0 && file_name != 0 && directory == input); write_far_string(directory, "MOD"); return 7; } Win16FarPtr multimedia_environment_value(Win16FarPtr name) { char name_text[8]; read_far_string(name, name_text, sizeof(name_text)); assert(strcmp(name_text, "PATH") == 0); return win16_make_far_pointer(0x7000, 0x4700); } static void fill_procedures(void) { for (unsigned index = 0; index < 11; index++) { g_multimedia_procedures[index] = win16_make_far_pointer(0x8000, (uint16_t)(0x100 + index)); } } static void reset_loader(void) { for (unsigned index = 0; index < 11; index++) { g_multimedia_procedures[index] = 0; } g_multimedia_initialized = 0; g_multimedia_module = 0; g_multimedia_version = 0; g_multimedia_auto_subclassed = 0; g_multimedia_argument_1 = 0; g_multimedia_argument_2 = 0; g_multimedia_legacy_windows = 0; g_load_result = 64; g_register_result = 1; g_version_result = 9; g_enabled_result = 1; g_auto_result = 1; g_search_success_attempt = 0; g_search_calls = 0; g_load_calls = 0; g_proc_calls = 0; g_error_mode_calls = 0; g_freed_module = 0; write_far_string( win16_make_far_pointer(0x7000, 0x478d), g_multimedia_library_path); } int main(void) { uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7000); win16_bind_segment(0x7200, (void *)stack_base, 0x10000, true); write_far_string(win16_make_far_pointer(0x7000, 0x046a), "PATH"); write_far_string(win16_make_far_pointer(0x7000, 0x4700), "ENV"); write_far_string( win16_make_far_pointer(0x7000, 0x478d), g_multimedia_library_path); fill_procedures(); g_multimedia_module = 31; g_multimedia_initialized = 1; g_freed_module = 0; multimedia_unload(); assert(g_freed_module == 0 && g_multimedia_module == 31); assert(!g_multimedia_initialized); for (unsigned index = 0; index < 11; index++) { assert(g_multimedia_procedures[index] == 0); } fill_procedures(); g_multimedia_module = 64; g_multimedia_initialized = 1; Win16FarPtr terminator = g_multimedia_procedures[10]; g_called_procedure = 0; multimedia_finalize_current_task(); assert(g_called_procedure == terminator && g_called_argument == 0x1234); assert(g_freed_module == 64 && !g_multimedia_initialized); fill_procedures(); g_multimedia_initialized = 0; g_called_procedure = 0; multimedia_finalize_current_task(); assert(g_called_procedure == 0 && g_multimedia_procedures[0] != 0); fill_procedures(); g_multimedia_module = 64; g_multimedia_initialized = 1; g_sequence = 0; g_check_sequence = true; Win16FarPtr application = win16_make_far_pointer(0x7000, 2); multimedia_application_destruct(application, 0x0200); g_check_sequence = false; assert(g_sequence == 4 && g_destroyed_application == application); reset_loader(); g_win16_instance = 0x4444; g_multimedia_pending = 0x7f; assert(multimedia_initialize_export(1, 2, 1, 0x1234, 0x7000) == 1); assert(g_multimedia_pending == 0); assert(g_multimedia_argument_1 == 1 && g_multimedia_argument_2 == 2); assert(g_multimedia_auto_subclassed == 1); assert(g_proc_calls == 11 && g_error_mode_calls == 2); assert(g_error_modes[0] == 0x8000 && g_error_modes[1] == 0); assert(multimedia_initialize(9, 8, 0, 0x1234, 0x7000) == 1); assert(g_load_calls == 1); /* Already initialized: no second load. */ reset_loader(); g_load_result = 31; assert(multimedia_initialize(1, 2, 1, 0x1234, 0x7000) == 0); assert(g_proc_calls == 0 && g_multimedia_module == 31); reset_loader(); g_register_result = 0; assert(multimedia_initialize(1, 2, 1, 0x1234, 0x7000) == 0); assert(g_freed_module == 64 && g_multimedia_procedures[0] == 0); reset_loader(); g_version_result = 8; assert(multimedia_initialize(1, 2, 1, 0x1234, 0x7000) == 0); assert(g_freed_module == 64); reset_loader(); g_multimedia_legacy_windows = 1; g_search_success_attempt = -1; assert(multimedia_initialize(1, 2, 1, 0x1234, 0x7000) == 0); assert(g_load_calls == 0 && g_multimedia_module == 0); reset_loader(); g_multimedia_legacy_windows = 1; assert(multimedia_initialize(3, 4, 1, 0x1234, 0x7000) == 1); assert(g_proc_calls == 10 && g_multimedia_procedures[8] == 0); assert(g_multimedia_auto_subclassed == 0); assert(g_error_mode_calls == 0); for (int attempt = 0; attempt < 5; attempt++) { g_search_success_attempt = attempt; g_search_calls = 0; assert(multimedia_locate_library( win16_make_far_pointer(0x7000, 0x1234), win16_make_far_pointer(0x7000, 0x478d))); assert(g_search_calls == (unsigned)attempt + 1); } assert(strcmp(g_search_paths[0], "") == 0); assert(strcmp(g_search_paths[1], "WIN") == 0); assert(strcmp(g_search_paths[2], "SYS") == 0); assert(strcmp(g_search_paths[3], "MOD") == 0); assert(strcmp(g_search_paths[4], "ENV") == 0); g_search_success_attempt = -1; g_search_calls = 0; assert(!multimedia_locate_library( win16_make_far_pointer(0x7000, 0x1234), win16_make_far_pointer(0x7000, 0x478d))); assert(g_search_calls == 5); return 0; } zqx#include "../tdkpin_multimedia.h" #include #include #include static Win16DosFileAttributesResult g_attribute_results[16]; static unsigned g_attribute_result_count; static unsigned g_attribute_result_index; static char g_attribute_names[16][80]; static unsigned g_oem_calls; static Win16FarPtr g_environment; static void write_far_string(Win16FarPtr destination, const char *source) { size_t length = strlen(source); for (size_t index = 0; index <= length; index++) { win16_write_u8( win16_far_add_offset(destination, (uint16_t)index), (uint8_t)source[index]); } } static void read_far_string( Win16FarPtr source, char *destination, size_t capacity) { size_t index = 0; while (index + 1 < capacity) { uint8_t byte = win16_read_u8( win16_far_add_offset(source, (uint16_t)index)); destination[index++] = (char)byte; if (byte == 0) { return; } } destination[capacity - 1] = 0; } INT16 AnsiToOem16(Win16FarPtr source, Win16FarPtr destination) { assert(source == destination); g_oem_calls++; return 1; } Win16DosFileAttributesResult win16_dos_get_file_attributes( Win16FarPtr oem_name) { assert(g_attribute_result_index < g_attribute_result_count); read_far_string( oem_name, g_attribute_names[g_attribute_result_index], sizeof(g_attribute_names[g_attribute_result_index])); return g_attribute_results[g_attribute_result_index++]; } Win16FarPtr GetDOSEnvironment16(void) { return g_environment; } static void reset_attributes(void) { g_attribute_result_count = 0; g_attribute_result_index = 0; g_oem_calls = 0; } static void assert_far_string(Win16FarPtr string, const char *expected) { char actual[256]; read_far_string(string, actual, sizeof(actual)); assert(strcmp(actual, expected) == 0); } int main(void) { static uint8_t data[0x1000]; uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x7000, data, sizeof(data), true); win16_bind_segment(0x7200, (void *)stack_base, 0x10000, true); Win16FarPtr name = win16_make_far_pointer(0x7000, 0x0100); Win16FarPtr search = win16_make_far_pointer(0x7000, 0x0200); Win16FarPtr result = win16_make_far_pointer(0x7000, 0x0300); char long_name[96]; memset(long_name, 'A', sizeof(long_name) - 1); long_name[sizeof(long_name) - 1] = 0; write_far_string(name, long_name); reset_attributes(); g_attribute_result_count = 1; g_attribute_results[0] = (Win16DosFileAttributesResult){0x20, false}; Win16DosFileAttributesResult attributes = borland_dos_get_file_attributes_ansi(name); assert(!attributes.carry && attributes.attributes == 0x20); assert(strlen(g_attribute_names[0]) == 79 && g_oem_calls == 1); write_far_string(name, "FILE.DLL"); write_far_string(search, "C:\\ONE;D:;E:\\TWO"); reset_attributes(); g_attribute_result_count = 4; g_attribute_results[0] = (Win16DosFileAttributesResult){0, true}; g_attribute_results[1] = (Win16DosFileAttributesResult){0x10, false}; /* directory */ g_attribute_results[2] = (Win16DosFileAttributesResult){0, true}; g_attribute_results[3] = (Win16DosFileAttributesResult){0x20, false}; assert(multimedia_search_file(search, name, result) == result); assert(strcmp(g_attribute_names[0], "FILE.DLL") == 0); assert(strcmp(g_attribute_names[1], "C:\\ONE\\FILE.DLL") == 0); assert(strcmp(g_attribute_names[2], "D:FILE.DLL") == 0); assert(strcmp(g_attribute_names[3], "E:\\TWO\\FILE.DLL") == 0); assert_far_string(result, "E:\\TWO\\FILE.DLL"); write_far_string(search, ""); reset_attributes(); g_attribute_result_count = 1; g_attribute_results[0] = (Win16DosFileAttributesResult){0, true}; (void)multimedia_search_file(search, name, result); assert_far_string(result, ""); write_far_string(search, ";X"); reset_attributes(); g_attribute_result_count = 2; g_attribute_results[0] = (Win16DosFileAttributesResult){0, true}; g_attribute_results[1] = (Win16DosFileAttributesResult){0, false}; (void)multimedia_search_file(search, name, result); assert(strcmp(g_attribute_names[1], "\\FILE.DLL") == 0); Win16FarPtr input = win16_make_far_pointer(0x7000, 0x0400); Win16FarPtr directory = win16_make_far_pointer(0x7000, 0x0500); Win16FarPtr file = win16_make_far_pointer(0x7000, 0x0600); Win16FarPtr extension = win16_make_far_pointer(0x7000, 0x0700); write_far_string(input, "C:\\LONGDIR\\NAME.EXTMORE"); assert(multimedia_split_path(extension, file, directory, input) == 7); assert_far_string(directory, "C:\\LONGDIR\\"); assert_far_string(file, "NAME"); assert_far_string(extension, ".EXT"); write_far_string(input, "DIR\\A?.*"); assert(multimedia_split_path(extension, file, directory, input) == 15); assert_far_string(directory, "DIR\\"); assert_far_string(file, "A?"); assert_far_string(extension, ".*"); write_far_string(input, "GAME"); assert(multimedia_split_path(extension, file, directory, input) == 2); assert_far_string(directory, ""); assert_far_string(file, "GAME"); assert_far_string(extension, ""); g_environment = win16_make_far_pointer(0x7000, 0x0800); const char environment[] = "FOO=one\0Path=two;three\0EMPTY=\0\0"; for (size_t index = 0; index < sizeof(environment); index++) { win16_write_u8( win16_far_add_offset(g_environment, (uint16_t)index), (uint8_t)environment[index]); } write_far_string(name, "PATH"); Win16FarPtr value = multimedia_environment_value(name); assert_far_string(value, "two;three"); write_far_string(name, "empty"); value = multimedia_environment_value(name); assert(value != 0 && win16_read_u8(value) == 0); write_far_string(name, "missing"); assert(multimedia_environment_value(name) == 0); return 0; } 4xS#include "../tdkpin_multimedia.h" #include "../tdkpin_borland_files.h" #include "../tdkpin_borland_records.h" #include #include #include #include Win16FarPtr g_multimedia_procedures[11]; HINSTANCE16 g_multimedia_module; uint8_t g_multimedia_initialized; uint8_t g_multimedia_pending; uint16_t g_multimedia_version; uint8_t g_multimedia_auto_subclassed; uint8_t g_multimedia_argument_2; uint8_t g_multimedia_argument_1; uint8_t g_multimedia_legacy_windows; char g_multimedia_library_path[21]; uint16_t g_multimedia_system_directory_length; uint16_t g_multimedia_windows_version; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; _Atomic uint16_t g_borland_io_result; uint8_t g_borland_file_mode; static const char *g_system_directory = "SYS"; static uint16_t g_get_version_result; static uint16_t g_open_results[4]; static unsigned g_open_result_count; static unsigned g_open_result_index; static unsigned g_assign_calls; static unsigned g_close_calls; static unsigned g_require_calls; static uint8_t g_assigned_length; static uint8_t g_assigned_last; UINT16 GetSystemDirectoryFar16(Win16FarPtr buffer, UINT16 size) { assert(size == 200); size_t length = strlen(g_system_directory); for (size_t index = 0; index <= length; index++) { win16_write_u8( win16_far_add_offset(buffer, (uint16_t)index), (uint8_t)g_system_directory[index]); } return (UINT16)length; } uint32_t GetVersion16(void) { return 0xbeef0000u | g_get_version_result; } void borland_assign_file_short(Win16FarPtr name, Win16FarPtr record) { (void)record; g_assign_calls++; g_assigned_length = win16_read_u8(name); g_assigned_last = win16_read_u8( win16_far_add_offset(name, g_assigned_length)); } void borland_open_generic_file(uint16_t record_size, Win16FarPtr record) { (void)record; assert(record_size == 1); assert(g_open_result_index < g_open_result_count); atomic_store( &g_borland_io_result, g_open_results[g_open_result_index++]); } uint16_t borland_take_io_result(void) { return atomic_exchange(&g_borland_io_result, 0); } void borland_close_generic_file(Win16FarPtr record) { (void)record; g_close_calls++; } void borland_require_io_success(void) { assert(atomic_load(&g_borland_io_result) == 0); g_require_calls++; } static void reset_probe_results(void) { g_open_result_count = 0; g_open_result_index = 0; g_assign_calls = 0; g_close_calls = 0; g_require_calls = 0; atomic_store(&g_borland_io_result, 0); } static void expect_short( Win16FarPtr string, const char *expected) { size_t length = strlen(expected); assert(win16_read_u8(string) == length); for (size_t index = 0; index < length; index++) { assert(win16_read_u8(win16_far_add_offset( string, (uint16_t)(index + 1))) == (uint8_t)expected[index]); } } static void expect_c_string( Win16FarPtr string, const char *expected) { size_t length = strlen(expected); for (size_t index = 0; index <= length; index++) { assert(win16_read_u8(win16_far_add_offset( string, (uint16_t)index)) == (uint8_t)expected[index]); } } static void reset_unit_state(uint8_t *dgroup) { memset(dgroup + 0x4750, 0xcc, 0x3d); memcpy(dgroup + 0x0522, "CTL3D.DLL", 10); memcpy(dgroup + 0x052c, "CTL3DV2.DLL", 12); for (unsigned index = 0; index < 11; index++) { g_multimedia_procedures[index] = win16_make_far_pointer(0x8888, (uint16_t)index); } g_multimedia_module = 0x7777; g_multimedia_initialized = 1; g_multimedia_pending = 1; g_multimedia_auto_subclassed = 1; g_multimedia_argument_1 = 9; g_multimedia_argument_2 = 8; } int main(void) { static uint8_t dgroup[0x6000]; static uint8_t code[0x600]; uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x7000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x7000); win16_bind_ne_segment(3, 0x6000, code, sizeof(code), false); win16_bind_segment(0x7200, (void *)stack_base, 0x10000, true); code[0x0470] = 1; code[0x0471] = '\\'; Win16FarPtr short_name = win16_make_far_pointer(0x7000, 0x600); win16_write_u8(short_name, 3); win16_write_u8(win16_far_add_offset(short_name, 1), 'A'); win16_write_u8(win16_far_add_offset(short_name, 2), 'B'); win16_write_u8(win16_far_add_offset(short_name, 3), 'C'); reset_probe_results(); g_open_result_count = 1; g_open_results[0] = 2; assert(!multimedia_short_file_exists(short_name)); assert(g_assign_calls == 1 && g_assigned_length == 3 && g_assigned_last == 'C'); assert(g_close_calls == 0 && g_require_calls == 0); reset_probe_results(); g_open_result_count = 1; g_open_results[0] = 0; assert(multimedia_short_file_exists(short_name)); assert(g_close_calls == 1 && g_require_calls == 1); reset_probe_results(); reset_unit_state(dgroup); g_system_directory = "SYS"; g_open_result_count = 1; g_open_results[0] = 0; /* CTL3DV2 exists. */ g_get_version_result = 0x0003; multimedia_initialize_runtime_unit(); assert(g_open_result_index == 1); expect_short( win16_make_far_pointer(0x7000, 0x486d), "SYS\\CTL3D.DLL"); expect_short( win16_make_far_pointer(0x7000, 0x496d), "SYS\\CTL3DV2.DLL"); expect_c_string( win16_make_far_pointer(0x7000, 0x478d), "CTL3DV2.DLL"); assert(g_multimedia_system_directory_length == 3); assert(g_multimedia_windows_version == 0x0003); assert(g_multimedia_legacy_windows == 1); for (unsigned index = 0; index < 11; index++) { assert(g_multimedia_procedures[index] == 0); } assert(g_multimedia_auto_subclassed == 0); assert(g_multimedia_argument_2 == 0 && g_multimedia_argument_1 == 1); assert(g_multimedia_module == 0 && g_multimedia_pending == 0 && g_multimedia_initialized == 0); reset_probe_results(); reset_unit_state(dgroup); g_open_result_count = 2; g_open_results[0] = 2; /* V2 absent. */ g_open_results[1] = 0; /* Classic present. */ g_get_version_result = 0x0a03; multimedia_initialize_runtime_unit(); assert(g_open_result_index == 2); expect_c_string( win16_make_far_pointer(0x7000, 0x478d), "CTL3D.DLL"); assert(g_multimedia_legacy_windows == 0); reset_probe_results(); reset_unit_state(dgroup); g_open_result_count = 2; g_open_results[0] = 2; g_open_results[1] = 3; g_get_version_result = 0x0004; multimedia_initialize_runtime_unit(); expect_c_string( win16_make_far_pointer(0x7000, 0x478d), "CTL3DV2.DLL"); assert(g_multimedia_legacy_windows == 0); reset_probe_results(); reset_unit_state(dgroup); memcpy(dgroup + 0x478d, "KEEP", 5); g_system_directory = ""; g_get_version_result = 0x0004; multimedia_initialize_runtime_unit(); assert(g_open_result_index == 0); expect_c_string( win16_make_far_pointer(0x7000, 0x478d), "KEEP"); return 0; } DxKඤxF #include "../tdkpin_numeric.h" #include #include static uint8_t g_memory[0x10000]; static uintptr_t g_stack_base; static Win16FarPtr at(uint16_t offset) { return win16_make_far_pointer(0x7777, offset); } static void bind_memory(void) { memset(g_memory, 0, sizeof(g_memory)); win16_reset_segment_bindings(); win16_bind_segment(0x7777, g_memory, sizeof(g_memory), true); win16_bind_segment(0x8888, (void *)g_stack_base, 0x10000, true); } static void set_span(uint16_t offset, const char *text) { memcpy(&g_memory[offset], text, strlen(text)); } static void set_short(uint16_t offset, const char *text) { size_t length = strlen(text); g_memory[offset] = (uint8_t)length; memcpy(&g_memory[offset + 1], text, length); } int main(void) { uint8_t stack_marker; g_stack_base = (uintptr_t)&stack_marker - 0x8000; bind_memory(); BorlandFormattedSlice formatted = borland_format_i32_decimal_backward(at(100), -12345); assert(formatted.start == at(94) && formatted.length == 6); assert(memcmp(&g_memory[94], "-12345", 6) == 0); formatted = borland_format_u32_backward(at(120), 0x2af, 16); assert(formatted.start == at(117) && formatted.length == 3); assert(memcmp(&g_memory[117], "2AF", 3) == 0); borland_format_i32_short_string(255, at(140), 0, -12345); assert(g_memory[140] == 6); assert(memcmp(&g_memory[141], "-12345", 6) == 0); borland_format_i32_short_string(255, at(150), 9, 42); assert(g_memory[150] == 9); assert(memcmp(&g_memory[151], " 42", 9) == 0); borland_format_i32_short_string(5, at(170), 9, -12345); assert(g_memory[170] == 5); assert(memcmp(&g_memory[171], "-1234", 5) == 0); set_span(200, "-2147483648"); BorlandParseI32Result parsed = borland_parse_i32_span(at(200), 11); assert(!parsed.failed && parsed.remaining == 0 && parsed.value == INT32_MIN); set_span(220, "$FFFFFFFF"); parsed = borland_parse_i32_span(at(220), 9); assert(!parsed.failed && parsed.value == -1); set_span(240, "2147483648"); parsed = borland_parse_i32_span(at(240), 10); assert(parsed.failed); set_span(260, "12x"); parsed = borland_parse_i32_span(at(260), 3); assert(!parsed.failed && parsed.value == 12 && parsed.remaining == 1); set_short(300, " -42"); BorlandValI32Result value = borland_val_i32_short_string(at(300)); assert(value.value == -42 && value.error_position == 0); set_short(320, "12x"); value = borland_val_i32_short_string(at(320)); assert(value.value == 0 && value.error_position == 3); return 0; } *px#include "../tdkpin_object_lifecycle.h" #include static unsigned g_sequence; static Win16FarPtr g_object; static Win16FarPtr g_parent; static Win16FarPtr g_thunk; static Win16FarPtr g_teardown; static bool g_enter_result; static unsigned g_construct_sequence; void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { assert(++g_sequence == 1); assert(procedure == g_teardown && object == g_object); } void object_windows_for_each_child( Win16FarPtr container, Win16FarPtr action) { assert(++g_sequence == 2); assert(container == g_object); assert(action == win16_make_far_pointer(0x6000, 0x03e9)); } void object_windows_remove_child( Win16FarPtr container, Win16FarPtr child) { assert(++g_sequence == 3); assert(container == g_parent && child == g_object); } void object_windows_release_bound_thunk(Win16FarPtr thunk) { assert(++g_sequence == (g_parent == 0 ? 3u : 4u)); assert(thunk == g_thunk); } void borland_default_object_destructor( Win16FarPtr object, uint16_t vmt) { assert(++g_sequence == (g_parent == 0 ? 4u : 5u)); assert(object == g_object && vmt == 0); } void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(++g_sequence == (g_parent == 0 ? 5u : 6u)); assert(frame->object == g_object && frame->vmt_argument == 0x0200); assert(vmt_field_offset == 0); } bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(++g_construct_sequence == 1); assert(frame->object == g_object && frame->vmt_argument == 0x0200); assert(vmt_field_offset == 0); return g_enter_result; } Win16FarPtr borland_default_object_constructor( Win16FarPtr object, uint16_t vmt) { assert(++g_construct_sequence == 2); assert(object == g_object && vmt == 0); return object; } void object_windows_append_child( Win16FarPtr container, Win16FarPtr child) { assert(++g_construct_sequence == 3); assert(container == g_parent && child == g_object); } Win16FarPtr object_windows_allocate_bound_thunk(Win16FarPtr object) { unsigned expected = g_parent == 0 ? 3u : 4u; assert(++g_construct_sequence == expected); assert(object == g_object); return g_thunk; } void object_windows_set_flag_4(Win16FarPtr object) { unsigned expected = g_parent == 0 ? 4u : 5u; assert(++g_construct_sequence == expected); assert(object == g_object); Win16FarPtr address = win16_far_add_offset(object, 0x16); win16_write_u8(address, (uint8_t)(win16_read_u8(address) | 4)); } static void write_far(Win16FarPtr object, uint16_t offset, Win16FarPtr value) { win16_write_u16(object, offset, win16_far_offset(value)); win16_write_u16( object, (uint16_t)(offset + 2), win16_far_selector(value)); } static void run_case(bool with_parent) { g_sequence = 0; g_parent = with_parent ? win16_make_far_pointer(0x7100, 2) : 0; write_far(g_object, 6, g_parent); object_windows_object_destruct(g_object, 0x0200); assert(g_sequence == (with_parent ? 6u : 5u)); } static void run_construct_case(bool with_parent) { g_construct_sequence = 0; g_enter_result = true; g_parent = with_parent ? win16_make_far_pointer(0x7100, 2) : 0; assert(object_windows_object_construct(g_object, 0x0200, g_parent) == g_object); assert(g_construct_sequence == (with_parent ? 5u : 4u)); assert(win16_read_u16(win16_far_add_offset(g_object, 2)) == 0); assert(win16_read_u16(win16_far_add_offset(g_object, 4)) == 0); assert(win16_read_far_pointer(g_object, 6) == g_parent); assert(win16_read_far_pointer(g_object, 0x0a) == 0); assert(win16_read_far_pointer(g_object, 0x0e) == 0); assert(win16_read_far_pointer(g_object, 0x12) == g_thunk); assert(win16_read_u8(win16_far_add_offset(g_object, 0x16)) == 4); if (!with_parent) { assert(win16_read_far_pointer(g_object, 0x19) == 0); } } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t code[0x1000]; static uint8_t object_bytes[64]; static uint8_t parent_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_ne_segment(4, 0x6000, code, sizeof(code), false); win16_bind_segment(0x7000, object_bytes, sizeof(object_bytes), true); win16_bind_segment(0x7100, parent_bytes, sizeof(parent_bytes), true); g_object = win16_make_far_pointer(0x7000, 2); g_thunk = win16_make_far_pointer(0x6200, 0x1234); g_teardown = win16_make_far_pointer(0x6100, 0x4321); win16_write_u16(g_object, 0, 0x0100); write_far(win16_dgroup_pointer(0x0124), 0, g_teardown); write_far(g_object, 0x12, g_thunk); run_case(true); run_case(false); run_construct_case(true); run_construct_case(false); g_construct_sequence = 0; g_enter_result = false; assert(object_windows_object_construct(g_object, 0x0200, 0) == g_object); assert(g_construct_sequence == 1); return 0; } Exe#include "../tdkpin_object_list.h" #include static Win16FarPtr g_match; static Win16FarPtr g_order[8]; static unsigned g_order_count; static Win16FarPtr g_blocking_child; static Win16FarPtr g_disposed_child; bool win16_call_object_predicate( Win16FarPtr procedure, Win16FarPtr child) { if (procedure == win16_make_far_pointer(0x6000, 0x0ec0)) { return object_windows_child_blocks_close(0, child); } assert(procedure == win16_make_far_pointer(0x6000, 0x0100)); g_order[g_order_count++] = child; return child == g_match; } bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == win16_make_far_pointer(0x6100, 0x0300)); return object != g_blocking_child; } void borland_dispose_object(Win16FarPtr object) { g_disposed_child = object; } BOOL16 IsIconic16(HWND16 window) { (void)window; return 0; } INT16 GetWindowText16(HWND16 window, char *text, INT16 maximum) { (void)window; (void)text; (void)maximum; return 0; } BOOL16 SetWindowText16(HWND16 window, const char *text) { (void)window; (void)text; return 0; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { (void)procedure; (void)object; (void)argument; } uint16_t win16_call_object_transfer_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t direction, Win16FarPtr cursor) { (void)procedure; (void)object; (void)direction; (void)cursor; return 0; } void win16_call_object_action( Win16FarPtr procedure, Win16FarPtr child) { assert(procedure == win16_make_far_pointer(0x6000, 0x0200)); g_order[g_order_count++] = child; } static Win16FarPtr next_of(Win16FarPtr child) { return win16_read_far_pointer(child, 0x19); } int main(void) { static uint8_t container_bytes[64]; static uint8_t a_bytes[64]; static uint8_t b_bytes[64]; static uint8_t c_bytes[64]; static uint8_t dgroup[0x1000]; static uint8_t code[0x1000]; win16_reset_segment_bindings(); win16_bind_segment( 0x7000, container_bytes, sizeof(container_bytes), true); win16_bind_segment(0x7100, a_bytes, sizeof(a_bytes), true); win16_bind_segment(0x7200, b_bytes, sizeof(b_bytes), true); win16_bind_segment(0x7300, c_bytes, sizeof(c_bytes), true); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_ne_segment(4, 0x6000, code, sizeof(code), false); Win16FarPtr container = win16_make_far_pointer(0x7000, 2); Win16FarPtr a = win16_make_far_pointer(0x7100, 2); Win16FarPtr b = win16_make_far_pointer(0x7200, 2); Win16FarPtr c = win16_make_far_pointer(0x7300, 2); object_windows_append_child(container, 0); assert(win16_read_far_pointer(container, 0x0a) == 0); object_windows_append_child(container, a); object_windows_append_child(container, b); object_windows_append_child(container, c); assert(win16_read_far_pointer(container, 0x0a) == c); assert(next_of(a) == b && next_of(b) == c && next_of(c) == a); win16_write_u16(a, 0, 0x0100); win16_write_u16(b, 0, 0x0100); win16_write_u16(c, 0, 0x0100); win16_write_u16(a, 4, 1); win16_write_u16(b, 4, 1); win16_write_u16(c, 4, 1); win16_write_u16(win16_dgroup_pointer(0x013c), 0, 0x0300); win16_write_u16(win16_dgroup_pointer(0x013e), 0, 0x6100); Win16FarPtr predicate = win16_make_far_pointer(0x6000, 0x0100); g_match = b; g_order_count = 0; assert(object_windows_find_child(container, predicate) == b); assert(g_order_count == 2 && g_order[0] == a && g_order[1] == b); g_match = 0; g_order_count = 0; assert(object_windows_find_child(container, predicate) == 0); assert(g_order_count == 3 && g_order[2] == c); g_blocking_child = b; assert(!object_windows_all_children_can_close(container)); g_blocking_child = 0; assert(object_windows_all_children_can_close(container)); win16_write_u16(a, 4, 0); g_blocking_child = a; assert(object_windows_all_children_can_close(container)); win16_write_u16(a, 4, 1); g_order_count = 0; object_windows_for_each_child( container, win16_make_far_pointer(0x6000, 0x0200)); assert(g_order_count == 3); assert(g_order[0] == a && g_order[1] == b && g_order[2] == c); object_windows_remove_child(container, b); assert(next_of(a) == c && next_of(c) == a); assert(win16_read_far_pointer(container, 0x0a) == c); object_windows_remove_child(container, c); assert(win16_read_far_pointer(container, 0x0a) == a); assert(next_of(a) == a); object_windows_remove_child(container, c); assert(win16_read_far_pointer(container, 0x0a) == a); object_windows_remove_child(container, a); assert(win16_read_far_pointer(container, 0x0a) == 0); assert(object_windows_find_child(container, predicate) == 0); object_windows_for_each_child( container, win16_make_far_pointer(0x6000, 0x0200)); assert(object_windows_minus_one_default(container) == 0xffff); g_disposed_child = 0; object_windows_dispose_child_callback(0xbeef, b); assert(g_disposed_child == b); return 0; } =xq#include "../tdkpin_object_windows.h" #include #include static uint8_t g_dgroup[0x10000]; static uint8_t g_code[0x10000]; static uint8_t g_object[0x100]; static BOOL16 g_is_window; static Win16FarPtr g_window_proc; static Win16FarPtr g_property_object; static unsigned g_set_count; static unsigned g_remove_count; static uint16_t g_property_offsets[2]; static uint16_t g_property_values[2]; static unsigned g_set_window_long_calls; static Win16FarPtr g_installed_proc; static Win16FarPtr g_called_proc; static HWND16 g_called_window; static UINT16 g_called_message; static WPARAM16 g_called_wparam; static LPARAM16 g_called_lparam; Win16FarPtr g_object_windows_creating_object; LRESULT16 SetWindowLong16(HWND16 window, INT16 index, int32_t value) { assert(window == 0x77 && index == -4); g_set_window_long_calls++; g_installed_proc = (Win16FarPtr)(uint32_t)value; return 0; } LRESULT16 win16_call_window_proc( Win16FarPtr procedure, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { g_called_proc = procedure; g_called_window = window; g_called_message = message; g_called_wparam = wparam; g_called_lparam = lparam; return (LRESULT16)0x12345678u; } BOOL16 SetProp16(HWND16 window, Win16FarPtr name, Win16Handle value) { assert(window == 0x77); assert(g_set_count < 2); g_property_offsets[g_set_count] = win16_far_offset(name); g_property_values[g_set_count] = value; g_set_count++; return 1; } Win16Handle RemoveProp16(HWND16 window, Win16FarPtr name) { assert(window == 0x77); assert(g_remove_count < 2); g_property_offsets[g_remove_count++] = win16_far_offset(name); return 0; } Win16Handle GetProp16(HWND16 window, Win16FarPtr name) { assert(window == 0x77); return win16_far_offset(name) == 0x067a ? win16_far_selector(g_property_object) : win16_far_offset(g_property_object); } BOOL16 IsWindow16(HWND16 window) { assert(window == 0x77); return g_is_window; } int32_t GetWindowLong16(HWND16 window, INT16 index) { assert(window == 0x77 && index == -4); return (int32_t)g_window_proc; } static void reset_state(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_code, 0, sizeof(g_code)); win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_code, sizeof(g_code), true); win16_bind_segment(0x7000, g_object, sizeof(g_object), true); win16_set_dgroup_selector(0x5000); g_is_window = 1; g_set_count = 0; g_remove_count = 0; g_set_window_long_calls = 0; } static void test_bootstrap_transition(void) { reset_state(); Win16FarPtr object = win16_make_far_pointer(0x7000, 0x0010); Win16FarPtr bound_proc = win16_make_far_pointer(0x6000, 0x0300); g_object_windows_creating_object = object; win16_write_u16(object, 0x12, win16_far_offset(bound_proc)); win16_write_u16(object, 0x14, win16_far_selector(bound_proc)); LRESULT16 result = object_window_bootstrap_proc( 0x77, 0x0123, 0x4567, (LPARAM16)0x89abcdefu); assert(result == (LRESULT16)0x12345678u); assert(g_set_window_long_calls == 1 && g_installed_proc == bound_proc); assert(g_set_count == 2); assert(g_property_values[0] == win16_far_selector(object)); assert(g_property_values[1] == win16_far_offset(object)); assert(g_called_proc == bound_proc && g_called_window == 0x77); assert(g_called_message == 0x0123 && g_called_wparam == 0x4567); assert(g_called_lparam == (LPARAM16)0x89abcdefu); } static void test_property_binding(void) { reset_state(); Win16FarPtr object = win16_make_far_pointer(0x3456, 0x789a); object_windows_bind_window(0x77, object); assert(g_set_count == 2); assert(g_property_offsets[0] == 0x067a && g_property_values[0] == 0x3456); assert(g_property_offsets[1] == 0x067e && g_property_values[1] == 0x789a); object_windows_unbind_window(0x77); assert(g_remove_count == 2); assert(g_property_offsets[0] == 0x067a && g_property_offsets[1] == 0x067e); } static void test_generated_thunk_lookup(void) { reset_state(); g_window_proc = win16_make_far_pointer(0x6000, 0x0100); Win16FarPtr object = win16_make_far_pointer(0x3456, 0x789a); g_code[2] = 0x5b; g_code[3] = 0x2e; g_code[0x0100] = 0xe8; g_code[0x0101] = 0xff; g_code[0x0102] = 0xfe; g_code[0x0103] = (uint8_t)object; g_code[0x0104] = (uint8_t)(object >> 8); g_code[0x0105] = (uint8_t)(object >> 16); g_code[0x0106] = (uint8_t)(object >> 24); assert(object_windows_object_from_window(0x77) == object); } static void test_property_fallback_and_invalid_window(void) { reset_state(); g_window_proc = win16_make_far_pointer(0x6000, 0x0200); g_property_object = win16_make_far_pointer(0x1111, 0x2222); assert(object_windows_object_from_window(0x77) == g_property_object); g_is_window = 0; assert(object_windows_object_from_window(0x77) == 0); } int main(void) { test_property_binding(); test_generated_thunk_lookup(); test_property_fallback_and_invalid_window(); test_bootstrap_transition(); return 0; } {ިwxv#include "../tdkpin_dialog.h" #include Win16FarPtr g_object_windows_application; uint8_t g_object_windows_focus_event_marker; static bool g_bool_result; static Win16FarPtr g_expected_bool_procedure; static Win16FarPtr g_expected_bool_receiver; static unsigned g_bool_calls; static HWND16 g_set_focus_window; static Win16FarPtr g_window_from_handle; static Win16FarPtr g_called_method; static Win16FarPtr g_called_receiver; static unsigned g_method_calls; static unsigned g_dispose_calls; static Win16FarPtr g_u16_procedures[2]; static uint16_t g_u16_arguments[2]; static unsigned g_u16_calls; bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == g_expected_bool_procedure); assert(object == g_expected_bool_receiver); g_bool_calls++; return g_bool_result; } HWND16 SetFocus16(HWND16 window) { g_set_focus_window = window; return 0x9999; } Win16FarPtr object_windows_object_from_window(HWND16 window) { assert(window == g_set_focus_window); return g_window_from_handle; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { g_called_method = procedure; g_called_receiver = object; g_method_calls++; } void borland_dispose_object(Win16FarPtr object) { g_called_receiver = object; g_dispose_calls++; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { assert(g_u16_calls < 2); g_u16_procedures[g_u16_calls] = procedure; g_u16_arguments[g_u16_calls] = argument; g_called_receiver = object; g_u16_calls++; } static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } int main(void) { static uint8_t dgroup[0x1000]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); Win16FarPtr application = win16_make_far_pointer(0x5000, 0x0200); Win16FarPtr main_window = win16_make_far_pointer(0x5000, 0x0300); Win16FarPtr other_window = win16_make_far_pointer(0x5000, 0x0400); Win16FarPtr attached = win16_make_far_pointer(0x5000, 0x0600); g_object_windows_application = application; win16_write_u16(application, 0, 0x0700); write_far(application, 8, main_window); win16_write_u16(main_window, 0, 0x0780); win16_write_u16(other_window, 0, 0x0800); win16_write_u16(attached, 0, 0x0880); Win16FarPtr app_can_close = win16_make_far_pointer(0x6000, 0x1111); Win16FarPtr window_can_close = win16_make_far_pointer(0x6000, 0x2222); write_far(win16_dgroup_pointer(0x0700), 0x44, app_can_close); write_far(win16_dgroup_pointer(0x0800), 0x3c, window_can_close); ObjectWindowsMessage message = {0}; g_expected_bool_procedure = app_can_close; g_expected_bool_receiver = application; g_bool_result = true; g_bool_calls = 0; object_windows_query_end_session_result(main_window, &message); assert(g_bool_calls == 1 && message.result == 0); g_expected_bool_procedure = window_can_close; g_expected_bool_receiver = other_window; g_bool_result = false; object_windows_query_end_session_result(other_window, &message); assert(message.result == 1); message.wparam = 0x1234; g_window_from_handle = other_window; write_far(other_window, 0x43, attached); Win16FarPtr attached_method = win16_make_far_pointer(0x6000, 0x3333); write_far(win16_dgroup_pointer(0x0880), 0x0c, attached_method); g_method_calls = 0; g_object_windows_focus_event_marker = 0; object_windows_focus_message(main_window, &message); assert(g_set_focus_window == 0x1234); assert(g_method_calls == 1 && g_called_method == attached_method && g_called_receiver == attached); assert(g_object_windows_focus_event_marker == 1); g_window_from_handle = 0; g_method_calls = 0; g_object_windows_focus_event_marker = 0; object_windows_focus_message(0, &message); assert(g_method_calls == 0 && g_object_windows_focus_event_marker == 1); Win16FarPtr dialog = win16_make_far_pointer(0x5000, 0x0500); win16_write_u16(dialog, 0, 0x0900); Win16FarPtr dialog_can_close = win16_make_far_pointer(0x6000, 0x4444); Win16FarPtr dialog_transfer = win16_make_far_pointer(0x6000, 0x5555); Win16FarPtr dialog_close = win16_make_far_pointer(0x6000, 0x6666); write_far(win16_dgroup_pointer(0x0900), 0x3c, dialog_can_close); write_far(win16_dgroup_pointer(0x0900), 0x44, dialog_transfer); write_far(win16_dgroup_pointer(0x0900), 0x50, dialog_close); win16_write_u8(win16_far_add_offset(dialog, 0x25), 0); g_expected_bool_procedure = dialog_can_close; g_expected_bool_receiver = dialog; g_bool_result = true; g_dispose_calls = 0; object_windows_dialog_validate_and_close(dialog, &message); assert(g_dispose_calls == 1 && g_called_receiver == dialog); win16_write_u8(win16_far_add_offset(dialog, 0x25), 1); g_expected_bool_procedure = dialog_can_close; g_expected_bool_receiver = dialog; g_bool_result = false; g_u16_calls = 0; object_windows_dialog_validate_and_close(dialog, &message); assert(g_u16_calls == 0); g_bool_result = true; object_windows_dialog_validate_and_close(dialog, &message); assert(g_u16_calls == 2 && g_called_receiver == dialog); assert(g_u16_procedures[0] == dialog_transfer && g_u16_arguments[0] == 1); assert(g_u16_procedures[1] == dialog_close && g_u16_arguments[1] == 1); return 0; } Y_r@Jx\#include "../tdkpin_game_assets.h" #include static uint8_t g_dgroup[0x1000]; static uint8_t g_window_bytes[32]; HINSTANCE16 g_win16_instance; static Win16FarPtr g_window; static unsigned g_step; void object_windows_setup_window(Win16FarPtr window) { assert(++g_step == 1 && window == g_window); } HBITMAP16 tdkpin_load_bitmap_resource( Win16FarPtr resource_name, HINSTANCE16 instance) { assert(++g_step == 2); assert(resource_name == win16_make_far_pointer(0, 993)); assert(instance == g_win16_instance); return 0x7777; } HWND16 SetFocus16(HWND16 window) { assert(++g_step == 3 && window == 0x2222); return 0x1111; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_window_bytes, sizeof(g_window_bytes), true); win16_set_dgroup_selector(0x5000); g_win16_instance = 0x4444; g_window = win16_make_far_pointer(0x6000, 0); win16_write_u16(g_window, 4, 0x2222); tdkpin_setup_overlay_window(g_window); assert(g_step == 3); assert(win16_read_u16(win16_make_far_pointer(0x5000, 0x0867)) == 0x7777); return 0; } }x#include "../tdkpin_palette.h" #include #include #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_allocation[sizeof(LOGPALETTE256)]; static uint8_t g_resource_bytes[768]; static uint8_t g_bitmap_info[sizeof(BITMAPINFO256)]; static unsigned g_range_checks; static unsigned g_get_mem_calls; static unsigned g_free_mem_calls; static unsigned g_create_palette_calls; static unsigned g_find_calls; static unsigned g_load_calls; static unsigned g_lock_calls; static unsigned g_unlock_calls; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } Win16FarPtr borland_get_mem(uint16_t bytes) { assert(bytes == sizeof(LOGPALETTE256)); g_get_mem_calls++; return win16_make_far_pointer(0x6000, 0); } void borland_free_mem(Win16FarPtr block, uint16_t bytes) { assert(block == win16_make_far_pointer(0x6000, 0)); assert(bytes == sizeof(LOGPALETTE256)); g_free_mem_calls++; } void borland_check_int32_range( int32_t value, const BorlandInt32Range *range) { assert(value >= range->minimum && value <= range->maximum); if (range->maximum == 0xffff) { assert(value == sizeof(LOGPALETTE256)); } else { assert(range->minimum == 0 && range->maximum == 0x02ff); } g_range_checks++; } HPALETTE16 CreatePalette16(Win16FarPtr logical_palette) { assert(logical_palette == win16_make_far_pointer(0x6000, 0)); assert(win16_read_u16(logical_palette) == 0x0300); assert(win16_read_u16(win16_far_add_offset(logical_palette, 2)) == 256); for (uint16_t index = 0; index < 256; index++) { Win16FarPtr entry = win16_far_add_offset( logical_palette, (uint16_t)(4 + index * 4)); assert(win16_read_u8(entry) == g_dgroup[0x4450 + index * 3]); assert(win16_read_u8(win16_far_add_offset(entry, 1)) == g_dgroup[0x4451 + index * 3]); assert(win16_read_u8(win16_far_add_offset(entry, 2)) == g_dgroup[0x4452 + index * 3]); assert(win16_read_u8(win16_far_add_offset(entry, 3)) == 0); } g_create_palette_calls++; return 0x2468; } HRSRC16 FindResource16( HINSTANCE16 instance, Win16FarPtr name, Win16FarPtr type) { assert(instance == 0x4444); assert(name == win16_make_far_pointer(0, 999)); assert(type == dgroup_at(0x045a)); g_find_calls++; return 0x1111; } HGLOBAL16 LoadResource16(HINSTANCE16 instance, HRSRC16 resource) { assert(instance == 0x4444 && resource == 0x1111); g_load_calls++; return 0x2222; } Win16FarPtr LockResource16(HGLOBAL16 resource) { assert(resource == 0x2222); g_lock_calls++; return win16_make_far_pointer(0x7000, 0); } BOOL16 GlobalUnlock16(HGLOBAL16 resource) { assert(resource == 0x2222); g_unlock_calls++; return 1; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_allocation, sizeof(g_allocation), true); win16_bind_segment(0x7000, g_resource_bytes, sizeof(g_resource_bytes), false); win16_bind_segment(0x8000, g_bitmap_info, sizeof(g_bitmap_info), true); win16_set_dgroup_selector(0x5000); memcpy(&g_dgroup[0x045a], "pal", 4); for (uint16_t index = 0; index < 768; index++) { g_dgroup[0x4450 + index] = (uint8_t)(index * 37 + 11); g_resource_bytes[index] = (uint8_t)(index * 19 + 7); } tdkpin_create_palette_from_rgb_table(); assert(g_get_mem_calls == 1 && g_create_palette_calls == 1); assert(g_range_checks == 1 && g_free_mem_calls == 1); assert(win16_read_u16(dgroup_at(0x444e)) == 0x2468); g_range_checks = 0; tdkpin_load_palette_resource( dgroup_at(0x4450), win16_make_far_pointer(0, 999), 0x4444); assert(g_find_calls == 1 && g_load_calls == 1 && g_lock_calls == 1); assert(g_unlock_calls == 1 && g_range_checks == 1536); assert(memcmp(&g_dgroup[0x4450], g_resource_bytes, 768) == 0); Win16FarPtr bitmap_info = win16_make_far_pointer(0x8000, 0); win16_write_u16( bitmap_info, offsetof(BITMAPINFOHEADER16, bit_count), 8); tdkpin_fill_bitmap_info_palette(bitmap_info); for (uint16_t index = 0; index < 256; index++) { size_t output = offsetof(BITMAPINFO256, colors) + index * 4; assert(g_bitmap_info[output] == g_dgroup[0x4452 + index * 3]); assert(g_bitmap_info[output + 1] == g_dgroup[0x4451 + index * 3]); assert(g_bitmap_info[output + 2] == g_dgroup[0x4450 + index * 3]); assert(g_bitmap_info[output + 3] == 0); } return 0; } Tx. #include "../tdkpin_palette.h" #include #include #include static uint8_t g_palette_bytes[sizeof(LOGPALETTE256)]; static bool g_fail_allocation; static unsigned g_step; static unsigned g_get_mem_calls; static unsigned g_free_mem_calls; Win16FarPtr borland_get_mem(uint16_t bytes) { assert(bytes == sizeof(LOGPALETTE256)); g_get_mem_calls++; return g_fail_allocation ? 0 : win16_make_far_pointer(0x6000, 0); } void borland_free_mem(Win16FarPtr block, uint16_t bytes) { assert(++g_step == 8); assert(block == win16_make_far_pointer(0x6000, 0)); assert(bytes == sizeof(LOGPALETTE256)); g_free_mem_calls++; } HDC16 GetDC16(HWND16 window) { assert(++g_step == 1 && window == 0x1234); return 0x2222; } HPALETTE16 CreatePalette16(Win16FarPtr logical_palette) { assert(++g_step == 2); assert(win16_read_u16(logical_palette) == 0x0300); assert(win16_read_u16(win16_far_add_offset(logical_palette, 2)) == 256); for (uint16_t index = 0; index < 256; index++) { Win16FarPtr entry = win16_far_add_offset( logical_palette, (uint16_t)(4 + index * 4)); assert(win16_read_u8(entry) == 0); assert(win16_read_u8(win16_far_add_offset(entry, 1)) == 0); assert(win16_read_u8(win16_far_add_offset(entry, 2)) == 0); assert(win16_read_u8(win16_far_add_offset(entry, 3)) == 4); } return 0x3333; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x2222); if (++g_step == 3) { assert(palette == 0x3333 && force_background == 0); return 0x4444; } assert(g_step == 5); assert(palette == 0x4444 && force_background == 1); return 0x3333; } UINT16 RealizePalette16(HDC16 dc) { assert(++g_step == 4 && dc == 0x2222); return 256; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(++g_step == 6 && object == 0x3333); return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(++g_step == 7 && window == 0x1234 && dc == 0x2222); return 1; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment( 0x6000, g_palette_bytes, sizeof(g_palette_bytes), true); g_fail_allocation = true; tdkpin_realize_nocollapse_palette(0x1234); assert(g_get_mem_calls == 1 && g_step == 0 && g_free_mem_calls == 0); g_fail_allocation = false; memset(g_palette_bytes, 0xff, sizeof(g_palette_bytes)); tdkpin_realize_nocollapse_palette(0x1234); assert(g_get_mem_calls == 2 && g_step == 8 && g_free_mem_calls == 1); return 0; } Ijaxz#include "../tdkpin_game_assets.h" #include #include static uint8_t g_dgroup[0x5000]; static uint8_t g_objects[0x100]; static Win16FarPtr g_window; static Win16FarPtr g_message; static HWND16 g_parent_result; static int16_t g_realize_result; static unsigned g_step; static unsigned g_invalidate_calls; HWND16 GetParent16(HWND16 window) { assert(++g_step == 1 && window == 0x3333); return g_parent_result; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_step++; return 0x4444; } HPALETTE16 SelectPalette16( HDC16 dc, HPALETTE16 palette, BOOL16 force_background) { assert(dc == 0x4444); g_step++; if (palette == 0x5555) { assert(force_background == 0 || force_background == 1); return 0x6666; } assert(palette == 0x6666 && force_background == 0); return 0x5555; } UINT16 RealizePalette16(HDC16 dc) { assert(dc == 0x4444); g_step++; return (uint16_t)g_realize_result; } BOOL16 UpdateColors16(HDC16 dc) { assert(dc == 0x4444); g_step++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x4444); g_step++; return 1; } BOOL16 InvalidateRect16( HWND16 window, Win16FarPtr rectangle, BOOL16 erase) { assert(window == 0x2222 && rectangle == 0 && erase == 0); g_invalidate_calls++; return 1; } static void reset_message(HWND16 changed_window) { memset(g_objects, 0, sizeof(g_objects)); win16_write_u16(g_window, 4, 0x2222); win16_write_u16(g_message, 4, changed_window); win16_write_u32(g_message, 10, 0x12345678); g_step = 0; g_invalidate_calls = 0; g_parent_result = 0; g_realize_result = 0; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_objects, sizeof(g_objects), true); win16_set_dgroup_selector(0x5000); g_window = win16_make_far_pointer(0x6000, 0); g_message = win16_make_far_pointer(0x6000, 0x40); win16_write_u16(win16_make_far_pointer(0x5000, 0x444e), 0, 0x5555); reset_message(0x2222); assert(tdkpin_wm_palette_changed(g_window, g_message) == 1); assert(g_step == 0); reset_message(0x3333); g_parent_result = 0x2222; assert(tdkpin_wm_palette_changed(g_window, g_message) == 1); assert(g_step == 1); reset_message(0x3333); assert(tdkpin_wm_palette_changed(g_window, g_message) == 0); assert(g_step == 7); assert(win16_read_u32(win16_far_add_offset(g_message, 10)) == 0); reset_message(0); g_realize_result = 0; assert(tdkpin_wm_query_new_palette(g_window, g_message) == 0); assert(g_step == 5 && g_invalidate_calls == 0); assert(win16_read_u32(win16_far_add_offset(g_message, 10)) == 0); reset_message(0); g_realize_result = 3; assert(tdkpin_wm_query_new_palette(g_window, g_message) == 3); assert(g_step == 5 && g_invalidate_calls == 1); assert(win16_read_u32(win16_far_add_offset(g_message, 10)) == 3); uint16_t (*changed_variants[])(Win16FarPtr, Win16FarPtr) = { tdkpin_wm_palette_changed_variant_b, tdkpin_wm_palette_changed_variant_c, }; for (unsigned index = 0; index < 2; index++) { reset_message(0x3333); assert(changed_variants[index](g_window, g_message) == 0); assert(g_step == 7); assert(win16_read_u32(win16_far_add_offset(g_message, 10)) == 0); } int16_t (*query_variants[])(Win16FarPtr, Win16FarPtr) = { tdkpin_wm_query_new_palette_variant_b, tdkpin_wm_query_new_palette_variant_c, }; for (unsigned index = 0; index < 2; index++) { reset_message(0); g_realize_result = 2; assert(query_variants[index](g_window, g_message) == 2); assert(g_step == 5 && g_invalidate_calls == 1); assert(win16_read_u32(win16_far_add_offset(g_message, 10)) == 2); } return 0; } s_;x@g1hiBOOL16 g_iconic  conic_calls &"update_calls; BOOL16 IsIconicWl); g_iconicOg_iconic UpdateWindowWl ); g_upK1:fixture(void) { memset(g_dgroup, 0, sizeof(g_dgroup));i8%iconic = 0; g_iconic_callsa( update_calls]2set_indeterminate_u16(0xbeef); reset_fixture(%08(0 07c4), 1)@ palette_change_variant_a  ) 8(007c4)) g_iconic_calls == 0 &&1 == 0); reset_fixture(%1); g_iconic = 1@ palette_change_variant_a *0xbeef); assert(g_iconic_calls == 1 &&1 == 0); reset_fixture(%1)@ palette_change_variant_a  iconic_calls == 1 &&1  && g_up T 8(0 07c4)) == 1)@ palette_change_variant_a 0xbeef); reset_fixture(%'1); tdkpin_palette_change_variant_b  ; assert(0%'0); tdkpin_palette_change_variant_b  ; assert( && g_up T0); return 0; } (x.#include "../tdkpin_panel_animation.h" #include #include typedef struct { HDC16 destination; HGDIOBJ16 destination_object; INT16 destination_x; INT16 destination_y; INT16 width; INT16 height; HDC16 source; HGDIOBJ16 source_object; INT16 source_x; INT16 source_y; uint32_t rop; } RecordedBlit; static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_create_dc_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_dc_calls; static unsigned g_play_calls; static unsigned g_stop_calls; static uint16_t g_played_sound; static HGDIOBJ16 g_source_selected; static HGDIOBJ16 g_panel_selected; static RecordedBlit g_blits[16]; HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); return 0x3333; } HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x3333 && g_create_dc_calls < 2); return (HDC16)(0x4001 + g_create_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 91 && height == 123); return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { g_select_calls++; if (dc == 0x4001) { HGDIOBJ16 old = g_source_selected; g_source_selected = object; return old; } assert(dc == 0x4002); HGDIOBJ16 old = g_panel_selected; g_panel_selected = object; return old; } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(g_blit_calls < 16); RecordedBlit *blit = &g_blits[g_blit_calls++]; *blit = (RecordedBlit){ destination, destination == 0x4001 ? g_source_selected : destination == 0x4002 ? g_panel_selected : 0, destination_x, destination_y, width, height, source, source == 0x4001 ? g_source_selected : source == 0x4002 ? g_panel_selected : 0, source_x, source_y, raster_operation}; return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (g_delete_dc_calls == 0 ? 0x4002 : 0x4001)); g_delete_dc_calls++; return 1; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); return 1; } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { g_played_sound = sound_number; g_play_calls++; } uint16_t tdkpin_stop_sound_if_active(void) { g_stop_calls++; return 0xabcd; } static void prepare_fixture(int32_t frame) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_blits, 0, sizeof(g_blits)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_receiver, 4, 0x2222); win16_write_u16(win16_dgroup_pointer(0x085f), 0, 0x6000); win16_write_u16(win16_dgroup_pointer(0x0859), 0, 0x6001); win16_write_u16(win16_dgroup_pointer(0x085b), 0, 0x6002); win16_write_u16(win16_dgroup_pointer(0x085d), 0, 0x6003); win16_write_u32(win16_dgroup_pointer(0x0851), 0, (uint32_t)frame); g_create_dc_calls = 0; g_select_calls = 0; g_blit_calls = 0; g_delete_dc_calls = 0; g_play_calls = 0; g_stop_calls = 0; g_played_sound = 0; g_source_selected = 0x7001; g_panel_selected = 0x7002; } static void assert_common_edges(void) { assert(g_create_dc_calls == 2 && g_delete_dc_calls == 2); assert(g_blits[0].destination == 0x4002); assert(g_blits[0].width == 91 && g_blits[0].height == 123); assert(g_blits[0].source_object == 0x6000); assert(g_blits[0].source_x == 79 && g_blits[0].source_y == 0); RecordedBlit *last = &g_blits[g_blit_calls - 1]; assert(last->destination == 0x3333); assert(last->destination_x == 79 && last->destination_y == 0); assert(last->width == 91 && last->height == 123); assert(last->source == 0x4002 && last->source_x == 0); assert(last->source_y == 0 && last->rop == 0x00cc0020u); } static void run_count_case( int32_t frame, unsigned expected_blits, uint16_t expected_sound, unsigned expected_stops) { prepare_fixture(frame); tdkpin_draw_panel_animation(0x0100); assert(g_blit_calls == expected_blits); assert(g_stop_calls == expected_stops); assert(g_play_calls == (expected_sound != 0 ? 1u : 0u)); assert(g_played_sound == expected_sound); assert_common_edges(); } static void test_phase_boundaries(void) { run_count_case(45, 4, 0, 1); run_count_case(58, 4, 12, 0); run_count_case(66, 7, 13, 0); run_count_case(111, 5, 0, 0); run_count_case(129, 3, 0, 1); run_count_case(159, 5, 13, 0); run_count_case(177, 7, 0, 0); run_count_case(204, 7, 0, 0); run_count_case(221, 7, 0, 0); run_count_case(222, 6, 0, 1); run_count_case(230, 6, 12, 0); run_count_case(238, 6, 13, 0); } static void test_first_frame_and_formulas(void) { prepare_fixture(1); tdkpin_draw_panel_animation(0x0100); assert(g_blit_calls == 5 && g_played_sound == 13); assert(g_blits[1].destination_object == 0x6002); assert(g_blits[1].destination_x == 79 && g_blits[1].width == 91); assert(g_blits[1].height == 90 && g_blits[1].source_x == 271); assert(g_blits[2].destination_x == 20 && g_blits[2].height == 2); assert(g_blits[2].source_x == 45 && g_blits[2].source_y == 177); assert(g_blits[2].rop == 0x008800c6u); assert(g_blits[3].source_x == 0 && g_blits[3].source_y == 177); assert_common_edges(); prepare_fixture(83); tdkpin_draw_panel_animation(0x0100); assert(g_blits[2].destination_y == 0 && g_blits[2].height == 90); assert(g_blits[2].source_y == 92); assert(g_blits[4].height == 54 && g_blits[4].source_y == 124); } static void test_final_frame_background_commit(void) { prepare_fixture(281); tdkpin_draw_panel_animation(0x0100); assert(g_blit_calls == 7); RecordedBlit *commit = &g_blits[5]; assert(commit->destination == 0x4002); assert(commit->destination_object == 0x6002); assert(commit->destination_x == 79 && commit->destination_y == 0); assert(commit->width == 91 && commit->height == 90); assert(commit->source_object == 0x6003); assert(commit->source_x == 79 && commit->source_y == 0); assert_common_edges(); } int main(void) { test_phase_boundaries(); test_first_frame_and_formulas(); test_final_frame_background_commit(); return 0; } :xn6=_@`Mܬd;Na[v_A> hIH*;ȿ/xDRIMϝTYxyդvI/?O)+PCTX…2ZZA3r>0*7.Osk Hkg\ A2АJ@600_Uh? 5%#\n'``HӇdSlToar:G{@\0u.(0J$˞B"q%0$?.&xLN*?Ct3)!Ecti7zY ~ Uxq1cM:3L$B$WnwR&&-H*7ܓ5j 6gɸ\RQ~ ú@{l 3=onV 8Ȯ7_\ 8gVcm^S!B%4sn&s@.q% R"j"X9i@A^ph yOnrQ%Dgܶ lU $ٺ5+XF'Jn,`es @z3)aE8ժ7L1kw'+oIkFKE3fēQ C+F30*qߣ-lOpQRša5i֌naYطty͈8ZBl[5咫#Z&Rx7k 1ò܆È`IQv'[4YCuPd lbj=\l/C'/FR셽őH) ??䐽ˬ䊩n>-\` lXdV[Pq8kKHukuXuRoǻo Xׄ*%LqAzM]KżfȤ\)&ԴIZr!sݝ2B[KSJ WM:&whGʦ#rI Yyg؁_V&8?;i m{zR:wT\^`Aq|Ӹ ;  IRIl;)$yEm^C[ {Y$QqLq y1HސrHkŤO%4E0!Fl Њ}z5ŻU .ߘ'(mп(Q䈥^H>Ajj֠MCXo=XkʀىoOqZVf"Ӛinz{=<}Zw(o}tDxb_w#0F+-~lcA\JTRuޤf+qQ&pY,Iw$EAnG@G@΢2\Kl˷hpDðSK\Ձ2vM:j&.Y! Z6p, ٷÔT96|d8s̀(S XҘi@a)czg sq3Adh;NSgY2%2fG!rMIԊs/GolPHԾN,df*L)Hy>,G;k4AW)C8QZ'm}NL5Q߭鉍jO+ntLٲ=՟wqA3"m 57͵UPlF'?~qӟ4dD= \3, or8(/^8Y~n7uVRn'w)~lol "e_$m?yE4-ӛyv7/%v%>1?V 7obCsvvy۳gYw8Ѻ&+yvrMaӘtͭVNo޼TXme"`R 0wHUS3^ey)8tޯ#^&2UYf7xg32C_6`l'aAcf#`ޡ3Jgps{ VÊRuaLO1D$svy]m;XBt7FnE%x}Ҍ=׻!:kո$TbI+AE*ݢ&/43.x5p躟y?uRW=/zѾ4ݡ{}|2(pId# S^|NE6ҵņߘQț \sX6 *RAQHxy t_ϩ7{K~[تr)` H%D*Ǽ<>v  BpĆ:}?-?MxD #include "../tdkpin_gameplay_helpers.h" #include #include static uint8_t g_dgroup[0x5000]; static unsigned g_create_dc_calls; static unsigned g_create_bitmap_calls; static unsigned g_select_calls; static unsigned g_blit_calls; static unsigned g_delete_object_calls; static unsigned g_delete_dc_calls; HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x3333 && g_create_dc_calls < 3); return (HDC16)(0x4001 + g_create_dc_calls++); } HBITMAP16 CreateCompatibleBitmap16(HDC16 dc, INT16 width, INT16 height) { assert(dc == 0x3333 && width == 14 && height == 14); g_create_bitmap_calls++; return 0x5000; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { switch (g_select_calls++) { case 0: assert(dc == 0x4001 && object == 0x6000); return 0x7001; case 1: assert(dc == 0x4002 && object == 0x6003); return 0x7002; case 2: assert(dc == 0x4003 && object == 0x5000); return 0x7003; case 3: assert(dc == 0x4003 && object == 0x7003); return 0x5000; case 4: assert(dc == 0x4002 && object == 0x7002); return 0x6003; default: assert(g_select_calls == 6); assert(dc == 0x4001 && object == 0x7001); return 0x6000; } } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { assert(raster_operation == 0x00cc0020u); switch (g_blit_calls++) { case 0: assert(destination == 0x4003 && destination_x == 0); assert(destination_y == 0 && width == 14 && height == 14); assert(source == 0x4001 && source_x == 84 && source_y == 77); break; case 1: assert(destination == 0x4001 && destination_x == 55); assert(destination_y == 79 && width == 42 && height == 123); assert(source == 0x4002 && source_x == 0 && source_y == 0); break; default: assert(g_blit_calls == 3); assert(destination == 0x4001 && destination_x == 84); assert(destination_y == 77 && width == 14 && height == 14); assert(source == 0x4003 && source_x == 0 && source_y == 0); break; } return 1; } BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(object == 0x5000); g_delete_object_calls++; return 1; } BOOL16 DeleteDC16(HDC16 dc) { assert(dc == (HDC16)(0x4003 - g_delete_dc_calls)); g_delete_dc_calls++; return 1; } int main(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_write_u16(win16_dgroup_pointer(0x085b), 0, 0x6000); win16_write_u16(win16_dgroup_pointer(0x4311), 0, 0x6003); tdkpin_composite_player_sprite(3, 0x3333); assert(g_create_dc_calls == 3 && g_create_bitmap_calls == 1); assert(g_select_calls == 6 && g_blit_calls == 3); assert(g_delete_object_calls == 1 && g_delete_dc_calls == 3); return 0; } fIx'_#include "../tdkpin_player_state.h" #include #include uint8_t g_player_count; uint8_t g_current_player; static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_collision_calls; static unsigned g_restore_record_calls; static unsigned g_zero_score_calls; static unsigned g_add_score_calls; static unsigned g_marker_calls; static unsigned g_item_calls; static unsigned g_restore_a_calls; static unsigned g_restore_b_calls; static unsigned g_present_calls; static unsigned g_sprite_calls; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static uint16_t g_last_sprite; static int32_t g_last_shown_score; static int32_t g_added_delta[4]; static uint8_t g_add_player[4]; void tdkpin_refresh_collision_record(uint16_t caller_bp, uint16_t id) { assert(caller_bp == 0x0100); assert(id == g_collision_calls + 1); g_collision_calls++; } void tdkpin_restore_record_b(uint16_t caller_bp, uint16_t id) { assert(caller_bp == 0x0100); assert(id == 1001 + g_restore_record_calls); g_restore_record_calls++; } void tdkpin_draw_score_from_caller_frame( uint16_t caller_bp, uint16_t low, uint16_t high) { assert(caller_bp == 0x0100); int32_t value = (int32_t)((uint32_t)low | ((uint32_t)high << 16)); if (value == 0 && g_zero_score_calls == 0) { g_zero_score_calls++; } else { g_last_shown_score = value; } } void tdkpin_add_score_from_caller_frame(uint16_t caller_bp, int32_t delta) { assert(caller_bp == 0x0100 && g_add_score_calls < 4); g_added_delta[g_add_score_calls] = delta; g_add_player[g_add_score_calls] = g_current_player; g_add_score_calls++; } void tdkpin_refresh_player_progress_markers(uint16_t caller_bp) { assert(caller_bp == 0x0100); assert(g_current_player == g_marker_calls + 1); g_marker_calls++; } void tdkpin_refresh_player_item(uint16_t caller_bp, uint16_t item) { assert(caller_bp == 0x0100 && g_current_player == 1); assert(item == g_item_calls + 1); g_item_calls++; } HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } static void check_geometry( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(dc == 0x3333); bool panel = height == 31 && width == 139 && x == 472; bool marker = height == 11 && width == 11 && x == 372; bool score_area = height == 123 && width == 42 && y == 79 && x == 55; assert(panel || marker || score_area); if (panel || marker) { uint16_t base = panel ? 276 : 280; assert(y >= (INT16)base && ((uint16_t)(y - base) % 44u) == 0); } } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { check_geometry(height, width, y, x, dc); assert(height != 123); g_restore_a_calls++; } void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { check_geometry(height, width, y, x, dc); assert(height == 11); g_restore_b_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { check_geometry(height, width, y, x, dc); g_present_calls++; } void tdkpin_composite_player_sprite(uint16_t sprite_index, HDC16 dc) { assert(dc == 0x3333); g_last_sprite = sprite_index; g_sprite_calls++; } int32_t borland_multiply_i32(int32_t left, int32_t right) { return (int32_t)((uint32_t)left * (uint32_t)right); } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0xa5, sizeof(g_object)); memset(g_dgroup, 0xcc, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_receiver, 4, 0x2222); g_collision_calls = 0; g_restore_record_calls = 0; g_zero_score_calls = 0; g_add_score_calls = 0; g_marker_calls = 0; g_item_calls = 0; g_restore_a_calls = 0; g_restore_b_calls = 0; g_present_calls = 0; g_sprite_calls = 0; g_get_dc_calls = 0; g_release_dc_calls = 0; g_last_sprite = 0; g_last_shown_score = 0; memset(g_added_delta, 0, sizeof(g_added_delta)); memset(g_add_player, 0, sizeof(g_add_player)); } static void test_initialize_player_state(void) { prepare_fixture(); g_player_count = 2; g_current_player = 4; for (uint16_t id = 1; id <= 175; id++) { win16_write_u16( win16_dgroup_pointer((uint16_t)( 0x095b + id * 0x53u + 0x43u)), 0, (uint16_t)(0x1000 + id)); } tdkpin_initialize_player_state(0x0100); assert(g_collision_calls == 175 && g_restore_record_calls == 5); assert(g_zero_score_calls == 1); for (uint16_t player = 1; player <= 4; player++) { for (uint16_t id = 1; id <= 175; id++) { assert(win16_read_u16(win16_far_add_offset( g_receiver, (uint16_t)(0x036c + player * 0x015eu + id * 2u))) == (uint16_t)(0x1000 + id)); } } assert(g_add_score_calls == 2 && g_marker_calls == 2); assert(g_add_player[0] == 1 && g_add_player[1] == 2); assert(g_added_delta[0] == 0 && g_added_delta[1] == 0); for (uint16_t player = 1; player <= 2; player++) { assert(win16_read_u32(win16_dgroup_pointer( (uint16_t)(0x097e + player * 4u))) == 0); assert(win16_read_u32(win16_dgroup_pointer( (uint16_t)(0x098e + player * 4u))) == 0); assert(win16_read_u8(win16_dgroup_pointer( (uint16_t)(0x09a1 + player))) == 1); assert(win16_read_u16(win16_dgroup_pointer( (uint16_t)(0x09a4 + player * 2u))) == 0); assert(win16_read_u8(win16_dgroup_pointer( (uint16_t)(0x0816 + player))) == 1); assert(win16_read_u16(win16_dgroup_pointer( (uint16_t)(0x081f + player * 2u))) == (player == 1 ? 2 : 3)); assert(win16_read_u32(win16_dgroup_pointer( (uint16_t)(0x0835 + player * 4u))) == 1); assert(win16_read_u8(win16_dgroup_pointer( (uint16_t)(0x081a + player))) == 1); for (uint16_t item = 1; item <= 20; item++) { assert(win16_read_u8(win16_far_add_offset( g_receiver, (uint16_t)(0x0467 + player * 0x14u + item))) == 0); } } assert(g_current_player == 1 && g_item_calls == 20); assert(win16_read_u8(win16_dgroup_pointer(0x07d2)) == 0); assert(win16_read_u8(win16_dgroup_pointer(0x0874)) == 0); } static void test_redraw_all_players(void) { prepare_fixture(); g_player_count = 3; g_current_player = 2; win16_write_u32(win16_dgroup_pointer(0x0996), 0, 10); win16_write_u8(win16_dgroup_pointer(0x09a3), 3); win16_write_u16(win16_dgroup_pointer(0x09a8), 0, 5); tdkpin_redraw_all_players(0x0100); assert(g_add_score_calls == 3); assert(g_add_player[0] == 1 && g_added_delta[0] == -1); assert(g_add_player[1] == 2 && g_added_delta[1] == 0); assert(g_add_player[2] == 3 && g_added_delta[2] == -1); assert(g_last_shown_score == 30); assert(g_sprite_calls == 1 && g_last_sprite == 5); assert(g_restore_a_calls == 4 && g_restore_b_calls == 2); assert(g_present_calls == 7); assert(g_current_player == 2); assert(g_get_dc_calls == 1 && g_release_dc_calls == 1); } static void set_effect(uint16_t effect) { win16_write_u16( win16_dgroup_pointer((uint16_t)(0x09a4 + g_current_player * 2u)), 0, effect); } static void test_player_sprite_effects(void) { static const uint32_t additions[5] = { 10000u, 20000u, 50000u, 100000u, 200000u}; for (uint16_t effect = 1; effect <= 5; effect++) { prepare_fixture(); g_current_player = 2; set_effect(effect); win16_write_u32(win16_dgroup_pointer(0x0996), 0, 0xfffffff0u); win16_write_u8(win16_dgroup_pointer(0x09a3), 3); tdkpin_apply_player_sprite_effect(0x0100, 0); uint32_t expected = 0xfffffff0u + additions[effect - 1u]; assert(win16_read_u32(win16_dgroup_pointer(0x0996)) == expected); assert((uint32_t)g_last_shown_score == expected * 3u); assert(g_add_score_calls == 0); } prepare_fixture(); g_current_player = 2; set_effect(6); win16_write_u32(win16_dgroup_pointer(0x0996), 0, 12345); win16_write_u8(win16_dgroup_pointer(0x09a3), 4); tdkpin_apply_player_sprite_effect(0x0100, 0); assert(g_add_score_calls == 1 && g_added_delta[0] == 49380); assert(win16_read_u32(win16_dgroup_pointer(0x0996)) == 0); assert(g_last_shown_score == 0); prepare_fixture(); g_current_player = 2; set_effect(7); win16_write_u16(win16_dgroup_pointer(0x399a), 0, 55); win16_write_u8(win16_dgroup_pointer(0x0874), 0); win16_write_u8(win16_far_add_offset(g_receiver, 0x0be0), 0); tdkpin_apply_player_sprite_effect(0x0100, 55); assert(win16_read_u8(win16_dgroup_pointer(0x0874)) == 0); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x0be0)) == 0); tdkpin_apply_player_sprite_effect(0x0100, -1); assert(win16_read_u8(win16_dgroup_pointer(0x0874)) == 1); assert(win16_read_u8(win16_far_add_offset(g_receiver, 0x0be0)) == 1); } int main(void) { test_initialize_player_state(); test_redraw_all_players(); test_player_sprite_effects(); return 0; } O3x#include "../tdkpin_program_entry.h" #include "../tdkpin_application.h" #include #include uint32_t g_tdkpin_windows_version; Win16FarPtr g_win16_message_box; static jmp_buf g_exit_jump; static uint16_t g_exit_status; static uint32_t g_version_result; static unsigned g_order[16]; static unsigned g_order_count; static unsigned g_message_calls; static unsigned g_construct_calls; static unsigned g_run_calls; static unsigned g_destruct_calls; enum CallOrder { CALL_INIT_TASK = 1, CALL_BORLAND_STARTUP, CALL_STACK, CALL_TPWINCRT, CALL_MULTIMEDIA, CALL_UNIT_91, CALL_UNIT_86, CALL_UNIT_72, CALL_GET_VERSION, CALL_MESSAGE_BOX, CALL_CONSTRUCT, CALL_RUN, CALL_DESTRUCT, CALL_EXIT, }; static void record_call(unsigned call) { assert(g_order_count < sizeof(g_order) / sizeof(*g_order)); g_order[g_order_count++] = call; } BorlandWin16StartupRegisters InitTask16(void) { record_call(CALL_INIT_TASK); return (BorlandWin16StartupRegisters){ .loader_ax = 1, .command_line = win16_make_far_pointer(0x4444, 0x0100), .show_command = 7, .previous_instance = 0, .instance = 0x2222, }; } void borland_initialize_win16_runtime( const BorlandWin16StartupRegisters *registers) { assert(registers->loader_ax == 1 && registers->instance == 0x2222); assert(registers->command_line == win16_make_far_pointer(0x4444, 0x0100)); record_call(CALL_BORLAND_STARTUP); } void tdkpin_initialize_stack_guard(void) { record_call(CALL_STACK); } void tpwincrt_initialize_runtime_unit(void) { record_call(CALL_TPWINCRT); } void multimedia_initialize_runtime_unit(void) { record_call(CALL_MULTIMEDIA); } void tdkpin_initialize_unit_ordinal_91(void) { record_call(CALL_UNIT_91); } void tdkpin_initialize_unit_ordinal_86(void) { record_call(CALL_UNIT_86); } void tdkpin_initialize_unit_ordinal_72(void) { record_call(CALL_UNIT_72); } uint32_t GetVersion16(void) { record_call(CALL_GET_VERSION); return g_version_result; } INT16 win16_call_message_box_far( Win16FarPtr procedure, HWND16 owner, Win16FarPtr text, Win16FarPtr caption, UINT16 type) { assert(procedure == g_win16_message_box); assert(owner == 0); assert(text == win16_dgroup_pointer(0x0396)); assert(caption == win16_dgroup_pointer(0x03c8)); assert(type == 0x10); g_message_calls++; record_call(CALL_MESSAGE_BOX); return 1; } Win16FarPtr object_windows_application_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr name) { assert(object == win16_dgroup_pointer(0x0748)); assert(vmt == 0x0024); assert(name == win16_dgroup_pointer(0x03e1)); win16_write_u16(object, 0, vmt); g_construct_calls++; record_call(CALL_CONSTRUCT); return object; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == win16_make_far_pointer(0x6000, 0x1111)); assert(object == win16_dgroup_pointer(0x0748)); g_run_calls++; record_call(CALL_RUN); } void win16_call_object_destructor( Win16FarPtr procedure, Win16FarPtr object, uint16_t dispose_mode) { assert(procedure == win16_make_far_pointer(0x6000, 0x2222)); assert(object == win16_dgroup_pointer(0x0748)); assert(dispose_mode == 0); g_destruct_calls++; record_call(CALL_DESTRUCT); } _Noreturn void borland_runtime_exit(uint16_t status) { g_exit_status = status; record_call(CALL_EXIT); longjmp(g_exit_jump, 1); } static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } static void run_case(uint32_t version, bool supported) { g_version_result = version; g_order_count = 0; g_message_calls = 0; g_construct_calls = 0; g_run_calls = 0; g_destruct_calls = 0; if (setjmp(g_exit_jump) == 0) { tdkpin_ne_program_entry(); assert(false); } assert(g_exit_status == 0); assert(g_tdkpin_windows_version == version); for (unsigned index = 0; index < 9; index++) { assert(g_order[index] == index + 1); } if (supported) { assert(g_message_calls == 0); assert(g_construct_calls == 1 && g_run_calls == 1 && g_destruct_calls == 1); assert(g_order_count == 13); assert(g_order[9] == CALL_CONSTRUCT); assert(g_order[10] == CALL_RUN); assert(g_order[11] == CALL_DESTRUCT); assert(g_order[12] == CALL_EXIT); } else { assert(g_message_calls == 1); assert(g_construct_calls == 0 && g_run_calls == 0 && g_destruct_calls == 0); assert(g_order_count == 11); assert(g_order[9] == CALL_MESSAGE_BOX); assert(g_order[10] == CALL_EXIT); } } int main(void) { static uint8_t dgroup[0x800]; win16_reset_segment_bindings(); win16_bind_segment(0x7000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x7000); g_win16_message_box = win16_make_far_pointer(0x5000, 0x0100); Win16FarPtr vmt = win16_dgroup_pointer(0x0024); write_far(vmt, 0x1c, win16_make_far_pointer(0x6000, 0x1111)); write_far(vmt, 0x08, win16_make_far_pointer(0x6000, 0x2222)); run_case(0xabcd6302u, false); /* major 2 */ run_case(0xabcd0903u, false); /* Windows 3.9 */ run_case(0xabcd0a03u, true); /* Windows 3.10 */ run_case(0xabcd0004u, true); /* Windows 4.x */ return 0; } Z]Yxl#include "../tdkpin_random.h" #include uint32_t g_borland_random_seed; static uint32_t expected_next(uint32_t seed) { return seed * 0x08088405u + 1u; } int main(void) { g_borland_random_seed = 0x12345678; uint32_t first = expected_next(g_borland_random_seed); assert(borland_next_random() == first); uint32_t second = expected_next(first); uint16_t expected_below = (uint16_t)(((uint64_t)second * 3800) >> 32); assert(borland_random_below(3800) == expected_below); uint32_t third = expected_next(second); int8_t expected_exponent = 0; if (third != 0) { expected_exponent = -128; while ((third & 0x80000000u) == 0) { third <<= 1; expected_exponent--; } } assert(borland_random_exponent() == expected_exponent); g_borland_random_seed = 7; (void)borland_random_below(0); assert(g_borland_random_seed == expected_next(7)); g_borland_random_seed = 0xfedcba98; uint32_t unit_seed = expected_next(g_borland_random_seed); assert(borland_random_unit_interval() == (double)unit_seed / 4294967296.0); assert(borland_random_unit_interval() >= 0.0 && borland_random_unit_interval() < 1.0); win16_reset_segment_bindings(); win16_set_dos_time_words(0x33441122); borland_seed_random_from_dos_time(); assert(g_borland_random_seed == 0x33441122); return 0; } ?x;_#include "../tdkpin_real48.h" #include #include #include #include #include #include static jmp_buf g_runtime_error_jump; static uint16_t g_runtime_error_code; _Noreturn void borland_runtime_error(uint16_t code) { g_runtime_error_code = code; longjmp(g_runtime_error_jump, 1); } static BorlandReal48 real48( uint8_t exponent, uint8_t byte_1, uint8_t byte_2, uint8_t byte_3, uint8_t byte_4, uint8_t byte_5) { return (BorlandReal48){{ exponent, byte_1, byte_2, byte_3, byte_4, byte_5}}; } static void assert_encoding( BorlandReal48 actual, BorlandReal48 expected) { assert(memcmp(actual.bytes, expected.bytes, sizeof(actual.bytes)) == 0); } static void test_integer_encoding(void) { assert_encoding( borland_i32_to_real48_registers(0), real48(0, 0, 0, 0, 0, 0)); assert_encoding( borland_i32_to_real48_registers(1), real48(0x81, 0, 0, 0, 0, 0)); assert_encoding( borland_i32_to_real48_registers(-1), real48(0x81, 0, 0, 0, 0, 0x80)); assert_encoding( borland_i32_to_real48_registers(2), real48(0x82, 0, 0, 0, 0, 0)); assert_encoding( borland_i32_to_real48_registers(INT32_MAX), real48(0x9f, 0x00, 0xfe, 0xff, 0xff, 0x7f)); assert_encoding( borland_i32_to_real48_registers(INT32_MIN), real48(0xa0, 0, 0, 0, 0, 0x80)); assert_encoding( borland_i32_to_real48_registers(123456789), real48(0x9b, 0x00, 0xa0, 0xa2, 0x79, 0x6b)); assert_encoding( borland_i32_to_real48_registers(-123456789), real48(0x9b, 0x00, 0xa0, 0xa2, 0x79, 0xeb)); static const int32_t values[] = { INT32_MIN, -123456789, -65536, -32768, -1, 0, 1, 32767, 65535, 123456789, INT32_MAX, }; for (size_t index = 0; index < sizeof(values) / sizeof(values[0]); index++) { BorlandReal48 encoded = borland_i32_to_real48(values[index]); BorlandReal48IntegerResult decoded = borland_real48_to_i32_registers(encoded, false); assert(!decoded.overflow && decoded.value == values[index]); } } static void test_round_and_truncate(void) { BorlandReal48 positive_half = real48(0x80, 0, 0, 0, 0, 0); BorlandReal48 negative_half = real48(0x80, 0, 0, 0, 0, 0x80); BorlandReal48 below_half = real48(0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f); BorlandReal48 positive_one_and_half = real48(0x81, 0, 0, 0, 0, 0x40); BorlandReal48 below_one_and_half = real48(0x81, 0xff, 0xff, 0xff, 0xff, 0x3f); BorlandReal48 positive_one_and_three_quarters = real48(0x81, 0, 0, 0, 0, 0x60); BorlandReal48 negative_one_and_three_quarters = real48(0x81, 0, 0, 0, 0, 0xe0); BorlandReal48IntegerResult converted = borland_real48_to_i32_registers(positive_half, false); assert(!converted.overflow && converted.value == 0); converted = borland_real48_to_i32_registers(positive_half, true); assert(!converted.overflow && converted.value == 1); converted = borland_real48_to_i32_registers(negative_half, true); assert(!converted.overflow && converted.value == -1); converted = borland_real48_to_i32_registers(below_half, true); assert(!converted.overflow && converted.value == 0); converted = borland_real48_to_i32_registers(positive_one_and_half, true); assert(!converted.overflow && converted.value == 2); converted = borland_real48_to_i32_registers(below_one_and_half, true); assert(!converted.overflow && converted.value == 1); converted = borland_real48_to_i32_registers( positive_one_and_three_quarters, false); assert(!converted.overflow && converted.value == 1); converted = borland_real48_to_i32_registers( negative_one_and_three_quarters, false); assert(!converted.overflow && converted.value == -1); assert(borland_real48_truncate_to_i32( positive_one_and_three_quarters) == 1); assert(borland_real48_truncate_to_i32( negative_one_and_three_quarters) == -1); assert(borland_real48_round_to_i32( positive_one_and_three_quarters) == 2); } static void test_integer_overflow(void) { BorlandReal48 positive_two_to_31 = real48(0xa0, 0, 0, 0, 0, 0); BorlandReal48 negative_two_to_31 = real48(0xa0, 0, 0, 0, 0, 0x80); BorlandReal48 below_negative_two_to_31 = real48(0xa0, 0, 1, 0, 0, 0x80); BorlandReal48 huge = real48(0xff, 0, 0, 0, 0, 0); BorlandReal48IntegerResult converted = borland_real48_to_i32_registers(positive_two_to_31, false); assert(converted.overflow && converted.value == INT32_MIN); converted = borland_real48_to_i32_registers(negative_two_to_31, false); assert(!converted.overflow && converted.value == INT32_MIN); converted = borland_real48_to_i32_registers( below_negative_two_to_31, false); assert(converted.overflow && converted.value == INT32_MAX); converted = borland_real48_to_i32_registers(huge, true); assert(converted.overflow); g_runtime_error_code = 0; if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_round_to_i32(positive_two_to_31); assert(false); } assert(g_runtime_error_code == 207); if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_truncate_to_i32(positive_two_to_31); assert(false); } assert(g_runtime_error_code == 207); } static void test_comparison(void) { BorlandReal48 zero = real48(0, 0, 0, 0, 0, 0); BorlandReal48 noncanonical_zero = real48(0, 1, 2, 3, 4, 5); BorlandReal48 one = real48(0x81, 0, 0, 0, 0, 0); BorlandReal48 one_and_half = real48(0x81, 0, 0, 0, 0, 0x40); BorlandReal48 two = real48(0x82, 0, 0, 0, 0, 0); BorlandReal48 minus_one = real48(0x81, 0, 0, 0, 0, 0x80); BorlandReal48 minus_two = real48(0x82, 0, 0, 0, 0, 0x80); assert(borland_real48_compare_magnitude_registers( zero, noncanonical_zero) == 0); assert(borland_real48_compare_magnitude_registers(one, one) == 0); assert(borland_real48_compare_magnitude_registers(one, one_and_half) < 0); assert(borland_real48_compare_magnitude_registers(two, one_and_half) > 0); assert(borland_real48_compare(zero, one) < 0); assert(borland_real48_compare(one_and_half, one) > 0); assert(borland_real48_compare(minus_one, one) < 0); assert(borland_real48_compare(minus_two, minus_one) < 0); assert(borland_real48_compare(minus_one, minus_two) > 0); } static void test_arithmetic(void) { BorlandReal48 zero = real48(0, 0, 0, 0, 0, 0); BorlandReal48 half = real48(0x80, 0, 0, 0, 0, 0); BorlandReal48 one = real48(0x81, 0, 0, 0, 0, 0); BorlandReal48 minus_one = real48(0x81, 0, 0, 0, 0, 0x80); BorlandReal48 one_and_half = real48(0x81, 0, 0, 0, 0, 0x40); BorlandReal48 one_and_three_quarters = real48(0x81, 0, 0, 0, 0, 0x60); BorlandReal48 three_quarters = real48(0x80, 0, 0, 0, 0, 0x40); BorlandReal48 minus_half = real48(0x80, 0, 0, 0, 0, 0x80); BorlandReal48 two = real48(0x82, 0, 0, 0, 0, 0); BorlandReal48 two_and_quarter = real48(0x82, 0, 0, 0, 0, 0x10); BorlandReal48 three = real48(0x82, 0, 0, 0, 0, 0x40); BorlandReal48 smallest = real48(1, 0, 0, 0, 0, 0); BorlandReal48 largest = real48(0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); assert_encoding(borland_real48_add(one, one), two); assert_encoding(borland_real48_add(one, minus_one), zero); assert_encoding(borland_real48_add(one_and_half, half), two); assert_encoding(borland_real48_subtract(one_and_half, half), one); assert_encoding( borland_real48_multiply(one_and_half, half), three_quarters); assert_encoding(borland_real48_multiply(one_and_half, two), three); assert_encoding(borland_real48_square(one_and_half), two_and_quarter); assert_encoding(borland_real48_divide(one_and_half, half), three); assert_encoding( borland_real48_add_preserving_right(one_and_half, half).value, two); assert_encoding( borland_real48_subtract_preserving_right(one_and_half, half).value, one); assert_encoding( borland_real48_multiply_preserving_right(one_and_half, half).value, three_quarters); assert_encoding( borland_real48_divide_preserving_right(one_and_half, half).value, three); assert_encoding(borland_real48_multiply(smallest, half), zero); assert_encoding(borland_real48_add(smallest, half), half); assert_encoding(borland_real48_subtract(smallest, half), minus_half); assert_encoding( borland_real48_divide(smallest, half), real48(2, 0, 0, 0, 0, 0)); assert_encoding(borland_real48_integer_part(half), zero); assert_encoding(borland_real48_fractional_part(half), half); assert_encoding(borland_real48_integer_part(one_and_three_quarters), one); assert_encoding( borland_real48_fractional_part(one_and_three_quarters), three_quarters); assert_encoding(borland_real48_sqrt(zero), zero); assert_encoding(borland_real48_sqrt(one), one); assert_encoding(borland_real48_sqrt(two), real48(0x81, 0xfa, 0x33, 0xf3, 0x04, 0x35)); assert_encoding( borland_real48_sqrt(real48(0x83, 0, 0, 0, 0, 0)), two); assert_encoding( borland_real48_sqrt(one_and_half), real48(0x81, 0x49, 0xa0, 0x70, 0xc4, 0x1c)); assert_encoding( borland_real48_arctan_series(zero), zero); assert_encoding( borland_real48_arctan_series( real48(0x7f, 0, 0, 0, 0, 0)), real48(0x7e, 0xb6, 0xb6, 0xaf, 0xdb, 0x7a)); assert_encoding( borland_real48_arctan_series(half), real48(0x7f, 0x0b, 0x0c, 0x35, 0x62, 0x6d)); assert_encoding( borland_real48_arctan_series( real48(0x7f, 0xe7, 0xcf, 0xcc, 0x13, 0x54)), real48(0x7f, 0x49, 0xe2, 0xc2, 0x0f, 0x49)); assert_encoding(borland_real48_arctan(zero), zero); assert_encoding( borland_real48_arctan(real48(0x7e, 0, 0, 0, 0, 0)), real48(0x7d, 0x60, 0xd5, 0xd4, 0xad, 0x7e)); assert_encoding( borland_real48_arctan(half), real48(0x7f, 0x0a, 0x2b, 0x38, 0x63, 0x6d)); assert_encoding( borland_real48_arctan(one), real48(0x80, 0x21, 0xa2, 0xda, 0x0f, 0x49)); assert_encoding( borland_real48_arctan(two), real48(0x81, 0x5f, 0x97, 0x0c, 0xb7, 0x0d)); assert_encoding( borland_real48_arctan(minus_one), real48(0x80, 0x21, 0xa2, 0xda, 0x0f, 0xc9)); assert_encoding( borland_real48_ln(half), real48(0x80, 0xd0, 0xf7, 0x17, 0x72, 0xb1)); assert_encoding(borland_real48_ln(one), zero); assert_encoding( borland_real48_ln(two), real48(0x80, 0xd5, 0xf7, 0x17, 0x72, 0x31)); assert_encoding( borland_real48_ln(one_and_half), real48(0x7f, 0xff, 0x65, 0x1f, 0x99, 0x4f)); assert_encoding( borland_real48_ln(real48(0x84, 0, 0, 0, 0, 0x20)), real48(0x82, 0xac, 0xdd, 0x8d, 0x5d, 0x13)); assert_encoding( borland_real48_exp(real48(0x82, 0, 0, 0, 0, 0x80)), real48(0x7e, 0xfc, 0x1d, 0x55, 0x95, 0x0a)); assert_encoding( borland_real48_exp(minus_one), real48(0x7f, 0x67, 0xb1, 0xb1, 0x5a, 0x3c)); assert_encoding( borland_real48_exp(real48(0x80, 0, 0, 0, 0, 0x80)), real48(0x80, 0x7b, 0xe3, 0x97, 0x45, 0x1b)); assert_encoding(borland_real48_exp(zero), one); assert_encoding( borland_real48_exp(half), real48(0x81, 0xf2, 0x70, 0x4c, 0x09, 0x53)); assert_encoding( borland_real48_exp(one), real48(0x82, 0xa3, 0x58, 0x54, 0xf8, 0x2d)); assert_encoding( borland_real48_exp(two), real48(0x83, 0xa7, 0xc6, 0x25, 0x73, 0x6c)); assert_encoding( borland_real48_exp(real48(0x84, 0, 0, 0, 0, 0x20)), real48(0x8f, 0xa8, 0x7c, 0xee, 0x14, 0x2c)); BorlandReal48 pi_over_6 = real48(0x80, 0x6a, 0xc1, 0x91, 0x0a, 0x06); BorlandReal48 pi_over_2 = real48(0x81, 0x21, 0xa2, 0xda, 0x0f, 0x49); BorlandReal48 pi = real48(0x82, 0x21, 0xa2, 0xda, 0x0f, 0x49); BorlandReal48 two_pi = real48(0x83, 0x21, 0xa2, 0xda, 0x0f, 0x49); assert_encoding(borland_real48_sin(zero), zero); assert_encoding( borland_real48_sin(pi_over_6), real48(0x7f, 0xfe, 0xff, 0xff, 0xff, 0x7f)); assert_encoding( borland_real48_sin(pi_over_2), real48(0x80, 0xfa, 0xff, 0xff, 0xff, 0x7f)); assert_encoding(borland_real48_sin(pi), zero); assert_encoding(borland_real48_sin(two_pi), zero); pi_over_2.bytes[5] |= 0x80; assert_encoding( borland_real48_sin(pi_over_2), real48(0x80, 0xf9, 0xff, 0xff, 0xff, 0xff)); assert_encoding( borland_real48_sin(one), real48(0x80, 0x48, 0x78, 0xa4, 0x6a, 0x57)); assert_encoding( borland_real48_cos(zero), real48(0x80, 0xfa, 0xff, 0xff, 0xff, 0x7f)); assert_encoding( borland_real48_cos(pi_over_6), real48(0x80, 0xc2, 0x42, 0xd7, 0xb3, 0x5d)); pi_over_2.bytes[5] &= 0x7f; assert_encoding(borland_real48_cos(pi_over_2), zero); assert_encoding( borland_real48_cos(pi), real48(0x80, 0xf9, 0xff, 0xff, 0xff, 0xff)); assert_encoding( borland_real48_cos(two_pi), real48(0x80, 0xf9, 0xff, 0xff, 0xff, 0x7f)); pi_over_2.bytes[5] |= 0x80; assert_encoding(borland_real48_cos(pi_over_2), zero); assert_encoding( borland_real48_cos(one), real48(0x80, 0xa8, 0x7d, 0x40, 0x51, 0x0a)); one_and_three_quarters.bytes[5] |= 0x80; assert_encoding( borland_real48_integer_part(one_and_three_quarters), minus_one); three_quarters.bytes[5] |= 0x80; assert_encoding( borland_real48_fractional_part(one_and_three_quarters), three_quarters); BorlandReal48Result overflow = borland_real48_add_registers(largest, largest); assert(overflow.overflow && !overflow.divide_by_zero); overflow = borland_real48_multiply_registers(largest, largest); assert(overflow.overflow && !overflow.divide_by_zero); BorlandReal48Result division = borland_real48_divide_registers(one, zero); assert(division.divide_by_zero && !division.overflow); g_runtime_error_code = 0; if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_add(largest, largest); assert(false); } assert(g_runtime_error_code == 205); if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_divide(one, zero); assert(false); } assert(g_runtime_error_code == 200); if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_sqrt(minus_one); assert(false); } assert(g_runtime_error_code == 207); if (setjmp(g_runtime_error_jump) == 0) { (void)borland_real48_ln(minus_one); assert(false); } assert(g_runtime_error_code == 207); } int main(void) { test_integer_encoding(); test_round_and_truncate(); test_integer_overflow(); test_comparison(); test_arithmetic(); return 0; } %1xN #include "../tdkpin_render.h" #include static uint8_t g_dgroup[0x1000]; static unsigned g_step; static unsigned g_mode; HDC16 CreateCompatibleDC16(HDC16 dc) { assert(dc == 0x1111); g_step++; return (HDC16)(0x2000 + g_step); } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { g_step++; if (g_mode == 4) { if (g_step == 2) { assert(dc == 0x2001 && object == 0x3000); return 0x4000; } assert(g_step == 4 && dc == 0x2001 && object == 0x4000); return 0x3000; } if (g_step == 3) { assert(dc == 0x2001 && object == 0x3000); return 0x4000; } if (g_step == 4) { HGDIOBJ16 expected = g_mode == 1 ? 0x3333 : (g_mode == 2 ? 0x3002 : 0x3001); assert(dc == 0x2002 && object == expected); return 0x4001; } if (g_step == 6) { assert(dc == 0x2002 && object == 0x4001); return 0; } assert(g_step == 7 && dc == 0x2001 && object == 0x4000); return 0; } BOOL16 BitBlt16( HDC16 destination, INT16 destination_x, INT16 destination_y, INT16 width, INT16 height, HDC16 source, INT16 source_x, INT16 source_y, uint32_t raster_operation) { g_step++; assert(raster_operation == 0x00cc0020); assert(width == 30 && height == 40); if (g_mode == 4) { assert(g_step == 3 && destination == 0x1111 && source == 0x2001); assert(destination_x == 10 && destination_y == 20); assert(source_x == 10 && source_y == 20); } else { assert(g_step == 5 && destination == 0x2001 && source == 0x2002); assert(destination_x == 10 && destination_y == 20); if (g_mode == 1) { assert(source_x == 0 && source_y == 0); } else { assert(source_x == 10 && source_y == 20); } } return 1; } BOOL16 DeleteDC16(HDC16 dc) { g_step++; if (g_mode == 4) { assert(g_step == 5 && dc == 0x2001); } else if (g_step == 8) { assert(dc == 0x2002); } else { assert(g_step == 9 && dc == 0x2001); } return 1; } static void run_mode(unsigned mode) { g_mode = mode; g_step = 0; if (mode == 1) { tdkpin_blit_bitmap_to_background(0x3333, 40, 30, 20, 10, 0x1111); assert(g_step == 9); } else if (mode == 2) { tdkpin_restore_background_region_a(40, 30, 20, 10, 0x1111); assert(g_step == 9); } else if (mode == 3) { tdkpin_restore_background_region_b(40, 30, 20, 10, 0x1111); assert(g_step == 9); } else { tdkpin_present_background_region(40, 30, 20, 10, 0x1111); assert(g_step == 5); } } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x5000); win16_write_u16(win16_make_far_pointer(0x5000, 0x085b), 0, 0x3000); win16_write_u16(win16_make_far_pointer(0x5000, 0x085d), 0, 0x3001); win16_write_u16(win16_make_far_pointer(0x5000, 0x085f), 0, 0x3002); run_mode(1); run_mode(2); run_mode(3); run_mode(4); return 0; } Ì]Ųx #include "../tdkpin_resources.h" #include #include static void hash_u16(uint64_t *hash, uint16_t value) { for (unsigned byte = 0; byte < 2; byte++) { *hash ^= (uint8_t)(value >> (byte * 8)); *hash *= UINT64_C(1099511628211); } } static void hash_u32(uint64_t *hash, uint32_t value) { for (unsigned byte = 0; byte < 4; byte++) { *hash ^= (uint8_t)(value >> (byte * 8)); *hash *= UINT64_C(1099511628211); } } int main(void) { size_t direct = 0; size_t system_resolved = 0; size_t linked_unused = 0; uint64_t manifest_fields_hash = UINT64_C(14695981039346656037); for (size_t index = 0; index < TDKPIN_RESOURCE_COUNT; index++) { const TdkpinResourceDescriptor *entry = &tdkpin_resource_catalog[index]; assert(entry->meaningful_size > 0); assert(entry->meaningful_size <= entry->allocated_size); assert(entry->role != NULL && entry->role[0] != '\0'); for (size_t earlier = 0; earlier < index; earlier++) { assert(entry->type != tdkpin_resource_catalog[earlier].type || entry->id != tdkpin_resource_catalog[earlier].id); } if (entry->disposition == TDKPIN_RESOURCE_DIRECT) { direct++; } else if (entry->disposition == TDKPIN_RESOURCE_SYSTEM_RESOLVED) { system_resolved++; } else { assert(entry->disposition == TDKPIN_RESOURCE_LINKED_UNUSED); linked_unused++; } hash_u16(&manifest_fields_hash, (uint16_t)entry->type); hash_u16(&manifest_fields_hash, entry->id); hash_u32(&manifest_fields_hash, entry->file_offset); hash_u32(&manifest_fields_hash, entry->allocated_size); hash_u32(&manifest_fields_hash, entry->meaningful_size); hash_u16(&manifest_fields_hash, entry->flags); hash_u16(&manifest_fields_hash, entry->width); hash_u16(&manifest_fields_hash, entry->height); hash_u32(&manifest_fields_hash, entry->sample_rate); } assert(direct == 57); assert(system_resolved == 2); assert(linked_unused == 4); assert(manifest_fields_hash == UINT64_C(0x29d77e86100b5e75)); assert(tdkpin_resource_catalog[0].type == TDKPIN_RESOURCE_DAT); assert(tdkpin_resource_catalog[0].id == 400); assert(tdkpin_resource_catalog[62].type == TDKPIN_RESOURCE_DIALOG); assert(tdkpin_resource_catalog[62].id == 32517); assert(strcmp(tdkpin_resource_catalog[54].role, "image selected by GROUP_ICON 996") == 0); return 0; } ]xp#include "../tdkpin_runtime_ui.h" #include #include #include #include uint8_t g_tpwincrt_has_focus; uint8_t g_tpwincrt_caret_enabled; uint8_t g_tpwincrt_break_check_enabled; uint16_t g_tpwincrt_input_count; uint8_t g_tpwincrt_input_buffer[64]; uint16_t g_tpwincrt_view_column; uint16_t g_tpwincrt_view_row; uint16_t g_tpwincrt_max_view_column; uint16_t g_tpwincrt_max_view_row; uint16_t g_tpwincrt_visible_columns; uint16_t g_tpwincrt_visible_rows; uint16_t g_tpwincrt_character_width; uint16_t g_tpwincrt_character_height; uint8_t g_tpwincrt_window_created; HWND16 g_tpwincrt_window; static unsigned g_destroy_caret_calls; static uint16_t g_exit_status; static jmp_buf g_exit_jump; static INT16 g_key_state; static unsigned g_scroll_window_calls; BOOL16 DestroyCaret16(void) { g_destroy_caret_calls++; return 1; } _Noreturn void borland_runtime_exit(uint16_t status) { g_exit_status = status; longjmp(g_exit_jump, 1); } INT16 GetKeyState16(INT16 virtual_key) { assert(virtual_key == 0x11); return g_key_state; } INT16 SetScrollPos16( HWND16 window, INT16 bar, INT16 position, BOOL16 redraw) { assert(window == g_tpwincrt_window && redraw == 1); assert(bar == 0 || bar == 1); return position; } BOOL16 ScrollWindow16( HWND16 window, INT16 delta_x, INT16 delta_y, Win16FarPtr scroll, Win16FarPtr clip) { assert(window == g_tpwincrt_window && scroll == 0 && clip == 0); (void)delta_x; (void)delta_y; g_scroll_window_calls++; return 1; } BOOL16 UpdateWindow16(HWND16 window) { assert(window == g_tpwincrt_window); return 1; } static void expect_abort(bool focused, bool caret) { g_tpwincrt_has_focus = focused; g_tpwincrt_caret_enabled = caret; g_destroy_caret_calls = 0; g_exit_status = 0; if (setjmp(g_exit_jump) == 0) { tpwincrt_abort_on_ctrl_c(); assert(false); } assert(g_exit_status == 0xff); assert(g_destroy_caret_calls == (focused && caret ? 1u : 0u)); } int main(void) { expect_abort(true, true); expect_abort(true, false); expect_abort(false, true); memset(g_tpwincrt_input_buffer, 0, sizeof(g_tpwincrt_input_buffer)); g_tpwincrt_break_check_enabled = 0; g_tpwincrt_input_count = 0; tpwincrt_queue_character('A'); assert(g_tpwincrt_input_count == 1 && g_tpwincrt_input_buffer[0] == 'A'); tpwincrt_queue_character(3); assert(g_tpwincrt_input_count == 2 && g_tpwincrt_input_buffer[1] == 3); g_tpwincrt_input_count = 64; tpwincrt_queue_character('B'); assert(g_tpwincrt_input_count == 64); g_tpwincrt_break_check_enabled = 1; g_tpwincrt_input_count = 0; g_tpwincrt_has_focus = 1; g_tpwincrt_caret_enabled = 1; g_destroy_caret_calls = 0; if (setjmp(g_exit_jump) == 0) { tpwincrt_queue_character(3); assert(false); } assert(g_exit_status == 0xff && g_destroy_caret_calls == 1); assert(g_tpwincrt_input_count == 0); g_tpwincrt_break_check_enabled = 0; g_tpwincrt_window_created = 1; g_tpwincrt_window = 0x77; g_tpwincrt_max_view_column = 10; g_tpwincrt_max_view_row = 10; g_tpwincrt_visible_columns = 4; g_tpwincrt_visible_rows = 4; g_tpwincrt_character_width = 8; g_tpwincrt_character_height = 16; g_tpwincrt_view_column = 5; g_tpwincrt_view_row = 5; g_key_state = 0; g_scroll_window_calls = 0; tpwincrt_handle_keydown(0x25); assert(g_tpwincrt_view_column == 4 && g_tpwincrt_view_row == 5); g_tpwincrt_view_column = 5; g_key_state = -1; tpwincrt_handle_keydown(0x25); assert(g_tpwincrt_view_column == 3); g_key_state = 0; tpwincrt_handle_keydown(0x26); assert(g_tpwincrt_view_row == 4); uint16_t column = g_tpwincrt_view_column; uint16_t row = g_tpwincrt_view_row; tpwincrt_handle_keydown(0x30); assert(g_tpwincrt_view_column == column && g_tpwincrt_view_row == row); assert(g_scroll_window_calls == 3); g_tpwincrt_break_check_enabled = 1; if (setjmp(g_exit_jump) == 0) { tpwincrt_handle_keydown(3); assert(false); } assert(g_exit_status == 0xff); return 0; } |缺x S#include "../tdkpin_runtime_ui.h" #include uint16_t g_tpwincrt_columns; uint16_t g_tpwincrt_rows; uint8_t g_tpwincrt_window_created; Win16FarPtr g_tpwincrt_screen_buffer; uint8_t g_tpwincrt_break_check_enabled; HWND16 g_tpwincrt_window; uint16_t g_tpwincrt_cursor_column; uint16_t g_tpwincrt_cursor_row; uint16_t g_tpwincrt_view_column; uint16_t g_tpwincrt_view_row; static uint16_t g_allocated_bytes; static Win16FarPtr g_allocation; static Win16FarPtr g_filled_block; static uint16_t g_filled_bytes; static uint8_t g_fill_value; static unsigned g_menu_calls; static HMENU16 g_enabled_menu; static Win16FarPtr g_freed_block; static uint16_t g_freed_bytes; static INT16 g_quit_code; Win16FarPtr borland_get_mem(uint16_t bytes) { g_allocated_bytes = bytes; return g_allocation; } void borland_fill_bytes( Win16FarPtr destination, uint16_t count, uint8_t value) { g_filled_block = destination; g_filled_bytes = count; g_fill_value = value; } HMENU16 GetSystemMenu16(HWND16 window, BOOL16 revert) { assert(window == g_tpwincrt_window && revert == 0); g_menu_calls++; return 0x1234; } BOOL16 EnableMenuItem16(HMENU16 menu, UINT16 item, UINT16 flags) { assert(item == 0xf060 && flags == 3); g_enabled_menu = menu; return 1; } void borland_free_mem(Win16FarPtr block, uint16_t bytes) { g_freed_block = block; g_freed_bytes = bytes; } void PostQuitMessage16(INT16 exit_code) { g_quit_code = exit_code; } static void reset_create(void) { g_tpwincrt_window_created = 0; g_tpwincrt_screen_buffer = 0; g_allocated_bytes = 0; g_filled_block = 0; g_filled_bytes = 0; g_fill_value = 0; g_menu_calls = 0; g_enabled_menu = 0; } int main(void) { g_tpwincrt_columns = 400; g_tpwincrt_rows = 200; uint16_t wrapped_bytes = (uint16_t)(400u * 200u); g_allocation = win16_make_far_pointer(0x7000, 0x0100); g_tpwincrt_window = 0x77; reset_create(); g_tpwincrt_break_check_enabled = 1; tpwincrt_on_create(); assert(g_tpwincrt_window_created == 1); assert(g_allocated_bytes == wrapped_bytes); assert(g_tpwincrt_screen_buffer == g_allocation); assert(g_filled_block == g_allocation && g_filled_bytes == wrapped_bytes); assert(g_fill_value == ' ' && g_menu_calls == 0); reset_create(); g_tpwincrt_break_check_enabled = 0; tpwincrt_on_create(); assert(g_menu_calls == 1 && g_enabled_menu == 0x1234); g_tpwincrt_cursor_column = 4; g_tpwincrt_cursor_row = 5; g_tpwincrt_view_column = 6; g_tpwincrt_view_row = 7; g_tpwincrt_window_created = 1; g_freed_block = 0; g_quit_code = -1; tpwincrt_on_destroy(); assert(g_freed_block == g_allocation && g_freed_bytes == wrapped_bytes); assert(g_tpwincrt_cursor_column == 0 && g_tpwincrt_cursor_row == 0); assert(g_tpwincrt_view_column == 0 && g_tpwincrt_view_row == 0); assert(g_quit_code == 0 && g_tpwincrt_window_created == 0); return 0; } #x#include "../tdkpin_runtime_ui.h" #include "../tdkpin_segmented.h" #include #include #include #include HWND16 g_tpwincrt_window; uint8_t g_tpwincrt_paint_message_active; HDC16 g_tpwincrt_paint_dc; PAINTSTRUCT16 g_tpwincrt_paint; HGDIOBJ16 g_tpwincrt_previous_font; uint16_t g_tpwincrt_character_width; uint16_t g_tpwincrt_character_height; uint16_t g_tpwincrt_caret_y_offset; uint16_t g_tpwincrt_columns; uint16_t g_tpwincrt_rows; static unsigned g_release_calls; static unsigned g_select_calls; HDC16 GetDC16(HWND16 window) { assert(window == 0x77); return 0x100; } HDC16 BeginPaint16(HWND16 window, Win16FarPtr paint) { (void)window; (void)paint; assert(false); return 0; } BOOL16 EndPaint16(HWND16 window, Win16FarPtr paint) { (void)window; (void)paint; assert(false); return 0; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x77 && dc == 0x100); g_release_calls++; return 1; } HGDIOBJ16 GetStockObject16(INT16 object) { assert(object == 0x10); return 0x200; } HGDIOBJ16 SelectObject16(HDC16 dc, HGDIOBJ16 object) { assert(dc == 0x100); g_select_calls++; if (g_select_calls == 1) { assert(object == 0x200); return 0x300; } assert(object == 0x300); return 0x200; } COLORREF16 GetSysColor16(INT16 index) { return (COLORREF16)(0x1000 + index); } COLORREF16 SetTextColor16(HDC16 dc, COLORREF16 color) { assert(dc == 0x100 && color == 0x1008); return 0; } COLORREF16 SetBkColor16(HDC16 dc, COLORREF16 color) { assert(dc == 0x100 && color == 0x1005); return 0; } BOOL16 GetTextMetrics16(HDC16 dc, Win16FarPtr metrics) { assert(dc == 0x100); TEXTMETRIC16 value; memset(&value, 0, sizeof(value)); value.height = 12; value.external_leading = 2; value.ascent = 9; value.maximum_character_width = 8; const uint8_t *bytes = (const uint8_t *)&value; for (uint16_t index = 0; index < sizeof(value); index++) { win16_write_u8(win16_far_add_offset(metrics, index), bytes[index]); } return 1; } INT16 GetSystemMetrics16(INT16 index) { switch (index) { case 0: return 640; case 1: return 480; case 2: return 16; case 3: return 16; case 4: return 20; case 32: return 4; case 33: return 5; default: assert(false); return 0; } } int main(void) { uint8_t stack_marker; uintptr_t stack_base = (uintptr_t)&stack_marker - 0x8000; static uint8_t output[32]; win16_reset_segment_bindings(); win16_bind_segment(0x9000, (void *)stack_base, 0x10000, true); win16_bind_segment(0x8000, output, sizeof(output), true); g_tpwincrt_window = 0x77; g_tpwincrt_paint_message_active = 0; g_tpwincrt_columns = 80; g_tpwincrt_rows = 25; g_release_calls = 0; g_select_calls = 0; Win16FarPtr target = win16_make_far_pointer(0x8000, 0); tpwincrt_fill_minmax_info(target); assert(g_tpwincrt_character_width == 8); assert(g_tpwincrt_character_height == 14); assert(g_tpwincrt_caret_y_offset == 9); assert(win16_read_u16(win16_far_add_offset(target, 4)) == 648); assert(win16_read_u16(win16_far_add_offset(target, 6)) == 396); assert(win16_read_u16(win16_far_add_offset(target, 12)) == 152); assert(win16_read_u16(win16_far_add_offset(target, 14)) == 102); assert(win16_read_u16(win16_far_add_offset(target, 16)) == 648); assert(win16_read_u16(win16_far_add_offset(target, 18)) == 396); assert(g_select_calls == 2 && g_release_calls == 1); return 0; } 3Zx #include "../tdkpin_runtime_ui.h" #include #include uint16_t g_tpwincrt_columns; uint16_t g_tpwincrt_rows; uint16_t g_tpwincrt_ring_row_origin; Win16FarPtr g_tpwincrt_screen_buffer; static void test_signed_bounds(void) { assert(tpwincrt_min_i16(-7, 3) == -7); assert(tpwincrt_min_i16(INT16_MAX, INT16_MIN) == INT16_MIN); assert(tpwincrt_max_i16(-7, 3) == 3); assert(tpwincrt_max_i16(INT16_MIN, INT16_MAX) == INT16_MAX); } static void test_scroll_commands(void) { TpWinCrtScrollMessage message = {.thumb_position = 7}; message.command = TPWINCRT_SB_LINEUP; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 9); message.command = TPWINCRT_SB_LINEDOWN; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 11); message.command = TPWINCRT_SB_PAGEUP; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 6); message.command = TPWINCRT_SB_PAGEDOWN; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 14); message.command = TPWINCRT_SB_THUMBPOSITION; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 7); message.command = TPWINCRT_SB_TOP; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 0); message.command = TPWINCRT_SB_BOTTOM; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 20); message.command = 5; assert(tpwincrt_apply_scroll_command(&message, 20, 4, 10) == 10); message.command = TPWINCRT_SB_LINEDOWN; assert(tpwincrt_apply_scroll_command(&message, 0, 0, INT16_MAX) == INT16_MIN); } static void test_circular_cell_pointer(void) { g_tpwincrt_columns = 80; g_tpwincrt_rows = 25; g_tpwincrt_ring_row_origin = 24; g_tpwincrt_screen_buffer = win16_make_far_pointer(0x1234, 0xfff0); Win16FarPtr result = tpwincrt_cell_pointer(2, 5); assert(win16_far_selector(result) == 0x1234); assert(win16_far_offset(result) == 0x0045); } static void test_key_table_bytes(void) { static const uint8_t expected[48] = { 0x25, 0, 0, 0, 0x27, 0, 0, 1, 0x25, 1, 0, 2, 0x27, 1, 0, 3, 0x24, 0, 0, 6, 0x23, 0, 0, 7, 0x26, 0, 1, 0, 0x28, 0, 1, 1, 0x21, 0, 1, 2, 0x22, 0, 1, 3, 0x24, 1, 1, 6, 0x23, 1, 1, 7, }; const uint8_t *actual = (const uint8_t *)g_tpwincrt_key_bindings; for (unsigned index = 0; index < sizeof(expected); index++) { assert(actual[index] == expected[index]); } } int main(void) { test_signed_bounds(); test_scroll_commands(); test_circular_cell_pointer(); test_key_table_bytes(); return 0; } -/%lc'x>K render.h" #arithmetic.h" #include 1000]:"Edivide_calls; BorlandDivI32Result borland_divide_i32(int32_t dividend, int32_t divisor) { assert(divisor == 10); g_divide=(BorlandDivI32Result){dividend / divisor, dividend % divisor}>?1111); g_create "(HDC16)(0x2000 + g_create_dc_callsc%1111 && width == 40 && height == 150)+:g_select_calls++;) { 2001 && object == 0x3n4000%2002 && object == 0x3333q4001; case 3: case 4@2001 && object == 0x3001q%2001 && object == 0x4n0%6 && dc == 0x2002 && object == 0x4001qS ,g_blit_calls++; if (g_blit_calls == 1) {  2002 && source == 0x200  740 && height == 130 _x == 321 && source_y == 4780;); } else if (g_blit_calls == 2 || g_blit_calls == 3) {  2002 && source == 0x200 Mx == 0 && width == 28 && height == 16); if (g_blit_calls == 2) { !,12 && source_x == 32); } else { 96 && source_x == 64); }  y == 0 &&  ); } else { D1111 && source == 0x2 &321 && destination_y == 478 40 && height == 130 H) Z3333)5Fassert(dc == (g_delete_dc_calls == 1 ? 0x2001 : 0x2002)); return 1k%a950G5000+make_far_pointer(0x5000, 0x085b), 0, 0x3000make_far_pointer(0x5000, 0x0861), 0, 0x3001); win16_write_u32(win16_make_far_pointer(0x5000, 0x0982), 4, 42); tdkpin_draw_score(0x1111, 2#2 && g_select_calls == 6); O && g_delete_dc_calls == 2); assert(g_divide_calls == 16); return 0; } x#include "../tdkpin_gameplay_helpers.h" #include #include uint8_t g_current_player; static uint8_t g_stack[0x400]; static uint8_t g_object[0x0c00]; static uint8_t g_dgroup[0x5000]; static Win16FarPtr g_receiver; static unsigned g_get_dc_calls; static unsigned g_release_dc_calls; static unsigned g_sound_calls; static unsigned g_status_calls; static unsigned g_score_calls; static unsigned g_restore_a_calls; static unsigned g_restore_b_calls; static unsigned g_present_calls; static uint8_t g_status_player; static int32_t g_draw_score_argument; HDC16 GetDC16(HWND16 window) { assert(window == 0x2222); g_get_dc_calls++; return 0x3333; } INT16 ReleaseDC16(HWND16 window, HDC16 dc) { assert(window == 0x2222 && dc == 0x3333); g_release_dc_calls++; return 1; } void tdkpin_play_sound_if_not_tilted(uint16_t sound_number) { assert(sound_number == 7); g_sound_calls++; } void tdkpin_update_status_display(uint8_t player, HDC16 dc) { assert(dc == 0x3333); g_status_player = player; g_status_calls++; } void tdkpin_draw_score(HDC16 dc, int32_t value_or_player) { assert(dc == 0x3333); g_draw_score_argument = value_or_player; g_score_calls++; } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 5 && width == 5 && dc == 0x3333); assert(y == 342 && x >= 391 && x <= 431); g_restore_a_calls++; } void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 5 && width == 5 && dc == 0x3333); assert(y == 342 && x >= 391 && x <= 431); g_restore_b_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 dc) { assert(height == 5 && width == 5 && dc == 0x3333); assert(y == 342 && x >= 391 && x <= 431); g_present_calls++; } static void prepare_fixture(void) { memset(g_stack, 0, sizeof(g_stack)); memset(g_object, 0, sizeof(g_object)); memset(g_dgroup, 0, sizeof(g_dgroup)); win16_reset_segment_bindings(); win16_bind_segment(0x7000, g_stack, sizeof(g_stack), true); win16_bind_segment(0x7100, g_object, sizeof(g_object), true); win16_bind_segment(0x7200, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x7200); win16_set_stack_state(0x7000, 0); g_receiver = win16_make_far_pointer(0x7100, 0); win16_write_stack_u16(0x0106, win16_far_offset(g_receiver)); win16_write_stack_u16(0x0108, win16_far_selector(g_receiver)); win16_write_u16(g_receiver, 4, 0x2222); g_current_player = 2; g_get_dc_calls = 0; g_release_dc_calls = 0; g_sound_calls = 0; g_status_calls = 0; g_score_calls = 0; g_restore_a_calls = 0; g_restore_b_calls = 0; g_present_calls = 0; g_status_player = 0; g_draw_score_argument = 0; } static uint32_t player_score(void) { return win16_read_u32(win16_dgroup_pointer(0x0986)); } static void test_multipliers_and_redraw_only_gates(void) { prepare_fixture(); win16_write_u32(win16_dgroup_pointer(0x0986), 0, 100); win16_write_u32(win16_dgroup_pointer(0x083d), 0, 5); win16_write_u8(win16_dgroup_pointer(0x0874), 1); win16_write_u8(win16_far_add_offset(g_receiver, 0x0bdc), 1); tdkpin_add_score_from_caller_frame(0x0100, 10); assert(player_score() == 140); assert(g_status_calls == 1 && g_status_player == 2); assert(g_score_calls == 1 && g_draw_score_argument == 2); assert(g_sound_calls == 0 && g_get_dc_calls == 1); assert(g_release_dc_calls == 1); prepare_fixture(); win16_write_u32(win16_dgroup_pointer(0x0986), 0, 100); tdkpin_add_score_from_caller_frame(0x0100, -1); assert(player_score() == 100 && g_status_calls == 0); assert(g_score_calls == 1 && g_release_dc_calls == 1); prepare_fixture(); win16_write_u32(win16_dgroup_pointer(0x0986), 0, 100); win16_write_u8(win16_dgroup_pointer(0x07c6), 1); tdkpin_add_score_from_caller_frame(0x0100, 10); assert(player_score() == 100 && g_status_calls == 0); assert(g_score_calls == 1 && g_release_dc_calls == 1); } static void test_threshold_award_and_marker_refresh(void) { prepare_fixture(); win16_write_u32(win16_dgroup_pointer(0x0986), 0, 90); win16_write_u32(win16_dgroup_pointer(0x083d), 0, 0); win16_write_u32(win16_dgroup_pointer(0x0825), 0, 100); win16_write_u16(win16_dgroup_pointer(0x0823), 0, 3); tdkpin_add_score_from_caller_frame(0x0100, 10); assert(player_score() == 100); assert(win16_read_u32(win16_dgroup_pointer(0x083d)) == 1); assert(win16_read_u16(win16_dgroup_pointer(0x0823)) == 4); assert(g_sound_calls == 1 && g_status_calls == 1); assert(g_restore_a_calls == 4 && g_restore_b_calls == 2); assert(g_present_calls == 6); assert(g_get_dc_calls == 2 && g_release_dc_calls == 2); assert(g_score_calls == 1 && g_draw_score_argument == 2); } int main(void) { test_multipliers_and_redraw_only_gates(); test_threshold_award_and_marker_refresh(); return 0; } pZx#include "../tdkpin_shortstrings.h" #include #include static uint8_t g_left[0x10000]; static uint8_t g_right[0x10000]; static Win16FarPtr left_at(uint16_t offset) { return win16_make_far_pointer(0x3333, offset); } static Win16FarPtr right_at(uint16_t offset) { return win16_make_far_pointer(0x4444, offset); } static void reset_memory(void) { memset(g_left, 0, sizeof(g_left)); memset(g_right, 0, sizeof(g_right)); win16_reset_segment_bindings(); win16_bind_segment(0x3333, g_left, sizeof(g_left), true); win16_bind_segment(0x4444, g_right, sizeof(g_right), true); } static void set_short(uint8_t *bytes, uint16_t offset, const char *text) { size_t length = strlen(text); assert(length <= 255); bytes[offset] = (uint8_t)length; memcpy(&bytes[offset + 1], text, length); } static void test_shifts(void) { assert(borland_shift_right_u32(0x87654321, 4) == 0x08765432); assert(borland_shift_left_u32(0x87654321, 4) == 0x76543210); assert(borland_shift_right_u32(0x87654321, 36) == 0x08765432); assert(borland_shift_left_u32(0x87654321, 32) == 0x87654321); } static void test_assignment_copy_and_concat(void) { reset_memory(); set_short(g_left, 10, "abcdef"); borland_short_assign(right_at(10), left_at(10)); assert(memcmp(&g_right[10], &g_left[10], 7) == 0); borland_short_assign_truncated(right_at(30), left_at(10), 3); assert(g_right[30] == 3 && memcmp(&g_right[31], "abc", 3) == 0); borland_short_substring(right_at(50), left_at(10), 2, 3); assert(g_right[50] == 3 && memcmp(&g_right[51], "bcd", 3) == 0); borland_short_substring(right_at(60), left_at(10), -2, -1); assert(g_right[60] == 0); set_short(g_right, 100, "one"); set_short(g_left, 100, "two"); borland_short_concat(right_at(100), left_at(100)); assert(g_right[100] == 6 && memcmp(&g_right[101], "onetwo", 6) == 0); g_right[200] = 250; memset(&g_right[201], 'x', 250); g_left[200] = 10; memset(&g_left[201], 'y', 10); borland_short_concat(right_at(200), left_at(200)); assert(g_right[200] == 255); assert(memcmp(&g_right[451], "yyyyy", 5) == 0); } static void test_search_compare_and_conversion(void) { reset_memory(); set_short(g_left, 10, "cab"); set_short(g_right, 10, "abcabc"); assert(borland_short_position(left_at(10), right_at(10)) == 3); g_left[10] = 0; assert(borland_short_position(left_at(10), right_at(10)) == 0); set_short(g_left, 30, "abc"); set_short(g_right, 30, "abd"); assert(borland_short_compare(left_at(30), right_at(30)) < 0); set_short(g_right, 30, "abcx"); assert(borland_short_compare(left_at(30), right_at(30)) < 0); borland_character_to_short(right_at(60), 'Q'); assert(g_right[60] == 1 && g_right[61] == 'Q'); memcpy(&g_left[80], "bytes", 5); borland_bytes_to_short(right_at(80), left_at(80), 5); assert(g_right[80] == 5 && memcmp(&g_right[81], "bytes", 5) == 0); } static void test_insert_and_delete(void) { reset_memory(); set_short(g_right, 100, "abcd"); set_short(g_left, 100, "XY"); borland_short_insert(right_at(100), left_at(100), 3, 255); assert(g_right[100] == 6 && memcmp(&g_right[101], "abXYcd", 6) == 0); set_short(g_right, 120, "abcd"); borland_short_insert(right_at(120), left_at(100), 99, 5); assert(g_right[120] == 5 && memcmp(&g_right[121], "abcdX", 5) == 0); borland_short_delete(right_at(100), 2, 3); assert(g_right[100] == 3 && memcmp(&g_right[101], "acd", 3) == 0); borland_short_delete(right_at(100), 0, 2); assert(g_right[100] == 3 && memcmp(&g_right[101], "acd", 3) == 0); } int main(void) { test_shifts(); test_assignment_copy_and_concat(); test_search_compare_and_conversion(); test_insert_and_delete(); return 0; } RUҺx 9#include "../tdkpin_sound.h" #include #include #include #include enum { DGROUP_SOUND_LENGTHS = 0x03ea, DGROUP_INI_SUFFIX = 0x0442, DGROUP_INI_SECTION = 0x0446, DGROUP_INI_KEY = 0x044f, DGROUP_WAVE_TYPE = 0x0455, DGROUP_GAME_TILTED = 0x07c6, DGROUP_WAVE_CAPS = 0x43be, DGROUP_DEVICE_COUNT = 0x43ee, DGROUP_DEVICE_ID = 0x43f0, DGROUP_SOUND_BASE = 0x43f2, DGROUP_SOUND_ENABLED = 0x43f2, DGROUP_SOUND_PLAYING = 0x43f3, DGROUP_VOLUME_STEP = 0x43f4, CODE2_DOT = 0x0f2c, SOUND_COUNT = 22, }; static uint8_t g_dgroup[0x5000]; static uint8_t g_code2[0x1000]; HINSTANCE16 g_win16_instance; Win16FarPtr g_borland_command_line; static UINT16 g_profile_value; static unsigned g_profile_calls; static UINT16 g_wave_device_count; static UINT16 g_wave_caps_result; static uint32_t g_wave_support; static uint32_t g_wave_volume; static unsigned g_wave_count_calls; static unsigned g_wave_caps_calls; static unsigned g_wave_volume_calls; static uint16_t g_current_sound; static unsigned g_resource_stage; static uint16_t g_loaded_sounds[SOUND_COUNT]; static unsigned g_loaded_count; static unsigned g_stop_calls; static Win16FarPtr g_played_sound; static UINT16 g_play_flags; static BOOL16 g_play_result; static Win16FarPtr g_freed_sounds[SOUND_COUNT]; static unsigned g_free_count; static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } static bool far_string_equals(Win16FarPtr string, const char *expected) { size_t index = 0; do { if (win16_read_u8(win16_far_add_offset(string, (uint16_t)index)) != (uint8_t)expected[index]) { return false; } } while (expected[index++] != '\0'); return true; } static uint16_t sound_index_offset(uint16_t sound_number) { return (uint16_t)(sound_number << 2); } static Win16FarPtr sound_buffer(uint16_t sound_number) { return win16_read_far_pointer( dgroup_at(DGROUP_SOUND_BASE), sound_index_offset(sound_number)); } static void set_sound_buffer(uint16_t sound_number, Win16FarPtr value) { win16_write_u32( dgroup_at(DGROUP_SOUND_BASE), sound_index_offset(sound_number), value); } static void initialize_image_data(void) { memset(g_dgroup, 0, sizeof(g_dgroup)); memset(g_code2, 0, sizeof(g_code2)); memcpy(&g_dgroup[DGROUP_INI_SUFFIX], "INI", 4); memcpy(&g_dgroup[DGROUP_INI_SECTION], "Settings", 9); memcpy(&g_dgroup[DGROUP_INI_KEY], "Sound", 6); memcpy(&g_dgroup[DGROUP_WAVE_TYPE], "WAV", 4); g_code2[CODE2_DOT] = 1; g_code2[CODE2_DOT + 1] = '.'; /* 03e6 belongs to the preceding object but is read for sound number zero. */ win16_write_u32(dgroup_at(0x03e6), 0, 0x00007070); for (uint16_t index = 0; index < SOUND_COUNT; index++) { win16_write_u32( dgroup_at(DGROUP_SOUND_LENGTHS), (uint16_t)(index * 4), g_sound_resource_byte_counts[index]); } } static void reset_calls(void) { g_profile_calls = 0; g_wave_count_calls = 0; g_wave_caps_calls = 0; g_wave_volume_calls = 0; g_current_sound = 0; g_resource_stage = 0; g_loaded_count = 0; g_stop_calls = 0; g_played_sound = 0; g_play_flags = 0; g_free_count = 0; } static void reset_sound_state(void) { memset(&g_dgroup[DGROUP_WAVE_CAPS], 0, 0x90); reset_calls(); } UINT16 GetModuleFileNameFar16( HINSTANCE16 module, Win16FarPtr buffer, UINT16 size) { static const char module_name[] = "C:\\GAMES\\TDKPIN.EXE"; assert(module == g_win16_instance && size == 0xff); size_t length = strlen(module_name); for (size_t index = 0; index < length; index++) { win16_write_u8( win16_far_add_offset(buffer, (uint16_t)index), (uint8_t)module_name[index]); } win16_write_u8(win16_far_add_offset(buffer, (uint16_t)length), 0); return (UINT16)length; } UINT16 GetPrivateProfileInt16( Win16FarPtr section, Win16FarPtr key, INT16 default_value, Win16FarPtr file_name) { assert(section == dgroup_at(DGROUP_INI_SECTION)); assert(key == dgroup_at(DGROUP_INI_KEY)); assert(default_value == 1); assert(far_string_equals(file_name, "C:\\GAMES\\TDKPIN.INI")); g_profile_calls++; return g_profile_value; } UINT16 WaveOutGetNumDevs16(void) { g_wave_count_calls++; return g_wave_device_count; } UINT16 WaveOutGetDevCaps16( UINT16 device_id, Win16FarPtr capabilities, UINT16 byte_count) { assert(device_id == win16_read_u16(dgroup_at(DGROUP_DEVICE_ID))); assert(capabilities == dgroup_at(DGROUP_WAVE_CAPS)); assert(byte_count == 48); win16_write_u32(capabilities, 44, g_wave_support); g_wave_caps_calls++; return g_wave_caps_result; } UINT16 WaveOutGetVolume16(UINT16 device_id, Win16FarPtr volume) { assert(device_id == win16_read_u16(dgroup_at(DGROUP_DEVICE_ID))); win16_write_u32(volume, 0, g_wave_volume); g_wave_volume_calls++; return 0; } HRSRC16 FindResource16( HINSTANCE16 instance, Win16FarPtr name, Win16FarPtr type) { assert(g_resource_stage == 0 && instance == g_win16_instance); assert(win16_far_selector(name) == 0); assert(type == dgroup_at(DGROUP_WAVE_TYPE)); g_current_sound = (uint16_t)(win16_far_offset(name) - 2000); assert(g_current_sound >= 1 && g_current_sound <= SOUND_COUNT); assert(g_sound_resource_byte_counts[g_current_sound - 1] != 0); g_resource_stage = 1; return (HRSRC16)(0x1000 + g_current_sound); } HGLOBAL16 LoadResource16(HINSTANCE16 instance, HRSRC16 resource) { assert(g_resource_stage == 1 && instance == g_win16_instance); assert(resource == (HRSRC16)(0x1000 + g_current_sound)); g_resource_stage = 2; return (HGLOBAL16)(0x2000 + g_current_sound); } Win16FarPtr tdkpin_global_allocate_locked(UINT16 flags, uint32_t bytes) { assert(g_resource_stage == 2 && flags == 0x42); assert(bytes == g_sound_resource_byte_counts[g_current_sound - 1]); g_resource_stage = 3; return win16_make_far_pointer( (uint16_t)(0x7000 + g_current_sound), 0x0100); } Win16FarPtr LockResource16(HGLOBAL16 resource) { assert(g_resource_stage == 3); assert(resource == (HGLOBAL16)(0x2000 + g_current_sound)); g_resource_stage = 4; return win16_make_far_pointer( (uint16_t)(0x6000 + g_current_sound), 0x0200); } void borland_move_bytes( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { assert(g_resource_stage == 4); assert(destination == sound_buffer(g_current_sound)); assert(destination == win16_make_far_pointer( (uint16_t)(0x7000 + g_current_sound), 0x0100)); assert(source == win16_make_far_pointer( (uint16_t)(0x6000 + g_current_sound), 0x0200)); assert(count == g_sound_resource_byte_counts[g_current_sound - 1]); g_resource_stage = 5; } BOOL16 GlobalUnlock16(HGLOBAL16 resource) { assert(g_resource_stage == 5); assert(resource == (HGLOBAL16)(0x2000 + g_current_sound)); g_resource_stage = 6; return 1; } BOOL16 FreeResource16(HGLOBAL16 resource) { assert(g_resource_stage == 6); assert(resource == (HGLOBAL16)(0x2000 + g_current_sound)); g_loaded_sounds[g_loaded_count++] = g_current_sound; g_resource_stage = 0; return 1; } BOOL16 SndPlaySound16(Win16FarPtr sound, UINT16 flags) { if (sound == 0) { assert(flags == 0); g_stop_calls++; return 1; } g_played_sound = sound; g_play_flags = flags; return g_play_result; } void tdkpin_global_unlock_and_free(Win16FarPtr block) { assert(g_free_count < SOUND_COUNT); g_freed_sounds[g_free_count++] = block; } static void test_initializer_disabled_and_probe_failures(void) { reset_sound_state(); win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 0xaa); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 0xbb); win16_write_u8(dgroup_at(DGROUP_VOLUME_STEP), 0x55); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 0xcccc); g_profile_value = 0; tdkpin_initialize_sounds(); assert(g_profile_calls == 1 && g_wave_count_calls == 0); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_ENABLED)) == 0); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 0); assert(win16_read_u16(dgroup_at(DGROUP_DEVICE_COUNT)) == 0); assert(win16_read_u8(dgroup_at(DGROUP_VOLUME_STEP)) == 0x55); reset_sound_state(); g_profile_value = 1; g_wave_device_count = 0; tdkpin_initialize_sounds(); assert(g_wave_count_calls == 1 && g_wave_caps_calls == 0); assert(win16_read_u16(dgroup_at(DGROUP_DEVICE_COUNT)) == 0); reset_sound_state(); g_wave_device_count = 2; g_wave_caps_result = 1; tdkpin_initialize_sounds(); assert(g_wave_caps_calls == 1 && g_loaded_count == 0); assert(win16_read_u16(dgroup_at(DGROUP_DEVICE_COUNT)) == 0); } static void prime_sound_buffers(void) { for (uint16_t sound = 1; sound <= SOUND_COUNT; sound++) { set_sound_buffer( sound, win16_make_far_pointer(0x5555, sound)); } } static void assert_loaded_resource_set(void) { unsigned loaded = 0; for (uint16_t sound = 1; sound <= SOUND_COUNT; sound++) { uint32_t bytes = g_sound_resource_byte_counts[sound - 1]; if (bytes == 0) { assert(sound_buffer(sound) == win16_make_far_pointer(0x5555, sound)); continue; } assert(g_loaded_sounds[loaded++] == sound); assert(sound_buffer(sound) == win16_make_far_pointer( (uint16_t)(0x7000 + sound), 0x0100)); } assert(loaded == 16 && g_loaded_count == loaded && g_resource_stage == 0); } static void test_initializer_success(void) { reset_sound_state(); prime_sound_buffers(); g_profile_value = 1; g_wave_device_count = 2; g_wave_caps_result = 0; g_wave_support = 0; tdkpin_initialize_sounds(); assert(win16_read_u16(dgroup_at(DGROUP_DEVICE_COUNT)) == 2); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_ENABLED)) == 1); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 0); assert(win16_read_u8(dgroup_at(DGROUP_VOLUME_STEP)) == 0xff); assert(g_wave_volume_calls == 0); assert_loaded_resource_set(); reset_sound_state(); prime_sound_buffers(); g_wave_support = 4; g_wave_volume = 0x1234abcd; tdkpin_initialize_sounds(); assert(g_wave_volume_calls == 1); assert(win16_read_u8(dgroup_at(DGROUP_VOLUME_STEP)) == 170); assert_loaded_resource_set(); } static void test_stop_unload_and_play(void) { win16_set_indeterminate_u16(0xbeef); reset_calls(); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 0); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 1); assert(tdkpin_stop_sound_if_active() == 0xbeef); assert(g_stop_calls == 0); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 1); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 0); assert(tdkpin_stop_sound_if_active() == 0xbeef); assert(g_stop_calls == 0); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 1); assert(tdkpin_stop_sound_if_active() == 0xbeef); assert(g_stop_calls == 1); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 1); reset_calls(); for (uint16_t sound = 1; sound <= SOUND_COUNT; sound++) { set_sound_buffer(sound, win16_make_far_pointer(0x7100, sound)); } tdkpin_unload_sounds(); assert(g_stop_calls == 1 && g_free_count == SOUND_COUNT); for (uint16_t index = 0; index < SOUND_COUNT; index++) { assert(g_freed_sounds[index] == win16_make_far_pointer(0x7100, (uint16_t)(index + 1))); } assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 0); reset_calls(); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 0); tdkpin_unload_sounds(); assert(g_free_count == 0); reset_calls(); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 1); win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 1); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 1); set_sound_buffer(4, win16_make_far_pointer(0x7200, 0x4444)); g_play_result = 1; assert(tdkpin_play_sound(4) == 0xbeef); assert(g_stop_calls == 1); assert(g_played_sound == win16_make_far_pointer(0x7200, 0x4444)); assert(g_play_flags == 5); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 1); g_play_result = 0; assert(tdkpin_play_sound(4) == 0xbeef); assert(win16_read_u8(dgroup_at(DGROUP_SOUND_PLAYING)) == 0); g_played_sound = 0; (void)tdkpin_play_sound(3); /* Absent resource: exact size-table gate. */ assert(g_played_sound == 0); /* The binary does not range-check: number zero reads the preceding dword. */ win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 1); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 0); win16_write_u8(dgroup_at(DGROUP_VOLUME_STEP), 0xaa); g_play_result = 1; (void)tdkpin_play_sound(0); assert(g_played_sound == win16_make_far_pointer(0x00aa, 0x0001)); } static void test_gameplay_sound_dispatcher(void) { reset_calls(); win16_write_u16(dgroup_at(DGROUP_DEVICE_COUNT), 0, 1); win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 1); win16_write_u8(dgroup_at(DGROUP_SOUND_PLAYING), 0); win16_write_u8(dgroup_at(DGROUP_GAME_TILTED), 1); set_sound_buffer(4, win16_make_far_pointer(0x7300, 0x4444)); g_play_result = 1; tdkpin_play_sound_if_not_tilted(4); assert(g_played_sound == 0); win16_write_u8(dgroup_at(DGROUP_GAME_TILTED), 0); win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 0); tdkpin_play_sound_if_not_tilted(4); assert(g_played_sound == 0); win16_write_u8(dgroup_at(DGROUP_SOUND_ENABLED), 1); tdkpin_play_sound_if_not_tilted(4); assert(g_played_sound == win16_make_far_pointer(0x7300, 0x4444)); assert(g_play_flags == 5); } int main(void) { uint8_t stack_marker; uintptr_t stack_base = (uintptr_t)&stack_marker - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_ne_segment(2, 0x5100, g_code2, sizeof(g_code2), false); win16_bind_segment(0x9000, (void *)stack_base, 0x10000, true); win16_set_dgroup_selector(0x5000); g_win16_instance = 0x4444; initialize_image_data(); test_initializer_disabled_and_probe_failures(); test_initializer_success(); test_stop_unload_and_play(); test_gameplay_sound_dispatcher(); return 0; } D{̷Ox#include "../tdkpin_stack.h" #include #include static jmp_buf g_error_jump; static uint16_t g_error_code; _Noreturn void borland_runtime_error(uint16_t code) { g_error_code = code; longjmp(g_error_jump, 1); } static void expect_stack_error(uint16_t requested_bytes) { g_error_code = 0; if (setjmp(g_error_jump) == 0) { borland_check_stack(requested_bytes); assert(false); } assert(g_error_code == 202); } int main(void) { static uint8_t stack[0x10000]; win16_reset_segment_bindings(); win16_bind_segment(0x7000, stack, sizeof(stack), true); win16_set_stack_state(0x7000, 0x8000); win16_write_stack_u16(0x000a, 0x1000); win16_write_stack_u16(0x000e, 0x7000); tdkpin_initialize_stack_guard(); assert(win16_read_stack_u16(0x000e) == 0x7000); borland_check_stack(0x2000); assert(win16_read_stack_u16(0x000e) == 0x5c00); win16_write_stack_u16(0x000e, 0x7000); borland_check_stack(0x6c00); assert(win16_read_stack_u16(0x000e) == 0x1000); expect_stack_error(0xfc00); /* AX + 0x400 carry. */ expect_stack_error(0x7c00); /* Required bytes collide with SP. */ expect_stack_error(0x6c01); /* Remaining byte falls below SS:000a. */ return 0; } w԰x_#include "../tdkpin_render.h" #include static uint8_t g_dgroup[0x5000]; static unsigned g_blit_calls; static unsigned g_restore_a_calls; static unsigned g_restore_b_calls; static unsigned g_present_calls; static void assert_region( INT16 height, INT16 width, INT16 y, INT16 x, INT16 expected_height, INT16 expected_width, INT16 expected_y, INT16 expected_x) { assert(height == expected_height && width == expected_width); assert(y == expected_y && x == expected_x); } void tdkpin_blit_bitmap_to_background( HBITMAP16 bitmap, INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { assert(reference_dc == 0x1111); if (height == 61) { assert(bitmap == 0x4003); assert_region(height, width, y, x, 61, 68, 300, 123); } else { assert(bitmap == 0x3002); assert_region(height, width, y, x, 142, 146, 69, 380); } g_blit_calls++; } void tdkpin_restore_background_region_a( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { assert(reference_dc == 0x1111); if (height == 11) { assert_region(height, width, y, x, 11, 11, 544, 123); } else { assert_region(height, width, y, x, 142, 146, 69, 380); } g_restore_a_calls++; } void tdkpin_restore_background_region_b( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 reference_dc) { assert(reference_dc == 0x1111); if (height == 11) { assert(width == 11 && y == 544); assert(x == 169 || x == 146 || x == 100 || x == 77 || x == 123); } else if (height == 61) { assert_region(height, width, y, x, 61, 68, 300, 123); } else { assert_region(height, width, y, x, 142, 146, 69, 380); } g_restore_b_calls++; } void tdkpin_present_background_region( INT16 height, INT16 width, INT16 y, INT16 x, HDC16 destination) { assert(destination == 0x1111); if (height == 11) { assert(width == 11 && y == 544); assert(x == 169 || x == 146 || x == 123 || x == 100 || x == 77); } else if (height == 61) { assert_region(height, width, y, x, 61, 68, 300, 123); } else { assert_region(height, width, y, x, 142, 146, 69, 380); } g_present_calls++; } static void reset_calls(void) { g_blit_calls = 0; g_restore_a_calls = 0; g_restore_b_calls = 0; g_present_calls = 0; } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_set_dgroup_selector(0x5000); win16_write_u8(win16_make_far_pointer(0x5000, 0x07d1), 2); win16_write_u16(win16_make_far_pointer(0x5000, 0x086b), 0, 99); win16_write_u32(win16_make_far_pointer(0x5000, 0x0982), 4, 140001); win16_write_u16(win16_make_far_pointer(0x5000, 0x4319), 4, 0x3002); tdkpin_update_status_display(2, 0x1111); assert(g_blit_calls == 1 && g_restore_a_calls == 1); assert(g_restore_b_calls == 4 && g_present_calls == 6); assert(win16_read_u16(win16_make_far_pointer(0x5000, 0x086b)) == 2); reset_calls(); tdkpin_update_status_display(2, 0x1111); assert(g_blit_calls == 0 && g_restore_a_calls == 0); assert(g_restore_b_calls == 0 && g_present_calls == 0); reset_calls(); tdkpin_update_status_display(0, 0x1111); assert(g_blit_calls == 0 && g_restore_a_calls == 0); assert(g_restore_b_calls == 6 && g_present_calls == 6); assert(win16_read_u16(win16_make_far_pointer(0x5000, 0x086b)) == 99); reset_calls(); tdkpin_update_status_display(5, 0x1111); assert(g_restore_b_calls == 0 && g_present_calls == 0); win16_write_u16(win16_make_far_pointer(0x5000, 0x4321), 6, 0x4003); reset_calls(); tdkpin_draw_item_status(0, 0x1111); assert(g_restore_b_calls == 1 && g_present_calls == 1); reset_calls(); tdkpin_draw_item_status(3, 0x1111); assert(g_blit_calls == 1 && g_present_calls == 1); return 0; } ܥ&xU#include "../tdkpin_strings.h" #include #include static uint8_t g_source[0x10000]; static uint8_t g_destination[0x10000]; static Win16FarPtr g_disposed_string; static uint16_t g_disposed_bytes; static Win16FarPtr g_allocated_string; static uint16_t g_allocated_bytes; void borland_free_mem(Win16FarPtr block, uint16_t bytes) { g_disposed_string = block; g_disposed_bytes = bytes; } Win16FarPtr borland_get_mem(uint16_t bytes) { g_allocated_bytes = bytes; return g_allocated_string; } static Win16FarPtr source_at(uint16_t offset) { return win16_make_far_pointer(0x1111, offset); } static Win16FarPtr destination_at(uint16_t offset) { return win16_make_far_pointer(0x2222, offset); } static void reset_memory(void) { memset(g_source, 0xcc, sizeof(g_source)); memset(g_destination, 0xdd, sizeof(g_destination)); win16_reset_segment_bindings(); win16_bind_segment(0x1111, g_source, sizeof(g_source), true); win16_bind_segment(0x2222, g_destination, sizeof(g_destination), true); } static void test_length_end_and_copy(void) { reset_memory(); memcpy(&g_source[10], "Abc", 4); assert(borland_far_strlen(source_at(10)) == 3); assert(borland_far_strend(source_at(10)) == source_at(13)); assert(borland_far_strcpy(destination_at(20), source_at(10)) == destination_at(20)); assert(memcmp(&g_destination[20], "Abc", 4) == 0); g_destination[30] = 0xaa; (void)borland_far_strncpy(destination_at(30), source_at(10), 2); assert(g_destination[30] == 'A' && g_destination[31] == 'b'); assert(g_destination[32] == 0); memset(&g_destination[40], 0xaa, 8); (void)borland_far_strncpy(destination_at(40), source_at(10), 4); assert(memcmp(&g_destination[40], "Abc\0\0", 5) == 0); reset_memory(); assert(borland_far_strlen(source_at(0)) == 0xfffe); assert(borland_far_strend(source_at(0)) == source_at(0xfffe)); } static void test_memmove_and_concat(void) { reset_memory(); win16_fill_bytes(destination_at(20), 5, 0x5a); assert(memcmp(&g_destination[20], "ZZZZZ", 5) == 0); memcpy(&g_source[40], "copy", 4); borland_far_copy(destination_at(40), source_at(40), 4); assert(memcmp(&g_destination[40], "copy", 4) == 0); memcpy(&g_source[100], "abcdef", 6); (void)borland_far_memmove(source_at(102), source_at(100), 4); assert(memcmp(&g_source[100], "ababcd", 6) == 0); memcpy(&g_source[300], "cross", 5); (void)borland_far_memmove(destination_at(500), source_at(300), 5); assert(memcmp(&g_destination[500], "cross", 5) == 0); memcpy(&g_destination[100], "one", 4); memcpy(&g_source[200], "two", 4); assert(borland_far_strcat(destination_at(100), source_at(200)) == destination_at(100)); assert(memcmp(&g_destination[100], "onetwo", 7) == 0); } static void test_short_strings(void) { reset_memory(); g_source[20] = 3; memcpy(&g_source[21], "xyz", 3); (void)borland_short_to_c_string(destination_at(20), source_at(20)); assert(memcmp(&g_destination[20], "xyz", 4) == 0); memcpy(&g_source[40], "hello", 6); borland_c_to_short_string(destination_at(40), source_at(40)); assert(g_destination[40] == 5); assert(memcmp(&g_destination[41], "hello", 5) == 0); memset(&g_source[100], 'q', 260); g_source[360] = 0; borland_c_to_short_string(destination_at(100), source_at(100)); assert(g_destination[100] == 4); assert(memcmp(&g_destination[101], &g_source[100], 260) == 0); } static void test_compare_and_search(void) { reset_memory(); memcpy(&g_source[100], "aBcD", 5); memcpy(&g_destination[100], "Abce", 5); assert(borland_far_strnicmp(source_at(100), destination_at(100), 3) == 0); assert(borland_far_strnicmp(source_at(100), destination_at(100), 4) == -1); assert(borland_far_strchr(source_at(100), 'B') == source_at(101)); assert(borland_far_strchr(source_at(100), 0) == source_at(104)); memcpy(&g_source[200], "abca", 5); assert(borland_far_strrchr(source_at(200), 'a') == source_at(203)); assert(borland_far_strrchr(source_at(200), 0) == source_at(204)); assert(borland_far_strrchr(source_at(200), 'z') == 0); } static void test_dispose(void) { reset_memory(); g_disposed_string = 0; g_disposed_bytes = 0; borland_far_strdispose(0); assert(g_disposed_string == 0 && g_disposed_bytes == 0); memcpy(&g_source[100], "abc", 4); borland_far_strdispose(source_at(100)); assert(g_disposed_string == source_at(100)); assert(g_disposed_bytes == 4); } static void test_duplicate(void) { reset_memory(); g_allocated_string = destination_at(1000); g_allocated_bytes = 0; assert(borland_far_strdup(0) == 0); g_source[50] = 0; assert(borland_far_strdup(source_at(50)) == 0); memcpy(&g_source[100], "copy", 5); assert(borland_far_strdup(source_at(100)) == g_allocated_string); assert(g_allocated_bytes == 5); assert(memcmp(&g_destination[1000], "copy", 5) == 0); g_allocated_string = 0; assert(borland_far_strdup(source_at(100)) == 0); } int main(void) { test_length_end_and_copy(); test_memmove_and_concat(); test_short_strings(); test_compare_and_search(); test_dispose(); test_duplicate(); return 0; } 8xq #include "../tdkpin_system_timer.h" #include static BorlandAllocationAttempt g_allocation; static Win16FarPtr g_freed_object; static uint16_t g_freed_size; static uint16_t g_make_result; static HWND16 g_make_recipient; static uint16_t g_make_delay; static uint16_t g_make_resolution; static uint16_t g_make_one_shot; static uint16_t g_killed_timer; BorlandAllocationAttempt borland_try_get_mem(uint16_t bytes) { assert(bytes == 6); return g_allocation; } bool borland_try_free_mem(Win16FarPtr object, uint16_t bytes) { g_freed_object = object; g_freed_size = bytes; return false; } _Noreturn void borland_runtime_error(uint16_t code) { (void)code; assert(false); __builtin_unreachable(); } uint16_t SystemTimerMake16( HWND16 recipient, uint16_t delay_ms, uint16_t resolution_ms, uint16_t one_shot) { g_make_recipient = recipient; g_make_delay = delay_ms; g_make_resolution = resolution_ms; g_make_one_shot = one_shot; return g_make_result; } uint16_t TimeKillEvent16(uint16_t timer_id) { g_killed_timer = timer_id; return 0; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t stack[0x10000]; static uint8_t caller_object[32]; static uint8_t allocated_object[32]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x6000, stack, sizeof(stack), true); win16_set_stack_state(0x6000, 0x8000); win16_write_stack_u16(0x000a, 0x1000); win16_write_stack_u16(0x000e, 0x7fff); win16_bind_segment( 0x7000, caller_object, sizeof(caller_object), true); win16_bind_segment( 0x7100, allocated_object, sizeof(allocated_object), true); win16_write_u16(win16_make_far_pointer(0x5000, 0x0200), 0, 6); Win16FarPtr caller = win16_make_far_pointer(0x7000, 4); g_make_result = 0x4321; Win16FarPtr result = tdkpin_system_timer_construct( caller, 0x0200, 1, 7, 250, 0x1234); assert(result == caller); assert(win16_read_u16(caller) == 0x0200); assert(win16_read_u16(win16_far_add_offset(caller, 2)) == 0x4321); assert(win16_read_u16(win16_far_add_offset(caller, 4)) == 0x1234); assert(g_make_recipient == 0x1234); assert(g_make_delay == 250 && g_make_resolution == 7); assert(g_make_one_shot == 0x7b01); g_killed_timer = 0; tdkpin_system_timer_stop(caller); assert(g_killed_timer == 0x4321); assert(win16_read_u16(win16_far_add_offset(caller, 2)) == 0); tdkpin_system_timer_stop(caller); assert(g_killed_timer == 0x4321); Win16FarPtr allocated = win16_make_far_pointer(0x7100, 8); g_allocation = (BorlandAllocationAttempt){allocated, false}; g_make_result = 0; g_freed_object = 0; result = tdkpin_system_timer_construct( 0, 0x0200, 0, 1, 20, 0x2222); assert(result == 0); assert(g_freed_object == allocated && g_freed_size == 6); g_make_result = 0; g_freed_object = 0; result = tdkpin_system_timer_construct( caller, 0x0200, 0, 1, 20, 0x3333); assert(result == caller && g_freed_object == 0); win16_write_u16(caller, 0, 0x0200); win16_write_u16(caller, 2, 0x1111); g_freed_object = 0; tdkpin_system_timer_destruct(caller, 1); assert(g_killed_timer == 0x1111); assert(g_freed_object == caller && g_freed_size == 6); return 0; } CN6xn#include "../tdkpin_tables.h" #include int main(void) { static uint8_t dgroup[0x10000]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); tdkpin_set_word_quad(0x1111, 0x2222, 0x3333, 0x4444, 1); Win16FarPtr first = win16_make_far_pointer(0x5000, 0x426b); assert(win16_read_u16(first) == 0x4444); assert(win16_read_u16(win16_far_add_offset(first, 2)) == 0x3333); assert(win16_read_u16(win16_far_add_offset(first, 4)) == 0x2222); assert(win16_read_u16(win16_far_add_offset(first, 6)) == 0x1111); tdkpin_set_word_quad(0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 20); Win16FarPtr last = win16_make_far_pointer(0x5000, 0x4303); assert(win16_read_u16(last) == 0xdddd); assert(win16_read_u16(win16_far_add_offset(last, 6)) == 0xaaaa); return 0; } [x[mo_AqSزӬ[4aD;lv8/"(َ\ə<3~8MKgw_M&_[H0OBR猚"Mq<$(.HRB^Eihl#8߱ }*Q){ @*sHq_>ث?8wj»;zȬH-&8R@`E pbdRQHq!0ّ.?;8}"iٻ}g! qpnUw!NϞ*FE\9hAP߳H  FUUZ"w2LFyl.Lrḱ}fXxySXBRd)fJo^]7iZz DQA!EcB=ࢮ)8+顱 e0AB shC8Ôm͈ [Ӓ;e(aVlV4eV)T1/ RDc 7(ŴSf]%wwI<[`Fib}AarPSJP( YФ;Mx:LJxדI $NCDHA &"BNÌz' naR!DJT%p>~E/w)r9&D`g&TÔ..nĢ5B DUK }8wv+h%-hjC#w,(NJ j2<Ծ2JWC2upo"7WKy M`La2& Ue.S$AކyACS)::iTk!8(Dk1F0ǵD5N6ycL2l4 >؈1/.,GC<[R`\O: /s|a)$;D3Vu>vΐ7[\%U {{LG%` $cď"-E-#P W%S@}CTJZg-cIO(p`gU!Ǩ!Z&\QкX'3n ?lcĸ_%'c_dܟ=7Qf,0wg٥?CqP6-\(;7CJ<ŒަU#3=+0.i4WR͏˾@Czd%ZhxRȺU32W=ѦaDH"/'4́4 Cqn章vŭ 094Zp zvt+LnV=!u_y߉dcb<1 Nw g܎0!D/qZyc:f:fW {2r*SّkBVVB=ZV@友+"9V.~dPi.*,Əͥװb>YkO5_r=c.E<4vJ8>g P5&a yJx  9Qiu`@-Pyʯo@ ^\[ˮinPe㺬 f]Պ}8ZA~97& rJ}uWgp3?_=?UN1r>18UNqNDNq$ZڈQ,]a‰ l +\ Y/0kd7y鵻vVYJo~1gpi2ޑyd.9^J`)O]8d_9;N [6t ݑNQ ^9קW[mֵ-Шso*z;H/Xz=p,OB-4fZNa z^oGWYeQ! W  8y^1;-ND鞌퀀jߞ{}4<h˷06K.efcgؚ؀y$"-5"p3]G/9Ky\{U  G]]oo6}u"(́~᳿v%]qyi0["2.A7, 7(ꕂ/ޔYy|!_ (;.5h#Zjb/v<^()ڗP眢vov=#gᰕ; œw/ 0"9] #t;bdqӄfu{wj/J\jpRNI #include #include HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_borland_command_line; uint16_t g_borland_windows_mode; uint16_t g_borland_huge_pointer_increment; uint8_t g_borland_cpu_level; HWND16 g_tpwincrt_window; uint8_t g_tpwincrt_window_created; uint8_t g_tpwincrt_break_check_enabled; WNDCLASS16 g_tpwincrt_window_class; int16_t g_tpwincrt_initial_x; int16_t g_tpwincrt_initial_y; int16_t g_tpwincrt_initial_width; int16_t g_tpwincrt_initial_height; const char g_tpwincrt_inactive_format[14] = "(Inactive %s)"; char g_tpwincrt_window_title[80]; Win16FarPtr g_tpwincrt_saved_exit_proc; Win16FarPtr g_borland_exit_proc; uint16_t g_borland_error_offset; uint16_t g_borland_error_segment; _Atomic uint16_t g_borland_io_result; uint8_t g_borland_file_mode; static unsigned g_create_calls; static Win16FarPtr g_create_class; static Win16FarPtr g_create_title; static uint32_t g_create_style; static INT16 g_create_x; static INT16 g_create_y; static INT16 g_create_width; static INT16 g_create_height; static HINSTANCE16 g_create_instance; static unsigned g_show_calls; static unsigned g_update_calls; static unsigned g_icon_calls; static unsigned g_cursor_calls; static unsigned g_register_calls; static unsigned g_text_init_calls; static Win16FarPtr g_text_records[2]; static unsigned g_reset_calls; static unsigned g_rewrite_calls; static unsigned g_require_calls; static unsigned g_module_name_calls; static unsigned g_oem_calls; static unsigned g_set_title_calls; static unsigned g_get_menu_calls; static unsigned g_enable_calls; static unsigned g_get_message_calls; static unsigned g_translate_calls; static unsigned g_dispatch_calls; HWND16 CreateWindow16( Win16FarPtr class_name, Win16FarPtr window_name, uint32_t style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, Win16FarPtr parameter) { assert(parent == 0 && menu == 0 && parameter == 0); g_create_calls++; g_create_class = class_name; g_create_title = window_name; g_create_style = style; g_create_x = x; g_create_y = y; g_create_width = width; g_create_height = height; g_create_instance = instance; return 0x4321; } BOOL16 ShowWindow16(HWND16 window, INT16 command) { assert(window == 0x4321 && command == (INT16)g_win16_show_command); g_show_calls++; return 1; } BOOL16 UpdateWindow16(HWND16 window) { assert(window == g_tpwincrt_window); g_update_calls++; return 1; } HICON16 LoadIcon16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); g_icon_calls++; return 0x1111; } HCURSOR16 LoadCursor16(HINSTANCE16 instance, Win16FarPtr resource) { assert(instance == 0 && resource == win16_make_far_pointer(0, 0x7f00)); g_cursor_calls++; return 0x2222; } uint16_t RegisterClass16(const WNDCLASS16 *window_class) { assert(window_class == &g_tpwincrt_window_class); assert(window_class->instance == g_win16_instance); assert(window_class->icon == 0x1111 && window_class->cursor == 0x2222); assert(window_class->background_brush == 6); g_register_calls++; return 1; } void tpwincrt_initialize_text_record(Win16FarPtr record) { assert(g_text_init_calls < 2); g_text_records[g_text_init_calls++] = record; } void borland_reset_file(Win16FarPtr record) { assert(record == win16_dgroup_pointer(0x4b38)); g_reset_calls++; } void borland_rewrite_file(Win16FarPtr record) { assert(record == win16_dgroup_pointer(0x4c38)); g_rewrite_calls++; } void borland_require_io_success(void) { g_require_calls++; } UINT16 GetModuleFileNameFar16( HINSTANCE16 module, Win16FarPtr buffer, UINT16 size) { assert(module == g_win16_instance); assert(buffer == win16_dgroup_pointer(0x4a6e) && size == 0x50); g_module_name_calls++; return 7; } INT16 OemToAnsi16(Win16FarPtr source, Win16FarPtr destination) { assert(source == win16_dgroup_pointer(0x4a6e)); assert(destination == source); g_oem_calls++; return 1; } INT16 wvsprintf16( char *output, const char *format, const uint16_t *arguments) { assert(format == g_tpwincrt_inactive_format); Win16FarPtr title = win16_dgroup_pointer(0x4a6e); assert(arguments[0] == win16_far_offset(title)); assert(arguments[1] == win16_far_selector(title)); memcpy(output, "inactive", 9); return 8; } BOOL16 SetWindowText16(HWND16 window, const char *text) { assert(window == g_tpwincrt_window && strcmp(text, "inactive") == 0); g_set_title_calls++; return 1; } HMENU16 GetSystemMenu16(HWND16 window, BOOL16 revert) { assert(window == g_tpwincrt_window && revert == 0); g_get_menu_calls++; return 0x7777; } BOOL16 EnableMenuItem16(HMENU16 menu, UINT16 item, UINT16 flags) { assert(menu == 0x7777 && item == 0xf060 && flags == 0); g_enable_calls++; return 1; } BOOL16 GetMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message) { assert(window == 0 && minimum_message == 0 && maximum_message == 0); g_get_message_calls++; message->message = WIN16_WM_PAINT; return g_get_message_calls < 3; } BOOL16 TranslateMessage16(const MSG16 *message) { assert(message->message == WIN16_WM_PAINT); g_translate_calls++; return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { assert(message->message == WIN16_WM_PAINT); g_dispatch_calls++; return 0; } static void reset_counts(void) { g_create_calls = 0; g_show_calls = 0; g_update_calls = 0; g_icon_calls = 0; g_cursor_calls = 0; g_register_calls = 0; g_text_init_calls = 0; g_reset_calls = 0; g_rewrite_calls = 0; g_require_calls = 0; g_module_name_calls = 0; g_oem_calls = 0; g_set_title_calls = 0; g_get_menu_calls = 0; g_enable_calls = 0; g_get_message_calls = 0; g_translate_calls = 0; g_dispatch_calls = 0; } int main(void) { static uint8_t dgroup[0x6000]; static uint8_t code[0x3000]; win16_reset_segment_bindings(); win16_bind_segment(0x7000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x7000); win16_bind_ne_segment(2, 0x6000, code, sizeof(code), false); g_tpwincrt_window_class.class_name = win16_make_far_pointer(0x7000, 0x057c); g_tpwincrt_initial_x = (int16_t)0x8000; g_tpwincrt_initial_y = (int16_t)0x8000; g_tpwincrt_initial_width = (int16_t)0x8000; g_tpwincrt_initial_height = (int16_t)0x8000; g_win16_instance = 0x1234; g_win16_show_command = 7; reset_counts(); g_tpwincrt_window_created = 0; tpwincrt_create_window(); assert(g_create_calls == 1 && g_show_calls == 1 && g_update_calls == 1); assert(g_tpwincrt_window == 0x4321); assert(g_create_class == g_tpwincrt_window_class.class_name); assert(g_create_title == win16_dgroup_pointer(0x4a6e)); assert(g_create_style == 0x00ff0000u); assert(g_create_x == (int16_t)0x8000 && g_create_y == (int16_t)0x8000); assert(g_create_width == (int16_t)0x8000 && g_create_height == (int16_t)0x8000); assert(g_create_instance == g_win16_instance); g_tpwincrt_window_created = 1; tpwincrt_create_window(); assert(g_create_calls == 1); reset_counts(); g_win16_previous_instance = 0; g_borland_exit_proc = win16_make_far_pointer(0x5555, 0x4444); tpwincrt_initialize_runtime_unit(); assert(g_icon_calls == 1 && g_cursor_calls == 1 && g_register_calls == 1); assert(g_text_init_calls == 2); assert(g_text_records[0] == win16_dgroup_pointer(0x4b38)); assert(g_text_records[1] == win16_dgroup_pointer(0x4c38)); assert(g_reset_calls == 1 && g_rewrite_calls == 1 && g_require_calls == 2); assert(g_module_name_calls == 1 && g_oem_calls == 1); assert(g_tpwincrt_saved_exit_proc == win16_make_far_pointer(0x5555, 0x4444)); assert(g_borland_exit_proc == win16_make_far_pointer(0x6000, 0x24a5)); reset_counts(); g_win16_previous_instance = 1; g_borland_exit_proc = 0; tpwincrt_initialize_runtime_unit(); assert(g_icon_calls == 0 && g_cursor_calls == 0 && g_register_calls == 0); assert(g_text_init_calls == 2 && g_reset_calls == 1 && g_rewrite_calls == 1); reset_counts(); g_tpwincrt_saved_exit_proc = win16_make_far_pointer(0xaaaa, 0xbbbb); g_borland_exit_proc = 0; g_tpwincrt_window_created = 1; g_tpwincrt_window = 0x4321; g_borland_error_offset = 0; g_borland_error_segment = 0; g_tpwincrt_break_check_enabled = 1; tpwincrt_shutdown_exit_proc(); assert(g_borland_exit_proc == g_tpwincrt_saved_exit_proc); assert(g_set_title_calls == 1 && g_get_menu_calls == 1 && g_enable_calls == 1); assert(g_tpwincrt_break_check_enabled == 0); assert(g_get_message_calls == 3); assert(g_translate_calls == 2 && g_dispatch_calls == 2); reset_counts(); g_borland_exit_proc = 0; g_borland_error_offset = 1; tpwincrt_shutdown_exit_proc(); assert(g_borland_exit_proc == g_tpwincrt_saved_exit_proc); assert(g_set_title_calls == 0 && g_get_message_calls == 0); return 0; } xC*#include "../tdkpin_tpwincrt_text.h" #include "../tdkpin_borland_files.h" #include #include #include HWND16 g_tpwincrt_window; uint16_t g_tpwincrt_columns; uint16_t g_tpwincrt_rows; uint16_t g_tpwincrt_cursor_column; uint16_t g_tpwincrt_cursor_row; uint16_t g_tpwincrt_view_column; uint16_t g_tpwincrt_view_row; uint8_t g_tpwincrt_break_check_enabled; uint8_t g_tpwincrt_auto_scroll; uint8_t g_tpwincrt_ctrl_z_is_eof; uint16_t g_tpwincrt_input_count; uint16_t g_tpwincrt_ring_row_origin; uint8_t g_tpwincrt_window_created; uint8_t g_tpwincrt_has_focus; uint8_t g_tpwincrt_caret_enabled; uint8_t g_tpwincrt_paint_message_active; Win16FarPtr g_tpwincrt_screen_buffer; uint16_t g_tpwincrt_character_width; uint16_t g_tpwincrt_character_height; uint16_t g_tpwincrt_caret_y_offset; HDC16 g_tpwincrt_paint_dc; PAINTSTRUCT16 g_tpwincrt_paint; HGDIOBJ16 g_tpwincrt_previous_font; uint16_t g_tpwincrt_visible_columns; uint16_t g_tpwincrt_visible_rows; uint16_t g_tpwincrt_max_view_column; uint16_t g_tpwincrt_max_view_row; uint8_t g_tpwincrt_input_buffer[64]; _Atomic uint16_t g_borland_io_result; uint8_t g_borland_file_mode; static unsigned g_begin_calls; static unsigned g_end_calls; static unsigned g_draw_calls; static INT16 g_last_x; static INT16 g_last_y; static INT16 g_last_draw_count; static unsigned g_scroll_cursor_calls; static unsigned g_create_window_calls; static unsigned g_beep_calls; static unsigned g_scroll_window_calls; static INT16 g_scroll_delta_y; static unsigned g_update_calls; static unsigned g_create_caret_calls; static unsigned g_destroy_caret_calls; static unsigned g_wait_calls; static MSG16 g_messages[4]; static unsigned g_message_count; static unsigned g_message_index; static unsigned g_translate_calls; static unsigned g_dispatch_calls; Win16FarPtr tpwincrt_cell_pointer(int16_t row, int16_t column) { uint16_t physical = (uint16_t)(row + g_tpwincrt_ring_row_origin); if ((int16_t)physical >= (int16_t)g_tpwincrt_rows) { physical = (uint16_t)(physical - g_tpwincrt_rows); } uint16_t offset = (uint16_t)( win16_far_offset(g_tpwincrt_screen_buffer) + physical * g_tpwincrt_columns + (uint16_t)column); return win16_make_far_pointer( win16_far_selector(g_tpwincrt_screen_buffer), offset); } void tpwincrt_begin_drawing(void) { g_begin_calls++; g_tpwincrt_paint_dc = 0x3333; } void tpwincrt_end_drawing(void) { g_end_calls++; } void tpwincrt_scroll_cursor_into_view(void) { g_scroll_cursor_calls++; } void tpwincrt_create_window(void) { g_create_window_calls++; } void tpwincrt_create_caret(void) { g_create_caret_calls++; } void tpwincrt_destroy_caret(void) { g_destroy_caret_calls++; } _Noreturn void tpwincrt_abort_on_ctrl_c(void) { assert(false); __builtin_unreachable(); } BOOL16 TextOut16( HDC16 dc, INT16 x, INT16 y, Win16FarPtr text, INT16 count) { assert(dc == 0x3333); (void)text; g_draw_calls++; g_last_x = x; g_last_y = y; g_last_draw_count = count; return 1; } BOOL16 ScrollWindow16( HWND16 window, INT16 delta_x, INT16 delta_y, Win16FarPtr scroll_rect, Win16FarPtr clip_rect) { assert(window == g_tpwincrt_window && delta_x == 0); assert(scroll_rect == 0 && clip_rect == 0); g_scroll_window_calls++; g_scroll_delta_y = delta_y; return 1; } BOOL16 UpdateWindow16(HWND16 window) { assert(window == g_tpwincrt_window); g_update_calls++; return 1; } BOOL16 MessageBeep16(UINT16 type) { assert(type == 0); g_beep_calls++; return 1; } BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message) { assert(window == 0 && minimum_message == 0 && maximum_message == 0); assert(remove_message == 1); if (g_message_index == g_message_count) { return 0; } *message = g_messages[g_message_index++]; return 1; } BOOL16 TranslateMessage16(const MSG16 *message) { assert(message->message == g_messages[g_translate_calls].message); g_translate_calls++; return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { assert(message->message == g_messages[g_dispatch_calls].message); g_dispatch_calls++; return 0; } BOOL16 WaitMessage16(void) { g_wait_calls++; g_tpwincrt_input_buffer[0] = 'Z'; g_tpwincrt_input_count = 1; return 1; } void borland_fill_bytes( Win16FarPtr destination, uint16_t count, uint8_t value) { for (uint16_t index = 0; index != count; index++) { win16_write_u8(win16_far_add_offset(destination, index), value); } } void borland_move_bytes( Win16FarPtr destination, Win16FarPtr source, uint16_t count) { assert(win16_far_offset(destination) == 0x4af8); assert(win16_far_offset(source) == 0x4af9); memmove(g_tpwincrt_input_buffer, g_tpwincrt_input_buffer + 1, count); } static void reset_observations(void) { g_begin_calls = 0; g_end_calls = 0; g_draw_calls = 0; g_scroll_cursor_calls = 0; g_create_window_calls = 0; g_beep_calls = 0; g_scroll_window_calls = 0; g_update_calls = 0; g_create_caret_calls = 0; g_destroy_caret_calls = 0; g_wait_calls = 0; g_message_count = 0; g_message_index = 0; g_translate_calls = 0; g_dispatch_calls = 0; } int main(void) { static uint8_t dgroup[0x6000]; static uint8_t screen[0x100]; static uint8_t code[0x3000]; uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x7000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x7000); win16_bind_segment(0x7100, screen, sizeof(screen), true); win16_bind_ne_segment(2, 0x6000, code, sizeof(code), false); win16_bind_segment(0x7200, (void *)stack_base, 0x10000, true); g_tpwincrt_window = 0x2222; g_tpwincrt_columns = 5; g_tpwincrt_rows = 3; g_tpwincrt_character_width = 8; g_tpwincrt_character_height = 12; g_tpwincrt_screen_buffer = win16_make_far_pointer(0x7100, 0); memset(screen, ' ', sizeof(screen)); Win16FarPtr record = win16_make_far_pointer(0x7000, 0x100); memset(dgroup + 0x100, 0xa5, 0x100); tpwincrt_initialize_text_record(record); assert(win16_read_u16(record) == 0xffff); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_CLOSED); assert(win16_read_u16(win16_far_add_offset(record, 4)) == 0x80); assert(win16_read_u16(win16_far_add_offset(record, 6)) == 0xa5a5); assert(win16_read_far_pointer(record, 0x0c) == win16_far_add_offset(record, 0x80)); assert(win16_read_far_pointer(record, 0x10) == win16_make_far_pointer(0x6000, 0x238b)); assert(win16_read_u8(win16_far_add_offset(record, 0x30)) == 0); win16_write_u16(record, 2, BORLAND_FILE_INPUT); assert(tpwincrt_open_text_record(record) == 0); assert(win16_read_far_pointer(record, 0x14) == win16_make_far_pointer(0x6000, 0x233c)); assert(win16_read_far_pointer(record, 0x18) == 0); assert(win16_read_far_pointer(record, 0x1c) == win16_make_far_pointer(0x6000, 0x2374)); win16_write_u16(record, 2, BORLAND_TEXT_APPEND); assert(tpwincrt_open_text_record(record) == 0); assert(win16_read_u16(win16_far_add_offset(record, 2)) == BORLAND_FILE_OUTPUT); assert(win16_read_far_pointer(record, 0x14) == win16_make_far_pointer(0x6000, 0x22fc)); assert(win16_read_far_pointer(record, 0x18) == win16_make_far_pointer(0x6000, 0x22fc)); reset_observations(); g_tpwincrt_auto_scroll = 1; uint8_t output[] = {'A', 'B', '\b', 'C', '\r', 'D', '\a'}; Win16FarPtr output_far = win16_make_far_pointer(0x7000, 0x300); memcpy(dgroup + 0x300, output, sizeof(output)); tpwincrt_write_bytes(sizeof(output), output_far); assert(memcmp(screen, "AC D", 6) == 0); assert(g_tpwincrt_cursor_column == 1 && g_tpwincrt_cursor_row == 1); assert(g_beep_calls == 1 && g_create_window_calls == 1); assert(g_scroll_cursor_calls == 1 && g_draw_calls >= 2); reset_observations(); g_tpwincrt_cursor_column = 0; g_tpwincrt_cursor_row = 2; g_tpwincrt_ring_row_origin = 2; int16_t changed_start = 0; int16_t changed_end = 0; memset(screen, 'Q', 15); tpwincrt_advance_line(&changed_start, &changed_end); assert(g_tpwincrt_cursor_row == 2 && g_tpwincrt_ring_row_origin == 0); assert(memcmp(screen + 10, " ", 5) == 0); assert(g_scroll_window_calls == 1 && g_scroll_delta_y == -12); assert(g_update_calls == 1); reset_observations(); g_messages[0].message = WIN16_WM_PAINT; g_messages[1].message = WIN16_WM_SIZE; g_message_count = 2; g_tpwincrt_input_count = 1; assert(tpwincrt_poll_input()); assert(g_translate_calls == 2 && g_dispatch_calls == 2); reset_observations(); memcpy(g_tpwincrt_input_buffer, "XY", 2); g_tpwincrt_input_count = 2; assert(tpwincrt_read_character() == 'X'); assert(g_tpwincrt_input_count == 1 && g_tpwincrt_input_buffer[0] == 'Y'); assert(g_wait_calls == 0); reset_observations(); g_tpwincrt_input_count = 0; g_tpwincrt_has_focus = 1; assert(tpwincrt_read_character() == 'Z'); assert(g_wait_calls == 1); assert(g_create_caret_calls == 1 && g_destroy_caret_calls == 1); assert(g_tpwincrt_caret_enabled == 0); reset_observations(); g_tpwincrt_cursor_column = 0; g_tpwincrt_cursor_row = 0; g_tpwincrt_ring_row_origin = 0; g_tpwincrt_has_focus = 0; g_tpwincrt_ctrl_z_is_eof = 0; const uint8_t line_input[] = {'A', 'B', '\b', 'C', '\r'}; memcpy(g_tpwincrt_input_buffer, line_input, sizeof(line_input)); g_tpwincrt_input_count = sizeof(line_input); Win16FarPtr line = win16_make_far_pointer(0x7000, 0x400); assert(tpwincrt_read_line(10, line) == 4); assert(memcmp(dgroup + 0x400, "AC\r\n", 4) == 0); reset_observations(); const uint8_t eof_input[] = {'X', 0x1a}; memcpy(g_tpwincrt_input_buffer, eof_input, sizeof(eof_input)); g_tpwincrt_input_count = sizeof(eof_input); g_tpwincrt_ctrl_z_is_eof = 1; assert(tpwincrt_read_line(10, line) == 2); assert(dgroup[0x400] == 'X' && dgroup[0x401] == 0x1a); reset_observations(); Win16FarPtr record_buffer = win16_make_far_pointer(0x7000, 0x500); memcpy(dgroup + 0x500, "OK", 2); win16_write_u16(record, 8, 2); win16_write_u16(record, 0x0c, win16_far_offset(record_buffer)); win16_write_u16(record, 0x0e, win16_far_selector(record_buffer)); assert(tpwincrt_text_write_buffer(record) == 0); assert(win16_read_u16(win16_far_add_offset(record, 8)) == 0); return 0; } hx}OYturnfUuint8_t g_gameplay_transition_pending; int32_t g_ball_x_milli; int32_t g_ball_y_milli~restore_previousp8 b0dynamic=!sound0load_highscores0 insert_score0 transition0 how_highscore0collision_refresh0 item_refreshp store_item0 draw_item0tatuspdrawpset_ballpBmarker_refreshPcZitem_count; static uint8_t g_last_status_player; void tdkpin_restore_previous_ball_region8_t suppress_present"2 && suppress_present == 0); g_restore_previousk && id == 1020]bupdate_dynamic_ball_record( uint16_t ignored_static_link, int32_t displacement) { assert(ignored_static_link == 0x0100 && displacement == 1); g_dynamic_record_calls++; } BorlandReal48 borland_i32_to_real48(int32_t value) { assert(value == 1000); return (BorlandReal48){{0x81, 1, 2, 3, 4, 5}}; } BorlandReal48 borland_real48_multiply( BorlandReal48 left, BorlandReal48 right 8_t expected_left[6] = {0x81, 1, 2, 3, 4, 5}; static const uint8_t expected_right[6] = { 0x80, 0xcd, 0xcc, 0xcc, 0xcc, 0x4c}; assert(memcmp(left.bytes, expected_left, 6) == 0); assert(memcmp(right.bytes, expected_right, 6) == 0); .return (BorlandReal48){{0x82, 6, 7, 8, 9, 10}}'real48_round_to_i32(BorlandReal48 value 8_t expected[6] = {0x82, 6, 7, 8, 9, 10}; assert(memcmp(value.bytes, expected, 6) == 0); return 800; } void tdkpin_plaYy_sound_if_not_tilted(uint16_t sound_number) { assert(sound_number == 8); g_soundload_highscores(uint16_t ignored_static_link) { assert(ignored_static_link == 0x0100); g_load_highscores_calls++; } vo insert_current_score<g_insert_scoreset_gameplay_transition_flag= g_transitshow_highscore_window=g_show_highscore.x+refresh_calls + 1); g_collision_refresh.O&refresh_calls + 1); g_item_refresh( or_item_a(Iitem_calls); g_restore6)void tdkpin_draw_item_status(int16_t item ,item_count = (uint16_t)item; g_draw_item$update_status_display(uint8_t player #tatus_player = player; g_status draw_all_play?g_redraw et_ball_state< g_reset_ball!?  D #include Win16FarPtr g_object_windows_application; uint8_t g_object_windows_focus_event_marker; static int32_t g_window_style; static unsigned g_sequence[32]; static unsigned g_sequence_count; static Win16FarPtr g_last_procedure; static Win16FarPtr g_last_receiver; static ObjectWindowsMessage *g_last_message; static uint16_t g_scroll_position; static uint16_t g_scroll_command; static HDC16 g_paint_dc; static RECT16 g_window_rectangle; static MSG16 g_queued_messages[4]; static unsigned g_queued_count; static unsigned g_queued_index; static HWND16 g_capture_window; static unsigned g_release_calls; static unsigned g_translate_calls; static unsigned g_dispatch_calls; static unsigned g_mouse_calls; enum Sequence { SEQ_MESSAGE = 1, SEQ_SCROLL, SEQ_BEGIN_PAINT, SEQ_PAINT, SEQ_METHOD, SEQ_END_PAINT, SEQ_GET_RECT, SEQ_CAPTURE, SEQ_TRANSLATE, SEQ_DISPATCH, SEQ_MOUSE, SEQ_RELEASE, }; static void record(unsigned value) { assert(g_sequence_count < sizeof(g_sequence) / sizeof(*g_sequence)); g_sequence[g_sequence_count++] = value; } int32_t GetWindowLong16(HWND16 window, INT16 index) { assert(window == 0x1234 && index == -16); return g_window_style; } void win16_call_object_message_handler( Win16FarPtr procedure, Win16FarPtr object, ObjectWindowsMessage *message) { g_last_procedure = procedure; g_last_receiver = object; g_last_message = message; record(SEQ_MESSAGE); } void win16_call_object_scroll_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t position, uint16_t command) { g_last_procedure = procedure; g_last_receiver = object; g_scroll_position = position; g_scroll_command = command; record(SEQ_SCROLL); } HDC16 BeginPaint16(HWND16 window, Win16FarPtr paint) { assert(window == 0x1234); win16_write_u16(paint, 0, g_paint_dc); record(SEQ_BEGIN_PAINT); return g_paint_dc; } BOOL16 EndPaint16(HWND16 window, Win16FarPtr paint) { assert(window == 0x1234 && win16_read_u16(paint) == g_paint_dc); record(SEQ_END_PAINT); return 1; } void win16_call_object_paint_method( Win16FarPtr procedure, Win16FarPtr object, PAINTSTRUCT16 *paint, HDC16 dc) { assert(paint->dc == g_paint_dc && dc == g_paint_dc); g_last_procedure = procedure; g_last_receiver = object; record(SEQ_PAINT); } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { g_last_procedure = procedure; g_last_receiver = object; record(SEQ_METHOD); } BOOL16 GetWindowRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x1234); win16_write_u16(rectangle, 0, (uint16_t)g_window_rectangle.left); win16_write_u16(rectangle, 2, (uint16_t)g_window_rectangle.top); win16_write_u16(rectangle, 4, (uint16_t)g_window_rectangle.right); win16_write_u16(rectangle, 6, (uint16_t)g_window_rectangle.bottom); record(SEQ_GET_RECT); return 1; } HWND16 SetCapture16(HWND16 window) { g_capture_window = window; record(SEQ_CAPTURE); return 0xaaaa; } BOOL16 ReleaseCapture16(void) { g_release_calls++; record(SEQ_RELEASE); return 1; } BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message) { assert(window == 0 && minimum_message == 0 && maximum_message == 0); assert(remove_message == 1); if (g_queued_index == g_queued_count) { return 0; } *message = g_queued_messages[g_queued_index++]; return 1; } BOOL16 TranslateMessage16(const MSG16 *message) { (void)message; g_translate_calls++; record(SEQ_TRANSLATE); return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { (void)message; g_dispatch_calls++; record(SEQ_DISPATCH); return 0; } void win16_call_object_u16_method( Win16FarPtr procedure, Win16FarPtr object, uint16_t argument) { assert(argument == 0x1234); g_last_procedure = procedure; g_last_receiver = object; g_mouse_calls++; record(SEQ_MOUSE); } static void write_far( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } static void reset_observations(void) { g_sequence_count = 0; g_last_procedure = 0; g_last_receiver = 0; g_last_message = 0; g_queued_count = 0; g_queued_index = 0; g_release_calls = 0; g_translate_calls = 0; g_dispatch_calls = 0; g_mouse_calls = 0; } int main(void) { static uint8_t dgroup[0x1000]; uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x7000, (void *)stack_base, 0x10000, true); Win16FarPtr window = win16_make_far_pointer(0x5000, 0x0200); Win16FarPtr attached = win16_make_far_pointer(0x5000, 0x0300); win16_write_u16(window, 0, 0x0400); win16_write_u16(window, 4, 0x1234); win16_write_u16(attached, 0, 0x0500); write_far(window, 0x3b, attached); Win16FarPtr default_proc = win16_make_far_pointer(0x6000, 0x1000); Win16FarPtr fallback_scroll = win16_make_far_pointer(0x6000, 0x1001); Win16FarPtr window_paint = win16_make_far_pointer(0x6000, 0x1002); Win16FarPtr horizontal = win16_make_far_pointer(0x6000, 0x2000); Win16FarPtr vertical = win16_make_far_pointer(0x6000, 0x2001); Win16FarPtr before_paint = win16_make_far_pointer(0x6000, 0x2002); Win16FarPtr after_paint = win16_make_far_pointer(0x6000, 0x2003); Win16FarPtr resize = win16_make_far_pointer(0x6000, 0x2004); Win16FarPtr mouse = win16_make_far_pointer(0x6000, 0x2005); write_far(win16_dgroup_pointer(0x0400), 0x0c, default_proc); write_far(win16_dgroup_pointer(0x0400), 0x48, fallback_scroll); write_far(win16_dgroup_pointer(0x0400), 0x4c, window_paint); write_far(win16_dgroup_pointer(0x0500), 0x20, horizontal); write_far(win16_dgroup_pointer(0x0500), 0x1c, vertical); write_far(win16_dgroup_pointer(0x0500), 0x14, before_paint); write_far(win16_dgroup_pointer(0x0500), 0x18, after_paint); write_far(win16_dgroup_pointer(0x0500), 0x0c, resize); write_far(win16_dgroup_pointer(0x0500), 0x24, mouse); ObjectWindowsMessage message = { .wparam = 7, .lparam = 0x12345678, }; reset_observations(); g_window_style = 0; object_windows_wm_hscroll_attached(window, &message); assert(g_last_procedure == fallback_scroll && g_last_receiver == window && g_last_message == &message); reset_observations(); g_window_style = 0x00100000; object_windows_wm_hscroll_attached(window, &message); assert(g_last_procedure == horizontal && g_last_receiver == attached); assert(g_scroll_position == 0x5678 && g_scroll_command == 7); reset_observations(); write_far(window, 0x3b, 0); object_windows_wm_hscroll_attached(window, &message); assert(g_last_procedure == default_proc && g_last_receiver == window); write_far(window, 0x3b, attached); reset_observations(); g_window_style = 0x00200000; object_windows_wm_vscroll_attached(window, &message); assert(g_last_procedure == vertical && g_last_receiver == attached); reset_observations(); g_paint_dc = 0x4444; object_windows_wm_paint_attached(window, &message); assert(g_sequence_count == 5); assert(g_sequence[0] == SEQ_BEGIN_PAINT); assert(g_sequence[1] == SEQ_PAINT); assert(g_sequence[2] == SEQ_PAINT); assert(g_sequence[3] == SEQ_METHOD); assert(g_sequence[4] == SEQ_END_PAINT); assert(g_last_procedure == after_paint && g_last_receiver == attached); reset_observations(); g_window_rectangle = (RECT16){10, 20, 70, 100}; message.wparam = 0; object_windows_wm_size_attached(window, &message); assert(g_sequence[0] == SEQ_METHOD); assert(g_sequence[1] == SEQ_GET_RECT); assert(g_sequence[2] == SEQ_MESSAGE); assert(win16_read_u16(win16_far_add_offset(window, 0x2d)) == 60); assert(win16_read_u16(win16_far_add_offset(window, 0x2f)) == 80); reset_observations(); message.wparam = 1; object_windows_wm_size_attached(window, &message); assert(g_sequence_count == 1 && g_sequence[0] == SEQ_MESSAGE); reset_observations(); win16_write_u8(win16_far_add_offset(attached, 0x22), 1); g_queued_messages[0].message = 0x0200; g_queued_messages[1].message = 0x0202; g_queued_count = 2; object_windows_track_mouse_until_button_up(window, &message); assert(g_capture_window == 0x1234 && g_release_calls == 1); assert(g_translate_calls == 2 && g_dispatch_calls == 2); assert(g_mouse_calls == 2); assert(g_sequence[g_sequence_count - 1] == SEQ_MESSAGE); reset_observations(); win16_set_indeterminate_u16(0x0202); object_windows_track_mouse_until_button_up(window, &message); assert(g_mouse_calls == 1 && g_release_calls == 1); reset_observations(); win16_write_u8(win16_far_add_offset(attached, 0x22), 0); object_windows_track_mouse_until_button_up(window, &message); assert(g_capture_window == 0x1234); assert(g_mouse_calls == 0 && g_release_calls == 0); assert(g_sequence_count == 1 && g_sequence[0] == SEQ_MESSAGE); return 0; } H xF*#include "../tdkpin_window_messages.h" #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_win16_message_box; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; Win16FarPtr g_object_windows_creating_object; static HWND16 g_dialog_item; static uint16_t g_dlg_code; static HWND16 g_focus; static HWND16 g_parent; static unsigned g_parent_calls; static HWND16 g_lookup_window; static Win16FarPtr g_window_object; static Win16FarPtr g_child_object; static Win16FarPtr g_called_proc; static Win16FarPtr g_called_object; static ObjectWindowsMessage *g_called_message; static uint16_t g_window_word; HWND16 GetDlgItem16(HWND16 dialog, INT16 control_id) { assert(dialog == 0x77); (void)control_id; return g_dialog_item; } LRESULT16 SendMessage16( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { assert(window == g_dialog_item && message == 0x87); assert(wparam == 0 && lparam == 0); return g_dlg_code; } HWND16 GetFocus16(void) { return g_focus; } HWND16 GetParent16(HWND16 window) { assert(window == g_focus); g_parent_calls++; return g_parent; } BOOL16 IsWindow16(HWND16 window) { g_lookup_window = window; return window != 0; } int32_t GetWindowLong16(HWND16 window, INT16 index) { assert(window != 0 && index == -4); return (int32_t)win16_make_far_pointer(0x6000, 0x0100); } Win16Handle GetProp16(HWND16 window, Win16FarPtr name) { Win16FarPtr object = window == 0x55 ? g_child_object : 0; return win16_far_offset(name) == 0x067a ? win16_far_selector(object) : win16_far_offset(object); } uint16_t GetWindowWord16(HWND16 window, INT16 index) { assert(window != 0 && index == -12); return g_window_word; } void win16_call_object_event_handler( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr event) { g_called_proc = procedure; g_called_object = object; g_called_message = (ObjectWindowsMessage *)(uintptr_t)event; } void win16_call_object_message_handler( Win16FarPtr procedure, Win16FarPtr object, ObjectWindowsMessage *message) { g_called_proc = procedure; g_called_object = object; g_called_message = message; } void win16_call_object_message_hook( Win16FarPtr procedure, Win16FarPtr object, Win16FarPtr handler, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { (void)procedure; (void)object; (void)handler; (void)window; (void)message; (void)wparam; (void)lparam; assert(false); } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } static void write_dispatch_table( uint16_t vmt, uint16_t table, uint16_t id, Win16FarPtr handler) { win16_write_u16(win16_dgroup_pointer((uint16_t)(vmt + 4)), 0, table); win16_write_u16(win16_dgroup_pointer(table), 0, 0); win16_write_u16(win16_dgroup_pointer((uint16_t)(table + 2)), 0, 0xffff); win16_write_u16(win16_dgroup_pointer((uint16_t)(table + 4)), 0, 0xffff); win16_write_u16(win16_dgroup_pointer((uint16_t)(table + 6)), 0, 1); win16_write_u16(win16_dgroup_pointer((uint16_t)(table + 8)), 0, id); write_far((uint16_t)(table + 10), handler); } static void reset_call(void) { g_called_proc = 0; g_called_object = 0; g_called_message = 0; g_dialog_item = 0; g_dlg_code = 0; g_focus = 0; g_parent = 0; g_parent_calls = 0; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t code[0x200]; static uint8_t stack[0x100]; static uint8_t window_bytes[64]; static uint8_t child_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x6000, code, sizeof(code), false); win16_bind_segment(0x7000, window_bytes, sizeof(window_bytes), true); win16_bind_segment(0x7100, child_bytes, sizeof(child_bytes), true); win16_bind_segment(0x7200, stack, sizeof(stack), true); g_window_object = win16_make_far_pointer(0x7000, 2); g_child_object = win16_make_far_pointer(0x7100, 2); uint16_t window_vmt = 0x0100; uint16_t child_vmt = 0x0200; win16_write_u16(g_window_object, 0, window_vmt); win16_write_u16(g_child_object, 0, child_vmt); win16_write_u16(g_window_object, 4, 0x77); Win16FarPtr menu_handler = win16_make_far_pointer(0x6100, 0x1000); Win16FarPtr control_handler = win16_make_far_pointer(0x6100, 0x2000); Win16FarPtr notify_handler = win16_make_far_pointer(0x6100, 0x3000); Win16FarPtr default_handler = win16_make_far_pointer(0x6100, 0x4000); Win16FarPtr default_control = win16_make_far_pointer(0x6100, 0x5000); write_dispatch_table(window_vmt, 0x0300, 0x8005, control_handler); write_dispatch_table(child_vmt, 0x0340, 0xa010, menu_handler); /* Parent table supplies the notification id as a second node. */ win16_write_u16(win16_dgroup_pointer(0x0340), 0, 0x0380); win16_write_u16(win16_dgroup_pointer(0x0380), 0, 0); win16_write_u16(win16_dgroup_pointer(0x0382), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0384), 0, 0xffff); win16_write_u16(win16_dgroup_pointer(0x0386), 0, 1); win16_write_u16(win16_dgroup_pointer(0x0388), 0, 0x9002); write_far(0x038a, notify_handler); write_far((uint16_t)(window_vmt + 0x0c), default_handler); write_far((uint16_t)(window_vmt + 0x14), default_control); write_far((uint16_t)(window_vmt + 0x10), default_handler); write_far((uint16_t)(child_vmt + 0x10), default_handler); write_far((uint16_t)(child_vmt + 0x18), default_handler); write_far((uint16_t)(child_vmt + 0x14), default_control); ObjectWindowsMessage *message = (ObjectWindowsMessage *)&stack[16]; Win16FarPtr message_far = win16_make_far_pointer(0x7200, 16); (void)message_far; reset_call(); *message = (ObjectWindowsMessage){.wparam = 0x0010, .lparam = 0}; g_focus = 0x66; g_parent = 0x55; object_windows_wm_command(g_window_object, message); assert(g_parent_calls == 1 && g_lookup_window == 0x55); assert(g_called_proc == menu_handler && g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){.wparam = 0x6000, .lparam = 0}; object_windows_wm_command(g_window_object, message); assert(g_called_proc == default_handler && g_called_object == g_window_object); reset_call(); *message = (ObjectWindowsMessage){ .wparam = 0x0100, .lparam = (LPARAM16)0x00020055u, }; g_dialog_item = 0x55; object_windows_wm_command(g_window_object, message); assert(g_called_proc == notify_handler && g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){.wparam = 5, .lparam = 0x66}; object_windows_wm_command(g_window_object, message); assert(g_called_proc == control_handler && g_called_object == g_window_object); reset_call(); *message = (ObjectWindowsMessage){.wparam = 0x1000, .lparam = 0x66}; object_windows_wm_command(g_window_object, message); assert(g_called_proc == default_control && g_called_object == g_window_object); reset_call(); win16_write_u8(win16_far_add_offset(g_window_object, 0x16), 1); *message = (ObjectWindowsMessage){.wparam = 0x0100, .lparam = 0}; g_dialog_item = 0x55; g_dlg_code = 0x30; object_windows_wm_command(g_window_object, message); assert((uint16_t)message->lparam == 0x55); assert(g_called_proc == default_handler); assert(g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){.wparam = 2, .lparam = 0}; object_windows_route_scroll_notification(g_window_object, message); assert(g_called_proc == default_handler); reset_call(); *message = (ObjectWindowsMessage){ .wparam = 2, .lparam = (LPARAM16)0x00550000u, }; object_windows_route_scroll_notification(g_window_object, message); assert(g_called_proc == notify_handler && g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){ .wparam = 2, .lparam = (LPARAM16)0x00660000u, }; g_window_word = 5; object_windows_route_scroll_notification(g_window_object, message); assert(g_called_proc == control_handler && g_called_object == g_window_object); reset_call(); *message = (ObjectWindowsMessage){ .wparam = 2, .lparam = (LPARAM16)0x00660000u, }; g_window_word = 0x1000; object_windows_route_scroll_notification(g_window_object, message); assert(g_called_proc == default_control && g_called_object == g_window_object); reset_call(); *message = (ObjectWindowsMessage){ .window = 0x77, .wparam = 0x0010, }; object_windows_route_command_target(g_window_object, message); assert(g_called_proc == default_handler && g_called_object == g_window_object); win16_write_u16(g_window_object, 6, win16_far_offset(g_child_object)); win16_write_u16(g_window_object, 8, win16_far_selector(g_child_object)); message->window = 0x66; object_windows_route_command_target(g_window_object, message); assert(g_called_proc == menu_handler && g_called_object == g_child_object); win16_write_u16(g_window_object, 6, 0); win16_write_u16(g_window_object, 8, 0); message->window = 0x55; object_windows_route_command_target(g_window_object, message); assert(g_called_proc == menu_handler && g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){.message = 0x0111, .wparam = 5}; object_windows_forward_event_to_parent(g_window_object, message); assert(g_called_proc == 0); win16_write_u16(g_window_object, 6, win16_far_offset(g_child_object)); win16_write_u16(g_window_object, 8, win16_far_selector(g_child_object)); object_windows_forward_event_to_parent(g_window_object, message); assert(g_called_proc == default_control && g_called_object == g_child_object); reset_call(); *message = (ObjectWindowsMessage){.message = 2}; g_window_word = 5; object_windows_forward_event_to_parent(g_window_object, message); assert(g_called_proc == default_control && g_called_object == g_child_object); return 0; } ,x$:#include "../tdkpin_window_placement.h" #include #include HINSTANCE16 g_win16_instance; Win16FarPtr g_object_windows_creating_object; static bool g_enter = true; static Win16FarPtr g_parent_mdi_client; static Win16FarPtr g_duplicate_result; static uint8_t g_flags; static bool g_register_result; static Win16FarPtr g_class_name; static HWND16 g_create_result; static HWND16 g_dialog_item_result; static Win16FarPtr g_existing_object; static int32_t g_previous_wndproc; static unsigned g_bind_calls; static unsigned g_created_calls; static unsigned g_create_ex_calls; static unsigned g_mdi_calls; bool borland_enter_object_constructor( BorlandObjectCallFrame *frame, uint16_t offset) { assert(offset == 0); if (g_enter && frame->vmt_argument != 0) { win16_write_u16(frame->object, 0, frame->vmt_argument); } return g_enter; } Win16FarPtr object_windows_object_construct( Win16FarPtr object, uint16_t vmt, Win16FarPtr parent) { assert(vmt == 0); win16_write_u16(object, 6, win16_far_offset(parent)); win16_write_u16(object, 8, win16_far_selector(parent)); return object; } Win16FarPtr borland_far_strdup(Win16FarPtr source) { assert(source != 0); return g_duplicate_result; } Win16FarPtr win16_def_window_proc_pointer(void) { return win16_make_far_pointer(0x6000, 0x0100); } Win16FarPtr win16_def_mdi_child_proc_pointer(void) { return win16_make_far_pointer(0x6000, 0x0200); } void object_windows_update_flags( Win16FarPtr object, bool set, uint8_t mask) { assert(set && mask == 8); g_flags |= mask; win16_write_u8(win16_far_add_offset(object, 0x16), g_flags); } Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { (void)procedure; if (win16_far_offset(object) == 0x0300) { return g_parent_mdi_client; } return g_class_name; } void object_windows_clear_flag_4(Win16FarPtr object) { g_flags &= (uint8_t)~4u; win16_write_u8(win16_far_add_offset(object, 0x16), g_flags); } bool object_windows_has_flags(Win16FarPtr object, uint8_t mask) { (void)object; return (g_flags & mask) == mask; } bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { (void)procedure; (void)object; return g_register_result; } HWND16 GetDlgItem16(HWND16 dialog, INT16 control_id) { assert(dialog == 0x3333 && control_id == 77); return g_dialog_item_result; } HWND16 CreateWindowEx16( uint32_t extended_style, Win16FarPtr class_name, Win16FarPtr window_name, uint32_t style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, Win16FarPtr parameter) { assert(extended_style == 0x11223344u); assert(class_name == g_class_name); assert(window_name == g_duplicate_result); assert(style == 0x55667788u); assert(x == 10 && y == 20 && width == 30 && height == 40); assert(parent == 0x3333 && menu == 77 && instance == g_win16_instance); assert(parameter == win16_make_far_pointer(0x5000, 0x0550)); g_create_ex_calls++; return g_create_result; } LRESULT16 SendMessage16( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { assert(window == 0x4444 && message == 0x0220 && wparam == 0); Win16FarPtr pointer = (Win16FarPtr)lparam; assert(win16_read_far_pointer(pointer, 0) == g_class_name); assert(win16_read_far_pointer(pointer, 4) == g_duplicate_result); assert(win16_read_u16(win16_far_add_offset(pointer, 8)) == g_win16_instance); assert((INT16)win16_read_u16(win16_far_add_offset(pointer, 10)) == 10); assert(win16_read_u32(win16_far_add_offset(pointer, 18)) == 0x55667788u); assert(win16_read_u32(win16_far_add_offset(pointer, 22)) == win16_make_far_pointer(0x5000, 0x0550)); g_mdi_calls++; return g_create_result; } Win16FarPtr object_windows_object_from_window(HWND16 window) { assert(window != 0); return g_existing_object; } void object_windows_bind_window(HWND16 window, Win16FarPtr object) { assert(window != 0 && object != 0); g_bind_calls++; } int32_t SetWindowLong16(HWND16 window, INT16 index, int32_t value) { assert(window != 0 && index == -4); assert((Win16FarPtr)value == win16_make_far_pointer(0x6000, 0x0300)); return g_previous_wndproc; } void win16_call_object_method(Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == win16_make_far_pointer(0x6000, 0x0600)); assert(object != 0); g_created_calls++; } static void write_far_value( Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u16(base, offset, win16_far_offset(value)); win16_write_u16( base, (uint16_t)(offset + 2), win16_far_selector(value)); } static void prepare_window( Win16FarPtr window, Win16FarPtr parent) { win16_write_u16(window, 0, 0x0100); win16_write_u16(window, 2, 0); win16_write_u16(window, 4, 0); write_far_value(window, 6, parent); write_far_value(window, 0x1d, g_duplicate_result); win16_write_u32(window, 0x21, 0x55667788u); win16_write_u32(window, 0x25, 0x11223344u); win16_write_u16(window, 0x29, 10); win16_write_u16(window, 0x2b, 20); win16_write_u16(window, 0x2d, 30); win16_write_u16(window, 0x2f, 40); write_far_value(window, 0x31, win16_make_far_pointer(0x5000, 0x0550)); win16_write_u16(window, 0x35, 77); write_far_value(window, 0x12, win16_make_far_pointer(0x6000, 0x0300)); g_flags = 0; } int main(void) { static uint8_t dgroup[0x1000]; uint8_t stack_anchor = 0; uintptr_t stack_base = (uintptr_t)&stack_anchor - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment(0x7000, (void *)stack_base, 0x10000, true); Win16FarPtr window = win16_make_far_pointer(0x5000, 0x0200); Win16FarPtr parent = win16_make_far_pointer(0x5000, 0x0300); Win16FarPtr mdi_client = win16_make_far_pointer(0x5000, 0x0400); g_duplicate_result = win16_make_far_pointer(0x5000, 0x0500); g_class_name = win16_make_far_pointer(0x5000, 0x0520); win16_write_u16(parent, 0, 0x0700); win16_write_u16(parent, 4, 0x3333); win16_write_u16(mdi_client, 4, 0x4444); write_far_value(win16_dgroup_pointer(0x0700), 0x30, win16_make_far_pointer(0x6000, 0x0700)); write_far_value(win16_dgroup_pointer(0x0100), 0x1c, win16_make_far_pointer(0x6000, 0x0400)); write_far_value(win16_dgroup_pointer(0x0100), 0x2c, win16_make_far_pointer(0x6000, 0x0500)); write_far_value(win16_dgroup_pointer(0x0100), 0x38, win16_make_far_pointer(0x6000, 0x0600)); g_parent_mdi_client = 0; (void)object_windows_window_construct( window, 0x0100, win16_make_far_pointer(0x5000, 0x0540), 0); assert(win16_read_u32(win16_far_add_offset(window, 0x21)) == 0x00cf0000u); assert(win16_read_far_pointer(window, 0x37) == win16_make_far_pointer(0x6000, 0x0100)); assert(win16_read_u16(win16_far_add_offset(window, 0x29)) == 0x8000); g_parent_mdi_client = 0; (void)object_windows_window_construct( window, 0, win16_make_far_pointer(0x5000, 0x0540), parent); assert(win16_read_u32(win16_far_add_offset(window, 0x21)) == 0x10000000u); g_parent_mdi_client = mdi_client; (void)object_windows_window_construct( window, 0, win16_make_far_pointer(0x5000, 0x0540), parent); assert(win16_read_u32(win16_far_add_offset(window, 0x21)) == 0x04000000u); assert(win16_read_far_pointer(window, 0x37) == win16_make_far_pointer(0x6000, 0x0200)); assert((g_flags & 8) != 0); g_win16_instance = 0x7777; g_register_result = true; g_existing_object = 0; g_previous_wndproc = (int32_t)win16_make_far_pointer(0x6000, 0x0800); prepare_window(window, parent); g_create_result = 0x8888; g_create_ex_calls = 0; g_bind_calls = 0; g_created_calls = 0; win16_set_indeterminate_u16(0); assert(object_windows_create_native_window(window) == 1); assert(g_create_ex_calls == 1 && g_bind_calls == 1 && g_created_calls == 1); assert(g_object_windows_creating_object == window); assert(win16_read_far_pointer(window, 0x37) == (Win16FarPtr)g_previous_wndproc); prepare_window(window, parent); g_flags = 2; g_dialog_item_result = 0x9999; g_existing_object = window; assert(object_windows_create_native_window(window) == 1); assert(win16_read_u16(win16_far_add_offset(window, 4)) == 0x9999); prepare_window(window, parent); g_flags = 8; g_parent_mdi_client = mdi_client; g_create_result = 0xaaaa; g_existing_object = window; g_mdi_calls = 0; assert(object_windows_create_native_window(window) == 1); assert(g_mdi_calls == 1); prepare_window(window, parent); g_create_result = 0; g_existing_object = 0; assert(object_windows_create_native_window(window) == 0); assert(win16_read_u16(win16_far_add_offset(window, 2)) == 0xffff); prepare_window(window, parent); g_register_result = false; g_existing_object = window; win16_set_indeterminate_u16(0xabcd); assert(object_windows_create_native_window(window) == 0xab01); return 0; } x9#include "../tdkpin_window_messages.h" #include "../tdkpin_object_list.h" #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_win16_message_box; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; Win16FarPtr g_object_windows_creating_object; static Win16FarPtr g_client_result; static Win16FarPtr g_client_getter; static unsigned g_getter_calls; static HWND16 g_destroyed_window; static HWND16 g_sent_window; static UINT16 g_sent_message; static WPARAM16 g_sent_wparam; static LPARAM16 g_sent_lparam; void win16_call_object_action( Win16FarPtr procedure, Win16FarPtr child) { assert(procedure == win16_make_far_pointer(0x6000, 0x0cc7)); object_windows_set_flag_4_if_windowed(0xffff, child); } Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; assert(procedure == g_client_getter); g_getter_calls++; return g_client_result; } BOOL16 DestroyWindow16(HWND16 window) { g_destroyed_window = window; return 1; } LRESULT16 SendMessage16( HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { g_sent_window = window; g_sent_message = message; g_sent_wparam = wparam; g_sent_lparam = lparam; return 0; } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } static void reset_calls(void) { g_getter_calls = 0; g_destroyed_window = 0; g_sent_window = 0; g_sent_message = 0; g_sent_wparam = 0; g_sent_lparam = 0; } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t code[0x1000]; static uint8_t window_bytes[64]; static uint8_t child_bytes[64]; static uint8_t parent_bytes[64]; static uint8_t client_bytes[64]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_ne_segment(4, 0x6000, code, sizeof(code), false); win16_bind_segment(0x7000, window_bytes, sizeof(window_bytes), true); win16_bind_segment(0x7100, child_bytes, sizeof(child_bytes), true); win16_bind_segment(0x7200, parent_bytes, sizeof(parent_bytes), true); win16_bind_segment(0x7300, client_bytes, sizeof(client_bytes), true); Win16FarPtr window = win16_make_far_pointer(0x7000, 2); Win16FarPtr child = win16_make_far_pointer(0x7100, 2); Win16FarPtr parent = win16_make_far_pointer(0x7200, 2); Win16FarPtr client = win16_make_far_pointer(0x7300, 2); win16_write_u16(window, 4, 0x77); win16_write_u16(child, 4, 0x88); win16_write_u16(client, 4, 0x99); win16_write_u16(window, 6, win16_far_offset(parent)); win16_write_u16(window, 8, win16_far_selector(parent)); object_windows_append_child(window, child); win16_write_u16(parent, 0, 0x0100); g_client_getter = win16_make_far_pointer(0x6100, 0x0200); write_far(0x0130, g_client_getter); reset_calls(); object_windows_destroy_native_window(window); assert(g_destroyed_window == 0x77); assert(object_windows_has_flags(child, 4)); object_windows_update_flags(window, true, 8); reset_calls(); g_client_result = 0; object_windows_destroy_native_window(window); assert(g_getter_calls == 1 && g_destroyed_window == 0x77); reset_calls(); g_client_result = client; object_windows_destroy_native_window(window); assert(g_getter_calls == 2 && g_destroyed_window == 0); assert(g_sent_window == 0x99 && g_sent_message == 0x221); assert(g_sent_wparam == 0x77 && g_sent_lparam == 0); win16_write_u16(window, 4, 0); reset_calls(); object_windows_destroy_native_window(window); assert(g_getter_calls == 0 && g_destroyed_window == 0); return 0; } Zx #include "../tdkpin_window_lifecycle.h" #include static uint8_t g_dgroup[0x1000]; static uint8_t g_objects[0x400]; static Win16FarPtr g_window; static Win16FarPtr g_peer; static Win16FarPtr g_attached; static Win16FarPtr g_title; static unsigned g_step; static bool g_board_mode; BOOL16 DeleteObject16(HGDIOBJ16 object) { assert(++g_step == 1 && object == 0x7777); if (g_board_mode) { assert(win16_read_far_pointer(g_window, 0x41) == 0); assert(win16_read_far_pointer(g_peer, 0x45) == 0); } else { assert(win16_read_far_pointer(g_window, 0x41) == g_peer); assert(win16_read_far_pointer(g_peer, 0x41) == g_window); } return 1; } void borland_far_strdispose(Win16FarPtr string) { assert(++g_step == 2 && string == g_title); } void borland_dispose_object(Win16FarPtr object) { assert(++g_step == 3 && object == g_attached); } void object_windows_object_destruct( Win16FarPtr object, uint16_t vmt) { assert(++g_step == 4 && object == g_window && vmt == 0); } void borland_finish_object_destructor( BorlandObjectCallFrame *frame, uint16_t vmt_field_offset) { assert(frame->object == g_window && vmt_field_offset == 0); if (++g_step == 5) { assert(frame->vmt_argument == 0); } else { assert(g_step == 6 && frame->vmt_argument == 0x9999); } } int main(void) { win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_objects, sizeof(g_objects), true); win16_set_dgroup_selector(0x5000); g_window = win16_make_far_pointer(0x6000, 0); g_peer = win16_make_far_pointer(0x6000, 0x100); g_attached = win16_make_far_pointer(0x6000, 0x200); g_title = win16_make_far_pointer(0x6000, 0x300); win16_write_u16(win16_make_far_pointer(0x5000, 0x0867), 0, 0x7777); win16_write_u32(g_window, 0x1d, g_title); win16_write_u32(g_window, 0x3b, g_attached); win16_write_u32(g_window, 0x41, g_peer); win16_write_u32(g_peer, 0x41, g_window); g_board_mode = false; tdkpin_overlay_window_destruct(g_window, 0x9999); assert(g_step == 6); assert(win16_read_far_pointer(g_window, 0x3b) == 0); assert(win16_read_far_pointer(g_window, 0x41) == 0); assert(win16_read_far_pointer(g_peer, 0x41) == 0); g_step = 0; g_board_mode = true; win16_write_u32(g_window, 0x1d, g_title); win16_write_u32(g_window, 0x3b, g_attached); win16_write_u32(g_window, 0x41, g_peer); win16_write_u32(g_peer, 0x45, g_window); tdkpin_board_window_destruct(g_window, 0x9999); assert(g_step == 6); assert(win16_read_far_pointer(g_window, 0x3b) == 0); assert(win16_read_far_pointer(g_window, 0x41) == 0); assert(win16_read_far_pointer(g_peer, 0x45) == 0); return 0; } zqx#3#include "../tdkpin_window_messages.h" #include Win16FarPtr g_object_windows_application; HINSTANCE16 g_win16_previous_instance; HINSTANCE16 g_win16_instance; uint16_t g_win16_show_command; Win16FarPtr g_win16_message_box; Win16FarPtr g_object_windows_dispatch_proc; uint16_t g_object_windows_thunk_code_selector; Win16FarPtr g_object_windows_free_thunk; Win16FarPtr g_object_windows_message_hook; Win16FarPtr g_object_windows_creating_object; static bool g_bool_result; static Win16FarPtr g_bool_proc; static Win16FarPtr g_disposed; static Win16FarPtr g_event_proc; static Win16FarPtr g_event_object; static unsigned g_event_calls; static uint16_t g_quit_code; static uint16_t g_removed_property_offsets[2]; static unsigned g_remove_calls; static int32_t g_window_style; static HWND16 g_focus_window; static HWND16 g_is_child_parent; static HWND16 g_is_child_child; static BOOL16 g_is_child_result; static Win16FarPtr g_void_proc; static Win16FarPtr g_original_proc; static HWND16 g_original_window; static UINT16 g_original_message; static WPARAM16 g_original_wparam; static LPARAM16 g_original_lparam; static BOOL16 g_is_window_result; static BOOL16 g_is_iconic_result; static HWND16 g_set_focus_window; bool win16_call_object_bool_method( Win16FarPtr procedure, Win16FarPtr object) { (void)object; g_bool_proc = procedure; return g_bool_result; } void borland_dispose_object(Win16FarPtr object) { g_disposed = object; } void win16_call_object_message_handler( Win16FarPtr procedure, Win16FarPtr object, ObjectWindowsMessage *message) { (void)message; g_event_proc = procedure; g_event_object = object; g_event_calls++; } void PostQuitMessage16(INT16 exit_code) { g_quit_code = (uint16_t)exit_code; } Win16Handle RemoveProp16(HWND16 window, Win16FarPtr name) { assert(window == 0x77 && g_remove_calls < 2); g_removed_property_offsets[g_remove_calls++] = win16_far_offset(name); return 0; } int32_t GetWindowLong16(HWND16 window, INT16 index) { assert(window == 0x77 && index == -16); return g_window_style; } HWND16 GetFocus16(void) { return g_focus_window; } BOOL16 IsChild16(HWND16 parent, HWND16 child) { g_is_child_parent = parent; g_is_child_child = child; return g_is_child_result; } BOOL16 IsWindow16(HWND16 window) { assert(window != 0); return g_is_window_result; } BOOL16 IsIconic16(HWND16 window) { assert(window == 0x77); return g_is_iconic_result; } HWND16 SetFocus16(HWND16 window) { g_set_focus_window = window; return 0; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { assert(object != 0); g_void_proc = procedure; } LRESULT16 CallWindowProc16( Win16FarPtr procedure, HWND16 window, UINT16 message, WPARAM16 wparam, LPARAM16 lparam) { g_original_proc = procedure; g_original_window = window; g_original_message = message; g_original_wparam = wparam; g_original_lparam = lparam; return (LRESULT16)0x12345678u; } static void write_far(uint16_t offset, Win16FarPtr pointer) { win16_write_u16( win16_dgroup_pointer(offset), 0, win16_far_offset(pointer)); win16_write_u16( win16_dgroup_pointer((uint16_t)(offset + 2)), 0, win16_far_selector(pointer)); } int main(void) { static uint8_t dgroup[0x1000]; static uint8_t application_bytes[64]; static uint8_t main_bytes[80]; static uint8_t other_bytes[80]; win16_reset_segment_bindings(); win16_bind_segment(0x5000, dgroup, sizeof(dgroup), true); win16_set_dgroup_selector(0x5000); win16_bind_segment( 0x7000, application_bytes, sizeof(application_bytes), true); win16_bind_segment(0x7100, main_bytes, sizeof(main_bytes), true); win16_bind_segment(0x7200, other_bytes, sizeof(other_bytes), true); g_object_windows_application = win16_make_far_pointer(0x7000, 2); Win16FarPtr main_window = win16_make_far_pointer(0x7100, 2); Win16FarPtr other_window = win16_make_far_pointer(0x7200, 2); uint16_t app_vmt = 0x0100; uint16_t window_vmt = 0x0200; win16_write_u16(g_object_windows_application, 0, app_vmt); win16_write_u16(main_window, 0, window_vmt); win16_write_u16(other_window, 0, window_vmt); win16_write_u16(main_window, 4, 0x77); win16_write_u16(other_window, 4, 0x77); win16_write_u16(other_window, 2, 9); win16_write_u8(win16_far_add_offset(other_window, 0x16), 1); win16_write_u16( g_object_windows_application, 8, win16_far_offset(main_window)); win16_write_u16( g_object_windows_application, 10, win16_far_selector(main_window)); Win16FarPtr app_can_close = win16_make_far_pointer(0x6000, 0x1000); Win16FarPtr window_can_close = win16_make_far_pointer(0x6000, 0x2000); Win16FarPtr default_handler = win16_make_far_pointer(0x6100, 0x3000); Win16FarPtr message_0014 = win16_make_far_pointer(0x6100, 0x4000); Win16FarPtr scroll_handler = win16_make_far_pointer(0x6100, 0x5000); Win16FarPtr slot_38 = win16_make_far_pointer(0x6100, 0x6000); write_far(app_vmt + 0x44, app_can_close); write_far(window_vmt + 0x3c, window_can_close); write_far(window_vmt + 0x0c, default_handler); write_far(window_vmt + 0x10, message_0014); write_far(window_vmt + 0x48, scroll_handler); write_far(window_vmt + 0x38, slot_38); assert(object_windows_has_flags(other_window, 1)); assert(!object_windows_has_flags(other_window, 3)); assert(object_windows_zero_word_default(other_window) == 0); object_windows_set_flag_4(other_window); assert(object_windows_has_flags(other_window, 5)); object_windows_clear_flag_4(other_window); assert(object_windows_has_flags(other_window, 1)); object_windows_set_flag_1(other_window); assert(object_windows_has_flags(other_window, 1)); object_windows_update_flags(other_window, false, 1); assert(!object_windows_has_flags(other_window, 1)); object_windows_set_flag_1(other_window); ObjectWindowsMessage message = { .window = 0x77, .message = 0, .wparam = 1, .lparam = 0, .result = 0, }; g_bool_result = false; g_disposed = 0; object_windows_wm_close(main_window, &message); assert(g_bool_proc == app_can_close && g_disposed == 0); g_bool_result = true; object_windows_wm_close(other_window, &message); assert(g_bool_proc == window_can_close && g_disposed == other_window); g_event_calls = 0; g_quit_code = 0; object_windows_wm_destroy(main_window, &message); assert(g_quit_code == 0x77); assert(g_event_calls == 1 && g_event_proc == default_handler); g_quit_code = 0; object_windows_wm_destroy(other_window, &message); assert(g_quit_code == 0); g_remove_calls = 0; object_windows_wm_nc_destroy(other_window, &message); assert(g_remove_calls == 2); assert(g_removed_property_offsets[0] == 0x067a); assert(g_removed_property_offsets[1] == 0x067e); assert(win16_read_u16(win16_far_add_offset(other_window, 4)) == 0); win16_write_u16(other_window, 4, 0x77); message.wparam = 1; object_windows_wm_activate(other_window, &message); assert(win16_read_far_pointer(g_object_windows_application, 0x0e) == other_window); message.wparam = 0; object_windows_wm_activate(other_window, &message); assert(win16_read_far_pointer(g_object_windows_application, 0x0e) == other_window); win16_write_u8(win16_far_add_offset(other_window, 0x16), 0); message.wparam = 1; object_windows_wm_activate(other_window, &message); assert(win16_read_far_pointer(g_object_windows_application, 0x0e) == 0); g_bool_result = true; object_windows_wm_query_end_session(main_window, &message); assert(message.result == 1 && g_bool_proc == app_can_close); g_bool_result = false; object_windows_wm_query_end_session(other_window, &message); assert(message.result == 0 && g_bool_proc == window_can_close); g_bool_result = false; g_event_calls = 0; object_windows_message_0014(main_window, &message); assert(g_bool_proc == app_can_close && g_event_calls == 0); object_windows_message_0014(other_window, &message); assert(g_event_calls == 1 && g_event_proc == message_0014); assert(g_event_object == other_window); g_window_style = 0; object_windows_wm_hscroll(other_window, &message); assert(g_event_proc == scroll_handler); object_windows_wm_vscroll(other_window, &message); assert(g_event_proc == scroll_handler); g_window_style = (int32_t)0x00100000u; object_windows_wm_hscroll(other_window, &message); assert(g_event_proc == default_handler); g_window_style = (int32_t)0x00200000u; object_windows_wm_vscroll(other_window, &message); assert(g_event_proc == default_handler); assert(object_windows_turbo_window_class_name(other_window) == win16_dgroup_pointer(0x068c)); g_event_calls = 0; object_windows_forward_default(other_window, &message); assert(g_event_calls == 1 && g_event_proc == default_handler); win16_write_u8(win16_far_add_offset(other_window, 0x16), 0); win16_write_u16(other_window, 4, 0); object_windows_set_flag_4_if_windowed(0xbeef, other_window); assert(!object_windows_has_flags(other_window, 4)); win16_write_u16(other_window, 4, 0x77); object_windows_set_flag_4_if_windowed(0xbeef, other_window); assert(object_windows_has_flags(other_window, 4)); win16_write_u16(other_window, 0x35, 0xbeef); assert(object_windows_get_field_35(other_window) == 0xbeef); g_focus_window = 0; win16_write_u16(other_window, 0x3f, 0); object_windows_remember_child_focus(other_window); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0); g_focus_window = 0x99; g_is_child_result = 0; object_windows_remember_child_focus(other_window); assert(g_is_child_parent == 0x77 && g_is_child_child == 0x99); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0); g_is_child_result = 1; object_windows_remember_child_focus(other_window); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0x99); g_void_proc = 0; g_event_calls = 0; object_windows_call_slot_38_then_default(other_window, &message); assert(g_void_proc == slot_38 && g_event_calls == 1); g_focus_window = 0x88; g_is_child_result = 1; g_event_calls = 0; object_windows_remember_focus_then_default(other_window, &message); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0x88); assert(g_event_calls == 1 && g_event_proc == default_handler); Win16FarPtr original_proc = win16_make_far_pointer(0x6200, 0x7000); win16_write_u16(other_window, 0x37, win16_far_offset(original_proc)); win16_write_u16(other_window, 0x39, win16_far_selector(original_proc)); message.message = 0x123; message.wparam = 0x4567; message.lparam = (LPARAM16)0x89abcdefu; object_windows_call_original_window_proc(other_window, &message); assert(g_original_proc == original_proc && g_original_window == 0x77); assert(g_original_message == 0x123 && g_original_wparam == 0x4567); assert(g_original_lparam == (LPARAM16)0x89abcdefu); assert(message.result == (LRESULT16)0x12345678u); g_void_proc = 0; object_windows_call_slot_38(other_window, &message); assert(g_void_proc == slot_38); message.result = (LRESULT16)0x76543210u; object_windows_zero_message_result(other_window, &message); assert(message.result == 0); win16_write_u16(other_window, 0x3f, 0x99); g_is_window_result = 0; g_set_focus_window = 0; object_windows_restore_child_focus(other_window); assert(g_set_focus_window == 0); g_is_window_result = 1; g_is_iconic_result = 1; object_windows_restore_child_focus(other_window); assert(g_set_focus_window == 0); g_is_iconic_result = 0; object_windows_restore_child_focus(other_window); assert(g_set_focus_window == 0x99); win16_write_u8(win16_far_add_offset(other_window, 0x16), 1); message.wparam = 0; g_focus_window = 0x88; g_is_child_result = 1; object_windows_wm_activate_with_focus(other_window, &message); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0x88); message.wparam = 1; g_set_focus_window = 0; object_windows_wm_activate_with_focus(other_window, &message); assert(g_set_focus_window == 0x88); message.wparam = 0xf020; g_focus_window = 0x66; object_windows_wm_syscommand_focus(other_window, &message); assert(win16_read_u16(win16_far_add_offset(other_window, 0x3f)) == 0x66); message.wparam = 0xf120; g_set_focus_window = 0; object_windows_wm_syscommand_focus(other_window, &message); assert(g_set_focus_window == 0x66); message.wparam = 0x1234; g_set_focus_window = 0; object_windows_wm_syscommand_focus(other_window, &message); assert(g_set_focus_window == 0); return 0; } 9xk #include "../tdkpin_window_placement.h" #include #include #include #include enum { WINDOW_HANDLE = 4, WINDOW_PARENT = 6, WINDOW_FLAGS = 0x16, WINDOW_ATTRIBUTES = 0x21, WINDOW_X = 0x29, WINDOW_Y = 0x2b, WINDOW_WIDTH = 0x2d, WINDOW_HEIGHT = 0x2f, WINDOW_ATTACHED = 0x3b, }; static uint8_t g_dgroup[0x1000]; static uint8_t g_objects[0x1000]; static Win16FarPtr g_window; static Win16FarPtr g_parent; static Win16FarPtr g_client; static Win16FarPtr g_attached; static Win16FarPtr g_parent_getter; static Win16FarPtr g_attached_setup; static Win16FarPtr g_client_result; static bool g_iconic; static bool g_zoomed; static RECT16 g_native_rectangle; static unsigned g_is_iconic_calls; static unsigned g_is_zoomed_calls; static unsigned g_get_rect_calls; static unsigned g_screen_to_client_calls; static HWND16 g_screen_to_client_window; static POINT16 g_client_delta; static unsigned g_prepare_calls; static unsigned g_flag_calls; static unsigned g_focus_calls; static HWND16 g_focused_window; static unsigned g_parent_getter_calls; static unsigned g_attached_setup_calls; static Win16FarPtr object_at(uint16_t offset) { return win16_make_far_pointer(0x6000, offset); } static Win16FarPtr dgroup_at(uint16_t offset) { return win16_make_far_pointer(0x5000, offset); } static void write_far(Win16FarPtr base, uint16_t offset, Win16FarPtr value) { win16_write_u32(base, offset, value); } static void reset_fixture(void) { memset(g_objects, 0, sizeof(g_objects)); memset(g_dgroup, 0, sizeof(g_dgroup)); g_window = object_at(0x100); g_parent = object_at(0x200); g_client = object_at(0x300); g_attached = object_at(0x400); g_parent_getter = win16_make_far_pointer(0x7000, 0x1234); g_attached_setup = win16_make_far_pointer(0x7000, 0x5678); win16_write_u16(g_parent, 0, 0x0100); win16_write_u16(g_attached, 0, 0x0200); write_far(dgroup_at(0x0100), 0x30, g_parent_getter); write_far(dgroup_at(0x0200), 0x10, g_attached_setup); win16_write_u16(g_window, WINDOW_HANDLE, 0x1111); win16_write_u16(g_parent, WINDOW_HANDLE, 0x2222); win16_write_u16(g_client, WINDOW_HANDLE, 0x3333); g_native_rectangle = (RECT16){10, 20, 110, 220}; g_client_delta = (POINT16){3, 5}; g_client_result = 0; g_iconic = false; g_zoomed = false; g_is_iconic_calls = 0; g_is_zoomed_calls = 0; g_get_rect_calls = 0; g_screen_to_client_calls = 0; g_screen_to_client_window = 0; g_prepare_calls = 0; g_flag_calls = 0; g_focus_calls = 0; g_focused_window = 0; g_parent_getter_calls = 0; g_attached_setup_calls = 0; } BOOL16 IsIconic16(HWND16 window) { assert(window == 0x1111); g_is_iconic_calls++; return g_iconic; } BOOL16 IsZoomed16(HWND16 window) { assert(window == 0x1111); g_is_zoomed_calls++; return g_zoomed; } BOOL16 GetWindowRect16(HWND16 window, Win16FarPtr rectangle) { assert(window == 0x1111); win16_write_u16(rectangle, 0, (uint16_t)g_native_rectangle.left); win16_write_u16(rectangle, 2, (uint16_t)g_native_rectangle.top); win16_write_u16(rectangle, 4, (uint16_t)g_native_rectangle.right); win16_write_u16(rectangle, 6, (uint16_t)g_native_rectangle.bottom); g_get_rect_calls++; return 1; } BOOL16 ScreenToClient16(HWND16 window, Win16FarPtr point) { int16_t x = (int16_t)win16_read_u16(point); int16_t y = (int16_t)win16_read_u16(win16_far_add_offset(point, 2)); win16_write_u16(point, 0, (uint16_t)(x - g_client_delta.x)); win16_write_u16(point, 2, (uint16_t)(y - g_client_delta.y)); g_screen_to_client_window = window; g_screen_to_client_calls++; return 1; } bool object_windows_has_flags(Win16FarPtr object, uint8_t mask) { assert(object == g_window && mask == 8); g_flag_calls++; return (win16_read_u8( win16_far_add_offset(object, WINDOW_FLAGS)) & mask) == mask; } Win16FarPtr win16_call_object_far_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == g_parent_getter && object == g_parent); g_parent_getter_calls++; return g_client_result; } void object_windows_prepare_window(Win16FarPtr window) { assert(window == g_window); g_prepare_calls++; } HWND16 SetFocus16(HWND16 window) { g_focused_window = window; g_focus_calls++; return 0x9999; } void win16_call_object_method( Win16FarPtr procedure, Win16FarPtr object) { assert(procedure == g_attached_setup && object == g_attached); g_attached_setup_calls++; } static void assert_placement( int16_t x, int16_t y, uint16_t width, uint16_t height) { assert((int16_t)win16_read_u16( win16_far_add_offset(g_window, WINDOW_X)) == x); assert((int16_t)win16_read_u16( win16_far_add_offset(g_window, WINDOW_Y)) == y); assert(win16_read_u16( win16_far_add_offset(g_window, WINDOW_WIDTH)) == width); assert(win16_read_u16( win16_far_add_offset(g_window, WINDOW_HEIGHT)) == height); } static void test_minimized_and_maximized_skip(void) { reset_fixture(); win16_write_u16(g_window, WINDOW_X, 0xaaaa); win16_write_u16(g_window, WINDOW_Y, 0xbbbb); win16_write_u16(g_window, WINDOW_WIDTH, 0xcccc); win16_write_u16(g_window, WINDOW_HEIGHT, 0xdddd); g_iconic = true; object_windows_capture_normal_placement(g_window); assert(g_is_iconic_calls == 1 && g_is_zoomed_calls == 0); assert(g_get_rect_calls == 0); assert_placement( (int16_t)0xaaaa, (int16_t)0xbbbb, 0xcccc, 0xdddd); g_iconic = false; g_zoomed = true; object_windows_capture_normal_placement(g_window); assert(g_is_iconic_calls == 2 && g_is_zoomed_calls == 1); assert(g_get_rect_calls == 0); } static void test_screen_and_parent_coordinates(void) { reset_fixture(); object_windows_capture_normal_placement(g_window); assert(g_get_rect_calls == 1 && g_screen_to_client_calls == 0); assert_placement(10, 20, 100, 200); reset_fixture(); write_far(g_window, WINDOW_PARENT, g_parent); g_client_result = g_client; win16_write_u8(win16_far_add_offset(g_window, WINDOW_FLAGS), 8); object_windows_capture_normal_placement(g_window); assert(g_parent_getter_calls == 1 && g_flag_calls == 1); assert(g_screen_to_client_calls == 1); assert(g_screen_to_client_window == 0x3333); assert_placement(7, 15, 100, 200); reset_fixture(); write_far(g_window, WINDOW_PARENT, g_parent); g_client_result = 0; win16_write_u32(g_window, WINDOW_ATTRIBUTES, 0x40000000U); object_windows_capture_normal_placement(g_window); assert(g_parent_getter_calls == 1 && g_flag_calls == 0); assert(g_screen_to_client_window == 0x2222); assert_placement(7, 15, 100, 200); reset_fixture(); write_far(g_window, WINDOW_PARENT, g_parent); g_client_result = g_client; object_windows_capture_normal_placement(g_window); assert(g_flag_calls == 1 && g_screen_to_client_calls == 0); assert_placement(10, 20, 100, 200); } static void test_setup_sequence(void) { reset_fixture(); win16_write_u8(win16_far_add_offset(g_window, WINDOW_FLAGS), 8); write_far(g_window, WINDOW_ATTACHED, g_attached); object_windows_setup_window(g_window); assert(g_prepare_calls == 1 && g_flag_calls == 1); assert(g_focus_calls == 1 && g_focused_window == 0x1111); assert(g_attached_setup_calls == 1); assert(g_get_rect_calls == 1); assert_placement(10, 20, 100, 200); reset_fixture(); object_windows_setup_window(g_window); assert(g_prepare_calls == 1 && g_flag_calls == 1); assert(g_focus_calls == 0 && g_attached_setup_calls == 0); assert(g_get_rect_calls == 1); } int main(void) { uint8_t stack_marker; uintptr_t stack_base = (uintptr_t)&stack_marker - 0x8000; win16_reset_segment_bindings(); win16_bind_segment(0x5000, g_dgroup, sizeof(g_dgroup), true); win16_bind_segment(0x6000, g_objects, sizeof(g_objects), true); win16_bind_segment(0x9000, (void *)stack_base, 0x10000, true); win16_set_dgroup_selector(0x5000); test_minimized_and_maximized_skip(); test_screen_and_parent_coordinates(); test_setup_sequence(); return 0; } _QuLxu}LSWkÆ})pabЍA!Hh@p齧s-60R 309bc%nY4LEl ,[n#y<'aYe-dP')u ջO*޸cq,U9L%"ЃO K]{p_-]ZƔCPY]ɞm8L]no*v!+ ="%~Y"[kKߛkɼM\|B K @(5Pc+ ])3ԌXIT(Qوo9xU>S6֤#. %& ]7Jt1B}W%:I k8l*-ظ[aelNd "C,U?0yI)=H;IgӢΠF%"P;K#znܾ6bPmS%R$("w4>dFNw{gعyzx*Vy`ID-xfC }4VtbǤ+&5/xS(?Mܲ}5t)Ygd"!o܈D*x 5vxX֖:׽0 eC̥_Wߪt+2"C1>vn|2}5aˇC^c/-bpER+/Kr՟k;(lYܙsý-׭Ά# s>D@-ֶbweRfnz? ƨ"xwZZ0q8߮nC)ʏ8jHGy )g{b?0wW={)[eC"@T5ԲY;bMMAǙ35qx// Apply Wine-11.15-backed Win16 import prototypes before decompilation. // @category TDKPIN import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import ghidra.app.script.GhidraScript; import ghidra.program.model.data.ByteDataType; import ghidra.program.model.data.CharDataType; import ghidra.program.model.data.DataType; import ghidra.program.model.data.IntegerDataType; import ghidra.program.model.data.PointerDataType; import ghidra.program.model.data.ShortDataType; import ghidra.program.model.data.UnsignedIntegerDataType; import ghidra.program.model.data.UnsignedShortDataType; import ghidra.program.model.data.VoidDataType; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Function.FunctionUpdateType; import ghidra.program.model.listing.Parameter; import ghidra.program.model.listing.ParameterImpl; import ghidra.program.model.listing.ReturnParameterImpl; import ghidra.program.model.symbol.SourceType; public class ApplyWin16ImportSignatures extends GhidraScript { private static final Pattern PROTOTYPE = Pattern.compile( "^pascal16(?(?: -\\S+)*) [A-Za-z0-9_@]+\\((?.*)\\)$"); @Override public void run() throws Exception { String[] args = getScriptArgs(); if (args.length != 1) { throw new IllegalArgumentException( "usage: ApplyWin16ImportSignatures.java IMPORT_RECONSTRUCTION.tsv"); } int applied = 0; int dataExports = 0; int registerExports = 0; try (BufferedReader reader = new BufferedReader(new FileReader(args[0]))) { String header = reader.readLine(); if (header == null) { throw new IllegalArgumentException("empty import ledger"); } Map columns = columns(header); String line; while ((line = reader.readLine()) != null && !monitor.isCancelled()) { String[] fields = line.split("\\t", -1); String status = field(fields, columns, "status"); if ("runtime-data".equals(status)) { dataExports++; continue; } String address = field(fields, columns, "address"); String prototype = field(fields, columns, "prototype"); Function function = getFunctionAt(toAddr(address)); if (function == null) { throw new IllegalStateException("missing imported function at " + address); } if (prototype.startsWith("pascal16 -register ")) { registerExports++; continue; } apply(function, prototype); applied++; } } analyzeAll(currentProgram); println("Applied " + applied + " Win16 import signatures; skipped " + dataExports + " runtime-data and " + registerExports + " register-entry slots"); } private void apply(Function function, String prototype) throws Exception { Matcher matcher = PROTOTYPE.matcher(prototype); if (!matcher.matches()) { throw new IllegalArgumentException( "unsupported prototype for " + function.getEntryPoint() + ": " + prototype); } List parameters = new ArrayList<>(); String arguments = matcher.group("arguments").trim(); if (!arguments.isEmpty()) { String[] tokens = arguments.contains(",") ? arguments.split(",") : arguments.split("\\s+"); for (int index = 0; index < tokens.length; index++) { String token = tokens[index].trim(); String[] words = token.split("\\s+"); DataType type = type(words[0]); String name = words.length > 1 ? words[words.length - 1] : "arg" + (index + 1); parameters.add(new ParameterImpl(name, type, currentProgram)); } } boolean ret16 = matcher.group("flags").contains("-ret16"); DataType returnType = ret16 ? UnsignedShortDataType.dataType : UnsignedIntegerDataType.dataType; ReturnParameterImpl returnParameter = new ReturnParameterImpl(returnType, currentProgram); function.updateFunction("__stdcall16far", returnParameter, FunctionUpdateType.DYNAMIC_STORAGE_ALL_PARAMS, true, SourceType.USER_DEFINED, parameters.toArray(Parameter[]::new)); } private DataType type(String name) { return switch (name) { case "byte" -> ByteDataType.dataType; case "s_byte" -> ByteDataType.dataType; case "word", "HWND16" -> UnsignedShortDataType.dataType; case "s_word" -> ShortDataType.dataType; case "long" -> UnsignedIntegerDataType.dataType; case "s_long" -> IntegerDataType.dataType; case "ptr", "segptr" -> new PointerDataType(VoidDataType.dataType, 4, currentProgram.getDataTypeManager()); case "str", "segstr" -> new PointerDataType(CharDataType.dataType, 4, currentProgram.getDataTypeManager()); default -> throw new IllegalArgumentException("unsupported Win16 argument type: " + name); }; } private Map columns(String header) { Map result = new HashMap<>(); String[] names = header.split("\\t", -1); for (int index = 0; index < names.length; index++) { result.put(names[index], index); } return result; } private String field(String[] fields, Map columns, String name) { Integer index = columns.get(name); if (index == null || index >= fields.length) { throw new IllegalArgumentException("missing import-ledger column: " + name); } return fields[index]; } } ex0// Report executable-segment instruction and function-body coverage for the current program. // @category TDKPIN import java.io.BufferedWriter; import java.io.FileWriter; import java.io.PrintWriter; import ghidra.app.script.GhidraScript; import ghidra.program.model.address.AddressSet; import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.FunctionIterator; import ghidra.program.model.listing.Instruction; import ghidra.program.model.listing.InstructionIterator; import ghidra.program.model.mem.MemoryBlock; public class AuditCoverage extends GhidraScript { @Override public void run() throws Exception { String[] args = getScriptArgs(); if (args.length != 1) { throw new IllegalArgumentException("usage: AuditCoverage.java OUTPUT_TSV"); } AddressSet executable = new AddressSet(); AddressSet instructions = new AddressSet(); AddressSet definedData = new AddressSet(); AddressSet functionBodies = new AddressSet(); int internalFunctions = 0; try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(args[0])))) { out.println("record\tname_or_start\tend\tbytes\tdetail"); for (MemoryBlock block : currentProgram.getMemory().getBlocks()) { String detail = String.format("r=%s,w=%s,x=%s,initialized=%s", block.isRead(), block.isWrite(), block.isExecute(), block.isInitialized()); out.printf("block\t%s\t%s\t%d\t%s%n", block.getName(), block.getEnd(), block.getSize(), detail); if (block.isExecute()) { executable.add(block.getStart(), block.getEnd()); } } InstructionIterator instructionIterator = currentProgram.getListing().getInstructions(executable, true); while (instructionIterator.hasNext()) { Instruction instruction = instructionIterator.next(); instructions.add(instruction.getMinAddress(), instruction.getMaxAddress()); } var dataIterator = currentProgram.getListing().getDefinedData(executable, true); while (dataIterator.hasNext()) { var data = dataIterator.next(); definedData.add(data.getMinAddress(), data.getMaxAddress()); } FunctionIterator functionIterator = currentProgram.getFunctionManager().getFunctions(true); while (functionIterator.hasNext()) { Function function = functionIterator.next(); MemoryBlock block = currentProgram.getMemory().getBlock(function.getEntryPoint()); if (!function.isExternal() && block != null && block.isExecute()) { internalFunctions++; functionBodies.add(function.getBody()); } } AddressSet explained = instructions.union(definedData); AddressSet undefined = executable.subtract(explained); out.printf("summary\texecutable-bytes\t\t%d\t%n", executable.getNumAddresses()); out.printf("summary\tdisassembled-bytes\t\t%d\t%.2f%% of executable%n", instructions.getNumAddresses(), percent(instructions, executable)); out.printf("summary\tdefined-data-bytes\t\t%d\t%.2f%% of executable%n", definedData.getNumAddresses(), percent(definedData, executable)); out.printf("summary\texplained-code-or-data-bytes\t\t%d\t%.2f%% of executable%n", explained.getNumAddresses(), percent(explained, executable)); out.printf("summary\tfunction-body-bytes\t\t%d\t%.2f%% of executable%n", functionBodies.intersect(executable).getNumAddresses(), percent(functionBodies, executable)); out.printf("summary\tinternal-functions\t\t%d\t%n", internalFunctions); out.printf("summary\tundefined-executable-bytes\t\t%d\t%n", undefined.getNumAddresses()); for (var range : undefined) { out.printf("undefined-range\t%s\t%s\t%d\t%n", range.getMinAddress(), range.getMaxAddress(), range.getLength()); } } } private double percent(AddressSetView numerator, AddressSetView denominator) { long total = denominator.getNumAddresses(); return total == 0 ? 0.0 : 100.0 * numerator.intersect(denominator).getNumAddresses() / total; } } ]x4##b n/ab n/a~\n/anot-in-listing`oxx// Export every function in the current Ghidra program as one traceable C-like file. // @category TDKPIN import java.io.BufferedWriter; import java.io.FileWriter; import java.io.PrintWriter; import ghidra.app.decompiler.DecompInterface; import ghidra.app.decompiler.DecompileResults; import ghidra.app.script.GhidraScript; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.FunctionIterator; import ghidra.program.model.mem.MemoryBlock; public class ExportDecompilation extends GhidraScript { @Override public void run() throws Exception { String[] args = getScriptArgs(); if (args.length != 2) { throw new IllegalArgumentException("usage: ExportDecompilation.java OUTPUT_C OUTPUT_TSV"); } DecompInterface decompiler = new DecompInterface(); decompiler.toggleCCode(true); decompiler.toggleSyntaxTree(true); if (!decompiler.openProgram(currentProgram)) { throw new IllegalStateException("cannot open program in decompiler"); } int total = 0; int internal = 0; int external = 0; int succeeded = 0; int failed = 0; try (PrintWriter c = new PrintWriter(new BufferedWriter(new FileWriter(args[0]))); PrintWriter ledger = new PrintWriter(new BufferedWriter(new FileWriter(args[1])))) { c.println("/*"); c.println(" * Raw Ghidra decompilation of TDKPIN.EXE."); c.println(" * Function boundaries and names are analysis artifacts, not original source symbols."); c.println(" */"); c.println(); ledger.println("address\tname\tkind\tstatus\tmessage"); FunctionIterator functions = currentProgram.getFunctionManager().getFunctions(true); while (functions.hasNext() && !monitor.isCancelled()) { Function function = functions.next(); total++; String address = function.getEntryPoint().toString(); String name = function.getName(); MemoryBlock block = currentProgram.getMemory().getBlock(function.getEntryPoint()); boolean imported = function.isExternal() || block == null || !block.isInitialized() || "EXTERNAL".equals(block.getName()); if (imported) { external++; ledger.printf("%s\t%s\texternal\tn/a\timported function%n", address, name); continue; } internal++; DecompileResults result = decompiler.decompileFunction(function, 120, monitor); c.printf("/* ===== %s %s ===== */%n", address, name); if (result.decompileCompleted() && result.getDecompiledFunction() != null) { c.println(result.getDecompiledFunction().getC()); succeeded++; ledger.printf("%s\t%s\tinternal\tok\t%n", address, name); } else { String message = result.getErrorMessage(); c.printf("/* DECOMPILATION FAILED: %s */%n%n", message); failed++; ledger.printf("%s\t%s\tinternal\tfailed\t%s%n", address, name, message == null ? "" : message.replace('\t', ' ').replace('\n', ' ')); } } c.printf("/* SUMMARY: total=%d internal=%d external=%d succeeded=%d failed=%d */%n", total, internal, external, succeeded, failed); println(String.format("Exported total=%d internal=%d external=%d succeeded=%d failed=%d", total, internal, external, succeeded, failed)); } finally { decompiler.dispose(); } } } v6nx{ for (String line : .getC().split("\\R", -1)) {a   line.stripTrailing()_   b F decompiled 8'x&\// Export function metadata, references, defined data, symbols, and unexplained // executable bytes for an auditable TDKPIN reconstruction ledger. // @category TDKPIN import java.io.BufferedWriter; import java.io.FileWriter; import java.io.PrintWriter; import ghidra.app.script.GhidraScript; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressRange; import ghidra.program.model.address.AddressSet; import ghidra.program.model.data.DataType; import ghidra.program.model.listing.Data; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.FunctionIterator; import ghidra.program.model.listing.Instruction; import ghidra.program.model.listing.InstructionIterator; import ghidra.program.model.mem.MemoryBlock; import ghidra.program.model.symbol.Reference; import ghidra.program.model.symbol.ReferenceIterator; import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.SymbolIterator; public class ExportProgramEvidence extends GhidraScript { @Override public void run() throws Exception { String[] args = getScriptArgs(); if (args.length != 5) { throw new IllegalArgumentException( "usage: ExportProgramEvidence.java FUNCTIONS REFERENCES DATA SYMBOLS UNEXPLAINED"); } exportFunctions(args[0]); exportReferences(args[1]); exportDefinedData(args[2]); exportSymbols(args[3]); exportUnexplainedExecutableBytes(args[4]); } private void exportFunctions(String path) throws Exception { try (PrintWriter out = writer(path)) { out.println("address\tname\tnamespace\tblock\tbody_bytes\tentry_kind\tcalling_convention" + "\tstack_purge_bytes\treturn_type\tparameter_count\tvarargs\tthunk"); FunctionIterator functions = currentProgram.getFunctionManager().getFunctions(true); while (functions.hasNext() && !monitor.isCancelled()) { Function function = functions.next(); Address address = function.getEntryPoint(); MemoryBlock block = currentProgram.getMemory().getBlock(address); boolean imported = function.isExternal() || block == null || !block.isInitialized() || "EXTERNAL".equals(block.getName()); String kind = imported ? "external" : "internal"; DataType returnType = function.getReturnType(); out.printf("%s\t%s\t%s\t%s\t%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s%n", address, clean(function.getName()), clean(function.getParentNamespace().getName()), block == null ? "" : clean(block.getName()), function.getBody().getNumAddresses(), kind, clean(function.getCallingConventionName()), function.getStackPurgeSize(), returnType == null ? "" : clean(returnType.getDisplayName()), function.getParameterCount(), function.hasVarArgs(), function.isThunk()); } } } private void exportReferences(String path) throws Exception { try (PrintWriter out = writer(path)) { out.println("from_address\tfrom_function\treference_type\toperand_index\tprimary" + "\tto_address\tto_block\tto_function\tto_symbol"); ReferenceIterator references = currentProgram.getReferenceManager() .getReferenceIterator(currentProgram.getMinAddress()); while (references.hasNext() && !monitor.isCancelled()) { Reference reference = references.next(); Address from = reference.getFromAddress(); Address to = reference.getToAddress(); Function fromFunction = currentProgram.getFunctionManager().getFunctionContaining(from); Function toFunction = currentProgram.getFunctionManager().getFunctionAt(to); MemoryBlock toBlock = currentProgram.getMemory().getBlock(to); Symbol toSymbol = currentProgram.getSymbolTable().getPrimarySymbol(to); out.printf("%s\t%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s%n", from, fromFunction == null ? "" : clean(fromFunction.getName()), clean(reference.getReferenceType().toString()), reference.getOperandIndex(), reference.isPrimary(), to, toBlock == null ? "" : clean(toBlock.getName()), toFunction == null ? "" : clean(toFunction.getName()), toSymbol == null ? "-" : clean(toSymbol.getName())); } } } private void exportDefinedData(String path) throws Exception { try (PrintWriter out = writer(path)) { out.println("address\tblock\tlength\tdata_type\tlabel\tvalue"); var dataIterator = currentProgram.getListing().getDefinedData(true); while (dataIterator.hasNext() && !monitor.isCancelled()) { Data data = dataIterator.next(); MemoryBlock block = currentProgram.getMemory().getBlock(data.getAddress()); Symbol symbol = currentProgram.getSymbolTable().getPrimarySymbol(data.getAddress()); out.printf("%s\t%s\t%d\t%s\t%s\t%s%n", data.getAddress(), block == null ? "" : clean(block.getName()), data.getLength(), clean(data.getDataType().getDisplayName()), symbol == null ? "" : clean(symbol.getName()), data.getDefaultValueRepresentation().isEmpty() ? "-" : clean(data.getDefaultValueRepresentation())); } } } private void exportSymbols(String path) throws Exception { try (PrintWriter out = writer(path)) { out.println("address\tblock\tname\tsymbol_type\tsource\tprimary\tdynamic"); SymbolIterator symbols = currentProgram.getSymbolTable().getAllSymbols(true); while (symbols.hasNext() && !monitor.isCancelled()) { Symbol symbol = symbols.next(); Address address = symbol.getAddress(); MemoryBlock block = currentProgram.getMemory().getBlock(address); out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s%n", address, block == null ? "" : clean(block.getName()), clean(symbol.getName()), clean(symbol.getSymbolType().toString()), clean(symbol.getSource().toString()), symbol.isPrimary(), symbol.isDynamic()); } } } private void exportUnexplainedExecutableBytes(String path) throws Exception { AddressSet executable = new AddressSet(); AddressSet explained = new AddressSet(); for (MemoryBlock block : currentProgram.getMemory().getBlocks()) { if (block.isExecute()) { executable.add(block.getStart(), block.getEnd()); } } InstructionIterator instructions = currentProgram.getListing().getInstructions(executable, true); while (instructions.hasNext()) { Instruction instruction = instructions.next(); explained.add(instruction.getMinAddress(), instruction.getMaxAddress()); } var dataIterator = currentProgram.getListing().getDefinedData(executable, true); while (dataIterator.hasNext()) { Data data = dataIterator.next(); explained.add(data.getMinAddress(), data.getMaxAddress()); } AddressSet unexplained = executable.subtract(explained); try (PrintWriter out = writer(path)) { out.println("start\tend\tbytes\thex\tclassification\tevidence"); for (AddressRange range : unexplained) { int length = Math.toIntExact(range.getLength()); byte[] bytes = new byte[length]; currentProgram.getMemory().getBytes(range.getMinAddress(), bytes); String[] classification = classifyUnexplained(range); out.printf("%s\t%s\t%d\t%s\t%s\t%s%n", range.getMinAddress(), range.getMaxAddress(), length, hex(bytes), classification[0], classification[1]); } } } private String[] classifyUnexplained(AddressRange range) { String start = range.getMinAddress().toString(); String end = range.getMaxAddress().toString(); if ("1020:0666".equals(start) && start.equals(end)) { return new String[] { "overlapping-entry-opcode", "BA 33 D2 is mov dx,0xd233 at 0666; entry 0667 intentionally decodes 33 D2 as xor dx,dx" }; } if ("1020:0dea".equals(start) && start.equals(end)) { return new String[] { "alignment", "single NOP between the 0d97 and 0e93 Borland runtime routines" }; } return new String[] {"unclassified", ""}; } private PrintWriter writer(String path) throws Exception { return new PrintWriter(new BufferedWriter(new FileWriter(path))); } private String clean(String value) { if (value == null) { return ""; } return value.replace('\t', ' ').replace('\r', ' ').replace('\n', ' '); } private String hex(byte[] bytes) { StringBuilder result = new StringBuilder(bytes.length * 2); for (byte value : bytes) { result.append(String.format("%02x", value & 0xff)); } return result.toString(); } } eekx// Seed NE entry points that Ghidra 12.1's automatic analysis leaves undefined. // @category TDKPIN import ghidra.app.script.GhidraScript; import ghidra.program.model.address.Address; import ghidra.program.model.data.ArrayDataType; import ghidra.program.model.data.ByteDataType; import ghidra.program.model.data.WordDataType; import ghidra.program.model.listing.Function; import ghidra.program.model.symbol.SourceType; public class SeedMissingEntrypoints extends GhidraScript { @Override public void run() throws Exception { // Segment tags, compiler tables, and embedded Real48 constants must be // defined before missed code is disassembled so linear sweep cannot // consume them as instructions. defineWords("1000:0000", 1, "code_segment_1_tag"); defineWords("1000:026e", 1, "code1_embedded_word_026e"); defineWords("1008:0000", 1, "code_segment_2_tag"); defineWords("1008:0f2c", 1, "code2_embedded_word_0f2c"); defineWords("1008:11bd", 4, "code2_embedded_words_11bd"); defineWords("1008:131e", 4, "code2_embedded_words_131e"); defineWords("1010:0000", 1, "code_segment_3_tag"); defineWords("1010:0470", 1, "code3_embedded_word_0470"); defineWords("1018:0000", 1, "code_segment_4_tag"); defineWords("1020:0000", 1, "code_segment_5_tag"); defineBytes("1020:0107", 38, "borland_runtime_copyright"); defineBytes("1020:1191", 42, "real48_table_1191"); defineBytes("1020:1240", 36, "real48_table_1240"); defineBytes("1020:12d7", 48, "real48_table_12d7"); defineBytes("1020:13e8", 78, "real48_table_13e8"); seed("1000:eaB1", "exported_ordinal_10"); seed("1000:fd85", "ne_program_entry"); // Ghidra's NE entry analysis misses a set of unreferenced Borland // runtime routines in Code5. These starts are backed by complete x86 // prologue/control-flow/return sequences in the target bytes. seed("1020:0195", "runtime_1020_0195"); seed("1020:03c5", "runtime_1020_03c5"); seed("1020:046c", "runtime_1020_046c"); seed("1020:048f", "runtime_1020_048f"); seed("1020:049f", "runtime_1020_049f"); seed("1020:04fc", "runtime_1020_04fc"); seed("1020:0710", "runtime_1020_0710"); seed("1020:0760", "runtime_1020_0760"); seed("1020:0796", "runtime_1020_0796"); seed("1020:0866", "runtime_1020_0866"); seed("1020:098c", "runtime_1020_098c"); seed("1020:09af", "runtime_1020_09af"); seed("1020:09d2", "runtime_1020_09d2"); seed("1020:0aee", "runtime_1020_0aee"); seed("1020:103b", "runtime_1020_103b"); seed("1020:1045", "runtime_1020_1045"); seed("1020:1059", "runtime_1020_1059"); seed("1020:10aa", "runtime_1020_10aa"); seed("1020:111d", "runtime_1020_111d"); seed("1020:11bb", "runtime_1020_11bb"); seed("1020:1264", "runtime_1020_1264"); seed("1020:1307", "runtime_1020_1307"); seed("1020:1436", "runtime_1020_1436"); seed("1020:14de", "runtime_1020_14de"); seed("1020:1539", "runtime_1020_1539"); seed("1020:16dd", "runtime_1020_16dd"); // These are proven code bytes that either complete an existing // function or form an alternate entry sharing a tail with one. Ghidra // does not permit all such Borland entry variants to be separate, // overlapping function bodies, but the instruction bytes still belong // in executable coverage and the reconstruction ledger. disassembleOnly("1018:012f"); disassembleOnly("1020:0531"); disassembleOnly("1020:0582"); disassembleOnly("1020:0666"); disassembleOnly("1020:06b4"); disassembleOnly("1020:0767"); disassembleOnly("1020:079d"); disassembleOnly("1020:100f"); analyzeAll(currentProgram); } private void defineWords(String text, int count, String name) throws Exception { Address address = toAddr(text); if (getDataAt(address) == null) { createData(address, new ArrayDataType(WordDataType.dataType, count, 2)); } createLabel(address, name, true); println("Defined " + count + " word(s) at " + address + " as " + name); } private void defineBytes(String text, int count, String name) throws Exception { Address address = toAddr(text); if (getDataAt(address) == null) { createData(address, new ArrayDataType(ByteDataType.dataType, count, 1)); } createLabel(address, name, true); println("Defined " + count + " byte(s) at " + address + " as " + name); } private void disassembleOnly(String text) { Address address = toAddr(text); disassemble(address); println("Disassembled shared/tail entry at " + address); } private void seed(String text, String name) throws Exception { Address address = toAddr(text); disassemble(address); Function function = getFunctionAt(address); if (function == null) { function = createFunction(address, name); } if (function != null && !name.equals(function.getName())) { function.setName(name, SourceType.USER_DEFINED); } println("Seeded " + name + " at " + address); } } :!Jx[#define _GNU_SOURCE #include #include #include #include /* * Wine's Win16 process is re-parented during startup, so Linux's default Yama * policy rejects a later same-user debugger attach. This preload helper only * relaxes that relationship check for the process into which it is loaded. * Normal uid-based ptrace permission checks still apply. */ static void apply_ptrace_policy(void) { (void)prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); (void)prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); } static void *reapply_ptrace_policy(void *unused) { const struct timespec interval = {.tv_sec = 0, .tv_nsec = 250000000}; (void)unused; /* Wine adjusts process policy during bootstrap; outlast those updates. */ for (unsigned int attempt = 0; attempt < 20; attempt++) { (void)nanosleep(&interval, NULL); apply_ptrace_policy(); } return NULL; } __attribute__((constructor)) static void allow_same_user_debugger(void) { pthread_t worker; apply_ptrace_policy(); if (pthread_create(&worker, NULL, reapply_ptrace_policy, NULL) == 0) { (void)pthread_detach(worker); } } b)xts#!/usr/bin/env python3 """Audit the exact binary-to-readable-C reconstruction boundary for TDKPIN.""" from __future__ import annotations import argparse import csv import hashlib import json import re from collections import Counter from pathlib import Path ROOT = Path(__file__).resolve().parent.parent TARGET_SHA256 = "a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c" PRESERVED_RAW_SHA256 = ( "987a47580ba5c92fa071c989bdaeddf138e285d2b07106c5909a4acbc3e27088" ) LEDGER_COLUMNS = ( "address", "raw_name", "segment", "body_bytes", "status", "reconstructed_name", "module", "evidence", "notes", ) STATUS_ORDER = ("raw", "partial", "restored", "verified", "unknown", "blocked") ALLOWED_STATUSES = set(STATUS_ORDER) RAW_MARKER = re.compile(r"^/\* ===== ([0-9a-f]{4}:[0-9a-f]{4}) (\S+) ===== \*/$") IMPORT_COLUMNS = ( "address", "library", "import_name", "stack_purge_bytes", "call_sites", "status", "stage", "prototype", "evidence", "notes", ) SHARED_ENTRY_COLUMNS = ( "address", "containing_function", "status", "reconstructed_name", "evidence", "notes", ) CODE_DATA_COLUMNS = ( "start", "end", "bytes", "status", "object_id", "object_name", "c_type", "initialization", "readers", "evidence", "notes", ) # These routines have readable companion fragments, but none yet has a complete, # standalone, binary-faithful implementation. Keep them partial until the whole # raw function has been reviewed and all callees/types are resolved. PARTIAL_FUNCTIONS = {} CALLBACK_APIS = { "REGISTERCLASS", "SYSTEMTIMERMAKE", "DIALOGBOXPARAM", "CREATEDIALOGPARAM", "MAKEPROCINSTANCE", } def read_tsv(path: Path) -> list[dict[str, str]]: with path.open(newline="", encoding="utf-8") as handle: return list(csv.DictReader(handle, delimiter="\t")) def internal_functions() -> list[dict[str, str]]: rows = read_tsv(ROOT / "BINARY_FUNCTIONS.tsv") return [row for row in rows if row["entry_kind"] == "internal"] def initialize_ledger(path: Path) -> None: if path.exists(): raise SystemExit(f"refusing to overwrite existing ledger: {path}") rows = [] for function in internal_functions(): partial = PARTIAL_FUNCTIONS.get(function["address"]) rows.append( { "address": function["address"], "raw_name": function["name"], "segment": function["block"], "body_bytes": function["body_bytes"], "status": "partial" if partial else "raw", "reconstructed_name": partial[0] if partial else "", "module": partial[1] if partial else "", "evidence": partial[2] if partial else "decompiler-only", "notes": ( "Readable fragment exists; full function and dependencies remain pending." if partial else "No reviewed readable-C implementation yet." ), } ) with path.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=LEDGER_COLUMNS, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) def sync_ledger(path: Path) -> None: """Add newly recovered functions while preserving manual semantic work.""" if not path.exists(): raise SystemExit(f"cannot sync missing ledger: {path}") existing = {row["address"]: row for row in read_tsv(path)} functions = internal_functions() current_addresses = {function["address"] for function in functions} removed = set(existing) - current_addresses if removed: raise SystemExit( "refusing to discard ledger rows: " + ", ".join(sorted(removed)) ) rows = [] for function in functions: row = existing.get(function["address"]) if row is None: row = { "address": function["address"], "status": "raw", "reconstructed_name": "", "module": "", "evidence": "decompiler-only", "notes": "Newly recovered function; no reviewed readable-C implementation yet.", } row["raw_name"] = function["name"] row["segment"] = function["block"] row["body_bytes"] = function["body_bytes"] rows.append(row) temporary = path.with_suffix(path.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=LEDGER_COLUMNS, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(path) def write_tsv( path: Path, columns: tuple[str, ...], rows: list[dict[str, object]] ) -> None: if path.exists(): raise SystemExit(f"refusing to overwrite existing ledger: {path}") with path.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) def initialize_support_ledgers() -> None: functions = read_tsv(ROOT / "BINARY_FUNCTIONS.tsv") references = read_tsv(ROOT / "REFERENCES.tsv") calls_by_target = Counter( row["to_address"] for row in references if "CALL" in row["reference_type"] ) imports = [row for row in functions if row["entry_kind"] == "external"] write_tsv( ROOT / "IMPORT_RECONSTRUCTION.tsv", IMPORT_COLUMNS, [ { "address": row["address"], "library": row["namespace"], "import_name": row["name"], "stack_purge_bytes": row["stack_purge_bytes"], "call_sites": calls_by_target[row["address"]], "status": "unknown", "stage": "untyped-import", "prototype": "", "evidence": "NE import+Ghidra reference export", "notes": "Win16 prototype and every call site remain to be reviewed.", } for row in imports ], ) data_references: dict[str, list[dict[str, str]]] = {} for row in references: if row["to_block"] == "Data6": data_references.setdefault(row["to_address"], []).append(row) write_tsv( ROOT / "DATA_RECONSTRUCTION.tsv", ( "address", "status", "object_name", "type", "extent_start", "extent_end", "reads", "writes", "referring_functions", "initialization", "evidence", "notes", ), [ { "address": address, "status": "unknown", "stage": "candidate-address", "object_name": next( (row["to_symbol"] for row in rows if row["to_symbol"]), "" ), "type": "", "extent_start": address, "extent_end": address, "reads": sum("READ" in row["reference_type"] for row in rows), "writes": sum("WRITE" in row["reference_type"] for row in rows), "referring_functions": ",".join( sorted( {row["from_function"] for row in rows if row["from_function"]} ) ), "initialization": "", "evidence": "Ghidra DGROUP references", "notes": "Candidate address; semantic object boundary and type remain unresolved.", } for address, rows in sorted(data_references.items()) ], ) manifest = json.loads((ROOT / "assets/manifest.json").read_text(encoding="utf-8")) write_tsv( ROOT / "RESOURCE_RECONSTRUCTION.tsv", ( "type", "id", "file_offset", "allocated_size", "raw_sha256", "raw_path", "decoded_paths", "status", "users", "behavior", "notes", ), [ { "type": resource["type"], "id": resource["id"], "file_offset": resource["file_offset"], "allocated_size": resource["allocated_size"], "raw_sha256": resource["raw_sha256"], "raw_path": resource["raw_path"], "decoded_paths": ",".join(resource.get("decoded_paths", [])), "status": "partial", "stage": "extracted-unmapped", "users": "", "behavior": "", "notes": "Lossless extraction is verified; code users and behavior remain to be mapped.", } for resource in manifest["resources"] ], ) callback_rows = [] for row in references: if row["to_symbol"] in CALLBACK_APIS and "CALL" in row["reference_type"]: callback_rows.append( { "registration_site": row["from_address"], "registering_function": row["from_function"], "api": row["to_symbol"], "status": "unknown", "stage": "registration-site", "callback_address": "", "callback_name": "", "lifetime": "", "evidence": "Ghidra call reference", "notes": "Recover callback argument through Win16 ABI and stored state.", } ) write_tsv( ROOT / "CALLBACK_RECONSTRUCTION.tsv", ( "registration_site", "registering_function", "api", "status", "stage", "callback_address", "callback_name", "lifetime", "evidence", "notes", ), callback_rows, ) def sync_support_ledgers() -> None: path = ROOT / "IMPORT_RECONSTRUCTION.tsv" if not path.exists(): raise SystemExit(f"cannot sync missing ledger: {path}") existing = {row["address"]: row for row in read_tsv(path)} import_statuses = { "unreviewed": ("unknown", "untyped-import"), "prototype-sourced": ("partial", "prototype-sourced"), "binary-reviewed": ("verified", "binary-reviewed"), "runtime-data": ("verified", "runtime-data"), } for row in existing.values(): if not row.get("stage"): row["status"], row["stage"] = import_statuses.get( row["status"], (row["status"], row["status"]) ) functions = read_tsv(ROOT / "BINARY_FUNCTIONS.tsv") imports = [row for row in functions if row["entry_kind"] == "external"] references = read_tsv(ROOT / "REFERENCES.tsv") calls_by_target = Counter( row["to_address"] for row in references if "CALL" in row["reference_type"] ) current_addresses = {row["address"] for row in imports} removed = set(existing) - current_addresses if removed: raise SystemExit( "refusing to discard import-ledger rows: " + ", ".join(sorted(removed)) ) rows = [] for function in imports: row = existing.get(function["address"]) if row is None: row = { "address": function["address"], "status": "unknown", "stage": "untyped-import", "prototype": "", "evidence": "NE import+Ghidra reference export", "notes": "Win16 prototype and every call site remain to be reviewed.", } row["library"] = function["namespace"] row["import_name"] = function["name"] row["stack_purge_bytes"] = function["stack_purge_bytes"] row["call_sites"] = calls_by_target[function["address"]] rows.append(row) temporary = path.with_suffix(path.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=IMPORT_COLUMNS, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(path) normalize_support_statuses( ROOT / "DATA_RECONSTRUCTION.tsv", {"unresolved": ("unknown", "candidate-address")}, ) normalize_support_statuses( ROOT / "RESOURCE_RECONSTRUCTION.tsv", {"extracted-unmapped": ("partial", "extracted-unmapped")}, ) normalize_support_statuses( ROOT / "CALLBACK_RECONSTRUCTION.tsv", {"unresolved": ("unknown", "registration-site")}, ) def normalize_support_statuses(path: Path, mapping: dict[str, tuple[str, str]]) -> None: with path.open(newline="", encoding="utf-8") as handle: reader = csv.DictReader(handle, delimiter="\t") columns = list(reader.fieldnames or ()) rows = list(reader) if "stage" not in columns: columns.insert(columns.index("status") + 1, "stage") for row in rows: if not row.get("stage"): row["status"], row["stage"] = mapping.get( row["status"], (row["status"], row["status"]) ) temporary = path.with_suffix(path.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(path) def require(condition: bool, message: str, failures: list[str]) -> None: if not condition: failures.append(message) def status_summary(rows: list[dict[str, str]]) -> str: counts = Counter(row["status"] for row in rows) return ",".join(f"{status}:{counts[status]}" for status in STATUS_ORDER) def dgroup_offset(address: str) -> int: selector, value = address.split(":", 1) if selector != "1028": raise ValueError(f"not a DGROUP address: {address}") return int(value, 16) def audit(require_complete: bool = False) -> int: failures: list[str] = [] digest = hashlib.sha256((ROOT / "TDKPIN.EXE").read_bytes()).hexdigest() require(digest == TARGET_SHA256, f"target SHA-256 changed: {digest}", failures) preserved_raw_digest = hashlib.sha256( (ROOT / "TDKPIN_GHIDRA_RAW.c").read_bytes() ).hexdigest() require( preserved_raw_digest == PRESERVED_RAW_SHA256, f"preserved raw decompiler evidence changed: {preserved_raw_digest}", failures, ) functions = internal_functions() function_by_address = {row["address"]: row for row in functions} require( len(function_by_address) == len(functions), "duplicate binary function addresses", failures, ) raw_markers: dict[str, str] = {} for line in ( (ROOT / "TDKPIN_GHIDRA_COMPLETE_RAW.c").read_text(encoding="utf-8").splitlines() ): match = RAW_MARKER.match(line) if match: raw_markers[match.group(1)] = match.group(2) require( set(raw_markers) == set(function_by_address), "raw decompilation/function inventory mismatch", failures, ) ledger_path = ROOT / "FUNCTION_RECONSTRUCTION.tsv" require(ledger_path.exists(), "FUNCTION_RECONSTRUCTION.tsv is missing", failures) ledger = read_tsv(ledger_path) if ledger_path.exists() else [] ledger_by_address = {row["address"]: row for row in ledger} require( len(ledger_by_address) == len(ledger), "duplicate reconstruction-ledger addresses", failures, ) require( set(ledger_by_address) == set(function_by_address), "reconstruction ledger/function inventory mismatch", failures, ) for address, row in ledger_by_address.items(): function = function_by_address[address] require( row["status"] in ALLOWED_STATUSES, f"{address}: invalid status {row['status']!r}", failures, ) require( row["raw_name"] == function["name"], f"{address}: raw name drift", failures ) require( row["segment"] == function["block"], f"{address}: segment drift", failures ) require( row["body_bytes"] == function["body_bytes"], f"{address}: body-size drift", failures, ) if row["status"] in {"restored", "verified"}: require( bool(row["reconstructed_name"]), f"{address}: restored row lacks a name", failures, ) require( bool(row["module"]), f"{address}: restored row lacks a module", failures ) require( (ROOT / row["module"]).is_file(), f"{address}: module does not exist", failures, ) coverage = read_tsv(ROOT / "COMPLETE_COVERAGE.tsv") summaries = { row["name_or_start"]: row["bytes"] for row in coverage if row["record"] == "summary" } executable_exceptions = read_tsv(ROOT / "UNEXPLAINED.tsv") executable_exception_bytes = sum( int(row["bytes"]) for row in executable_exceptions ) unclassified = [ row for row in executable_exceptions if row["classification"] == "unclassified" ] require( executable_exception_bytes == int(summaries["undefined-executable-bytes"]), "exception-byte evidence does not match coverage summary", failures, ) references = read_tsv(ROOT / "REFERENCES.tsv") data_targets = { row["to_address"] for row in references if row["to_block"] == "Data6" } objects = read_tsv(ROOT / "OBJECTS.tsv") require( len(objects) == 175, f"expected 175 collision records, found {len(objects)}", failures, ) support_ledgers = ( "IMPORT_RECONSTRUCTION.tsv", "DATA_RECONSTRUCTION.tsv", "DATA_COVERAGE.tsv", "DATA_OBJECTS.tsv", "CODE_DATA_OBJECTS.tsv", "RESOURCE_RECONSTRUCTION.tsv", "CALLBACK_RECONSTRUCTION.tsv", "NE_SEGMENTS.tsv", "ENTRY_POINTS.tsv", "MODULE_REFERENCES.tsv", "RELOCATIONS.tsv", "SHARED_ENTRY_POINTS.tsv", ) for name in support_ledgers: require((ROOT / name).exists(), f"{name} is missing", failures) shared_entries = read_tsv(ROOT / "SHARED_ENTRY_POINTS.tsv") for row in shared_entries: require( tuple(row) == SHARED_ENTRY_COLUMNS, f"shared entry {row.get('address', '?')}: schema drift", failures, ) require( row["status"] in ALLOWED_STATUSES, f"shared entry {row['address']}: invalid status {row['status']!r}", failures, ) require( row["containing_function"] in function_by_address, f"shared entry {row['address']}: unknown containing function", failures, ) require( bool(row["reconstructed_name"]), f"shared entry {row['address']}: missing readable name", failures, ) import_ledger: list[dict[str, str]] = [] data_ledger: list[dict[str, str]] = [] data_coverage: list[dict[str, str]] = [] data_objects: list[dict[str, str]] = [] code_data_objects: list[dict[str, str]] = [] resource_ledger: list[dict[str, str]] = [] if ROOT.joinpath("IMPORT_RECONSTRUCTION.tsv").exists(): import_ledger = read_tsv(ROOT / "IMPORT_RECONSTRUCTION.tsv") external_addresses = { row["address"] for row in read_tsv(ROOT / "BINARY_FUNCTIONS.tsv") if row["entry_kind"] == "external" } require( {row["address"] for row in import_ledger} == external_addresses, "import ledger/inventory mismatch", failures, ) for row in import_ledger: require( row["status"] in ALLOWED_STATUSES, f"import {row['address']}: invalid status {row['status']!r}", failures, ) if ROOT.joinpath("DATA_RECONSTRUCTION.tsv").exists(): data_ledger = read_tsv(ROOT / "DATA_RECONSTRUCTION.tsv") require( {row["address"] for row in data_ledger} == data_targets, "data ledger/reference-target mismatch", failures, ) for row in data_ledger: require( row["status"] in ALLOWED_STATUSES, f"data {row['address']}: invalid status {row['status']!r}", failures, ) if ROOT.joinpath("DATA_COVERAGE.tsv").exists(): data_coverage = read_tsv(ROOT / "DATA_COVERAGE.tsv") next_offset = 0 for row in data_coverage: start = dgroup_offset(row["start"]) end = dgroup_offset(row["end"]) require( start == next_offset, f"DGROUP coverage gap/overlap at {row['start']}", failures, ) require( end >= start, f"invalid DGROUP coverage range at {row['start']}", failures, ) require( int(row["bytes"]) == end - start + 1, f"DGROUP range length mismatch at {row['start']}", failures, ) require( row["status"] in ALLOWED_STATUSES, f"DGROUP range {row['start']}: invalid status {row['status']!r}", failures, ) next_offset = end + 1 require( next_offset == 0x4D3A, f"DGROUP coverage ends at {next_offset:04x}", failures, ) if ROOT.joinpath("DATA_OBJECTS.tsv").exists(): data_objects = read_tsv(ROOT / "DATA_OBJECTS.tsv") previous_end = -1 for row in sorted(data_objects, key=lambda item: dgroup_offset(item["start"])): start = dgroup_offset(row["start"]) end = dgroup_offset(row["end"]) require( start > previous_end, f"overlapping data object at {row['start']}", failures, ) require( row["status"] in ALLOWED_STATUSES, f"data object {row['object_id']}: invalid status {row['status']!r}", failures, ) previous_end = end if ROOT.joinpath("CODE_DATA_OBJECTS.tsv").exists(): code_data_objects = read_tsv(ROOT / "CODE_DATA_OBJECTS.tsv") code_data_inventory = { row["address"]: int(row["length"]) for row in read_tsv(ROOT / "DEFINED_DATA.tsv") if row["block"].startswith("Code") } require( {row["start"]: int(row["bytes"]) for row in code_data_objects} == code_data_inventory, "code-data ledger/defined-data inventory mismatch", failures, ) for row in code_data_objects: require( tuple(row) == CODE_DATA_COLUMNS, f"code-data object {row.get('start', '?')}: schema drift", failures, ) start_selector, start_text = row["start"].split(":", 1) end_selector, end_text = row["end"].split(":", 1) require( start_selector == end_selector, f"code-data object {row['start']}: crosses segments", failures, ) require( int(row["bytes"]) == int(end_text, 16) - int(start_text, 16) + 1, f"code-data object {row['start']}: extent mismatch", failures, ) require( row["status"] in ALLOWED_STATUSES, f"code-data object {row['object_id']}: invalid status {row['status']!r}", failures, ) if ROOT.joinpath("RESOURCE_RECONSTRUCTION.tsv").exists(): resource_ledger = read_tsv(ROOT / "RESOURCE_RECONSTRUCTION.tsv") manifest = json.loads( (ROOT / "assets/manifest.json").read_text(encoding="utf-8") ) resource_keys = { (str(row["type"]), str(row["id"])) for row in manifest["resources"] } require( {(row["type"], row["id"]) for row in resource_ledger} == resource_keys, "resource ledger/manifest mismatch", failures, ) for row in resource_ledger: require( row["status"] in ALLOWED_STATUSES, f"resource {row['type']}:{row['id']}: invalid status {row['status']!r}", failures, ) callback_ledger = ( read_tsv(ROOT / "CALLBACK_RECONSTRUCTION.tsv") if ROOT.joinpath("CALLBACK_RECONSTRUCTION.tsv").exists() else [] ) entry_points = ( read_tsv(ROOT / "ENTRY_POINTS.tsv") if ROOT.joinpath("ENTRY_POINTS.tsv").exists() else [] ) relocations = ( read_tsv(ROOT / "RELOCATIONS.tsv") if ROOT.joinpath("RELOCATIONS.tsv").exists() else [] ) require( len(entry_points) == 301, f"expected 301 NE entries, found {len(entry_points)}", failures, ) for row in callback_ledger: require( row["status"] in ALLOWED_STATUSES, f"callback {row['registration_site']}: invalid status {row['status']!r}", failures, ) if require_complete: require( not unclassified, "completion requires zero unclassified ranges", failures ) for label, rows in ( ("function", ledger), ("import", import_ledger), ("data", data_ledger), ("DGROUP coverage", data_coverage), ("data object", data_objects), ("code-data object", code_data_objects), ("resource", resource_ledger), ("callback", callback_ledger), ("shared entry", shared_entries), ): incomplete = [row for row in rows if row["status"] != "verified"] require( not incomplete, f"completion requires every {label} row verified; {len(incomplete)} remain", failures, ) print(f"target_sha256={digest}") print(f"preserved_raw_sha256={preserved_raw_digest}") print(f"internal_functions={len(functions)}") print(f"function_statuses={status_summary(ledger)}") print(f"import_statuses={status_summary(import_ledger)}") print(f"data_statuses={status_summary(data_ledger)}") print(f"data_range_statuses={status_summary(data_coverage)}") print(f"data_object_statuses={status_summary(data_objects)}") print(f"code_data_object_statuses={status_summary(code_data_objects)}") print(f"resource_statuses={status_summary(resource_ledger)}") print(f"callback_statuses={status_summary(callback_ledger)}") print(f"shared_entry_statuses={status_summary(shared_entries)}") print(f"executable_bytes={summaries['executable-bytes']}") print(f"classified_executable_exception_ranges={len(executable_exceptions)}") print(f"classified_executable_exception_bytes={executable_exception_bytes}") print(f"unclassified_executable_ranges={len(unclassified)}") print(f"defined_data_units={len(read_tsv(ROOT / 'DEFINED_DATA.tsv'))}") print(f"referenced_data_addresses={len(data_targets)}") print(f"collision_records={len(objects)}") print(f"ne_entry_points={len(entry_points)}") print(f"relocation_sites={len(relocations)}") if failures: for failure in failures: print(f"FAIL: {failure}") return 1 print("ledger_consistency=pass") return 0 def main() -> int: parser = argparse.ArgumentParser() parser.add_argument( "--initialize", action="store_true", help="create the initial function ledger" ) parser.add_argument( "--sync", action="store_true", help="add newly recovered functions to the ledger", ) parser.add_argument( "--initialize-support-ledgers", action="store_true", help="create import, data, resource, and callback ledgers", ) parser.add_argument( "--sync-support-ledgers", action="store_true", help="refresh mechanically derived support-ledger fields", ) parser.add_argument( "--require-complete", action="store_true", help="fail unless every required ledger row is verified", ) args = parser.parse_args() if args.initialize: initialize_ledger(ROOT / "FUNCTION_RECONSTRUCTION.tsv") if args.sync: sync_ledger(ROOT / "FUNCTION_RECONSTRUCTION.tsv") if args.initialize_support_ledgers: initialize_support_ledgers() if args.sync_support_ledgers: sync_support_ledgers() return audit(args.require_complete) if __name__ == "__main__": raise SystemExit(main()) {ټx*#!/usr/bin/env python3 """Build a byte-complete, non-overlapping DGROUP reconstruction ledger.""" from __future__ import annotations import csv import hashlib from itertools import pairwise from pathlib import Path ROOT = Path(__file__).resolve().parent.parent OUTPUT = ROOT / "DATA_COVERAGE.tsv" COLUMNS = ( "start", "end", "bytes", "storage", "status", "stage", "object_id", "object_name", "c_type", "initial_value", "readers", "writers", "relocations", "evidence", "notes", ) RELOCATION_WIDTHS = { "low-byte": 1, "selector-16": 2, "far-pointer-32": 4, "offset-16": 2, "offset-32": 4, "pointer-48": 6, } def read_tsv(path: Path) -> list[dict[str, str]]: with path.open(newline="", encoding="utf-8") as handle: return list(csv.DictReader(handle, delimiter="\t")) def offset(address: str) -> int: selector, value = address.split(":", 1) if selector != "1028": raise ValueError(f"not a DGROUP address: {address}") return int(value, 16) def address(value: int) -> str: return f"1028:{value:04x}" def initial_value(payload: bytes, start: int, end: int, file_length: int) -> str: if start >= file_length: return "zero-fill" value = payload[start : min(end + 1, file_length)] if end + 1 > file_length: value += bytes(end + 1 - file_length) if len(value) <= 32: return value.hex() return f"sha256:{hashlib.sha256(value).hexdigest()}" def project_semantic_objects( objects: list[dict[str, str]], ) -> None: path = ROOT / "DATA_RECONSTRUCTION.tsv" rows = read_tsv(path) with path.open(newline="", encoding="utf-8") as handle: columns = tuple(csv.DictReader(handle, delimiter="\t").fieldnames or ()) for row in rows: anchor = offset(row["address"]) matches = [ item for item in objects if offset(item["start"]) <= anchor <= offset(item["end"]) ] if len(matches) > 1: raise ValueError(f"overlapping semantic objects at {row['address']}") if not matches: continue item = matches[0] row["status"] = item["status"] row["stage"] = "semantic-object-field" row["object_name"] = item["object_name"] row["type"] = item["c_type"] row["extent_start"] = item["start"] row["extent_end"] = item["end"] row["initialization"] = item["initialization"] row["evidence"] = item["evidence"] row["notes"] = item["notes"] temporary = path.with_suffix(path.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(path) def main() -> int: segments = read_tsv(ROOT / "NE_SEGMENTS.tsv") data_segment = next(row for row in segments if row["segment"] == "6") file_offset = int(data_segment["file_offset"]) file_length = int(data_segment["file_length"]) allocation_size = int(data_segment["allocation_size"]) binary = (ROOT / "TDKPIN.EXE").read_bytes() payload = binary[file_offset : file_offset + file_length] references = [ row for row in read_tsv(ROOT / "REFERENCES.tsv") if row["to_block"] == "Data6" ] defined_data = [ row for row in read_tsv(ROOT / "DEFINED_DATA.tsv") if row["block"] == "Data6" ] relocations = [ row for row in read_tsv(ROOT / "RELOCATIONS.tsv") if row["segment"] == "6" ] objects = ( read_tsv(ROOT / "DATA_OBJECTS.tsv") if (ROOT / "DATA_OBJECTS.tsv").exists() else [] ) project_semantic_objects(objects) boundaries = {0, file_length, allocation_size} for row in references: boundaries.add(offset(row["to_address"])) for row in defined_data: start = offset(row["address"]) boundaries.add(start) boundaries.add(min(start + int(row["length"]), allocation_size)) for row in relocations: start = offset(row["source_address"]) width = RELOCATION_WIDTHS.get(row["source_type"]) if width is None: raise ValueError(f"unknown relocation width: {row['source_type']}") boundaries.add(start) boundaries.add(min(start + width, allocation_size)) for row in objects: start = offset(row["start"]) end = offset(row["end"]) boundaries.add(start) boundaries.add(min(end + 1, allocation_size)) ordered = sorted( boundary for boundary in boundaries if 0 <= boundary <= allocation_size ) old = {} if OUTPUT.exists(): old = {(row["start"], row["end"]): row for row in read_tsv(OUTPUT)} rows = [] current_keys = set() for start, next_start in pairwise(ordered): if start == next_start: continue end = next_start - 1 key = (address(start), address(end)) current_keys.add(key) row = old.get(key, {}) range_refs = [ reference for reference in references if start <= offset(reference["to_address"]) <= end ] range_data = [ data for data in defined_data if start <= offset(data["address"]) <= end ] range_relocations = [ relocation for relocation in relocations if start <= offset(relocation["source_address"]) <= end ] range_objects = [ item for item in objects if offset(item["start"]) <= start and end <= offset(item["end"]) ] if len(range_objects) > 1: raise ValueError(f"overlapping semantic data objects at {key[0]}-{key[1]}") semantic_object = range_objects[0] if range_objects else None row.update( { "start": key[0], "end": key[1], "bytes": end - start + 1, "storage": "initialized" if end < file_length else "zero-fill", "status": ( semantic_object["status"] if semantic_object else row.get("status", "unknown") ), "stage": ( "semantic-object" if semantic_object else row.get("stage", "candidate-range") ), "object_id": ( semantic_object["object_id"] if semantic_object else row.get("object_id", "") ), "object_name": ( semantic_object["object_name"] if semantic_object else row.get("object_name", "") ), "c_type": ( semantic_object["c_type"] if semantic_object else row.get("c_type", "") ), "initial_value": initial_value(payload, start, end, file_length), "readers": ",".join( sorted( { reference["from_function"] for reference in range_refs if "READ" in reference["reference_type"] and reference["from_function"] } ) ), "writers": ",".join( sorted( { reference["from_function"] for reference in range_refs if "WRITE" in reference["reference_type"] and reference["from_function"] } ) ), "relocations": ",".join( f"{item['source_address']}->{item['target']}" for item in range_relocations ), "evidence": ";".join( [ *([semantic_object["evidence"]] if semantic_object else []), *[ f"{item['address']}:{item['data_type']}[{item['length']}]" for item in range_data ], ] ), "notes": ( semantic_object["notes"] if semantic_object else row.get( "notes", "Candidate byte range; semantic object grouping and type remain unresolved.", ) ), } ) rows.append(row) lost_review = [ row for key, row in old.items() if key not in current_keys and row["status"] != "unknown" ] unsafe_lost_review = [] for reviewed in lost_review: reviewed_start = offset(reviewed["start"]) reviewed_end = offset(reviewed["end"]) replacements = [ row for row in rows if offset(row["end"]) >= reviewed_start and offset(row["start"]) <= reviewed_end ] cursor = reviewed_start safe = True for replacement in replacements: replacement_start = max(offset(replacement["start"]), reviewed_start) replacement_end = min(offset(replacement["end"]), reviewed_end) if replacement_start != cursor or replacement["status"] != "verified" or ( replacement["stage"] != "semantic-object" ): safe = False break cursor = replacement_end + 1 if not safe or cursor != reviewed_end + 1: unsafe_lost_review.append(reviewed) if unsafe_lost_review: raise RuntimeError( "refusing to discard " f"{len(unsafe_lost_review)} reviewed data ranges after boundary drift" ) temporary = OUTPUT.with_suffix(OUTPUT.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=COLUMNS, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(OUTPUT) print(f"data_ranges={len(rows)}") print(f"covered_bytes={sum(int(row['bytes']) for row in rows)}") print(f"initialized_bytes={file_length}") print(f"zero_fill_bytes={allocation_size - file_length}") return 0 if __name__ == "__main__": raise SystemExit(main()) q;xE#!/usr/bin/env bash set -euo pipefail workspace_dir=$(pwd -P) ghidra_install_dir=${GHIDRA_INSTALL_DIR:-/opt/ghidra} headless_analyzer="$ghidra_install_dir/support/analyzeHeadless" script_dir="$workspace_dir/tools" project_dir=$(mktemp -d /tmp/tdkpin-ghidra.XXXXXX) if [[ ! -x "$headless_analyzer" ]]; then echo "Ghidra headless analyzer not found at: $headless_analyzer" >&2 exit 1 fi "$headless_analyzer" "$project_dir" tdkpin \ -import "$workspace_dir/TDKPIN.EXE" \ -analysisTimeoutPerFile 900 \ -max-cpu 8 "$headless_analyzer" "$project_dir" tdkpin \ -process TDKPIN.EXE \ -noanalysis \ -scriptPath "$script_dir" \ -preScript SeedMissingEntrypoints.java \ -postScript ExportDecompilation.java \ "$workspace_dir/TDKPIN_GHIDRA_RAW.c" \ "$workspace_dir/FUNCTIONS.tsv" \ -postScript AuditCoverage.java \ "$workspace_dir/COVERAGE.tsv" echo "Ghidra project retained at: $project_dir" {C:VGxp #reScript ApplyWin16ImportSignatures IMPORT_RECONSTRUCTION.tsv"TCOMPLETE " COMPLETE_-PUNEXPLAINED.tsv" python3 "$script_dir/extract_ne_metadata.py" H-output-dir "$workspace_dir" python3 "$script_dir/build_data_coverage.py3ՅOxe#!/usr/bin/env python3 """Dump the initialized 175-record collision/rule table from TDKPIN under Wine.""" from __future__ import annotations import argparse import csv import math import struct import sys from pathlib import Path from trace_original_state import ( ProcessMemory, find_winevdm_pid, locate_data_segment, verify_original, ) OBJECT_COUNT = 175 OBJECT_STRIDE = 0x53 OBJECT_FIELD_BASE = 0x095B DATA_SIZE = 0x4D3A def decode_real48(data: bytes) -> float: exponent = data[0] if exponent == 0: return 0.0 mantissa = int.from_bytes(data[1:], "little") sign = -1.0 if mantissa & (1 << 39) else 1.0 fraction = mantissa & ((1 << 39) - 1) return sign * math.ldexp(1.0 + fraction / (1 << 39), exponent - 129) def real_text(value: float) -> str: return format(value, ".12g") def u16_at(data: bytes, offset: int) -> int: return struct.unpack_from(" int: return struct.unpack_from(" argparse.Namespace: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--pid", type=int, help="Linux PID of the TDKPIN winevdm.exe process") parser.add_argument("--output", type=Path, help="TSV path; stdout when omitted") return parser.parse_args() FIELDS = [ "id", "type", "subtype", "active", "bounds_min_x_milli", "bounds_min_y_milli", "bounds_max_x_milli", "bounds_max_y_milli", "point1_x_milli", "point1_y_milli", "point2_x_milli", "point2_y_milli", "radius_milli", "response_normal", "response_tangent", "response_auxiliary", "response_kick", "flags", "contact_state", "score_low", "score_high", "layer_mask", "render_left", "render_top", "render_right", "render_bottom", ] def main() -> None: args = parse_args() verify_original() pid = args.pid if args.pid is not None else find_winevdm_pid() output = args.output.open("w", newline="", encoding="utf-8") if args.output else sys.stdout try: writer = csv.writer(output, delimiter="\t", lineterminator="\n") writer.writerow(FIELDS) with ProcessMemory(pid) as memory: data_base = locate_data_segment(memory) data = memory.read(data_base, DATA_SIZE) for object_id in range(1, OBJECT_COUNT + 1): base = object_id * OBJECT_STRIDE writer.writerow( ( object_id, data[base + OBJECT_FIELD_BASE], data[base + 0x095C], data[base + 0x098F], i32_at(data, base + 0x095D), i32_at(data, base + 0x0961), i32_at(data, base + 0x0965), i32_at(data, base + 0x0969), i32_at(data, base + 0x096D), i32_at(data, base + 0x0971), i32_at(data, base + 0x0975), i32_at(data, base + 0x0979), real_text(decode_real48(data[base + 0x097D : base + 0x0983])), real_text(decode_real48(data[base + 0x0983 : base + 0x0989])), real_text(decode_real48(data[base + 0x0989 : base + 0x098F])), real_text(decode_real48(data[base + 0x0990 : base + 0x0996])), real_text(decode_real48(data[base + 0x0996 : base + 0x099C])), f"0x{u16_at(data, base + 0x099C):04x}", u16_at(data, base + 0x099E), u16_at(data, base + 0x09A0), u16_at(data, base + 0x09A2), f"0x{u16_at(data, base + 0x09A4):04x}", u16_at(data, base + 0x09A6), u16_at(data, base + 0x09A8), u16_at(data, base + 0x09AA), u16_at(data, base + 0x09AC), ) ) print(f"dumped {OBJECT_COUNT} objects from TDKPIN pid={pid}", file=sys.stderr) finally: if output is not sys.stdout: output.close() if __name__ == "__main__": try: main() except (OSError, RuntimeError) as error: raise SystemExit(f"dump_original_objects.py: {error}") from error E۵x(#!/usr/bin/env python3 """Extract exact NE segments, entry points, modules, and relocation sites.""" from __future__ import annotations import argparse import csv import struct from dataclasses import dataclass from pathlib import Path ROOT = Path(__file__).resolve().parent.parent SOURCE_TYPE_NAMES = { 0: "low-byte", 2: "selector-16", 3: "far-pointer-32", 5: "offset-16", 11: "offset-32", 13: "pointer-48", } TARGET_TYPE_NAMES = { 0: "internal", 1: "import-ordinal", 2: "import-name", 3: "os-fixup", } @dataclass(frozen=True) class Segment: number: int file_offset: int file_length: int flags: int allocation_size: int @property def selector(self) -> int: return 0x1000 + (self.number - 1) * 8 def address(self, offset: int) -> str: return f"{self.selector:04x}:{offset:04x}" def u16(data: bytes, offset: int) -> int: return struct.unpack_from(" str: length = data[offset] return data[offset + 1 : offset + 1 + length].decode("latin-1") def parse_segments(data: bytes, ne_offset: int) -> list[Segment]: count = u16(data, ne_offset + 0x1C) table = ne_offset + u16(data, ne_offset + 0x22) shift = u16(data, ne_offset + 0x32) segments = [] for index in range(count): sector, length, flags, allocation = struct.unpack_from( " dict[int, tuple[int, int, int, str]]: table = ne_offset + u16(data, ne_offset + 0x04) end = table + u16(data, ne_offset + 0x06) ordinal = 1 entries = {} cursor = table while cursor < end: count = data[cursor] segment_indicator = data[cursor + 1] cursor += 2 if count == 0: break if segment_indicator == 0: ordinal += count continue for _ in range(count): flags = data[cursor] if segment_indicator == 0xFF: int3f = u16(data, cursor + 1) segment = data[cursor + 3] offset = u16(data, cursor + 4) kind = f"movable-int3f-{int3f:04x}" cursor += 6 else: segment = segment_indicator offset = u16(data, cursor + 1) kind = "fixed" cursor += 3 entries[ordinal] = (segment, offset, flags, kind) ordinal += 1 return entries def parse_modules(data: bytes, ne_offset: int) -> list[str]: count = u16(data, ne_offset + 0x1E) module_table = ne_offset + u16(data, ne_offset + 0x28) import_table = ne_offset + u16(data, ne_offset + 0x2A) return [ pascal_string(data, import_table + u16(data, module_table + index * 2)) for index in range(count) ] def relocation_sites( data: bytes, segment: Segment, first: int, additive: bool ) -> list[int]: if additive: return [first] sites = [] current = first seen = set() while current != 0xFFFF: if current in seen: raise ValueError( f"segment {segment.number}: cyclic relocation chain at {current:04x}" ) if current + 2 > segment.file_length: raise ValueError( f"segment {segment.number}: relocation source outside file image: {current:04x}" ) seen.add(current) sites.append(current) current = u16(data, segment.file_offset + current) return sites def write_tsv( path: Path, columns: tuple[str, ...], rows: list[dict[str, object]] ) -> None: with path.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) def extract(source: Path, output_dir: Path) -> None: data = source.read_bytes() ne_offset = struct.unpack_from(" int: parser = argparse.ArgumentParser() parser.add_argument("source", nargs="?", type=Path, default=ROOT / "TDKPIN.EXE") parser.add_argument("--output-dir", type=Path, default=ROOT) args = parser.parse_args() extract(args.source.resolve(), args.output_dir.resolve()) return 0 if __name__ == "__main__": raise SystemExit(main()) ^QXx*Eպ#!/usr/bin/env python3 """Losslessly extract and decode resources from the 16-bit TDKPIN NE image.""" from __future__ import annotations import hashlib import io import json import re import struct import wave from dataclasses import dataclass from pathlib import Path from typing import Any from PIL import Image ROOT = Path(__file__).resolve().parent.parent SOURCE = ROOT / "TDKPIN.EXE" OUTPUT = ROOT / "assets" INTEGER_TYPES = { 1: "CURSOR", 2: "BITMAP", 3: "ICON", 4: "MENU", 5: "DIALOG", 6: "STRING", 7: "FONTDIR", 8: "FONT", 9: "ACCELERATOR", 10: "RCDATA", 11: "MESSAGETABLE", 12: "GROUP_CURSOR", 14: "GROUP_ICON", 15: "VERSION_OLD", 16: "VERSION", } @dataclass class Resource: type_name: str resource_id: str offset: int allocated_size: int flags: int data: bytes @property def stem(self) -> str: return f"{int(self.resource_id):05d}" if self.resource_id.isdigit() else self.resource_id def u16(data: bytes, offset: int) -> int: return struct.unpack_from(" int: return struct.unpack_from(" str: length = image[base + offset] return image[base + offset + 1 : base + offset + 1 + length].decode("cp1252") def resource_name(image: bytes, base: int, value: int, is_type: bool) -> str: if value & 0x8000: number = value & 0x7FFF return INTEGER_TYPES.get(number, f"TYPE_{number}") if is_type else str(number) return read_pascal_string(image, base, value) def parse_resources(image: bytes) -> tuple[list[Resource], dict[str, Any]]: ne_offset = u32(image, 0x3C) resource_offset = u16(image, ne_offset + 0x24) resident_names_offset = u16(image, ne_offset + 0x26) table_base = ne_offset + resource_offset pos = table_base shift = u16(image, pos) pos += 2 resources: list[Resource] = [] while True: type_id = u16(image, pos) if type_id == 0: break count = u16(image, pos + 2) pos += 8 type_name = resource_name(image, table_base, type_id, True) for _ in range(count): offset_units, length_units, flags, name_id, _handle, _usage = struct.unpack_from( " dict[str, int]: if len(data) < 40 or u32(data, 0) != 40: raise ValueError("not a BITMAPINFOHEADER DIB") width, height = struct.unpack_from(" tuple[Image.Image, int, dict[str, int]]: info = dib_info(data) width = info["width"] height = abs(info["height"]) bits_per_pixel = info["bits_per_pixel"] if bits_per_pixel != 8 or info["compression"] != 0: raise ValueError(f"unsupported custom DIB: {bits_per_pixel} bpp compression={info['compression']}") stride = ((width * bits_per_pixel + 31) // 32) * 4 pixel_size = info["image_size"] or stride * height pixel_offset = 40 pixels = data[pixel_offset : pixel_offset + pixel_size] if len(pixels) != pixel_size: raise ValueError("truncated custom DIB pixels") rows = [pixels[i * stride : i * stride + width] for i in range(height)] if info["height"] > 0: rows.reverse() image = Image.frombytes("P", (width, height), b"".join(rows)) image.putpalette(palette) return image, pixel_offset + pixel_size, info def wrap_bitmap_dib(data: bytes) -> tuple[bytes, int, dict[str, int]]: info = dib_info(data) width = info["width"] height = abs(info["height"]) bits_per_pixel = info["bits_per_pixel"] color_count = info["colors_used"] or (1 << bits_per_pixel if bits_per_pixel <= 8 else 0) pixel_offset = 40 + color_count * 4 stride = ((width * bits_per_pixel + 31) // 32) * 4 pixel_size = info["image_size"] or stride * height actual_size = pixel_offset + pixel_size if actual_size > len(data): raise ValueError("truncated bitmap DIB") header = struct.pack("<2sIHHI", b"BM", 14 + actual_size, 0, 0, 14 + pixel_offset) return header + data[:actual_size], actual_size, info def decode_icon(data: bytes) -> tuple[bytes, int, dict[str, int]]: info = dib_info(data) width = info["width"] height = abs(info["height"]) // 2 bits_per_pixel = info["bits_per_pixel"] color_count = info["colors_used"] or (1 << bits_per_pixel if bits_per_pixel <= 8 else 0) xor_stride = ((width * bits_per_pixel + 31) // 32) * 4 and_stride = ((width + 31) // 32) * 4 actual_size = 40 + color_count * 4 + xor_stride * height + and_stride * height if actual_size > len(data): raise ValueError("truncated icon DIB") directory = struct.pack( " tuple[str, int]: end = data.index(0, pos) return data[pos:end].decode("cp1252", errors="replace"), end + 1 def read_dialog_field(data: bytes, pos: int) -> tuple[Any, int]: first = data[pos] if first == 0: return None, pos + 1 if first == 0xFF: return {"ordinal": u16(data, pos + 1)}, pos + 3 if first >= 0x80: atoms = {0x80: "BUTTON", 0x81: "EDIT", 0x82: "STATIC", 0x83: "LISTBOX", 0x84: "SCROLLBAR", 0x85: "COMBOBOX"} return {"class_atom": atoms.get(first, f"ATOM_{first:02X}")}, pos + 1 return read_ansi_z(data, pos) def decode_dialog(data: bytes) -> tuple[dict[str, Any], int]: style = u32(data, 0) count = data[4] x, y, cx, cy = struct.unpack_from(" dict[str, Any]: strings = [ match.decode("cp1252", errors="replace") for match in re.findall(rb"[\x20-\x7e]{3,}", data) ] result: dict[str, Any] = {"printable_strings": strings} signature = data.find(b"\xbd\x04\xef\xfe") if signature >= 0 and signature + 52 <= len(data): fields = struct.unpack_from("<13I", data, signature) result["fixed_file_info"] = { "signature": f"0x{fields[0]:08x}", "structure_version": f"0x{fields[1]:08x}", "file_version_ms": f"0x{fields[2]:08x}", "file_version_ls": f"0x{fields[3]:08x}", "product_version_ms": f"0x{fields[4]:08x}", "product_version_ls": f"0x{fields[5]:08x}", "file_flags_mask": f"0x{fields[6]:08x}", "file_flags": f"0x{fields[7]:08x}", "file_os": f"0x{fields[8]:08x}", "file_type": f"0x{fields[9]:08x}", "file_subtype": f"0x{fields[10]:08x}", "file_date_ms": f"0x{fields[11]:08x}", "file_date_ls": f"0x{fields[12]:08x}", } return result def wav_info(data: bytes) -> dict[str, Any]: with wave.open(io.BytesIO(data), "rb") as stream: frames = stream.getnframes() rate = stream.getframerate() return { "format": "PCM", "channels": stream.getnchannels(), "sample_rate": rate, "sample_width_bits": stream.getsampwidth() * 8, "frames": frames, "duration_seconds": frames / rate, } def save_palette(palette: bytes, resource_id: str) -> list[str]: if len(palette) < 768: raise ValueError("palette is shorter than 256 RGB entries") palette = palette[:768] image = Image.new("RGB", (256, 256)) pixels = image.load() for index in range(256): color = tuple(palette[index * 3 : index * 3 + 3]) x0 = (index % 16) * 16 y0 = (index // 16) * 16 for y in range(y0, y0 + 16): for x in range(x0, x0 + 16): pixels[x, y] = color png_path = OUTPUT / "decoded" / "palettes" / f"palette_{int(resource_id):04d}.png" png_path.parent.mkdir(parents=True, exist_ok=True) image.save(png_path) gpl_path = png_path.with_suffix(".gpl") lines = ["GIMP Palette", f"Name: TDKPIN resource {resource_id}", "Columns: 16", "#"] for index in range(256): red, green, blue = palette[index * 3 : index * 3 + 3] lines.append(f"{red:3d} {green:3d} {blue:3d}\tIndex {index}") gpl_path.write_text("\n".join(lines) + "\n", encoding="utf-8") return [str(png_path.relative_to(ROOT)), str(gpl_path.relative_to(ROOT))] def main() -> None: image = SOURCE.read_bytes() resources, ne_metadata = parse_resources(image) palette_resources = [resource for resource in resources if resource.type_name == "PAL"] if len(palette_resources) != 1: raise ValueError(f"expected one PAL resource, found {len(palette_resources)}") shared_palette = palette_resources[0].data[:768] manifest_entries: list[dict[str, Any]] = [] extraction_errors: list[str] = [] for resource in resources: raw_path = OUTPUT / "raw" / resource.type_name / f"{resource.stem}.bin" raw_path.parent.mkdir(parents=True, exist_ok=True) raw_path.write_bytes(resource.data) entry: dict[str, Any] = { "type": resource.type_name, "id": resource.resource_id, "file_offset": resource.offset, "allocated_size": resource.allocated_size, "flags": f"0x{resource.flags:04x}", "raw_sha256": hashlib.sha256(resource.data).hexdigest(), "raw_path": str(raw_path.relative_to(ROOT)), "decoded_paths": [], } try: if resource.type_name == "DAT": decoded, actual_size, info = decode_custom_dib(resource.data, shared_palette) path = OUTPUT / "decoded" / "images" / f"dat_{resource.stem}.png" path.parent.mkdir(parents=True, exist_ok=True) decoded.save(path) entry.update({"actual_size": actual_size, "image": info}) entry["decoded_paths"].append(str(path.relative_to(ROOT))) elif resource.type_name == "PAL": entry["actual_size"] = 768 entry["decoded_paths"].extend(save_palette(shared_palette, resource.resource_id)) elif resource.type_name == "WAV": if resource.data[:4] != b"RIFF" or resource.data[8:12] != b"WAVE": raise ValueError("WAV resource lacks RIFF/WAVE signature") actual_size = u32(resource.data, 4) + 8 if actual_size > len(resource.data): raise ValueError("truncated RIFF resource") path = OUTPUT / "decoded" / "audio" / f"wav_{resource.stem}.wav" path.parent.mkdir(parents=True, exist_ok=True) path.write_bytes(resource.data[:actual_size]) entry["actual_size"] = actual_size entry["audio"] = wav_info(resource.data[:actual_size]) entry["decoded_paths"].append(str(path.relative_to(ROOT))) elif resource.type_name == "BITMAP": bmp, actual_size, info = wrap_bitmap_dib(resource.data) png_path = OUTPUT / "decoded" / "images" / f"bitmap_{resource.stem}.png" bmp_path = png_path.with_suffix(".bmp") png_path.parent.mkdir(parents=True, exist_ok=True) bmp_path.write_bytes(bmp) with Image.open(bmp_path) as decoded: decoded.save(png_path) entry.update({"actual_size": actual_size, "image": info}) entry["decoded_paths"].extend( [str(bmp_path.relative_to(ROOT)), str(png_path.relative_to(ROOT))] ) elif resource.type_name == "ICON": ico, actual_size, info = decode_icon(resource.data) ico_path = OUTPUT / "decoded" / "icons" / f"icon_{resource.stem}.ico" png_path = ico_path.with_suffix(".png") ico_path.parent.mkdir(parents=True, exist_ok=True) ico_path.write_bytes(ico) with Image.open(ico_path) as decoded: decoded.convert("RGBA").save(png_path) entry.update({"actual_size": actual_size, "image": info}) entry["decoded_paths"].extend( [str(ico_path.relative_to(ROOT)), str(png_path.relative_to(ROOT))] ) elif resource.type_name == "DIALOG": dialog, actual_size = decode_dialog(resource.data) path = OUTPUT / "decoded" / "dialogs" / f"dialog_{resource.stem}.json" path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(dialog, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") entry["actual_size"] = actual_size entry["decoded_paths"].append(str(path.relative_to(ROOT))) elif resource.type_name == "VERSION": decoded = decode_version(resource.data) path = OUTPUT / "decoded" / "metadata" / f"version_{resource.stem}.json" path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(decoded, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") entry["actual_size"] = u16(resource.data, 0) entry["decoded_paths"].append(str(path.relative_to(ROOT))) elif resource.type_name == "GROUP_ICON": count = u16(resource.data, 4) entry["actual_size"] = 6 + count * 14 except Exception as error: message = f"{resource.type_name}/{resource.resource_id}: {error}" entry["decode_error"] = str(error) extraction_errors.append(message) manifest_entries.append(entry) manifest = { "source": str(SOURCE.relative_to(ROOT)), "source_sha256": hashlib.sha256(image).hexdigest(), "resource_count": len(resources), "ne": ne_metadata, "resources": manifest_entries, "decode_errors": extraction_errors, } OUTPUT.mkdir(parents=True, exist_ok=True) (OUTPUT / "manifest.json").write_text( json.dumps(manifest, indent=2, ensure_ascii=False) + "\n", encoding="utf-8" ) if extraction_errors: raise SystemExit("resource extraction completed with decode errors:\n" + "\n".join(extraction_errors)) print(f"Extracted {len(resources)} resources to {OUTPUT}") if __name__ == "__main__": main() ƫx|#!/usr/bin/env python3 """Generate typed 1000:0270 collision-call data from preserved raw evidence.""" from __future__ import annotations import argparse from pathlib import Path ROOT = Path(__file__).resolve().parent.parent RAW = ROOT / "TDKPIN_GHIDRA_COMPLETE_RAW.c" OUTPUT = ROOT / "reconstructed" / "tdkpin_game_setup_collision_data.inc" def calls_from_raw() -> list[list[int]]: text = RAW.read_text(encoding="utf-8") start = text.index("/* ===== 1000:0270 ") end = text.index("/* ===== 1000:51f5 ", start) text = text[start:end] needle = "FUN_1008_0138(" calls: list[list[int]] = [] position = 0 while True: begin = text.find(needle, position) if begin < 0: break cursor = begin + len(needle) depth = 1 while depth: character = text[cursor] if character == "(": depth += 1 elif character == ")": depth -= 1 cursor += 1 arguments = text[begin + len(needle) : cursor - 1] words = [ int(item.strip(), 0) & 0xFFFF for item in arguments.replace("\n", "").split(",") ] if len(words) != 40: raise RuntimeError(f"expected 40 words, found {len(words)}") calls.append(words) position = cursor if len(calls) != 177: raise RuntimeError(f"expected 177 calls, found {len(calls)}") return calls def u16(value: int) -> str: return f"0x{value:04x}u" def i32(low: int, high: int) -> str: value = low | high << 16 return f"(int32_t)UINT32_C(0x{value:08x})" def real48(words: list[int]) -> str: bytes_ = [] for word in words: bytes_.extend((word & 0xFF, word >> 8)) return "{{" + ", ".join(f"0x{byte:02x}" for byte in bytes_) + "}}" def initializer(words: list[int], ordinal: int) -> str: fields = [ f".render_bottom={u16(words[0])}", f".render_right={u16(words[1])}", f".render_top={u16(words[2])}", f".render_left={u16(words[3])}", f".fallback_y_adjust={i32(words[4], words[5])}", f".fallback_x_adjust={i32(words[6], words[7])}", f".layer_mask={u16(words[8])}", f".score_low={u16(words[9])}", f".score_high={u16(words[10])}", f".contact_state={u16(words[11])}", f".flags={u16(words[12])}", f".response_kick={real48(words[13:16])}", f".response_auxiliary={real48(words[16:19])}", f".response_tangent={real48(words[19:22])}", f".response_normal={real48(words[22:25])}", f".radius={i32(words[25], words[26])}", f".point2_y={i32(words[27], words[28])}", f".point2_x={i32(words[29], words[30])}", f".point1_y={i32(words[31], words[32])}", f".point1_x={i32(words[33], words[34])}", f".coordinate_mode={u16(words[35])}", f".subtype={u16(words[36])}", f".type={u16(words[37])}", f".active={u16(words[38])}", f".index={u16(words[39])}", ] return ( f" /* call {ordinal:03d}, record {words[39]:3d} */ " "{" + ", ".join(fields) + "}," ) def generated_text() -> str: calls = calls_from_raw() lines = [ "/* Generated by tools/generate_game_setup_collision_data.py.", " * Source: TDKPIN_GHIDRA_COMPLETE_RAW.c, 1000:0270 call order.", " * Do not hand-edit; run the generator and its --check mode.", " */", "static const TdkpinCollisionInitArgs g_game_setup_collision_calls[177] = {", ] lines.extend(initializer(words, index + 1) for index, words in enumerate(calls)) lines.append("};") lines.append("") return "\n".join(lines) def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--check", action="store_true") arguments = parser.parse_args() generated = generated_text() if arguments.check: if not OUTPUT.exists() or OUTPUT.read_text(encoding="utf-8") != generated: raise SystemExit(f"generated collision data is stale: {OUTPUT}") return 0 OUTPUT.write_text(generated, encoding="utf-8") return 0 if __name__ == "__main__": raise SystemExit(main()) qxSV/-.OO+S(,3RRRJM.QHTH+)IMQHJQ(.I,IU+W(HU(*KW/LKQH/RH,S((OJ-SRRJ+UO+-)-JW-/*QH/I,+₉$0Vqfz^bWRT\dB))JLN9*h\ N>>~..:$v$ sՀwruFU,U 1= 5?4TA0Wgϐx3||@Q~rjqojn~Q%̼̼ԲhN~rbIj|JbIb|qjznj^ Dzbnj|~(Y@R2*ၬåG0W[ 'HנxWxW?+g_g L΂7 '5>* …|]Vqqq)P|bQzB"4Y%$&ZH(TXZ\YJ)H:SR@րh(d((Tf(d*dV(x(䧁3Ow4*R+RA]J JJMJ,NUD HloNbnRJBYbNi(j: we)d*@ Th_ZTYI % L 剙%*vvn,@rKtR K3RSlCJSa!2L!95$HB!3O!'?=391G "5O(VjC%6{"%5-4@ Ԝw+)J'ebI%E ҤԂbh“(%gg&%楧j(aTPXS S V+dTg&+@SH/+ډ;[\_[)̠AMLgJRI +<3䬢Ĕb"P-/,I-V(+NLK9]( 5$5E!<3L!$/RaqqQjIiQ)!BXCV@\YrCAjFAf 83HTY_~uAfJ>*-VQHKOKUJ,NTTH,V(.)JM̅ P՛cfH>3M$W\XTR SC)T[)i"La : r2K44 cAYZ)DIGADAE""4]4ҔպL6@`* @  PUSf2ZC'3MMP%_YG t [pF/LTV03SF4\GAP) $ h =S<R2SK@! ̜LHI$4$VCNV(4/^AK@4EFZZƆ 6 Zm3Å݂̼H%Y_Z;吕B5F8-7 @PTAr3 M^ b J$mV$(h: M{p!ȇ H-$5׵"D#M)<| TZ)T5*iB<.6B%mpx#!/usr/bin/env bash set -euo pipefail workspace_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd -P) probe_dir=$(mktemp -d /tmp/tdkpin-real48-probe.XXXXXX) trap 'rm -f -- "$probe_dir/R48.COM" "$probe_dir/R48.OUT"; rmdir -- "$probe_dir"' EXIT cd -- "$workspace_dir" nasm -f bin tools/probes/real48_reference.asm -o "$probe_dir/R48.COM" SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy dosbox \ -c "mount c $probe_dir" \ -c 'c:' \ -c 'R48.COM' \ -c 'exit' >/dev/null 2>&1 test -f "$probe_dir/R48.OUT" actual=$(od -An -v -tx1 "$probe_dir/R48.OUT" | tr -d ' \n') expected=0000000000008100000000008100000000808200000000009f00feffff7fa000000000809b00a0a2796b9b00a0a279eb0100000000ffffffff0000000000000200000000010000000000000080010000008000ffffff7f01820000000000000000000000000081000000000000810000000000008200000000000081000000000000800000000040008200000000400081000000000000820000000000008000000000c0008200000000c0008000000000000080000000008000000000000000000200000000000000ffffffffff01000000000000007efeffffff7e0181000000000000820000000060008000000000800082000000004000800000000040000000000000008000000000008100000000008000000000408100000000808000000000c0000000000000010000000000a855aa55aa5500000000000000000000000081000000000081fa33f304358200000000008149a070c41c0000000000007eb6b6afdb7a7f0b0c35626d7f49e2c20f490000000000007d60d5d4ad7e7f0a2b38636d8021a2da0f49815f970cb70d8021a2da0fc980d0f71772b100000000000080d5f71772317fff651f994f82acdd8d5d137efc1d55950a7f67b1b15a3c807be397451b81000000000081f2704c095382a35854f82d83a7c625736c8fa87cee142c0000000000007ffeffffff7f80faffffff7f00000000000000000000000080f9ffffffff804878a46a5780faffffff7f80c242d7b35d00000000000080f9ffffffff80f9ffffff7f00000000000080a87d40510a printf '%s' "$actual" printf '\n' test "$actual" = "$expected" str: """Remove obsolete pre-closure clauses without discarding useful evidence.""" stale = re.compile( r"\b(pending|remain(?:s|ing)? raw|raw/partial|remain(?:s|ing)? partial|" r"unresolved)\b", re.IGNORECASE, ) clauses = [ clause.strip() for clause in text.split(";") if clause.strip() and not stale.search(clause) ] closure = "complete verified referring-function closure" if not any(closure in clause for clause in clauses): clauses.append(closure) return "; ".join(clauses) def read_tsv(name: str) -> list[dict[str, str]]: with (ROOT / name).open(newline="", encoding="utf-8") as handle: return list(csv.DictReader(handle, delimiter="\t")) def serialize(columns: list[str], rows: list[dict[str, str]]) -> str: output = StringIO() writer = csv.DictWriter( output, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) return output.getvalue() def promote() -> dict[str, str]: functions = read_tsv("FUNCTION_RECONSTRUCTION.tsv") verified_names = { row["raw_name"] for row in functions if row["status"] == "verified" } if len(verified_names) != len(functions): raise SystemExit("refusing data promotion before all functions are verified") reconstruction = read_tsv("DATA_RECONSTRUCTION.tsv") if any(row["status"] == "unknown" for row in reconstruction): raise SystemExit("refusing data promotion while referenced addresses are unknown") for row in reconstruction: referring = { name for name in row["referring_functions"].split(",") if name } unresolved = referring - verified_names if unresolved: raise SystemExit( f"unverified data callers at {row['address']}: " + ", ".join(sorted(unresolved)) ) row["evidence"] = closed_evidence(row["evidence"]) if row["status"] == "restored": row["status"] = "verified" row["notes"] = ( "Exact semantic object field, extent, and complete read/write " "inventory are closed through verified address-linked functions." ) objects = read_tsv("DATA_OBJECTS.tsv") for row in objects: row["evidence"] = closed_evidence(row["evidence"]) if row["status"] == "restored": row["status"] = "verified" row["notes"] = ( "Exact object boundary, type, initialization, and full in-image " "reader/writer lifecycle are verified." ) coverage = read_tsv("DATA_COVERAGE.tsv") for row in coverage: row["evidence"] = closed_evidence(row["evidence"]) if row["status"] == "restored": row["status"] = "verified" row["notes"] = ( "Range is fully covered by a verified semantic DGROUP object." ) return { "DATA_RECONSTRUCTION.tsv": serialize( list(reconstruction[0]), reconstruction ), "DATA_OBJECTS.tsv": serialize(list(objects[0]), objects), "DATA_COVERAGE.tsv": serialize(list(coverage[0]), coverage), } def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--check", action="store_true") arguments = parser.parse_args() expected = promote() for name, text in expected.items(): path = ROOT / name if arguments.check: if path.read_text(encoding="utf-8") != text: raise SystemExit(f"{name} needs deterministic semantic promotion") else: path.write_text(text, encoding="utf-8") if __name__ == "__main__": main() Ĺx6#!/usr/bin/env python3 """Promote Win16 imports only after the complete caller ledger is verified.""" from __future__ import annotations import argparse import csv from collections import Counter, defaultdict from pathlib import Path ROOT = Path(__file__).resolve().parent.parent IMPORT_COLUMNS = ( "address", "library", "import_name", "stack_purge_bytes", "call_sites", "status", "stage", "prototype", "evidence", "notes", ) def read_tsv(name: str) -> list[dict[str, str]]: with (ROOT / name).open(newline="", encoding="utf-8") as handle: return list(csv.DictReader(handle, delimiter="\t")) def expected_rows() -> list[dict[str, str]]: rows = read_tsv("IMPORT_RECONSTRUCTION.tsv") functions = read_tsv("FUNCTION_RECONSTRUCTION.tsv") verified_names = { row["raw_name"] for row in functions if row["status"] == "verified" } if len(verified_names) != len(functions): raise SystemExit("refusing import promotion before every function is verified") calls: Counter[str] = Counter() callers: dict[str, set[str]] = defaultdict(set) for reference in read_tsv("REFERENCES.tsv"): if "CALL" not in reference["reference_type"]: continue target = reference["to_address"] if not target.startswith("1228:"): continue calls[target] += 1 callers[target].add(reference["from_function"]) for row in rows: if not row["prototype"]: raise SystemExit(f"missing prototype for {row['address']}") expected_count = int(row["call_sites"]) if calls[row["address"]] != expected_count: raise SystemExit( f"call-count drift for {row['address']}: " f"ledger={expected_count}, references={calls[row['address']]}" ) unresolved = callers[row["address"]] - verified_names if unresolved: raise SystemExit( f"unverified callers for {row['address']}: " + ", ".join(sorted(unresolved)) ) if row["status"] == "verified": continue row["status"] = "verified" if expected_count == 0: row["stage"] = "unused-slot-verified" row["evidence"] += ( "; complete Ghidra CALL inventory and NE relocation inventory: " "zero call sites" ) row["notes"] = ( "Explicit imported NE slot with no CALL reference anywhere in the " "complete image; no TDKPIN call-site behavior exists to reconstruct." ) else: row["stage"] = "call-sites-verified" row["evidence"] += ( f"; all {expected_count} direct call sites map to verified " "address-linked function rows and readable C" ) row["notes"] = ( f"All {expected_count} relocation-backed direct call sites are in " "verified functions whose evidence records argument order, segmented " "pointer or handle use, return handling, side effects, and branches." ) return rows def serialize(rows: list[dict[str, str]]) -> str: from io import StringIO output = StringIO() writer = csv.DictWriter( output, fieldnames=IMPORT_COLUMNS, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) return output.getvalue() def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--check", action="store_true") arguments = parser.parse_args() path = ROOT / "IMPORT_RECONSTRUCTION.tsv" expected = serialize(expected_rows()) current = path.read_text(encoding="utf-8") if arguments.check: if current != expected: raise SystemExit("IMPORT_RECONSTRUCTION.tsv needs deterministic promotion") return path.write_text(expected, encoding="utf-8") if __name__ == "__main__": main() Рx{)#!/usr/bin/env python3 """Build the verified resource ledger from immutable extraction evidence.""" from __future__ import annotations import argparse import csv import hashlib import io import json from pathlib import Path ROOT = Path(__file__).resolve().parent.parent TARGET_SHA256 = "a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c" FIELDS = ( "type", "id", "file_offset", "allocated_size", "raw_sha256", "raw_path", "decoded_paths", "status", "stage", "users", "behavior", "notes", ) def read_tsv(path: Path) -> list[dict[str, str]]: with path.open(newline="", encoding="utf-8") as stream: return list(csv.DictReader(stream, delimiter="\t")) def verified_function_addresses() -> set[str]: rows = read_tsv(ROOT / "FUNCTION_RECONSTRUCTION.tsv") assert len(rows) == 391 assert all(row["status"] == "verified" for row in rows) return {row["address"] for row in rows} def require_closed_ledger(name: str) -> None: rows = read_tsv(ROOT / name) assert rows assert all(row["status"] == "verified" for row in rows), name def role(resource_type: str, resource_id: int) -> str: if resource_type == "DAT": if 400 <= resource_id <= 407: return f"42x123 player-emblem sprite {resource_id - 400}" if resource_id == 600: return "544x180 rotating-target and panel-animation atlas" if 701 <= resource_id <= 704: return f"146x142 score-status level {resource_id - 700}" if 801 <= resource_id <= 809: return f"68x61 collected-item display count {resource_id - 800}" return { 900: "900x296 18-frame claw atlas", 901: "230x17 launcher and velocity-row decoration atlas", 993: "360x300 high-score background", 994: "237x13 asset-loading progress strip", 995: "640x460 one-shot board splash", 997: "640x460 immutable restore overlay A", 998: "640x460 restore overlay B and mutable background", 1001: "640x460 board background selected by index 1", 1002: "640x460 board background selected by index 2", 1003: "640x460 board background selected by index 3", 1004: "640x460 board background selected by index 4", 1005: "640x460 board background selected by index 5", }[resource_id] if resource_type == "PAL": return "256 RGB triples shared by all custom DAT DIBs" if resource_type == "WAV": return { 2001: "add-player cue", 2002: "launcher-release cue", 2004: "trigger-activation cue", 2006: "timed target 51..53 hit cue", 2007: "score-marker or full-item-bank award cue", 2008: "normal ball-end cue", 2011: "rotating-target mechanism cue", 2012: "target and panel transition cue", 2013: "panel-mechanism motion cue", 2015: "ball-capture cue", 2016: "claw ball-release cue", 2017: "completed target-bank/item award cue", 2019: "table-nudge or kick-response cue", 2020: "tilt cue", 2021: "flipper-motion cue", 2022: "loaded and freed sound slot 22 with no in-image playback selector", }[resource_id] if resource_type == "BITMAP": return { 101: "16x16 SRCPAINT object-composition image", 102: "16x16 SRCAND object-composition mask", 500: "944x28 score-digit and timer-indicator atlas", }[resource_id] return { ("ICON", 1): "32x32 image selected by GROUP_ICON 996", ("GROUP_ICON", 996): "main-window icon group loaded at 1000:016c", ("VERSION", 1): "Windows version metadata with no image-code loader", ("DIALOG", 32512): "Borland 2D File Open template", ("DIALOG", 32513): "Borland 2D File Save As template", ("DIALOG", 32514): "2D text-entry template selected at 1008:1607", ("DIALOG", 32515): "Borland CTL3D File Open template", ("DIALOG", 32516): "Borland CTL3D File Save As template", ("DIALOG", 32517): "CTL3D text-entry template selected at 1008:1607", }[(resource_type, resource_id)] def mapping(resource_type: str, resource_id: int) -> tuple[str, str]: if resource_type == "DAT": if 400 <= resource_id <= 407: return "fully-mapped", "1000:5390,1008:149d,1000:0002,1000:51f5" if resource_id == 600: return "fully-mapped", "1000:5390,1008:149d,1000:6f27,1000:7440,1000:51f5" if 701 <= resource_id <= 704: return "fully-mapped", "1000:5390,1008:149d,1008:0b9e,1000:51f5" if 801 <= resource_id <= 809: return "fully-mapped", "1000:5390,1008:149d,1008:0dbd,1000:51f5" return "fully-mapped", { 900: "1000:5390,1008:149d,1008:0e08,1000:51f5", 901: "1000:5390,1008:149d,1000:638e,1000:6b37,1000:51f5", 993: "1000:5be5,1008:149d,1000:5c13,1000:5ba6", 994: "1000:5390,1000:531e,1008:149d", 995: "1000:5390,1008:149d", 997: "1000:5390,1008:149d,1008:0837,1000:7440,1000:eab1,1000:51f5", 998: "1000:5390,1008:149d,1008:07b6,1008:08bb,1008:093f,1008:0996,1008:0e08,1000:51f5", 1001: "1000:6129,1008:149d,1000:616e,1000:60e7", 1002: "1000:6129,1008:149d,1000:616e,1000:60e7", 1003: "1000:6129,1008:149d,1000:616e,1000:60e7", 1004: "1000:6129,1008:149d,1000:616e,1000:60e7", 1005: "1000:6129,1008:149d,1000:616e,1000:60e7", }[resource_id] if resource_type == "PAL": return "fully-mapped", "1008:1326,1008:11c5,1008:13a8,1008:149d" if resource_type == "WAV": events = { 2001: "1000:638e", 2002: "1000:638e", 2004: "1000:c79c", 2006: "1000:b476", 2007: "1000:b476,1000:bc36", 2008: "1000:ae6e", 2011: "1000:6f27", 2012: "1000:b476,1000:7440", 2013: "1000:7440", 2015: "1000:c79c", 2016: "1000:eab1", 2017: "1000:b476", 2019: "1000:638e,1000:c79c", 2020: "1000:638e", 2021: "1000:7ed9", 2022: "", }[resource_id] users = "1008:0f2e,1008:1131,1008:10e3" if events: users += "," + events return "fully-mapped", users if resource_type == "BITMAP": return "fully-mapped", { 101: "1000:5390,1000:9bca,1000:9f73,1000:a38e,1000:51f5", 102: "1000:5390,1000:9bca,1000:9f73,1000:a38e", 500: "1000:5390,1008:0996,1000:eab1,1000:51f5", }[resource_id] if (resource_type, resource_id) == ("GROUP_ICON", 996): return "system-resolved", "1000:016c" if (resource_type, resource_id) == ("ICON", 1): return "system-resolved", "GROUP_ICON:996 -> USER:LoadIcon" if resource_type == "VERSION": return "system-resolved", "Windows resource/version consumers; no in-image call" if resource_id in {32514, 32517}: return "fully-mapped", "1008:1607,1008:2996,1008:2a45,1008:2ae3" return "linked-unused", "none (complete verified template-selector inventory)" def build_rows() -> list[dict[str, str]]: target = (ROOT / "TDKPIN.EXE").read_bytes() assert hashlib.sha256(target).hexdigest() == TARGET_SHA256 manifest = json.loads((ROOT / "assets/manifest.json").read_text(encoding="utf-8")) assert manifest["source_sha256"] == TARGET_SHA256 assert manifest["resource_count"] == len(manifest["resources"]) == 63 functions = verified_function_addresses() require_closed_ledger("IMPORT_RECONSTRUCTION.tsv") require_closed_ledger("DATA_RECONSTRUCTION.tsv") require_closed_ledger("DATA_COVERAGE.tsv") rows = [] for entry in manifest["resources"]: resource_type = entry["type"] resource_id = int(entry["id"]) raw = (ROOT / entry["raw_path"]).read_bytes() start = entry["file_offset"] end = start + entry["allocated_size"] assert raw == target[start:end] assert hashlib.sha256(raw).hexdigest() == entry["raw_sha256"] stage, users = mapping(resource_type, resource_id) for token in users.split(","): token = token.strip() if len(token) == 9 and token[4] == ":": assert token in functions, (resource_type, resource_id, token) if stage == "linked-unused": notes = ( "Lossless extraction and decoded template structure are verified; " "the complete selector inventory across 391 verified functions has no user, " "so this Borland library template is explicitly retained as unused." ) elif stage == "system-resolved": notes = ( "Lossless extraction is verified; the Windows resource-system relationship " "and the absence of any additional in-image loader are fully accounted." ) else: notes = ( "Lossless extraction, decoded derivative, exact load/use/release lifecycle, " "and complete verified function closure are represented in reconstructed/" "tdkpin_resources.c and the cited reconstruction units." ) rows.append({ "type": resource_type, "id": str(resource_id), "file_offset": str(entry["file_offset"]), "allocated_size": str(entry["allocated_size"]), "raw_sha256": entry["raw_sha256"], "raw_path": entry["raw_path"], "decoded_paths": ",".join(entry.get("decoded_paths", [])), "status": "verified", "stage": stage, "users": users, "behavior": role(resource_type, resource_id) + ".", "notes": notes, }) assert len({(row["type"], row["id"]) for row in rows}) == 63 return rows def render(rows: list[dict[str, str]]) -> str: stream = io.StringIO(newline="") writer = csv.DictWriter(stream, fieldnames=FIELDS, delimiter="\t", lineterminator="\n") writer.writeheader() writer.writerows(rows) return stream.getvalue() def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--check", action="store_true") args = parser.parse_args() output = render(build_rows()) destination = ROOT / "RESOURCE_RECONSTRUCTION.tsv" if args.check: assert destination.read_text(encoding="utf-8") == output else: destination.write_text(output, encoding="utf-8") if __name__ == "__main__": main() r8xv#!/usr/bin/env python3 """Populate the import ledger from Wine 11.15 Win16 specs and target evidence.""" from __future__ import annotations import csv import hashlib import re import urllib.request from pathlib import Path ROOT = Path(__file__).resolve().parent.parent LEDGER = ROOT / "IMPORT_RECONSTRUCTION.tsv" WINE_TAG = "wine-11.15" WINE_BASE = f"https://gitlab.winehq.org/wine/wine/-/raw/{WINE_TAG}" SPEC_SOURCES = { "USER": ( "dlls/user.exe16/user.exe16.spec", "d873fa88079c4f922cbba2fb3a75f40e2ff23b4d56434b0f4326169397539e32", ), "GDI": ( "dlls/gdi.exe16/gdi.exe16.spec", "3bd84b26a9d4b7aa91a9114d0a46dc13e4d6fcd71290120afdd9b7cfaffe76ab", ), "KERNEL": ( "dlls/krnl386.exe16/krnl386.exe16.spec", "8d799b701d1cf16d4e882b5e354dc6e357056d4adcd83e629571dc4b33b02075", ), "MMSYSTEM": ( "dlls/mmsystem.dll16/mmsystem.dll16.spec", "31e54179db61fa95a1d90a9a230d2ae5afb6013ba37ae54e78990d1795694a73", ), "KEYBOARD": ( "dlls/keyboard.drv16/keyboard.drv16.spec", "ca9a9e697e9afe0baf5cff7099ebb442169f36fa05293e78a0bb50fbefaa096d", ), } SPEC_FUNCTION = re.compile( r"^\s*(?P\d+)\s+" r"(?Ppascal|cdecl|varargs|stub|register)" r"(?P(?:\s+-\S+)*)\s+" r"(?P[A-Za-z0-9_@]+)\((?P[^)]*)\)" ) SPEC_EQUATE = re.compile( r"^\s*(?P\d+)\s+equate\s+(?P[A-Za-z0-9_@]+)\s+(?P\S+)" ) def fetch_specs() -> dict[str, tuple[str, list[str]]]: specs = {} for library, (path, expected_digest) in SPEC_SOURCES.items(): url = f"{WINE_BASE}/{path}" with urllib.request.urlopen(url, timeout=30) as response: payload = response.read() digest = hashlib.sha256(payload).hexdigest() if digest != expected_digest: raise RuntimeError( f"Wine source drift for {path}: expected {expected_digest}, got {digest}" ) specs[library] = (url, payload.decode("utf-8").splitlines()) return specs def parse_specs( specs: dict[str, tuple[str, list[str]]], ) -> dict[tuple[str, str], dict[str, str]]: declarations = {} for library, (url, lines) in specs.items(): for line_number, line in enumerate(lines, 1): match = SPEC_FUNCTION.match(line) if match: name = match.group("name") flags = match.group("flags").strip() kind = match.group("kind") prefix = f"{kind}16" if flags: prefix += f" {flags}" declaration = f"{prefix} {name}({match.group('arguments').strip()})" declarations[(library, name.upper())] = { "prototype": declaration, "evidence": f"Wine {WINE_TAG} {url}#L{line_number}", "notes": ( f"Wine Win16 ordinal {match.group('ordinal')}; " "every TDKPIN call site still requires argument-level review." ), "status": "partial", "stage": "prototype-sourced", } continue match = SPEC_EQUATE.match(line) if match: name = match.group("name") declarations[(library, name.upper())] = { "prototype": f"equate16 {name} = {match.group('value')}", "evidence": f"Wine {WINE_TAG} {url}#L{line_number}", "notes": ( f"Wine Win16 ordinal {match.group('ordinal')}; this is runtime data, " "not a callable function." ), "status": "verified", "stage": "runtime-data", } return declarations def recover_special_declarations( declarations: dict[tuple[str, str], dict[str, str]], ) -> None: keyboard_url = f"{WINE_BASE}/{SPEC_SOURCES['KEYBOARD'][0]}" declarations[("KEYBOARD", "ORDINAL_5")] = { "prototype": "pascal16 -ret16 AnsiToOem(str ptr)", "evidence": f"Wine {WINE_TAG} {keyboard_url}#L5", "notes": "Imported by ordinal; Wine identifies ordinal 5 as AnsiToOem.", "status": "partial", "stage": "prototype-sourced", } declarations[("KEYBOARD", "ORDINAL_6")] = { "prototype": "pascal16 -ret16 OemToAnsi(str ptr)", "evidence": f"Wine {WINE_TAG} {keyboard_url}#L6", "notes": "Imported by ordinal; Wine identifies ordinal 6 as OemToAnsi.", "status": "partial", "stage": "prototype-sourced", } declarations[("MMTIMER", "SYSTEMTIMERMAKE")] = { "prototype": ( "pascal16 -ret16 SystemTimerMake(" "HWND16 recipient, word delay_ms, word resolution_ms, word one_shot)" ), "evidence": ( "MMTIMER.DLL 1000:0039 disassembly; export ordinal 1; " "f1d9ac980c7bfba5dc53eaa9e7cb2c3cd9b82f879ee8962ad40bf863d641bb49" ), "notes": ( "Binary-reviewed wrapper around timeSetEvent16: it installs MMTIMER 1000:0002, " "posts message 0x0580 to recipient, and returns the multimedia timer id." ), "status": "verified", "stage": "binary-reviewed", } def main() -> int: with LEDGER.open(newline="", encoding="utf-8") as handle: reader = csv.DictReader(handle, delimiter="\t") columns = list(reader.fieldnames or ()) rows = list(reader) if "stage" not in columns: columns.insert(columns.index("status") + 1, "stage") declarations = parse_specs(fetch_specs()) recover_special_declarations(declarations) import_keys = {(row["library"], row["import_name"].upper()) for row in rows} missing = sorted(import_keys - set(declarations)) if missing: raise RuntimeError(f"no Win16 declaration for: {missing}") for row in rows: recovered = declarations[(row["library"], row["import_name"].upper())] preserve_review = row.get("stage") not in { "", "untyped-import", "prototype-sourced", "runtime-data", "binary-reviewed", } preserved = ( {key: row.get(key, "") for key in ("status", "stage", "evidence", "notes")} if preserve_review else None ) row.update(recovered) if preserved: row.update(preserved) temporary = LEDGER.with_suffix(LEDGER.suffix + ".tmp") with temporary.open("w", newline="", encoding="utf-8") as handle: writer = csv.DictWriter( handle, fieldnames=columns, delimiter="\t", lineterminator="\n" ) writer.writeheader() writer.writerows(rows) temporary.replace(LEDGER) statuses = {} for row in rows: statuses[row["status"]] = statuses.get(row["status"], 0) + 1 print(f"updated_import_slots={len(rows)}") print( f"unique_declarations={len({(row['library'], row['import_name']) for row in rows})}" ) print("statuses=" + ",".join(f"{key}:{statuses[key]}" for key in sorted(statuses))) return 0 if __name__ == "__main__": raise SystemExit(main()) 9;(xq#!/usr/bin/env bash set -euo pipefail script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) original_dir=$(cd -- "$script_dir/.." && pwd -P) trace_build_dir=$(mktemp -d /tmp/tdkpin-trace.XXXXXX) trace_library="$trace_build_dir/allow_ptrace.so" cleanup() { rm -f -- "$trace_library" rmdir -- "$trace_build_dir" 2>/dev/null || true } trap cleanup EXIT cc -shared -fPIC -O2 -Wall -Wextra -Werror -pthread \ -o "$trace_library" "$script_dir/allow_ptrace.c" echo "Launching traceable TDKPIN.EXE; attach to the winevdm.exe Linux PID." >&2 LD_PRELOAD="$trace_library${LD_PRELOAD:+:$LD_PRELOAD}" \ wine "$original_dir/TDKPIN.EXE" fx"k#!/usr/bin/env bash set -euo pipefail workspace_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd -P) test_build_dir=$(mktemp -d /tmp/tdkpin-c-tests.XXXXXX) trap 'rm -f -- "$test_build_dir/resource-test" "$test_build_dir/runtime-ui-test" "$test_build_dir/string-test" "$test_build_dir/shortstring-test" "$test_build_dir/random-test" "$test_build_dir/object-windows-test" "$test_build_dir/object-windows-handlers-test" "$test_build_dir/window-advanced-test" "$test_build_dir/window-creation-test" "$test_build_dir/game-windows-test" "$test_build_dir/highscores-test" "$test_build_dir/gameplay-helpers-test" "$test_build_dir/ball-render-test" "$test_build_dir/ball-restore-test" "$test_build_dir/ball-sweep-test" "$test_build_dir/player-sprite-test" "$test_build_dir/scoring-test" "$test_build_dir/player-state-test" "$test_build_dir/turn-state-test" "$test_build_dir/mechanism-render-test" "$test_build_dir/collision-events-test" "$test_build_dir/panel-animation-test" "$test_build_dir/game-setup-test" "$test_build_dir/flippers-test" "$test_build_dir/flipper-bitmap-geometry-test" "$test_build_dir/flipper-collision-test" "$test_build_dir/physics-test" "$test_build_dir/timer-tick-test" "$test_build_dir/key-input-test" "$test_build_dir/key-release-test" "$test_build_dir/arithmetic-test" "$test_build_dir/command-line-test" "$test_build_dir/heap-reserve-test" "$test_build_dir/numeric-test" "$test_build_dir/multimedia-test" "$test_build_dir/multimedia-startup-test" "$test_build_dir/multimedia-paths-test" "$test_build_dir/program-entry-test" "$test_build_dir/collision-records-test" "$test_build_dir/heap-core-test" "$test_build_dir/heap-paths-test" "$test_build_dir/global-memory-test" "$test_build_dir/borland-objects-test" "$test_build_dir/stack-test" "$test_build_dir/system-timer-test" "$test_build_dir/dispatch-test" "$test_build_dir/bound-thunks-test" "$test_build_dir/application-test" "$test_build_dir/message-dispatch-test" "$test_build_dir/application-loop-test" "$test_build_dir/application-windows-test" "$test_build_dir/window-messages-test" "$test_build_dir/window-command-test" "$test_build_dir/object-list-test" "$test_build_dir/window-destroy-test" "$test_build_dir/class-registration-test" "$test_build_dir/object-lifecycle-test" "$test_build_dir/child-validation-test" "$test_build_dir/message-pump-test" "$test_build_dir/dialog-test" "$test_build_dir/runtime-input-test" "$test_build_dir/runtime-lifecycle-test" "$test_build_dir/runtime-minmax-test" "$test_build_dir/borland-records-test" "$test_build_dir/borland-files-test" "$test_build_dir/borland-startup-test" "$test_build_dir/tpwincrt-text-test" "$test_build_dir/tpwincrt-lifecycle-test" "$test_build_dir/tables-test" "$test_build_dir/sound-test" "$test_build_dir/real48-test" "$test_build_dir/palette-test" "$test_build_dir/palette-gdi-test" "$test_build_dir/bitmap-loader-test" "$test_build_dir/game-assets-test" "$test_build_dir/overlay-setup-test" "$test_build_dir/board-overlay-test" "$test_build_dir/asset-initializer-test" "$test_build_dir/asset-cleanup-test" "$test_build_dir/render-test" "$test_build_dir/score-render-test" "$test_build_dir/status-render-test" "$test_build_dir/claw-render-test" "$test_build_dir/palette-messages-test" "$test_build_dir/palette-window-messages-test" "$test_build_dir/window-lifecycle-test" "$test_build_dir/window-placement-test" "$test_build_dir/game-application-test"; rmdir -- "$test_build_dir"' EXIT python3 "$workspace_dir/tools/generate_game_setup_collision_data.py" --check python3 "$workspace_dir/tools/promote_verified_imports.py" --check python3 "$workspace_dir/tools/promote_verified_data.py" --check python3 "$workspace_dir/tools/promote_verified_resources.py" --check python3 "$workspace_dir/tools/verify_extracted_assets.py" while IFS= read -r source_unit; do source_name=$(basename -- "$source_unit") rg -Fq -- "$source_name" "$workspace_dir/tools/test_reconstructed_c.sh" done < <(find "$workspace_dir/reconstructed" -maxdepth 1 -name '*.c' -print) clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_initialization.c" \ "$workspace_dir/reconstructed/tests/test_initialization.c" \ -o "$test_build_dir/resource-test" "$test_build_dir/resource-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_resources.c" \ "$workspace_dir/reconstructed/tests/test_resources.c" \ -o "$test_build_dir/resource-test" "$test_build_dir/resource-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_runtime_ui.c" \ "$workspace_dir/reconstructed/tdkpin_data.c" \ "$workspace_dir/reconstructed/tests/test_runtime_ui.c" \ -Wl,--gc-sections \ -o "$test_build_dir/runtime-ui-test" "$test_build_dir/runtime-ui-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_strings.c" \ "$workspace_dir/reconstructed/tests/test_strings.c" \ -Wl,--gc-sections \ -o "$test_build_dir/string-test" "$test_build_dir/string-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_shortstrings.c" \ "$workspace_dir/reconstructed/tests/test_shortstrings.c" \ -Wl,--gc-sections \ -o "$test_build_dir/shortstring-test" "$test_build_dir/shortstring-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_random.c" \ "$workspace_dir/reconstructed/tests/test_random.c" \ -Wl,--gc-sections \ -o "$test_build_dir/random-test" "$test_build_dir/random-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_windows.c" \ "$workspace_dir/reconstructed/tests/test_object_windows.c" \ -Wl,--gc-sections \ -o "$test_build_dir/object-windows-test" "$test_build_dir/object-windows-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tdkpin_dialog.c" \ "$workspace_dir/reconstructed/tests/test_object_windows_handlers.c" \ -Wl,--gc-sections \ -o "$test_build_dir/object-windows-handlers-test" "$test_build_dir/object-windows-handlers-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tests/test_window_advanced_handlers.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-advanced-test" "$test_build_dir/window-advanced-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_placement.c" \ "$workspace_dir/reconstructed/tests/test_window_creation.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-creation-test" "$test_build_dir/window-creation-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_windows.c" \ "$workspace_dir/reconstructed/tests/test_game_windows.c" \ -Wl,--gc-sections \ -o "$test_build_dir/game-windows-test" "$test_build_dir/game-windows-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_borland_runtime.c" \ "$workspace_dir/reconstructed/tdkpin_shortstrings.c" \ "$workspace_dir/reconstructed/tdkpin_strings.c" \ "$workspace_dir/reconstructed/tdkpin_numeric.c" \ "$workspace_dir/reconstructed/tdkpin_highscores.c" \ "$workspace_dir/reconstructed/tests/test_highscores.c" \ -Wl,--gc-sections \ -o "$test_build_dir/highscores-test" "$test_build_dir/highscores-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_gameplay_helpers.c" \ -Wl,--gc-sections \ -o "$test_build_dir/gameplay-helpers-test" "$test_build_dir/gameplay-helpers-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_ball_render.c" \ -Wl,--gc-sections \ -o "$test_build_dir/ball-render-test" "$test_build_dir/ball-render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_ball_restore.c" \ -Wl,--gc-sections \ -o "$test_build_dir/ball-restore-test" "$test_build_dir/ball-restore-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_ball_sweep.c" \ -Wl,--gc-sections \ -o "$test_build_dir/ball-sweep-test" "$test_build_dir/ball-sweep-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_player_sprite.c" \ -Wl,--gc-sections \ -o "$test_build_dir/player-sprite-test" "$test_build_dir/player-sprite-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_gameplay_helpers.c" \ "$workspace_dir/reconstructed/tests/test_scoring.c" \ -Wl,--gc-sections \ -o "$test_build_dir/scoring-test" "$test_build_dir/scoring-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_player_state.c" \ "$workspace_dir/reconstructed/tests/test_player_state.c" \ -Wl,--gc-sections \ -o "$test_build_dir/player-state-test" "$test_build_dir/player-state-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_turn_state.c" \ "$workspace_dir/reconstructed/tests/test_turn_state.c" \ -Wl,--gc-sections \ -o "$test_build_dir/turn-state-test" "$test_build_dir/turn-state-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_mechanism_render.c" \ "$workspace_dir/reconstructed/tests/test_mechanism_render.c" \ -Wl,--gc-sections \ -o "$test_build_dir/mechanism-render-test" "$test_build_dir/mechanism-render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_collision_events.c" \ "$workspace_dir/reconstructed/tests/test_collision_events.c" \ -Wl,--gc-sections \ -o "$test_build_dir/collision-events-test" "$test_build_dir/collision-events-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_panel_animation.c" \ "$workspace_dir/reconstructed/tests/test_panel_animation.c" \ -Wl,--gc-sections \ -o "$test_build_dir/panel-animation-test" "$test_build_dir/panel-animation-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_setup.c" \ "$workspace_dir/reconstructed/tests/test_game_setup.c" \ -Wl,--gc-sections \ -o "$test_build_dir/game-setup-test" "$test_build_dir/game-setup-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_flippers.c" \ "$workspace_dir/reconstructed/tests/test_flippers.c" \ -Wl,--gc-sections \ -o "$test_build_dir/flippers-test" "$test_build_dir/flippers-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_flipper_bitmap_geometry.c" \ "$workspace_dir/reconstructed/tests/test_flipper_bitmap_geometry.c" \ -Wl,--gc-sections \ -o "$test_build_dir/flipper-bitmap-geometry-test" "$test_build_dir/flipper-bitmap-geometry-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_real48.c" \ "$workspace_dir/reconstructed/tdkpin_flipper_collision.c" \ "$workspace_dir/reconstructed/tests/test_flipper_collision.c" \ -Wl,--gc-sections \ -o "$test_build_dir/flipper-collision-test" "$test_build_dir/flipper-collision-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_real48.c" \ "$workspace_dir/reconstructed/tdkpin_physics.c" \ "$workspace_dir/reconstructed/tests/test_physics.c" \ -Wl,--gc-sections \ -o "$test_build_dir/physics-test" "$test_build_dir/physics-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_real48.c" \ "$workspace_dir/reconstructed/tdkpin_timer_tick.c" \ "$workspace_dir/reconstructed/tests/test_timer_tick.c" \ -Wl,--gc-sections \ -o "$test_build_dir/timer-tick-test" "$test_build_dir/timer-tick-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_key_input.c" \ "$workspace_dir/reconstructed/tests/test_key_input.c" \ -Wl,--gc-sections \ -o "$test_build_dir/key-input-test" "$test_build_dir/key-input-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_key_input.c" \ "$workspace_dir/reconstructed/tests/test_key_release.c" \ -Wl,--gc-sections \ -o "$test_build_dir/key-release-test" "$test_build_dir/key-release-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tests/test_arithmetic.c" \ -o "$test_build_dir/arithmetic-test" "$test_build_dir/arithmetic-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_arithmetic.c" \ "$workspace_dir/reconstructed/tdkpin_real48.c" \ "$workspace_dir/reconstructed/tdkpin_collision_records.c" \ "$workspace_dir/reconstructed/tests/test_collision_records.c" \ -Wl,--gc-sections \ -o "$test_build_dir/collision-records-test" "$test_build_dir/collision-records-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_command_line.c" \ "$workspace_dir/reconstructed/tests/test_command_line.c" \ -o "$test_build_dir/command-line-test" "$test_build_dir/command-line-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_runtime.c" \ "$workspace_dir/reconstructed/tests/test_heap_reserve.c" \ -Wl,--gc-sections \ -o "$test_build_dir/heap-reserve-test" "$test_build_dir/heap-reserve-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_numeric.c" \ "$workspace_dir/reconstructed/tests/test_numeric.c" \ -o "$test_build_dir/numeric-test" "$test_build_dir/numeric-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_multimedia.c" \ "$workspace_dir/reconstructed/tests/test_multimedia.c" \ -Wl,--gc-sections \ -o "$test_build_dir/multimedia-test" "$test_build_dir/multimedia-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_strings.c" \ "$workspace_dir/reconstructed/tdkpin_shortstrings.c" \ "$workspace_dir/reconstructed/tdkpin_multimedia_startup.c" \ "$workspace_dir/reconstructed/tests/test_multimedia_startup.c" \ -Wl,--gc-sections \ -o "$test_build_dir/multimedia-startup-test" "$test_build_dir/multimedia-startup-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_strings.c" \ "$workspace_dir/reconstructed/tdkpin_multimedia_paths.c" \ "$workspace_dir/reconstructed/tests/test_multimedia_paths.c" \ -Wl,--gc-sections \ -o "$test_build_dir/multimedia-paths-test" "$test_build_dir/multimedia-paths-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_program_entry.c" \ "$workspace_dir/reconstructed/tests/test_program_entry.c" \ -Wl,--gc-sections \ -o "$test_build_dir/program-entry-test" "$test_build_dir/program-entry-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_heap.c" \ "$workspace_dir/reconstructed/tests/test_heap_core.c" \ -Wl,--gc-sections \ -o "$test_build_dir/heap-core-test" "$test_build_dir/heap-core-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_heap.c" \ "$workspace_dir/reconstructed/tests/test_heap_paths.c" \ -Wl,--gc-sections \ -o "$test_build_dir/heap-paths-test" "$test_build_dir/heap-paths-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_global_memory.c" \ "$workspace_dir/reconstructed/tests/test_global_memory.c" \ -o "$test_build_dir/global-memory-test" "$test_build_dir/global-memory-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_objects.c" \ "$workspace_dir/reconstructed/tests/test_borland_objects.c" \ -Wl,--gc-sections \ -o "$test_build_dir/borland-objects-test" "$test_build_dir/borland-objects-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_stack.c" \ "$workspace_dir/reconstructed/tests/test_stack.c" \ -Wl,--gc-sections \ -o "$test_build_dir/stack-test" "$test_build_dir/stack-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_stack.c" \ "$workspace_dir/reconstructed/tdkpin_borland_objects.c" \ "$workspace_dir/reconstructed/tdkpin_system_timer.c" \ "$workspace_dir/reconstructed/tests/test_system_timer.c" \ -Wl,--gc-sections \ -o "$test_build_dir/system-timer-test" "$test_build_dir/system-timer-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_dispatch.c" \ "$workspace_dir/reconstructed/tests/test_dispatch.c" \ -Wl,--gc-sections \ -o "$test_build_dir/dispatch-test" "$test_build_dir/dispatch-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_runtime.c" \ "$workspace_dir/reconstructed/tdkpin_object_windows.c" \ "$workspace_dir/reconstructed/tests/test_bound_thunks.c" \ -Wl,--gc-sections \ -o "$test_build_dir/bound-thunks-test" "$test_build_dir/bound-thunks-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_objects.c" \ "$workspace_dir/reconstructed/tdkpin_application.c" \ "$workspace_dir/reconstructed/tests/test_application.c" \ -Wl,--gc-sections \ -o "$test_build_dir/application-test" "$test_build_dir/application-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_windows.c" \ "$workspace_dir/reconstructed/tests/test_message_dispatch.c" \ -Wl,--gc-sections \ -o "$test_build_dir/message-dispatch-test" "$test_build_dir/message-dispatch-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_application.c" \ "$workspace_dir/reconstructed/tests/test_application_loop.c" \ -Wl,--gc-sections \ -o "$test_build_dir/application-loop-test" "$test_build_dir/application-loop-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_application.c" \ "$workspace_dir/reconstructed/tests/test_application_windows.c" \ -Wl,--gc-sections \ -o "$test_build_dir/application-windows-test" "$test_build_dir/application-windows-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_windows.c" \ "$workspace_dir/reconstructed/tdkpin_application.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tests/test_window_messages.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-messages-test" "$test_build_dir/window-messages-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_windows.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tests/test_window_command.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-command-test" "$test_build_dir/window-command-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_list.c" \ "$workspace_dir/reconstructed/tests/test_object_list.c" \ -o "$test_build_dir/object-list-test" "$test_build_dir/object-list-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_list.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tests/test_window_destroy.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-destroy-test" "$test_build_dir/window-destroy-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_messages.c" \ "$workspace_dir/reconstructed/tests/test_class_registration.c" \ -Wl,--gc-sections \ -o "$test_build_dir/class-registration-test" "$test_build_dir/class-registration-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_lifecycle.c" \ "$workspace_dir/reconstructed/tests/test_object_lifecycle.c" \ -Wl,--gc-sections \ -o "$test_build_dir/object-lifecycle-test" "$test_build_dir/object-lifecycle-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_object_list.c" \ "$workspace_dir/reconstructed/tests/test_child_validation.c" \ -o "$test_build_dir/child-validation-test" "$test_build_dir/child-validation-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_message_pump.c" \ "$workspace_dir/reconstructed/tests/test_message_pump.c" \ -Wl,--gc-sections \ -o "$test_build_dir/message-pump-test" "$test_build_dir/message-pump-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_dialog.c" \ "$workspace_dir/reconstructed/tests/test_dialog.c" \ -Wl,--gc-sections \ -o "$test_build_dir/dialog-test" "$test_build_dir/dialog-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_runtime_ui.c" \ "$workspace_dir/reconstructed/tdkpin_data.c" \ "$workspace_dir/reconstructed/tests/test_runtime_input.c" \ -Wl,--gc-sections \ -o "$test_build_dir/runtime-input-test" "$test_build_dir/runtime-input-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_runtime_ui.c" \ "$workspace_dir/reconstructed/tests/test_runtime_lifecycle.c" \ -Wl,--gc-sections \ -o "$test_build_dir/runtime-lifecycle-test" "$test_build_dir/runtime-lifecycle-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_runtime_ui.c" \ "$workspace_dir/reconstructed/tests/test_runtime_minmax.c" \ -Wl,--gc-sections \ -o "$test_build_dir/runtime-minmax-test" "$test_build_dir/runtime-minmax-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_records.c" \ "$workspace_dir/reconstructed/tests/test_borland_records.c" \ -o "$test_build_dir/borland-records-test" "$test_build_dir/borland-records-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_borland_files.c" \ "$workspace_dir/reconstructed/tests/test_borland_files.c" \ -o "$test_build_dir/borland-files-test" "$test_build_dir/borland-files-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_borland_startup.c" \ "$workspace_dir/reconstructed/tests/test_borland_startup.c" \ -o "$test_build_dir/borland-startup-test" "$test_build_dir/borland-startup-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_tpwincrt_text.c" \ "$workspace_dir/reconstructed/tests/test_tpwincrt_text.c" \ -Wl,--gc-sections \ -o "$test_build_dir/tpwincrt-text-test" "$test_build_dir/tpwincrt-text-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_tpwincrt_lifecycle.c" \ "$workspace_dir/reconstructed/tests/test_tpwincrt_lifecycle.c" \ -Wl,--gc-sections \ -o "$test_build_dir/tpwincrt-lifecycle-test" "$test_build_dir/tpwincrt-lifecycle-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_tables.c" \ "$workspace_dir/reconstructed/tests/test_tables.c" \ -o "$test_build_dir/tables-test" "$test_build_dir/tables-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_data.c" \ "$workspace_dir/reconstructed/tdkpin_command_line.c" \ "$workspace_dir/reconstructed/tdkpin_strings.c" \ "$workspace_dir/reconstructed/tdkpin_shortstrings.c" \ "$workspace_dir/reconstructed/tdkpin_sound.c" \ "$workspace_dir/reconstructed/tests/test_sound.c" \ -Wl,--gc-sections \ -o "$test_build_dir/sound-test" "$test_build_dir/sound-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -fsanitize=address,undefined \ "$workspace_dir/reconstructed/tdkpin_real48.c" \ "$workspace_dir/reconstructed/tests/test_real48.c" \ -o "$test_build_dir/real48-test" "$test_build_dir/real48-test" "$workspace_dir/tools/probe_real48_reference.sh" >/dev/null clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_palette.c" \ "$workspace_dir/reconstructed/tests/test_palette.c" \ -Wl,--gc-sections \ -o "$test_build_dir/palette-test" "$test_build_dir/palette-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_palette.c" \ "$workspace_dir/reconstructed/tests/test_palette_gdi.c" \ -Wl,--gc-sections \ -o "$test_build_dir/palette-gdi-test" "$test_build_dir/palette-gdi-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_palette.c" \ "$workspace_dir/reconstructed/tests/test_bitmap_loader.c" \ -Wl,--gc-sections \ -o "$test_build_dir/bitmap-loader-test" "$test_build_dir/bitmap-loader-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_assets.c" \ "$workspace_dir/reconstructed/tests/test_game_assets.c" \ -Wl,--gc-sections \ -o "$test_build_dir/game-assets-test" "$test_build_dir/game-assets-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_assets.c" \ "$workspace_dir/reconstructed/tests/test_overlay_setup.c" \ -Wl,--gc-sections \ -o "$test_build_dir/overlay-setup-test" "$test_build_dir/overlay-setup-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_assets.c" \ "$workspace_dir/reconstructed/tests/test_board_overlay.c" \ -Wl,--gc-sections \ -o "$test_build_dir/board-overlay-test" "$test_build_dir/board-overlay-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_asset_initializer.c" \ "$workspace_dir/reconstructed/tests/test_asset_initializer.c" \ -o "$test_build_dir/asset-initializer-test" "$test_build_dir/asset-initializer-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_asset_cleanup.c" \ "$workspace_dir/reconstructed/tests/test_asset_cleanup.c" \ -o "$test_build_dir/asset-cleanup-test" "$test_build_dir/asset-cleanup-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_render.c" \ "$workspace_dir/reconstructed/tests/test_render.c" \ -Wl,--gc-sections \ -o "$test_build_dir/render-test" "$test_build_dir/render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_render.c" \ "$workspace_dir/reconstructed/tests/test_score_render.c" \ -Wl,--gc-sections \ -o "$test_build_dir/score-render-test" "$test_build_dir/score-render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_status_render.c" \ "$workspace_dir/reconstructed/tests/test_status_render.c" \ -o "$test_build_dir/status-render-test" "$test_build_dir/status-render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_claw_render.c" \ "$workspace_dir/reconstructed/tests/test_claw_render.c" \ -o "$test_build_dir/claw-render-test" "$test_build_dir/claw-render-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_assets.c" \ "$workspace_dir/reconstructed/tests/test_palette_messages.c" \ -Wl,--gc-sections \ -o "$test_build_dir/palette-messages-test" "$test_build_dir/palette-messages-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_assets.c" \ "$workspace_dir/reconstructed/tests/test_palette_window_messages.c" \ -Wl,--gc-sections \ -o "$test_build_dir/palette-window-messages-test" "$test_build_dir/palette-window-messages-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_lifecycle.c" \ "$workspace_dir/reconstructed/tests/test_window_lifecycle.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-lifecycle-test" "$test_build_dir/window-lifecycle-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ -ffunction-sections -fdata-sections \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_window_placement.c" \ "$workspace_dir/reconstructed/tests/test_window_placement.c" \ -Wl,--gc-sections \ -o "$test_build_dir/window-placement-test" "$test_build_dir/window-placement-test" clang -std=c11 -Wall -Wextra -Werror -pedantic \ "$workspace_dir/reconstructed/tdkpin_segmented.c" \ "$workspace_dir/reconstructed/tdkpin_game_application.c" \ "$workspace_dir/reconstructed/tests/test_game_application.c" \ -o "$test_build_dir/game-application-test" "$test_build_dir/game-application-test" echo "Reconstructed C tests passed" t\x:is8+0/D%'vpke[N.$u q忿jdVU.@/t_ V,ݣ=:K;.I5E1(b[ I$EYgw,%1CtG4纮D;ſdz2q_5 {i(T pKh*=|y~O.?\hk:dzsɾ?Kb7k%sr>Nn&/Ofzzތ:7/g7 ||~yn~j/%^~8^̯2}RF@e4~i{Y&Λg|53Y{rIr8u>/Ox6ƌ gszqqaِs':>o [C|~vWi/ś-?KЬEZkZ~X^/N4Ox]cOOtW쮚29Og :tzO?'WbT4 |$r?s 7GC4SYУiQqxP!:JIʙ^6B$Y,F>:#j,t9  3攄FK4Ȅ$GYNB4tz(3ACzPvd[r,CE^γ`1g&E,*7h,(rUEΟ4U ۀ]9<D᡹)NH!(Agn")]A-bR16Lۥ.{OfY,xbI@ao=ngjNM1h*)7b\55u ~'ۥ9=uaY.b&nE,ܖcJNJ㷪}#D ]"!^QphDž, =LUACV10(TO7Ln wvi=4 ZR`r>K堾p" zfc'Љ\[[0R Ccn?mՒh. CN0zT:zTTq4C͢d[l x /G#rN =U~Kw#W?H{xGz=V tFO,_J =0̿d<k 'h8RJC K(ORYA \_LP6 _7.ҒfsD{P:,APfiANG ߴi&.J#F 5j^pϻ9fbj4XgLpA3uX+X$,By;W~iVʎ+ Zn4&ǖPUv "0G{wVoV &YzViL0Cks5\+*ҖJƞCbqR[{28۶_),Ș^Vmge,Y\KJ+!1"e`k"UV85U H;ݎZzTGG|B ri@M)1 q!Hqc)X~,X+!)Ԉ8 $&lYR$X䔆8aqpN9,fq8SEPl{h)-C-JvR֧KWbI,X@ֻ 0 C ᖊ1L@ Ȣ`IhM E$I=CH5ejUԜ6wU۵%sY1Zyg ƴ*OҒzsVSfm%#nժ);.24ex=~F"#OaԳB)NOl6?4D oԪ=m»-B_؂t}e c9U)aþjMմ[O}& $T$0u%5!U3~W=JA!g900 0(=0"qBw_WPh.Кƹآũd;;4^a=1Լ1IV!A$.tGhR^׷4ۤ: 0erM"}uldMm IXp\8#P)bO') 9܄%% Kç }$'b4,*肶R=?5WVȼvY'ˏ;2 6k,} ﺞMKO@tY@^)?|4 ^D(9[tLRVT垚]tʵZ`G:,T_bk7O5Aݍ T},d4~ 5x> }ahܹU?~hO hT٪mR9 U3ZUK^V:0+Vd7U q:gUv5ZtRoQ\;J;kOƖKmX}dv2B ,3mjBC7B9o" q v V%Y,eND5vrM Md2m-0&m<5d2ŅsmwO@ዡQ]j_Sv.vg!n)zi/FuC޸CW 4#ZwtĩhbR^P;hj"4p#qAiQb&*gܪ{8 >Ɓ PGr1N\Lt!&Bderꛣ2ixzTG7!xk #!/usr/bin/env python3 """Verify that every manifest resource round-trips to TDKPIN.EXE.""" from __future__ import annotations import hashlib import json import struct import wave from collections import Counter from pathlib import Path from PIL import Image ROOT = Path(__file__).resolve().parent.parent def main() -> None: manifest = json.loads((ROOT / "assets" / "manifest.json").read_text(encoding="utf-8")) source = (ROOT / manifest["source"]).read_bytes() assert hashlib.sha256(source).hexdigest() == manifest["source_sha256"] assert manifest["resource_count"] == 63 assert len(manifest["resources"]) == 63 assert not manifest["decode_errors"] expected_types = { "DAT": 34, "PAL": 1, "WAV": 16, "BITMAP": 3, "ICON": 1, "GROUP_ICON": 1, "VERSION": 1, "DIALOG": 6, } assert Counter(entry["type"] for entry in manifest["resources"]) == expected_types for entry in manifest["resources"]: raw = (ROOT / entry["raw_path"]).read_bytes() offset = entry["file_offset"] allocated_size = entry["allocated_size"] assert len(raw) == allocated_size assert raw == source[offset : offset + allocated_size] assert hashlib.sha256(raw).hexdigest() == entry["raw_sha256"] for decoded_path in entry["decoded_paths"]: assert (ROOT / decoded_path).is_file() if entry["type"] in {"DAT", "BITMAP", "ICON"}: png_paths = [path for path in entry["decoded_paths"] if path.endswith(".png")] assert len(png_paths) == 1 with Image.open(ROOT / png_paths[0]) as image: assert image.width == entry["image"]["width"] assert image.height == abs(entry["image"]["height"]) if entry["type"] == "WAV": wav_path = ROOT / entry["decoded_paths"][0] with wave.open(str(wav_path), "rb") as stream: assert stream.getnchannels() == entry["audio"]["channels"] assert stream.getframerate() == entry["audio"]["sample_rate"] assert stream.getsampwidth() * 8 == entry["audio"]["sample_width_bits"] if entry["type"] == "DIALOG": dialog = json.loads((ROOT / entry["decoded_paths"][0]).read_text(encoding="utf-8")) assert len(dialog["controls"]) == dialog["declared_control_count"] if "actual_size" in entry: assert 0 < entry["actual_size"] <= allocated_size # Verify that the resource intervals do not overlap one another. ranges = sorted( (entry["file_offset"], entry["file_offset"] + entry["allocated_size"]) for entry in manifest["resources"] ) for previous, current in zip(ranges, ranges[1:]): assert previous[1] <= current[0] print("Verified 63/63 raw resources and all decoded derivatives") if __name__ == "__main__": main() iTx340031QK,I,))L*-I-fp8̟ȺV(GRӮH5ttw Ma` J=_(<*nmܟ̡[ OY^ǭD@1mpp K,JOfX!z$gJh &$?7g?̓;f|zǩDZj' \]|r.tLr%%WR~ѽb.i&f.3ۚX\ZRCٱAQw]ofҦb5-$-3'¼CzU<ʏ=dt"4 L.0_Qx$fOMoX "pDz=9? Ǽ#.q޽&v s$ 8`@TC Gw5 h\ R.Q#GF]W{^> lV6oNyAH|MmH➀QLR"SE#7DrZj/-ۓ舊8A:QIJ-'H2`pi8 B#'H 3q$Hsb|jNZ~y'xજ$_-Zׯ`p-Mܓ6won+ J3Meq ?e."" ²frC Z[j12m<*5 4/?@H?z\GF" n\hIJZY%G2Sq*g\ +_?ˋ?曶p|Ŏzݔ  yAXt3'!njvo |ԅW)P!. f 0zK [TH,1A!12e8Gw6 a^9K#;>\~iclK)4Pߓ4[6HKuD㤪E^=6rkYN<`Ԃ@Y&cj3W,R켛S 9dLc.cm/YEq[~8IbX%Z[(?;0KO<\+$&eܣK{的|Q[1Uq؉DnE4Ss<1XD=7Gs-P7wk\ a<[L0'⚰~ IsiG©M3|1C r&'9ynۼOQ, x]׶woG}LR%~! =X}1L~l>w/ŖOOIh^h;чx8iب7d5)6Qs *N )sܜd cv9̉$/6,^laO`)n˃ r>\Z$RK96}W)3%&]!=9Iy)L^ ;:Ē>om6dܡz4B3c 0+ >ʓ?"H.9jzn(ࣰzhgB9x AGENTS.md ºx;%# This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "adler2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "audir-sles" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea47348666a8edb7ad80cbee3940eb2bccf70df0e6ce09009abe1a836cb779f5" [[package]] name = "audrey" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58b92a84e89497e3cd25d3672cd5d1c288abaac02c18ff21283f17d118b889b8" dependencies = [ "dasp_frame", "dasp_sample", "hound", "lewton", ] [[package]] name = "autocfg" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bytemuck" version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "core_maths" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" dependencies = [ "libm", ] [[package]] name = "crc32fast" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "dasp_frame" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a3937f5fe2135702897535c8d4a5553f8b116f76c1529088797f2eee7c5cd6" dependencies = [ "dasp_sample", ] [[package]] name = "dasp_sample" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "directories" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", "windows-sys", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "fdeflate" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] [[package]] name = "flate2" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", ] [[package]] name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "fontdue" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7894823fa221401399e2598f8b63f81ac77ff5c63248b7656779bff1632d7d3d" dependencies = [ "hashbrown", "ttf-parser", ] [[package]] name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", "wasi", ] [[package]] name = "glam" version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" [[package]] name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] [[package]] name = "hound" version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" [[package]] name = "image" version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" dependencies = [ "bytemuck", "byteorder", "color_quant", "num-traits", "png", ] [[package]] name = "itoa" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "lewton" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d542c1a317036c45c2aa1cf10cc9d403ca91eb2d333ef1a4917e5cb10628bd0" dependencies = [ "byteorder", "ogg", "smallvec", ] [[package]] name = "libc" version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libm" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" dependencies = [ "libc", ] [[package]] name = "macroquad" version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cbd54d99d4d3ac59deed7ee4927bbbf4eb33a55635530af3be9395a55746090" dependencies = [ "fontdue", "glam", "image", "macroquad_macro", "miniquad", "quad-rand", "quad-snd", ] [[package]] name = "macroquad_macro" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64b1d96218903768c1ce078b657c0d5965465c95a60d2682fd97443c9d2483dd" [[package]] name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ "libc", ] [[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miniquad" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbaea978d741f3b60ced666b06a2a1e4a2bc81cb8b9dd29f4a40965e1f59e65" dependencies = [ "libc", "ndk-sys", "objc-rs", "winapi", ] [[package]] name = "miniz_oxide" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "ndk-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "objc-rs" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64a1e7069a2525126bf12a9f1f7916835fafade384fb27cabf698e745e2a1eb8" dependencies = [ "malloc_buf", ] [[package]] name = "ogg" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e571c3517af9e1729d4c63571a27edd660ade0667973bfc74a67c660c2b651" dependencies = [ "byteorder", ] [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "png" version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags", "crc32fast", "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "proc-macro2" version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quad-alsa-sys" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66c2f04a6946293477973d85adc251d502da51c57b08cd9c997f0cfd8dcd4b5" dependencies = [ "libc", ] [[package]] name = "quad-rand" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a651516ddc9168ebd67b24afd085a718be02f8858fe406591b013d101ce2f40" [[package]] name = "quad-snd" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cba0c4943fc67147fbe9d1eb731fb9e678bfc9d926507eebbbfe0103e154e5b0" dependencies = [ "audir-sles", "audrey", "libc", "quad-alsa-sys", "winapi", ] [[package]] name = "quote" version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "redox_users" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom", "libredox", "thiserror", ] [[package]] name = "serde" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "simd-adler32" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "smallvec" version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" dependencies = [ "maybe-uninit", ] [[package]] name = "syn" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "tdkpin-rs" version = "0.1.0" dependencies = [ "directories", "macroquad", "serde", "serde_json", ] [[package]] name = "thiserror" version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" dependencies = [ "core_maths", ] [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] [[package]] name = "zmij" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" 9ʩ)x`[package] name = "tdkpin-rs" version = "0.1.0" edition = "2024" [dependencies] directories = "6.0.0" macroquad = { version = "0.4.16", features = ["audio"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" [lints.clippy] pedantic = { level = "warn", priority = -1 } todo = "warn" unwrap_used = "warn" [lints.rust] unsafe_code = "forbid" [profile.release] debug = true strip = false debug-assertions = true overflow-checks = true lto = false panic = "unwind" incremental = true [profile.production] inherits = "release" debug = false strip = true debug-assertions = false overflow-checks = false lto = true incremental = false codegen-units = 1 ޅݴxeV]o6} ޕl~>Innrh#k6_/}1d3<^ _حZ7APp2*q0a ib NRGpwWvo#'x5xf H1_P'2١ i3L%.a*w`q2Y(L܏%*_g_Q~ ;n|T~YO$s*I\L1ď?.@`_)Er)m(ɂwT> A]񺫯܂L.M6d(>%?@h٭s2pL>$l($h|FJě!\)c2C뀽4yi#2t]fpaC. H)Rԯ2n)1ʒXl d3J蔺u1 d˅Ğ0Wi)aW  !q_ݟzeK)X.&8墔d8%r"$ kJӝy3dcD8͌2!>) F*7Wp?sAŷL9"ed.̝2KC.LPP=:S[} (QqL'ݡcaMvd jrGX٠do?&"g8@h 2YAe2g .+0 2"1aOR%q,="X5XJ̀KΗ#\=qض 4k)\mq[fa^N>F\|zubp_"ASkrO Pk,/ﮖ $ALpMeU98uGPgSAcqt ϭa9v~|T<)N!Ld$`a=γ8{t's kXa"7#guޭud8s3] FpQk:D;Å1í^kxLB 8H{ރd,y{#jNz5GvV9:5Ck`7[ߊZ(:xԦC a{D~ ^vv)-BUSdn4k=,TˎTINby'(@(xy@{t:j1X*^M*1^w?;~XgjoYG@x,i$q_]t~^6]E&"q\lOeq /m\ZmHb~1]̜4\S18斵K$ZddCzwvn%°VNQ8K$U\U#]9UpͮR>8n1󚸔mOVL WjmY?eHFfmVI3h4-e旸!*uɁ\ ;{V L Jy߉DP&n!òZz")e]*p |啠 XOB>H 鱸z9xe/7mT)"9@?}%zF[ZQ "DHYo_^}9;64)KfM''Ʈ%wF S,C 23ioxmZ]۶}ׯ誼ĉ4/Cb8d@)b8oHI_D8}NC?' UΒz~6_1)uf/-?~#xQlzρ| l͞Ņz2ۅ{)޻W5^H:Ͷm8SwYmyj͚orTWJ4חJe-˻ꪾME/v֬;U.)U]]]Rw|S겪us{s|{wVfY6חfU;?rO7Z]{%zd '2.+޿%~ꝏz3^UWglty'7~lVU;J8sY_jaNQlU Qr56Dy!uͶb*)ʞ<}B7ܱ .$S^& C!r7=z)D@v G*`k왊Ξ IU8uC;0zfl%k*uT+g] )oUԏHӴՖ*4c AWC isLAqv7M?R3}l]GϩZdYU,*Iu}NhBbfǬs_<tLJkiU}4Pt tȐ'5U#2[w\DqBl`6pyY.`u OL[}_lY{ {cK%Z]-`"5OX^ui[\.[2n]-hH lTS(h VS,uDБuqxu zMϭnuzCj$FDŽR?^-Ob?~0+ܫJ!0fPu̸z]UׁW<{(յt siKf0\[-_ĬczqYgaEɁId1謹+ێыNJnգvwu { ÞVKIN iTUsڦ ='T2*zNEuH1t ϛɷaz:[e( nB`!ď Rݥy#VC_swmns-u9ejH#6=*ix稾=E %z"E6S~&Y@7g[E2LNF]-F~Z.[R 1(?"myzJI KAߙII;9W:r<ɉ1'៤Pⱑ[" "PKgiݳO=c1H9KwVȈҨ:ĽM[Fn?2Mp7NUi@n |*Dbbwp%Nׄ*b $9λJC_Qbfz yT;s }W0d}Bw"kdCP9$fXX ~^PGnnpB]HKig\9Lf֍Q¬4]||s9J$NA p<U,&?_u 2_.c;ADx v 4-%U`UQl{j1\!NaNC^>$+jTzid$;Wg1A+,77yj.AɓSlX:V}H0K#D >>#nb+?y"reX+D-Hf:movAŊn-k#eM®kr}&2>Ue΅.uH\I1NQkۿ.Knrգ" -pe3JBpʎVpiMLCV9:Laɹ"@|@Q5je؅oPF71o7c;uz1k/:`T7GmeDLEp-vS7i&FʴA‚>98>xF;:eӬ4<O ~\/%<>S9hS`R+01@ h:W~9S#)21YLP#B͔yfU \8h܁ <1f[)sl4X̛8:8^C &eBDhyF:85EJi)(Eit{MWEP 3ŨZW^SΨ%@)˜$h1Ni>#pOnR"n;ONE 44Lưc,-@HmPXB[#rJ%8ç!*?NWaFv|o2> Bƅ+cXPV%´Z-VW0f*(͖3:Lœ]LnbܳDYzld-6el1?LSjPFƌX&ٓp*xRd"8qsxLAN M{e;J #GpEa,`ljW,89ڥϮZ/FDo[P~Έ2ǝs>~f~f4#0 ѳ%eBB,|ՖN[)X~~'ձ}Nn~kk\0tB.x}.}#4zf)>_<6ZycUqE?H9 t=H|.3O$՘9/FَC/1Y.K6%\;e/.^kBNqȼ("; s q6@z+t2 Z~x(/KӼ?)KյЄI'Ss;tBQҒ#k>NVSm<]Ѵ>l_w:)MY'y8-Si96\:O*QC mwI(N$JR& ~sN=$-4ޏθ7v,-?F$}8_{ eH i-@*hb'%,# CYv ngLY1Tumq1{뿣x#40000 originalf>FRkR;E [x100644 HISCORES.DATU ȯMZ 100644 TDKPIN.INI232P2m]^ h׮%40000 audioԔN'Xns40000 dialogsI֎CvD40000 iconsAe\R"d 40000 imagesKHzeǛ Kxc140000 metadata>qH5s1sE40000 palettesId>~zl_&qr)xcset positional-arguments run *args: cargo run -- "$@" build: cargo build build-release: cargo build --release build-production: cargo build --profile production fmt: cargo +nightly fmt tombi format fd -tf -e md -x prettier --write --prose-wrap always --print-width 80 rumdl check --flavor commonmark --fix just --fmt _fix: cargo fix --workspace --all-targets --all-features cargo clippy --fix --workspace --all-targets --all-features fix: _fix fmt clippy: cargo clippy --workspace --all-targets --all-features -- -D warnings test: cargo test --workspace --all-targets --all-features clean: cargo clean 17xggroup_imports = "StdExternalCrate" imports_granularity = "Crate" imports_layout = "HorizontalVertical" ?%֥xJ100644 app.rs f@=mdb٢~w100644 assets.rs mU)X~100644 borland_random.rsY%Ayr F~100644 flipper_physics.rs`>G'T100644 game.rsTXYde`8100644 geometry.rs=>FzTW8,e100644 main.rs[ϊ.!ǿ'6A100644 original_physics.rs15\IH!100644 persistence.rs#~QJaZ100644 simulation.rs43}//}3dƕ100644 table.rs(C4Nٲ㳦 xiuse crate::{ assets::Assets, game::{Controls, Event, Game}, persistence::{HighScore, Language, Persistence, SavedData, insert_high_score}, }; use macroquad::prelude::*; const WIDTH: f32 = 640.0; const HEIGHT: f32 = 460.0; #[derive(Clone, Copy, Debug, PartialEq, Eq)] enum Screen { Loading, Attract, Playing, Help, Settings, HighScores, NameEntry, } pub struct App { assets: Assets, persistence: Persistence, saved: SavedData, render_target: RenderTarget, screen: Screen, return_screen: Screen, game: Option, player_count: usize, setting_row: usize, loading_until: f64, last_help_click: f64, message: String, message_until: f64, name: String, pending_score: u32, } impl App { pub async fn load() -> Self { let assets = Assets::load().await; let persistence = Persistence::new(); let saved = persistence.load(); let render_target = render_target(640, 460); render_target.texture.set_filter(FilterMode::Nearest); Self { assets, persistence, saved, render_target, screen: Screen::Loading, return_screen: Screen::Attract, game: None, player_count: 1, setting_row: 0, loading_until: get_time() + 1.1, last_help_click: -1.0, message: String::new(), message_until: 0.0, name: String::new(), pending_score: 0, } } pub fn frame(&mut self) { self.handle_global_input(); match self.screen { Screen::Loading => { if get_time() >= self.loading_until { self.screen = Screen::Attract; } } Screen::Attract => self.update_attract(), Screen::Playing => self.update_game(), Screen::Help => self.update_help(), Screen::Settings => self.update_settings(), Screen::HighScores => self.update_high_scores(), Screen::NameEntry => self.update_name_entry(), } self.draw_logical(); self.present(); } fn handle_global_input(&mut self) { if is_key_pressed(KeyCode::F12) { self.saved.settings.sounds = !self.saved.settings.sounds; if self.saved.settings.sounds { "SOUND ON" } else { "SOUND OFF" } .clone_into(&mut self.message); self.message_until = get_time() + 1.2; self.save(); } if is_key_pressed(KeyCode::F1) && self.screen != Screen::NameEntry { if self.screen == Screen::Help { self.screen = self.return_screen; } else { self.return_screen = self.base_screen(); self.screen = Screen::Help; } } if is_key_pressed(KeyCode::F2) && self.screen != Screen::NameEntry { if self.screen == Screen::Settings { self.screen = self.return_screen; } else { self.return_screen = self.base_screen(); self.screen = Screen::Settings; } } if is_key_pressed(KeyCode::F3) && self.screen != Screen::NameEntry { if self.screen == Screen::HighScores { self.screen = self.return_screen; } else { self.return_screen = self.base_screen(); self.screen = Screen::HighScores; } } } fn base_screen(&self) -> Screen { if self.game.is_some() { Screen::Playing } else { Screen::Attract } } fn update_attract(&mut self) { if is_key_pressed(KeyCode::KpAdd) || is_key_pressed(KeyCode::Equal) { self.player_count = self.player_count % 4 + 1; self.assets.play(2012, self.saved.settings.sounds); } if is_key_pressed(KeyCode::Down) || is_key_pressed(KeyCode::Enter) { let mut game = Game::new(self.player_count); let launched = game.launch(); self.game = Some(game); self.screen = Screen::Playing; self.assets.play(2008, self.saved.settings.sounds); if launched { self.assets.play(2016, self.saved.settings.sounds); } } } fn update_game(&mut self) { let left_flipper = is_key_down(KeyCode::LeftControl) || is_key_down(KeyCode::A) || is_key_down(KeyCode::Left); let right_flipper = is_key_down(KeyCode::KpEnter) || is_key_down(KeyCode::RightControl) || is_key_down(KeyCode::D) || is_key_down(KeyCode::Right); let nudge = if is_key_pressed(KeyCode::LeftShift) { -1.0 } else if is_key_pressed(KeyCode::RightShift) || is_key_pressed(KeyCode::Kp3) { 1.0 } else if is_key_pressed(KeyCode::Space) { if self .game .as_ref() .is_some_and(|game| game.ball.position.x < WIDTH / 4.0) { 1.0 } else { -1.0 } } else { 0.0 }; let controls = Controls { left_flipper, right_flipper, launch_pressed: is_key_pressed(KeyCode::Down), nudge, }; let events = self.game.as_mut().map_or_else(Vec::new, |game| { game.update(get_frame_time(), self.saved.settings.speed, controls) }); for event in events { self.play_event(event); } if self.game.as_ref().is_some_and(|game| game.finished) { self.finish_game(); } } fn play_event(&self, event: Event) { let id = match event { Event::Flipper => 2001, Event::Launch => 2016, Event::Bumper => 2002, Event::Target => 2006, Event::Wheel => 2004, Event::Robot => 2007, Event::Lock => 2017, Event::Media => 2022, Event::ExtraBall => 2019, Event::Nudge | Event::BallSearch => 2021, Event::Tilt => 2015, Event::Drain => 2013, }; self.assets.play(id, self.saved.settings.sounds); } fn finish_game(&mut self) { self.pending_score = self .game .as_ref() .and_then(|game| game.players.iter().map(|player| player.score).max()) .unwrap_or(0); let qualifies = self.saved.high_scores.len() < 10 || self .saved .high_scores .last() .is_some_and(|entry| self.pending_score > entry.score); if qualifies { self.name.clear(); self.screen = Screen::NameEntry; } else { self.game = None; self.return_screen = Screen::Attract; self.screen = Screen::HighScores; } self.assets.play(2020, self.saved.settings.sounds); } fn update_help(&mut self) { if is_key_pressed(KeyCode::Escape) || is_key_pressed(KeyCode::Enter) { self.screen = self.return_screen; } if is_mouse_button_pressed(MouseButton::Left) { let point = Self::logical_mouse(); if point.x < 145.0 && point.y < 115.0 { let now = get_time(); if now - self.last_help_click <= 0.40 { self.save(); macroquad::miniquad::window::request_quit(); } self.last_help_click = now; } } } fn update_settings(&mut self) { if is_key_pressed(KeyCode::Escape) || is_key_pressed(KeyCode::Enter) { self.save(); self.screen = self.return_screen; return; } if is_key_pressed(KeyCode::Up) { self.setting_row = (self.setting_row + 2) % 3; } if is_key_pressed(KeyCode::Down) { self.setting_row = (self.setting_row + 1) % 3; } let direction = i8::from(is_key_pressed(KeyCode::Right)) - i8::from(is_key_pressed(KeyCode::Left)); if direction == 0 && !is_key_pressed(KeyCode::Space) { return; } match self.setting_row { 0 => { let speed = i16::from(self.saved.settings.speed) + i16::from(direction); self.saved.settings.speed = u8::try_from(speed.clamp(1, 5)).unwrap_or(3); } 1 => { self.saved.settings.sounds = !self.saved.settings.sounds; } _ => { let current = Language::ALL .iter() .position(|language| *language == self.saved.settings.language) .unwrap_or(0); let next = if direction < 0 { (current + Language::ALL.len() - 1) % Language::ALL.len() } else { (current + 1) % Language::ALL.len() }; self.saved.settings.language = Language::ALL[next]; } } self.assets.play(2012, self.saved.settings.sounds); self.save(); } fn update_high_scores(&mut self) { if is_key_pressed(KeyCode::Escape) || is_key_pressed(KeyCode::Enter) || is_key_pressed(KeyCode::F3) { self.screen = self.return_screen; } } fn update_name_entry(&mut self) { while let Some(character) = get_char_pressed() { if !character.is_control() && self.name.chars().count() < 21 { self.name.push(character); } } if is_key_pressed(KeyCode::Backspace) { self.name.pop(); } if is_key_pressed(KeyCode::Enter) && !self.name.trim().is_empty() { insert_high_score( &mut self.saved.high_scores, HighScore { name: self.name.trim().to_owned(), score: self.pending_score, }, ); self.save(); self.game = None; self.return_screen = Screen::Attract; self.screen = Screen::HighScores; } } fn draw_logical(&self) { let mut camera = Camera2D::from_display_rect(Rect::new(0.0, 0.0, WIDTH, HEIGHT)); camera.render_target = Some(self.render_target.clone()); set_camera(&camera); clear_background(BLACK); match self.screen { Screen::Loading => draw_texture(&self.assets.loading, 0.0, 0.0, WHITE), Screen::Help => { let index = Language::ALL .iter() .position(|language| *language == self.saved.settings.language) .unwrap_or(0); draw_texture(&self.assets.help[index], 0.0, 0.0, WHITE); } Screen::Attract => self.draw_attract(), Screen::Playing => self.draw_game(), Screen::Settings => self.draw_settings(), Screen::HighScores => self.draw_high_scores(), Screen::NameEntry => self.draw_name_entry(), } if get_time() < self.message_until { draw_panel(232.0, 205.0, 176.0, 48.0); draw_centered(&self.message, 229.0, 24, BLACK); } } fn draw_attract(&self) { draw_texture(&self.assets.inactive_table, 0.0, 0.0, WHITE); draw_panel(342.0, 72.0, 267.0, 144.0); draw_centered_at("TDK PINBALL MACHINE", 475.5, 107.0, 22, BLACK); draw_centered_at( "PRESS DOWN ARROW", 475.5, 139.0, 22, Color::from_rgba(0, 72, 102, 255), ); draw_centered_at("TO START BALL", 475.5, 165.0, 18, BLACK); draw_centered_at( &format!("PLAYERS: {} [+] CHANGE", self.player_count), 475.5, 196.0, 16, BLACK, ); draw_text( "F1 HELP F2 SETTINGS F3 HIGHSCORES F12 SOUND", 322.0, 448.0, 10.0, BLACK, ); } #[allow(clippy::cast_precision_loss, clippy::too_many_lines)] fn draw_game(&self) { draw_texture(&self.assets.inactive_table, 0.0, 0.0, WHITE); let Some(game) = &self.game else { return; }; if game.wheel_animation > 0.0 { let frame = animation_frame(f64::from(0.65 - game.wheel_animation), 18.0, 5); draw_texture_ex( &self.assets.wheel, 80.0, 49.0, WHITE, DrawTextureParams { dest_size: Some(vec2(68.0, 60.0)), source: Some(Rect::new(frame as f32 * 68.0, 0.0, 68.0, 60.0)), ..Default::default() }, ); } if game.robot_animation > 0.0 { let frame = animation_frame(f64::from(1.0 - game.robot_animation), 14.0, 10); draw_texture_ex( &self.assets.robot, 238.0, 31.0, WHITE, DrawTextureParams { dest_size: Some(vec2(90.0, 74.0)), source: Some(Rect::new(frame as f32 * 90.0, 0.0, 90.0, 74.0)), ..Default::default() }, ); } for (index, center) in [vec2(205.0, 47.0), vec2(234.0, 50.0), vec2(262.0, 53.0)] .into_iter() .enumerate() { if game.top_targets[index] { draw_line( center.x - 7.0, center.y + 9.0, center.x + 5.0, center.y - 10.0, 7.0, YELLOW, ); } } let side_colors = [RED, ORANGE, YELLOW, GREEN, SKYBLUE]; for (index, y) in [180.0, 195.0, 210.0, 225.0, 240.0].into_iter().enumerate() { let color = if game.side_targets[index] { side_colors[index] } else { Color::from_rgba(38, 38, 38, 255) }; draw_circle(286.0, y, 5.0, color); } for (index, lit) in game.wheel_holes.iter().enumerate() { if *lit { let angle = index as f32 / 8.0 * std::f32::consts::TAU; draw_circle( 114.0 + angle.cos() * 29.0, 79.0 + angle.sin() * 29.0, 6.0, YELLOW, ); } } for index in 0..4 { draw_circle( 155.0 + index as f32 * 14.0, 214.0, 5.0, if index < usize::from(game.lock_lights) { WHITE } else { DARKGRAY }, ); } for (index, center) in [vec2(207.0, 109.0), vec2(167.0, 148.0), vec2(219.0, 167.0)] .into_iter() .enumerate() { if game.bumper_flash[index] > 0.0 { draw_circle_lines(center.x, center.y, 17.0, 3.0, WHITE); draw_circle_lines(center.x, center.y, 13.0, 2.0, YELLOW); } } if game.player().diamond_segments > 0 { let index = usize::from(game.player().diamond_segments.min(9) - 1); draw_texture(&self.assets.diamond[index], 123.0, 298.0, WHITE); } if game.magnets > 0.0 { for x in [18.0, 296.0] { draw_triangle( vec2(x, 345.0), vec2(x - 7.0, 359.0), vec2(x + 7.0, 359.0), YELLOW, ); draw_triangle( vec2(x, 367.0), vec2(x - 7.0, 381.0), vec2(x + 7.0, 381.0), YELLOW, ); } let frame = animation_frame(get_time(), 18.0, 10); draw_texture_ex( &self.assets.magnet, 306.0, 411.0, WHITE, DrawTextureParams { dest_size: Some(vec2(23.0, 17.0)), source: Some(Rect::new(frame as f32 * 23.0, 0.0, 23.0, 17.0)), ..Default::default() }, ); } for (start, end) in [ (vec2(103.0, 394.0), vec2(58.0, 374.0)), (vec2(211.0, 394.0), vec2(256.0, 374.0)), ] { draw_line(start.x, start.y, end.x, end.y, 22.0, BLACK); draw_circle(start.x, start.y, 11.0, BLACK); } let (left, right) = game.flippers(); for flipper in [left, right] { draw_line( flipper.start.x, flipper.start.y, flipper.end.x, flipper.end.y, 18.0, Color::from_rgba(32, 32, 32, 255), ); draw_line( flipper.start.x, flipper.start.y - 1.0, flipper.end.x, flipper.end.y - 1.0, 12.0, LIGHTGRAY, ); draw_line( flipper.start.x, flipper.start.y - 3.0, flipper.end.x, flipper.end.y - 3.0, 3.0, WHITE, ); draw_circle(flipper.start.x, flipper.start.y, 9.0, DARKGRAY); draw_circle(flipper.start.x, flipper.start.y - 1.0, 6.0, GRAY); } draw_texture( &self.assets.ball, game.ball.position.x - 8.0, game.ball.position.y - 8.0, WHITE, ); self.draw_displays(game); if game.tilted { draw_texture_ex( &self.assets.active_table, 82.0, 238.0, WHITE, DrawTextureParams { dest_size: Some(vec2(151.0, 33.0)), source: Some(Rect::new(82.0, 238.0, 151.0, 33.0)), ..Default::default() }, ); } draw_rectangle( 340.0, 444.0, 292.0, 14.0, Color::from_rgba(214, 214, 214, 235), ); draw_text("F1 HELP F2 SETUP", 347.0, 455.0, 10.0, BLACK); } #[allow(clippy::cast_precision_loss)] fn draw_displays(&self, game: &Game) { draw_texture_ex( &self.assets.active_table, 371.0, 233.0, WHITE, DrawTextureParams { dest_size: Some(vec2(244.0, 34.0)), source: Some(Rect::new(371.0, 233.0, 244.0, 34.0)), ..Default::default() }, ); self.draw_digits( &format!("{:07}", game.bonus), vec2(458.0, 240.0), vec2(10.0, 18.0), ); let media_level = game.player().media_level; if media_level > 0 { let index = usize::from(media_level.saturating_sub(1).min(3)); draw_texture(&self.assets.media[index], 380.0, 72.0, WHITE); } draw_text( format!("{:07} KBytes", game.player().score / 1_000), 395.0, 205.0, 14.0, WHITE, ); for (index, player) in game.players.iter().enumerate() { let y = 274.0 + index as f32 * 44.0; if index == game.current_player { draw_texture_ex( &self.assets.active_table, 472.0, y, WHITE, DrawTextureParams { dest_size: Some(vec2(143.0, 30.0)), source: Some(Rect::new(472.0, y, 143.0, 30.0)), ..Default::default() }, ); } self.draw_digits( &format!("{:09}", player.score), vec2(480.0, y + 6.0), vec2(10.0, 18.0), ); for ball in 0..6 { let lit = ball < usize::from(player.balls + player.extra_balls); draw_circle( 397.0 + ball as f32 * 8.0, y + 27.0, 2.4, if lit { GREEN } else { DARKGRAY }, ); } } } fn draw_digits(&self, digits: &str, position: Vec2, digit_size: Vec2) { let mut x = position.x; for digit in digits.bytes() { if !digit.is_ascii_digit() { continue; } let source_x = f32::from(digit - b'0') * 16.0; draw_texture_ex( &self.assets.digits, x, position.y, BLACK, DrawTextureParams { dest_size: Some(digit_size), source: Some(Rect::new(source_x, 0.0, 16.0, 28.0)), ..Default::default() }, ); x += digit_size.x; } } #[allow(clippy::cast_precision_loss)] fn draw_settings(&self) { draw_texture(&self.assets.inactive_table, 0.0, 0.0, WHITE); draw_panel(145.0, 82.0, 350.0, 285.0); draw_centered("SETTINGS", 122.0, 30, BLACK); let rows = [ format!("GRAPHICS DETAIL / SPEED: {}", self.saved.settings.speed), format!( "SOUND: {}", if self.saved.settings.sounds { "ON" } else { "OFF" } ), format!("LANGUAGE: {}", self.saved.settings.language.label()), ]; for (index, row) in rows.iter().enumerate() { let y = 181.0 + index as f32 * 52.0; if index == self.setting_row { draw_rectangle( 174.0, y - 27.0, 292.0, 38.0, Color::from_rgba(0, 191, 209, 255), ); } draw_centered(row, y, 19, BLACK); } draw_centered("UP/DOWN SELECT LEFT/RIGHT CHANGE", 328.0, 14, BLACK); draw_centered("ENTER OR ESC TO RETURN", 349.0, 14, BLACK); } #[allow(clippy::cast_precision_loss)] fn draw_high_scores(&self) { draw_texture(&self.assets.inactive_table, 0.0, 0.0, WHITE); draw_panel(124.0, 32.0, 392.0, 398.0); draw_centered("TDK HIGHSCORES", 72.0, 28, BLACK); for (index, entry) in self.saved.high_scores.iter().take(10).enumerate() { let y = 110.0 + index as f32 * 29.0; draw_text(format!("{:>2}.", index + 1), 153.0, y, 17.0, BLACK); draw_text(&entry.name, 190.0, y, 17.0, BLACK); let score = format!("{:09}", entry.score); draw_text(&score, 389.0, y, 17.0, Color::from_rgba(0, 72, 102, 255)); } draw_centered("ENTER / ESC TO RETURN", 409.0, 14, BLACK); } fn draw_name_entry(&self) { draw_texture(&self.assets.active_table, 0.0, 0.0, WHITE); draw_panel(112.0, 145.0, 416.0, 170.0); draw_centered("NEW TDK HIGHSCORE", 183.0, 28, BLACK); draw_centered( &format!("SCORE {:09}", self.pending_score), 218.0, 21, BLACK, ); draw_rectangle( 153.0, 235.0, 334.0, 38.0, Color::from_rgba(0, 191, 209, 255), ); draw_text( format!( "{}{}", self.name, if get_time().rem_euclid(1.0) < 0.5 { "_" } else { "" } ), 164.0, 262.0, 23.0, BLACK, ); draw_centered("TYPE YOUR NAME, THEN PRESS ENTER", 296.0, 14, BLACK); } fn present(&self) { set_default_camera(); clear_background(BLACK); let scale = (screen_width() / WIDTH).min(screen_height() / HEIGHT); let width = WIDTH * scale; let height = HEIGHT * scale; let x = (screen_width() - width) * 0.5; let y = (screen_height() - height) * 0.5; let shake = self.game.as_ref().map_or(Vec2::ZERO, |game| { if game.nudge_shake <= 0.0 { return Vec2::ZERO; } let strength = (game.nudge_shake / 0.18).min(1.0) * 2.5 * scale; let phase = game.nudge_shake * 950.0; vec2( phase.sin() * strength, (phase * 0.73).cos() * strength * 0.45, ) }); draw_texture_ex( &self.render_target.texture, x + shake.x, y + shake.y, WHITE, DrawTextureParams { dest_size: Some(vec2(width, height)), flip_y: true, ..Default::default() }, ); } fn logical_mouse() -> Vec2 { let scale = (screen_width() / WIDTH).min(screen_height() / HEIGHT); let width = WIDTH * scale; let height = HEIGHT * scale; let offset = vec2( (screen_width() - width) * 0.5, (screen_height() - height) * 0.5, ); (vec2(mouse_position().0, mouse_position().1) - offset) / scale } fn save(&self) { if let Err(error) = self.persistence.save(&self.saved) { eprintln!("could not save settings and highscores: {error}"); } } } fn draw_panel(x: f32, y: f32, width: f32, height: f32) { draw_rectangle(x, y, width, height, Color::from_rgba(214, 214, 214, 248)); draw_rectangle_lines(x, y, width, height, 3.0, WHITE); draw_rectangle_lines(x + 4.0, y + 4.0, width - 8.0, height - 8.0, 2.0, DARKGRAY); } #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] fn animation_frame(elapsed: f64, frames_per_second: f64, frame_count: usize) -> usize { ((elapsed.max(0.0) * frames_per_second) as usize) % frame_count } fn draw_centered(text: &str, baseline: f32, font_size: u16, color: Color) { draw_centered_at(text, WIDTH * 0.5, baseline, font_size, color); } fn draw_centered_at(text: &str, center_x: f32, baseline: f32, font_size: u16, color: Color) { let dimensions = measure_text(text, None, font_size, 1.0); draw_text( text, center_x - dimensions.width * 0.5, baseline, f32::from(font_size), color, ); } *+pxWo-ɒ9DђzyצWKrַ[A^rgmά%vdP(y( =8"=4.C1z!?Т-fv)v쁳o~{oF<MׯίoG)ʌbbqUg[O?CP4jU}[ghJπL_EJdۋew-r#+PGx-z \;LJ=C{;NԜ4aNoiIN,:c&`F QQIr/Nh=0]1i=B- n[\\0UaњJ,~%^`=ҎB.htu=smM{+H,0>cnHoŢC,_ȑ~)ʑ'>_k70i ữ`_m=1%;>!8 C'V"}v'6Sく: w)⇃u;>"G{e" ;a u}q$ӘxK{ llήo<\]؀08{e/ٛ J6\VI& n&5IK˰ruV%$^_~sEB90L}orǪ E趸Ug)x2˩gдm(b'':L dG/3-v2-BĀm0]O̺C P{7SCӋ}%Z# aOgqjza$XRaSvNxbPdt=wHiT,Vn')uRfa|fSTAЙ濙DT*n 2PlrV9 Z˧$Qz!*k5Z@fh2{$7\CXuv|L>UG6 'oŰ+7p5ߋ3=4 4@\z:0r\+Gy%~so-j܂7p?3Ÿ_k{iv泥ђnۊx88J ]t*sC5džnUx%oDX8'iL8Z3=^d)i΁‡9Ag$).uo ] w\=ħ[|ip>X 0mV#Ulb2-֦ " !*I9JYW1ʋ̕ێMfFpr2@k ʶШOk1ptU2;G- wxR'~o![O34 o<$,IX{=.$|G¶#xhK_ 윇L̗!"]Zi8' <1ĕaDwbՙ/Ѩ_R uÐ嵽PBv(ZqJ>8mf ]PʹZ,[ SC9R_=!ۨ:)ކT3u3;M'N{^l޹V-F0c -i1F\21ld=@1y?Zmӏ^{uO슱 Z3r"v5SP)2B%Y1-OEj:-[VpYN47I9) .e-ж-C|5Vsʵfsa%;J hMs% Pxw>"1xuMKP)Gl:iBjV)֊RGEdq!؜WmR ~ٸE\) ٽ9^_CiRK9Y&͹ؘ~rhgilz swdPo|1`Tj.|⶜hi+.X 9J'1 m@ O,=N?"-8oFMi )[i`ƱM"]nG׿n$Aڛaꓞ\["XCVd L|y!8 *xۅ;Zw`X Z;{`>,؅ $4O>`;j OR =@L$T .jez{U7R.(㷲x+-NUML./,MLRPPPH,M̷I /K H,J-QstrSAiEI%: 9Z9E9)VVn9%E): : !%EF.:\\\I %E% ũ% ǀK2RKrR:&)dTrtf^:V9V p'Y+" MMLD6ANLKAU`<#55EI%Xe rJS%%`7.%3=C8Rm4J ͠iUŕ[щ999VV%y9yŚ-MRH,KVH' M];Ԝ4hāRRNjr(*@]#3/8 GQCIOO?Ey9RXo``iiWi vxԨ @E&b5l1400ZI @|l13yHB_,jRԊ0sFU#܀f`nah -JTb *KSPX` 3f50 N/M,)TPzũ%iv x_jbQjq b#:[9E,u?" P6bPV&h(&((@s % ))JPB b%`%H AE%񩅊`gd@Q2&fC4! 2+RsF&f楤2 p*K,O(.--1@ p@6C3nB/8>5RCSAM IBJ&0\u!tCCS*ȅXs1#[jae qDZ B2(HK^'h]u,T1Yyc\hM.!6ɂMřA x,(\4V;P=UkʀkEJАE;P̀Iz4Ba1Pgr$1[Pmd18xxTN@}WLT$΅\R@6k{5{*^B*o3g9&"[&:PTd8HP6 iVc3TlKL ǖRh?~]ܜ_]]`{]BFшdts{In.IC>;`HA+x]=ʥNewLrj *(?{!Jmj^8]Wd[y+JfC|7yO:]k TKCl-)ge)ՆRkp$FYRä}'r6M`INΠ4hp4P*Lq+YU[!? & 8v6-ij`!BT\@W!@0BV& G_t3Y{7MCYc r+dQsFжDLJ.U+M jjbHV$Rea;eSn_epԘ̙''NFe>|VS:ᵿ{dEA2Dk՛F%kj 쑊+ ~T^>uho\]:ᇔug=n׈fc+uErRkʅnb.wh'c$ 3h{4s47ɛ<[@dxmo(IK圡f݀l_HA|$E(Ioݦwyȼy?l7ۦpy$ Oy»PO;PsTPpѽY%H NdHWK  yLhƴϟgT6 {?iX}=E-y\#3(y';㜗y2!Cjrf T;P҈҅ t gF2W,CG {!\-X5ͧaqu#柊p EIp}:nsiÂkK@ 3'[4l__q3.+O, gX\.uˠ9OAD* 32/2"_Շxs(.{/+)48A1ڒ#WԪSWvm8Dj寡^x~6/,~'b YLd{E^޶nX>'mq%berC;wksb b4?v[V8?|Ւ@_I \!\ T:[իĵ2.=O]W.Q柜E[qTRt˒<Ѣ−$i.Nt_Og,Ϙ#V:cLHKWr+b($,"gmn4c;,#J<+k=0YED6/-#YsѪVvL۾2i-^?v7kgg@xӵpCr3/y`NE;e84"ƌ6_ J[ >J("#W{T0NBjmmr ɣVO>"]JN{ AӰ)-KlmDE[ouֱSw5ΟRv|XdMB9>dP݀o;F &z1lE˷.OdteYJ64v8PqYy+2`7JQ fڊy4ڍ7EWh#wa*µf۝ 0܃?7_^g~s|NEw(Dd\ef)$ ȃ٘_adumcbs8K ǰPA{#XKcjLEnYz͚0JIkozf;6qo[ GzwFu 5bm7k<ۈ}Y6LxYp\ ^\l@ )D<'Ӽ(}HG1z '8*q o;3#~)x1%Bqz͙h[p٥M^c3Y]/} !ΰ٘ɚ?SbhET{{Gӷ]w?mulUpp+y:}8 `xztvR{hœӿO|IȦuwбLS:XOӃ3ryI鴇g l_=<>?;9zrlz؈|\1L'gW"XGyH.iJaJ3BizGzHI0H~E, nIb -`I䟔WANf3JxNW48'ɂ5%V2B32 V:449Mafy8#ILɜ10Y[' { NeEOɄwڝA.u>H?pp֣}gMy-2lFE'GXT"a:0+q>ixMQ9LVw-^/gt=aie3[xE/p\$I*ޥeٕ?OnbU_1ZϾփE>i*z0CSgǾEο!g3 ή@9"'ײKr= _(9CN &/{:uzA$ZXem1Sxyu:KRzp䴱ui獵7l2U 'UBeސr4K錒Ft9 r_qYD œ zĽIFFE!Wyį> ]AG !1lI&oiRICxϧ}g}'}}d}h}SQ>0G}\ʥLBggb2-vaF87=7,0?ada|8ٻ h9` Vd=*]6lVW7Zd?`6[/Q')ۑJN"EIB`T_O-HF y16^T5҉>|/ c4bLA`pP` ϡLUJueod,˘LWmVQG& nMt U!++zp hw&d b(&dR!iιOu;/d;"^$^Ph'ͦ"ST 8혬a5,Azoᙿ\GyBtE#/.ؾ_d$m":-a#zMRh6&'눞ANqΣ!g{#1DBgslLzS &KQƮY@C04,Md"ݾuC!Uak%03Ϗd[mܜLq h%I<=P-~~W\a*0qxp YLhM*asw聣ԓw]OKK 3;EGg/f4bXlM=| ~`_bB~tB=Q8 W qc݀2H8&U:~͙כ+iJd~>f(VHPHi*އQnńN)g8e(QpEyKXDAv%5rj/ Fv.Q~v|9S `]fʆ> \#:O0fIqYϒ5d U9 q˫$Af<*6SAd/ᎈi:ѱ _} _a|)Ջ>_2 Gw% 2.#XeKt8Ai+ņؑÿ +?tUmWRHQ~H^@ Dp9ZE'j/Y,W EMcO4Yur 0cr*]ĻWbZNK,b4P[Xl:Fjzk7D#|F[r<*^Vh\|ݭiр: H3NVAa.)Eر}ir<4^>][sCkv ?3(tuN>OhJy+I\\PHAl.T@atֲՓc uƽgꮞd<;l^ǀ*?IfOcjUpۍ sA+]d^/UbA&Sp}Wfƍ&y3!}|R>1Z+uvհfY9x þahaRE~w pa"\衣c^L3j.&g)B6a >yQT|.bfcQX%9 ^xZEiI(HRU_*5 $gFM:&VՂW0VSt+QF!!;];꘰[OI){`>|E)PIsA[ks#0cFjyR+|˳!rWbS‡J-* T uצٙ1V/eWx+Jn^*AK|s3^ ` 5DA&%,qLPs&+O&l4.,|l(Q^qSC!#yN,Yo,I1/(D^?RmԶ4K.wcrcze%tMv%4.EJv fO9|cژ09d|VWv , (⫧pE7"s_Ȟ>KӵMvt=M"7(X1#\GlJYOn8Ћ̎r PGū^8"8@g , $)O񌟔?e24g1cN[YE%nm~zxp|pR L =LGμɡU4)9-x1{y2=5\Y?R vM0YhG˘…q2. R[,d(`>o. WA p*IEWþ@GC:sxD xlSF%>ASy8Nc٪#XT.-H&o.SJkG ҜFL83`{ d%$]Ԣ]lQW/,nkWaS.G!fci2?jhڋ0<"J"]ڌn,eC˓_Y)iEn C:"tSDc>!^p1o ye#:97g`yܔTKcR^\M(G7^lscD[xˆ ZvJCG~ֲEVT Jҳ7 /}۳98Bx >V`WS%eLp/BͳqG@eO)jIEux\P0mr4XwJU:;k,+j.? cs_ma /Hۓnf&Xa5^=B` deƣ)Lm=mʎI{5tEby*" P:y,Z¾wV?vi^]s@yd#tD~J/`n֪%Y^Ea|jkmf~ E"PHlWir,#}Ņz2SY?s(z4UVʜE kp=Ր j*ㆈ*$J!b݋na x7/pZwUV.W옝lWA 7`E-WUc}T%}6O:U?jWc)SM bk\9-JU)Z$D'21.lA>[ V# u) aTm1iA"eb SEiP-'Rv l*&DaCxz:~b _*g@/+^~~8GVjg21}V^eڭǝ"3CZu+)0:p~/CI9{~~!b{-* ɰ51ߡځ EQu>F􆁼oBOiwF`97ܨ᱆:CݾS +:g4ΒTi'=4(B\Jl93`1߅+',hK:>Y;bE$;$#) fWQYU,m=]@ZD-)b1 |^8].^Iׁ5u"J}jq=`FE驨ڊT-?uspk~BFΪݾו >j|! .m~%FRr*$>%3T.WQ6:M/B7: mB RK` n;|&ռnwek}\bqXCڦBoEO\F4`f4}plXt";Rz&LnBD$YUOHqS=`ik:x>)^V) ]A>79ZZ61)߼tDoxjfHf@+8Z8)V$hUV$R؆B!#`7J"kvL@װC$qLڐBtF[z& k[kXε8 GdYKB=9_b42bŞk}~. *A6V"`(Y#&Nlj_A_r.\i$u8I4C.tܛ %6HhPxiRX[:uG-óE'Dې^s8BVpkIC 吃]!t\Vx{tJ(1-\NktY943tՠ;y ^4QdAUs* YN!KZY6jqGg "lA"^#;: -=-V]@^PAgZ(I;hnc; L.p'BN脺!~$tMVqDuYa”TOe$e[ݯk~消7O]f ymhoȬvjyK+~AJ|2O37/NOD-LkuF4Ш0c{&t":əmEx-ClyH gG`~:ن2'3ӦbGӷxAt6wf3׭leb[-itOwwU.&|w`{۰mi8Vgu(ib5KU ^y.':hG4n_o&JsV< }!Il}n.6.VeQYUxTۭ%R2e5:1si(b/=9cB.ND'$NBY 9U"v^^ +YCԌCeC шyB:63_ul< ˄@N~WcHwd  Fg˫St(qqI}Q!_ +.4u mEp<= ?؜s]/tq:!RWF} wmC< .yg9TI:62,J5 Ht5kEٕq.=r4TB @'2NhUQ(<1lX/3jTv>3tcWQx6Eo$iS[sP>fڀg&/'(<3KPV1^T]/fOeIuXk 19Q|7Ӳ4#/2_k; O/`F`uԛk\ p}T;lAXb![\6rHt2*/%zE~O1^u!&cǮ-L5+ݱ<*y !ے8OO c-nvUӐhG6nHˆD6B~#ci1ݎcl欙l]nz%eĎx`Ǣ^ ͯh/p^ S(`8uS-*̫ cPW Nk;:"c,j--m{H!f ҌE#<#7̚"1} xkCڛĨ,ʏPt cӖ~mRE]ڤumpdlU|gH vyCzv71Nrb\-ZO武S+S [6No1o-V!fќ\9eml Ł+L~ﯥYlx0\gJL<_#|,XBceJTV>J RK8҄遢E\7^khĞSt3N12ծIvjg]@ӗnwqSQKkʍ.ʗIر1zQn泋_}8{ = vhBl-& CͪtXV'R*\=aaݙE6.M|<@B9/yDphpCή4EaMi!-B7l0!€+pF|)3πk5Ls/>`)?tqb /Z Hr]}2T/ĕz.`m.0 x<{læsբj0+Q=8pZgfͬɩE/ȄFU36ǕkܡrU0_Э.KŶ tZt7 IǹWCB[[-e7Ji,Y[rOLUEy>HjT/EA ĸlT}Uן^\lI:g6[m WF Fu$Rr2+ Ia܇"q($ \ٿvuHK 5oޘ8#Wgb+1nRX j59'?{+T,[71UuΨ;y|hI*X$ >W}Ϗ}{%X(04K/s}X 9'R`(8"{ _UZNn@wc8KB'IBd\2?Nڢ#j+ -lld Pbrc7_̉@ZUYt2nHoI,Qh32qC-< :Ru|PB&{2fm(j(NoPj/9u&6[ >Wm̊WQyA\W1gUځT;(STED1}Y8K՜珝cfjS0&)]%`6X (DXd]DIn۞k:4_$qHWj XTX o3Au͂O en :aRq:id}y77iGxvvzU-B!^Q&Zy`LN5"{XnAzfUd ?r G%N :)1>:cKFO'r`!7>wooz,F-ͯpf2'Nv7"ѠņI.QG{>o2rٌs,n(hIvoSɨr;@'e$p}E͏_!( ÄB`vyly~}):nUڤqlw{ @PQ  1p|Qh'3vƜs/?O 4Wû򕈅.\AVASސр͹iʳ] ,a=w`^ jUj6Frg#\Ÿ@;ۯ]ZK M".CʿaK~^^T_u;n ]w=eor{"QS6t sS/ lu.G"au,>5\ # s}FtΣΰ3Kf'%i}LCQ^d0W i;kkhVu0^SncMwcb@).dB}`Y5qUZ `Ngp#u<\̛Ǐ ᐍMiM6ĔKjmwvh;5f,sLxQ EN4+J Jb{o/]$P@(UP/-x{ch%g=INF -G%|ܓkBY޾ovkdp-V*:ۮQ麆@[z{Gurs돾ոvn,,([iq)̀L,}[<'ѻwwlzRLTs@=O:dJKK:2ɞY1vZuQұ"Vp ˇxb W{5WfL+jp=S$ l!T^ckxJQ{m+f8+eu8KPGLǽH~E?bwN[4+kSQ 04ĽKRW0X44ETEu z8|vKx !琋au~~ʥ2i|֒)@ֆލIO,aÿΌ81v|mvx.dW۱*yD|'=7N[,OYX,A{V ~r[\JB u赤Iv*Ifi<'n2['.Ҽ|S?}<=dB:mAfUXn\:N*3(m;S}Fn?mD]'8-ǧVQ.RTB9C(kJQ Y_k heq2]cpϘ~eo=w_Jh?nI}. Wy˯u_4gIں>SEZGmXkft0@2],&4u< &=7A^I0Qõ1K͞7r+T3A473Ҧm]ayxtno@9c4Y}˄oe -EFd,HJ4"YSχ ɊP4lbQ:Pcvvfm|w{[ߏ+NIwm]&jT~ΆRLmI&l*e~xDB\4ư4q#˭`uXsq**|#ȇ9&1A~0alx Iuse macroquad::prelude::Vec2; #[derive(Clone, Copy, Debug)] pub struct Segment { pub start: Vec2, pub end: Vec2, pub bounce: f32, } impl Segment { pub const fn new(start: Vec2, end: Vec2, bounce: f32) -> Self { Self { start, end, bounce } } } pub fn closest_point(point: Vec2, segment: Segment) -> Vec2 { let line = segment.end - segment.start; let length_squared = line.length_squared(); if length_squared <= f32::EPSILON { return segment.start; } let t = ((point - segment.start).dot(line) / length_squared).clamp(0.0, 1.0); segment.start + line * t } pub fn segment_collision( position: &mut Vec2, velocity: &mut Vec2, radius: f32, segment: Segment, ) -> bool { let point = closest_point(*position, segment); let offset = *position - point; let distance_squared = offset.length_squared(); if distance_squared >= radius * radius { return false; } let normal = if distance_squared > 0.000_001 { offset / distance_squared.sqrt() } else { let line = segment.end - segment.start; Vec2::new(-line.y, line.x).normalize_or_zero() }; *position = point + normal * radius; let inward_speed = velocity.dot(normal); if inward_speed < 0.0 { *velocity -= normal * inward_speed * (1.0 + segment.bounce); } true } pub fn circle_collision( position: &mut Vec2, velocity: &mut Vec2, radius: f32, center: Vec2, obstacle_radius: f32, kick: f32, ) -> bool { let offset = *position - center; let minimum = radius + obstacle_radius; if offset.length_squared() >= minimum * minimum { return false; } let normal = if offset.length_squared() > 0.000_001 { offset.normalize() } else { Vec2::Y }; *position = center + normal * minimum; let inward_speed = velocity.dot(normal); if inward_speed < 0.0 { *velocity -= normal * inward_speed * 1.8; } *velocity += normal * kick; true } #[cfg(test)] mod tests { use super::*; #[test] fn closest_point_is_clamped_to_segment() { let segment = Segment::new(Vec2::ZERO, Vec2::new(10.0, 0.0), 0.8); assert_eq!( closest_point(Vec2::new(12.0, 4.0), segment), Vec2::new(10.0, 0.0) ); } #[test] fn collision_reflects_velocity() { let mut position = Vec2::new(5.0, 1.0); let mut velocity = Vec2::new(0.0, -10.0); let hit = segment_collision( &mut position, &mut velocity, 2.0, Segment::new(Vec2::ZERO, Vec2::new(10.0, 0.0), 1.0), ); assert!(hit); assert!(velocity.y > 9.9); } } A4+oDx&:}CFL\.|x #[cfg(test)]d0rxUMo6WL@![mAFк -$6 GٸB\@yo8CN~ 0iUA*׎k#lqk~9ҵҜ=RЁі)3]t{aBV>tR MPКD[^VYq$BGËg.ng$,UPVi߿_!x59j{'ehC~v`Q17DLnX " ߾*iFM~sdgX5lc|WdJ+Md'2* C, cF`䲁4!i`%ڏBHCzN /LD)9+Гlt0`lw vO;.jZ4,YE]b`"ݑI{ݏ;8x8gg?4akj yD-]# / i(I$#ݗ.]2I=޳0dQqB0QJ6{~|R]U[*y$!?N"BLQ0j4iaRVqfeڀ3H1Eݢ{ jLQho9r8ӱFAD[k{ףa~5ix[e$$gԞF8XڰUQ,<R>~`rx+2adoEXso۸; OF!k˻%MP/ m*zM\AB)WT]"JWt #B*"KJS(Y;v~mB jnLj4*$W C3h`5iYUDY_ie!+;ε\1o[{[0kZR%N By?I1Ũхժ X^.3dƁ&k-mI5=ȼiYHVh(0!2Y>AWxtYq5x  i %l4^q7Jx5_4NsTt.ɃLǬ[ere3fb0T/..GD œ0y44A1K2*`BLHU!(tKIDu1CޒE E&KR9U`0 d`$h+aώS)v8łv7O.9V+'A5.vx :]ǔHagDװeBwĪ[ m#p'SVX *[Ь=36 U*gƒZQ iy婇\u+țÃc^WUmN(fnRY,P|SJ=Z 9nL[74rqJ"YSY)ȀQaQh_Z6DUZ9Ĺ]ǵ_ku<>ڞƳ荹6sc=s /|< +B}x; kgש3_G=} %&klhmyYF5mhhxF'sf@u kq!* ]8iaR㵖vGwtnF6K-JIcرqHQ嗚=JZF豝ku1#sE_^A _^UIP2Eם-uV']%BkVexpbgy>p^\<.`"U8 q!>c}pI'@?mW;RvߠkRm;oG=N ZxNXL`uMG?Kg |yyzk_u~IN?cʶv'v]S(?3QOypRXs!i'CөwJ>cW5SVd(I9zg@q-BGM Bf< Īl'vY>iӗj`QMjMVܿ闟++ 꼓yzo HuE$fg.-B7ht"p' ]:ع~5<LI' w2PH\vis2*G ̴hx +|){j!{ǎ;s動Xak5[sQեae7aPيb/Gu}uxw[`xXms۸_+3 (_ziJb]쉓x"wʁȕ; $DҮ_".>3$ab-$WR|X1LQ g@2ߠOFI~>aOVT/ŏnĂ+M>}xw2:xw>zp8{=!DŽ8 jKhRH6g//Iut:O HvTp蓷b3fs+*5[ *ْ\R>! !]ܭ-2bgi&$1eUmh4Ԋr:rwY˟tMx hj`J,dZ3>WN@@uOTHBhj),ê |12ƌ 3z/hik?h{Z:|1t%d%sR Ivt;@rF5uj,|@*$Mi=-\ڀ]o[Q * pZn+) <.=;;Ee}`6E9[mNA]8XΤXzX,}ł.)MS ơK U0@ :b7|Qwk\n&W$T(1MIƽn\Psfn[AKH*hb].* %$"R&/ *wW<py;!Tofצg|-sBxkYA ^i0 *K?qc3Xɱٖvq;cm[?TEB[+q7<@5#Wۉ^H 1+n VxHM 2 ^tuF ˕Tn,!`"[ \1. *Z2 X_ ty2gsOS9 EIwx"֪O\U-SZy~ cKVry,ej9m+jm*[yt><=~Io@|v^/?~FÏ+CW_f"k,lڽ}06#fyc9yv0\nd/W4ZE#Gd!g_9$Lr+ MmٍQO&Ǥg肠r2('_s\ ~*1A- nkQVؑ-j j׋+7s(!D >V&8ɿjl7q tָ箦ISU |nJgʀaM+2ʼn[ o[ r^ҽDgT(zq8׋0E$zUow*qwNH"M!ݪ*h+)d^Ѷwiڬb*mOzf 7rg Nk%~Y;H!:Uf'LZ"-3S ?p(єV%s0;,Ynqm8Ij%L"ok,h`7V]6DDBBd'~`~_/)Т]3hAP,00+>jT"gfSX˦b{}4Wfjna牋sá*ŤTmw K|, v d>_Q ۰`[vUۄx VY O~RIQt^E?5:aCTiUG߮([rF09>~v3h9NLXэn eH7dI]I.Wg¾]$J[d,l s,E[BEWD.D.b=$$O_x<ۜkULHt>կ M'g{qQG& A%u~鿱{)Մ'x2%ѻbijz{z]ʸ,Hy-FWj%KtQFxQ!-jYJ%+Y\,V+ʍ@}VsYHr>Fh߅$@>K"(%|.i9OS:1?Fq.KAG.YA͏ ZJrw0:nNZarSl6{꫑1aI`li%OwujIxZxRxJ5 Tu@AzⲆj\+|XQt9K vsw!Uʐ]`?!5mSգqƮG'D=g>"U 6J4X.ԛh_C3O>a j k_K”hI얔Ef/苩[R} f &aT-D͔7ϟlw1_._l }[p41adL_J}*Ak;]OGԚ\ HRv,X-)RbYHbax HhT `njBʲ2y4#BU%Dq]R,y2(>(n.+!W{s֋1d)V.m q kDKb^I!`זMcG>e-$ =b;`"V/)%yd5Sx;-ke1NxUfPF ؉`@$0U@NqOn./}Xx#NïɊݨ:W+*a!.}f"}ӊL/Y)C+8'۴oIYgRAP&w ֘N&+ V8[@RM/g, QT yH}ꐧ)'ޘ9"Xz~Ҳ |a]WU3N0adV:84NQ}:dL},j,OꙀmIsR3zICհZu~5)Lj)}< ^c+!i+j4SxU+l.) H nmyl'-Zq\ӛa5Y7KqguZkNeu, [5T^NQW7]ݓbYEJתnuFKƅ9@3%^Sss:_a5"3zV uƧe*HVXDoP`fى&:{x*6;umk#JoOֻ!)dUBmaڜ7Psu2R'!aUC;Mw1Zz"g Y"|g) {n_1 u߄@7wxm ց%w"qNvܫKɼ!OE]4m޺(v '˸'MnT`/8Z9h0~W=shݚo(WGoa D见 W*I,ftN͜Vr(Q Mv-WGdÇb>yx|oܭNBex[M$QK UsT3NI %}5w5AoqYKp3\Бݤp,7թO@uǽ6wՂW(.m4h:I^()O.7]Fjmi /&pjsrVc rH_>)0WNÌLwj=ChwK ue9(P 5 "0p؜DuKLM4moD_FAj<O,+)0ખZ LXo~U^YsѪâwɹՃ'7I/؄L׺J;@GΛ+'iJ]+dFi.ct ؊dWMY5go8$*=ӭm2kR9zOyV*>_ZJ*)LG6\R;+tKD)@ 8j[CEȯv?z=TK"Altcb mI4,uj6{v"rt5z/CUTcL'O\/W觀?#UuGPpwd%knGa$t~%% sv& egւTUq^ U!灷۝=#s:ƀ*Fqm7-|ki8dw,ѶS8=kjEU (-H,r r;U6uc8,^rε=@ bMI?ߜ  em>;xyxO11;19..=0.25< J xWTp,S((,,K-V(JM/K-JMQH+U(HU/LKQ34SOJM.Q(ILIWaPxCxcĤԢbbC CsSEEEBHFBNbIIjBQjYjbN1!E)y% yeE [)@*fA\WPZQXole)*h&($ `FPykaE9`!1944䂒TĜbDX&d+g敀RLAU$(gd&g(f9%`V(K-*LNɩYPYZXSRWZW\ZQWRlh+V$}zBR~i^JBRB$̌ 1R[Z\_XR^ 6(1%X!? gEy)䔔ĒT+ԒJ+ԼklnbrQ~aibUAQjNiJUXj5rtJjQfYsN~^s~AKjRif,WAiBqIQirB(qBMURPPPfX)Z{J2yE9ERH36BH$楧'd楣I'Z)"kIIL/R(54Cj2s r?9?D!-O!/\Ģ+PRk:4X N-YT\PR_A9& i9) y @dPajT ·2Tpn%({(@QL LASPoj嘁~psҚ0Ѓ mI`j*X+r#hN4744*55ӳ5h4 ,j n0Awd7r UِIr2@T?AKhWUPBB)9+8&Оl 1$4H H%d+8ʋ2KRbC3KP d?dH!2RC 7P b UQ$Z]O-u r*A"ԌIJ"+SRKRK@#Pwh!y"'JA-c` $daHiB8z: Ɩz†F c&4EX)QH82F1lYP 4qeb,l&xh *fAlg](f[p$ GA}{H,Z G-`[s!J0 zLB%L 񚅒( 14BIY 1ih#KC/ A*aIdMh)l(pG`?cZ Aۋ(fA! ɘ@<0#p kAF#A/#$-(F2PSD1v,F nP$c-cpn0NPJcp kAv8nA;9Rd-،Q>DM`bhLH6 2NG,3J256BhA5 ,^DIƠQkA1 u@n( +cTj(#KAn*T( Ht0FIFHZ2Pb*Tj CPl%z<&QCHւl9s܁RBjDcnrPaI() l5F-@y Pҹ)84@e †mJ2:PpF&U`6U(PlzYG~8]e@`hQu!;MP$C {*7$(#pQ+f0nߡ'ZP % %AA8<=)IP1wFGu7Kp9#!22- &" Q(aIF:Ui cJ`rfT&PxtT=f(T!+?3Y JR1fJg4:r0CɀZP.mgnq )\01f(e!(w(}N'mJ8c7F`CIP cP9J<3(MZ!fuAU$PBF XŸ`\ 0o2,e$!MnP aF8b4ۛ(YO\A4C< i d,4l1@65ROQrԧM_rd@#`֘<>EЁP%pt@|v }6PG4#PGh 5@a?iF7%DܦB(FVr![4d !#`!Jz3GQL34fIFF1 <>EIoN@1 R4< M!(@4P%`j)J 4PS nv@6p@5C0bP!eGP{m6 up (AD'Pǧ !-\C ցFpfHss8<E .@'hBGMԌj(` R'8 %BZ؆ Q(I IWxLBIHZM2xBŃܦ!$J@@Bq I lG|?bu0,Ca #H]FTGPRxD @C6݅F2]!w=}!  'Q1脊 (P*j?IhCFQ Δ29>P*t#?Cƛ Qhiኵ/@^raP ޗPZS ^НQ YyT[XB6 8LP$5O!,R!(17U!-B!' @ J>18353py da,;J f4u@ed >$-JLg sh(+b L QT#H4E@j΃LXBji|#J%3l_ȘԖfu Jc(gF#H>?ذ4^P "$VCXuP-0c ?d-uBpS]GMQ= *ucu2%D3oF@cF6D-8"iBFTΧtD!m j!NAV %1Y,iu vP&s rE)JE: .$SԖQ[ hEg^fI&hB"J[hk(hXRGdghjwnV76($g)dn7C#915$>/Ȼ , oC $`@dJf ./yQ-AͨiQ5ҌTͰVAQ %Z0zN-"=\]}\動Z(؂+ 4Qh \ R+BZ +Ǭ3- f:J: EKn(Ձw'khr(}Y}ťEVVZ} |X_QY\leU훙 :6"%5<$#GKr4X0;-\Q있+K+/,z u%(-&ħ*jAi&hz0ؕCk2ZmM,.o3/H/,LIU(mHIM+O,(H-//.QU@s+8@a̒" Խziy)5`Vz) fhjS+ RK4 A`fP_j!c'i% P);v`pt, r/T s@>n/OQUG#^QPoY'h'GKK3SRAoïNՃFՃ?EtcAA쁆ՠԼ51n<:by@H,,)iJt4(S(8HL- °MԃB2 MTHY>*vFm/*ж^rFbf i 7@%]i2^=@ He8LrU¬iXWXfl`o``gĐМYlr'N 6[:2mNԑۼ]c)?8|xggP-/[3|.1z}u" tUxLc#7m2)ENPݠ`$F:yđwyC{5|ZAѸfe_wdg˯yt2nOdO%nl[x\.Aqs3'| AxGML? The port reproduces the initial `-375` millipixel Down event, 650 ms repeat delay, 40 ms repeats, release impulse, and randomiz+ed clamp below the original `-3800` maximumM Y@x7ǐ1XIF`$ sWT4 "xsTcc$WxLFRAME_THRESHOLDS: [f32; 10] = [0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95]; const LAUNCHER_IMPULSE_MILLI: i3755LAUNCHER_FRAME_THRESHOLDS.partition_point(|threshold|a) >= *threshold" $|-= LAUNCHER_IMPULSE_MILLI' ; (]-= LAUNCHER_IMPULSE_MILLIa=0 0|-= LAUNCHER_IMPULSE_MILLIa=g>1| quick, 1t56$| ȶ09..0.1BO1Mʅk SxyxO11 <@^xggP-rc1oFo4 bxLcQ39I' gw\rGt⽧XFi_w:P73x(%lhx|.Aql x LKU 'd_`x a4*{GxQ;@J `npc l*:fOD!'50 })!l"%ssUxggP-zԌ+NBҹ 'xLcgbEAS h觟@-ط1wΈ$̝"@?`eٽHK_w| (q.N>#$Ll-x(Aqs;%RxPLIU Compatible importr(, sorted, then migrated to portable JSON>8xB"100644 app.rs4vӽ~n)@D"a FMZ'N4vEm [K NQxZI,5LEE BPxzA, Nudg@ Nudge::Lefte Nudge::Right+ ! Nudge::Center` Nudge::None 1secondary_score_display()G ,dxAU => Non!`  DPho< Y; HbYx+-NUH,JM./L- (JM.q,*ZYUe&dV(ØPE%)VVɹVVAeEũ: i: : %VV%Ni\\y% A~>AV jѥ y9)I%ŊJzzũ%Ey9Mz.!J\\)Ee9y: : .I uJ2s\ u\ 5c JRJs|KS\s23tԢ<ۭ(5/*Y .H-A7d$$}|SsҬLA$heb9BQd!DQ;$kᲴ<ĤԜ4M];5Ēd"hЀ&$g(T! $P<`k$@j@#2Ғ ^+s+JKN,ƪiB(;Bh0$ J-W-fÛ4cG#%5-4KJKSKJ2ҋA +R H者KRs9iOV:  2"t;NG'(ءb b5H*)*MEtKnbϯLN/eYP%Z)eC -R(56zAY&$$Bl4сpKFfzFWM܂J Mg!mU ĒTPd'gZHt|v|QJ*4KR RKJ*5@AIEE0q-*//H-D2dbIjnA~QbQ%̜4pgdħVgi(bR$ԠA//,IE, QNNK(I,JO-/VUP*K//VҌwf8B Vdkh"!ʢ̜THb@d ' { ?u l;ˁ5<=av^Nją `(h) !P((B(.I,*)$%P uUA$#{QjIiQ@s7(B4+*NOB#$ ԄYTP`a8ĩ t̼Ԋh\Ad؅`!)@ R `SXDR`YE *4"V1XM8xR((!nF C8A1 _ "!! H&Ac Լ [ RzB 1+/,k5 5 Z JVbxݤ"d"(#71Ab0 r ͤ%i9ŕj iHw6Z9K2b52JRS4Z c 5 ʼZsrRKlRm4dJԼ H?][ ԟyũE%H-> b+5PvY ;PPRTiMzkAIt%TWIQi^rbI5j(OQ(I-.)fuFiAj R2AU\I1FuAZi[ q[S@E%񩅊  M@1TEBPG,<p#1RSYT"(؁K-&LPrԔxp$PT@=ȡ $(IJ-@@re *B\C@P7|#PmEpd6Fv!>SuDP3)rpxggP-rjbPu -ip- A BxLct9𚒫|ywfs~3m6SDO1A_wR%CϹaL V(DlHx듼ͷAqelx IGuB(> 3xOU => Non!`  Ck &P69t .fill(false)L}< Yӓ .fill(falseP =; x(<'%M(Ƭ^ZE0 H'Exp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original" !CH&̏R?K40000 tdkpin-rs@E&Qz6<+xLc^l%N%VFCݑw??$h!; X0/_w"B a6rUl2Q!Cl1x\dzAqs;;;+YxIFuA{<DuHxFbonusF q 2x)ҾF bonus: u323bonus: 0+ ,$onus = self.bonus.saturating_add(1000\\W M$onus = self.bonus.saturating_add(1000\\0Conus = self .bonus .saturating_add(s>it;+Nu p\b + bonus = 004?kz9v0 => self.bonus = self.bonus.saturating_add(10_0012 => self.bonus = self.bonus.saturating_add(20_0013 => self.bonus = self.bonus.saturating_add(50_0024 => self.bonus = self.bonus.saturating_add(100_0025 => self.bonus = self.bonus.saturating_add(200_00+Nu p\b + bonus = 0Q+gl"&saturating_add(self.bonus); if(bonusn_)bonus!Ϩ bonus = 4_000bonus.u7#double_bonus_then_transfer_all_310k!YKObonus`~ ' xggP-V}SNے/gﹸ BxycwfHB!A;wAI}Z@b[dQ100644 RECONSTRUCTION.mdv c%o)ҟf̗_wkui4h8M` 3 xLcăy9cwzhXOyJء/~sd_w7^4ҾzKE. 'lPx드ƵAq|lxm # TDK Pinball Machine for modern PCs This is a native Rust reconstruction of the 1995 Windows game **TDK Pinball Machine**. It uses the extracted original artwork and sound, recreates the playfield as a fixed-step simulation, and runs from the same source on Linux, macOS, and Windows. The game opens at 960x690, an exact 1.5x enlargement of its original 640x460 canvas, so modern desktop scaling cannot distort or vertically offset the pixel-art presentation. The original program is not required at runtime. All required game assets are embedded in the executable at build time. ## Run Install a current stable Rust toolchain, then run: ```sh cargo run ``` For a distributable optimized binary: ```sh cargo build --profile production ``` The binary is written below `target/production/`. On Linux, Macroquad's native development packages are also required (X11, OpenGL, and ALSA). Windows needs no extra runtime installation; macOS builds with the normal Apple developer command-line tools. ## Deterministic mechanics validation Named scenarios can be advanced without waiting in real time. The simulator uses exact 120 Hz steps, prints its final state as JSON, and can write both the complete step trace and the original-size 640x460 framebuffer: ```sh cargo run -- --simulate claw-6 --at 0.15 \ --trace /tmp/claw-6.json \ --screenshot /tmp/claw-6.png ``` Use `--step N` instead of `--at SECONDS` to reproduce one exact update. The available scenarios are `autoplay`, `launcher`, `flippers`, `claw-1`, `claw-6`, `claw-7`, and `claw-18`; `--seed N` fixes random choices. `autoplay` charges each ball and operates the flippers from live ball position for long end-to-end validation runs. ## Original and modern controls | Action | Original key | Additional modern key | | --- | --- | --- | | Start game / add up to 4 players | `+` | `=` uses the same main-keyboard key | | Charge launcher | Hold Down arrow, release to launch | - | | Left flipper | Left Ctrl | `A` or Left arrow | | Right flipper | Keypad Enter | Right Ctrl, `D`, or Right arrow | | Nudge | Space, either Shift, keypad `3` | - | | Help | F1 | Enter/Escape returns | | Settings | F2 | - | | High scores | F3 | - | | Sound | F12 | - | The five original speed choices remain available in settings. Physics now uses the original invariant 100 Hz millipixel substep, and claw animation follows the recovered 50/40/30/20/10 ms timer choices. Setting-specific repaint batching remains a presentation-only reconstruction boundary. The help screen is the original artwork in English, German, French, Italian, or Spanish. As instructed on that screen, double-clicking its upper-left exit box closes the program. ## Saved data Settings and the ten-entry high-score table are stored as `save.json` in the platform's normal per-user application-data directory. On first run, the table is imported from the original `HISCORES.DAT` included with this reconstruction. ## Reconstruction status This repository distinguishes exact recovered material from behavioral reimplementation. See [RECONSTRUCTION.md](RECONSTRUCTION.md) for the evidence ledger, known inference boundaries, and validation performed. sR& {x=2the original 640x460 canvas size and presents every artwork pixel one-for-one. The fixed, non-high-DPI client prevents desktop 5scaling from distorting or vertically offsetting the  GoxNID2This replaces the former guessed 330-430 px/s shot4 uA{<hxB"100644 app.rsvzѺOoN"a\ {Mm 4ёVdVxHҾ use crate::{/WTILT_THRESHOLD: f32 = 1.15~f32 "  n#nudge_cooldown: f32, nudge_meteclaw_rng_state: u32, nudgem nudge_meteclaw_rng_state: seed.max(1U9(self.next_random_value() % u32::try_from>".unwrap_or(3_800)) A#$,->. + i32::try_from(variation).unwrap_or_default(<#:&.P && !self.ball.in_launcher && controls.nudge.abs() > 0.1[nudge[,= .x += controls.nudge * 55.0/*nudge_meter += controls.nudge.abs() * 0.34/nudge_cooldown = 0.22/)9h 9tnudge_meter >= TILT_THRESHOLDA*@J9@JsM g|:g:^g: u32 { let mut value = self.claw_rng_state; value ^= value << 13; value ^= vaZlue >> 17; value ^= value << 5; self.claw_rng_state = value; value, nudge_meterчn;L5 'e4nudge_cooldown = 0.0;!n_1.0A|@(j`"W-1.0 Fnudge_cooldown = 0.0; game.nudge_meter = TILT_THRESHOLD - 0.01';u@P`=p 000 })al cannot_be_tilte+} ] 12nudge_cooldown = 0.0; .{R1.0A|J!(!lNudge)!lTilt-`'9} } Q"Wx//use crate::{ borland_random::BorlandRandom, random: BorlandRandomG"random: BorlandRandom::new(seed), !H?self.random.below(3_800)#$ -" + i32::from(variation# >" u8::try_from(self.random.below(6)a1cast_possible_truncation)]x = (f64::from(velocity.x) * 0.9).round() as i32; let vertical_factor = 1.0 - self.random.unit_interval() * 0.3;  velocity.y = -(f64::""" * vertical_factor).round() as i32#[usize::from(self.random.below(4))],y^A̿&550 }WĽz>xggP-]Ca˞6n?:o) lx드Aq$W)Xx/DB . Traces include the last <Z8wdxWNgame.rsd(c{ !6:b¥b n={rx9.Дc$&jyx[7Ar[678x{Pu~1ۊϙ.%ǁ /xLc[ "^$|kvx듼ƼAqey: xUSM\EefI#ٌݓtOOAB$$`fo׫w{שUGYr !ېߠ R/k[us=ɏ`-")7 )TElH JV֤TVPҫ%`Bxꜹh/ZBmV!$5!֤&ٖ"RDp&t*%ő+J6!&K)JfR$]sh:=.ŽOWo]~RR Ϫ H'(7m: wU(ɚl-E`r4jS;ޏJhMzZ|7xon\9t JJ:'6tq[rx$BbyZLBE\MYBɑ]"MՄJ<5U%9j6_+xe\<;Zԓ)F0ż@[Iw{Wvw&qFMiPi ܨq'1峧Ov>< ĎlYQK:_y1ȭLJpIX.bYIָ::ܟ`࣏vl%&NL]֤%@4[5\ѫ|z4_vus067c/Jx@>> fixedL(nder one-for-one at the original 640x460 ix{"100644 app.rsXNW@!JoÎ",game.rsS4N-u6:b¥b n&C "3ͱmYp/oN@,*nAYЖU ]ٹbCB$p9E[ DB0-BXc'lHvyCրmcc~6.*S&؇[K*c .!%PZYfJB0Vnl80搿#xrpi6u!.&ZCPD1>>Q9~/U7'xlq^#vq`4norj{n FΖCNAF&Ym%pOq)~}d9_!04lxZ)?rA 9pՕ u*86eL14~(W p)zΉ1z;2uoprfkT$}J;pOAhvygVAxs)3j ҎB&XtXyגІbmcne m?,3|w_]f8y03 ݔԄX{|7Šy<'ƾ:Ή'",  r)0P%$0YylCo+W?=&;TW@yBMߝ@uJH{vw}k?)υ<|BjYMyM~ v`w:W:\l?P$ÇO9 qh$0"Vp [\$`_2 _P!a*7&-i(p/-1G X8VZ-iekphTd׳ r`y@rfx'uexb'3RwFRmLV-?ɪ (Y0&4Szq kT'5գ"8)`jtDwdgԅNG>~0#pn ҡw%ON% 0L<=.gTQ>=G~JrѤpA,ʖ;7`4u݀;xCδuЈ3llw ]\MS."Yj7ۦjgݧAJf$~&T"|PY,넢3`MKwbER:龐 8!NR ?[v"w loΝe%*G KT^rUE3t%xn `jc|i/$BA;vx M-鑿ڏii嚵⍵\)^kOW! ;}^dfx B/Fge:;v >#\xOdlA*eRW|w >p X3Y]*GiZH:A w/_6`9ϋ.\] a ^,sS.gSk`.8uMrG*?,{tʍ*iiCZOXpf՘-FsށvkH҅UmH%h4GZӅ, ֐zT/%&&"A6ǣXQv72r{_uD)UrJ(E y괒w~LT &'static str { match self { Self::Autoplay => "autoplay", Self::Launcher => "launcher", Self::Flippers => "flippers", Self::Claw1 => "claw-1", Self::Claw6 => "claw-6", Self::Claw7 => "claw-7", Self::Claw18 => "claw-18", } } const fn claw_terminal(self) -> Option { match self { Self::Claw1 => Some(1), Self::Claw6 => Some(6), Self::Claw7 => Some(7), Self::Claw18 => Some(18), Self::Autoplay | Self::Launcher | Self::Flippers => None, } } } impl FromStr for Scenario { type Err = String; fn from_str(value: &str) -> Result { match value { "autoplay" => Ok(Self::Autoplay), "launcher" => Ok(Self::Launcher), "flippers" => Ok(Self::Flippers), "claw-1" => Ok(Self::Claw1), "claw-6" => Ok(Self::Claw6), "claw-7" => Ok(Self::Claw7), "claw-18" => Ok(Self::Claw18), _ => Err(format!( "unknown scenario {value:?}; expected autoplay, launcher, flippers, claw-1, claw-6, claw-7, or claw-18" )), } } } #[derive(Debug, PartialEq)] pub struct Request { pub scenario: Scenario, pub target_step: u64, pub screenshot: Option, pub trace: Option, pub seed: u32, } impl Request { pub fn parse(args: impl IntoIterator) -> Result, String> { let mut arguments = args.into_iter(); let _program = arguments.next(); let Some(first) = arguments.next() else { return Ok(None); }; if first != "--simulate" { return Err(format!("unknown argument {first:?}\n\n{}", usage())); } let scenario = arguments .next() .ok_or_else(|| format!("--simulate requires a scenario\n\n{}", usage()))? .parse()?; let mut request = Self { scenario, target_step: u64::from(SIMULATION_HZ), screenshot: None, trace: None, seed: 0x5444_4b50, }; while let Some(option) = arguments.next() { let value = arguments .next() .ok_or_else(|| format!("{option} requires a value"))?; match option.as_str() { "--at" => request.target_step = seconds_to_step(&value)?, "--step" => { request.target_step = value .parse() .map_err(|_| format!("invalid step {value:?}"))?; } "--screenshot" => request.screenshot = Some(PathBuf::from(value)), "--trace" => request.trace = Some(PathBuf::from(value)), "--seed" => { request.seed = value .parse() .map_err(|_| format!("invalid seed {value:?}"))?; } _ => return Err(format!("unknown simulation option {option:?}")), } } if request.target_step > MAX_SIMULATION_STEPS { return Err(format!( "requested step {} exceeds the ten-minute validation limit {MAX_SIMULATION_STEPS}", request.target_step )); } Ok(Some(request)) } } #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] fn seconds_to_step(value: &str) -> Result { let seconds: f64 = value .parse() .map_err(|_| format!("invalid simulation time {value:?}"))?; if !seconds.is_finite() || seconds < 0.0 { return Err("simulation time must be a finite non-negative number".to_owned()); } if seconds > 600.0 { return Err("simulation time exceeds the ten-minute validation limit".to_owned()); } let step = (seconds * SIMULATION_HZ_F64).round(); Ok(step as u64) } pub const fn usage() -> &'static str { "Usage:\n tdkpin-rs\n tdkpin-rs --simulate SCENARIO [--at SECONDS | --step N] [--screenshot FILE.png] [--trace FILE.json] [--seed N]\n\nScenarios: autoplay, launcher, flippers, claw-1, claw-6, claw-7, claw-18" } #[derive(Debug, Serialize, PartialEq)] pub struct Snapshot { pub scenario: &'static str, pub step: u64, pub seconds: f64, pub ball: BallSnapshot, pub secondary_ball: Option, pub claw: ClawSnapshot, pub flippers: FlipperSnapshot, pub launcher_charge: f32, pub collision_id: Option, pub events: Vec, } #[derive(Debug, Serialize, PartialEq)] pub struct BallSnapshot { pub x: f32, pub y: f32, pub velocity_x: f32, pub velocity_y: f32, pub in_launcher: bool, } #[derive(Debug, Serialize, PartialEq, Eq)] pub struct ClawSnapshot { pub active: bool, pub frame: u8, pub bank: &'static str, pub ball_suspended: bool, } #[derive(Debug, Serialize, PartialEq, Eq)] pub struct FlipperSnapshot { pub left_raised: bool, pub right_raised: bool, } pub struct Simulation { scenario: Scenario, step: u64, game: Game, trace: Vec, autoplay_launcher_frames: u32, } impl Simulation { pub fn new(scenario: Scenario, seed: u32) -> Self { let mut game = Game::new_with_seed(1, seed); let initial_events = scenario .claw_terminal() .map_or_else(Vec::new, |terminal| game.begin_claw_scenario(terminal)); let mut simulation = Self { scenario, step: 0, game, trace: Vec::new(), autoplay_launcher_frames: 0, }; simulation.record(initial_events); simulation } pub fn advance_to(&mut self, target_step: u64) { while self.step < target_step { let controls = if self.scenario == Scenario::Autoplay { self.autoplay_controls() } else { controls_for(self.scenario, self.step) }; let events = self.game.update(SIMULATION_DT, 3, controls); self.step += 1; self.record(events); } } pub fn game(&self) -> &Game { &self.game } pub fn final_snapshot(&self) -> &Snapshot { self.trace .last() .expect("a simulation always records step zero") } pub fn write_trace(&self, path: &Path) -> Result<(), String> { let json = serde_json::to_vec_pretty(&self.trace) .map_err(|error| format!("could not encode simulation trace: {error}"))?; fs::write(path, json) .map_err(|error| format!("could not write trace {}: {error}", path.display())) } fn record(&mut self, events: Vec) { let step = u32::try_from(self.step).expect("simulation step is limited to 72000"); let claw_bank = match self.game.claw.bank { ClawSpriteBank::Closing => "closing", ClawSpriteBank::Opening => "opening", }; self.trace.push(Snapshot { scenario: self.scenario.name(), step: self.step, seconds: f64::from(step) / SIMULATION_HZ_F64, ball: BallSnapshot { x: self.game.ball.position.x, y: self.game.ball.position.y, velocity_x: self.game.ball.velocity.x, velocity_y: self.game.ball.velocity.y, in_launcher: self.game.ball.in_launcher, }, secondary_ball: self.game.secondary_ball.map(|ball| BallSnapshot { x: ball.position.x, y: ball.position.y, velocity_x: ball.velocity.x, velocity_y: ball.velocity.y, in_launcher: ball.in_launcher, }), claw: ClawSnapshot { active: self.game.claw.active, frame: self.game.claw.frame, bank: claw_bank, ball_suspended: self.game.claw.ball_suspended, }, flippers: FlipperSnapshot { left_raised: self.game.flippers.left_raised, right_raised: self.game.flippers.right_raised, }, launcher_charge: self.game.launcher_charge, collision_id: self.game.last_collision_id, events: events .into_iter() .map(|event| format!("{event:?}")) .collect(), }); } fn autoplay_controls(&mut self) -> Controls { if self.game.ball.in_launcher { let launch_down = self.autoplay_launcher_frames < 132; self.autoplay_launcher_frames += 1; Controls { launch_down, ..Controls::default() } } else { self.autoplay_launcher_frames = 0; Controls { left_flipper: self.game.ball.position.y > 340.0 && self.game.ball.position.x < 175.0, right_flipper: self.game.ball.position.y > 340.0 && self.game.ball.position.x > 140.0, ..Controls::default() } } } } fn controls_for(scenario: Scenario, step: u64) -> Controls { match scenario { Scenario::Autoplay => unreachable!("autoplay controls need mutable simulation state"), Scenario::Launcher => Controls { launch_down: step < u64::from(SIMULATION_HZ), ..Controls::default() }, Scenario::Flippers => { let phase = step % u64::from(SIMULATION_HZ); Controls { left_flipper: (15..45).contains(&phase), right_flipper: (60..90).contains(&phase), ..Controls::default() } } Scenario::Claw1 | Scenario::Claw6 | Scenario::Claw7 | Scenario::Claw18 => { Controls::default() } } } #[cfg(test)] mod tests { use super::*; fn args(values: &[&str]) -> Vec { values.iter().map(|value| (*value).to_owned()).collect() } #[test] fn interactive_run_has_no_simulation_request() { assert_eq!(Request::parse(args(&["tdkpin-rs"])), Ok(None)); } #[test] fn simulation_request_accepts_time_outputs_and_seed() { let request = Request::parse(args(&[ "tdkpin-rs", "--simulate", "claw-7", "--at", "0.15", "--screenshot", "frame.png", "--trace", "trace.json", "--seed", "42", ])) .expect("request should parse") .expect("simulation should be selected"); assert_eq!(request.scenario, Scenario::Claw7); assert_eq!(request.target_step, 18); assert_eq!(request.screenshot, Some(PathBuf::from("frame.png"))); assert_eq!(request.trace, Some(PathBuf::from("trace.json"))); assert_eq!(request.seed, 42); } #[test] fn seeded_simulations_have_identical_step_traces() { let mut first = Simulation::new(Scenario::Claw6, 7); let mut second = Simulation::new(Scenario::Claw6, 7); first.advance_to(90); second.advance_to(90); assert_eq!(first.trace, second.trace); } #[test] fn autoplay_exercises_two_minutes_of_complete_gameplay() { let mut simulation = Simulation::new(Scenario::Autoplay, 7); simulation.advance_to(u64::from(SIMULATION_HZ) * 120); let event_count = |name: &str| { simulation .trace .iter() .flat_map(|snapshot| &snapshot.events) .filter(|event| event.as_str() == name) .count() }; assert!(event_count("Launch") >= 3); assert!(event_count("FlipperMove") >= 10); assert!(event_count("Bumper") >= 1); assert!(event_count("Target") >= 1); assert!(event_count("Lock") >= 1); assert!(event_count("ClawCapture") >= 1); assert_eq!(event_count("ClawCapture"), event_count("ClawRelease")); assert!(event_count("Drain") >= 1); assert!(simulation.trace.iter().all(|snapshot| { snapshot.ball.x.is_finite() && snapshot.ball.y.is_finite() && snapshot.ball.velocity_x.is_finite() && snapshot.ball.velocity_y.is_finite() && snapshot.secondary_ball.as_ref().is_none_or(|ball| { ball.x.is_finite() && ball.y.is_finite() && ball.velocity_x.is_finite() && ball.velocity_y.is_finite() }) })); } #[test] fn launcher_scenario_holds_for_one_second_then_releases() { let mut simulation = Simulation::new(Scenario::Launcher, 1); simulation.advance_to(60); assert!(simulation.game.ball.in_launcher); assert!((0.09..=0.11).contains(&simulation.game.launcher_charge)); simulation.advance_to(121); assert!(!simulation.game.ball.in_launcher); assert!(simulation.trace[121].events.contains(&"Launch".to_owned())); } #[test] fn flipper_scenario_records_both_movement_edges() { let mut simulation = Simulation::new(Scenario::Flippers, 1); simulation.advance_to(46); assert_eq!(simulation.trace[16].events, ["FlipperMove"]); assert_eq!(simulation.trace[46].events, ["FlipperMove"]); assert!(!simulation.game.flippers.left_raised); } #[test] fn every_claw_scenario_completes_all_captures_and_returns_idle() { for scenario in [ Scenario::Claw1, Scenario::Claw6, Scenario::Claw7, Scenario::Claw18, ] { let mut simulation = Simulation::new(scenario, 1); simulation.advance_to(120); let events: Vec<&str> = simulation .trace .iter() .flat_map(|snapshot| snapshot.events.iter().map(String::as_str)) .collect(); let captures = events .iter() .filter(|event| **event == "ClawCapture") .count(); let releases = events .iter() .filter(|event| **event == "ClawRelease") .count(); assert!(captures >= 1, "{} must enter the claw", scenario.name()); assert_eq!( captures, releases, "{} must release every captured ball", scenario.name() ); assert!(!simulation.game.claw.active); assert!(!simulation.game.claw.ball_suspended); assert!(simulation.game.ball.position.is_finite()); assert!(simulation.game.ball.velocity.is_finite()); } } } eFxWC;8Ʊm k$м x8 /%DECOMPILATION.mdl#ynND~X)n,,2n.I?5@hT_ؓ\.#%=IjydFg*DA100644 TDKPIN_PHYSICS_RESTORED.c.v<) ILTU&'toolsPهӃEM=6ɻUPUӦ3xMT͎DV6+␟ ۰HnaA v1nS=;>Gq.@ċ<j{ݓ%{oGwN*kg=[A))BhC{o=|mez2k%Bc& QЫ#-bOl54b$@oAȄ I>6T2+ ~Ȧ.*xtɋQ7/.G##W<`G&o2V@UO6.+p%K@CC Aw>Ф "mrnP[&[/쮆/Cႄ`C2*`i;\0+ G7eEU7⒩ztP-94!ޱ%VDnrqEfD I̲ybX4΀P3c4ɡ ]\EpQKȓ\ZBйРӥš\xJH9ʌwDV΋n<- ?a\BEO=UKr\mPX܌' rے 9K3wF PI~4~N䣛y$G\̊'F"?Fl1aGKl ц( inI»6Ρ5Q&S 2xQ-# Mechanics reconstruction progress This ledger scopes the current reverse-engineering pass to the claw and flippers. The preserved executable is the authority; `TDKPIN_GHIDRA_RAW.c` remains immutable raw evidence, while `TDKPIN_MECHANICS_RESTORED.c` carries reviewed names and control flow. Target: `TDKPIN.EXE` SHA-256 `a9022f1894e3e6e21fc42e8f6c932f7c549ca77f63aaa0c488bb9d55d9d0174c`. ## Function inventory | Address | Raw name | Restored role | Status | | --- | --- | --- | --- | | `1000:638e` | `FUN_1000_638e` | key-release flag updates | reviewed | | `1000:6bf8` | `FUN_1000_6bf8` | key-press flag updates | reviewed | | `1000:7ed9` | `FUN_1000_7ed9` | flipper collision movement and sound | reviewed; inner fixed-point geometry still raw | | `1000:8b0d` | `FUN_1000_8b0d` | flipper bitmap/collider movement | reviewed; inner fixed-point geometry still raw | | `1000:99f0` | `FUN_1000_99f0` | binary flipper transition state machine | restored | | `1000:c79c` | `FUN_1000_c79c` | collision dispatch, including claw object `0x59` | claw branch restored | | `1000:eab1` | exported ordinal 10 | timer tick, claw release and return | claw branch restored | | `1008:0002` | `FUN_1008_0002` | sound-enabled dispatch | restored | | `1008:0e08` | `FUN_1008_0e08` | claw background restore and sprite slicing | restored | Inventory coverage is 9/9 functions inspected for this mechanism pass. This is not a claim that all instructions in the two large physics functions have been renamed. ## Proven behavior now available to the Rust port - Left Control (scan `0x1d`) and keypad Enter (scan `0x1c`) set input flags; the timer changes each flipper position only between 0 and 1. - Every flipper movement edge, including return, invokes sound number 21, Win16 WAVE resource 2021. - Claw collision object `0x59` suspends the ball, zeros its live motion, disables collision records 12 through 20, and selects terminal frame 1, 6, 7, or 18. - The claw advances exactly one frame per timer tick to its terminal, releases the ball, then advances one frame per tick back to frame 10 before clearing the overlay and restoring collision records 12 through 20. - Resource 900 is sliced into 100x74 frames, nine columns by four rows. The destination is `(238,47)`; closing rows begin at source y=0 and opening rows at source y=148. - Claw capture/contact uses sound 2015; release uses sound 2016. - The release-coordinate projection is `(raw + 500) / 1000` for rendering; decoded physics centers are `(258,78)`, `(270,94)`, `(275,97)`, and `(325,92)` for the four selectable terminal frames. - The speed scalar is 3800 millipixels per tick. Its Borland Real48 direction constants are decoded for all release cases in the readable C companion. ## Explicit pending evidence - Transcribe the full raw fixed-point flipper impulse calculation. Production behavior currently uses live-fitted up/down transfer curves with exact record geometry and probe tests. - Reproduce original callback batching for non-default detail settings. Physics substeps and claw cadence are recovered, but Rust presents intermediate 10 ms physics states instead of batching 1-5 substeps into one Win16 repaint. Those items are intentionally not counted as semantic parity. The readable C files preserve their raw constants and label unresolved batching/fitted arithmetic so later work cannot silently turn an estimate into claimed evidence. ## Runtime comparison on 2026-08-22 Wine 11.15 (staging) ran the preserved 16-bit NE executable from this tree. Keypad `+` was sent to the real window and produced the one-player started state. Down was then held for 1.1 seconds and released; captures confirmed that the original plunger advances while held and launches only on release. The Rust validation mode captured the corresponding started and half-charge states plus closing and release frames for claw terminal 6. That original live session did not reach the claw; the controlled tracing described below later captured an original terminal-18 sequence. ## Live fixed-point tracing Wine's remote debugger changes the Win16 exception path and is not suitable for continuous gameplay traces. On Linux, `tools/run_traceable_original.sh` starts the unmodified executable with a same-user ptrace opt-in. While it is waiting at the launcher, `tools/trace_original_state.py` locates the live DGROUP and game object by recovered binary/state signatures and records their fixed-point state: ```sh original/tools/run_traceable_original.sh original/tools/trace_original_state.py --duration 5 --output /tmp/launch.csv ``` The sampler records original millipixel positions, predicted positions, velocities, flipper inputs and states, and claw animation state whenever any of them changes. It neither patches `TDKPIN.EXE` nor pauses Wine. The tracing helper is Linux-only development infrastructure; it is not part of the Rust replica. `tools/inject_original_state.py` updates all recovered copies of the ball position and velocity between the original 30 ms callbacks. This permits repeatable probes at individual walls, circles, gates, and mechanism triggers: ```sh original/tools/inject_original_state.py --x 289 --y 94 --vx 0 --vy 0 ``` The executable image remains unchanged; only the current disposable Wine process is modified. Run the injector while the ball is waiting in the launcher so it can identify the live game object, or supply the previously reported `--object-base` to both the injector and tracer during a sequence of active probes. `--substeps 1` isolates one collision integration step; omitting it retains the original configured detail level. `--stop-process` is available for single probes, but repeated whole-process stops can strand Wine while a Win16 mutex is held and therefore are not the default. A probe at `(289,94)` captured the original terminal-18 path. The collision suspended the ball while frames advanced from 10 through 18 at the configured 30 ms cadence. Release assigned `(325000,92000)` and `(0,1000)` millipixels, then cleared suspension during the same timer callback. The three default physics substeps each added 15 millipixels of vertical velocity, confirming the observed total gravity increment of 45 per timer tick. Repeated clean trigger probes subsequently covered terminals 1, 6, and 7 as well. After the three default substeps their live states were respectively `(251160,78090),(-2280,45)`, `(265440,100930),(-1520,2325)`, and `(271466,105070),(-1178,2705)`. Terminal 18 produced `(325000,95090),(0,1045)`. These match the recovered release table followed by three `+15` gravity increments; Rust tests now assert every raw release velocity. A one-substep probe against the vertical shooter walls recovered the type-2 response arithmetic. For unit tangent `t` from the registered start to end and left normal `n`, an incoming contact with `vn = dot(v,n)` and `vt = dot(v,t)` uses `vn' = -0.6 * vn` and `vt' = vt + 0.1 * vn` for the ordinary rail coefficients stored in its two Real48 fields. The new position is the previous position plus this response velocity; the original does not separate a circle from the line with a modern capsule solver. Fresh one-substep probes recovered type-1 response in the radial basis. With outward normal `n`, clockwise tangent `t`, entering speed `vn < 0`, and tangent speed `vt`, ordinary object 155 produced `vn' = -0.6 * vn` and `vt' = vt - 0.1 * vn`. Bumper 51 additionally added `0.4 * 3800` along `n`. The exact captured transitions were `(0,-940) -> (94,564)` and `(0,-1970) -> (197,3096)` millipixels per substep. Live key edges recovered all moving flipper geometry. The raised left records are line 66 `(98,382)->(131,369)`, circle 67 `(133,377)`, and line 68 `(137,384)->(116,405)`. The raised right records are line 81 `(197,405)->(171,378)`, circle 82 `(181,376)`, and line 83 `(183,368)->(217,383)`. Resting records retain their registration-table coordinates. Edge-time position and velocity transfer is tracked separately from the record geometry. Three live left-edge probes at `(115,390)`, `(120,390)`, and `(125,390)` produced post-edge positions `(128.718,365)`, `(133.397,360)`, and `(138.182,355)` with raw velocities `(1932,-3523)`, `(2079,-4658)`, and `(2217,-5889)`. The Rust upward stroke fits those states; the full raw calculation remains pending. A separate downstroke probe at `(125,390)` kept position unchanged and assigned `(3519,6302)` before the next substep clamped speed to 3800; the Rust return edge now matches that state. The type-4 rule dispatcher at `1000:b476` shows that records 150-152 are three independent 500-point sensors. Each sets its own ten-callback timer and enables the associated magnetic gate; there is no recovered 1,500-per-target plus 5,000 completion rule. Records 140-147 carry their exact 1,000 through 3,000 scores and use the same enter-once contact bit, which clears after the ball leaves their radius. The collision scan at `1000:c79c` does not resolve the first matching object id. It retains the smallest path-progress value while traversing all 175 records, then applies that response from the previous position. The Rust fixed-point solver now follows that ordering for recovered type-1 and type-2 objects. `1000:b476` decodes the physical bank flags in `OBJECTS.tsv`. Flags `0x208a` on records 90-104 deactivate five complete three-line groups; clearing all five raises the bumper value and rearms them. Flags `0x2092` on records 109, 112, 115, and 118 deactivate four three-line groups; clearing all four advances one of the nine TDK diamond segments, awards the recovered segment value, and rearms records 109-120. Controlled type-3 probes filled records 129-133 in order. Their bonus sequence was 10,000, 30,000, 70,000, and 150,000; the fifth hole transferred the full 310,000 to score and cleared bonus. Each hole returned the ball to `(325,413)` without consuming it and retained contact state 99. Entering record 148 then cleared all five hole states, confirming its wheel-reset role. Top type-4 targets activate persistent field records rather than a shared timer: 150 enables 153 (left), 151 enables 6 (center), and 152 enables 154 (right). Entering active record 153 at `(15,350)` changed `(0,2015)` to `(0,-3039)` millipixels per substep in the live original. The field continued pulling upward inside its registered bounds and deactivated after the ball exited above them. Collision with flagged line 84 selected effect 3 in a live probe, set the per-player effect word, and activated type-4 record 149. `1000:c4e1` maps effects 1-5 to 10,000, 20,000, 50,000, 100,000, and 200,000 bonus; effect 6 transfers the accumulated bonus to score. Entering record 149 also awards its static 500, clears the selection, and disables the record until line 84 is hit again. After record 148 sets `DAT_1028_399a`, the next flagged line-84 selection uses effect 7 instead of random 1-6. The effect-7 branch in `1000:c4e1` schedules the timer's second-ball path and raises the active-ball count to two. The Rust port now keeps and renders a second live ball, applies recovered physical collisions and scores to it, and removes only the drained ball while multiball is active. The score-addition path at `1000:bc36` indexes the initialized 32-bit threshold table at DGROUP `0x825` using media state 1-4. The exact thresholds are 140,000, 650,000, 1,300,000, and 4,000,000. Crossing each threshold increments the media state and remaining-ball count; the apparent fifth table word is the next unrelated global, not a fifth media tier. y4/xy ;zy~H?";Ċi '"O@땹>#5t8EJjW[>1# 1!decompile.sh'9sNy9qTF9$86mau>;lVx}Ɍ{&7ENv!|{ Yxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalC;8Ʊm 40000 tdkpin-rs:>J4;nz C<$xycbQ|a<(c!pYj5wA(цF[d)100644 RECONSTRUCTION.mdS|`7EI/dQte_w$y,椭3Ds^vB$iB2x# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 9.VRx{"100644 app.rs'ix&>uN",game.rsS4N-u6vQ3Q%/穕 pn&C "3 Result<(), String> { let path = path .to_str()  .ok_or_else(|| format!("screenshot path is not valid UTF-8: {}", path.display()))?; self.render_target ] .texture .get_texture_data() .export_png(path); Ok(())game = Some(Game::new(1)N1') Mif ( () &&0mua3 Game::add_player_before_launch%1' down:9 & .play(event.sound_resourc <T$ + TO START"/".j/PRESS + AGAIN TO ADD PLAYERS", 475.5, 165.0, 15A.#,"THEN HOLD DOWN TO LAUNCH", 475.5, 196.0, 16A.L 0// Resource 998 is the original game's resting playfield. Resource 997 // contains exact lit-state patches used below for the active displays.TME1T;;object_id, region) in [ (6, Rect::new(151.0, 389.0, 13.0, 49.0)), (153, Rect::new(11.0, 344.0, 13.0, 49G.0)), (154, Rect::new(291.0, 346.0, 13.0, 49.0)), ].6 magnetic_field_active(object_id)a!<MOregionCregionaC@;mE42(4region.w, region.hGNregion!Op game.effect_target_active(!(region = Rect::new(60.0, 57.0, 18.0, 17.?>.\ I regionCregionaC@;mE>S<4region.w, region.hG%region?P3Qball.in_launcherAM@4 plungerAE:426:@;mE>S<421.0, 18@1'!game.launcher_frame() as f32 * 21:N72717:GP3I;raised, region) in [ ( game.flippers.left_raised, Rect::new(93.0, 373.0, 47.0, 52.0),]Vb( game.flippers.right_raised, Rect::new(175.0, 372.0, 45.0, 53.0),]V] { if raiseda!<MOregionCregionaC@;mE42(4region.w, region.hGNregion!Op !game.claw.ball_suspendedAM9@4 MFFrF9F(P@5 .' $let Some(ball) = game.secondary_ballAM9@4 MF dF#9F#P@5 .' ,let Some(source) = game.claw.sprite_source()AM@4;47:@;mE>S<4 100.0, 74@'source?P3A^A  F)NT2I'for region in [ Rect::new(383.0, 72.0, 140.0, 136.0), Rect::new(545.0, 170.0, 9.0, 9.0), Re!ct::new(372.0, 233.0, 238.0, 29.0A MN+regionCregionaC@;mE>S<4region.w, region.hG%region?P3IF :right_aligned_digits(&game.bonus.to_string(), 610.0, 240.0K^A 'let row_y = 277.0 + game.current_playerMfor region in [ Rect::new(373.0, row_y + 4.0, 9.0, 9.0), Rect::new(473.0, row_y, 137.0, 29.0), AMN+regionCregionaC@;mE>S<4region.w, region.hG%region?P3Ilet displayed_balls = game .player() .balls .saturating_sub(1) .saturating_add(Tgame.player().extra_balls) .min(6); for ball in 0..displayed_bal#t x = 392.0 + f32::from(ball) * 8.04<.\ I R row_y + 2qD@;mE>S<43.0, 3@1x, row_y + 22.0, 3.0, 3@5pOM9pdraw_right_aligned!K &player.score.to_string(?67280W44.05 ) right_alignedQright: f32, y: f32) { let digit_count = u16::try_from(digits.bytes().filter(u8::is_ascii_digit).count()) .e.xpect("a display value has at most ten digits"/`f32::from(digit_count) * 10.0;F7gits(digits, vec2(right - width, y), vec2(10.0, 18.0));Q7Up\pxmod app; mod assets; mod game; mod geometry; mod original_physics; mod persistence; mod simulation; mod table; use app::App; use macroquad::prelude::*; use simulation::{Request, Simulation, usage}; const WINDOW_WIDTH: i32 = 960; const WINDOW_HEIGHT: i32 = 690; fn window_conf() -> Conf { Conf { window_title: "TDK Pinball Machine".to_owned(), window_width: WINDOW_WIDTH, window_height: WINDOW_HEIGHT, window_resizable: false, high_dpi: false, ..Default::default() } } #[macroquad::main(window_conf)] async fn main() { let request = match Request::parse(std::env::args()) { Ok(request) => request, Err(error) => { eprintln!("{error}"); return; } }; if let Some(request) = request { if let Err(error) = run_simulation(request).await { eprintln!("{error}\n\n{}", usage()); } return; } let mut app = App::load().await; loop { app.frame(); next_frame().await; } } async fn run_simulation(request: Request) -> Result<(), String> { let mut simulation = Simulation::new(request.scenario, request.seed); simulation.advance_to(request.target_step); if let Some(path) = &request.trace { simulation.write_trace(path)?; } if let Some(path) = &request.screenshot { let mut app = App::load().await; app.set_simulation_game(simulation.game().clone()); app.render_simulation(); next_frame().await; app.export_simulation_png(path)?; } let final_state = serde_json::to_string_pretty(simulation.final_snapshot()) .map_err(|error| format!("could not encode final simulation state: {error}"))?; println!("{final_state}"); Ok(()) } k:.^x{eyP& lx K.oǦ+ro _K$\xE>;i Partly recovered Tand both flipper directions. Persistent physical-contact bookkeeping remains pending gPartly inferred | Visible 2000-6000 target values and recovered registration values are preserved. Some bumper, bank-completion, robot, wheel, lock, and media thresholds are best-evidence reconstructions because the decompiler did not recover meaningful names or a clean rule tableZ no@trajectory or score tick is bit-identical to the 16-bit executable. Remaining numeric inference is listed above instead of being presented as proven parity4\Fԑxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalyL3dq9e GAеbC40000 tdkpin-rs3^G' WJl(;%uxb @wH^踤O0֜Glqx ZW\*+e)Vx5K3+N۽~_wאFB)[NAR1LUqx,;;! ix-way effect selector/consumerV tCx["100644 app.rs7:aV+Dn"4);j`[JIj;ɴm䣡)o 6$l(Cn xz@gA&;GcxvEo0^S[/ \`,[R\M\8\p9`i-]9m@Uu:R$1($B."xytj 4knxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originals"U~W1Ljr40000 tdkpin-rsI_n=[0iZ!,w; x`llzY|P"֜1v&xfZX Differentially verify the recovered 10/20/30/40/50 ms timer choices against live original captures; the Rust port intentional\ly uses the default 30 ms claw cadence independently of render rate. - Transcribe the full (, then compare it with the Rust floating-point collision response. - Force each chosen claw terminal in the live original and compare its complete frame/trajectory sequence with the deterministic Rust trace. A controlled collision probe has covered* terminal 18; terminals 1, 6, and 7 remain T preserves 5s the unresolved conversion so a later implementation8 $+eHrx5}/jL632`ѫ^! e]=rxs, ; exact setting-specific timer batching for presentation and mechanism animation remains under reconstruction. The help screen 4SxVx%|-J)exӮ'j zx^CS3._#)%V CLAW_FRAMEj.} {CLAW_FRAME_SECONDS12|Xp"xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalMc0H>V;Gؽ س40000 tdkpin-rs02ś5dEGxt[\:uP:JҊP2ٱ֜gZg;xXU*#Zx5Kgki> Ç=r_wjӶ%[E.UWjPKxX;;l Partly recovered hix-way effect selector/consumer, permanent double scoring, KByte media progression, and media extra ball ! >are readable and all four random terminals have live differential trajectory coverage. Remaining rule uncertainty is concentratDed in exact media thresholds and timer batching, not table collisionRՁhxxV!&2=t),qLj%xLTL25] = [360_000, 720_000, 1_440_000, 2_880_000, 5_76{L5!MZg?mxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalF7|+_˕,!940000 tdkpin-rs\^*'z\Ms.JҭD=VZxxC oC֜gNxXRb)amx5K/]@+z,5 ZWX«_w<јet5f<Wm0 x?;; : }DRemaining special-target effects still require full rule restoration .KUS@?Y @cA }n5.L/"?"=-n#x؟AAW5xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original[yU%!TXCk40000 tdkpin-rsE|YL/nG-p;Ox(2[2~DD<|0lW֜ lCx XO%~4gx5KudɂژZH}N߸c_wjQqLh\dBB4TxVoD@Z̢Kcp+mj yx=Ů-.8 /m3w.0 / CLAW_FRAME_SECONDS~8@ 50.666_668W:76N(y9(6, vec2(270.0, 94.0)), (7, vec2(275.0, 97.0)%e claw_release(frame).0, expected-BnHn;xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original%=`5k40000 tdkpin-rs8Z3A_P G>vx-,-厠~1*!?՝g&xOL)& x5KNZyTֶ\bZ_w, RkBGבN xa;; a magnetic gate for ten original timer callbacks, replacing the inferred three-target bonus. Remaining special targets and magnetic save routing LY:|"xB"100644 app.rsh1w51"4:E&y 4A j  x}5 Equa F%kf8,0 ,$)GQy'if let Some(id) = event.sound_resource(!   id,0 +:if game.magnets > 0.0 { for x in [18.0, 296.0]1 draw_triangle(" vec2(x, 345.0=vec2(x - 7.0, 359.0=vec2(x + 7.0, 359.0=YELLOWO8!!draw_triangle(" vec2(x, 367.0=vec2(x - 7.0, 381.0=vec2(x + 7.0, 381.0=YELLOWO8,jnx65"" f1,0 0,01,0 0@QExS4self.assets .play(event.sound_resource()1P 0: K!K[Y)xZQ magnets: f32GH magnets: 0.08magnets = (self.magnets. u.2# & magnets > 0.06#&& (self.ball.position.x < 145.0 ||A x > 175.0n6(w i .y = 410.0'w l vec2((157.0 -Ax) * 2.0, -245.01)( magnets = 0.0(n;( <: 6 0 ><=wmagnets = self.magnets.max(0.3p` E[=a$magnet[tP_&magnets - 0.3).abs() < f32::EPSILON); Hhe hHxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original2ly Fs_I,40000 tdkpin-rspo?ȡ'VRx>xsZu g>0(ٱ֜3x6OK|)and return-stroke transfer remain pendingE K`*Ex5K5yv6k0>_wjK-,Hkx;;#eleft-flipper probes and is mirrored on the right; the complete return-edge arithmetic remains pendingvupward flipper transfer% *'and return-edge flipper transfer remainV ³: a magnetic gate for ten original timer callbacks, replacing the inferred three-target bonus. Remaining special targets and magn5etic save routing still require full rule restoration the %( b2Wheel holes, ball lock, remaining special targets,  ( >x3Vzg: 0p4̏C.AjS򧰷XPnbdx)&2&l8], pub side_target6lock_lights: u8G-target_cooldowni 8], side_targetg@lock_lights: 0wtarget_cooldown@target_cooldown = (self.target.'=./targets(q-fBmNtargets`i7target_cooldown > 0.0q .B }%let position = self.ball.position; let wheel_center = vec2(114.0, 79.0); let from_wheel = position - wheel_cen8= *boundary) % 8; if !self.wheel_holes[hole]jX [hole]!KT _[ 2_500Ttarget_cooldown = 0.15TX0X,*X_>T hole| *hole)jX%T _[ 25_000)Q>, Qif (151.0..=220.0).contains(&position.x) && (187.0..=205.0).contains(&position.y)1*lock_lights = (self.lock_lights + 1).min(4pe_[ #u32::from(self.lock_lights) * 5_000pe  85.0, 181.0pe&5c2(-40.0 + f32::from(self.lock_lights) * 18.0, -120.0petarget_cooldown = 0.4;% kUKN_Ceside`oHX]side`o#]oLlock_lights = 0; !\oYЖ @l6 .5x 1AW[oկxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original/vYpDJ40000 tdkpin-rswOʲA#fCͥEt;&xTzb haBГ_w/5}Md! [l)=xj98 .increasing bumper value, nine-part TDK diamond jy 7now several target-bank completion )9wx3Vy $KJcCGj]ŚUz8yZ2xe{O:9xQ @ a q4 . @side = [180.0, 195.0, 210.0, 225.0, 240.0]; for (index, y) in side.into_iter().enumerate() { if position.di0stance_squared(vec2(286.0, y)) < 9.0_f32.powi(2)8!self.side_targets[index] > JLQ [indexI+1000 + u32::try_from(index).unwrap_or(0) * 1_000);*K %.x = -self.ball.velocity.x.abs() - 55> JK1!@I\* &+side_targets.iter().all(|target| *target) {:Q8RH9bumper_value = (player.bumper_value + 1_000).min(10_000);n4SR5%0I 10_001E1 for (center, value) in [ (vec2(113.0, 285.0), 2_000), (vec2(132.0, 270.0), 3_000), (vec2(15;5.0, 258.0), 4_000), (vec2(181.0, 270.0), 5_000Μ01.0, 285.0), 6_000Z7if position.distance_squared(center) < 10.0_f32.powi(2)- J0I kS* K $.y = -self.ball.velocity.y.abs() - 4> JK13I%\ # NT_/`pd\24Ax%T# uN i 1AW xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalPNHo ic40000 tdkpin-rs*.؞N+{=vx}(|=g$RgxKB?! _x5KD柊d !J(_wUC0=.+l*CPx-88\ bClosest-contact selection, p N$ xKV+v( je|?J͎{V_ku!0c]ŚUz8yZ2x& +x Uh?< STEP_SECONDS, collide_with_circle, collide_with_lin1+hit_wall = None; let mut hit_circle2F݄ sponse = 9 if collide_with_linA&S& &mut respons<442&= = respon>&:3`n&hit_wall = Some(wall.idQn< L:wall.idQn&yfn9 3E61&݄ sponse = 9 if collide_withU&S& &mut respons< 7 1&= = respon>&:3`n&hit_circle = Some(circle.idQn< L: circle.idQn&yfn9n?;aVxujZ&T s_intersect: 3  # bO W } /// Apply Hb#if !paths_intersect(old_position, *q#I# velocity.x = K/ velocity.y =_K/true } /// Apply%&to a path entering the circle. pub fn 3& 2B# "f#~9# #哻# velocity.x = K/ velocity.y =_K/i0ӄxp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalº:7Qon@( B40000 tdkpin-rs~R[/YI28ɜ>LNxƶ}tD&Wl7 g_PgZxK? D17x5KOe$ЁLq̋2_w)49{<(S}rq  (x85 and swept type-1 circle response d9Type-3/4 triggers, closest-contact selection, persistent  G hAwheel holes, magnetic saves, four-position ball lock, target bank K for a completed diamond 8 the original help and code paths YZ,xKVbom3;HiQoxje-JiBuNY c=üjme^W H]##"xґ.(5YR2= @JR!0 C BCLAW_TRIGGER_CENTER) <= CLAW_TRIGGER_RADIUS.powi(2SDBntop = [vec2(205.0, 47.0), vec2(234.0, 50.0), vec2(262.0, 53.0)]; for (index, center) in top.into_iter().enumerate() { B( N +1.0_f32.powi(2) && !self.top_targets[index]?WC.1_500)I_*y =1:N + 6?D/2AJ%N@e ) DtopD9i!> W 12.0K5_000B"WkGtargets(Nzktargets(~γPv)◢lx ZOYL '/Wjx$ىT# uN ߳}-AW PxWPЖ3,y9[Xk$rax8@Um߾{l_3/T'ubL#jSϮnd'bY-x`4g o jx &֯xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalK(w jaO4+340000 tdkpin-rsHVB2w Arx;#x*r*Gt9Ly\tP@0[x8O<%0remains a separate arithmetic restoration task. l>5mx5K!$\?%3]_we=:~"U|tP6xl54now@,binary positions; the edge-time ball impulsexnd a kicked bump Vflipper impulses )1WxKVkULO'dߑjeDQ{ਵ\Fvg4c=üjme^W H] "+xgFLIPPER_EDGE_KICK: f32 = 118].+?,.% N :=0h?C clockwiseWtrueW“X radial = 0E - pivot).normalize_or_zero(); let tangent = if clockwise!ivec2(radial.y, -radial.x)`&'vec2(-radial.y, radial.x) }Q0!+= tangent * FLIPPER_EDGE_KICKo\{>applies_one_swept_tangential<2(LEFT_FLIPPER_PIVOT +) * 0.5ѱpz0›1(velocity_after_edge.length() - FLIPPER_EDGE_KICK"velocity_after_edge.y < 0.(;C-xZNQgL F;xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originala0 V2F*]Ҁ40000 tdkpin-rs%&DN7mJB;Sgx1Vf"@2gUxO9 <x5K`npj-ѩ%VM_wwg:U&Ǥxp(h xA44.Y0Moving flippers remain pending exact integrationBgxEV;iT Uouzh100644 geometry.rsi-I=]~ݴ/͚!8Rax#2, segment_collision24.0, 376i79p0A// The original moves these four records with the flipper bodies.6$matches!(wall.id, 66 | 68 | 81 | 83)%oY;~3wall.segment.startq4wall.f4o2// Objects 67 and 82 are the movable flipper tips.6matches!(circle.id, 67 | 82)%oY;~357a circle.centerq47hit_wall.is_none() && hit_circle.is_none() { let (left_flipper, right_flipper) = self.flipper_segments();  if segment_collision( 4r, 4BQ, =,, 4 0966a+if segment_collision( 4r, 4BQ, =, 4 0981+$j=*Fflipper_segments(&self) -> (Segment, Segment) { let left_tip =##}W X  '}W W# }; let right_tip =$$X 'Xm }; ( flipper_segment(LEFT_FLIPPER_PIVOT, left_tip), flipper_segment(@X right_tip), )k.Vflipper_segment(pivot: Vec2, tip: Vec2) -> Segment { Segment::new(pivot, tip, 0.88n$(left, right) = game.flipper_segment%8(left.start, left.end), (LEFT_FLIPPER_PIVOT,W1-_!.start, right.end), (@X}(let (left, right) = game.flipper_segment%ӐN left.end, LEFX right.end,Xpv<͠yl x ^!]xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 originalDυf'XB040000 tdkpin-rsyR;Xp9aŭ;{x`m3wXl@(gixO5x5K^9k klu_w O:]kڸ@Ynw+[x 44now@their#hCircle sizes are complete center-contact extents, so the rendered ball radius is not added a second timeorientation, an /. Type-1 circles, type-3/4 triggers, collision- *8still use or coexist with floating reimplementations and+  aGxrV;H_a{Lz!Iwͱx+100644 geometry.rslsFܾ[xCZ h>,/EP#ˑcwH[U The fixed // pivot circles (65 and 80) remain valid in either position. 7>3.] if circle @nu88'0.0@@[:@I>A@"K?5@K?%x@$?y5C?&" @"K?5@K?%x@$@y5C?@ L HI bumper) in BUMPERS^I'let hit = circle @nu%bumper.center, bumper8!105.0,a if hitT? bumper.id) ]if hit && !self.tiltedAT"A)J *B3J cB#J B'_UB@BmkoTxN2_} 7}xYىzeu O +.{ geometry::circle_collision, 6* line}, 6 separates_and_reflects_the_ball@Zmut position =EA1 - 0.5, 0.0A"Vec2::new(-430.0, 0.0)A ircle_collis1A&mut B9";CNB?0.0C@overlapping ball]C4 position.x >= circle.center.x + `A{BkDseparate the ballCQ velocity.x;#CSD Gt%%xW>jef (n<9֏k$d 1x4pvyBκCrֹ,}>R=b/%VS*6y4xgO4/briefly stops the opted-in process and updates  ! position and velocity atomicallyRXKC~'_x#&LA. jޔ@y̲Z43Dx)'=d <}xp40000 .githubۯ^eDejr%1q100644 .gitignoreNeI緶40000 original>jef (n<9֏40000 tdkpin-rs&U[+_yMu;5/xbA8#;`BkZ˘1$100644 RECONSTRUCTION.mdRGbMީQ FA|_wX p1K }h*T0xshare retained as simulation-detail settings. They change fixed-step resolution without changing the speed of play. The help scrC H3Bex$40Its cG!use equivalent native Rust bodies9Scan code `0x50` compresses the eleven frames in resource 901 while Down is held; the key-release routine activates the ball with the accumulated vertical launch velocity. | | Physics arithmetic | Reimplemented | The Win16 fixed-point/timer engine is replaced by deterministic fixed-step floating-point integration. Restitution and impulses are tuned to the recovered table but are, not instruction-for-instruction equivalents3 Nhas now been recovered in readable form, but its raw release-coordinate projection is still being decoded before the Rust behavior can claim parity ; keypad `+`, a 1.1-second Down hold, release, and the resulting launch were captured and compared with deterministic Rust states. A chosen original claw terminal was not forced live, so claw evidence is static code, decoded numeric constants, orig inal assets, and Rust state/fram o?dvance at exact 120 Hz steps, record JSON state/event traces,1. at any requested step for visual inspectionB|܀Ox+100644 app.rsR)ܑ>L9\CD. 100644 assets.rs mU)X~100644 game.rs E 5[Q 100644 geometry.rslsFܾ[xCZ h100644 main.rsF^79 Some(2021)0 Some(2002)0Bumper => Some(2004)0Target => Some(2006)0Wheel => Some(2011)0 Some(2015)0ClawRelease => Some(2016)0ock => Some(2017)0Media => Some(2022)0Z Some(2007)0 Some(2019)0  Some(2020)0 Some(2008)0BallSearch => None >" ! \y stalled_fo)S stalled_for: 0.0,a} SYz%let launch_speed = LAUNCH_SPEED_MIN + * LAUNCH_SPEED_RANGE;::0.0, -launch_speed)! C!( self.stalled_for = 0.0!7"|%"let charge_step % / LAUNCHER_CHARG_ let next_charge =  + charge_stepC ' )if next_charge >= 1.0 - f32::EPSILON * 4. i31.0&.next_charge }C ' u'(@let steps_per_second = [60.0, 90.0, 120.0, 180.0, 240.0][usize::from(detail.clamp(1, 5) - 1)]; let step = 1.0 / steps_per_second+$step,!stepA,0step},l0>stalled_for = 0.0;a?G.% N :=0O$stalled_for = 0.0;a? let travelClength() * dt; let maximum_step_travel = TABLE_LINE_RADIUS; let mut substeps = 1_u8; while f32::from(suSbsteps) * maximum_step_travel < travel && substeps < 12 { substeps += 1OB#substep = dt / f32::from(substeps);o substeps {N.y += GRAVITY * substepQ0!*= 1.0 - substep * 0.055Q0#Cclamp_length_max(MAX_SPEED!>C: +=9 * substep; P3drainedfor wall in WALLS!ih-] b2wall.23MY// Objects 66/68 and 81/83 are the resting flipper edges. // Their live shapes are handled as moving capsules below.q%#matches!(wall.id, 66 | 68 | 81 | 83P3MY// The upper shooter exit is a one-way gate. After the outer // curve turns the launched ball down and left, object 22 must // let it enter the playfield. A ball approaching from below // still collides wit h the gate.q%wall.id == SHOOTER_EXIT_GATE_ID:&&Cx < 0.0:&&C1:A/90.0:Ay < 35.0:'MY// Object 25 is the one-way shooter stop. It catches a returning // ball, but must not reflect an upward launch from the line.q%wall.id == 25 &&C < 0. i3MYlet hit = segment_collision(:&mutqB,:&mut self.ball.velocity,:TABLE_LINE_RADIUS,:wall.segment, |5if hit!i3if wall.id == 2!i3 drain'3 935:if wall.id == 25!i3@;00ii$3@; ' _;3@; ' g<3@; stalled_forO;3i_'55 if drained!i@;i/ ! for circle in PASSIVE_CIRCLES!iIdebug_assert_ne!(circle.id, 174, "the live ball is not a static obstacle"q5// Objects 67 and 82 are the movable flipper tips. The fixed // pivot circles (65 and 80) remain valid in eithe r position.q%matches!(circle.id, 67 | 8P3MYo7 _collision(:&mutqB,:&mut self.ball.velocity,:0K3o7enter,:o7+0K / let (left_flipper, right_flipper) = self.flipper_segments(); segment_collision( &mut self.ball.|B:, &mut self.ball.velocity, =,,+ segment_collision( &mutqB:, &mut self.ball.velocity, =΍, ); qEbumper) in BUMPERSE'0ilet hit = circle_collision(:&mutqB,:&mut self.ball.velocity,:0K3bumper.center,:bumperu7%105K |54if hit && !self.tilted && self.bumper_cooldown <= 0. i: =35`i6>35`io>#_' n>>!_'MBumperq55M. ?yself.stalled_for = 0.0;a??54.0?2*:  && 0b:8.F00 :`i :P*D f `"@;/) 'a? C Rlength_squared() < BALL_SEARCH_SPEED.powi(2) { self.stalled_for += dt;A2 stalled_for >= BALL_SEARCH_DELAY!iY = ifqB .x < 160. i372.0&.-72.0 }C00:horizontal, -210.F stalled_forO;MBallSear)h;self.stalled_for = 0.0o\@`yKUTPV  clockwiseWtrueW“X radial = 0E - pivot).normalize_or_zero(); let tangent = if clockwise!ivec2(radial.y, -radial.x)`&'vec2(-radial.y, radial.x) }Q0!+= tangent * FLIPPER_EDGE_KICKo\self.stalled_for = 0.0b!y^gstalled_for = 0.0b  stalled_for/gn>gƳ_hFflipper_segments(&self) -> (Segment, Segment) { let left_tip =j$]W   _;]W  let right_tip =@k$lX _;lXEST_TIP ( flipper_segment(LEFT_FLIPPER_PIVOT, left_tip), flipper_segment(RIGHT_FLIPPER_PIVOT, right_tip),  )bm.Vflipper_segment(pivot: Vec2, tip: Vec2) -> Segment { Segment::new(pivot, tip, 0.88p 45..0.55~N5}Nϫ~- 1.0).abs() <= f32::EPSILONW~b24 i{t }#stalled_ball_search_restores_motion72 250.0, 300"0stalled_for = BALL_SEARCH_DELAY - 1.0 / 120.0; [! T*z BallSearch)wM{" MAX_SPEED1.0 / 30.0, &mut Vec::new0`X#y >= 15.0 + TABLE_LINE_RADIUS - 0.0w,$(left, right) = game.flipper_segment%(left.start, leftALEFT_FLIPPER_PIVOT,3 .start, rightA+RIGHT_FLIPPER_PIVOT, RIGHT_FLIPPER_REST_TIP{(let (left, right) = game.flipper_segment%} left.end,Aright.end, RIGH!viP Some(2021)!vښapplies_one_swept_tangential<2(LEFT_FLIPPER_PIVOT +) * 0.5ѱpz0›1(velocity_after_edge.length() - FLIPPER_EDGE_KICK"velocity_after_edge.y < 0.( Some(2002)qUSome(201q Some(2019)qǠ Some(2020)q Some(2008)q8 Some(2015)qw Some(2016)qBallSear&C5.mpjLx  1G~xba<^ $ r 49..=0.5)X 8Wx|{// The ordinary rail registrations in `FUN_1000_34ab` use the recovered 0.1 // rebound coefficient. The previous 0.82 value made the shooter curve behave // like a rubber bumper and sent the ball back down the launch lane. const WALL_BOUNCE: f32 = 0.10; *9TZ#" WALL_BOUNCE),0geometry::{circle_collision, segment_collision};o8M5P'a_working_contact_surface_on_both_sides8~X for side in [-1.0, 1.0] { let outward = normal * side; 7?midpoint + outward * 0.5; let mut velocity = -outward * 430.0; let hit = segment_collision(&mut3 position, &mut velocity, 1.0, wall.segment); @+%its midpoint contact", wall.id); @09p=A dot(outward) >=?@p=Bject an inward trajectory";N<9@ 09p=#position.distance(midpoint) >= 0.99;B|A from its surface";N<9}>C&GxW1D܃$r~<k$2x4ǔpza ǭK-,_ʼn9nY Z\%orlx 4/E(;x<&L eJnC(l;%LҀT^@lxx=C5nR B6Cx)$H=d j9( 0Ux1XT-5r0  7!5 , xWL=Kk$dxx4ѫK"E$;V>\wDZ,HwIު)߲0Gx4/"probesi5Rx oșlŇ xhj6#xTR r!s%5%nb xp40000 .githubۯ^eDejr%1q100644 .gitignore/x6^Eo@40000 originalLwKށ_ö6`R40000 tdkpin-rs&U[+_yMu&,98xtarget/ Vdx4'RȔ!OR(,)aIG: /;G=7qPM3x84(8 a<  e original claw was not forced into a chosen terminal during the live session, so its claw parity evidence remains the decoded `1000:c79c`/`1000:eab1` control flow, millipixel/Real48 constants, sprite sheet, and deterministic Rust traces rather than a cl aimed live trajectory comparisoncj o_x$%YMzt5%U*Ȝ ݧ6#  x'TOgeV hr!s%5%W}#xWaH"MT)l{,fZ8k$ x4 #jubG.}?,{PQ6Gg x(! mMx _/,xp40000 .githubۯ^eDejr%1q100644 .gitignore/x6^Eo@40000 original&fEvwt{JG}>40000 tdkpin-rs?>wڎyAoY<8x4fHlLvršvs5*e&,{PQ6GC/xp(2 ,Validate the reconstructed sequences against 3s and captured frames from the original executabl ]){x K`{p=vj_ lx 0-k)'x{ #7P{+d٘ sxhm[Š6 gTycXx(?58ccx}ɦ"4[ o*x{i117} @Cx{\ M g<-* x7OmI䛨?wOxV y!UuTePSnj jx7Fn_ Ϋ L#jJ *B [ $U AG[ -^1.)if=~ , ) &&/mB). += vec2(20.0, -115.0 )P3if= && self>B). += vec2(-20.0, -115.0); 1)e>_*!u5$WíM@x{,J"́~fk 9 x5!M \IW9෢28@]Pc =Ҭ,HYx'or Enter starts one player}DixB"100644 app.rsNnu*aM+qH="4 y!UuTePSnjx/5x{saMg/n3M +xbATɍd@ΙVBYY0100644 RECONSTRUCTION.md7}8{+zE_wODӿVkax Qlq(l#x I*$l{x 0+k)x100644 app.rseY\=v5Z(100644 assets.rs mU)X~100644 game.rs9kW ~\* .Vd\`100644 geometry.rslsFܾ[xCZ h100644 main.rs 8u~ 100644 persistence.rsx;MsȲ~kLYS100644 table.rs(?58ccx}ɦ"4+k:Nxɱ YX px ]^ox1Gh1ǃaQFxW9{o=c2k$^$xLQ{ɗ |Gn+E]-{PQ6G%%x g "ecode the runtime/FPU conversion used to project the claw's raw 16.16 release coordinates and non-frame-18 velocity into play[field pixels. - Recover or differentially measure the timer cadence used for each claw fram four WXxRF:8 Fixed32WordsFixed32Words x; Fixed32$e 16.16V+ 1000:eab1. * These words are preserved until the original coordinate projection is * fully decoded; do not substitute guessed screen pixels hered,raw(raw_claw_release_position(claw->frame));? 8) { set_ball_velocity_raw(0, 1000); } else { set_ball_velocity_from_original_speed_scalar(); /* projection pending */ }"]E;Kx{驻R@$W,o!j x@zK6ڑˋcxB"100644 app.rs;E䷒zV"4xM*`'w2-jn\I&xdɱޘplayer_count: usizepplayer_count: 1  ^"" (player_count = self.player_count % 4 + 1!\3Down)AIself.player_count)(p)ylet id = match event { Event::Flipper => 2001, Event::Launch => 2016, Event::Bumper => 2002, Event::Target => 2006, Event::Wheel => 2004, Event::Robot => 2007, Event::Lock => 2017, Event::Media => 2022, Event::ExtraBall => 2019, Event::Nudge | Event::BallSearchX => 2021, Event::Tilt => 2015, Event::Drain => 2013, }; AT%| $ DOWN ARROW. TO START BALL", 475.5, 165.0, 18S.7&format!("PLAYERS: {} [+] CHANGE", self.player_count)."96.0, 16 X-/? if game.robot 2E'1.0 - game.robot_animation), 14.0, 10);?;>.319 <0I=9)?.3 90.0, 0.0, 9)?!9A=E J (4?2 [0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95] .partition_point(|threshold| game.launcher_charge >= *threshold);?;h8ԓ321.0, 0.0, 20.0, 170?98oS2n=H ==(===);?$%J>+xd9@,P:"!game.launcher_frame() as f32 * 21_R0_R20_R17_Rq;(,"Ssx:az8 1$Equa/$ 51)q0({if (o  () &&Pmu!.Game::add_player_before_launch) { #D  + TO START"."-j/PRESS + AGAIN TO ADD PLAYERS", 475.5, 165.0, 15,W7_at("THEN HOLD DOWN TO LAUNCH", 475.5, 196.0, 16, BLACK,/ 5lWHxG%if let Some(id) = event.sound_resourcI %<  IK8ksxX܄K 3 Qo D>roboti,I^WBFrobotk\ ) robot_animation = (self.robot)2+k/L!LA c@ E 270.0..=302Q 45.0..=105QQ@G 7_500..  -125.0, 6R+31.robot_animation = 1.0W!&[!tQ%robot_animation = 0.8W!S_=robotd%jdk&R>')vx{ #zi~xbATɍd@ΙVBYY0100644 RECONSTRUCTION.md7}8{+zE_w}qR_;tC|W)\&xB"100644 app.rsR~[Av~a%"4T %(6j TxL܄5RobotY  (.&& !old_flippers.left_raised) || (j&& !old_o ) ));G$.Robot);GH/z_Flipper)cxw~ 9vxp40000 .githubۯ^eDejr%1q100644 .gitignore/x6^Eo@40000 original"wd۵d40000 tdkpin-rsM/PT!cbfN0d;Qx"œ-{PQ6G*Sx K~R z$@ _q_ݩ Kx/0* BehavioralD robot grip@ ;x{>0xPHgxD9 Nx5فQEF\f^2rدd1tqѴ 9xZIf1Choose 1-4 players | `+` | `=` | | Start game / c6Enter starts a game3@<KxB"100644 app.rsoō9(3=,Xב"4bc|#OeqjP%x* q a .*BYe~x{F55OoTU] axZ>x5LI檂bǼ .*xB"100644 app.rs!^e߂'ŧI"4(~ţ.3Di 2#}B7j@._xSBy0.55 X(g").min(1.p;(lyB33Y\33a]֦$x{V5X!Xk 1zTdŽw ix?H0 a t3 2xB"100644 app.rsvq#9ye"4a:5^ȢAjx;S >%`M ]K)xN[!9left_flipper_angle: f32, pub right_flipper_angle: f32 ]k _angle: -2.72, ah _angle: -0.42.desired_left = if&-2.183-2.72 13let desired_right = if'-0.963-0.42 13let flipper_rate = 14.0 * frame_time; let old_left = self.left_flipper_angle; let old_right = self.right_flipper_angle; self.left_flipper_angle += (desired_left - self.left_flipper_angle).clamp(-flipper_rate, flipper_rate); self.right_flipper_angle += (desired_right - self.right_flipper_angle).clamp(-flipper_rate, flipper_rate);/((&old_left < -2.68) || (old_right > -0.46)l ))Ileft_flipper = flipper_segment(vec2(103.0, 397.0), self.left_flipper_angl :Mright_flipper = flipper_segment(vec2(210.0, 397.0), self.right_flipper_angle)a2*left_flipper_angle > -2.55,XE? *mh &+right_flipper_angle < -0.58,:+K ,!qP# angle: f3P(-pivot + vec2(angle.cos(), angle.sin()) * 49.0P-Dleft_flipper_angle = -2.18; game.right_flipper_angle = -0.96!FPggame.left_flipper_angle < -2.18aUright_flipper_angle > -0.96fa (Segment, Segment) { ( (= , (> , )3MY%S~UU'U3)Vb 0g~_Z%V=Z V98a#(W&Z0X (W W"Wz^Xp\mYCLnyxJK+:x7{gconst WALL_BOUNCE: f32 = 0.82;+-17} ;x{`m9RG'}:6 bxXU`<:sNϋ?FiČ rxB"100644 app.rsory2i9"4HGdȽ*r(W.jb0x9)p game = Some(8v) Mdown:* game.ball.in_launcher1[0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95] .partition_point(|threshold| game.launcher_charge >= *threshold?=plungerAE:406:@;mE>S<421.0, 18@A 1.0, 0.0, 20@(K7] x{tY|[ G:G0a ;xbAZW100644 RECONSTRUCTION.mdTẐ׫M<#Ȝԁ{(_wȤ;YnK:ڶ-Ti(s~x(}or launch ball | Down arrowV-ax*'{magnetJ:` x100644 app.rsd-f)؃?p9100644 assets.rs'%Ր x@Bh100644 game.rs<CK#9 100644 geometry.rslsFܾ[xCZ h100644 main.rs 8u~ 100644 persistence.rsx;MsȲ~kLYS100644 table.rs%[n,>ikOx2::magnet}magnet bool { if !|| A?falsePJ< 12.0, -330.0)&PtrueG*controls.launch_pressed && self.launch() {D Z )Y 26?^5 V [0BALL_RADIUS * 0.45BALL(!!8&&)"$Q"$U+#tBALL(!$%$%BALL_RADIUS + 2a% (z'BALL_RADIUS + 2a%+b (jBALL(!(**%v*SIfFSNlaunch_is_deterministicd*X8Z0e OIpressedKPH1QwXBALL<^P (-__P ()); } } 'н`x-gexfK% id, center, radius&.Rq8x|q-|SH4$qM fx5KW;` 'FُcXp._wAkZ׳d&FqasZ x7'&The active static line segment G-original sideways coordinates are transformedb478 - x)`. The lower apron is split around the visible center drain; moving flippers and round bum/ pKH x!100644 app.rsĒ OhyR100644 assets.rs'%Ր x@Bh100644 game.rs1Iyy -0.46)F&$J.if controls.launch_pressed && self.launch() { &0;0 &robot_animation = (self.robot^,2*B [ -^1@T 57.0, 426QT&^.C-.L0dt?*= 1.0 - dt * 0.055?18Y1+(dt; for wall in table_walls() {<BALL_=*wallJleft_flipper = flipper_segment(vec2(103.0, 394.0), self.left_flipper_angle); let right_flipper = flipper_segment(vec2(2311.0, 394.0), self.right_flipper_angle); if= =;=%BALL_RADIUS + 2.0, ^., ) && self.left_flipper_angle > -2.55q')`_vec2(-20.0, -115.0)10if= =;=%BALL_RADIUS + 2.0K> %) && self.right_flipper_angle < -0.58q')`_vec2(20.0, -115.Ji> MH m[vec2(207.0, 109.0), vec2(167.0, 148.0), vec2(219.0, 167.0)] .into_iter() .enumerate(F>( 7 =CBALL_=\?14qv??Hp%_V (@-p8_@7p8@'p8@@%A(/)OAjJ *B G 270.0..=302]S 45.0..=105]SS_V 7_500*.E -125.0, 60QTI30robot_animation = 1.0; &RobotJNS(robot_animation = 0.8; & Twf=robotj-(06kpub fn flipperl)Rn+vec2(103.0, 394.0), self.left_flipper_anglen>vec2(211.0, 394.0), self.right_flipper_angle), ) }q$ angle: f3(r(8pivot + vec2(angle.cos(), angle.sin()) * 49.0, 0.88) } *!fn table_walls() -> &'static [Segment] { static WALLS: LazyLock> = LazyLock::new(|| { vec![ s9Vec2::new(125.0, 21.0), Vec2::new(7.0, 61.0), 0.82), s8Vec2::new(300.0, 3.0), Vec2::new(10.0, 3.0), 0.82), s:Vec2::new(120.0, 6.0), Vec2::new(120.0, 26.0), 0.82), s:Vec2::new(195.0, 26.0), Vec2::new(195.0, 6.0), 0.82), s;Vec2::new(134.0, 33.0), Vec2::new(134.0, 16.0), 0.82), s;Vec2::new(148.0, 11.0), Vec2::new(148.0, 33.0), 0.82), s;Vec2::new(164.0, 12.0), Vec2::new(165.0, 33.0), 0.82), s;Vec2::new(180.0, 11.0), Vec2::new(179.0, 33.0), 0.82), s;Vec2::new(304.0, 64.0), Vec2::new(183.0, 21.0), 0.82), s=Vec2::new(298.0, 417.0), Vec2::new(298.0, 313.0), 0.82), s=Vec2::new(298.0, 336.0), Vec2::new(310.0, 336.0), 0.82), s=Vec2::new(292.0, 374.0), Vec2::new(291.0, 342.0), 0.82), s=Vec2::new(281.0, 378.0), Vec2::new(300.0, 369.0), 0.82), s=Vec2::new(275.0, 343.0), Vec2::new(290.0, 382.0), 0.82), s=Vec2::new(248.0, 364.0), Vec2::new(264.0, 339.0), 0.82), s=Vec2::new(257.0, 387.0), Vec2::new(249.0, 364.0), 0.82), s=Vec2::new(277.0, 429.0), Vec2::new(257.0, 387.0), 0.82), s=Vec2::new(287.0, 446.0), Vec2::new(277.0, 427.0), 0.82), s=Vec2::new(303.0, 430.0), Vec2::new(283.0, 436.0), 0.82), s=Vec2::new(320.0, 410.0), Vec2::new(302.0, 430.0), 0.82), s|x {Dleft_flipper_angle = -2.18; game.right_flipper_angle = -0.96[Oleft_flipper_angle < -2.181Oright_flipper_angle > -0.96X1I\O>| ()); } } aqjox >Ic!x{hn[n*;1:0[u d&Co<100644 persistence.rsx;MsȲ~kLYSˀ[H&x6H^ZI5.0, 448.0, 11IuH4J]222.0, [4i8/X^*"BONUS gK!(374.0, 258.0, 24`0"Kf11.0, 16?M let panel =M3X" &X36, 82, 137, 255) $oL&rectangle(472.0, y, 121.0, 30.0, panelC4(O 478.0, y + 21.0, 18ZbPU0#[YT;Q]x:5\ rK qx}>I18LOGICAL_WIDTH: i32 = 640; const LOGICAL_HEIGHT: i32 = 46xLOGICAL.LOGICALS#true, high_dpi: tru$'x{("IW ¨Y}d/H Kx5K;'(psT~O_wiYjjP.gg#.—Q9lx &%g!s x!100644 app.rsazn< SjugE100644 assets.rs -Xj /100644 game.rsbU:MQ)9)`]100644 geometry.rslsFܾ[xCZ h100644 main.rs>0[u d&Co<100644 persistence.rsx;MsȲ~kLYSUa%xV|1jM 5=} B06_;0TC:D+F'-F%4circle(game.ball.position.x, game.ball.position.y, 6Ew:Fx - 1F'1.0, 4.5, D/|:Fx - 2F'2.0, 1.5AM)FD.ILT", 160.0, 263.0, 30, REDp3H^ZI5.0, 448.0, 11IuH4J]222.0, [4i8/X^*"BONUS gK!(374.0, 258.0, 24`0"Kf11.0, 16?M let panel =M3X" &X36, 82, 137, 255) $oL&rectangle(472.0, y, 121.0, 30.0, panelC4(O 478.0, y + 21.0, 18ZbPU0#[YTd @b*, yAM:ch1hiZhx:)sz Jk xX5 I center@yP0 ~P04E24v=g1#x{u1A`^Ag0c hxq% > 1.15Q>("TILT", 263.0, 34, RED<oA>V\'"xN&dH:: f32ij: 0 ۓ : { -2.18 } else { -2.72x :{ -0.96 } else { -0.4280 { $N@ )wc+ `!   !$tiltxU$/ (tilt = (self.tilt - dt * 0.08).max(0.0);if &&~<= 0.0$) ԓ$/ [ r!9 9+} g0xp40000 .githubۯ^eDejr%1q100644 .gitignore/x6^Eo@40000 original"wd۵d40000 tdkpin-rs|/cp]鏌>j7x5KFJ"3ϜUYeq _w=&֠ 1EE8px5&%gA101M 101 segments are'*xB"100644 app.rs{&o:l?ybɑ"40Dn }&jtnax