diff --git a/.commandcode/patch-haven.json b/.commandcode/patch-haven.json new file mode 100644 index 0000000..226d027 --- /dev/null +++ b/.commandcode/patch-haven.json @@ -0,0 +1,5 @@ +{ + "performance": { + "forceCanvas": true + } +} diff --git a/.commandcode/patch-look-outside.json b/.commandcode/patch-look-outside.json new file mode 100644 index 0000000..226d027 --- /dev/null +++ b/.commandcode/patch-look-outside.json @@ -0,0 +1,5 @@ +{ + "performance": { + "forceCanvas": true + } +} diff --git a/.commandcode/taste/code-style/taste.md b/.commandcode/taste/code-style/taste.md new file mode 100644 index 0000000..64d5ecb --- /dev/null +++ b/.commandcode/taste/code-style/taste.md @@ -0,0 +1,10 @@ +# code-style +- Do NOT add emojis to the codebase. Use SVG icons instead. Confidence: 0.80 +- All UI views are programmatic Kotlin — no XML layouts. Keep this pattern for all UI work. Confidence: 0.70 +- Always include `Co-authored-by: CommandCodeBot ` in commit messages. Confidence: 0.85 +- Write commit messages with a clear root-cause → fix → rationale structure, including behavioural-change notes and the trade-offs considered. Confidence: 0.80 +- In Android WebView, `.wasm` asset requests fail silently over `file://` URLs in modern Chromium. Intercept `.wasm` requests in `shouldInterceptRequest` and serve the file directly with `application/wasm` MIME to bypass the broken `fetch()` path. Confidence: 0.80 +- Mirror page-side `console.log/error/warning` from `WebChromeClient.onConsoleMessage` to a project-specific logcat tag (e.g. `Runestone`) so game-side issues can be debugged without `chrome://inspect`. Confidence: 0.75 +- For Android WebView games requiring SharedArrayBuffer / cross-origin-isolation (e.g. Effekseer-based RPG Maker MZ games, shared-memory WASM): serve the game directory over `http://127.0.0.1:0/` (random local port) with `Cross-Origin-Opener-Policy: same-origin`, `Cross-Origin-Embedder-Policy: require-corp`, and `Cross-Origin-Resource-Policy: cross-origin` response headers. `file://` pages cannot be cross-origin-isolated in the system WebView. The `RunnerSettings.useHttpServer` flag controls this — default it to `true` for HTML/WebView engines. Confidence: 0.85 +- For local HTTP servers inside the app (used to serve WebView games), bind to `127.0.0.1` only (not `0.0.0.0`), serve exactly one configured root directory, and reject any URL containing `..` path segments. Listen on port `0` (random) so port collisions are impossible. Daemon threads are fine — the activity lifecycle stops the server in `onDestroy`. Confidence: 0.80 +- When a `shouldInterceptRequest` branch overrides a response served by another mechanism (e.g. the local HTTP server for the same game), skip the override for the local-server URLs so the proper response (with the right headers) is used. Confidence: 0.75 diff --git a/.commandcode/taste/taste.md b/.commandcode/taste/taste.md index ac75867..ff22c0b 100644 --- a/.commandcode/taste/taste.md +++ b/.commandcode/taste/taste.md @@ -3,11 +3,6 @@ [cmd]: https://commandcode.ai/ # workflow -- Do NOT commit changes unless explicitly asked. Make edits but leave them uncommitted. Confidence: 0.85 -- Do NOT modify files outside those specified in the task. Only edit the explicitly listed files. Confidence: 0.75 -- After making code changes, verify the build with: `./gradlew :app:compileDebugKotlin`. Confidence: 0.85 - +See [workflow/taste.md](workflow/taste.md) # code-style -- Do NOT add emojis to the codebase. Use SVG icons instead. Confidence: 0.80 -- All UI views are programmatic Kotlin — no XML layouts. Keep this pattern for all UI work. Confidence: 0.70 - +See [code-style/taste.md](code-style/taste.md) diff --git a/.commandcode/taste/workflow/taste.md b/.commandcode/taste/workflow/taste.md new file mode 100644 index 0000000..1c6ee96 --- /dev/null +++ b/.commandcode/taste/workflow/taste.md @@ -0,0 +1,13 @@ +# workflow +- Commit changes as you complete logical units of work (so changes can be rolled back). Only leave uncommitted when the user is still iterating on the current unit. Default to committing; the user prefers multiple rollback points over fewer larger commits. Confidence: 0.95 +- Do NOT modify files outside those specified in the task. Only edit the explicitly listed files. Confidence: 0.75 +- After making code changes, verify the build with: `./gradlew :app:compileDebugKotlin`. Confidence: 0.85 +- Enter plan mode for non-trivial design work so the user can review the plan before implementation begins. Confidence: 0.85 +- The user's phone for wireless ADB is at IP `192.168.100.28`. The port rotates per session — known/used values include 5555, 38775, and 46417 — always confirm the current port with the user or `adb devices` before running adb commands. Cache the IP:PORT in `.runestone/.last-adb-ip` after each successful connection. To keep the connection persistent across screen-off / device sleep, run `adb tcpip ` once after USB connect — adbd then listens on that port over Wi-Fi in addition to USB, so the wireless session survives display sleep (use `scripts/adb-connect.sh` for the full workflow). Confidence: 0.90 +- After code changes the user can test: build the debug APK and install it to the phone via wireless ADB, then provide (1) what to test, (2) expected outcome, and (3) troubleshooting guidance so the user can report back useful information if something fails. Confidence: 0.90 +- When the user indicates ADB/device connectivity is already available on their end, attempt to install, launch, logcat, and verify directly via `adb` rather than handing them shell commands. The user prefers the assistant to operate the device when the connection is reachable. Confidence: 0.75 +- When writing files into the app's private data dir via `adb shell run-as `, scoped storage blocks reading `/sdcard/`. Use stdin piping instead: `cat local.json | adb shell "run-as sh -c 'cat > /data/data//files/path/file.json'"`. Confidence: 0.75 +- For WebView/HTML game debugging on device, the canonical logcat stream is `adb logcat Runestone:V chromium:V '*:S'` (filtered to Runestone + chromium tags, silencing everything else). Use `-c` first to clear the buffer. Streaming will hold the shell — instruct the user to Ctrl+C when done. Confidence: 0.85 +- When investigating a non-obvious bug, document findings in a `known-issues.md`-style doc with sections per issue (Symptom / Root cause / Fix commit / Workaround) as you discover them, not in a single end-of-session pass. The user values this as a long-term debugging reference. Confidence: 0.80 +- In the Runestone app, tapping a game card does NOT launch the game directly — it opens a submenu with a "Play" and "Settings" button. The flow is: tap game card → tap the "Play" button in the submenu → game launches. The home screen layout is grid style (not a 3D carousel). When driving the app via `adb shell input tap`, do not assume a single tap on a game card starts the game; perform two sequential taps (card, then the "Play" button at the position shown in the `uiautomator` dump). Confidence: 0.85 +- When the user reports a bug and a working version/branch/orientation/config exists, default to porting the working version over reverse-engineering the broken one. The user prefers the simpler, direct reuse of known-good code over deep investigation, complex refactors, or adding debug instrumentation to trace a root cause. Apply this to layouts, code paths, configs, and any case where there is a clearly working reference. Confidence: 0.80 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..af084a3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +name: CI + +on: + push: + branches: [develop, master] + pull_request: + branches: [develop] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - uses: gradle/actions/setup-gradle@v4 + + - name: Decode keystore + run: | + if [ -n "$KEYSTORE_B64" ]; then + echo "$KEYSTORE_B64" | base64 -d > app/keystore.jks + fi + env: + KEYSTORE_B64: ${{ secrets.KEYSTORE_B64 || '' }} + + - name: Lint + run: ./gradlew :app:lintDebug + + - name: Unit tests + run: ./gradlew :app:testDebugUnitTest + + - name: Build debug APK + run: ./gradlew :app:assembleDebug + + - name: Build release APK + if: github.ref == 'refs/heads/master' + run: ./gradlew :app:assembleRelease + env: + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD || '' }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS || '' }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD || '' }} + + - name: Upload debug APK + uses: actions/upload-artifact@v4 + with: + name: runestone-debug + path: app/build/outputs/apk/debug/app-debug.apk + + - name: Upload release APK + if: github.ref == 'refs/heads/master' + uses: actions/upload-artifact@v4 + with: + name: runestone-release + path: app/build/outputs/apk/release/app-release.apk + + - name: Upload test report + if: failure() + uses: actions/upload-artifact@v4 + with: + name: test-report + path: app/build/reports/tests/ diff --git a/.runestone/.last-adb-ip b/.runestone/.last-adb-ip new file mode 100644 index 0000000..d07c97a --- /dev/null +++ b/.runestone/.last-adb-ip @@ -0,0 +1 @@ +192.168.100.28 diff --git a/AGENTS.md b/AGENTS.md index c56922f..87a91c2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,7 @@ holding all merged work since the v0.6.13 cycle. - `animTap()` en cada elemento táctil: scale bounce con OvershootInterpolator. - Sin dependencias externas pesadas — `org.json` para configs, sin Gson/Moshi. - Commit messages en inglés, descriptivos. +- **Language parity obligatorio.** Cada vez que se añada un texto visible en UI (títulos, botones, labels, diálogos, mensajes, hints, descripciones, notificaciones, tooltips), debe tener traducción en los 3 idiomas soportados: English, Español, Português. Usar `I18n.get(context, "key")` en lugar de strings hardcodeados. NO mergear código con strings sin traducir. ### Arquitectura de Motores diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..dd1169e --- /dev/null +++ b/TESTING.md @@ -0,0 +1,224 @@ +# Runestone v0.9 — Testing Checklist + +> Probar en dispositivo físico Android 14+ (arm64-v8a) + +--- + +## 1. First Launch (Onboarding) + +- [ ] App shows onboarding wizard on first launch (not home screen) +- [ ] Language selection works: English / Español / Português +- [ ] All 3 languages render correctly (no mojibake, no truncated text) +- [ ] Engine toggles enable/disable correctly (mkxp-z, easyrpg, onscripter, renpy, etc.) +- [ ] RAWG API key input accepts text, link opens browser +- [ ] "Install VX Ace RTP" toggle present +- [ ] "START PLAYING" button completes onboarding and transitions to home +- [ ] On second launch, onboarding is skipped (home screen appears directly) +- [ ] Chosen locale persists across app restarts + +## 2. Home Screen + +- [ ] Installed games appear as cards +- [ ] Empty state: "No games installed" message when no games present +- [ ] Search bar works with debounced filtering (300ms delay) +- [ ] Search clear button (X) resets filter +- [ ] Sort modes cycle correctly: Date Added → Name A-Z → Name Z-A → Recently Played +- [ ] Engine filter: tap to cycle through installed engine types +- [ ] Card layout toggle: 2-column → 3-column → Wide +- [ ] Long-press on card shows inspect overlay +- [ ] RESUME banner appears when a game is paused +- [ ] STOP button on RESUME banner kills the game session +- [ ] Dock bar buttons work: Home, Add, Browse, Manage, Settings + +## 3. Game Import (SAF) + +- [ ] Tap + on dock → opens folder browser +- [ ] Folder navigation works (drill in, go up, breadcrumbs) +- [ ] Import detection works for: + - [ ] RPG Maker MV (www/index.html + www/data/System.json) + - [ ] RPG Maker MZ (.rmmzproject) + - [ ] RPG Maker VX Ace (.rvproj2 or .rgss3a) + - [ ] RPG Maker VX (.rvproj or scripts.rvdata) + - [ ] RPG Maker XP (.rxproj or scripts.rxdata) + - [ ] EasyRPG 2000/2003 (RPG_RT.exe + .ldb/.lmt) + - [ ] ONScripter (0.txt or nscript.___) + - [ ] Ren'Py (game/ or renpy/ folder) + - [ ] TyranoBuilder (data.ks or first.ks) + - [ ] Flash/SWF (.swf file) +- [ ] Progress bar shows during import +- [ ] Import failure shows error message +- [ ] RTP download dialog appears when VX Ace game imported without RTP +- [ ] Game appears in home screen after successful import + +## 4. Game Launch + +- [ ] MV game launches in WebView +- [ ] MZ game launches in WebView +- [ ] VX Ace game launches via mkxp-z +- [ ] VX game launches via mkxp-z +- [ ] XP game launches via mkxp-z +- [ ] EasyRPG 2000/2003 game launches +- [ ] ONScripter game launches +- [ ] Ren'Py game launches +- [ ] TyranoBuilder game launches +- [ ] Flash/SWF game launches via Ruffle +- [ ] UNKNOWN engine shows "trying WebView" toast + +## 5. Runtime Controls (WebView games) + +- [ ] Touch overlay appears over WebView game +- [ ] D-pad works: UP/DOWN/LEFT/RIGHT +- [ ] A/B buttons trigger confirm/cancel +- [ ] Settings button (...) opens runtime menu +- [ ] Home button pauses game and returns to launcher +- [ ] Runtime menu: RESUME returns to game +- [ ] Runtime menu: HOME pauses and goes to launcher +- [ ] Runtime menu: CONTROLS ON/OFF toggles overlay +- [ ] Runtime menu: BASIC/FULL toggles controller preset +- [ ] Runtime menu: PORTRAIT/LANDSCAPE rotates layout +- [ ] Runtime menu: KEYBOARD opens virtual keyboard +- [ ] Layout rotation works (portrait console split, landscape 4:3) +- [ ] Control layout editor (EDIT) allows drag repositioning +- [ ] Control layout persists across game relaunches + +## 6. Controller Support + +- [ ] Physical gamepad: D-pad navigates home screen +- [ ] Button A = select, Button B = back +- [ ] START = import, SELECT = manage, X = store, Y = filter +- [ ] L1/R1 cycle card layout / sort +- [ ] MODE = settings +- [ ] Controller combo (L2+R2) resumes paused game +- [ ] Controller navigation auto-enables on first controller input + +## 7. Store / Catalogue + +- [ ] Browse button shows Available Games screen +- [ ] Default catalogue loads (bundled JSON) +- [ ] Game cards show title, engine badge, download button +- [ ] Download starts and shows progress +- [ ] Pause/Resume download works +- [ ] Download completes → extraction starts → game installed +- [ ] Installed badge appears on store cards +- [ ] Refresh button reloads catalogue +- [ ] Add Source: custom catalogue URL +- [ ] Manage Sources: remove sources +- [ ] Provider Settings: switch to public catalogue + +## 8. Manage Games + +- [ ] Manage screen shows all installed games with storage info +- [ ] Per-game settings: opens PerGameSettingsScreen +- [ ] Hero card cover: pick custom image +- [ ] Metadata: fetch from RAWG (with API key) +- [ ] Metadata: edit title, developer, publisher, genres, year, description +- [ ] Input section: layout mode, hide gamepad, diagonal, X/Y buttons, haptics +- [ ] Controller Profile section: preset selector, L1/R1, L2/R2 toggles +- [ ] Video section: FPS, VSync, integer/smooth scaling, brightness, contrast, gamma +- [ ] Audio section: mute toggles, volume sliders +- [ ] Performance section: threaded rendering, background loading, shadows, particles +- [ ] Fonts section: use game fonts, bold, italic, scale, line spacing +- [ ] Patch install: select ZIP file, applies patches with backup +- [ ] Delete game: Keep Saves / Delete Fully options +- [ ] View Saves: shows save file list +- [ ] Save Actions: sync, backup, restore, export ZIP, import ZIP, view backups + +## 9. Settings + +- [ ] DISPLAY section: layout mode, UI mode, smooth/integer scaling, text scale, keep screen on +- [ ] GAMEPAD section: hide gamepad, diagonal, haptics, button opacity/scale, mapping +- [ ] AUDIO section: audio extension, emulation +- [ ] RGSS section: dialog logs, ruby18, vsync, frame skip, shaders +- [ ] MV/MZ section: WebGL, canvas, HTTP server, desktop mode +- [ ] HTML section: renderer, quality, scale mode +- [ ] APPLICATION section: Theme toggle (Dark/Light/System) +- [ ] Color Palette: Amber, Emerald, Royal, Crimson, Ocean, Monochrome +- [ ] RAWG API Key input +- [ ] RUNTIME PACKAGES: RTP install button +- [ ] HELP & ABOUT section renders +- [ ] Settings persist across app restart + +## 10. Theme System + +- [ ] Default theme is Dark +- [ ] Toggle to Light theme in Settings → APPLICATION → Theme +- [ ] Light theme: backgrounds are light/white, text is dark +- [ ] Dark theme: backgrounds are near-black, text is light +- [ ] System mode follows device dark/light setting +- [ ] Theme change applies immediately (overlay rebuilds) +- [ ] All 9 screens use correct theme colors: + - [ ] HomeScreen + - [ ] SettingsScreen + - [ ] AvailableGamesScreen + - [ ] ManageFilesScreen + - [ ] SourcesScreen + - [ ] ProviderSettingsScreen + - [ ] GameFolderBrowserScreen + - [ ] GameDetailOverlay + - [ ] ImportProgressScreen + +## 11. i18n / Locale + +- [ ] English: all UI strings in English +- [ ] Español: all UI strings in Spanish +- [ ] Português: all UI strings in Portuguese +- [ ] Locale persists after app restart +- [ ] No hardcoded English strings visible when using ES/PT +- [ ] Special characters render correctly (ñ, ç, á, é, í, ó, ú, â, ê, ô, ã, õ) + +## 12. Cover Art + +- [ ] RAWG cover art appears when API key is set +- [ ] Fallback cover from game files: + - [ ] MV/MZ: www/img/titles1/*.png + - [ ] RGSS: Title.png in game root + - [ ] .rpgmvp decoded correctly +- [ ] Custom cover via per-game settings works +- [ ] Fallback thumbnail is scaled to max 480px + +## 13. Play Stats / Session Tracking + +- [ ] Play time increments while game is running +- [ ] Play time persists across app restarts +- [ ] Recently Played sort works +- [ ] RESUME banner shows for paused games +- [ ] STOP button on RESUME banner records play time + +## 14. RTP Installer + +- [ ] VX Ace RTP download triggers when importing a game that needs it +- [ ] Download progress shows percentage +- [ ] Extraction progress shows file count +- [ ] Installed RTP is detected on subsequent imports +- [ ] Innoextract JNI extracts .exe archive correctly + +## 15. Error Handling + +- [ ] Missing game directory shows toast and returns to home +- [ ] Import failure shows error and does not crash +- [ ] Download failure shows error notification +- [ ] Extraction failure shows error and cleans up temp files +- [ ] Unknown engine gracefully shows "trying WebView" +- [ ] Kill signal from STOP button terminates GameActivity +- [ ] Activity recreation (config change) doesn't crash + +## 16. Performance + +- [ ] Home screen scroll is smooth (no jank) +- [ ] Game list sorting/filtering is instant (<16ms) +- [ ] Import progress doesn't block UI +- [ ] Download doesn't block UI +- [ ] Splash screen dismisses within 500ms of game scan completion +- [ ] Play stats read doesn't trigger disk I/O (uses in-memory cache) +- [ ] Game size cache read doesn't trigger disk I/O +- [ ] No `runBlocking` on main thread (verify with StrictMode) + +## 17. Regression Tests + +- [ ] All existing game imports still work (MV, MZ, VX Ace, XP, EasyRPG, ONScripter, Ren'Py) +- [ ] Save/load still works in all engines +- [ ] Audio still works in all engines +- [ ] Controller still works in all engines +- [ ] RTP still works for VX Ace games +- [ ] Store downloads still work +- [ ] Patch system still applies patches diff --git a/VISION-ROADMAP.md b/VISION-ROADMAP.md index e91ce19..c2b4ce3 100644 --- a/VISION-ROADMAP.md +++ b/VISION-ROADMAP.md @@ -1,7 +1,7 @@ # Runestone — Vision & Roadmap -> **Updated:** 2026-06-12 -> **Version:** v0.8.2.2d (code 30) — 82 MB default APK, 13 working engines +> **Updated:** 2026-06-20 +> **Version:** v0.8.7 (code 35) — 82 MB default APK, 13 working engines > **Branch:** `develop` This document is the **current** view of the project. Superseded plans and @@ -9,7 +9,7 @@ historical snapshots live in `docs/archive/`. --- -## Current Status (v0.8.2.2d) +## Current Status (v0.8.7) | Area | Status | Where | |------|--------|-------| @@ -19,46 +19,50 @@ historical snapshots live in `docs/archive/`. | **MV / MZ (WebView)** | Working — PIXI fixes, audio fallback, keyboard | `engine/WebViewMvEngine.kt` / `WebViewMzEngine.kt` | | **TyranoBuilder, Construct, HTML, Twine, VN Maker** | Working — WebView | `engine/` | | **Flash (Ruffle)** | Working — ruffle.js CDN | `engine/RuffleEngine.kt` | -| **Ren'Py** | Detection + saves work; `librenpython.so` bundled; activity wrapper pending | `engine/RenpyEngine.kt` | -| **Godot** | Optional — `libgodot_android.so` in `optional-libs/godot/`; enable in Settings > Addons | `engine/GodotEngine.kt` | +| **Ren'Py** | Working — `librenpython.so` bundled, `PythonSDLActivity` wrapper | `engine/RenpyEngine.kt` | +| **Godot** | Optional — plugin APK proof of concept; `isPluginInstalled()` detection | `engine/GodotEngine.kt` + `godot-plugin/` | | **Virtual Controls** | D-pad + A/B/X/Y + L1/R1 + SELECT/START/SETTINGS | `input/TouchOverlayView.kt` | -| **Layout Modes** | Portrait / Landscape; runtime controls toggle in-game | `feat/phase-a..d-*` (merged) | -| **Runtime Menu** | Slide-out menu with controls / layout / pause / stop | `feat/phase-b-runtime-layout-menu` (in `fix/runtime-menu-native-layout-polish`) | -| **Control Profiles + Layout Editor** | Per-game profile storage + drag-edit | `feat/phase-c-control-profiles` + `feat/phase-d-control-layout-editor` | -| **Save Protection** | Auto-backup before reimport, auto-restore | `data/SaveManager.kt` | +| **Layout Modes** | Portrait / Landscape; runtime controls toggle in-game | Merged in `develop` | +| **Runtime Menu** | Slide-out menu with controls / layout / pause / stop | `runtime/WebViewGameSession.kt` | +| **Control Profiles + Layout Editor** | Per-game profile storage + drag-edit | `input/ControlProfileStore.kt` | +| **Save Protection** | Auto-backup before reimport, auto-restore | `workspace/SaveManager.kt` | | **Patch System** | Sparse in-place patches with per-file backups | `docs/SPARSE-PATCH-WORKSPACE.md` | | **RTP Installer** | Auto-detects VX Ace, downloads official RTP, extracts via `libinnoextract_jni.so` | `rtp/RtpInstaller.kt` | | **Game Store** | Static JSON catalogue (Pixeldrain + archive.org mirrors) | `provider/SourcesManager.kt` | | **Per-game Settings** | JSON-based layered config (game, input, video, audio, performance, cheats, fonts) | `data/PerGameConfig.kt` + `data/GameConfigService.kt` | -| **Search / Filter / Sort** | Glass overlay filter, text search, sort modes | `ui/HomeScreen.kt` | +| **Search / Filter / Sort** | Standalone search bar in sticky header + filter/sort overlay | `ui/HomeScreen.kt` | | **RESUME bar** | Glass banner with RESUME / STOP | `ui/HomeScreen.kt` | | **Glassmorphism UI** | Dock, filter overlay, stop dialog, card effects | `ui/` | | **Detail Panel** | Per-game metadata panel with engine info | `ui/HomeScreen.kt` | | **Adaptive Icon** | From user's `icon.png` | `mipmap-anydpi-v26/` | | **Visual Filters** | Post-processing chain (Phase 1, native lib) | `feature/visual-filters` (not yet on `develop`) | +| **MainActivity** | Refactored from 2489 to 664 lines. Delegates to `OverlayNavigationController`, `StoreCoordinator`, `ImportManager`, `GameSessionManager` | `navigation/`, `store/`, `importer/`, `session/` | +| **GameActivity** | Refactored from 1258 to 373 lines. Delegates to `WebViewGameSession`, `NativeGameLauncher`, `InputDispatcher` | `runtime/`, `engine/NativeGameLauncher.kt`, `input/` | +| **Coroutines** | Replaced all `Thread{}.start()` with `AppScope.io.launch` | `util/AppScope.kt` | +| **i18n** | English, Español, Português. `I18n.get()` helper + `attachBaseContext()` locale apply | `res/values{-es,-pt}/strings.xml`, `util/I18n.kt` | +| **Theme System** | `ThemeProvider` singleton, `ThemeColors` DARK/LIGHT, toggle in Settings | `ui/theme/` | +| **Hero Card Art** | RAWG API scrape + `CoverExtractor` fallback (Title.png, www/img/titles1/, .rpgmvp) | `services/GameMetadataService.kt`, `services/CoverExtractor.kt` | +| **Onboarding Wizard** | 4-step first-launch: language, engines, RAWG key, RTP | `ui/OnboardingScreen.kt` | +| **Plugin APK** | `godot-plugin` module with intent-filter; `isPluginInstalled()` detection | `godot-plugin/`, `engine/EngineRegistry.kt` | +| **Unit Tests** | 22 tests for EngineRegistry + WorkspaceManager + CoverExtractor | `app/src/test/` | +| **Language Parity Rule** | AGENTS.md mandates i18n for every new UI string | `AGENTS.md` | --- ## Active Branches (WIP) -These branches are not yet merged into `develop`. The integration branch -receives them after review and rebase. - | Branch | Purpose | Next Step | |--------|---------|-----------| | `feat/mkxpz-controller-overhaul` | Native RTP path resolution + visual filter pipeline in `libmkxp-z.so` | Awaiting integration into `develop` | -| `fix/runtime-menu-native-layout-polish` | v0.8.3 — innoextract JNI static NDK build + runtime menu polish + 12 new commits including phase-a..d | **Rebase onto develop before merge.** | +| `fix/runtime-menu-native-layout-polish` | v0.8.3 — innoextract JNI static NDK build + runtime menu polish | **Rebase onto develop before merge.** | | `feature/visual-filters` | Visual filter Phase 1 — data model, settings UI, native pipeline | Fast-forwardable; small change set | -Stale `feature/phase0..10-*` branches (1-commit pointers to old work) -remain in the local repo as historical artifacts. Their content is -already on `develop` via the merge chain; do not base new work on them. +Stale `feature/phase0..10-*` branches remain in the local repo as historical +artifacts. Their content is already on `develop` via the merge chain. --- -## Remaining Gaps (vs JoiPlay, 2026-06-12 view) - -### Shipped in v0.8.x +## Shipped in v0.8.x - mkxp-z native build (bundled, NDK r27) - ONScripter wrapper (full) @@ -74,43 +78,53 @@ already on `develop` via the merge chain; do not base new work on them. - Lazy controller navigation - Performance regression fix (fullscreen + home render) - Touch focus regression fix +- MainActivity refactor (2489 → 664 lines) +- GameActivity refactor (1258 → 373 lines) +- Coroutines migration (Thread → AppScope.io.launch) +- i18n: English, Español, Português with runtime locale switching +- ThemeProvider with DARK/LIGHT/SYSTEM modes +- Hero card art: RAWG API + CoverExtractor fallback +- Onboarding wizard (language, engines, RAWG key, RTP) +- Plugin APK proof of concept (`godot-plugin`) +- 22 unit tests (EngineRegistry, WorkspaceManager, CoverExtractor) + +--- -### Remaining (still WIP) - -- **Ren'Py wrapper** — needs `PythonActivity.java` + `renpy/common/` - engine files (~40 MB). Blocking the engine from launching. -- **Per-game settings UI in SettingsScreen** — `PerGameConfig` is stored - and applied, but the Settings screen does not yet let the user edit - per-game values. -- **Hero card art** — currently solid color per engine; needs scraped - artwork (IGDB / SteamGridDB or on-device game art extraction). -- **Carousel polish** — occasional scroll-snap glitch; 3D transitions - can stutter on very fast scrolls. -- **Standalone search bar** — text search lives inside the - filter/sort overlay; no persistent search bar on the home screen. +## Remaining Gaps + +- **Carousel polish** — occasional scroll-snap glitch; 3D transitions can + stutter on very fast scrolls. - **In-game settings overlay** — engine-level settings still require - the user to leave the game and re-enter; runtime menu covers layout - and pause, not yet per-engine. -- **Plugin APK architecture** — Runestone is still monolithic (82 MB); - splitting core vs engine plugin APKs is a v2.0 goal. + leaving the game; runtime menu covers layout and pause only. +- **Per-game controller profiles UI** — drag-to-edit exists but not wired + into settings flow. +- **Visual filter Phase 1** — exists on `feature/visual-filters` branch, + not yet merged to `develop`. --- ## Architecture To-Do -- [ ] **Ren'Py wrapper** — Port `PythonActivity.java` from - python-for-android + bundle `renpy/common/` engine files. -- [ ] **Godot wrapper** — Re-enable when wrapper ready. Maven dep - `org.godotengine:godot:4.6.3.stable`. Currently optional. -- [ ] **Plugin APK system** — Split into core (launcher UI) + engine - plugin APKs. +- [ ] **Room database** — Replace SharedPreferences (play stats, game + cache, settings) with SQLite via Room. +- [ ] **Jetpack Compose migration** — Progressive, starting with + SettingsScreen (~1400 lines of `addView`). +- [ ] **ViewModel + StateFlow** — Reactive state instead of + `runOnUiThread` + `refreshGames()`. +- [ ] **CI/CD** — GitHub Actions: lint → build → test → APK artifact. +- [ ] **Dependency Injection** — Hilt/Koin to stop instantiating + everything in `onCreate`. +- [ ] **Scoped storage** — Migrate from `filesDir/games/` to + `MediaStore` or persistent SAF for Android 14+. +- [ ] **Game save cloud backup** — Optional Google Drive / Dropbox API. +- [ ] **Home screen widget** — Shortcut to resume last played game. - [ ] **Font fallback system** — For non-Latin characters in WebView games. - [ ] **Visual filter Phases 2+** — Bloom, grain, DOF, chromatic - aberration, ambient occlusion. See `docs/design/` for the design - specs and `feature/visual-filters` for Phase 1. -- [ ] **Theme system** — `docs/design/light-theme-spec.md` describes the - planned model but is not yet implemented. + aberration, ambient occlusion. +- [ ] **Plugin APK system** — Split core (~15 MB) from engine plugin APKs. +- [ ] **Migrate screens to ThemeProvider** — Each screen still has + hardcoded `Color.rgb()` calls. --- @@ -118,29 +132,18 @@ already on `develop` via the merge chain; do not base new work on them. ### Windows (Wine) Support — *exploratorio* -- **Prioridad:** Baja (post-v1.0, post-Ren'Py wrapper) +- **Prioridad:** Baja (post-v1.0) - **Enfoque:** Modular — APK se queda ligero (~82MB). El runtime (Wine + - Box86/Box64 + DXVK) se descarga de GitHub Releases en el primer uso, igual - que el patrón de Godot en `optional-libs/`. + Box86/Box64 + DXVK) se descarga de GitHub Releases en el primer uso. - **Stack:** Wine (LGPL) + Box86/Box64 (MIT) + DXVK (LGPL) - **Activación:** Engine opcional en Settings > Addons → "Windows Runtime" - → download button - **Alcance:** No es competir con Winlator. Es para los pocos VNs/RPGs - nativos de Windows que no tienen port a Android ni engine open-source - equivalente. + nativos de Windows que no tienen port a Android. - **Referencia:** Winlator (brunodev85/winlator) como prueba de concepto. -### Plugin APK System (v2.0) - -- Dividir core (launcher UI, ~15MB) de engines (descargables por separado). -- Esto beneficia TANTO a Wine como a Godot, Ren'Py y cualquier engine - pesado. -- El core siempre es liviano. El usuario descarga solo lo que necesita. - ### Wolf RPG Editor Native Interpreter (post-v1.0 research) -- **Prioridad:** Baja hasta cerrar Ren'Py, store/install reliability, - controles, y plugin APKs. +- **Prioridad:** Baja hasta cerrar store/install reliability y plugin APKs. - **Objetivo:** Ejecutar juegos Wolf RPG Editor directamente desde `Data.wolf`/archivos del juego, sin Winlator/GameHub/Wine. - **Alcance tecnico:** Implementar o portar un runtime real: parser de diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f30339b..46c99a1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("org.jetbrains.kotlin.kapt") } android { @@ -56,4 +57,22 @@ dependencies { implementation("androidx.recyclerview:recyclerview:1.4.0") implementation("androidx.palette:palette:1.0.0") implementation("com.intuit.sdp:sdp-android:1.1.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0") + + // Room + implementation("androidx.room:room-runtime:2.7.0") + implementation("androidx.room:room-ktx:2.7.0") + kapt("androidx.room:room-compiler:2.7.0") + + // ViewModel + Lifecycle + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7") + implementation("androidx.activity:activity-ktx:1.9.3") + + testImplementation("junit:junit:4.13.2") + testImplementation("org.jetbrains.kotlin:kotlin-test:1.9.25") + testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0") + testImplementation("io.mockk:mockk:1.13.13") + testImplementation("org.robolectric:robolectric:4.14.1") + testImplementation("androidx.test:core:1.6.1") } diff --git a/app/src/main/assets/bootstrap.js b/app/src/main/assets/bootstrap.js deleted file mode 100644 index d7541f3..0000000 --- a/app/src/main/assets/bootstrap.js +++ /dev/null @@ -1,71 +0,0 @@ -// Runestone: Bootstrap loader for RPG Maker MV/MZ -// Detects WebGL and WebAudio support, then loads the game -(function() { - var RunestoneBootstrap = { - webglSupported: false, - webaudioSupported: false, - - detect: function() { - // WebGL detection - try { - var canvas = document.createElement('canvas'); - var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); - this.webglSupported = !!gl; - if (gl) { - var debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); - console.log('[Runestone] WebGL supported' + - (debugInfo ? ' (' + gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) + ')' : '')); - } - } catch(e) { - console.log('[Runestone] WebGL not available:', e.message); - } - - // WebAudio detection - try { - var ctx = new (window.AudioContext || window.webkitAudioContext)(); - this.webaudioSupported = !!ctx; - ctx.close(); - console.log('[Runestone] WebAudio supported'); - } catch(e) { - console.log('[Runestone] WebAudio not available:', e.message); - } - - return { - webgl: this.webglSupported, - webaudio: this.webaudioSupported - }; - }, - - boot: function(useWebgl, useWebaudio) { - var caps = this.detect(); - var actualWebgl = useWebgl !== false && caps.webgl; - var actualWebaudio = useWebaudio !== false && caps.webaudio; - - // Notify native side about capabilities - if (window.RunestoneBridge) { - window.RunestoneBridge.boot(actualWebgl, actualWebaudio); - } - - console.log('[Runestone] Booting with WebGL=' + actualWebgl + ' WebAudio=' + actualWebaudio); - - // If the game hasn't loaded yet, it will check for WebGL support - // via Modernizr or similar. We override the check here. - if (typeof Modernizr !== 'undefined') { - Modernizr.webgl = actualWebgl; - } - } - }; - - window.RunestoneBootstrap = RunestoneBootstrap; - - // Auto-detect and boot when DOM is ready - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', function() { - RunestoneBootstrap.boot(true, true); - }); - } else { - RunestoneBootstrap.boot(true, true); - } - - console.log('[Runestone] Bootstrap loaded'); -})(); diff --git a/app/src/main/assets/effekseer_asmjs.min.js b/app/src/main/assets/effekseer_asmjs.min.js new file mode 100644 index 0000000..10edd49 --- /dev/null +++ b/app/src/main/assets/effekseer_asmjs.min.js @@ -0,0 +1,182 @@ +/*! + * Effekseer for WebGL v1.70e + * https://github.com/effekseer/EffekseerForWebGL + * + * This software is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license + */ +var effekseer = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(effekseer) { + effekseer = effekseer || {}; + +var Module=typeof effekseer!=="undefined"?effekseer:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=Number(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){return func}var freeTableIndexes=[];var functionsInTableMap;function addFunctionWasm(func,sig){var table=wasmTable;if(!functionsInTableMap){functionsInTableMap=new WeakMap;for(var i=0;i=1296+0){abort("Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.")}ret.push(null)};ret.set=function(i,func){ret[i]=func};ret.get=function(i){return ret[i]};return ret},Module:function(binary){return{}},Instance:function(module,info){var exports=( +// EMSCRIPTEN_START_ASM +function a(asmLibraryArg,wasmMemory,wasmTable){var scratchBuffer=new ArrayBuffer(8);var b=new Int32Array(scratchBuffer);var c=new Float32Array(scratchBuffer);var d=new Float64Array(scratchBuffer);function e(index){return b[index]}function f(index,value){b[index]=value}function g(){return d[0]}function h(value){d[0]=value}function i(low,high){b[0]=low;b[1]=high}function j(){return c[0]}function k(value){c[0]=value}function l(global,env,buffer){var m=env.memory;var n=wasmTable;var o=new global.Int8Array(buffer);var p=new global.Int16Array(buffer);var q=new global.Int32Array(buffer);var r=new global.Uint8Array(buffer);var s=new global.Uint16Array(buffer);var t=new global.Uint32Array(buffer);var u=new global.Float32Array(buffer);var v=new global.Float64Array(buffer);var w=global.Math.imul;var x=global.Math.fround;var y=global.Math.abs;var z=global.Math.clz32;var A=global.Math.min;var B=global.Math.max;var C=global.Math.floor;var D=global.Math.ceil;var E=global.Math.sqrt;var F=env.abort;var G=global.NaN;var H=global.Infinity;var I=env.__cxa_allocate_exception;var J=env.__cxa_throw;var K=env.pthread_create;var L=env.roundf;var M=env.glGetString;var N=env.eglGetProcAddress;var O=env.glDeleteBuffers;var P=env.glCreateShader;var Q=env.glBindBuffer;var R=env.glGenBuffers;var S=env.glBufferData;var T=env.glBlendEquationSeparate;var U=env.glBlendFuncSeparate;var V=env.glBlendEquation;var W=env.glActiveTexture;var X=env.glUniform1i;var Y=env.glShaderSource;var Z=env.glCompileShader;var _=env.glGetShaderiv;var $=env.glCreateProgram;var aa=env.glAttachShader;var ba=env.glDeleteProgram;var ca=env.glDeleteShader;var da=env.glLinkProgram;var ea=env.glGetProgramiv;var fa=env.glGetAttribLocation;var ga=env.glGetUniformLocation;var ha=env.glUseProgram;var ia=env.glEnableVertexAttribArray;var ja=env.glDisableVertexAttribArray;var ka=env.glVertexAttribPointer;var la=env.glUniformMatrix4fv;var ma=env.glUniform4fv;var na=env.glGenerateMipmap;var oa=env.glBufferSubData;var pa=env.glGenFramebuffers;var qa=env.glBindFramebuffer;var ra=env.glDeleteFramebuffers;var sa=env.glFramebufferTexture2D;var ta=env.glGetIntegerv;var ua=env.glEnable;var va=env.glDisable;var wa=env.glDepthMask;var xa=env.glCullFace;var ya=env.glTexParameteri;var za=env.glIsEnabled;var Aa=env.glGetBooleanv;var Ba=env.glDepthFunc;var Ca=env.glBindTexture;var Da=env.glDrawElements;var Ea=env.glDeleteTextures;var Fa=env.glGenTextures;var Ga=env.glTexImage2D;var Ha=env.glCopyTexSubImage2D;var Ia=env.glViewport;var Ja=env.glClearColor;var Ka=env.glClear;var La=env.alListenerfv;var Ma=env.alGenBuffers;var Na=env.alBufferData;var Oa=env.alDeleteBuffers;var Pa=env.alSourcei;var Qa=env.alSourcef;var Ra=env.alSourcefv;var Sa=env.alSourcePlay;var Ta=env.alSourceStop;var Ua=env.alSourcePause;var Va=env.alGetSourcei;var Wa=env.alGenSources;var Xa=env.alDeleteSources;var Ya=env.alcOpenDevice;var Za=env.alcCreateContext;var _a=env.alcMakeContextCurrent;var $a=env.__sys_open;var ab=env.fd_close;var bb=env.__sys_fcntl64;var cb=env.__sys_ioctl;var db=env.fd_write;var eb=env.fd_read;var fb=env.clock_gettime;var gb=env.abort;var hb=env.environ_sizes_get;var ib=env.environ_get;var jb=env.__map_file;var kb=env.__sys_munmap;var lb=env.strftime_l;var mb=env.pthread_mutexattr_init;var nb=env.pthread_mutexattr_settype;var ob=env.pthread_mutexattr_destroy;var pb=env.pthread_join;var qb=env.emscripten_resize_heap;var rb=env.emscripten_memcpy_big;var sb=env.emscripten_glGenQueriesEXT;var tb=env.emscripten_glDeleteQueriesEXT;var ub=env.emscripten_glIsQueryEXT;var vb=env.emscripten_glBeginQueryEXT;var wb=env.emscripten_glEndQueryEXT;var xb=env.emscripten_glQueryCounterEXT;var yb=env.emscripten_glGetQueryivEXT;var zb=env.emscripten_glGetQueryObjectivEXT;var Ab=env.emscripten_glGetQueryObjectuivEXT;var Bb=env.emscripten_glGetQueryObjecti64vEXT;var Cb=env.emscripten_glGetQueryObjectui64vEXT;var Db=env.emscripten_glBindVertexArrayOES;var Eb=env.emscripten_glDeleteVertexArraysOES;var Fb=env.emscripten_glGenVertexArraysOES;var Gb=env.emscripten_glIsVertexArrayOES;var Hb=env.emscripten_glDrawBuffersWEBGL;var Ib=env.emscripten_glDrawArraysInstancedANGLE;var Jb=env.emscripten_glDrawElementsInstancedANGLE;var Kb=env.emscripten_glVertexAttribDivisorANGLE;var Lb=env.emscripten_glActiveTexture;var Mb=env.emscripten_glAttachShader;var Nb=env.emscripten_glBindAttribLocation;var Ob=env.emscripten_glBindBuffer;var Pb=env.emscripten_glBindFramebuffer;var Qb=env.emscripten_glBindRenderbuffer;var Rb=env.emscripten_glBindTexture;var Sb=env.emscripten_glBlendColor;var Tb=env.emscripten_glBlendEquation;var Ub=env.emscripten_glBlendEquationSeparate;var Vb=env.emscripten_glBlendFunc;var Wb=env.emscripten_glBlendFuncSeparate;var Xb=env.emscripten_glBufferData;var Yb=env.emscripten_glBufferSubData;var Zb=env.emscripten_glCheckFramebufferStatus;var _b=env.emscripten_glClear;var $b=env.emscripten_glClearColor;var ac=env.emscripten_glClearDepthf;var bc=env.emscripten_glClearStencil;var cc=env.emscripten_glColorMask;var dc=env.emscripten_glCompileShader;var ec=env.emscripten_glCompressedTexImage2D;var fc=env.emscripten_glCompressedTexSubImage2D;var gc=env.emscripten_glCopyTexImage2D;var hc=env.emscripten_glCopyTexSubImage2D;var ic=env.emscripten_glCreateProgram;var jc=env.emscripten_glCreateShader;var kc=env.emscripten_glCullFace;var lc=env.emscripten_glDeleteBuffers;var mc=env.emscripten_glDeleteFramebuffers;var nc=env.emscripten_glDeleteProgram;var oc=env.emscripten_glDeleteRenderbuffers;var pc=env.emscripten_glDeleteShader;var qc=env.emscripten_glDeleteTextures;var rc=env.emscripten_glDepthFunc;var sc=env.emscripten_glDepthMask;var tc=env.emscripten_glDepthRangef;var uc=env.emscripten_glDetachShader;var vc=env.emscripten_glDisable;var wc=env.emscripten_glDisableVertexAttribArray;var xc=env.emscripten_glDrawArrays;var yc=env.emscripten_glDrawElements;var zc=env.emscripten_glEnable;var Ac=env.emscripten_glEnableVertexAttribArray;var Bc=env.emscripten_glFinish;var Cc=env.emscripten_glFlush;var Dc=env.emscripten_glFramebufferRenderbuffer;var Ec=env.emscripten_glFramebufferTexture2D;var Fc=env.emscripten_glFrontFace;var Gc=env.emscripten_glGenBuffers;var Hc=env.emscripten_glGenerateMipmap;var Ic=env.emscripten_glGenFramebuffers;var Jc=env.emscripten_glGenRenderbuffers;var Kc=env.emscripten_glGenTextures;var Lc=env.emscripten_glGetActiveAttrib;var Mc=env.emscripten_glGetActiveUniform;var Nc=env.emscripten_glGetAttachedShaders;var Oc=env.emscripten_glGetAttribLocation;var Pc=env.emscripten_glGetBooleanv;var Qc=env.emscripten_glGetBufferParameteriv;var Rc=env.emscripten_glGetError;var Sc=env.emscripten_glGetFloatv;var Tc=env.emscripten_glGetFramebufferAttachmentParameteriv;var Uc=env.emscripten_glGetIntegerv;var Vc=env.emscripten_glGetProgramiv;var Wc=env.emscripten_glGetProgramInfoLog;var Xc=env.emscripten_glGetRenderbufferParameteriv;var Yc=env.emscripten_glGetShaderiv;var Zc=env.emscripten_glGetShaderInfoLog;var _c=env.emscripten_glGetShaderPrecisionFormat;var $c=env.emscripten_glGetShaderSource;var ad=env.emscripten_glGetString;var bd=env.emscripten_glGetTexParameterfv;var cd=env.emscripten_glGetTexParameteriv;var dd=env.emscripten_glGetUniformfv;var ed=env.emscripten_glGetUniformiv;var fd=env.emscripten_glGetUniformLocation;var gd=env.emscripten_glGetVertexAttribfv;var hd=env.emscripten_glGetVertexAttribiv;var id=env.emscripten_glGetVertexAttribPointerv;var jd=env.emscripten_glHint;var kd=env.emscripten_glIsBuffer;var ld=env.emscripten_glIsEnabled;var md=env.emscripten_glIsFramebuffer;var nd=env.emscripten_glIsProgram;var od=env.emscripten_glIsRenderbuffer;var pd=env.emscripten_glIsShader;var qd=env.emscripten_glIsTexture;var rd=env.emscripten_glLineWidth;var sd=env.emscripten_glLinkProgram;var td=env.emscripten_glPixelStorei;var ud=env.emscripten_glPolygonOffset;var vd=env.emscripten_glReadPixels;var wd=env.emscripten_glReleaseShaderCompiler;var xd=env.emscripten_glRenderbufferStorage;var yd=env.emscripten_glSampleCoverage;var zd=env.emscripten_glScissor;var Ad=env.emscripten_glShaderBinary;var Bd=env.emscripten_glShaderSource;var Cd=env.emscripten_glStencilFunc;var Dd=env.emscripten_glStencilFuncSeparate;var Ed=env.emscripten_glStencilMask;var Fd=env.emscripten_glStencilMaskSeparate;var Gd=env.emscripten_glStencilOp;var Hd=env.emscripten_glStencilOpSeparate;var Id=env.emscripten_glTexImage2D;var Jd=env.emscripten_glTexParameterf;var Kd=env.emscripten_glTexParameterfv;var Ld=env.emscripten_glTexParameteri;var Md=env.emscripten_glTexParameteriv;var Nd=env.emscripten_glTexSubImage2D;var Od=env.emscripten_glUniform1f;var Pd=env.emscripten_glUniform1fv;var Qd=env.emscripten_glUniform1i;var Rd=env.emscripten_glUniform1iv;var Sd=env.emscripten_glUniform2f;var Td=env.emscripten_glUniform2fv;var Ud=env.emscripten_glUniform2i;var Vd=env.emscripten_glUniform2iv;var Wd=env.emscripten_glUniform3f;var Xd=env.emscripten_glUniform3fv;var Yd=env.emscripten_glUniform3i;var Zd=env.emscripten_glUniform3iv;var _d=env.emscripten_glUniform4f;var $d=env.emscripten_glUniform4fv;var ae=env.emscripten_glUniform4i;var be=env.emscripten_glUniform4iv;var ce=env.emscripten_glUniformMatrix2fv;var de=env.emscripten_glUniformMatrix3fv;var ee=env.emscripten_glUniformMatrix4fv;var fe=env.emscripten_glUseProgram;var ge=env.emscripten_glValidateProgram;var he=env.emscripten_glVertexAttrib1f;var ie=env.emscripten_glVertexAttrib1fv;var je=env.emscripten_glVertexAttrib2f;var ke=env.emscripten_glVertexAttrib2fv;var le=env.emscripten_glVertexAttrib3f;var me=env.emscripten_glVertexAttrib3fv;var ne=env.emscripten_glVertexAttrib4f;var oe=env.emscripten_glVertexAttrib4fv;var pe=env.emscripten_glVertexAttribPointer;var qe=env.emscripten_glViewport;var re=env.setTempRet0;var se=env.fd_seek;var te=env.emscripten_asm_const_iii;var ue=5615824;var ve=372944;var we=0; +// EMSCRIPTEN_START_FUNCS +function _t(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0;g=ue-1296|0;ue=g;q[b+4>>2]=0;o[b+1|0]=0;o[b|0]=0;E=n[q[q[c>>2]+28>>2]](c)|0;q[a+16>>2]=0;q[a+20>>2]=0;G=a+8|0;h=G;q[h>>2]=0;q[h+4>>2]=0;q[a>>2]=0;q[a+4>>2]=0;J=E&(d&-2)==2;t=a+12|0;B=d&-3;K=(B|0)!=0;E=g+1196|0;H=g+1216|0;D=g+1160|4;a:{while(1){q[g+1216>>2]=26316;q[g+1160>>2]=26296;CI(H,D);q[g+1288>>2]=0;q[g+1292>>2]=-1;q[g+1216>>2]=26260;q[g+1160>>2]=26240;L=dH(D);q[g+1164>>2]=8052;h=E;q[h+8>>2]=0;q[h+12>>2]=0;q[h>>2]=0;q[h+4>>2]=0;q[g+1212>>2]=16;A=i;I=!B;Yt(g+1160|0,c,i,I);i=nI(Ft(g+1160|0,24318,25),10);EH(g+1144|0,q[q[i>>2]+ -12>>2]+i|0);h=pL(g+1144|0,370576);h=n[q[q[h>>2]+28>>2]](h,10)|0;kL(g+1144|0);pI(i,h);DH(i);j=n[q[q[c>>2]+104>>2]](c)|0;i=0;h=n[q[q[c>>2]+80>>2]](c)|0;y=(h|0)<(f|0)?h:f;if((y|0)>0){while(1){Xt(b,g+1160|0,n[q[q[c>>2]+72>>2]](c,i)|0,i,A);i=i+1|0;if((y|0)!=(i|0)){continue}break}}Xt(b,g+1160|0,24383,y,A);Xt(b,g+1160|0,24398,y+1|0,A);b:{c:{if(A){Ft(g+1160|0,15984,165);C=0;h=0;if((A|0)!=1){break b}break c}d:{if(!B){if(n[q[q[c>>2]+20>>2]](c)){Ft(g+1160|0,15280,144);break d}Ft(g+1160|0,15440,144);break d}Ft(g+1160|0,15600,375)}C=1;h=0;break b}Wt(g+1160|0,4,24534);Wt(g+1160|0,4,24549);Wt(g+1160|0,4,24560);h=1}e:{if(!(!h|n[q[q[c>>2]+12>>2]](c))){l=Ft(g+1160|0,24578,24);EH(g+1144|0,q[q[l>>2]+ -12>>2]+l|0);i=pL(g+1144|0,370576);i=n[q[q[i>>2]+28>>2]](i,10)|0;kL(g+1144|0);pI(l,i);DH(l);break e}n[q[q[c>>2]+12>>2]](c)|0}i=(j|0)<(e|0);if((h&J)==1){Wt(g+1160|0,16,24603)}i=i?j:e;f:{if((C&K)!=1){break f}if((n[q[q[c>>2]+112>>2]](c)|0)>=1){j=Ft(g+1160|0,24613,120);EH(g+1144|0,q[q[j>>2]+ -12>>2]+j|0);h=pL(g+1144|0,370576);h=n[q[q[h>>2]+28>>2]](h,10)|0;kL(g+1144|0);pI(j,h);DH(j)}if((n[q[q[c>>2]+120>>2]](c)|0)<1){break f}j=Ft(g+1160|0,24734,120);EH(g+1144|0,q[q[j>>2]+ -12>>2]+j|0);h=pL(g+1144|0,370576);h=n[q[q[h>>2]+28>>2]](h,10)|0;kL(g+1144|0);pI(j,h);DH(j)}m=0;if((i|0)>0){while(1){Wt(g+1160|0,4,n[q[q[c>>2]+96>>2]](c,m)|0);m=m+1|0;if((i|0)!=(m|0)){continue}break}}if((i|0)<(n[q[q[c>>2]+104>>2]](c)|0)){while(1){j=n[q[q[c>>2]+96>>2]](c,i)|0;h=Ft(g+1160|0,24855,6);q[g+1152>>2]=0;q[g+1144>>2]=0;q[g+1148>>2]=0;o[g+1155|0]=4;o[g+1148|0]=0;q[g+1144>>2]=878929270;j=Ft(Ft(Ft(Ft(h,g+1144|0,4),13403,1),j,sV(j)),24862,16);EH(g+1128|0,q[q[j>>2]+ -12>>2]+j|0);h=pL(g+1128|0,370576);h=n[q[q[h>>2]+28>>2]](h,10)|0;kL(g+1128|0);pI(j,h);DH(j);if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}i=i+1|0;if((i|0)<(n[q[q[c>>2]+104>>2]](c)|0)){continue}break}}x=0;i=q[c+68>>2];if((i|0)!=q[c+72>>2]){while(1){k=0;g:{while(1){q[g+1136>>2]=0;q[g+1128>>2]=0;q[g+1132>>2]=0;l=w(x,244)+i|0;h=o[l+11|0];h:{if((h|0)<=-1){i=q[l+4>>2];l=q[l>>2];break h}i=h&255}h=i+1|0;if(h>>>0<4294967280){i:{j:{if(h>>>0>=11){h=i+17&-16;m=_S(h);q[g+1136>>2]=h|-2147483648;q[g+1128>>2]=m;q[g+1132>>2]=i;break j}o[g+1139|0]=i;m=g+1128|0;if(!i){break i}}kV(m,l,i)}o[i+m|0]=0;yT(g+1128|0,24879,1);RT(g+1112|0,k);i=r[g+1123|0];h=i<<24>>24<0;h=yT(g+1128|0,h?q[g+1112>>2]:g+1112|0,h?q[g+1116>>2]:i);j=h+8|0;q[g+1152>>2]=q[j>>2];i=q[h+4>>2];q[g+1144>>2]=q[h>>2];q[g+1148>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;Wt(g+1160|0,4,o[g+1155|0]<0?q[g+1144>>2]:g+1144|0);if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}k=k+1|0;if((k|0)==13){break g}i=q[c+68>>2];continue}break}break a}x=x+1|0;i=q[c+68>>2];if(x>>>0<(q[c+72>>2]-i|0)/244>>>0){continue}break}}k:{l:{i=q[c+92>>2];h=q[c+96>>2];if((i|0)==(h|0)){break l}while(1){if(q[i>>2]==2){break l}i=i+4|0;if((h|0)!=(i|0)){continue}break}break k}if((h|0)==(i|0)){break k}if(C){Ft(g+1160|0,25904,150);break k}Ft(g+1160|0,26055,170)}i=Ft(g+1160|0,12503,sV(12503));EH(g+1144|0,q[q[i>>2]+ -12>>2]+i|0);h=pL(g+1144|0,370576);h=n[q[q[h>>2]+28>>2]](h,10)|0;kL(g+1144|0);pI(i,h);DH(i);i=n[q[q[c>>2]+36>>2]](c)|0;u=g+1152|0;q[u>>2]=0;q[g+1144>>2]=0;q[g+1148>>2]=0;m:{j=sV(i);if(j>>>0<4294967280){n:{o:{if(j>>>0>=11){h=j+16&-16;m=_S(h);q[g+1152>>2]=h|-2147483648;q[g+1144>>2]=m;q[g+1148>>2]=j;break o}o[g+1155|0]=j;m=g+1144|0;if(!j){break n}}kV(m,i,j)}o[j+m|0]=0;h=mT(g+1096|0,g+1144|0);q[g+1088>>2]=0;q[g+1072>>2]=0;q[g+1080>>2]=0;q[g+1084>>2]=0;q[g+1064>>2]=0;q[g+1068>>2]=0;o[g+1091|0]=4;o[g+1084|0]=0;q[g+1080>>2]=607208996;o[g+1069|0]=0;o[g+1068|0]=r[13382];q[g+1064>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+1075|0]=5;Vt(g+1128|0,h,g+1080|0,g+1064|0);p:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break p}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break p}_U(q[g+1144>>2]);q[g+1152>>2]=0}s=g+1136|0;q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+1075|0]<=-1){_U(q[g+1064>>2])}if(o[g+1107|0]<=-1){_U(q[g+1096>>2])}h=mT(g+1048|0,g+1144|0);q[g+1040>>2]=0;q[g+1024>>2]=0;q[g+1032>>2]=0;q[g+1036>>2]=0;q[g+1016>>2]=0;q[g+1020>>2]=0;o[g+1043|0]=4;o[g+1036|0]=0;q[g+1032>>2]=607274532;q[g+1016>>2]=845374838;o[g+1020|0]=0;o[g+1027|0]=4;Vt(g+1128|0,h,g+1032|0,g+1016|0);q:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break q}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break q}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+1027|0]<=-1){_U(q[g+1016>>2])}if(o[g+1059|0]<=-1){_U(q[g+1048>>2])}h=mT(g+1e3|0,g+1144|0);q[g+992>>2]=0;q[g+976>>2]=0;q[g+984>>2]=0;q[g+988>>2]=0;q[g+968>>2]=0;q[g+972>>2]=0;o[g+995|0]=4;o[g+988|0]=0;q[g+984>>2]=607340068;q[g+968>>2]=862152054;o[g+972|0]=0;o[g+979|0]=4;Vt(g+1128|0,h,g+984|0,g+968|0);r:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break r}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break r}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+979|0]<=-1){_U(q[g+968>>2])}if(o[g+1011|0]<=-1){_U(q[g+1e3>>2])}h=mT(g+952|0,g+1144|0);q[g+944>>2]=0;q[g+928>>2]=0;q[g+936>>2]=0;q[g+940>>2]=0;q[g+920>>2]=0;q[g+924>>2]=0;o[g+947|0]=4;o[g+940|0]=0;q[g+936>>2]=607405604;q[g+920>>2]=878929270;o[g+924|0]=0;o[g+931|0]=4;Vt(g+1128|0,h,g+936|0,g+920|0);s:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break s}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break s}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+931|0]<=-1){_U(q[g+920>>2])}if(o[g+963|0]<=-1){_U(q[g+952>>2])}h=mT(g+904|0,g+1144|0);q[g+896>>2]=0;q[g+888>>2]=0;q[g+892>>2]=0;o[g+899|0]=6;q[g+888>>2]=r[24884]|r[24885]<<8|(r[24886]<<16|r[24887]<<24);p[g+892>>1]=r[24888]|r[24889]<<8;o[g+894|0]=0;l=_S(32);q[g+872>>2]=l;q[g+876>>2]=20;q[g+880>>2]=-2147483616;o[l+20|0]=0;i=r[24907]|r[24908]<<8|(r[24909]<<16|r[24910]<<24);o[l+16|0]=i;o[l+17|0]=i>>>8;o[l+18|0]=i>>>16;o[l+19|0]=i>>>24;j=r[24903]|r[24904]<<8|(r[24905]<<16|r[24906]<<24);i=r[24899]|r[24900]<<8|(r[24901]<<16|r[24902]<<24);o[l+8|0]=i;o[l+9|0]=i>>>8;o[l+10|0]=i>>>16;o[l+11|0]=i>>>24;o[l+12|0]=j;o[l+13|0]=j>>>8;o[l+14|0]=j>>>16;o[l+15|0]=j>>>24;j=r[24895]|r[24896]<<8|(r[24897]<<16|r[24898]<<24);i=r[24891]|r[24892]<<8|(r[24893]<<16|r[24894]<<24);o[l|0]=i;o[l+1|0]=i>>>8;o[l+2|0]=i>>>16;o[l+3|0]=i>>>24;o[l+4|0]=j;o[l+5|0]=j>>>8;o[l+6|0]=j>>>16;o[l+7|0]=j>>>24;Vt(g+1128|0,h,g+888|0,g+872|0);t:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break t}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break t}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+883|0]<=-1){_U(q[g+872>>2])}if(o[g+915|0]<=-1){_U(q[g+904>>2])}j=mT(g+856|0,g+1144|0);h=_S(16);q[g+840>>2]=h;q[g+844>>2]=13;q[g+848>>2]=-2147483632;o[h+13|0]=0;k=r[24921]|r[24922]<<8|(r[24923]<<16|r[24924]<<24);l=r[24917]|r[24918]<<8|(r[24919]<<16|r[24920]<<24);o[h+5|0]=l;o[h+6|0]=l>>>8;o[h+7|0]=l>>>16;o[h+8|0]=l>>>24;o[h+9|0]=k;o[h+10|0]=k>>>8;o[h+11|0]=k>>>16;o[h+12|0]=k>>>24;k=r[24916]|r[24917]<<8|(r[24918]<<16|r[24919]<<24);l=r[24912]|r[24913]<<8|(r[24914]<<16|r[24915]<<24);o[h|0]=l;o[h+1|0]=l>>>8;o[h+2|0]=l>>>16;o[h+3|0]=l>>>24;o[h+4|0]=k;o[h+5|0]=k>>>8;o[h+6|0]=k>>>16;o[h+7|0]=k>>>24;k=_S(32);q[g+824>>2]=k;q[g+828>>2]=20;q[g+832>>2]=-2147483616;o[k+20|0]=0;i=r[24942]|r[24943]<<8|(r[24944]<<16|r[24945]<<24);o[k+16|0]=i;o[k+17|0]=i>>>8;o[k+18|0]=i>>>16;o[k+19|0]=i>>>24;l=r[24938]|r[24939]<<8|(r[24940]<<16|r[24941]<<24);i=r[24934]|r[24935]<<8|(r[24936]<<16|r[24937]<<24);o[k+8|0]=i;o[k+9|0]=i>>>8;o[k+10|0]=i>>>16;o[k+11|0]=i>>>24;o[k+12|0]=l;o[k+13|0]=l>>>8;o[k+14|0]=l>>>16;o[k+15|0]=l>>>24;l=r[24930]|r[24931]<<8|(r[24932]<<16|r[24933]<<24);i=r[24926]|r[24927]<<8|(r[24928]<<16|r[24929]<<24);o[k|0]=i;o[k+1|0]=i>>>8;o[k+2|0]=i>>>16;o[k+3|0]=i>>>24;o[k+4|0]=l;o[k+5|0]=l>>>8;o[k+6|0]=l>>>16;o[k+7|0]=l>>>24;Vt(g+1128|0,j,g+840|0,g+824|0);u:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break u}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break u}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;i=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=i;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+835|0]<=-1){_U(q[g+824>>2])}_U(h);if(o[g+867|0]<=-1){_U(q[g+856>>2])}h=mT(g+808|0,g+1144|0);l=_S(16);q[g+792>>2]=l;q[g+796>>2]=11;q[g+800>>2]=-2147483632;o[l+11|0]=0;i=r[24954]|r[24955]<<8|(r[24956]<<16|r[24957]<<24);o[l+7|0]=i;o[l+8|0]=i>>>8;o[l+9|0]=i>>>16;o[l+10|0]=i>>>24;j=r[24951]|r[24952]<<8|(r[24953]<<16|r[24954]<<24);i=r[24947]|r[24948]<<8|(r[24949]<<16|r[24950]<<24);o[l|0]=i;o[l+1|0]=i>>>8;o[l+2|0]=i>>>16;o[l+3|0]=i>>>24;o[l+4|0]=j;o[l+5|0]=j>>>8;o[l+6|0]=j>>>16;o[l+7|0]=j>>>24;k=_S(32);q[g+776>>2]=k;q[g+780>>2]=20;q[g+784>>2]=-2147483616;o[k+20|0]=0;i=r[24975]|r[24976]<<8|(r[24977]<<16|r[24978]<<24);o[k+16|0]=i;o[k+17|0]=i>>>8;o[k+18|0]=i>>>16;o[k+19|0]=i>>>24;j=r[24971]|r[24972]<<8|(r[24973]<<16|r[24974]<<24);i=r[24967]|r[24968]<<8|(r[24969]<<16|r[24970]<<24);o[k+8|0]=i;o[k+9|0]=i>>>8;o[k+10|0]=i>>>16;o[k+11|0]=i>>>24;o[k+12|0]=j;o[k+13|0]=j>>>8;o[k+14|0]=j>>>16;o[k+15|0]=j>>>24;j=r[24963]|r[24964]<<8|(r[24965]<<16|r[24966]<<24);i=r[24959]|r[24960]<<8|(r[24961]<<16|r[24962]<<24);o[k|0]=i;o[k+1|0]=i>>>8;o[k+2|0]=i>>>16;o[k+3|0]=i>>>24;o[k+4|0]=j;o[k+5|0]=j>>>8;o[k+6|0]=j>>>16;o[k+7|0]=j>>>24;Vt(g+1128|0,h,g+792|0,g+776|0);v:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break v}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break v}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+787|0]<=-1){_U(q[g+776>>2])}_U(l);if(o[g+819|0]<=-1){_U(q[g+808>>2])}h=mT(g+760|0,g+1144|0);q[g+752>>2]=0;q[g+736>>2]=0;q[g+744>>2]=0;q[g+748>>2]=0;q[g+728>>2]=0;q[g+732>>2]=0;o[g+755|0]=4;o[g+748|0]=0;q[g+744>>2]=609637668;p[g+728>>1]=30325;o[g+730|0]=0;o[g+739|0]=2;Vt(g+1128|0,h,g+744|0,g+728|0);w:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break w}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break w}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+739|0]<=-1){_U(q[g+728>>2])}if(o[g+771|0]<=-1){_U(q[g+760>>2])}h=mT(g+712|0,g+1144|0);q[g+704>>2]=0;q[g+696>>2]=0;q[g+700>>2]=0;q[g+684>>2]=0;q[g+688>>2]=0;o[g+683|0]=0;o[g+707|0]=4;o[g+700|0]=0;q[g+696>>2]=1146047780;o[g+691|0]=3;p[g+680>>1]=r[24980]|r[24981]<<8;o[g+682|0]=r[24982];Vt(g+1128|0,h,g+696|0,g+680|0);x:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break x}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break x}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[s>>2];q[s>>2]=0;h=q[g+1132>>2];q[g+1144>>2]=q[g+1128>>2];q[g+1148>>2]=h;q[g+1128>>2]=0;q[g+1132>>2]=0;if(o[g+691|0]<=-1){_U(q[g+680>>2])}if(o[g+723|0]<=-1){_U(q[g+712>>2])}m=0;if((y|0)<=0){break m}while(1){q[s>>2]=0;q[g+1128>>2]=0;q[g+1132>>2]=0;q[g+1120>>2]=0;q[g+1112>>2]=0;q[g+1116>>2]=0;if(!n[q[q[c>>2]+52>>2]](c,m)){BT(g+1128|0,24984);BT(g+1112|0,25008)}k=n[q[q[c>>2]+64>>2]](c,m)|0;i=n[q[q[c>>2]+72>>2]](c,m)|0;q[g+672>>2]=0;q[g+664>>2]=0;q[g+668>>2]=0;j=sV(i);if(j>>>0>=4294967280){break a}y:{z:{if(j>>>0>=11){h=j+16&-16;l=_S(h);q[g+672>>2]=h|-2147483648;q[g+664>>2]=l;q[g+668>>2]=j;break z}o[g+675|0]=j;l=g+664|0;if(!j){break y}}kV(l,i,j)}o[j+l|0]=0;PT(g+616|0,k);l=g+640|0;h=DT(g+616|0,25010);j=h+8|0;q[l>>2]=q[j>>2];i=q[h+4>>2];q[g+632>>2]=q[h>>2];q[g+636>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+632|0,25017);j=h+8|0;q[g+656>>2]=q[j>>2];i=q[h+4>>2];q[g+648>>2]=q[h>>2];q[g+652>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;if(o[g+643|0]<=-1){_U(q[g+632>>2])}if(o[g+627|0]<=-1){_U(q[g+616>>2])}PT(g+600|0,k);z=g+624|0;h=DT(g+600|0,25019);j=h+8|0;q[z>>2]=q[j>>2];i=q[h+4>>2];q[g+616>>2]=q[h>>2];q[g+620>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+616|0,25017);j=h+8|0;q[l>>2]=q[j>>2];i=q[h+4>>2];q[g+632>>2]=q[h>>2];q[g+636>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;if(o[g+627|0]<=-1){_U(q[g+616>>2])}if(o[g+611|0]<=-1){_U(q[g+600>>2])}A:{if(C){k=mT(g+584|0,g+1144|0);l=mT(g+568|0,g+648|0);q[g+544>>2]=0;q[g+536>>2]=0;q[g+540>>2]=0;h=o[g+1139|0];j=(h|0)<0;v=j?q[g+1132>>2]:h&255;h=v+6|0;if(h>>>0>=4294967280){break a}i=q[g+1128>>2];B:{C:{if(h>>>0>=11){h=v+22&-16;x=_S(h);q[g+544>>2]=h|-2147483648;q[g+536>>2]=x;q[g+540>>2]=v;break C}o[g+547|0]=v;x=g+536|0;if(!v){break B}}kV(x,j?i:g+1128|0,v)}o[x+v|0]=0;yT(g+536|0,25026,6);i=r[g+675|0];h=i<<24>>24<0;h=yT(g+536|0,h?q[g+664>>2]:g+664|0,h?q[g+668>>2]:i);j=h+8|0;q[g+608>>2]=q[j>>2];i=q[h+4>>2];q[g+600>>2]=q[h>>2];q[g+604>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+600|0,25033);j=h+8|0;q[g+560>>2]=q[j>>2];i=q[h+4>>2];q[g+552>>2]=q[h>>2];q[g+556>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;Vt(g+616|0,k,l,g+552|0);D:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break D}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break D}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[z>>2];q[z>>2]=0;h=q[g+620>>2];q[g+1144>>2]=q[g+616>>2];q[g+1148>>2]=h;q[g+616>>2]=0;q[g+620>>2]=0;if(o[g+563|0]<=-1){_U(q[g+552>>2])}if(o[g+611|0]<=-1){_U(q[g+600>>2])}if(o[g+547|0]<=-1){_U(q[g+536>>2])}if(o[g+579|0]<=-1){_U(q[g+568>>2])}if(o[g+595|0]<=-1){_U(q[g+584>>2])}i=mT(g+520|0,g+1144|0);h=mT(g+504|0,g+632|0);OT(g+488|0,25041,g+1112|0);Vt(g+616|0,i,h,g+488|0);E:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break E}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break E}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[z>>2];q[z>>2]=0;h=q[g+620>>2];q[g+1144>>2]=q[g+616>>2];q[g+1148>>2]=h;q[g+616>>2]=0;q[g+620>>2]=0;if(o[g+499|0]<=-1){_U(q[g+488>>2])}if(o[g+515|0]<=-1){_U(q[g+504>>2])}if(o[g+531|0]>-1){break A}_U(q[g+520>>2]);break A}k=mT(g+472|0,g+1144|0);l=mT(g+456|0,g+648|0);q[g+544>>2]=0;q[g+536>>2]=0;q[g+540>>2]=0;h=o[g+1139|0];j=(h|0)<0;v=j?q[g+1132>>2]:h&255;h=v+6|0;if(h>>>0>=4294967280){break a}i=q[g+1128>>2];F:{G:{if(h>>>0>=11){h=v+22&-16;x=_S(h);q[g+544>>2]=h|-2147483648;q[g+536>>2]=x;q[g+540>>2]=v;break G}o[g+547|0]=v;x=g+536|0;if(!v){break F}}kV(x,j?i:g+1128|0,v)}o[x+v|0]=0;yT(g+536|0,25026,6);i=r[g+675|0];h=i<<24>>24<0;h=yT(g+536|0,h?q[g+664>>2]:g+664|0,h?q[g+668>>2]:i);j=h+8|0;q[g+608>>2]=q[j>>2];i=q[h+4>>2];q[g+600>>2]=q[h>>2];q[g+604>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+600|0,25033);j=h+8|0;q[g+448>>2]=q[j>>2];i=q[h+4>>2];q[g+440>>2]=q[h>>2];q[g+444>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;Vt(g+616|0,k,l,g+440|0);H:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break H}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break H}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[z>>2];q[z>>2]=0;h=q[g+620>>2];q[g+1144>>2]=q[g+616>>2];q[g+1148>>2]=h;q[g+616>>2]=0;q[g+620>>2]=0;if(o[g+451|0]<=-1){_U(q[g+440>>2])}if(o[g+611|0]<=-1){_U(q[g+600>>2])}if(o[g+547|0]<=-1){_U(q[g+536>>2])}if(o[g+467|0]<=-1){_U(q[g+456>>2])}if(o[g+483|0]<=-1){_U(q[g+472>>2])}i=mT(g+424|0,g+1144|0);h=mT(g+408|0,g+632|0);OT(g+392|0,25049,g+1112|0);Vt(g+616|0,i,h,g+392|0);I:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break I}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break I}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[z>>2];q[z>>2]=0;h=q[g+620>>2];q[g+1144>>2]=q[g+616>>2];q[g+1148>>2]=h;q[g+616>>2]=0;q[g+620>>2]=0;if(o[g+403|0]<=-1){_U(q[g+392>>2])}if(o[g+419|0]<=-1){_U(q[g+408>>2])}if(o[g+435|0]>-1){break A}_U(q[g+424>>2])}if(o[g+643|0]<=-1){_U(q[g+632>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}m=m+1|0;if((y|0)!=(m|0)){continue}break}break m}break a}J:{if((y|0)>=(n[q[q[c>>2]+80>>2]](c)|0)){break J}while(1){K:{k=n[q[q[c>>2]+64>>2]](c,y)|0;i=n[q[q[c>>2]+72>>2]](c,y)|0;q[s>>2]=0;q[g+1128>>2]=0;q[g+1132>>2]=0;j=sV(i);if(j>>>0>=4294967280){break K}L:{M:{if(j>>>0>=11){h=j+16&-16;m=_S(h);q[g+1136>>2]=h|-2147483648;q[g+1128>>2]=m;q[g+1132>>2]=j;break M}o[g+1139|0]=j;m=g+1128|0;if(!j){break L}}kV(m,i,j)}o[j+m|0]=0;PT(g+648|0,k);l=g+672|0;h=DT(g+648|0,25010);j=h+8|0;q[l>>2]=q[j>>2];i=q[h+4>>2];q[g+664>>2]=q[h>>2];q[g+668>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+664|0,25017);j=h+8|0;q[g+1120>>2]=q[j>>2];i=q[h+4>>2];q[g+1112>>2]=q[h>>2];q[g+1116>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}PT(g+632|0,k);k=g+656|0;h=DT(g+632|0,25019);j=h+8|0;q[k>>2]=q[j>>2];i=q[h+4>>2];q[g+648>>2]=q[h>>2];q[g+652>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;h=zT(g+648|0,25017);j=h+8|0;q[l>>2]=q[j>>2];i=q[h+4>>2];q[g+664>>2]=q[h>>2];q[g+668>>2]=i;q[h>>2]=0;q[h+4>>2]=0;q[j>>2]=0;if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[g+643|0]<=-1){_U(q[g+632>>2])}i=mT(g+376|0,g+1144|0);h=mT(g+360|0,g+1112|0);q[g+352>>2]=0;q[g+344>>2]=0;q[g+348>>2]=0;o[g+355|0]=5;q[g+344>>2]=r[25052]|r[25053]<<8|(r[25054]<<16|r[25055]<<24);o[g+348|0]=r[25056];o[g+349|0]=0;Vt(g+648|0,i,h,g+344|0);N:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break N}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break N}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[k>>2];q[k>>2]=0;h=q[g+652>>2];q[g+1144>>2]=q[g+648>>2];q[g+1148>>2]=h;q[g+648>>2]=0;q[g+652>>2]=0;if(o[g+355|0]<=-1){_U(q[g+344>>2])}if(o[g+371|0]<=-1){_U(q[g+360>>2])}if(o[g+387|0]<=-1){_U(q[g+376>>2])}j=mT(g+328|0,g+1144|0);i=mT(g+312|0,g+664|0);h=g+304|0;q[h>>2]=0;o[h|0]=r[25066];o[g+307|0]=9;h=r[25062]|r[25063]<<8|(r[25064]<<16|r[25065]<<24);q[g+296>>2]=r[25058]|r[25059]<<8|(r[25060]<<16|r[25061]<<24);q[g+300>>2]=h;o[g+305|0]=0;Vt(g+648|0,j,i,g+296|0);O:{if(o[g+1155|0]>=0){o[g+1155|0]=0;o[g+1144|0]=0;break O}o[q[g+1144>>2]]=0;q[g+1148>>2]=0;if(o[g+1155|0]>-1){break O}_U(q[g+1144>>2]);q[g+1152>>2]=0}q[u>>2]=q[k>>2];q[k>>2]=0;h=q[g+652>>2];q[g+1144>>2]=q[g+648>>2];q[g+1148>>2]=h;q[g+648>>2]=0;q[g+652>>2]=0;if(o[g+307|0]<=-1){_U(q[g+296>>2])}if(o[g+323|0]<=-1){_U(q[g+312>>2])}if(o[g+339|0]<=-1){_U(q[g+328>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}y=y+1|0;if((y|0)<(n[q[q[c>>2]+80>>2]](c)|0)){continue}break J}break}break a}Zt(g+1160|0,c,A,I,d,g+1144|0);P:{if(C){Gt(g+1128|0,D);Q:{if(o[a+11|0]>=0){o[a+11|0]=0;o[a|0]=0;break Q}o[q[a>>2]]=0;q[a+4>>2]=0;if(o[a+11|0]>-1){break Q}_U(q[a>>2]);q[a+8>>2]=0}h=q[g+1132>>2];q[a>>2]=q[g+1128>>2];q[a+4>>2]=h;q[G>>2]=q[s>>2];break P}Gt(g+1128|0,D);R:{if(o[t+11|0]>=0){o[t+11|0]=0;o[t|0]=0;break R}o[q[a+12>>2]]=0;q[a+16>>2]=0;if(o[a+23|0]>-1){break R}_U(q[a+12>>2]);q[a+20>>2]=0}h=q[g+1132>>2];q[t>>2]=q[g+1128>>2];q[t+4>>2]=h;q[t+8>>2]=q[s>>2]}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}q[g+1216>>2]=26260;q[g+1160>>2]=26240;q[g+1164>>2]=8052;if(o[g+1207|0]<=-1){_U(q[g+1196>>2])}bH(L);ZG(H);i=1;if(!A){continue}break}S:{if((n[q[q[c>>2]+112>>2]](c)|0)<=0){i=7;b=6;break S}T:{if(B){break T}k=0;h=mT(g+280|0,a);b=g+272|0;q[b>>2]=0;o[b|0]=r[25076];o[g+275|0]=9;b=r[25072]|r[25073]<<8|(r[25074]<<16|r[25075]<<24);q[g+264>>2]=r[25068]|r[25069]<<8|(r[25070]<<16|r[25071]<<24);q[g+268>>2]=b;o[g+273|0]=0;PT(g+648|0,6);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25089);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;U:{V:{b=(n[q[q[c>>2]+112>>2]](c)|0)+ -1|0;if(b>>>0>15){break V}W:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;k=5;o[g+643|0]=5;d=g+632|0;break U;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;k=4;o[g+643|0]=4;d=g+632|0;break U;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;k=4;o[g+643|0]=4;d=g+632|0;break U;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;k=4;o[g+643|0]=4;d=g+632|0;break U;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break V;case 14:break W}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;k=4;o[g+643|0]=4;d=g+632|0;break U}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;d=g+632|0}b=yT(g+1128|0,g+632|0,k);f=b+8|0;q[g+1152>>2]=q[f>>2];e=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;b=zT(g+1144|0,25093);f=b+8|0;q[g+256>>2]=q[f>>2];e=q[b+4>>2];q[g+248>>2]=q[b>>2];q[g+252>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;Vt(g+1160|0,h,g+264|0,g+248|0);X:{if(o[a+11|0]>=0){o[a+11|0]=0;o[a|0]=0;break X}o[q[a>>2]]=0;q[a+4>>2]=0;if(o[a+11|0]>-1){break X}_U(q[a>>2]);q[a+8>>2]=0}b=q[g+1164>>2];q[a>>2]=q[g+1160>>2];q[a+4>>2]=b;b=g+1168|0;q[a+8>>2]=q[b>>2];q[b>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+259|0]<=-1){_U(q[g+248>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[d+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[h+11|0]>-1){break T}_U(q[h>>2])}k=0;h=mT(g+232|0,a);p[g+224>>1]=r[25117]|r[25118]<<8;p[g+226>>1]=2560;b=r[25113]|r[25114]<<8|(r[25115]<<16|r[25116]<<24);q[g+216>>2]=r[25109]|r[25110]<<8|(r[25111]<<16|r[25112]<<24);q[g+220>>2]=b;PT(g+648|0,7);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25120);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;Y:{Z:{b=(n[q[q[c>>2]+112>>2]](c)|0)+ -1|0;if(b>>>0>15){break Z}_:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;k=5;o[g+643|0]=5;d=g+632|0;break Y;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;k=4;o[g+643|0]=4;d=g+632|0;break Y;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;k=4;o[g+643|0]=4;d=g+632|0;break Y;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;k=4;o[g+643|0]=4;d=g+632|0;break Y;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break Z;case 14:break _}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;k=4;o[g+643|0]=4;d=g+632|0;break Y}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;d=g+632|0}b=yT(g+1128|0,g+632|0,k);f=b+8|0;q[g+1152>>2]=q[f>>2];e=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;b=zT(g+1144|0,25133);f=b+8|0;q[g+208>>2]=q[f>>2];e=q[b+4>>2];q[g+200>>2]=q[b>>2];q[g+204>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;Vt(g+1160|0,h,g+216|0,g+200|0);$:{if(o[a+11|0]>=0){o[a+11|0]=0;o[a|0]=0;break $}o[q[a>>2]]=0;q[a+4>>2]=0;if(o[a+11|0]>-1){break $}_U(q[a>>2]);q[a+8>>2]=0}b=q[g+1164>>2];q[a>>2]=q[g+1160>>2];q[a+4>>2]=b;b=g+1168|0;q[a+8>>2]=q[b>>2];q[b>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+211|0]<=-1){_U(q[g+200>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[d+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[h+11|0]<=-1){_U(q[h>>2])}k=0;h=mT(g+184|0,t);p[g+176>>1]=r[25157]|r[25158]<<8;p[g+178>>1]=2560;b=r[25153]|r[25154]<<8|(r[25155]<<16|r[25156]<<24);q[g+168>>2]=r[25149]|r[25150]<<8|(r[25151]<<16|r[25152]<<24);q[g+172>>2]=b;PT(g+648|0,7);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25160);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;aa:{ba:{b=(n[q[q[c>>2]+112>>2]](c)|0)+ -1|0;if(b>>>0>15){break ba}ca:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;k=5;o[g+643|0]=5;d=g+632|0;break aa;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;k=4;o[g+643|0]=4;d=g+632|0;break aa;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;k=4;o[g+643|0]=4;d=g+632|0;break aa;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;k=4;o[g+643|0]=4;d=g+632|0;break aa;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break ba;case 14:break ca}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;k=4;o[g+643|0]=4;d=g+632|0;break aa}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;d=g+632|0}b=yT(g+1128|0,g+632|0,k);f=b+8|0;q[g+1152>>2]=q[f>>2];e=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;b=zT(g+1144|0,25133);f=b+8|0;q[g+160>>2]=q[f>>2];e=q[b+4>>2];q[g+152>>2]=q[b>>2];q[g+156>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;Vt(g+1160|0,h,g+168|0,g+152|0);da:{if(o[t+11|0]>=0){o[t+11|0]=0;o[t|0]=0;break da}o[q[a+12>>2]]=0;q[a+16>>2]=0;if(o[a+23|0]>-1){break da}_U(q[a+12>>2]);q[a+20>>2]=0}b=q[g+1164>>2];q[t>>2]=q[g+1160>>2];q[t+4>>2]=b;b=g+1168|0;q[t+8>>2]=q[b>>2];q[b>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+163|0]<=-1){_U(q[g+152>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[d+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[h+11|0]<=-1){_U(q[h>>2])}i=8;b=7}ea:{if((n[q[q[c>>2]+120>>2]](c)|0)<1){break ea}fa:{if(B){break fa}l=0;h=mT(g+136|0,a);d=g+128|0;q[d>>2]=0;o[d|0]=r[25180];o[g+131|0]=9;d=r[25176]|r[25177]<<8|(r[25178]<<16|r[25179]<<24);q[g+120>>2]=r[25172]|r[25173]<<8|(r[25174]<<16|r[25175]<<24);q[g+124>>2]=d;o[g+129|0]=0;PT(g+648|0,b);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25089);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;ga:{ha:{b=(n[q[q[c>>2]+120>>2]](c)|0)+ -1|0;if(b>>>0>15){break ha}ia:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;l=5;o[g+643|0]=5;d=g+632|0;break ga;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;l=4;o[g+643|0]=4;d=g+632|0;break ga;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;l=4;o[g+643|0]=4;d=g+632|0;break ga;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;l=4;o[g+643|0]=4;d=g+632|0;break ga;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break ha;case 14:break ia}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;l=4;o[g+643|0]=4;d=g+632|0;break ga}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;d=g+632|0}b=yT(g+1128|0,g+632|0,l);f=b+8|0;q[g+1152>>2]=q[f>>2];e=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;b=zT(g+1144|0,25182);f=b+8|0;q[g+112>>2]=q[f>>2];e=q[b+4>>2];q[g+104>>2]=q[b>>2];q[g+108>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;Vt(g+1160|0,h,g+120|0,g+104|0);ja:{if(o[a+11|0]>=0){o[a+11|0]=0;o[a|0]=0;break ja}o[q[a>>2]]=0;q[a+4>>2]=0;if(o[a+11|0]>-1){break ja}_U(q[a>>2]);q[a+8>>2]=0}b=q[g+1164>>2];q[a>>2]=q[g+1160>>2];q[a+4>>2]=b;b=g+1168|0;q[a+8>>2]=q[b>>2];q[b>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+115|0]<=-1){_U(q[g+104>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[d+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[h+11|0]>-1){break fa}_U(q[h>>2])}l=0;h=mT(g+88|0,a);p[g+80>>1]=r[25206]|r[25207]<<8;p[g+82>>1]=2560;b=r[25202]|r[25203]<<8|(r[25204]<<16|r[25205]<<24);q[g+72>>2]=r[25198]|r[25199]<<8|(r[25200]<<16|r[25201]<<24);q[g+76>>2]=b;PT(g+648|0,i);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25120);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;ka:{la:{b=(n[q[q[c>>2]+120>>2]](c)|0)+ -1|0;if(b>>>0>15){break la}ma:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;l=5;o[g+643|0]=5;d=g+632|0;break ka;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;l=4;o[g+643|0]=4;d=g+632|0;break ka;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;l=4;o[g+643|0]=4;d=g+632|0;break ka;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;l=4;o[g+643|0]=4;d=g+632|0;break ka;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break la;case 14:break ma}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;l=4;o[g+643|0]=4;d=g+632|0;break ka}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;d=g+632|0}b=yT(g+1128|0,g+632|0,l);f=b+8|0;q[g+1152>>2]=q[f>>2];e=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;b=zT(g+1144|0,25209);f=b+8|0;q[g- -64>>2]=q[f>>2];e=q[b+4>>2];q[g+56>>2]=q[b>>2];q[g+60>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;Vt(g+1160|0,h,g+72|0,g+56|0);na:{if(o[a+11|0]>=0){o[a+11|0]=0;o[a|0]=0;break na}o[q[a>>2]]=0;q[a+4>>2]=0;if(o[a+11|0]>-1){break na}_U(q[a>>2]);q[a+8>>2]=0}b=q[g+1164>>2];q[a>>2]=q[g+1160>>2];q[a+4>>2]=b;b=g+1168|0;q[a+8>>2]=q[b>>2];q[b>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+67|0]<=-1){_U(q[g+56>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[d+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[h+11|0]<=-1){_U(q[h>>2])}k=0;f=mT(g+40|0,t);p[g+32>>1]=r[25233]|r[25234]<<8;p[g+34>>1]=2560;b=r[25229]|r[25230]<<8|(r[25231]<<16|r[25232]<<24);q[g+24>>2]=r[25225]|r[25226]<<8|(r[25227]<<16|r[25228]<<24);q[g+28>>2]=b;PT(g+648|0,i);b=DT(g+648|0,25078);e=b+8|0;q[g+672>>2]=q[e>>2];d=q[b+4>>2];q[g+664>>2]=q[b>>2];q[g+668>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+664|0,25086);e=b+8|0;q[g+1120>>2]=q[e>>2];d=q[b+4>>2];q[g+1112>>2]=q[b>>2];q[g+1116>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1112|0,25160);e=b+8|0;q[g+1136>>2]=q[e>>2];d=q[b+4>>2];q[g+1128>>2]=q[b>>2];q[g+1132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;oa:{pa:{b=(n[q[q[c>>2]+120>>2]](c)|0)+ -1|0;if(b>>>0>15){break pa}qa:{switch(b-1|0){default:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;q[g+632>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+636|0]=r[13382];o[g+637|0]=0;k=5;o[g+643|0]=5;c=g+632|0;break oa;case 0:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=845374838;k=4;o[g+643|0]=4;c=g+632|0;break oa;case 1:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=862152054;k=4;o[g+643|0]=4;c=g+632|0;break oa;case 2:q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=878929270;k=4;o[g+643|0]=4;c=g+632|0;break oa;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break pa;case 14:break qa}}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;o[g+636|0]=0;q[g+632>>2]=880042349;k=4;o[g+643|0]=4;c=g+632|0;break oa}q[g+640>>2]=0;q[g+632>>2]=0;q[g+636>>2]=0;c=g+632|0}b=yT(g+1128|0,g+632|0,k);e=b+8|0;q[g+1152>>2]=q[e>>2];d=q[b+4>>2];q[g+1144>>2]=q[b>>2];q[g+1148>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;b=zT(g+1144|0,25209);e=b+8|0;q[g+16>>2]=q[e>>2];d=q[b+4>>2];q[g+8>>2]=q[b>>2];q[g+12>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;Vt(g+1160|0,f,g+24|0,g+8|0);ra:{if(o[t+11|0]>=0){o[t+11|0]=0;o[t|0]=0;break ra}o[q[a+12>>2]]=0;q[a+16>>2]=0;if(o[a+23|0]>-1){break ra}_U(q[a+12>>2]);q[a+20>>2]=0}a=q[g+1164>>2];q[t>>2]=q[g+1160>>2];q[t+4>>2]=a;a=g+1168|0;q[t+8>>2]=q[a>>2];q[a>>2]=0;q[g+1160>>2]=0;q[g+1164>>2]=0;if(o[g+19|0]<=-1){_U(q[g+8>>2])}if(o[g+1155|0]<=-1){_U(q[g+1144>>2])}if(o[c+11|0]<=-1){_U(q[g+632>>2])}if(o[g+1139|0]<=-1){_U(q[g+1128>>2])}if(o[g+1123|0]<=-1){_U(q[g+1112>>2])}if(o[g+675|0]<=-1){_U(q[g+664>>2])}if(o[g+659|0]<=-1){_U(q[g+648>>2])}if(o[f+11|0]>-1){break ea}_U(q[f>>2])}ue=g+1296|0;return}kT();F()}function Zx(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=ue-384|0;ue=b;q[b+348>>2]=0;if(r[367112]){ta(34229,b+348|0)}q[b+344>>2]=0;q[b+340>>2]=0;ta(34964,b+344|0);ta(34965,b+340|0);if(w(q[a+40>>2],352)>>>0>=1572864){q[a+200>>2]=4}c=_S(360);Tx(c,a);q[a+80>>2]=c;c=n[q[q[a>>2]+244>>2]](a)|0;p=(c|0)==3?192224:(c|0)==2?199808:0;l=sV(p);c=n[q[q[a>>2]+244>>2]](a)|0;k=(c|0)==3?207296:(c|0)==2?219136:0;j=sV(k);c=n[q[q[a>>2]+244>>2]](a)|0;i=(c|0)==3?229168:(c|0)==2?237520:0;g=sV(i);c=n[q[q[a>>2]+244>>2]](a)|0;x=(c|0)==3?245872:(c|0)==2?255712:0;u=sV(x);c=n[q[q[a>>2]+244>>2]](a)|0;t=(c|0)==3?263904:(c|0)==2?272272:0;s=sV(t);c=n[q[q[a>>2]+244>>2]](a)|0;m=(c|0)==3?280528:(c|0)==2?293072:0;h=sV(m);c=n[q[q[a>>2]+244>>2]](a)|0;z=(c|0)==3?303808:(c|0)==2?305072:0;B=sV(z);c=n[q[q[a>>2]+244>>2]](a)|0;D=(c|0)==3?306272:(c|0)==2?310848:0;K=sV(D);c=n[q[q[a>>2]+244>>2]](a)|0;E=(c|0)==3?313728:(c|0)==2?315856:0;L=sV(E);c=n[q[q[a>>2]+244>>2]](a)|0;G=(c|0)==3?317888:(c|0)==2?321568:0;M=sV(G);c=n[q[q[a>>2]+244>>2]](a)|0;H=(c|0)==3?323632:(c|0)==2?325776:0;N=sV(H);c=n[q[q[a>>2]+244>>2]](a)|0;I=(c|0)==3?327824:(c|0)==2?333152:0;O=sV(I);_x(b+328|0,0);_x(b+312|0,4);_x(b+296|0,2);_x(b+280|0,3);_x(b+264|0,4);_x(b+248|0,5);q[b+240>>2]=0;q[b+232>>2]=0;q[b+236>>2]=0;q[b+216>>2]=0;q[b+372>>2]=b+216;q[b+368>>2]=b+232;q[b+356>>2]=b+216;q[b+352>>2]=b+232;$x(b+352|0,191560);$x(b+352|0,191574);ay(b+368|0,191592);ay(b+368|0,191610);ay(b+368|0,191635);by(b+232|0);q[b+224>>2]=0;q[b+216>>2]=0;q[b+220>>2]=0;q[b+184>>2]=0;q[b+372>>2]=b+184;q[b+368>>2]=b+216;q[b+356>>2]=b+184;q[b+352>>2]=b+216;$x(b+352|0,191560);$x(b+352|0,191574);ay(b+368|0,191592);ay(b+368|0,191610);ay(b+368|0,191635);cy(b+216|0);v=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+284>>2]-q[b+280>>2]|0;d=(c|0)/12|0;a:{b:{c:{if(!c){break c}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;f=q[q[b+380>>2]+4>>2];if(f){n[f](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+280>>2];y=q[b+284>>2];if((e|0)==(y|0)){break c}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;d:{if(o[e+11|0]>=0){f=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=f;q[d>>2]=q[e+8>>2];break d}f=q[e+4>>2];if(f>>>0>=4294967280){break a}C=q[e>>2];e:{f:{if(f>>>0>=11){wt(b+368|0);A=f+16&-16;d=n[q[b+376>>2]](b+368|0,A)|0;J=q[q[b+380>>2]+4>>2];if(J){n[J](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=f;q[c+8>>2]=A|-2147483648;c=d;break f}o[c+11|0]=f;d=c;if(!f){break e}}kV(d,C,f)}o[c+f|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((y|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+232|0);q[v>>2]=28756;q[v+4>>2]=1;q[v+8>>2]=q[b+352>>2];q[v+12>>2]=q[b+356>>2];q[v+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[v+20>>2]=q[c>>2];q[v+24>>2]=q[c+4>>2];q[v+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[a+16>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=l;q[b+200>>2]=p;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;f=q[q[b+380>>2]+4>>2];if(f){n[f](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;f=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=f;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=j;q[b+176>>2]=k;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;f=q[q[b+380>>2]+4>>2];if(f){n[f](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;f=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=f;q[b+168>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[v>>2]>>2]](v)|0;c=q[b+168>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+168>>2]=0}q[b+168>>2]=v;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+168|0);c=q[b+208>>2];g:{if(!c){y=0;break g}n[q[q[c>>2]>>2]](c)|0;y=c+ -4|0;c=q[b+208>>2];if(!c){break g}n[q[q[c>>2]+8>>2]](c)|0;q[b+208>>2]=0}c=q[b+168>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+168>>2]=0}c=q[b+184>>2];h:{if(!c){break h}q[b+188>>2]=c;d=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break h}n[c](q[b+368>>2])}c=q[b+352>>2];i:{if(!c){break i}q[b+356>>2]=c;d=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break i}n[c](q[b+368>>2])}f=a+16|0;q[b+160>>2]=0;j:{if(!y){break j}n[q[q[y+4>>2]>>2]](y+4|0)|0;c=q[b+160>>2];if(!c){break j}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[b+160>>2]=0}q[b+160>>2]=y;c=rB(f,b+160|0,191380);q[a+56>>2]=c;d=q[b+160>>2];if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+160>>2]=0;c=q[a+56>>2]}k:{if(!c){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=25;q[b+376>>2]=-2147483616;e=0;o[a+25|0]=0;o[a+24|0]=r[191412];c=r[191408]|r[191409]<<8|(r[191410]<<16|r[191411]<<24);d=r[191404]|r[191405]<<8|(r[191406]<<16|r[191407]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;c=r[191400]|r[191401]<<8|(r[191402]<<16|r[191403]<<24);d=r[191396]|r[191397]<<8|(r[191398]<<16|r[191399]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[191392]|r[191393]<<8|(r[191394]<<16|r[191395]<<24);d=r[191388]|r[191389]<<8|(r[191390]<<16|r[191391]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break k}_U(q[b+368>>2]);break k}p=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+252>>2]-q[b+248>>2]|0;d=(c|0)/12|0;l:{if(!c){break l}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+248>>2];k=q[b+252>>2];if((e|0)==(k|0)){break l}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;m:{if(o[e+11|0]>=0){l=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=l;q[d>>2]=q[e+8>>2];break m}l=q[e+4>>2];if(l>>>0>=4294967280){break a}j=q[e>>2];n:{o:{if(l>>>0>=11){wt(b+368|0);C=l+16&-16;d=n[q[b+376>>2]](b+368|0,C)|0;A=q[q[b+380>>2]+4>>2];if(A){n[A](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=l;q[c+8>>2]=C|-2147483648;c=d;break o}o[c+11|0]=l;d=c;if(!l){break n}}kV(d,j,l)}o[c+l|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((k|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+216|0);q[p>>2]=28756;q[p+4>>2]=1;q[p+8>>2]=q[b+352>>2];q[p+12>>2]=q[b+356>>2];q[p+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[p+20>>2]=q[c>>2];q[p+24>>2]=q[c+4>>2];q[p+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[f>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=g;q[b+200>>2]=i;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;e=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=e;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=u;q[b+176>>2]=x;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;e=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=e;q[b+152>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[p>>2]>>2]](p)|0;c=q[b+152>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+152>>2]=0}q[b+152>>2]=p;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+152|0);c=q[b+208>>2];p:{if(!c){x=0;break p}n[q[q[c>>2]>>2]](c)|0;x=c+ -4|0;c=q[b+208>>2];if(!c){break p}n[q[q[c>>2]+8>>2]](c)|0;q[b+208>>2]=0}c=q[b+152>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+152>>2]=0}c=q[b+184>>2];q:{if(!c){break q}q[b+188>>2]=c;d=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break q}n[c](q[b+368>>2])}c=q[b+352>>2];r:{if(!c){break r}q[b+356>>2]=c;d=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break r}n[c](q[b+368>>2])}q[b+144>>2]=0;s:{if(!x){break s}n[q[q[x+4>>2]>>2]](x+4|0)|0;c=q[b+144>>2];if(!c){break s}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[b+144>>2]=0}q[b+144>>2]=x;c=rB(f,b+144|0,191414);q[a+64>>2]=c;d=q[b+144>>2];if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+144>>2]=0;c=q[a+64>>2]}t:{if(!c){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=24;q[b+376>>2]=-2147483616;e=0;o[a+24|0]=0;c=r[191441]|r[191442]<<8|(r[191443]<<16|r[191444]<<24);d=r[191437]|r[191438]<<8|(r[191439]<<16|r[191440]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;c=r[191433]|r[191434]<<8|(r[191435]<<16|r[191436]<<24);d=r[191429]|r[191430]<<8|(r[191431]<<16|r[191432]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[191425]|r[191426]<<8|(r[191427]<<16|r[191428]<<24);d=r[191421]|r[191422]<<8|(r[191423]<<16|r[191424]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break t}_U(q[b+368>>2]);break t}l=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+268>>2]-q[b+264>>2]|0;d=(c|0)/12|0;u:{if(!c){break u}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+264>>2];j=q[b+268>>2];if((e|0)==(j|0)){break u}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;v:{if(o[e+11|0]>=0){k=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=k;q[d>>2]=q[e+8>>2];break v}k=q[e+4>>2];if(k>>>0>=4294967280){break a}i=q[e>>2];w:{x:{if(k>>>0>=11){wt(b+368|0);g=k+16&-16;d=n[q[b+376>>2]](b+368|0,g)|0;u=q[q[b+380>>2]+4>>2];if(u){n[u](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=k;q[c+8>>2]=g|-2147483648;c=d;break x}o[c+11|0]=k;d=c;if(!k){break w}}kV(d,i,k)}o[c+k|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((j|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+232|0);q[l>>2]=28756;q[l+4>>2]=1;q[l+8>>2]=q[b+352>>2];q[l+12>>2]=q[b+356>>2];q[l+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[l+20>>2]=q[c>>2];q[l+24>>2]=q[c+4>>2];q[l+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[f>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=s;q[b+200>>2]=t;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;e=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=e;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=h;q[b+176>>2]=m;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;e=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=e;q[b+136>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[l>>2]>>2]](l)|0;c=q[b+136>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+136>>2]=0}q[b+136>>2]=l;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+136|0);c=q[b+208>>2];y:{if(!c){u=0;break y}n[q[q[c>>2]>>2]](c)|0;u=c+ -4|0;c=q[b+208>>2];if(!c){break y}n[q[q[c>>2]+8>>2]](c)|0;q[b+208>>2]=0}c=q[b+136>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+136>>2]=0}c=q[b+184>>2];z:{if(!c){break z}q[b+188>>2]=c;d=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break z}n[c](q[b+368>>2])}c=q[b+352>>2];A:{if(!c){break A}q[b+356>>2]=c;d=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break A}n[c](q[b+368>>2])}q[b+128>>2]=0;B:{if(!u){break B}n[q[q[u+4>>2]>>2]](u+4|0)|0;c=q[b+128>>2];if(!c){break B}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[b+128>>2]=0}q[b+128>>2]=u;c=rB(f,b+128|0,191446);q[a+60>>2]=c;d=q[b+128>>2];if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+128>>2]=0;c=q[a+60>>2]}C:{if(!c){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=23;q[b+376>>2]=-2147483616;e=0;o[a+23|0]=0;c=r[191471]|r[191472]<<8|(r[191473]<<16|r[191474]<<24);d=r[191467]|r[191468]<<8|(r[191469]<<16|r[191470]<<24);o[a+15|0]=d;o[a+16|0]=d>>>8;o[a+17|0]=d>>>16;o[a+18|0]=d>>>24;o[a+19|0]=c;o[a+20|0]=c>>>8;o[a+21|0]=c>>>16;o[a+22|0]=c>>>24;c=r[191464]|r[191465]<<8|(r[191466]<<16|r[191467]<<24);d=r[191460]|r[191461]<<8|(r[191462]<<16|r[191463]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[191456]|r[191457]<<8|(r[191458]<<16|r[191459]<<24);d=r[191452]|r[191453]<<8|(r[191454]<<16|r[191455]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break C}_U(q[b+368>>2]);break C}k=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+332>>2]-q[b+328>>2]|0;d=(c|0)/12|0;D:{if(!c){break D}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+328>>2];i=q[b+332>>2];if((e|0)==(i|0)){break D}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;E:{if(o[e+11|0]>=0){j=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=j;q[d>>2]=q[e+8>>2];break E}j=q[e+4>>2];if(j>>>0>=4294967280){break a}g=q[e>>2];F:{G:{if(j>>>0>=11){wt(b+368|0);t=j+16&-16;d=n[q[b+376>>2]](b+368|0,t)|0;s=q[q[b+380>>2]+4>>2];if(s){n[s](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=j;q[c+8>>2]=t|-2147483648;c=d;break G}o[c+11|0]=j;d=c;if(!j){break F}}kV(d,g,j)}o[c+j|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((i|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+232|0);q[k>>2]=28756;q[k+4>>2]=1;q[k+8>>2]=q[b+352>>2];q[k+12>>2]=q[b+356>>2];q[k+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[k+20>>2]=q[c>>2];q[k+24>>2]=q[c+4>>2];q[k+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[f>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=B;q[b+200>>2]=z;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;e=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=e;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=K;q[b+176>>2]=D;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;e=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=e;q[b+120>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[k>>2]>>2]](k)|0;c=q[b+120>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+120>>2]=0}q[b+120>>2]=k;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+120|0);c=q[b+208>>2];H:{if(!c){t=0;break H}n[q[q[c>>2]>>2]](c)|0;t=c+ -4|0;c=q[b+208>>2];if(!c){break H}n[q[q[c>>2]+8>>2]](c)|0;q[b+208>>2]=0}c=q[b+120>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+120>>2]=0}c=q[b+184>>2];I:{if(!c){break I}q[b+188>>2]=c;d=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break I}n[c](q[b+368>>2])}c=q[b+352>>2];J:{if(!c){break J}q[b+356>>2]=c;d=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break J}n[c](q[b+368>>2])}q[b+112>>2]=0;K:{if(!t){break K}n[q[q[t+4>>2]>>2]](t+4|0)|0;c=q[b+112>>2];if(!c){break K}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[b+112>>2]=0}q[b+112>>2]=t;c=rB(f,b+112|0,191476);q[a+44>>2]=c;d=q[b+112>>2];if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+112>>2]=0;c=q[a+44>>2]}L:{if(!c){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=23;q[b+376>>2]=-2147483616;e=0;o[a+23|0]=0;c=r[191501]|r[191502]<<8|(r[191503]<<16|r[191504]<<24);d=r[191497]|r[191498]<<8|(r[191499]<<16|r[191500]<<24);o[a+15|0]=d;o[a+16|0]=d>>>8;o[a+17|0]=d>>>16;o[a+18|0]=d>>>24;o[a+19|0]=c;o[a+20|0]=c>>>8;o[a+21|0]=c>>>16;o[a+22|0]=c>>>24;c=r[191494]|r[191495]<<8|(r[191496]<<16|r[191497]<<24);d=r[191490]|r[191491]<<8|(r[191492]<<16|r[191493]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[191486]|r[191487]<<8|(r[191488]<<16|r[191489]<<24);d=r[191482]|r[191483]<<8|(r[191484]<<16|r[191485]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break L}_U(q[b+368>>2]);break L}j=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+300>>2]-q[b+296>>2]|0;d=(c|0)/12|0;M:{if(!c){break M}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+296>>2];g=q[b+300>>2];if((e|0)==(g|0)){break M}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;N:{if(o[e+11|0]>=0){i=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=i;q[d>>2]=q[e+8>>2];break N}i=q[e+4>>2];if(i>>>0>=4294967280){break a}s=q[e>>2];O:{P:{if(i>>>0>=11){wt(b+368|0);m=i+16&-16;d=n[q[b+376>>2]](b+368|0,m)|0;h=q[q[b+380>>2]+4>>2];if(h){n[h](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=i;q[c+8>>2]=m|-2147483648;c=d;break P}o[c+11|0]=i;d=c;if(!i){break O}}kV(d,s,i)}o[c+i|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((g|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+216|0);q[j>>2]=28756;q[j+4>>2]=1;q[j+8>>2]=q[b+352>>2];q[j+12>>2]=q[b+356>>2];q[j+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[j+20>>2]=q[c>>2];q[j+24>>2]=q[c+4>>2];q[j+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[f>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=L;q[b+200>>2]=E;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;e=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=e;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=M;q[b+176>>2]=G;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;e=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=e;q[b+104>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[j>>2]>>2]](j)|0;c=q[b+104>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+104>>2]=0}q[b+104>>2]=j;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+104|0);c=q[b+208>>2];Q:{if(!c){s=0;break Q}n[q[q[c>>2]>>2]](c)|0;s=c+ -4|0;c=q[b+208>>2];if(!c){break Q}n[q[q[c>>2]+8>>2]](c)|0;q[b+208>>2]=0}c=q[b+104>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+104>>2]=0}c=q[b+184>>2];R:{if(!c){break R}q[b+188>>2]=c;d=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break R}n[c](q[b+368>>2])}c=q[b+352>>2];S:{if(!c){break S}q[b+356>>2]=c;d=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,c,d-c|0);c=q[q[b+380>>2]+4>>2];if(!c){break S}n[c](q[b+368>>2])}q[b+96>>2]=0;T:{if(!s){break T}n[q[q[s+4>>2]>>2]](s+4|0)|0;c=q[b+96>>2];if(!c){break T}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[b+96>>2]=0}q[b+96>>2]=s;c=rB(f,b+96|0,191506);q[a+48>>2]=c;d=q[b+96>>2];if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+96>>2]=0;c=q[a+48>>2]}U:{if(!c){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=22;q[b+376>>2]=-2147483616;e=0;o[a+22|0]=0;c=r[191529]|r[191530]<<8|(r[191531]<<16|r[191532]<<24);d=r[191525]|r[191526]<<8|(r[191527]<<16|r[191528]<<24);o[a+14|0]=d;o[a+15|0]=d>>>8;o[a+16|0]=d>>>16;o[a+17|0]=d>>>24;o[a+18|0]=c;o[a+19|0]=c>>>8;o[a+20|0]=c>>>16;o[a+21|0]=c>>>24;c=r[191523]|r[191524]<<8|(r[191525]<<16|r[191526]<<24);d=r[191519]|r[191520]<<8|(r[191521]<<16|r[191522]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[191515]|r[191516]<<8|(r[191517]<<16|r[191518]<<24);d=r[191511]|r[191512]<<8|(r[191513]<<16|r[191514]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break U}_U(q[b+368>>2]);break U}i=_S(32);q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;c=q[b+316>>2]-q[b+312>>2]|0;d=(c|0)/12|0;V:{if(!c){break V}if(d>>>0>=357913942){break b}wt(b+368|0);c=n[q[b+376>>2]](b+368|0,c)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=w(d,12)+c;e=q[b+312>>2];m=q[b+316>>2];if((e|0)==(m|0)){break V}while(1){q[c>>2]=0;q[c+4>>2]=0;d=c+8|0;q[d>>2]=0;W:{if(o[e+11|0]>=0){g=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=g;q[d>>2]=q[e+8>>2];break W}g=q[e+4>>2];if(g>>>0>=4294967280){break a}h=q[e>>2];X:{Y:{if(g>>>0>=11){wt(b+368|0);z=g+16&-16;d=n[q[b+376>>2]](b+368|0,z)|0;B=q[q[b+380>>2]+4>>2];if(B){n[B](q[b+368>>2])}q[c>>2]=d;q[c+4>>2]=g;q[c+8>>2]=z|-2147483648;c=d;break Y}o[c+11|0]=g;d=c;if(!g){break X}}kV(d,h,g)}o[c+g|0]=0}c=q[b+356>>2]+12|0;q[b+356>>2]=c;e=e+12|0;if((m|0)!=(e|0)){continue}break}}c=Iw(b+368|0,b+232|0);q[i>>2]=28756;q[i+4>>2]=1;q[i+8>>2]=q[b+352>>2];q[i+12>>2]=q[b+356>>2];q[i+16>>2]=q[b+360>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[i+20>>2]=q[c>>2];q[i+24>>2]=q[c+4>>2];q[i+28>>2]=q[c+8>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;Jw(c);Kw(b+352|0);d=q[f>>2];q[b+360>>2]=0;q[b+352>>2]=0;q[b+356>>2]=0;q[b+204>>2]=N;q[b+200>>2]=H;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+356>>2]=c;q[b+352>>2]=c;q[b+360>>2]=c+8;e=q[b+204>>2];q[c>>2]=q[b+200>>2];q[c+4>>2]=e;q[b+356>>2]=q[b+356>>2]+8;q[b+192>>2]=0;q[b+184>>2]=0;q[b+188>>2]=0;q[b+180>>2]=O;q[b+176>>2]=I;wt(b+368|0);c=n[q[b+376>>2]](b+368|0,8)|0;e=q[q[b+380>>2]+4>>2];if(e){n[e](q[b+368>>2])}q[b+188>>2]=c;q[b+184>>2]=c;q[b+192>>2]=c+8;e=q[b+180>>2];q[c>>2]=q[b+176>>2];q[c+4>>2]=e;q[b+88>>2]=0;q[b+188>>2]=q[b+188>>2]+8;n[q[q[i>>2]>>2]](i)|0;c=q[b+88>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+88>>2]=0}q[b+88>>2]=i;n[q[q[d>>2]+80>>2]](b+208|0,d,b+352|0,b+184|0,b+88|0);c=q[b+208>>2];Z:{if(!c){c=0;break Z}n[q[q[c>>2]>>2]](c)|0;c=c+ -4|0;d=q[b+208>>2];if(!d){break Z}n[q[q[d>>2]+8>>2]](d)|0;q[b+208>>2]=0}d=q[b+88>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b+88>>2]=0}d=q[b+184>>2];_:{if(!d){break _}q[b+188>>2]=d;e=q[b+192>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,d,e-d|0);d=q[q[b+380>>2]+4>>2];if(!d){break _}n[d](q[b+368>>2])}d=q[b+352>>2];$:{if(!d){break $}q[b+356>>2]=d;e=q[b+360>>2];xt(b+368|0);n[q[b+376>>2]](b+368|0,d,e-d|0);d=q[q[b+380>>2]+4>>2];if(!d){break $}n[d](q[b+368>>2])}q[b+80>>2]=0;aa:{if(!c){break aa}n[q[q[c+4>>2]>>2]](c+4|0)|0;d=q[b+80>>2];if(!d){break aa}n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[b+80>>2]=0}q[b+80>>2]=c;d=rB(f,b+80|0,191534);q[a+52>>2]=d;e=q[b+80>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+80>>2]=0;d=q[a+52>>2]}ba:{if(!d){a=_S(32);q[b+368>>2]=a;q[b+372>>2]=21;q[b+376>>2]=-2147483616;e=0;o[a+21|0]=0;d=r[191555]|r[191556]<<8|(r[191557]<<16|r[191558]<<24);f=r[191551]|r[191552]<<8|(r[191553]<<16|r[191554]<<24);o[a+13|0]=f;o[a+14|0]=f>>>8;o[a+15|0]=f>>>16;o[a+16|0]=f>>>24;o[a+17|0]=d;o[a+18|0]=d>>>8;o[a+19|0]=d>>>16;o[a+20|0]=d>>>24;d=r[191550]|r[191551]<<8|(r[191552]<<16|r[191553]<<24);f=r[191546]|r[191547]<<8|(r[191548]<<16|r[191549]<<24);o[a+8|0]=f;o[a+9|0]=f>>>8;o[a+10|0]=f>>>16;o[a+11|0]=f>>>24;o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;d=r[191542]|r[191543]<<8|(r[191544]<<16|r[191545]<<24);f=r[191538]|r[191539]<<8|(r[191540]<<16|r[191541]<<24);o[a|0]=f;o[a+1|0]=f>>>8;o[a+2|0]=f>>>16;o[a+3|0]=f>>>24;o[a+4|0]=d;o[a+5|0]=d>>>8;o[a+6|0]=d>>>16;o[a+7|0]=d>>>24;el(2,b+368|0);if(o[b+379|0]>-1){break ba}_U(q[b+368>>2]);break ba}d=0;q[b+72>>2]=0;e=q[f>>2];ca:{if(!e){break ca}n[q[q[e>>2]>>2]](e)|0;g=q[b+72>>2];if(!g){break ca}n[q[q[g>>2]+8>>2]](g)|0;q[b+72>>2]=0}q[b+72>>2]=e;wu(b+368|0,b+72|0,3);e=q[b+368>>2];da:{if(!e){break da}n[q[q[e>>2]>>2]](e)|0;d=e+ -4|0;e=q[b+368>>2];if(!e){break da}n[q[q[e>>2]+8>>2]](e)|0;q[b+368>>2]=0}e=q[b+72>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[b+72>>2]=0}g=q[a+56>>2];q[b+64>>2]=0;ea:{if(!d){break ea}n[q[q[d+4>>2]>>2]](d+4|0)|0;e=q[b+64>>2];if(!e){break ea}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+64>>2]=0}q[b+64>>2]=d;vB(g,b- -64|0);e=q[b+64>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+64>>2]=0}m=0;q[b+56>>2]=0;e=q[f>>2];fa:{if(!e){break fa}n[q[q[e>>2]>>2]](e)|0;g=q[b+56>>2];if(!g){break fa}n[q[q[g>>2]+8>>2]](g)|0;q[b+56>>2]=0}q[b+56>>2]=e;wu(b+368|0,b+56|0,0);e=q[b+368>>2];ga:{if(!e){break ga}n[q[q[e>>2]>>2]](e)|0;m=e+ -4|0;e=q[b+368>>2];if(!e){break ga}n[q[q[e>>2]+8>>2]](e)|0;q[b+368>>2]=0}e=q[b+56>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[b+56>>2]=0}g=q[a+44>>2];q[b+48>>2]=0;ha:{if(!m){break ha}n[q[q[m+4>>2]>>2]](m+4|0)|0;e=q[b+48>>2];if(!e){break ha}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+48>>2]=0}q[b+48>>2]=m;vB(g,b+48|0);e=q[b+48>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+48>>2]=0}e=q[a+44>>2];g=q[a+56>>2];n[q[q[g>>2]+20>>2]](g,176);n[q[q[g>>2]+24>>2]](g,288);n[q[q[e>>2]+20>>2]](e,176);n[q[q[e>>2]+24>>2]](e,288);e=0;q[b+40>>2]=0;g=q[a+16>>2];ia:{if(!g){break ia}n[q[q[g>>2]>>2]](g)|0;h=q[b+40>>2];if(!h){break ia}n[q[q[h>>2]+8>>2]](h)|0;q[b+40>>2]=0}q[b+40>>2]=g;wu(b+368|0,b+40|0,4);g=q[b+368>>2];ja:{if(!g){break ja}n[q[q[g>>2]>>2]](g)|0;e=g+ -4|0;g=q[b+368>>2];if(!g){break ja}n[q[q[g>>2]+8>>2]](g)|0;q[b+368>>2]=0}g=q[b+40>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[b+40>>2]=0}g=0;q[b+32>>2]=0;f=q[f>>2];ka:{if(!f){break ka}n[q[q[f>>2]>>2]](f)|0;h=q[b+32>>2];if(!h){break ka}n[q[q[h>>2]+8>>2]](h)|0;q[b+32>>2]=0}q[b+32>>2]=f;wu(b+368|0,b+32|0,1);f=q[b+368>>2];la:{if(!f){break la}n[q[q[f>>2]>>2]](f)|0;g=f+ -4|0;f=q[b+368>>2];if(!f){break la}n[q[q[f>>2]+8>>2]](f)|0;q[b+368>>2]=0}f=q[b+32>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[b+32>>2]=0}h=q[a+64>>2];q[b+24>>2]=0;ma:{if(!e){break ma}n[q[q[e+4>>2]>>2]](e+4|0)|0;f=q[b+24>>2];if(!f){break ma}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=e;vB(h,b+24|0);f=q[b+24>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+24>>2]=0}h=q[a+48>>2];q[b+16>>2]=0;na:{if(!g){break na}n[q[q[g+4>>2]>>2]](g+4|0)|0;f=q[b+16>>2];if(!f){break na}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=g;vB(h,b+16|0);f=q[b+16>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+16>>2]=0}f=q[a+48>>2];h=q[a+64>>2];n[q[q[h>>2]+20>>2]](h,176);n[q[q[h>>2]+24>>2]](h,128);n[q[q[f>>2]+20>>2]](f,176);n[q[q[f>>2]+24>>2]](f,128);h=q[a+60>>2];q[b+8>>2]=0;oa:{if(!e){break oa}n[q[q[e+4>>2]>>2]](e+4|0)|0;f=q[b+8>>2];if(!f){break oa}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=e;vB(h,b+8|0);f=q[b+8>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b+8>>2]=0}h=q[a+52>>2];q[b>>2]=0;pa:{if(!g){break pa}n[q[q[g+4>>2]>>2]](g+4|0)|0;f=q[b>>2];if(!f){break pa}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b>>2]=0}q[b>>2]=g;vB(h,b);f=q[b>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[b>>2]=0}f=q[a+52>>2];h=q[a+60>>2];n[q[q[h>>2]+20>>2]](h,176);n[q[q[h>>2]+24>>2]](h,288);n[q[q[f>>2]+20>>2]](f,176);n[q[q[f>>2]+24>>2]](f,288);n[q[q[a>>2]+236>>2]](a,q[a+40>>2]);f=_S(44);dy(f,a);q[a+72>>2]=f;f=1;if((n[q[q[a>>2]+244>>2]](a)|0)!=1){f=(n[q[q[a>>2]+244>>2]](a)|0)==3}o[q[a+4>>2]+313|0]=f;Fv(q[a+4>>2],a);qa:{if(!r[367112]){break qa}z=_S(8);f=nC(z);h=q[a+76>>2];q[a+76>>2]=z;if(h){_U(oC(h));f=q[a+76>>2]}if(q[f>>2]){break qa}f=q[a+76>>2];q[a+76>>2]=0;if(!f){break qa}_U(oC(f))}ra:{if((n[q[q[a>>2]+244>>2]](a)|0)!=1){if((n[q[q[a>>2]+244>>2]](a)|0)!=3){break ra}}o[q[a+44>>2]+68|0]=1;o[q[a+48>>2]+68|0]=1;o[q[a+52>>2]+68|0]=1;o[q[a+56>>2]+68|0]=1;o[q[a+60>>2]+68|0]=1;o[q[a+64>>2]+68|0]=1}Yv(34962,q[b+344>>2]);Yv(34963,q[b+340>>2]);if(r[367112]){iw(q[b+348>>2])}if(g){n[q[q[g+4>>2]+8>>2]](g+4|0)|0}if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0}if(m){n[q[q[m+4>>2]+8>>2]](m+4|0)|0}e=1;if(!d){break ba}n[q[q[d+4>>2]+8>>2]](d+4|0)|0}if(c){n[q[q[c+4>>2]+8>>2]](c+4|0)|0}n[q[q[i>>2]+8>>2]](i)|0}if(s){n[q[q[s+4>>2]+8>>2]](s+4|0)|0}n[q[q[j>>2]+8>>2]](j)|0}if(t){n[q[q[t+4>>2]+8>>2]](t+4|0)|0}n[q[q[k>>2]+8>>2]](k)|0}if(u){n[q[q[u+4>>2]+8>>2]](u+4|0)|0}n[q[q[l>>2]+8>>2]](l)|0}if(x){n[q[q[x+4>>2]+8>>2]](x+4|0)|0}n[q[q[p>>2]+8>>2]](p)|0}if(y){n[q[q[y+4>>2]+8>>2]](y+4|0)|0}n[q[q[v>>2]+8>>2]](v)|0;Jw(b+216|0);Jw(b+232|0);Kw(b+248|0);Kw(b+264|0);Kw(b+280|0);Kw(b+296|0);Kw(b+312|0);Kw(b+328|0);ue=b+384|0;return e}kU();F()}kT();F()}function wu(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;d=ue-368|0;ue=d;a:{b:{if(c>>>0>3){break b}c:{switch(c-1|0){default:c=d+24|0;q[c>>2]=0;q[d+36>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;o[c|0]=0;o[d+27|0]=8;q[d+12>>2]=0;q[d>>2]=2;q[d+16>>2]=1230196560;q[d+20>>2]=1313818964;q[d+28>>2]=0;q[d+32>>2]=4;o[d+13|0]=0;o[d+12|0]=r[26738];o[d+15|0]=9;c=r[26734]|r[26735]<<8|(r[26736]<<16|r[26737]<<24);q[d+4>>2]=r[26730]|r[26731]<<8|(r[26732]<<16|r[26733]<<24);q[d+8>>2]=c;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+40>>2]=11;q[d+44>>2]=-2147483632;q[d+36>>2]=c;o[c+11|0]=0;e=r[26747]|r[26748]<<8|(r[26749]<<16|r[26750]<<24);o[c+7|0]=e;o[c+8|0]=e>>>8;o[c+9|0]=e>>>16;o[c+10|0]=e>>>24;e=r[26744]|r[26745]<<8|(r[26746]<<16|r[26747]<<24);f=r[26740]|r[26741]<<8|(r[26742]<<16|r[26743]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+56>>2]=0;q[d+60>>2]=0;c=d+48|0;q[c>>2]=0;q[c+4>>2]=0;e=d+76|0;q[e>>2]=0;f=d+88|0;q[f>>2]=0;q[f+4>>2]=0;q[d+68>>2]=1970302537;q[d+72>>2]=1448435572;q[d+80>>2]=1129858388;q[d+84>>2]=1146244943;o[d+59|0]=6;q[c>>2]=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);p[d+52>>1]=r[26756]|r[26757]<<8;o[d+54|0]=0;o[e|0]=0;o[d+79|0]=8;c=d+91|0;o[c|0]=8;o[f|0]=0;q[d+64>>2]=1;b=q[b>>2];n[q[q[b>>2]+40>>2]](d+352|0,b,d,3);q[a>>2]=q[d+352>>2];d:{if(o[c|0]>-1){break d}a=q[d+88>>2];b=q[d+80>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break d}n[a](q[d+352>>2])}e:{if(o[d+79|0]>-1){break e}a=q[d+76>>2];b=q[d+68>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break e}n[a](q[d+352>>2])}f:{if(o[d+59|0]>=0){break f}a=q[d+56>>2];b=q[d+48>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break f}n[a](q[d+352>>2])}g:{if(o[d+47|0]>-1){break g}a=q[d+44>>2];b=q[d+36>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break g}n[a](q[d+352>>2])}h:{if(o[d+27|0]>-1){break h}a=q[d+24>>2];b=q[d+16>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break h}n[a](q[d+352>>2])}if(o[d+15|0]>-1){break a}a=q[d+12>>2];b=q[d+4>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break a}n[a](q[d+352>>2]);break a;case 0:case 1:break b;case 2:break c}}c=d+24|0;q[c>>2]=0;q[d+36>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;o[c|0]=0;o[d+27|0]=8;q[d+12>>2]=0;q[d>>2]=2;q[d+16>>2]=1230196560;q[d+20>>2]=1313818964;q[d+28>>2]=0;q[d+32>>2]=4;o[d+13|0]=0;o[d+12|0]=r[26738];o[d+15|0]=9;c=r[26734]|r[26735]<<8|(r[26736]<<16|r[26737]<<24);q[d+4>>2]=r[26730]|r[26731]<<8|(r[26732]<<16|r[26733]<<24);q[d+8>>2]=c;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+40>>2]=11;q[d+44>>2]=-2147483632;q[d+36>>2]=c;o[c+11|0]=0;e=r[26747]|r[26748]<<8|(r[26749]<<16|r[26750]<<24);o[c+7|0]=e;o[c+8|0]=e>>>8;o[c+9|0]=e>>>16;o[c+10|0]=e>>>24;e=r[26744]|r[26745]<<8|(r[26746]<<16|r[26747]<<24);f=r[26740]|r[26741]<<8|(r[26742]<<16|r[26743]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+56>>2]=0;q[d+60>>2]=0;c=d+48|0;q[c>>2]=0;q[c+4>>2]=0;e=d+76|0;q[e>>2]=0;f=d+88|0;q[f>>2]=0;q[d+68>>2]=1970302537;q[d+72>>2]=1448435572;q[d+92>>2]=0;q[d+96>>2]=3;q[d+80>>2]=1129858388;q[d+84>>2]=1146244943;o[d+59|0]=6;q[c>>2]=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);p[d+52>>1]=r[26756]|r[26757]<<8;o[d+54|0]=0;o[e|0]=0;o[d+79|0]=8;o[d+91|0]=8;o[f|0]=0;q[d+100>>2]=0;q[d+104>>2]=0;q[d+108>>2]=0;q[d+64>>2]=1;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+104>>2]=19;q[d+108>>2]=-2147483616;q[d+100>>2]=c;o[c+19|0]=0;e=r[26774]|r[26775]<<8|(r[26776]<<16|r[26777]<<24);o[c+15|0]=e;o[c+16|0]=e>>>8;o[c+17|0]=e>>>16;o[c+18|0]=e>>>24;e=r[26771]|r[26772]<<8|(r[26773]<<16|r[26774]<<24);f=r[26767]|r[26768]<<8|(r[26769]<<16|r[26770]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26763]|r[26764]<<8|(r[26765]<<16|r[26766]<<24);f=r[26759]|r[26760]<<8|(r[26761]<<16|r[26762]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+120|0;q[c>>2]=0;q[c+4>>2]=1;q[d+132>>2]=0;q[d+136>>2]=0;q[d+112>>2]=1129858388;q[d+116>>2]=1146244943;q[d+140>>2]=0;o[d+123|0]=8;o[c|0]=0;q[d+128>>2]=1;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+136>>2]=13;q[d+140>>2]=-2147483632;q[d+132>>2]=c;o[c+13|0]=0;e=r[26788]|r[26789]<<8|(r[26790]<<16|r[26791]<<24);f=r[26784]|r[26785]<<8|(r[26786]<<16|r[26787]<<24);o[c+5|0]=f;o[c+6|0]=f>>>8;o[c+7|0]=f>>>16;o[c+8|0]=f>>>24;o[c+9|0]=e;o[c+10|0]=e>>>8;o[c+11|0]=e>>>16;o[c+12|0]=e>>>24;e=r[26783]|r[26784]<<8|(r[26785]<<16|r[26786]<<24);f=r[26779]|r[26780]<<8|(r[26781]<<16|r[26782]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+152|0;q[c>>2]=0;q[c+4>>2]=2;q[d+164>>2]=0;q[d+168>>2]=0;q[d+144>>2]=1129858388;q[d+148>>2]=1146244943;q[d+172>>2]=0;o[d+155|0]=8;o[c|0]=0;q[d+160>>2]=3;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+168>>2]=25;q[d+172>>2]=-2147483616;q[d+164>>2]=c;o[c+25|0]=0;o[c+24|0]=r[26817];e=r[26813]|r[26814]<<8|(r[26815]<<16|r[26816]<<24);f=r[26809]|r[26810]<<8|(r[26811]<<16|r[26812]<<24);o[c+16|0]=f;o[c+17|0]=f>>>8;o[c+18|0]=f>>>16;o[c+19|0]=f>>>24;o[c+20|0]=e;o[c+21|0]=e>>>8;o[c+22|0]=e>>>16;o[c+23|0]=e>>>24;e=r[26805]|r[26806]<<8|(r[26807]<<16|r[26808]<<24);f=r[26801]|r[26802]<<8|(r[26803]<<16|r[26804]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26797]|r[26798]<<8|(r[26799]<<16|r[26800]<<24);f=r[26793]|r[26794]<<8|(r[26795]<<16|r[26796]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+184|0;q[c>>2]=0;q[c+4>>2]=3;q[d+176>>2]=1129858388;q[d+180>>2]=1146244943;e=d+200|0;q[e>>2]=0;q[e+4>>2]=0;o[d+187|0]=8;o[c|0]=0;q[d+192>>2]=0;q[d+196>>2]=0;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;f=q[q[d+364>>2]+4>>2];if(f){n[f](q[d+352>>2])}q[d+196>>2]=c;q[e>>2]=19;q[e+4>>2]=-2147483616;o[c+19|0]=0;e=r[26834]|r[26835]<<8|(r[26836]<<16|r[26837]<<24);o[c+15|0]=e;o[c+16|0]=e>>>8;o[c+17|0]=e>>>16;o[c+18|0]=e>>>24;e=r[26831]|r[26832]<<8|(r[26833]<<16|r[26834]<<24);f=r[26827]|r[26828]<<8|(r[26829]<<16|r[26830]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26823]|r[26824]<<8|(r[26825]<<16|r[26826]<<24);f=r[26819]|r[26820]<<8|(r[26821]<<16|r[26822]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+216|0;q[c>>2]=0;q[c+4>>2]=4;q[d+208>>2]=1129858388;q[d+212>>2]=1146244943;e=d+232|0;q[e>>2]=0;q[e+4>>2]=0;o[d+219|0]=8;o[c|0]=0;q[d+224>>2]=0;q[d+228>>2]=0;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;f=q[q[d+364>>2]+4>>2];if(f){n[f](q[d+352>>2])}q[d+228>>2]=c;q[e>>2]=20;q[e+4>>2]=-2147483616;o[c+20|0]=0;e=r[26855]|r[26856]<<8|(r[26857]<<16|r[26858]<<24);o[c+16|0]=e;o[c+17|0]=e>>>8;o[c+18|0]=e>>>16;o[c+19|0]=e>>>24;e=r[26851]|r[26852]<<8|(r[26853]<<16|r[26854]<<24);f=r[26847]|r[26848]<<8|(r[26849]<<16|r[26850]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26843]|r[26844]<<8|(r[26845]<<16|r[26846]<<24);f=r[26839]|r[26840]<<8|(r[26841]<<16|r[26842]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+248|0;q[c>>2]=0;q[c+4>>2]=5;q[d+240>>2]=1129858388;q[d+244>>2]=1146244943;o[d+251|0]=8;o[c|0]=0;b=q[b>>2];n[q[q[b>>2]+40>>2]](d+352|0,b,d,8);q[a>>2]=q[d+352>>2];c=d+256|0;while(1){i:{if(o[c+ -5|0]>-1){break i}a=q[c+ -8>>2];b=q[c+ -16>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break i}n[a](q[d+352>>2])}a=c+ -32|0;j:{if(o[c+ -17|0]>-1){break j}b=q[c+ -20>>2];c=q[c+ -28>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,c,b&2147483647);b=q[q[d+364>>2]+4>>2];if(!b){break j}n[b](q[d+352>>2])}c=a;if((d|0)!=(c|0)){continue}break}break a}if(c+ -1>>>0<=1){c=d+24|0;q[c>>2]=0;q[d+36>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;o[c|0]=0;o[d+27|0]=8;q[d+12>>2]=0;q[d>>2]=2;q[d+16>>2]=1230196560;q[d+20>>2]=1313818964;q[d+28>>2]=0;q[d+32>>2]=4;o[d+13|0]=0;o[d+12|0]=r[26738];o[d+15|0]=9;c=r[26734]|r[26735]<<8|(r[26736]<<16|r[26737]<<24);q[d+4>>2]=r[26730]|r[26731]<<8|(r[26732]<<16|r[26733]<<24);q[d+8>>2]=c;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+40>>2]=11;q[d+44>>2]=-2147483632;q[d+36>>2]=c;o[c+11|0]=0;e=r[26747]|r[26748]<<8|(r[26749]<<16|r[26750]<<24);o[c+7|0]=e;o[c+8|0]=e>>>8;o[c+9|0]=e>>>16;o[c+10|0]=e>>>24;e=r[26744]|r[26745]<<8|(r[26746]<<16|r[26747]<<24);f=r[26740]|r[26741]<<8|(r[26742]<<16|r[26743]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+56>>2]=0;q[d+60>>2]=0;c=d+48|0;q[c>>2]=0;q[c+4>>2]=0;q[d+68>>2]=0;q[d+72>>2]=0;q[d+76>>2]=0;o[d+59|0]=6;q[c>>2]=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);p[d+52>>1]=r[26756]|r[26757]<<8;o[d+54|0]=0;q[d+64>>2]=4;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+72>>2]=12;q[d+76>>2]=-2147483632;q[d+68>>2]=c;o[c+12|0]=0;e=r[26868]|r[26869]<<8|(r[26870]<<16|r[26871]<<24);o[c+8|0]=e;o[c+9|0]=e>>>8;o[c+10|0]=e>>>16;o[c+11|0]=e>>>24;e=r[26864]|r[26865]<<8|(r[26866]<<16|r[26867]<<24);f=r[26860]|r[26861]<<8|(r[26862]<<16|r[26863]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+88>>2]=0;q[d+92>>2]=1;c=d+80|0;q[c>>2]=0;q[c+4>>2]=0;q[d+100>>2]=0;q[d+104>>2]=0;q[d+108>>2]=0;o[d+91|0]=6;g=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);q[c>>2]=g;h=r[26756]|r[26757]<<8;p[d+84>>1]=h;o[d+86|0]=0;q[d+96>>2]=4;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+104>>2]=13;q[d+108>>2]=-2147483632;q[d+100>>2]=c;o[c+13|0]=0;e=r[26882]|r[26883]<<8|(r[26884]<<16|r[26885]<<24);f=r[26878]|r[26879]<<8|(r[26880]<<16|r[26881]<<24);o[c+5|0]=f;o[c+6|0]=f>>>8;o[c+7|0]=f>>>16;o[c+8|0]=f>>>24;o[c+9|0]=e;o[c+10|0]=e>>>8;o[c+11|0]=e>>>16;o[c+12|0]=e>>>24;e=r[26877]|r[26878]<<8|(r[26879]<<16|r[26880]<<24);f=r[26873]|r[26874]<<8|(r[26875]<<16|r[26876]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+120>>2]=0;q[d+124>>2]=2;e=d+112|0;c=e;q[c>>2]=0;q[c+4>>2]=0;f=d+140|0;q[f>>2]=0;i=d+152|0;q[i>>2]=0;c=d+144|0;q[c>>2]=0;q[c+4>>2]=0;o[d+123|0]=6;q[e>>2]=g;p[d+116>>1]=h;o[d+118|0]=0;o[f|0]=r[26895];o[d+141|0]=0;o[d+143|0]=9;e=r[26891]|r[26892]<<8|(r[26893]<<16|r[26894]<<24);q[d+132>>2]=r[26887]|r[26888]<<8|(r[26889]<<16|r[26890]<<24);q[d+136>>2]=e;o[d+155|0]=8;q[c>>2]=1129858388;q[c+4>>2]=1146244943;q[d+156>>2]=0;q[d+160>>2]=1;o[i|0]=0;q[d+128>>2]=1;e=d+172|0;q[e>>2]=0;c=d+164|0;q[c>>2]=0;q[c+4>>2]=0;o[d+175|0]=9;o[e|0]=r[26905];e=r[26901]|r[26902]<<8|(r[26903]<<16|r[26904]<<24);q[c>>2]=r[26897]|r[26898]<<8|(r[26899]<<16|r[26900]<<24);q[c+4>>2]=e;o[d+173|0]=0;e=d+184|0;q[e>>2]=0;c=d+176|0;q[c>>2]=0;q[c+4>>2]=0;o[d+187|0]=8;q[d+188>>2]=1;o[e|0]=0;q[c>>2]=1129858388;q[c+4>>2]=1146244943;b=q[b>>2];n[q[q[b>>2]+40>>2]](d+352|0,b,d,6);q[a>>2]=q[d+352>>2];c=d+192|0;while(1){k:{if(o[c+ -5|0]>-1){break k}a=q[c+ -8>>2];b=q[c+ -16>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break k}n[a](q[d+352>>2])}a=c+ -32|0;l:{if(o[c+ -17|0]>-1){break l}b=q[c+ -20>>2];c=q[c+ -28>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,c,b&2147483647);b=q[q[d+364>>2]+4>>2];if(!b){break l}n[b](q[d+352>>2])}c=a;if((d|0)!=(c|0)){continue}break}break a}if((c&-2)==4){c=d+24|0;q[c>>2]=0;q[d+36>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;o[c|0]=0;o[d+27|0]=8;q[d+12>>2]=0;q[d>>2]=2;q[d+16>>2]=1230196560;q[d+20>>2]=1313818964;q[d+28>>2]=0;q[d+32>>2]=4;o[d+13|0]=0;o[d+12|0]=r[26738];o[d+15|0]=9;c=r[26734]|r[26735]<<8|(r[26736]<<16|r[26737]<<24);q[d+4>>2]=r[26730]|r[26731]<<8|(r[26732]<<16|r[26733]<<24);q[d+8>>2]=c;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+40>>2]=11;q[d+44>>2]=-2147483632;q[d+36>>2]=c;o[c+11|0]=0;e=r[26747]|r[26748]<<8|(r[26749]<<16|r[26750]<<24);o[c+7|0]=e;o[c+8|0]=e>>>8;o[c+9|0]=e>>>16;o[c+10|0]=e>>>24;e=r[26744]|r[26745]<<8|(r[26746]<<16|r[26747]<<24);f=r[26740]|r[26741]<<8|(r[26742]<<16|r[26743]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+56>>2]=0;q[d+60>>2]=0;c=d+48|0;q[c>>2]=0;q[c+4>>2]=0;q[d+68>>2]=0;q[d+72>>2]=0;q[d+76>>2]=0;o[d+59|0]=6;q[c>>2]=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);p[d+52>>1]=r[26756]|r[26757]<<8;o[d+54|0]=0;q[d+64>>2]=4;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+72>>2]=12;q[d+76>>2]=-2147483632;q[d+68>>2]=c;o[c+12|0]=0;e=r[26868]|r[26869]<<8|(r[26870]<<16|r[26871]<<24);o[c+8|0]=e;o[c+9|0]=e>>>8;o[c+10|0]=e>>>16;o[c+11|0]=e>>>24;e=r[26864]|r[26865]<<8|(r[26866]<<16|r[26867]<<24);f=r[26860]|r[26861]<<8|(r[26862]<<16|r[26863]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+88>>2]=0;q[d+92>>2]=1;c=d+80|0;q[c>>2]=0;q[c+4>>2]=0;q[d+100>>2]=0;q[d+104>>2]=0;q[d+108>>2]=0;o[d+91|0]=6;g=r[26752]|r[26753]<<8|(r[26754]<<16|r[26755]<<24);q[c>>2]=g;h=r[26756]|r[26757]<<8;p[d+84>>1]=h;o[d+86|0]=0;q[d+96>>2]=4;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+104>>2]=13;q[d+108>>2]=-2147483632;q[d+100>>2]=c;o[c+13|0]=0;e=r[26882]|r[26883]<<8|(r[26884]<<16|r[26885]<<24);f=r[26878]|r[26879]<<8|(r[26880]<<16|r[26881]<<24);o[c+5|0]=f;o[c+6|0]=f>>>8;o[c+7|0]=f>>>16;o[c+8|0]=f>>>24;o[c+9|0]=e;o[c+10|0]=e>>>8;o[c+11|0]=e>>>16;o[c+12|0]=e>>>24;e=r[26877]|r[26878]<<8|(r[26879]<<16|r[26880]<<24);f=r[26873]|r[26874]<<8|(r[26875]<<16|r[26876]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;q[d+120>>2]=0;q[d+124>>2]=2;e=d+112|0;c=e;q[c>>2]=0;q[c+4>>2]=0;f=d+140|0;q[f>>2]=0;i=d+152|0;q[i>>2]=0;c=d+144|0;q[c>>2]=0;q[c+4>>2]=0;o[d+123|0]=6;q[e>>2]=g;p[d+116>>1]=h;o[d+118|0]=0;o[f|0]=r[26895];o[d+141|0]=0;o[d+143|0]=9;e=r[26891]|r[26892]<<8|(r[26893]<<16|r[26894]<<24);q[d+132>>2]=r[26887]|r[26888]<<8|(r[26889]<<16|r[26890]<<24);q[d+136>>2]=e;o[d+155|0]=8;q[c>>2]=1129858388;q[c+4>>2]=1146244943;q[d+156>>2]=0;q[d+160>>2]=1;o[i|0]=0;q[d+128>>2]=1;e=d+172|0;q[e>>2]=0;c=d+164|0;q[c>>2]=0;q[c+4>>2]=0;o[d+175|0]=9;o[e|0]=r[26905];e=r[26901]|r[26902]<<8|(r[26903]<<16|r[26904]<<24);q[c>>2]=r[26897]|r[26898]<<8|(r[26899]<<16|r[26900]<<24);q[c+4>>2]=e;o[d+173|0]=0;e=d+184|0;q[e>>2]=0;c=d+176|0;q[c>>2]=0;q[c+4>>2]=0;o[d+187|0]=8;q[d+188>>2]=1;q[d+192>>2]=3;o[e|0]=0;q[c>>2]=1129858388;q[c+4>>2]=1146244943;q[d+204>>2]=0;q[d+196>>2]=0;q[d+200>>2]=0;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+200>>2]=19;q[d+204>>2]=-2147483616;q[d+196>>2]=c;o[c+19|0]=0;e=r[26774]|r[26775]<<8|(r[26776]<<16|r[26777]<<24);o[c+15|0]=e;o[c+16|0]=e>>>8;o[c+17|0]=e>>>16;o[c+18|0]=e>>>24;e=r[26771]|r[26772]<<8|(r[26773]<<16|r[26774]<<24);f=r[26767]|r[26768]<<8|(r[26769]<<16|r[26770]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26763]|r[26764]<<8|(r[26765]<<16|r[26766]<<24);f=r[26759]|r[26760]<<8|(r[26761]<<16|r[26762]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+216|0;q[c>>2]=0;q[c+4>>2]=2;q[d+228>>2]=0;q[d+232>>2]=0;q[d+208>>2]=1129858388;q[d+212>>2]=1146244943;q[d+236>>2]=0;o[d+219|0]=8;o[c|0]=0;q[d+224>>2]=1;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,16)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+232>>2]=13;q[d+236>>2]=-2147483632;q[d+228>>2]=c;o[c+13|0]=0;e=r[26788]|r[26789]<<8|(r[26790]<<16|r[26791]<<24);f=r[26784]|r[26785]<<8|(r[26786]<<16|r[26787]<<24);o[c+5|0]=f;o[c+6|0]=f>>>8;o[c+7|0]=f>>>16;o[c+8|0]=f>>>24;o[c+9|0]=e;o[c+10|0]=e>>>8;o[c+11|0]=e>>>16;o[c+12|0]=e>>>24;e=r[26783]|r[26784]<<8|(r[26785]<<16|r[26786]<<24);f=r[26779]|r[26780]<<8|(r[26781]<<16|r[26782]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+248|0;q[c>>2]=0;q[c+4>>2]=3;q[d+260>>2]=0;q[d+264>>2]=0;q[d+240>>2]=1129858388;q[d+244>>2]=1146244943;q[d+268>>2]=0;o[d+251|0]=8;o[c|0]=0;q[d+256>>2]=3;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;e=q[q[d+364>>2]+4>>2];if(e){n[e](q[d+352>>2])}q[d+264>>2]=25;q[d+268>>2]=-2147483616;q[d+260>>2]=c;o[c+25|0]=0;o[c+24|0]=r[26817];e=r[26813]|r[26814]<<8|(r[26815]<<16|r[26816]<<24);f=r[26809]|r[26810]<<8|(r[26811]<<16|r[26812]<<24);o[c+16|0]=f;o[c+17|0]=f>>>8;o[c+18|0]=f>>>16;o[c+19|0]=f>>>24;o[c+20|0]=e;o[c+21|0]=e>>>8;o[c+22|0]=e>>>16;o[c+23|0]=e>>>24;e=r[26805]|r[26806]<<8|(r[26807]<<16|r[26808]<<24);f=r[26801]|r[26802]<<8|(r[26803]<<16|r[26804]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26797]|r[26798]<<8|(r[26799]<<16|r[26800]<<24);f=r[26793]|r[26794]<<8|(r[26795]<<16|r[26796]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+280|0;q[c>>2]=0;q[c+4>>2]=4;q[d+272>>2]=1129858388;q[d+276>>2]=1146244943;e=d+296|0;q[e>>2]=0;q[e+4>>2]=0;o[d+283|0]=8;o[c|0]=0;q[d+288>>2]=0;q[d+292>>2]=0;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;f=q[q[d+364>>2]+4>>2];if(f){n[f](q[d+352>>2])}q[d+292>>2]=c;q[e>>2]=19;q[e+4>>2]=-2147483616;o[c+19|0]=0;e=r[26834]|r[26835]<<8|(r[26836]<<16|r[26837]<<24);o[c+15|0]=e;o[c+16|0]=e>>>8;o[c+17|0]=e>>>16;o[c+18|0]=e>>>24;e=r[26831]|r[26832]<<8|(r[26833]<<16|r[26834]<<24);f=r[26827]|r[26828]<<8|(r[26829]<<16|r[26830]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26823]|r[26824]<<8|(r[26825]<<16|r[26826]<<24);f=r[26819]|r[26820]<<8|(r[26821]<<16|r[26822]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+312|0;q[c>>2]=0;q[c+4>>2]=5;q[d+304>>2]=1129858388;q[d+308>>2]=1146244943;e=d+328|0;q[e>>2]=0;q[e+4>>2]=0;o[d+315|0]=8;o[c|0]=0;q[d+320>>2]=0;q[d+324>>2]=0;wt(d+352|0);c=n[q[d+360>>2]](d+352|0,32)|0;f=q[q[d+364>>2]+4>>2];if(f){n[f](q[d+352>>2])}q[d+324>>2]=c;q[e>>2]=20;q[e+4>>2]=-2147483616;o[c+20|0]=0;e=r[26855]|r[26856]<<8|(r[26857]<<16|r[26858]<<24);o[c+16|0]=e;o[c+17|0]=e>>>8;o[c+18|0]=e>>>16;o[c+19|0]=e>>>24;e=r[26851]|r[26852]<<8|(r[26853]<<16|r[26854]<<24);f=r[26847]|r[26848]<<8|(r[26849]<<16|r[26850]<<24);o[c+8|0]=f;o[c+9|0]=f>>>8;o[c+10|0]=f>>>16;o[c+11|0]=f>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=r[26843]|r[26844]<<8|(r[26845]<<16|r[26846]<<24);f=r[26839]|r[26840]<<8|(r[26841]<<16|r[26842]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=d+344|0;q[c>>2]=0;q[c+4>>2]=6;q[d+336>>2]=1129858388;q[d+340>>2]=1146244943;o[d+347|0]=8;o[c|0]=0;b=q[b>>2];n[q[q[b>>2]+40>>2]](d+352|0,b,d,11);q[a>>2]=q[d+352>>2];c=d+352|0;while(1){m:{if(o[c+ -5|0]>-1){break m}a=q[c+ -8>>2];b=q[c+ -16>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,b,a&2147483647);a=q[q[d+364>>2]+4>>2];if(!a){break m}n[a](q[d+352>>2])}a=c+ -32|0;n:{if(o[c+ -17|0]>-1){break n}b=q[c+ -20>>2];c=q[c+ -28>>2];xt(d+352|0);n[q[d+360>>2]](d+352|0,c,b&2147483647);b=q[q[d+364>>2]+4>>2];if(!b){break n}n[b](q[d+352>>2])}c=a;if((d|0)!=(c|0)){continue}break}break a}q[a>>2]=0}ue=d+368|0}function Hw(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;e=ue-464|0;ue=e;a:{if(!d){q[a>>2]=0;break a}y=q[q[b+8>>2]+20>>2];t=lV(_S(84),0,84);f=t;q[f+8>>2]=0;q[f+12>>2]=0;q[f+4>>2]=1;q[f+28>>2]=0;q[f+32>>2]=0;p[f+24>>1]=0;q[f+16>>2]=0;q[f+20>>2]=0;q[f>>2]=28692;q[f+36>>2]=0;q[f+40>>2]=0;q[f+68>>2]=0;q[f+72>>2]=0;q[f+76>>2]=0;q[f+80>>2]=0;V=f,W=n[q[q[c>>2]+20>>2]](c)|0,o[V+24|0]=W;V=f,W=n[q[q[c>>2]+28>>2]](c)|0,o[V+25|0]=W;q[e+440>>2]=0;q[e+444>>2]=2;q[e+432>>2]=1;q[e+436>>2]=3;S=n[q[q[c>>2]+28>>2]](c)|0?2:1;H=b+8|0;L=y&-3;N=f+76|0;O=f+68|0;M=e+288|0;P=e+260|0;I=e+228|0;Q=e+208|0;E=e+196|0;k=e+176|0;G=e+164|0;J=e+144|0;C=e+132|0;B=e+112|0;z=e+100|0;D=e+80|0;j=e+48|0;y=e+32|4;R=e+348|0;i=e+68|0;s=i+3|0;b:{c:{d:{e:{f:{g:{while(1){q[e+344>>2]=0;q[e+336>>2]=0;q[e+340>>2]=0;lV(R,255,84);b=24;if(!n[q[q[c>>2]+20>>2]](c)){b=(n[q[q[c>>2]+112>>2]](c)+n[q[q[c>>2]+120>>2]](c)<<2)+40|0}q[e+364>>2]=160;q[e+368>>2]=176;q[e+356>>2]=128;q[e+360>>2]=144;q[e+348>>2]=0;q[e+352>>2]=64;q[e+336>>2]=b;b=n[q[q[c>>2]+104>>2]](c)|0;f=q[c+68>>2];m=q[c+72>>2];q[e+396>>2]=96;q[e+400>>2]=112;q[e+388>>2]=64;q[e+392>>2]=80;q[e+380>>2]=32;q[e+384>>2]=48;q[e+372>>2]=0;q[e+376>>2]=16;q[e+340>>2]=(w((m-f|0)/244|0,208)+(b<<4)|0)+176;b=128;if(!(!n[q[q[c>>2]+28>>2]](c)|(x|0)!=1)){q[e+404>>2]=128;b=192}q[e+408>>2]=b;V=e,W=((n[q[q[c>>2]+104>>2]](c)<<4)+b|0)+w((q[c+72>>2]-q[c+68>>2]|0)/244|0,208)|0,q[V+344>>2]=W;q[e+328>>2]=0;q[e+320>>2]=0;q[e+324>>2]=0;zw(c,e+336|0,e+320|0);Cw(c,e+336|0,e+320|0,x);Dw(e+304|0,c);m=_S(32);q[e+456>>2]=0;q[e+448>>2]=0;q[e+452>>2]=0;b=q[e+308>>2]-q[e+304>>2]|0;f=(b|0)/12|0;h:{if(!b){break h}if(f>>>0>=357913942){break g}wt(e+32|0);b=n[q[e+40>>2]](e+32|0,b)|0;g=q[q[e+44>>2]+4>>2];if(g){n[g](q[e+32>>2])}q[e+452>>2]=b;q[e+448>>2]=b;q[e+456>>2]=w(f,12)+b;g=q[e+304>>2];l=q[e+308>>2];if((g|0)==(l|0)){break h}while(1){q[b>>2]=0;q[b+4>>2]=0;f=b+8|0;q[f>>2]=0;i:{if(o[g+11|0]>=0){h=q[g+4>>2];q[b>>2]=q[g>>2];q[b+4>>2]=h;q[f>>2]=q[g+8>>2];break i}h=q[g+4>>2];if(h>>>0>=4294967280){break f}u=q[g>>2];j:{k:{if(h>>>0>=11){wt(e+32|0);v=h+16&-16;f=n[q[e+40>>2]](e+32|0,v)|0;A=q[q[e+44>>2]+4>>2];if(A){n[A](q[e+32>>2])}q[b>>2]=f;q[b+4>>2]=h;q[b+8>>2]=v|-2147483648;b=f;break k}o[b+11|0]=h;f=b;if(!h){break j}}kV(f,u,h)}o[b+h|0]=0}b=q[e+452>>2]+12|0;q[e+452>>2]=b;g=g+12|0;if((l|0)!=(g|0)){continue}break}}Iw(e+32|0,e+320|0);q[m>>2]=28756;q[m+4>>2]=1;q[m+8>>2]=q[e+448>>2];q[m+12>>2]=q[e+452>>2];q[m+16>>2]=q[e+456>>2];q[e+456>>2]=0;q[e+448>>2]=0;q[e+452>>2]=0;q[m+20>>2]=q[e+32>>2];q[m+24>>2]=q[e+36>>2];q[m+28>>2]=q[e+40>>2];q[e+40>>2]=0;q[e+32>>2]=0;q[e+36>>2]=0;Jw(e+32|0);Kw(e+448|0);Kw(e+304|0);b=q[(e+440|0)+(x<<2)>>2];f=n[q[q[d>>2]+20>>2]](d,b)|0;q[e+32>>2]=f;V=e,W=sV(f),q[V+36>>2]=W;b=n[q[q[d>>2]+28>>2]](d,b)|0;q[e+448>>2]=b;b=sV(b);q[e+296>>2]=0;q[e+452>>2]=b;n[q[q[m>>2]>>2]](m)|0;b=q[e+296>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+296>>2]=0}q[e+296>>2]=m;h=Lw(H,e+32|0,e+448|0,e+296|0);b=q[e+296>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+296>>2]=0}if(!h){b=Ft(369488,28328,19);EH(e+32|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(e+32|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(e+32|0);pI(b,c);DH(b);c=q[(e+432|0)+(x<<2)>>2];b=n[q[q[d>>2]+20>>2]](d,c)|0;b=Ft(369488,b,sV(b));EH(e+32|0,q[q[b>>2]+ -12>>2]+b|0);f=pL(e+32|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+32|0);pI(b,f);DH(b);b=Ft(369488,28348,18);EH(e+32|0,q[q[b>>2]+ -12>>2]+b|0);f=pL(e+32|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+32|0);pI(b,f);DH(b);b=n[q[q[d>>2]+28>>2]](d,c)|0;b=Ft(369488,b,sV(b));EH(e+32|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(e+32|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(e+32|0);pI(b,c);DH(b);q[a>>2]=0;n[q[q[m>>2]+8>>2]](m)|0;break b}l:{if(r[t+24|0]){o[e+47|0]=10;q[e+32>>2]=2;b=r[28375]|r[28376]<<8;o[y+8|0]=b;o[y+9|0]=b>>>8;f=r[28371]|r[28372]<<8|(r[28373]<<16|r[28374]<<24);b=y;g=r[28367]|r[28368]<<8|(r[28369]<<16|r[28370]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[e+46|0]=0;q[j+8>>2]=0;q[j>>2]=0;q[j+4>>2]=0;q[e+76>>2]=0;q[e+60>>2]=0;o[e+56|0]=0;q[e+48>>2]=1230196560;q[e+52>>2]=1313818964;o[e+59|0]=8;o[e+79|0]=7;q[e+64>>2]=4;b=r[28381]|r[28382]<<8|(r[28383]<<16|r[28384]<<24);o[s|0]=b;o[s+1|0]=b>>>8;o[s+2|0]=b>>>16;o[s+3|0]=b>>>24;b=r[28378]|r[28379]<<8|(r[28380]<<16|r[28381]<<24);o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;o[e+75|0]=0;q[D+8>>2]=0;b=D;q[b>>2]=0;q[b+4>>2]=0;o[e+91|0]=6;f=r[28390]|r[28391]<<8;o[b+4|0]=f;o[b+5|0]=f>>>8;f=r[28386]|r[28387]<<8|(r[28388]<<16|r[28389]<<24);o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;o[e+111|0]=10;q[e+92>>2]=0;q[e+96>>2]=1;o[e+86|0]=0;b=r[28401]|r[28402]<<8;o[z+8|0]=b;o[z+9|0]=b>>>8;f=r[28397]|r[28398]<<8|(r[28399]<<16|r[28400]<<24);b=z;g=r[28393]|r[28394]<<8|(r[28395]<<16|r[28396]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[e+110|0]=0;q[B+8>>2]=0;q[B>>2]=0;q[B+4>>2]=0;q[e+124>>2]=0;o[e+120|0]=0;q[e+112>>2]=1129858388;q[e+116>>2]=1146244943;o[e+123|0]=8;b=q[H>>2];n[q[q[b>>2]+40>>2]](e+448|0,b,e+32|0,3);b=q[e+448>>2];m:{if(!b){b=0;q[e+288>>2]=0;f=1;break m}n[q[q[b>>2]>>2]](b)|0;b=b+ -4|0;f=q[e+448>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+448>>2]=0}q[e+288>>2]=0;n[q[q[b+4>>2]>>2]](b+4|0)|0;g=q[e+288>>2];f=0;if(!g){break m}n[q[q[g+4>>2]+8>>2]](g+4|0)|0;q[e+288>>2]=0;f=0}q[e+288>>2]=b;vB(h,e+288|0);g=q[e+288>>2];if(g){n[q[q[g+4>>2]+8>>2]](g+4|0)|0;q[e+288>>2]=0}if(!f){n[q[q[b+4>>2]+8>>2]](b+4|0)|0}n:{if(o[e+123|0]>-1){break n}b=q[e+120>>2];f=q[e+112>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break n}n[b](q[e+448>>2])}o:{if(o[e+111|0]>-1){break o}b=q[e+108>>2];f=q[e+100>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break o}n[b](q[e+448>>2])}p:{if(o[e+91|0]>=0){break p}b=q[e+88>>2];f=q[e+80>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break p}n[b](q[e+448>>2])}q:{if(o[e+79|0]>-1){break q}b=q[e+76>>2];f=q[e+68>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break q}n[b](q[e+448>>2])}r:{if(o[e+59|0]>-1){break r}b=q[e+56>>2];f=q[e+48>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break r}n[b](q[e+448>>2])}if(o[e+47|0]>-1){break l}b=q[e+44>>2];f=q[e+36>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,f,b&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break l}n[b](q[e+448>>2]);break l}o[e+47|0]=10;q[e+32>>2]=2;b=r[28375]|r[28376]<<8;o[y+8|0]=b;o[y+9|0]=b>>>8;f=r[28371]|r[28372]<<8|(r[28373]<<16|r[28374]<<24);b=y;g=r[28367]|r[28368]<<8|(r[28369]<<16|r[28370]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[e+46|0]=0;q[j+8>>2]=0;q[j>>2]=0;q[j+4>>2]=0;q[e+76>>2]=0;q[e+60>>2]=0;o[e+56|0]=0;q[e+48>>2]=1230196560;q[e+52>>2]=1313818964;o[e+59|0]=8;o[e+79|0]=7;q[e+64>>2]=4;b=r[28381]|r[28382]<<8|(r[28383]<<16|r[28384]<<24);o[s|0]=b;o[s+1|0]=b>>>8;o[s+2|0]=b>>>16;o[s+3|0]=b>>>24;b=r[28378]|r[28379]<<8|(r[28380]<<16|r[28381]<<24);o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;o[e+75|0]=0;q[D+8>>2]=0;b=D;q[b>>2]=0;q[b+4>>2]=0;o[e+91|0]=6;g=r[28390]|r[28391]<<8;o[b+4|0]=g;o[b+5|0]=g>>>8;f=r[28386]|r[28387]<<8|(r[28388]<<16|r[28389]<<24);o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;q[e+92>>2]=0;q[e+96>>2]=4;o[e+86|0]=0;q[z+8>>2]=0;q[z>>2]=0;q[z+4>>2]=0;o[e+108|0]=0;q[e+100>>2]=1867412577;q[e+104>>2]=1818324338;o[e+111|0]=8;q[B+8>>2]=0;b=B;q[b>>2]=0;q[b+4>>2]=0;o[e+123|0]=6;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;q[e+124>>2]=1;q[e+128>>2]=4;o[e+118|0]=0;b=C+8|0;q[b>>2]=0;q[C>>2]=0;q[C+4>>2]=0;o[e+143|0]=9;o[b|0]=r[28412];l=r[28408]|r[28409]<<8|(r[28410]<<16|r[28411]<<24);b=C;u=r[28404]|r[28405]<<8|(r[28406]<<16|r[28407]<<24);o[b|0]=u;o[b+1|0]=u>>>8;o[b+2|0]=u>>>16;o[b+3|0]=u>>>24;o[b+4|0]=l;o[b+5|0]=l>>>8;o[b+6|0]=l>>>16;o[b+7|0]=l>>>24;o[e+141|0]=0;q[J+8>>2]=0;b=J;q[b>>2]=0;q[b+4>>2]=0;o[e+155|0]=6;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;o[e+175|0]=10;q[e+156>>2]=2;q[e+160>>2]=1;o[e+150|0]=0;b=r[28401]|r[28402]<<8;o[G+8|0]=b;o[G+9|0]=b>>>8;f=r[28397]|r[28398]<<8|(r[28399]<<16|r[28400]<<24);b=G;g=r[28393]|r[28394]<<8|(r[28395]<<16|r[28396]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[e+174|0]=0;q[k+8>>2]=0;q[k>>2]=0;q[k+4>>2]=0;o[e+187|0]=8;q[e+188>>2]=0;q[e+192>>2]=1;o[e+184|0]=0;q[e+176>>2]=1129858388;q[e+180>>2]=1146244943;q[E+8>>2]=0;q[E>>2]=0;q[E+4>>2]=0;wt(e+448|0);b=n[q[e+456>>2]](e+448|0,16)|0;f=q[q[e+460>>2]+4>>2];if(f){n[f](q[e+448>>2])}q[e+196>>2]=b;q[e+200>>2]=11;q[e+204>>2]=-2147483632;o[b+11|0]=0;f=r[28421]|r[28422]<<8|(r[28423]<<16|r[28424]<<24);o[b+7|0]=f;o[b+8|0]=f>>>8;o[b+9|0]=f>>>16;o[b+10|0]=f>>>24;f=r[28418]|r[28419]<<8|(r[28420]<<16|r[28421]<<24);g=r[28414]|r[28415]<<8|(r[28416]<<16|r[28417]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;b=Q;q[b>>2]=0;q[b+4>>2]=0;q[b+8>>2]=0;q[e+224>>2]=1;q[e+220>>2]=1;o[e+216|0]=0;q[e+208>>2]=1129858388;q[e+212>>2]=1146244943;o[e+219|0]=8;b=I;q[b+16>>2]=0;q[b+20>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;q[b>>2]=0;q[b+4>>2]=0;q[e+252>>2]=2;q[e+256>>2]=1;o[e+248|0]=0;q[e+240>>2]=1129858388;q[e+244>>2]=1146244943;o[e+251|0]=8;b=P;q[b+8>>2]=0;q[b+12>>2]=0;q[b+16>>2]=0;q[b+20>>2]=0;q[b>>2]=0;q[b+4>>2]=0;q[e+284>>2]=3;o[e+280|0]=0;q[e+272>>2]=1129858388;q[e+276>>2]=1146244943;o[e+283|0]=8;s:{if((n[q[q[c>>2]+112>>2]](c)|0)<1){K=2;b=6;break s}b=o[e+239|0];t:{u:{if((b|0)<=-1){b=(q[e+236>>2]&2147483647)+ -1|0;if(b>>>0>=13){f=r[28435]|r[28436]<<8|(r[28437]<<16|r[28438]<<24);b=q[e+228>>2];g=r[28431]|r[28432]<<8|(r[28433]<<16|r[28434]<<24);o[b+5|0]=g;o[b+6|0]=g>>>8;o[b+7|0]=g>>>16;o[b+8|0]=g>>>24;o[b+9|0]=f;o[b+10|0]=f>>>8;o[b+11|0]=f>>>16;o[b+12|0]=f>>>24;f=r[28430]|r[28431]<<8|(r[28432]<<16|r[28433]<<24);g=r[28426]|r[28427]<<8|(r[28428]<<16|r[28429]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[b+13|0]=0;if(o[e+239|0]<=-1){q[e+232>>2]=13;break t}o[e+239|0]=13;break t}g=q[e+232>>2];break u}g=b&255;b=10}Fw(I,b,13-b|0,g,g,13,28426)}b=n[q[q[c>>2]+112>>2]](c)|0;q[e+252>>2]=2;K=3;q[e+224>>2]=b+ -2>>>0<3?b+ -1|0:0;n[q[q[c>>2]+112>>2]](c)|0;b=7}if((n[q[q[c>>2]+120>>2]](c)|0)>=1){l=(e+32|0)+(b<<5)|0;u=l|4;f=o[l+15|0];v:{w:{if((f|0)<=-1){f=(q[l+12>>2]&2147483647)+ -1|0;if(f>>>0>=13){v=r[28444]|r[28445]<<8|(r[28446]<<16|r[28447]<<24);f=q[u>>2];A=r[28440]|r[28441]<<8|(r[28442]<<16|r[28443]<<24);o[f|0]=A;o[f+1|0]=A>>>8;o[f+2|0]=A>>>16;o[f+3|0]=A>>>24;o[f+4|0]=v;o[f+5|0]=v>>>8;o[f+6|0]=v>>>16;o[f+7|0]=v>>>24;o[f+13|0]=0;g=r[28449]|r[28450]<<8|(r[28451]<<16|r[28452]<<24);v=r[28445]|r[28446]<<8|(r[28447]<<16|r[28448]<<24);o[f+5|0]=v;o[f+6|0]=v>>>8;o[f+7|0]=v>>>16;o[f+8|0]=v>>>24;o[f+9|0]=g;o[f+10|0]=g>>>8;o[f+11|0]=g>>>16;o[f+12|0]=g>>>24;if(o[u+11|0]<=-1){q[l+8>>2]=13;break v}o[u+11|0]=13;break v}g=q[l+8>>2];break w}g=f&255;f=10}Fw(u,f,13-f|0,g,g,13,28440)}f=n[q[q[c>>2]+120>>2]](c)|0;q[l+28>>2]=K;q[l>>2]=f+ -2>>>0<3?f+ -1|0:0;n[q[q[c>>2]+120>>2]](c)|0;b=b+1|0}f=q[H>>2];n[q[q[f>>2]+40>>2]](e+448|0,f,e+32|0,b);b=q[e+448>>2];x:{if(!b){b=0;q[e+24>>2]=0;f=1;break x}n[q[q[b>>2]>>2]](b)|0;b=b+ -4|0;f=q[e+448>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+448>>2]=0}q[e+24>>2]=0;n[q[q[b+4>>2]>>2]](b+4|0)|0;g=q[e+24>>2];f=0;if(!g){break x}n[q[q[g+4>>2]+8>>2]](g+4|0)|0;q[e+24>>2]=0;f=0}q[e+24>>2]=b;vB(h,e+24|0);g=q[e+24>>2];if(g){n[q[q[g+4>>2]+8>>2]](g+4|0)|0;q[e+24>>2]=0}if(!f){n[q[q[b+4>>2]+8>>2]](b+4|0)|0}b=M;while(1){y:{if(o[b+ -5|0]>-1){break y}f=q[b+ -8>>2];g=q[b+ -16>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,g,f&2147483647);f=q[q[e+460>>2]+4>>2];if(!f){break y}n[f](q[e+448>>2])}f=b+ -32|0;z:{if(o[b+ -17|0]>-1){break z}g=q[b+ -20>>2];b=q[b+ -28>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,b,g&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break z}n[b](q[e+448>>2])}b=f;if((b|0)!=(e+32|0)){continue}break}}n[q[q[h>>2]+20>>2]](h,q[e+340>>2]);n[q[q[h>>2]+24>>2]](h,q[e+344>>2]);b=n[q[q[c>>2]+80>>2]](c)|0;q[t+36>>2]=(b|0)<6?b:6;V=t,W=n[q[q[c>>2]+104>>2]](c)|0,q[V+40>>2]=W;q[(x?N:O)>>2]=h;n[q[q[m>>2]+8>>2]](m)|0;Jw(e+320|0);x=x+1|0;if((S|0)!=(x|0)){continue}break}L=(L|0)==1;b=L?10:1;A=(b<<6)- -64|0;l=b<<4;K=A+l|0;u=l+K|0;N=u+32|0;O=u+16|0;C=u+48|0;P=C+l|0;Q=e+224|0;G=e+208|0;s=e+196|0;v=e+176|0;D=e+164|0;I=e+144|0;y=e+132|0;J=e+112|0;z=e+100|0;M=e+80|0;E=e+68|0;m=e+48|0;B=e+32|4;R=e+348|0;x=0;while(1){q[e+340>>2]=0;q[e+344>>2]=0;lV(R,255,84);q[e+420>>2]=K;q[e+416>>2]=A;q[e+412>>2]=64;q[e+352>>2]=0;q[e+336>>2]=60;q[e+364>>2]=N;q[e+360>>2]=O;q[e+356>>2]=u;b=C;if((n[q[q[c>>2]+112>>2]](c)|0)>=1){q[e+424>>2]=C;b=P}if((n[q[q[c>>2]+120>>2]](c)|0)>=1){q[e+428>>2]=b;b=b+l|0}q[e+368>>2]=b;f=n[q[q[c>>2]+104>>2]](c)|0;g=q[c+68>>2];i=q[c+72>>2];q[e+396>>2]=96;q[e+400>>2]=112;q[e+388>>2]=64;q[e+392>>2]=80;q[e+380>>2]=32;q[e+384>>2]=48;q[e+372>>2]=0;q[e+376>>2]=16;q[e+340>>2]=((f<<4)+b|0)+w((i-g|0)/244|0,208);b=128;if(!(!n[q[q[c>>2]+28>>2]](c)|(x|0)!=1)){q[e+404>>2]=128;b=192}q[e+408>>2]=b;V=e,W=((n[q[q[c>>2]+104>>2]](c)<<4)+b|0)+w((q[c+72>>2]-q[c+68>>2]|0)/244|0,208)|0,q[V+344>>2]=W;q[e+328>>2]=0;q[e+320>>2]=0;q[e+324>>2]=0;Bw(c,e+336|0,e+320|0,L);Cw(c,e+336|0,e+320|0,x);Dw(e+304|0,c);i=_S(32);q[e+456>>2]=0;q[e+448>>2]=0;q[e+452>>2]=0;b=q[e+308>>2]-q[e+304>>2]|0;f=(b|0)/12|0;A:{if(!b){break A}if(f>>>0>=357913942){break e}wt(e+32|0);b=n[q[e+40>>2]](e+32|0,b)|0;g=q[q[e+44>>2]+4>>2];if(g){n[g](q[e+32>>2])}q[e+452>>2]=b;q[e+448>>2]=b;q[e+456>>2]=w(f,12)+b;g=q[e+304>>2];j=q[e+308>>2];if((g|0)==(j|0)){break A}while(1){q[b>>2]=0;q[b+4>>2]=0;f=b+8|0;q[f>>2]=0;B:{if(o[g+11|0]>=0){h=q[g+4>>2];q[b>>2]=q[g>>2];q[b+4>>2]=h;q[f>>2]=q[g+8>>2];break B}h=q[g+4>>2];if(h>>>0>=4294967280){break d}k=q[g>>2];C:{D:{if(h>>>0>=11){wt(e+32|0);T=h+16&-16;f=n[q[e+40>>2]](e+32|0,T)|0;U=q[q[e+44>>2]+4>>2];if(U){n[U](q[e+32>>2])}q[b>>2]=f;q[b+4>>2]=h;q[b+8>>2]=T|-2147483648;b=f;break D}o[b+11|0]=h;f=b;if(!h){break C}}kV(f,k,h)}o[b+h|0]=0}b=q[e+452>>2]+12|0;q[e+452>>2]=b;g=g+12|0;if((j|0)!=(g|0)){continue}break}}Iw(e+32|0,e+320|0);q[i>>2]=28756;q[i+4>>2]=1;q[i+8>>2]=q[e+448>>2];q[i+12>>2]=q[e+452>>2];q[i+16>>2]=q[e+456>>2];q[e+456>>2]=0;q[e+448>>2]=0;q[e+452>>2]=0;q[i+20>>2]=q[e+32>>2];q[i+24>>2]=q[e+36>>2];q[i+28>>2]=q[e+40>>2];q[e+40>>2]=0;q[e+32>>2]=0;q[e+36>>2]=0;Jw(e+32|0);Kw(e+448|0);Kw(e+304|0);b=q[(e+432|0)+(x<<2)>>2];f=n[q[q[d>>2]+20>>2]](d,b)|0;q[e+32>>2]=f;V=e,W=sV(f),q[V+36>>2]=W;f=n[q[q[d>>2]+28>>2]](d,b)|0;q[e+448>>2]=f;f=sV(f);q[e+16>>2]=0;q[e+452>>2]=f;n[q[q[i>>2]>>2]](i)|0;f=q[e+16>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+16>>2]=0}q[e+16>>2]=i;h=Lw(H,e+32|0,e+448|0,e+16|0);f=q[e+16>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+16>>2]=0}if(!h){c=Ft(369488,28328,19);EH(e+32|0,q[q[c>>2]+ -12>>2]+c|0);f=pL(e+32|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+32|0);pI(c,f);DH(c);c=n[q[q[d>>2]+20>>2]](d,b)|0;c=Ft(369488,c,sV(c));EH(e+32|0,q[q[c>>2]+ -12>>2]+c|0);f=pL(e+32|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+32|0);pI(c,f);DH(c);c=Ft(369488,28348,18);EH(e+32|0,q[q[c>>2]+ -12>>2]+c|0);f=pL(e+32|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+32|0);pI(c,f);DH(c);b=n[q[q[d>>2]+28>>2]](d,b)|0;b=Ft(369488,b,sV(b));EH(e+32|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(e+32|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(e+32|0);pI(b,c);DH(b);q[a>>2]=0;n[q[q[i>>2]+8>>2]](i)|0;break b}o[e+47|0]=10;q[e+32>>2]=2;b=r[28462]|r[28463]<<8;o[B+8|0]=b;o[B+9|0]=b>>>8;f=r[28458]|r[28459]<<8|(r[28460]<<16|r[28461]<<24);b=B;g=r[28454]|r[28455]<<8|(r[28456]<<16|r[28457]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[e+46|0]=0;b=m;q[b>>2]=0;q[b+4>>2]=0;q[b+8>>2]=0;q[e+64>>2]=2;q[e+60>>2]=0;o[e+56|0]=0;q[e+48>>2]=1230196560;q[e+52>>2]=1313818964;o[e+59|0]=8;q[E+8>>2]=0;q[E>>2]=0;q[E+4>>2]=0;o[e+76|0]=0;q[e+68>>2]=1867407201;q[e+72>>2]=1818324338;o[e+79|0]=8;q[M+8>>2]=0;b=M;q[b>>2]=0;q[b+4>>2]=0;o[e+91|0]=6;g=r[28390]|r[28391]<<8;o[b+4|0]=g;o[b+5|0]=g>>>8;f=r[28386]|r[28387]<<8|(r[28388]<<16|r[28389]<<24);o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;o[e+111|0]=10;q[e+92>>2]=1;q[e+96>>2]=2;o[e+86|0]=0;b=r[28473]|r[28474]<<8;o[z+8|0]=b;o[z+9|0]=b>>>8;j=r[28469]|r[28470]<<8|(r[28471]<<16|r[28472]<<24);b=z;k=r[28465]|r[28466]<<8|(r[28467]<<16|r[28468]<<24);o[b|0]=k;o[b+1|0]=k>>>8;o[b+2|0]=k>>>16;o[b+3|0]=k>>>24;o[b+4|0]=j;o[b+5|0]=j>>>8;o[b+6|0]=j>>>16;o[b+7|0]=j>>>24;o[e+110|0]=0;q[J+8>>2]=0;b=J;q[b>>2]=0;q[b+4>>2]=0;o[e+123|0]=6;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;q[e+124>>2]=1;q[e+128>>2]=2;o[e+118|0]=0;b=y+8|0;q[b>>2]=0;q[y>>2]=0;q[y+4>>2]=0;o[e+143|0]=9;o[b|0]=r[28484];j=r[28480]|r[28481]<<8|(r[28482]<<16|r[28483]<<24);b=y;k=r[28476]|r[28477]<<8|(r[28478]<<16|r[28479]<<24);o[b|0]=k;o[b+1|0]=k>>>8;o[b+2|0]=k>>>16;o[b+3|0]=k>>>24;o[b+4|0]=j;o[b+5|0]=j>>>8;o[b+6|0]=j>>>16;o[b+7|0]=j>>>24;o[e+141|0]=0;q[I+8>>2]=0;b=I;q[b>>2]=0;q[b+4>>2]=0;o[e+155|0]=6;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;o[e+175|0]=10;q[e+156>>2]=2;q[e+160>>2]=1;o[e+150|0]=0;b=r[28494]|r[28495]<<8;o[D+8|0]=b;o[D+9|0]=b>>>8;j=r[28490]|r[28491]<<8|(r[28492]<<16|r[28493]<<24);b=D;k=r[28486]|r[28487]<<8|(r[28488]<<16|r[28489]<<24);o[b|0]=k;o[b+1|0]=k>>>8;o[b+2|0]=k>>>16;o[b+3|0]=k>>>24;o[b+4|0]=j;o[b+5|0]=j>>>8;o[b+6|0]=j>>>16;o[b+7|0]=j>>>24;o[e+174|0]=0;q[v+8>>2]=0;q[v>>2]=0;q[v+4>>2]=0;q[e+204>>2]=0;o[e+187|0]=8;q[e+188>>2]=0;q[e+192>>2]=4;o[e+184|0]=0;q[e+176>>2]=1129858388;q[e+180>>2]=1146244943;o[e+207|0]=7;b=r[28500]|r[28501]<<8|(r[28502]<<16|r[28503]<<24);o[s+3|0]=b;o[s+4|0]=b>>>8;o[s+5|0]=b>>>16;o[s+6|0]=b>>>24;b=r[28497]|r[28498]<<8|(r[28499]<<16|r[28500]<<24);o[s|0]=b;o[s+1|0]=b>>>8;o[s+2|0]=b>>>16;o[s+3|0]=b>>>24;o[e+203|0]=0;q[G+8>>2]=0;b=G;q[b>>2]=0;q[b+4>>2]=0;o[e+219|0]=6;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b|0]=f;o[b+1|0]=f>>>8;o[b+2|0]=f>>>16;o[b+3|0]=f>>>24;q[e+220>>2]=3;o[e+214|0]=0;b=q[H>>2];n[q[q[b>>2]+40>>2]](e+448|0,b,e+32|0,6);b=q[e+448>>2];E:{if(!b){g=0;q[e+8>>2]=0;b=1;break E}n[q[q[b>>2]>>2]](b)|0;g=b+ -4|0;b=q[e+448>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+448>>2]=0}q[e+8>>2]=0;n[q[q[g+4>>2]>>2]](g+4|0)|0;f=q[e+8>>2];b=0;if(!f){break E}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[e+8>>2]=0;b=0}q[e+8>>2]=g;vB(h,e+8|0);f=q[e+8>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[e+8>>2]=0}n[q[q[h>>2]+20>>2]](h,q[e+340>>2]);n[q[q[h>>2]+24>>2]](h,q[e+344>>2]);q[(x?80:72)+t>>2]=h;if(!b){n[q[q[g+4>>2]+8>>2]](g+4|0)|0}b=Q;while(1){F:{if(o[b+ -5|0]>-1){break F}f=q[b+ -8>>2];g=q[b+ -16>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,g,f&2147483647);f=q[q[e+460>>2]+4>>2];if(!f){break F}n[f](q[e+448>>2])}f=b+ -32|0;G:{if(o[b+ -17|0]>-1){break G}g=q[b+ -20>>2];b=q[b+ -28>>2];xt(e+448|0);n[q[e+456>>2]](e+448|0,b,g&2147483647);b=q[q[e+460>>2]+4>>2];if(!b){break G}n[b](q[e+448>>2])}b=f;if((b|0)!=(e+32|0)){continue}break}n[q[q[i>>2]+8>>2]](i)|0;Jw(e+320|0);x=x+1|0;if((S|0)!=(x|0)){continue}break}V=t,W=n[q[q[c>>2]+112>>2]](c)|0,q[V+28>>2]=W;V=t,W=n[q[q[c>>2]+120>>2]](c)|0,q[V+32>>2]=W;b=n[q[q[c>>2]+80>>2]](c)|0;q[t+36>>2]=(b|0)<6?b:6;V=t,W=n[q[q[c>>2]+104>>2]](c)|0,q[V+40>>2]=W;V=t,W=n[q[q[c>>2]+12>>2]](c)|0,q[V+20>>2]=W;if(q[t+36>>2]>=1){d=t+44|0;b=0;while(1){f=n[q[q[c>>2]+56>>2]](c,b)|0;if((b|0)==6){break c}q[d+(b<<2)>>2]=f;b=b+1|0;if((b|0)>2]){continue}break}}q[a>>2]=t;break a}kU();F()}kT();F()}kU();F()}kT();F()}kq(28824);F()}Jw(e+320|0);n[q[q[t>>2]+8>>2]](t)|0}ue=e+464|0}function Al(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0,t=0,v=0,y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=0,N=x(0),O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;d=ue-368|0;ue=d;a:while(1){P=b+ -64|0;g=b+ -288|0;b:while(1){i=a;c:while(1){d:{e:{f:{g:{f=b-i|0;a=(f|0)/288|0;if(a>>>0<=5){h:{switch(a-2|0){case 0:a=q[P+44>>2];v=d+40|0;q[v>>2]=q[P+40>>2];q[v+4>>2]=a;a=q[P+36>>2];e=d+32|0;q[e>>2]=q[P+32>>2];q[e+4>>2]=a;a=q[P+28>>2];k=d+24|0;q[k>>2]=q[P+24>>2];q[k+4>>2]=a;a=q[P+20>>2];f=d+16|0;q[f>>2]=q[P+16>>2];q[f+4>>2]=a;a=q[P+12>>2];q[d+8>>2]=q[P+8>>2];q[d+12>>2]=a;a=q[P+4>>2];q[d>>2]=q[P>>2];q[d+4>>2]=a;Xs(d+304|0,d);a=nt(d+240|0,q[c>>2]+72|0);y=u[a+8>>2];z=u[a>>2];A=u[a+4>>2];B=u[d+312>>2];C=u[d+304>>2];D=u[d+308>>2];a=nt(d+352|0,q[c>>2]+84|0);E=u[a+8>>2];F=u[a>>2];G=u[a+4>>2];a=q[i+268>>2];q[v>>2]=q[i+264>>2];q[v+4>>2]=a;a=q[i+260>>2];q[e>>2]=q[i+256>>2];q[e+4>>2]=a;a=q[i+252>>2];q[k>>2]=q[i+248>>2];q[k+4>>2]=a;a=q[i+244>>2];q[f>>2]=q[i+240>>2];q[f+4>>2]=a;a=q[i+236>>2];q[d+8>>2]=q[i+232>>2];q[d+12>>2]=a;a=q[i+228>>2];q[d>>2]=q[i+224>>2];q[d+4>>2]=a;Xs(d+304|0,d);a=nt(d+240|0,q[c>>2]+72|0);H=u[a+8>>2];I=u[a+4>>2];J=u[d+308>>2];K=u[d+312>>2];L=x(u[d+304>>2]-u[a>>2]);a=nt(d+352|0,q[c>>2]+84|0);if(!(x(x(x(F*x(C-z))+x(G*x(D-A)))+x(E*x(B-y)))>x(x(x(L*u[a>>2])+x(x(J-I)*u[a+4>>2]))+x(x(K-H)*u[a+8>>2])))){break d}bo(i,g);break d;case 2:co(i,i+288|0,i+576|0,g,c);break d;case 1:break g;case 3:break h;default:break d}}eo(i,i+288|0,i+576|0,i+864|0,g,c);break d}if((f|0)<=2015){g=i+576|0;fo(i,i+288|0,g,c);a=i+864|0;if((b|0)==(a|0)){break d}j=d+116|0;v=d+68|0;k=d+180|0;P=d+253|0;X=d+248|0;while(1){f=a;e=q[a+268>>2];S=d+40|0;h=S;q[h>>2]=q[a+264>>2];q[h+4>>2]=e;e=q[a+260>>2];T=d+32|0;h=T;q[h>>2]=q[a+256>>2];q[h+4>>2]=e;e=q[a+252>>2];U=d+24|0;h=U;q[h>>2]=q[a+248>>2];q[h+4>>2]=e;e=q[a+244>>2];Y=d+16|0;h=Y;q[h>>2]=q[a+240>>2];q[h+4>>2]=e;e=q[a+236>>2];q[d+8>>2]=q[a+232>>2];q[d+12>>2]=e;e=q[a+228>>2];q[d>>2]=q[a+224>>2];q[d+4>>2]=e;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];a=g;e=q[a+268>>2];q[S>>2]=q[a+264>>2];q[S+4>>2]=e;e=q[a+260>>2];q[T>>2]=q[a+256>>2];q[T+4>>2]=e;e=q[a+252>>2];q[U>>2]=q[a+248>>2];q[U+4>>2]=e;e=q[a+244>>2];q[h>>2]=q[a+240>>2];q[h+4>>2]=e;e=q[a+236>>2];q[d+8>>2]=q[a+232>>2];q[d+12>>2]=e;e=q[a+228>>2];q[d>>2]=q[a+224>>2];q[d+4>>2]=e;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);if(!!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){s=q[f>>2];q[f>>2]=0;e=f;t=r[e+21|0]|r[e+22|0]<<8|(r[e+23|0]<<16|r[e+24|0]<<24);a=P;h=r[e+17|0]|r[e+18|0]<<8|(r[e+19|0]<<16|r[e+20|0]<<24);o[a|0]=h;o[a+1|0]=h>>>8;o[a+2|0]=h>>>16;o[a+3|0]=h>>>24;o[a+4|0]=t;o[a+5|0]=t>>>8;o[a+6|0]=t>>>16;o[a+7|0]=t>>>24;a=q[e+16>>2];q[X>>2]=q[e+12>>2];q[X+4>>2]=a;a=q[e+8>>2];q[d+240>>2]=q[e+4>>2];q[d+244>>2]=a;R=q[e+36>>2];V=q[e+32>>2];W=q[e+28>>2];O=q[e+40>>2];if(q[O+4>>2]){q[f+36>>2]=191;q[f+40>>2]=4896}t=kV(d,f+44|0,228);i:{while(1){a=g;g=q[a>>2];q[a>>2]=0;h=q[e>>2];if(h){n[q[q[h>>2]+8>>2]](h)|0;q[e>>2]=0}q[e>>2]=g;g=q[a+8>>2];q[e+4>>2]=q[a+4>>2];q[e+8>>2]=g;g=q[a+16>>2];q[e+12>>2]=q[a+12>>2];q[e+16>>2]=g;h=r[a+21|0]|r[a+22|0]<<8|(r[a+23|0]<<16|r[a+24|0]<<24);g=r[a+17|0]|r[a+18|0]<<8|(r[a+19|0]<<16|r[a+20|0]<<24);o[e+17|0]=g;o[e+18|0]=g>>>8;o[e+19|0]=g>>>16;o[e+20|0]=g>>>24;o[e+21|0]=h;o[e+22|0]=h>>>8;o[e+23|0]=h>>>16;o[e+24|0]=h>>>24;h=e+40|0;g=q[h>>2];q[h>>2]=4896;q[e+36>>2]=191;g=q[g+4>>2];if(g){n[g](q[e+28>>2])}g=q[a+32>>2];q[e+28>>2]=q[a+28>>2];q[e+32>>2]=g;M=a+36|0;q[e+36>>2]=q[M>>2];g=a+40|0;q[e+40>>2]=q[g>>2];q[M>>2]=191;q[g>>2]=4896;q[e+100>>2]=q[a+100>>2];g=q[a+96>>2];q[e+92>>2]=q[a+92>>2];q[e+96>>2]=g;g=q[a+88>>2];q[e+84>>2]=q[a+84>>2];q[e+88>>2]=g;g=q[a+80>>2];q[e+76>>2]=q[a+76>>2];q[e+80>>2]=g;g=q[a+72>>2];q[e+68>>2]=q[a+68>>2];q[e+72>>2]=g;g=q[a+64>>2];q[e+60>>2]=q[a+60>>2];q[e+64>>2]=g;g=q[a+56>>2];q[e+52>>2]=q[a+52>>2];q[e+56>>2]=g;g=q[a+48>>2];q[e+44>>2]=q[a+44>>2];q[e+48>>2]=g;g=q[a+156>>2];q[e+152>>2]=q[a+152>>2];q[e+156>>2]=g;g=q[a+148>>2];q[e+144>>2]=q[a+144>>2];q[e+148>>2]=g;g=q[a+140>>2];q[e+136>>2]=q[a+136>>2];q[e+140>>2]=g;g=q[a+132>>2];q[e+128>>2]=q[a+128>>2];q[e+132>>2]=g;g=q[a+124>>2];q[e+120>>2]=q[a+120>>2];q[e+124>>2]=g;g=q[a+116>>2];q[e+112>>2]=q[a+112>>2];q[e+116>>2]=g;g=q[a+164>>2];q[e+160>>2]=q[a+160>>2];q[e+164>>2]=g;g=q[a+172>>2];q[e+168>>2]=q[a+168>>2];q[e+172>>2]=g;g=q[a+180>>2];q[e+176>>2]=q[a+176>>2];q[e+180>>2]=g;g=q[a+188>>2];q[e+184>>2]=q[a+184>>2];q[e+188>>2]=g;g=q[a+196>>2];q[e+192>>2]=q[a+192>>2];q[e+196>>2]=g;g=q[a+204>>2];q[e+200>>2]=q[a+200>>2];q[e+204>>2]=g;g=q[a+212>>2];q[e+208>>2]=q[a+208>>2];q[e+212>>2]=g;g=q[a+228>>2];q[e+224>>2]=q[a+224>>2];q[e+228>>2]=g;g=q[a+260>>2];q[e+256>>2]=q[a+256>>2];q[e+260>>2]=g;g=q[a+268>>2];q[e+264>>2]=q[a+264>>2];q[e+268>>2]=g;g=q[a+252>>2];q[e+248>>2]=q[a+248>>2];q[e+252>>2]=g;g=q[a+244>>2];q[e+240>>2]=q[a+240>>2];q[e+244>>2]=g;g=q[a+236>>2];q[e+232>>2]=q[a+232>>2];q[e+236>>2]=g;g=i;h=g;if((a|0)==(g|0)){break i}g=k;e=q[g+44>>2];l=t+344|0;h=l;q[h>>2]=q[g+40>>2];q[h+4>>2]=e;e=q[g+36>>2];m=t+336|0;h=m;q[h>>2]=q[g+32>>2];q[h+4>>2]=e;e=q[g+28>>2];p=t+328|0;h=p;q[h>>2]=q[g+24>>2];q[h+4>>2]=e;e=q[g+20>>2];M=t+320|0;h=M;q[h>>2]=q[g+16>>2];q[h+4>>2]=e;e=q[g+12>>2];q[t+312>>2]=q[g+8>>2];q[t+316>>2]=e;e=q[g+4>>2];h=t;q[h+304>>2]=q[g>>2];q[h+308>>2]=e;Xs(h+352|0,h+304|0);nt(h+288|0,q[c>>2]+72|0);L=u[h+296>>2];N=u[h+360>>2];y=u[h+288>>2];z=u[h+352>>2];A=u[h+292>>2];B=u[h+356>>2];nt(h+272|0,q[c>>2]+84|0);C=u[h+280>>2];D=u[h+272>>2];E=u[h+276>>2];e=a+ -24|0;g=q[e+4>>2];q[l>>2]=q[e>>2];q[l+4>>2]=g;e=a+ -32|0;g=q[e+4>>2];q[m>>2]=q[e>>2];q[m+4>>2]=g;e=a+ -40|0;g=q[e+4>>2];q[p>>2]=q[e>>2];q[p+4>>2]=g;e=a+ -48|0;g=q[e+4>>2];q[M>>2]=q[e>>2];q[M+4>>2]=g;e=a+ -56|0;g=q[e+4>>2];q[h+312>>2]=q[e>>2];q[h+316>>2]=g;e=a+ -64|0;g=q[e+4>>2];q[h+304>>2]=q[e>>2];q[h+308>>2]=g;Xs(h+352|0,h+304|0);nt(h+288|0,q[c>>2]+72|0);F=u[h+296>>2];G=u[h+360>>2];H=u[h+288>>2];I=u[h+352>>2];J=u[h+292>>2];K=u[h+356>>2];nt(h+272|0,q[c>>2]+84|0);g=a+ -288|0;e=a;if(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[h+272>>2])+x(x(K-J)*u[h+276>>2]))+x(x(G-F)*u[h+280>>2]))){continue}break}h=a}g=h;e=a+4|0;h=q[g>>2];if(h){n[q[q[h>>2]+8>>2]](h)|0;q[g>>2]=0}m=a+224|0;l=a+160|0;p=a+112|0;Q=a+44|0;q[g>>2]=s;h=e;e=P;M=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[h+13|0]=e;o[h+14|0]=e>>>8;o[h+15|0]=e>>>16;o[h+16|0]=e>>>24;o[h+17|0]=M;o[h+18|0]=M>>>8;o[h+19|0]=M>>>16;o[h+20|0]=M>>>24;e=q[X+4>>2];q[h+8>>2]=q[X>>2];q[h+12>>2]=e;e=q[t+244>>2];q[h>>2]=q[t+240>>2];q[h+4>>2]=e;q[a+36>>2]=191;e=q[a+40>>2];q[a+40>>2]=4896;e=q[e+4>>2];if(e){n[e](q[a+28>>2])}q[a+28>>2]=W;q[g+32>>2]=V;q[a+40>>2]=O;q[a+36>>2]=R;q[Q+56>>2]=q[t+56>>2];a=q[t+52>>2];q[Q+48>>2]=q[t+48>>2];q[Q+52>>2]=a;a=q[S+4>>2];q[Q+40>>2]=q[S>>2];q[Q+44>>2]=a;a=q[T+4>>2];q[Q+32>>2]=q[T>>2];q[Q+36>>2]=a;a=q[U+4>>2];q[Q+24>>2]=q[U>>2];q[Q+28>>2]=a;a=q[Y+4>>2];q[Q+16>>2]=q[Y>>2];q[Q+20>>2]=a;a=q[t+12>>2];q[Q+8>>2]=q[t+8>>2];q[Q+12>>2]=a;a=q[t+4>>2];q[Q>>2]=q[t>>2];q[Q+4>>2]=a;a=v;g=q[a+44>>2];q[p+40>>2]=q[a+40>>2];q[p+44>>2]=g;g=q[a+36>>2];q[p+32>>2]=q[a+32>>2];q[p+36>>2]=g;g=q[a+28>>2];q[p+24>>2]=q[a+24>>2];q[p+28>>2]=g;g=q[a+20>>2];q[p+16>>2]=q[a+16>>2];q[p+20>>2]=g;g=q[a+12>>2];q[p+8>>2]=q[a+8>>2];q[p+12>>2]=g;g=q[a+4>>2];q[p>>2]=q[a>>2];q[p+4>>2]=g;a=j;g=q[a+52>>2];q[l+48>>2]=q[a+48>>2];q[l+52>>2]=g;g=q[a+44>>2];q[l+40>>2]=q[a+40>>2];q[l+44>>2]=g;g=q[a+36>>2];q[l+32>>2]=q[a+32>>2];q[l+36>>2]=g;g=q[a+28>>2];q[l+24>>2]=q[a+24>>2];q[l+28>>2]=g;g=q[a+20>>2];q[l+16>>2]=q[a+16>>2];q[l+20>>2]=g;g=q[a+12>>2];q[l+8>>2]=q[a+8>>2];q[l+12>>2]=g;g=q[a+4>>2];q[l>>2]=q[a>>2];q[l+4>>2]=g;a=k;g=q[a+44>>2];q[m+40>>2]=q[a+40>>2];q[m+44>>2]=g;g=q[a+36>>2];q[m+32>>2]=q[a+32>>2];q[m+36>>2]=g;g=q[a+28>>2];q[m+24>>2]=q[a+24>>2];q[m+28>>2]=g;g=q[a+20>>2];q[m+16>>2]=q[a+16>>2];q[m+20>>2]=g;g=q[a+12>>2];q[m+8>>2]=q[a+8>>2];q[m+12>>2]=g;g=q[a+4>>2];q[m>>2]=q[a>>2];q[m+4>>2]=g}g=f;a=f+288|0;if((b|0)!=(a|0)){continue}break}break d}k=w((f>>>0)/576|0,288);v=k+i|0;j:{if((f|0)>=287713){a=w((f>>>0)/1152|0,288);e=eo(i,a+i|0,v,a+v|0,g,c);break j}e=fo(i,v,g,c)}a=q[i+268>>2];l=d+40|0;f=l;q[f>>2]=q[i+264>>2];q[f+4>>2]=a;a=q[i+260>>2];m=d+32|0;f=m;q[f>>2]=q[i+256>>2];q[f+4>>2]=a;a=q[i+252>>2];p=d+24|0;f=p;q[f>>2]=q[i+248>>2];q[f+4>>2]=a;a=q[i+244>>2];s=d+16|0;f=s;q[f>>2]=q[i+240>>2];q[f+4>>2]=a;a=q[i+236>>2];q[d+8>>2]=q[i+232>>2];q[d+12>>2]=a;a=q[i+228>>2];q[d>>2]=q[i+224>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];f=i+k|0;a=q[f+268>>2];q[l>>2]=q[f+264>>2];q[l+4>>2]=a;a=q[f+260>>2];q[m>>2]=q[f+256>>2];q[m+4>>2]=a;a=q[f+252>>2];q[p>>2]=q[f+248>>2];q[p+4>>2]=a;a=q[f+244>>2];q[s>>2]=q[f+240>>2];q[s+4>>2]=a;a=q[f+236>>2];q[d+8>>2]=q[f+232>>2];q[d+12>>2]=a;a=q[f+228>>2];q[d>>2]=q[f+224>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);k:{if(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2]))){a=g;break k}O=i+224|0;k=f+224|0;f=g;while(1){a=f+ -288|0;if((i|0)==(a|0)){M=O+40|0;f=M;a=q[f+4>>2];q[l>>2]=q[f>>2];q[l+4>>2]=a;t=O+32|0;f=t;a=q[f+4>>2];q[m>>2]=q[f>>2];q[m+4>>2]=a;h=O+24|0;f=h;a=q[f+4>>2];q[p>>2]=q[f>>2];q[p+4>>2]=a;j=O+16|0;f=j;a=q[f+4>>2];q[s>>2]=q[f>>2];q[s+4>>2]=a;v=O+8|0;f=v;a=q[f+4>>2];q[d+8>>2]=q[f>>2];q[d+12>>2]=a;a=q[O+4>>2];q[d>>2]=q[O>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];a=P;f=q[a+44>>2];q[l>>2]=q[a+40>>2];q[l+4>>2]=f;f=q[a+36>>2];q[m>>2]=q[a+32>>2];q[m+4>>2]=f;f=q[a+28>>2];q[p>>2]=q[a+24>>2];q[p+4>>2]=f;f=q[a+20>>2];q[s>>2]=q[a+16>>2];q[s+4>>2]=f;f=q[a+12>>2];q[d+8>>2]=q[a+8>>2];q[d+12>>2]=f;f=q[a+4>>2];q[d>>2]=q[a>>2];q[d+4>>2]=f;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);f=i+288|0;if(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2]))){break e}if((g|0)==(f|0)){break d}while(1){a=q[M+4>>2];q[l>>2]=q[M>>2];q[l+4>>2]=a;a=q[t+4>>2];q[m>>2]=q[t>>2];q[m+4>>2]=a;a=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=a;a=q[j+4>>2];q[s>>2]=q[j>>2];q[s+4>>2]=a;a=q[v+4>>2];q[d+8>>2]=q[v>>2];q[d+12>>2]=a;a=q[O+4>>2];q[d>>2]=q[O>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];a=q[f+268>>2];q[l>>2]=q[f+264>>2];q[l+4>>2]=a;a=q[f+260>>2];q[m>>2]=q[f+256>>2];q[m+4>>2]=a;a=q[f+252>>2];q[p>>2]=q[f+248>>2];q[p+4>>2]=a;a=q[f+244>>2];q[s>>2]=q[f+240>>2];q[s+4>>2]=a;a=q[f+236>>2];q[d+8>>2]=q[f+232>>2];q[d+12>>2]=a;a=q[f+228>>2];q[d>>2]=q[f+224>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);if(!!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){bo(f,g);f=f+288|0;break e}f=f+288|0;if((g|0)!=(f|0)){continue}break}break d}h=f+ -24|0;j=q[h+4>>2];q[l>>2]=q[h>>2];q[l+4>>2]=j;h=f+ -32|0;j=q[h+4>>2];q[m>>2]=q[h>>2];q[m+4>>2]=j;h=f+ -40|0;j=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=j;h=f+ -48|0;j=q[h+4>>2];q[s>>2]=q[h>>2];q[s+4>>2]=j;h=f+ -56|0;j=q[h+4>>2];q[d+8>>2]=q[h>>2];q[d+12>>2]=j;j=f+ -64|0;f=q[j+4>>2];q[d>>2]=q[j>>2];q[d+4>>2]=f;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];f=k;j=q[f+44>>2];q[l>>2]=q[f+40>>2];q[l+4>>2]=j;j=q[f+36>>2];q[m>>2]=q[f+32>>2];q[m+4>>2]=j;j=q[f+28>>2];q[p>>2]=q[f+24>>2];q[p+4>>2]=j;j=q[f+20>>2];q[s>>2]=q[f+16>>2];q[s+4>>2]=j;j=q[f+12>>2];q[d+8>>2]=q[f+8>>2];q[d+12>>2]=j;j=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=j;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);f=a;if(!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){continue}break}bo(i,a);e=e+1|0}f=i+288|0;if(f>>>0>=a>>>0){break f}while(1){R=v+224|0;while(1){k=f;j=q[f+268>>2];q[l>>2]=q[f+264>>2];q[l+4>>2]=j;j=q[f+260>>2];q[m>>2]=q[f+256>>2];q[m+4>>2]=j;j=q[f+252>>2];q[p>>2]=q[f+248>>2];q[p+4>>2]=j;j=q[f+244>>2];q[s>>2]=q[f+240>>2];q[s+4>>2]=j;j=q[f+236>>2];q[d+8>>2]=q[f+232>>2];q[d+12>>2]=j;j=q[f+228>>2];q[d>>2]=q[f+224>>2];q[d+4>>2]=j;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];V=R+40|0;h=V;j=q[h+4>>2];q[l>>2]=q[h>>2];q[l+4>>2]=j;W=R+32|0;h=W;j=q[h+4>>2];q[m>>2]=q[h>>2];q[m+4>>2]=j;O=R+24|0;h=O;j=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=j;M=R+16|0;h=M;j=q[h+4>>2];q[s>>2]=q[h>>2];q[s+4>>2]=j;t=R+8|0;h=t;j=q[h+4>>2];q[d+8>>2]=q[h>>2];q[d+12>>2]=j;j=q[R+4>>2];q[d>>2]=q[R>>2];q[d+4>>2]=j;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);f=f+288|0;if(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2]))){continue}break}while(1){h=a+ -24|0;j=q[h+4>>2];q[l>>2]=q[h>>2];q[l+4>>2]=j;h=a+ -32|0;j=q[h+4>>2];q[m>>2]=q[h>>2];q[m+4>>2]=j;h=a+ -40|0;j=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=j;h=a+ -48|0;j=q[h+4>>2];q[s>>2]=q[h>>2];q[s+4>>2]=j;h=a+ -56|0;j=q[h+4>>2];q[d+8>>2]=q[h>>2];q[d+12>>2]=j;h=a+ -64|0;j=q[h+4>>2];q[d>>2]=q[h>>2];q[d+4>>2]=j;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];j=q[V+4>>2];q[l>>2]=q[V>>2];q[l+4>>2]=j;j=q[W+4>>2];q[m>>2]=q[W>>2];q[m+4>>2]=j;j=q[O+4>>2];q[p>>2]=q[O>>2];q[p+4>>2]=j;j=q[M+4>>2];q[s>>2]=q[M>>2];q[s+4>>2]=j;j=q[t+4>>2];q[d+8>>2]=q[t>>2];q[d+12>>2]=j;j=q[R+4>>2];q[d>>2]=q[R>>2];q[d+4>>2]=j;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);a=a+ -288|0;if(!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){continue}break}if(k>>>0>a>>>0){f=k;break f}else{bo(k,a);v=(k|0)==(v|0)?a:v;e=e+1|0;continue}}}fo(i,i+288|0,g,c);break d}l:{if((f|0)==(v|0)){break l}a=v;k=q[a+268>>2];q[l>>2]=q[a+264>>2];q[l+4>>2]=k;k=q[a+260>>2];q[m>>2]=q[a+256>>2];q[m+4>>2]=k;k=q[a+252>>2];q[p>>2]=q[a+248>>2];q[p+4>>2]=k;k=q[a+244>>2];q[s>>2]=q[a+240>>2];q[s+4>>2]=k;k=q[a+236>>2];q[d+8>>2]=q[a+232>>2];q[d+12>>2]=k;k=q[a+228>>2];q[d>>2]=q[a+224>>2];q[d+4>>2]=k;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];a=q[f+268>>2];q[l>>2]=q[f+264>>2];q[l+4>>2]=a;a=q[f+260>>2];q[m>>2]=q[f+256>>2];q[m+4>>2]=a;a=q[f+252>>2];q[p>>2]=q[f+248>>2];q[p+4>>2]=a;a=q[f+244>>2];q[s>>2]=q[f+240>>2];q[s+4>>2]=a;a=q[f+236>>2];q[d+8>>2]=q[f+232>>2];q[d+12>>2]=a;a=q[f+228>>2];q[d>>2]=q[f+224>>2];q[d+4>>2]=a;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);if(!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){break l}bo(f,v);e=e+1|0}if(!e){k=go(i,f,c);a=f+288|0;if(go(a,b,c)){b=f;a=i;if(!k){continue a}break d}if(k){continue b}}if(((f-i|0)/288|0)<((b-f|0)/288|0)){Al(i,f,c);a=f+288|0;continue b}Al(f+288|0,b,c);b=f;a=i;continue a}a=g;if((f|0)==(a|0)){break d}while(1){i=q[M+4>>2];q[l>>2]=q[M>>2];q[l+4>>2]=i;i=q[t+4>>2];q[m>>2]=q[t>>2];q[m+4>>2]=i;i=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=i;i=q[j+4>>2];q[s>>2]=q[j>>2];q[s+4>>2]=i;i=q[v+4>>2];q[d+8>>2]=q[v>>2];q[d+12>>2]=i;i=q[O+4>>2];q[d>>2]=q[O>>2];q[d+4>>2]=i;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];i=f;f=q[f+268>>2];q[l>>2]=q[i+264>>2];q[l+4>>2]=f;f=q[i+260>>2];q[m>>2]=q[i+256>>2];q[m+4>>2]=f;f=q[i+252>>2];q[p>>2]=q[i+248>>2];q[p+4>>2]=f;f=q[i+244>>2];q[s>>2]=q[i+240>>2];q[s+4>>2]=f;f=q[i+236>>2];q[d+8>>2]=q[i+232>>2];q[d+12>>2]=f;f=q[i+228>>2];q[d>>2]=q[i+224>>2];q[d+4>>2]=f;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);f=i+288|0;if(!(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2])))){continue}while(1){k=q[M+4>>2];q[l>>2]=q[M>>2];q[l+4>>2]=k;k=q[t+4>>2];q[m>>2]=q[t>>2];q[m+4>>2]=k;k=q[h+4>>2];q[p>>2]=q[h>>2];q[p+4>>2]=k;k=q[j+4>>2];q[s>>2]=q[j>>2];q[s+4>>2]=k;k=q[v+4>>2];q[d+8>>2]=q[v>>2];q[d+12>>2]=k;k=q[O+4>>2];q[d>>2]=q[O>>2];q[d+4>>2]=k;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);L=u[d+248>>2];N=u[d+312>>2];y=u[d+240>>2];z=u[d+304>>2];A=u[d+244>>2];B=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);C=u[d+360>>2];D=u[d+352>>2];E=u[d+356>>2];e=a+ -24|0;k=q[e+4>>2];q[l>>2]=q[e>>2];q[l+4>>2]=k;e=a+ -32|0;k=q[e+4>>2];q[m>>2]=q[e>>2];q[m+4>>2]=k;e=a+ -40|0;k=q[e+4>>2];q[p>>2]=q[e>>2];q[p+4>>2]=k;e=a+ -48|0;k=q[e+4>>2];q[s>>2]=q[e>>2];q[s+4>>2]=k;e=a+ -56|0;k=q[e+4>>2];q[d+8>>2]=q[e>>2];q[d+12>>2]=k;e=a+ -64|0;k=q[e+4>>2];q[d>>2]=q[e>>2];q[d+4>>2]=k;Xs(d+304|0,d);nt(d+240|0,q[c>>2]+72|0);F=u[d+248>>2];G=u[d+312>>2];H=u[d+240>>2];I=u[d+304>>2];J=u[d+244>>2];K=u[d+308>>2];nt(d+352|0,q[c>>2]+84|0);a=a+ -288|0;if(x(x(x(D*x(z-y))+x(E*x(B-A)))+x(C*x(N-L)))>x(x(x(x(I-H)*u[d+352>>2])+x(x(K-J)*u[d+356>>2]))+x(x(G-F)*u[d+360>>2]))){continue}break}if(i>>>0>=a>>>0){continue c}bo(i,a);continue}}break}break}break}ue=d+368|0}function YA(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=0,j=x(0),k=x(0),l=0,m=0,o=x(0),p=x(0),s=0,t=0,v=x(0),y=x(0),z=0,C=0,D=0,F=0,G=0,H=0,I=x(0),J=x(0),K=0,L=0,M=0,N=0,O=0,P=0,Q=x(0),R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=x(0),Z=x(0),_=x(0),$=x(0),aa=x(0),ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=x(0),wa=0,xa=0,ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=x(0),Ea=x(0),Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=x(0),Sa=x(0),Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;d=ue-544|0;ue=d;i=q[a+28>>2];s=q[a+24>>2];a:{if((i|0)==(s|0)){break a}b:{if(q[b+48>>2]!=1){break b}h=i-s|0;if(h){l=(h|0)/240|0;m=d+256|0;h=0;e=d+504|0;while(1){c:{if(!h){Xs(d+224|0,s+256|0);Xs(d+480|0,q[a+24>>2]+16|0);o=x(u[d+236>>2]-u[d+492>>2]);J=x(u[d+228>>2]-u[d+484>>2]);k=x(u[d+224>>2]-u[d+480>>2]);j=x(u[d+232>>2]-u[d+488>>2]);break c}if((l+ -1|0)==(h|0)){f=w(h,240);Xs(d+224|0,(f+s|0)+16|0);Xs(d+480|0,(f+q[a+24>>2]|0)+ -224|0);o=x(u[d+236>>2]-u[d+492>>2]);J=x(u[d+228>>2]-u[d+484>>2]);k=x(u[d+224>>2]-u[d+480>>2]);j=x(u[d+232>>2]-u[d+488>>2]);break c}f=w(h,240);Xs(d+224|0,(f+s|0)+256|0);Xs(d+480|0,(f+q[a+24>>2]|0)+ -224|0);o=x(u[d+236>>2]-u[d+492>>2]);J=x(u[d+228>>2]-u[d+484>>2]);k=x(u[d+224>>2]-u[d+480>>2]);j=x(u[d+232>>2]-u[d+488>>2])}g=x(x(x(k*k)+x(J*J))+x(j*j));if(!(g>2];n[q[q[f>>2]+88>>2]](d+224|0,f);nt(d+416|0,d+224|0);v=u[d+428>>2];g=x(o*v);y=x(g-g);$=u[d+420>>2];aa=u[d+416>>2];o=x(x(k*$)-x(J*aa));p=u[d+424>>2];k=x(x(j*aa)-x(k*p));j=x(x(J*p)-x(j*$));g=x(x(o*o)+x(x(k*k)+x(j*j)));if(!(g>2]=y;g=x(v*y);u[d+252>>2]=g-g;u[d+224>>2]=j;u[d+228>>2]=k;u[d+248>>2]=x(aa*k)-x($*j);u[d+232>>2]=o;u[d+244>>2]=x(p*j)-x(aa*o);u[d+240>>2]=x($*o)-x(p*k);f=q[d+428>>2];q[m+8>>2]=q[d+424>>2];q[m+12>>2]=f;f=q[d+420>>2];q[m>>2]=q[d+416>>2];q[m+4>>2]=f;it(d+480|0,d+224|0);f=q[d+540>>2];q[d+280>>2]=q[d+536>>2];q[d+284>>2]=f;f=q[d+532>>2];q[d+272>>2]=q[d+528>>2];q[d+276>>2]=f;f=q[d+524>>2];q[d+264>>2]=q[d+520>>2];q[d+268>>2]=f;f=q[d+516>>2];q[m>>2]=q[d+512>>2];q[m+4>>2]=f;f=q[e+4>>2];q[d+248>>2]=q[e>>2];q[d+252>>2]=f;f=q[d+500>>2];q[d+240>>2]=q[d+496>>2];q[d+244>>2]=f;f=q[d+492>>2];q[d+232>>2]=q[d+488>>2];q[d+236>>2]=f;f=q[d+484>>2];q[d+224>>2]=q[d+480>>2];q[d+228>>2]=f;zj(d+480|0,d+224|0);j=u[d+480>>2];y=u[d+484>>2];v=u[d+488>>2];g=u[d+492>>2];o=x(x(E(x(x(x(x(j*j)+x(y*y))+x(v*v))+x(g*g))))+x(9999999747378752e-21));u[d+484>>2]=y/o;u[d+480>>2]=j/o;u[d+492>>2]=g/o;u[d+488>>2]=v/o;f=q[d+484>>2];l=q[a+36>>2]+(h<<4)|0;i=l;q[i>>2]=q[d+480>>2];q[i+4>>2]=f;f=q[d+492>>2];q[i+8>>2]=q[d+488>>2];q[i+12>>2]=f;h=h+1|0;s=q[a+24>>2];l=(q[a+28>>2]-s|0)/240|0;if(h>>>0>>0){continue}break}}l=q[a+36>>2];h=q[l+4>>2];i=q[a+48>>2];f=i;q[f>>2]=q[l>>2];q[f+4>>2]=h;h=q[l+12>>2];q[f+8>>2]=q[l+8>>2];q[f+12>>2]=h;l=q[a+40>>2]+ -16|0;h=q[l+4>>2];i=q[a+52>>2]+ -16|0;f=i;q[f>>2]=q[l>>2];q[f+4>>2]=h;h=q[l+12>>2];q[f+8>>2]=q[l+8>>2];q[f+12>>2]=h;i=q[a+28>>2];s=q[a+24>>2];if(((i-s|0)/240|0)+ -1>>>0<2){break b}h=1;while(1){i=h<<4;f=q[a+36>>2];h=h+1|0;Aj(d+224|0,(i+f|0)+ -16|0,f+(h<<4)|0,x(.5));Aj(d+480|0,d+224|0,i+q[a+36>>2]|0,x(.6666666865348816));f=q[d+484>>2];l=i+q[a+48>>2]|0;i=l;q[i>>2]=q[d+480>>2];q[i+4>>2]=f;f=q[d+492>>2];q[i+8>>2]=q[d+488>>2];q[i+12>>2]=f;i=q[a+28>>2];s=q[a+24>>2];if(h>>>0<((i-s|0)/240|0)+ -1>>>0){continue}break}}if(q[b+12>>2]>=2){e=a+60|0;ms(e);h=q[a+24>>2];if((h|0)!=q[a+28>>2]){f=0;l=d+240|0;while(1){q[d+488>>2]=0;q[d+492>>2]=0;q[d+480>>2]=0;q[d+484>>2]=0;i=w(f,240)+h|0;h=q[i+60>>2];q[d+264>>2]=q[i+56>>2];q[d+268>>2]=h;h=q[i+52>>2];q[d+256>>2]=q[i+48>>2];q[d+260>>2]=h;h=q[i+44>>2];q[d+248>>2]=q[i+40>>2];q[d+252>>2]=h;h=q[i+36>>2];q[l>>2]=q[i+32>>2];q[l+4>>2]=h;h=q[i+20>>2];q[d+224>>2]=q[i+16>>2];q[d+228>>2]=h;h=q[i+28>>2];q[d+232>>2]=q[i+24>>2];q[d+236>>2]=h;if(r[b+44|0]){vu(d+224|0,c,u[i+204>>2])}h=q[a+8>>2];n[q[q[h>>2]+88>>2]](d+400|0,h);nt(d+416|0,d+400|0);h=q[a+8>>2];n[q[q[h>>2]+92>>2]](d+368|0,h);su(d+224|0,nt(d+464|0,d+368|0),q[b+24>>2],r[b+16|0]);Xs(d+416|0,d+224|0);h=q[d+428>>2];q[d+488>>2]=q[d+424>>2];q[d+492>>2]=h;h=q[d+420>>2];q[d+480>>2]=q[d+416>>2];q[d+484>>2]=h;js(e,d+480|0);f=f+1|0;h=q[a+24>>2];if(f>>>0<(q[a+28>>2]-h|0)/240>>>0){continue}break}}ls(e);s=q[a+24>>2];i=q[a+28>>2]}f=-1;C=q[a+148>>2];D=C;l=q[a+20>>2];h=l;if((i|0)!=(s|0)){Ta=C<<1;Ua=C<<3;Va=w(C,11);Wa=w(C,10);Xa=w(C,7);Ya=w(C,6);Za=w(C,5);_a=C<<2;$a=a+60|0;R=d+304|0;z=d+264|0;h=l;while(1){if(q[b+12>>2]>=1){t=w(xa,240)+s|0;ab=t+88|0;bb=t+87|0;cb=t+75|0;db=t+86|0;eb=t+74|0;s=t+85|0;D=t+73|0;F=t+84|0;K=t+72|0;N=t+83|0;S=t+71|0;T=t+82|0;V=t+70|0;W=t+81|0;ba=t+69|0;ca=t+80|0;da=t+68|0;ea=t+79|0;ka=t+67|0;ma=t+78|0;wa=t+66|0;na=t+77|0;oa=t+65|0;pa=t+76|0;qa=t- -64|0;ra=t+92|0;sa=t+96|0;Fa=t+4|0;ta=t+204|0;i=t+16|0;la=0;while(1){f=i;e=q[f+44>>2];q[d+520>>2]=q[f+40>>2];q[d+524>>2]=e;e=q[f+36>>2];q[d+512>>2]=q[f+32>>2];q[d+516>>2]=e;e=q[f+28>>2];q[d+504>>2]=q[f+24>>2];q[d+508>>2]=e;e=q[f+20>>2];q[d+496>>2]=q[f+16>>2];q[d+500>>2]=e;e=q[f+4>>2];q[d+480>>2]=q[f>>2];q[d+484>>2]=e;e=q[f+12>>2];q[d+488>>2]=q[f+8>>2];q[d+492>>2]=e;if(r[b+44|0]){vu(d+480|0,c,u[ta>>2])}Ys(d+480|0,d+464|0,d+416|0,d+400|0);f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+384|0,f);nt(d+224|0,d+384|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+352|0,f);tu(d+400|0,d+464|0,nt(d+368|0,d+352|0),q[b+24>>2]);ua=q[Fa>>2];O=q[t>>2];G=(ua|0)<((O|0)/2|0);y=u[(G?ab:sa)>>2];H=r[ea|0];Ga=r[ka|0];L=r[ma|0];Ha=r[wa|0];fa=r[pa|0];Ia=r[qa|0];ga=r[na|0];Ja=r[oa|0];ha=r[N|0];Ka=r[S|0];ia=r[T|0];La=r[V|0];ja=r[ca|0];Ma=r[da|0];U=r[W|0];Na=r[ba|0];M=r[bb|0];Oa=r[cb|0];m=r[db|0];Pa=r[eb|0];e=r[F|0];Qa=r[K|0];f=r[s|0];X=r[D|0];v=u[ra>>2];P=q[b+12>>2];yp(d+224|0);yp(z);yp(R);q[d+308>>2]=0;q[d+312>>2]=0;q[d+272>>2]=0;q[d+264>>2]=0;q[d+268>>2]=0;q[d+228>>2]=0;q[d+232>>2]=0;O=O+ -1|0;g=x(x(w(P,ua)+la|0)/x(w(O,P)|0));g=x(g+g);j=G?g:x(x(1)-x(g+x(-1)));v=x(y+x(j*x(v-y)));g=u[d+464>>2];u[d+304>>2]=x(v*x(.5))*g;u[d+224>>2]=g*x(v*x(-.5));g=x(B(x(A(x(x(j*x(f-X|0))+x(X>>>0)),x(255))),x(0)));d:{if(g=x(0)){f=~~g>>>0;break d}f=0}f=f<<8;g=x(B(x(A(x(x(j*x(e-Qa|0))+x(Qa>>>0)),x(255))),x(0)));e:{if(g=x(0)){e=~~g>>>0;break e}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(m-Pa|0))+x(Pa>>>0)),x(255))),x(0)));f:{if(g=x(0)){m=~~g>>>0;break f}m=0}e=m<<16|e;g=x(B(x(A(x(x(j*x(M-Oa|0))+x(Oa>>>0)),x(255))),x(0)));g:{if(g=x(0)){m=~~g>>>0;break g}m=0}q[f+316>>2]=e|m<<24;g=x(B(x(A(x(x(j*x(U-Na|0))+x(Na>>>0)),x(255))),x(0)));h:{if(g=x(0)){e=~~g>>>0;break h}e=0}f=e<<8;g=x(B(x(A(x(x(j*x(ja-Ma|0))+x(Ma>>>0)),x(255))),x(0)));i:{if(g=x(0)){e=~~g>>>0;break i}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(ia-La|0))+x(La>>>0)),x(255))),x(0)));j:{if(g=x(0)){m=~~g>>>0;break j}m=0}e=m<<16|e;g=x(B(x(A(x(x(j*x(ha-Ka|0))+x(Ka>>>0)),x(255))),x(0)));k:{if(g=x(0)){m=~~g>>>0;break k}m=0}q[f+276>>2]=e|m<<24;g=x(B(x(A(x(x(j*x(ga-Ja|0))+x(Ja>>>0)),x(255))),x(0)));l:{if(g=x(0)){e=~~g>>>0;break l}e=0}f=e<<8;g=x(B(x(A(x(x(j*x(fa-Ia|0))+x(Ia>>>0)),x(255))),x(0)));m:{if(g=x(0)){e=~~g>>>0;break m}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(L-Ha|0))+x(Ha>>>0)),x(255))),x(0)));n:{if(g=x(0)){m=~~g>>>0;break n}m=0}e=m<<16|e;g=x(B(x(A(x(x(j*x(H-Ga|0))+x(Ga>>>0)),x(255))),x(0)));o:{if(g=x(0)){m=~~g>>>0;break o}m=0}q[f+236>>2]=e|m<<24;M=la|ua;f=q[b+12>>2];p:{if((f|0)>=2){ns(d+368|0,$a,x(x(x(la|0)/x(f|0))+x(q[Fa>>2])));yp(d+384|0);q[z+8>>2]=q[d+376>>2];f=q[d+372>>2];q[z>>2]=q[d+368>>2];q[z+4>>2]=f;break p}yp(d+368|0);q[z+8>>2]=q[d+408>>2];f=q[d+404>>2];q[z>>2]=q[d+400>>2];q[z+4>>2]=f}f=q[d+228>>2];q[h>>2]=q[d+224>>2];q[h+4>>2]=f;f=q[d+236>>2];q[h+8>>2]=q[d+232>>2];q[h+12>>2]=f;fa=d+256|0;e=fa;f=q[e+4>>2];q[h+32>>2]=q[e>>2];q[h+36>>2]=f;ga=d+248|0;e=ga;f=q[e+4>>2];q[h+24>>2]=q[e>>2];q[h+28>>2]=f;ha=d+240|0;e=ha;f=q[e+4>>2];q[h+16>>2]=q[e>>2];q[h+20>>2]=f;P=z+32|0;e=P;f=q[e+4>>2];U=h+C|0;m=U;q[m+32>>2]=q[e>>2];q[m+36>>2]=f;G=z+24|0;e=G;f=q[e+4>>2];q[m+24>>2]=q[e>>2];q[m+28>>2]=f;H=z+16|0;e=H;f=q[e+4>>2];q[m+16>>2]=q[e>>2];q[m+20>>2]=f;L=z+8|0;e=L;f=q[e+4>>2];q[m+8>>2]=q[e>>2];q[m+12>>2]=f;f=q[z+4>>2];q[m>>2]=q[z>>2];q[m+4>>2]=f;f=q[P+4>>2];m=h+_a|0;e=m;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;ia=R+32|0;e=ia;f=q[e+4>>2];X=h+Za|0;m=X;q[m+32>>2]=q[e>>2];q[m+36>>2]=f;ja=R+24|0;e=ja;f=q[e+4>>2];q[m+24>>2]=q[e>>2];q[m+28>>2]=f;U=R+16|0;e=U;f=q[e+4>>2];q[m+16>>2]=q[e>>2];q[m+20>>2]=f;m=R+8|0;e=m;f=q[e+4>>2];q[X+8>>2]=q[e>>2];q[X+12>>2]=f;f=q[R+4>>2];q[X>>2]=q[R>>2];q[X+4>>2]=f;f=h+Ta|0;q:{if(!M){break q}f=h+Ya|0;if((O|0)==(ua|0)){q[a+12>>2]=q[a+12>>2]+2;break q}e=q[d+228>>2];q[f>>2]=q[d+224>>2];q[f+4>>2]=e;e=q[d+236>>2];q[f+8>>2]=q[d+232>>2];q[f+12>>2]=e;e=q[fa+4>>2];q[f+32>>2]=q[fa>>2];q[f+36>>2]=e;e=q[ga+4>>2];q[f+24>>2]=q[ga>>2];q[f+28>>2]=e;e=q[ha+4>>2];q[f+16>>2]=q[ha>>2];q[f+20>>2]=e;f=q[P+4>>2];M=h+Xa|0;e=M;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;f=q[P+4>>2];M=h+Wa|0;e=M;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;f=q[ia+4>>2];M=h+Va|0;e=M;q[e+32>>2]=q[ia>>2];q[e+36>>2]=f;f=q[ja+4>>2];q[e+24>>2]=q[ja>>2];q[e+28>>2]=f;f=q[U+4>>2];q[e+16>>2]=q[U>>2];q[e+20>>2]=f;f=q[m+4>>2];q[e+8>>2]=q[m>>2];q[e+12>>2]=f;f=q[R+4>>2];q[e>>2]=q[R>>2];q[e+4>>2]=f;q[a+12>>2]=q[a+12>>2]+2;f=h+Ua|0}h=f;la=la+1|0;if((O|0)!=(ua|0)?(la|0)>2]:0){continue}break}s=q[a+24>>2];i=q[a+28>>2]}xa=xa+1|0;f=(i-s|0)/240|0;if(xa>>>0>>0){continue}break}D=q[a+148>>2];f=f+ -1|0}W=w(f,q[b+12>>2]);if((W|0)!=-1){L=D<<1;fa=D<<3;ga=w(D,11);ha=w(D,10);ia=w(D,6);ja=D<<2;U=w(D,5);M=w(D,3);wa=w(D,7);m=w(D,9);f=q[a+20>>2];s=0;while(1){r:{s:{if(!s){Cp(d+480|0,f+M|0,f+D|0);nt(d+224|0,d+480|0);v=u[d+224>>2];y=u[d+228>>2];g=u[d+232>>2];Q=x(x(x(v*v)+x(y*y))+x(g*g));if(Q>2];k=u[d+228>>2];j=u[d+232>>2];g=x(x(x(o*o)+x(k*k))+x(j*j));if(!(g>2];Z=u[d+228>>2];_=u[d+224>>2];na=f+32|0;i=na;c=q[i+4>>2];ba=d+256|0;e=ba;q[e>>2]=q[i>>2];q[e+4>>2]=c;oa=f+24|0;i=oa;c=q[i+4>>2];ca=d+248|0;e=ca;q[e>>2]=q[i>>2];q[e+4>>2]=c;qa=f+16|0;i=qa;c=q[i+4>>2];pa=d+240|0;e=pa;q[e>>2]=q[i>>2];q[e+4>>2]=c;ra=f+8|0;i=ra;c=q[i+4>>2];S=d+232|0;e=S;q[e>>2]=q[i>>2];q[e+4>>2]=c;c=q[f+4>>2];q[d+224>>2]=q[f>>2];q[d+228>>2]=c;q[d+384>>2]=q[F+12>>2];c=q[F+36>>2];K=d+424|0;i=K;q[i>>2]=q[F+32>>2];q[i+4>>2]=c;c=q[F+28>>2];q[d+416>>2]=q[F+24>>2];q[d+420>>2]=c;N=f+U|0;sa=N+32|0;i=sa;c=q[i+4>>2];da=d+512|0;e=da;q[e>>2]=q[i>>2];q[e+4>>2]=c;ta=N+24|0;i=ta;c=q[i+4>>2];ea=d+504|0;e=ea;q[e>>2]=q[i>>2];q[e+4>>2]=c;G=N+16|0;i=G;c=q[i+4>>2];O=d+496|0;e=O;q[e>>2]=q[i>>2];q[e+4>>2]=c;H=N+8|0;i=H;c=q[i+4>>2];T=d+488|0;e=T;q[e>>2]=q[i>>2];q[e+4>>2]=c;c=q[N+4>>2];q[d+480>>2]=q[N>>2];q[d+484>>2]=c;t:{if(q[b+48>>2]==1){u:{if((s|0)==(W|0)){c=q[a+52>>2]+ -16|0;o=u[c+12>>2];k=u[c+8>>2];I=u[c>>2];j=u[c+4>>2];break u}i=q[b+12>>2];e=q[a+48>>2]+((s|0)/(i|0)<<4)|0;c=q[e+4>>2];q[d+464>>2]=q[e>>2];q[d+468>>2]=c;c=q[e+12>>2];q[d+472>>2]=q[e+8>>2];q[d+476>>2]=c;c=q[e+28>>2];q[d+408>>2]=q[e+24>>2];q[d+412>>2]=c;c=q[e+20>>2];q[d+400>>2]=q[e+16>>2];q[d+404>>2]=c;Aj(d+368|0,d+464|0,d+400|0,x(x((s>>>0)%(i>>>0)|0)/x(i|0)));o=u[d+380>>2];k=u[d+376>>2];I=u[d+368>>2];j=u[d+372>>2]}Aa=u[d+224>>2];yp(d+464|0);Ba=x(I*I);Ca=x(j*j);Da=x(k*k);Ea=x(o*o);Ra=x(j*k);Sa=x(I*o);p=x(Ra+Sa);va=x(x(p+p)*x(0));J=x(I*k);$=x(j*o);p=x(J-$);aa=x(x(x(x(x(x(-Ba)-Ca)+Da)+Ea)*x(0))+x(va-x(p+p)));u[d+472>>2]=Y+x(Aa*aa);q[S>>2]=q[d+472>>2];p=x(J+$);va=x(x(p+p)*x(0));p=x(I*j);k=x(k*o);j=x(p-k);o=x(va+x(x(x(j+j)*x(0))-x(x(x(Ba-Ca)-Da)+Ea)));u[d+464>>2]=_+x(Aa*o);j=x(Ra-Sa);va=x(x(j+j)*x(0));j=x(p+k);j=x(va+x(x(x(x(x(Ca-Ba)-Da)+Ea)*x(0))-x(j+j)));u[d+468>>2]=Z+x(Aa*j);c=q[d+468>>2];q[d+224>>2]=q[d+464>>2];q[d+228>>2]=c;yp(d+464|0);k=u[d+480>>2];yp(d+464|0);u[d+472>>2]=Y+x(aa*k);q[T>>2]=q[d+472>>2];u[d+468>>2]=Z+x(j*k);u[d+464>>2]=_+x(o*k);break t}c=q[a+8>>2];n[q[q[c>>2]+88>>2]](d+400|0,c);nt(d+464|0,d+400|0);k=u[d+468>>2];p=u[d+464>>2];o=x(x(v*k)-x(y*p));j=u[d+472>>2];k=x(x(y*j)-x(g*k));j=x(x(g*p)-x(v*j));p=x(x(o*o)+x(x(k*k)+x(j*j)));if(!(p>2];yp(d+464|0);u[d+472>>2]=Y-x(o*p);q[S>>2]=q[d+472>>2];u[d+468>>2]=Z-x(j*p);u[d+464>>2]=_-x(k*p);c=q[d+468>>2];q[d+224>>2]=q[d+464>>2];q[d+228>>2]=c;yp(d+464|0);p=u[d+480>>2];yp(d+464|0);u[d+472>>2]=Y-x(o*p);q[T>>2]=q[d+472>>2];u[d+468>>2]=Z-x(j*p);u[d+464>>2]=_-x(k*p)}c=q[d+468>>2];q[d+480>>2]=q[d+464>>2];q[d+484>>2]=c;Cp(d+400|0,d+224|0,d+480|0);nt(d+464|0,d+400|0);o=u[d+464>>2];k=u[d+468>>2];j=u[d+472>>2];p=x(x(x(o*o)+x(k*k))+x(j*j));if(!(p=x(0)){c=~~g>>>0;break v}c=0}c=c<<8;g=x(B(x(A(x(x(x(x(j+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));w:{if(g=x(0)){e=~~g>>>0;break w}e=0}i=c|e<<16;ma=r[b+16|0];c=d;g=x(B(x(A(x(x(x(x(o+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));x:{if(g=x(0)){e=~~g>>>0;break x}e=0}V=e|i|-16777216;q[c+500>>2]=V;q[d+244>>2]=V;g=x(B(x(A(x(x(x(x((ma?v:x(-v))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));y:{if(g=x(0)){c=~~g>>>0;break y}c=0}i=c<<8;ka=F+24|0;c=d;g=x(B(x(A(x(x(x(x((ma?y:x(-y))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));z:{if(g=x(0)){e=~~g>>>0;break z}e=0}e=e|i;g=x(B(x(A(x(x(x(x((ma?I:x(-I))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));A:{if(g=x(0)){i=~~g>>>0;break A}i=0}i=e|i<<16|-16777216;q[c+496>>2]=i;q[d+240>>2]=i;c=q[ba+4>>2];q[na>>2]=q[ba>>2];q[na+4>>2]=c;c=q[ca+4>>2];q[oa>>2]=q[ca>>2];q[oa+4>>2]=c;c=q[S+4>>2];q[ra>>2]=q[S>>2];q[ra+4>>2]=c;c=q[d+228>>2];q[f>>2]=q[d+224>>2];q[f+4>>2]=c;c=q[d+244>>2];q[qa>>2]=q[d+240>>2];q[qa+4>>2]=c;u[F+4>>2]=Z;u[F>>2]=_;u[F+8>>2]=Y;c=q[d+384>>2];q[F+20>>2]=V;q[F+16>>2]=i;q[F+12>>2]=c;c=q[K+4>>2];q[ka+8>>2]=q[K>>2];q[ka+12>>2]=c;c=q[d+420>>2];q[ka>>2]=q[d+416>>2];q[ka+4>>2]=c;e=f+ja|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+384>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;c=q[d+420>>2];q[e+24>>2]=q[d+416>>2];q[e+28>>2]=c;c=q[T+4>>2];q[H>>2]=q[T>>2];q[H+4>>2]=c;c=q[d+500>>2];q[G>>2]=q[d+496>>2];q[G+4>>2]=c;c=q[ea+4>>2];q[ta>>2]=q[ea>>2];q[ta+4>>2]=c;c=q[da+4>>2];q[sa>>2]=q[da>>2];q[sa+4>>2]=c;c=q[d+484>>2];q[N>>2]=q[d+480>>2];q[N+4>>2]=c;c=f+L|0;B:{if(!s){break B}e=f+ia|0;c=e;if((s|0)==(W|0)){break B}c=q[d+228>>2];q[e>>2]=q[d+224>>2];q[e+4>>2]=c;c=q[ba+4>>2];q[e+32>>2]=q[ba>>2];q[e+36>>2]=c;c=q[ca+4>>2];q[e+24>>2]=q[ca>>2];q[e+28>>2]=c;c=q[pa+4>>2];q[e+16>>2]=q[pa>>2];q[e+20>>2]=c;c=q[S+4>>2];q[e+8>>2]=q[S>>2];q[e+12>>2]=c;e=f+wa|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+384>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[d+420>>2];q[e+24>>2]=q[d+416>>2];q[e+28>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;e=f+ha|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+384>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;c=q[d+420>>2];q[e+24>>2]=q[d+416>>2];q[e+28>>2]=c;c=q[d+484>>2];e=f+ga|0;q[e>>2]=q[d+480>>2];q[e+4>>2]=c;c=q[T+4>>2];q[e+8>>2]=q[T>>2];q[e+12>>2]=c;c=q[O+4>>2];q[e+16>>2]=q[O>>2];q[e+20>>2]=c;c=q[ea+4>>2];q[e+24>>2]=q[ea>>2];q[e+28>>2]=c;c=q[da+4>>2];q[e+32>>2]=q[da>>2];q[e+36>>2]=c;c=f+fa|0}f=c;s=s+1|0;W=w(q[b+12>>2],((q[a+28>>2]-q[a+24>>2]|0)/240|0)+ -1|0);if(s>>>0>>0){continue}break}}q[d+104>>2]=l;q[d+212>>2]=h;q[d+208>>2]=C;q[d+216>>2]=l;c=q[d+212>>2];q[d+96>>2]=q[d+208>>2];q[d+100>>2]=c;bB(a,b,d+96|0);q[d+88>>2]=l;q[d+196>>2]=h;q[d+192>>2]=C;q[d+200>>2]=l;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;cB(a,b,d+80|0);q[d+72>>2]=l;q[d+180>>2]=h;q[d+176>>2]=C;q[d+184>>2]=l;c=q[d+180>>2];q[d+64>>2]=q[d+176>>2];q[d+68>>2]=c;dB(a,b,d- -64|0);q[d+56>>2]=l;q[d+164>>2]=h;q[d+160>>2]=C;q[d+168>>2]=l;c=q[d+164>>2];q[d+48>>2]=q[d+160>>2];q[d+52>>2]=c;dB(a,b,d+48|0);q[d+40>>2]=l;q[d+148>>2]=h;q[d+144>>2]=C;q[d+152>>2]=l;c=q[d+148>>2];q[d+32>>2]=q[d+144>>2];q[d+36>>2]=c;dB(a,b,d+32|0);q[d+24>>2]=l;q[d+132>>2]=h;q[d+128>>2]=C;q[d+136>>2]=l;c=q[d+132>>2];q[d+16>>2]=q[d+128>>2];q[d+20>>2]=c;dB(a,b,d+16|0);q[d+8>>2]=l;q[d+116>>2]=h;q[d+112>>2]=C;q[d+120>>2]=l;c=q[d+116>>2];q[d>>2]=q[d+112>>2];q[d+4>>2]=c;dB(a,b,d);C:{if(q[a+152>>2]<1){break C}l=q[a+28>>2];h=q[a+24>>2];if((l-h|0)==240){break C}f=q[a+148>>2];s=q[a+20>>2]+40|0;i=q[b+12>>2];c=0;while(1){if((i|0)>=1){h=(w(c,240)+h|0)+208|0;l=0;while(1){s=kV(kV(kV(kV(kV(kV(kV(kV(s,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0;l=l+1|0;i=q[b+12>>2];if((l|0)<(i|0)){continue}break}l=q[a+28>>2];h=q[a+24>>2]}c=c+1|0;if(c>>>0<((l-h|0)/240|0)+ -1>>>0){continue}break}}if(q[a+156>>2]<1){break a}l=q[a+28>>2];h=q[a+24>>2];if((l-h|0)==240){break a}f=q[a+148>>2];s=(q[a+20>>2]+(q[a+152>>2]<<2)|0)+40|0;i=q[b+12>>2];c=0;while(1){if((i|0)>=1){h=(w(c,240)+h|0)+224|0;l=0;while(1){s=kV(kV(kV(kV(kV(kV(kV(kV(s,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0;l=l+1|0;i=q[b+12>>2];if((l|0)<(i|0)){continue}break}l=q[a+28>>2];h=q[a+24>>2]}c=c+1|0;if(c>>>0<((l-h|0)/240|0)+ -1>>>0){continue}break}}ue=d+544|0}function $A(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=0,j=x(0),k=x(0),l=0,m=0,o=x(0),p=x(0),s=0,t=0,v=x(0),y=x(0),z=0,C=0,D=0,F=0,G=0,H=0,I=x(0),J=x(0),K=0,L=0,M=0,N=0,O=0,P=0,Q=x(0),R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=x(0),Z=x(0),_=x(0),$=x(0),aa=x(0),ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=x(0),wa=0,xa=0,ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=x(0),Ea=x(0),Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=x(0),Sa=x(0),Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;d=ue-512|0;ue=d;i=q[a+28>>2];s=q[a+24>>2];a:{if((i|0)==(s|0)){break a}b:{if(q[b+48>>2]!=1){break b}h=i-s|0;if(h){m=(h|0)/240|0;l=d+224|0;h=0;e=d+472|0;while(1){c:{if(!h){Xs(d+192|0,s+256|0);Xs(d+448|0,q[a+24>>2]+16|0);o=x(u[d+204>>2]-u[d+460>>2]);J=x(u[d+196>>2]-u[d+452>>2]);k=x(u[d+192>>2]-u[d+448>>2]);j=x(u[d+200>>2]-u[d+456>>2]);break c}if((m+ -1|0)==(h|0)){f=w(h,240);Xs(d+192|0,(f+s|0)+16|0);Xs(d+448|0,(f+q[a+24>>2]|0)+ -224|0);o=x(u[d+204>>2]-u[d+460>>2]);J=x(u[d+196>>2]-u[d+452>>2]);k=x(u[d+192>>2]-u[d+448>>2]);j=x(u[d+200>>2]-u[d+456>>2]);break c}f=w(h,240);Xs(d+192|0,(f+s|0)+256|0);Xs(d+448|0,(f+q[a+24>>2]|0)+ -224|0);o=x(u[d+204>>2]-u[d+460>>2]);J=x(u[d+196>>2]-u[d+452>>2]);k=x(u[d+192>>2]-u[d+448>>2]);j=x(u[d+200>>2]-u[d+456>>2])}g=x(x(x(k*k)+x(J*J))+x(j*j));if(!(g>2];n[q[q[f>>2]+88>>2]](d+192|0,f);nt(d+384|0,d+192|0);v=u[d+396>>2];g=x(o*v);y=x(g-g);$=u[d+388>>2];aa=u[d+384>>2];o=x(x(k*$)-x(J*aa));p=u[d+392>>2];k=x(x(j*aa)-x(k*p));j=x(x(J*p)-x(j*$));g=x(x(o*o)+x(x(k*k)+x(j*j)));if(!(g>2]=y;g=x(v*y);u[d+220>>2]=g-g;u[d+192>>2]=j;u[d+196>>2]=k;u[d+216>>2]=x(aa*k)-x($*j);u[d+200>>2]=o;u[d+212>>2]=x(p*j)-x(aa*o);u[d+208>>2]=x($*o)-x(p*k);f=q[d+396>>2];q[l+8>>2]=q[d+392>>2];q[l+12>>2]=f;f=q[d+388>>2];q[l>>2]=q[d+384>>2];q[l+4>>2]=f;it(d+448|0,d+192|0);f=q[d+508>>2];q[d+248>>2]=q[d+504>>2];q[d+252>>2]=f;f=q[d+500>>2];q[d+240>>2]=q[d+496>>2];q[d+244>>2]=f;f=q[d+492>>2];q[d+232>>2]=q[d+488>>2];q[d+236>>2]=f;f=q[d+484>>2];q[l>>2]=q[d+480>>2];q[l+4>>2]=f;f=q[e+4>>2];q[d+216>>2]=q[e>>2];q[d+220>>2]=f;f=q[d+468>>2];q[d+208>>2]=q[d+464>>2];q[d+212>>2]=f;f=q[d+460>>2];q[d+200>>2]=q[d+456>>2];q[d+204>>2]=f;f=q[d+452>>2];q[d+192>>2]=q[d+448>>2];q[d+196>>2]=f;zj(d+448|0,d+192|0);j=u[d+448>>2];y=u[d+452>>2];v=u[d+456>>2];g=u[d+460>>2];o=x(x(E(x(x(x(x(j*j)+x(y*y))+x(v*v))+x(g*g))))+x(9999999747378752e-21));u[d+452>>2]=y/o;u[d+448>>2]=j/o;u[d+460>>2]=g/o;u[d+456>>2]=v/o;f=q[d+452>>2];m=q[a+36>>2]+(h<<4)|0;i=m;q[i>>2]=q[d+448>>2];q[i+4>>2]=f;f=q[d+460>>2];q[i+8>>2]=q[d+456>>2];q[i+12>>2]=f;h=h+1|0;s=q[a+24>>2];m=(q[a+28>>2]-s|0)/240|0;if(h>>>0>>0){continue}break}}m=q[a+36>>2];h=q[m+4>>2];i=q[a+48>>2];f=i;q[f>>2]=q[m>>2];q[f+4>>2]=h;h=q[m+12>>2];q[f+8>>2]=q[m+8>>2];q[f+12>>2]=h;m=q[a+40>>2]+ -16|0;h=q[m+4>>2];i=q[a+52>>2]+ -16|0;f=i;q[f>>2]=q[m>>2];q[f+4>>2]=h;h=q[m+12>>2];q[f+8>>2]=q[m+8>>2];q[f+12>>2]=h;i=q[a+28>>2];s=q[a+24>>2];if(((i-s|0)/240|0)+ -1>>>0<2){break b}h=1;while(1){i=h<<4;f=q[a+36>>2];h=h+1|0;Aj(d+192|0,(i+f|0)+ -16|0,f+(h<<4)|0,x(.5));Aj(d+448|0,d+192|0,i+q[a+36>>2]|0,x(.6666666865348816));f=q[d+452>>2];m=i+q[a+48>>2]|0;i=m;q[i>>2]=q[d+448>>2];q[i+4>>2]=f;f=q[d+460>>2];q[i+8>>2]=q[d+456>>2];q[i+12>>2]=f;i=q[a+28>>2];s=q[a+24>>2];if(h>>>0<((i-s|0)/240|0)+ -1>>>0){continue}break}}if(q[b+12>>2]>=2){e=a+60|0;ms(e);h=q[a+24>>2];if((h|0)!=q[a+28>>2]){f=0;m=d+208|0;while(1){q[d+456>>2]=0;q[d+460>>2]=0;q[d+448>>2]=0;q[d+452>>2]=0;i=w(f,240)+h|0;h=q[i+60>>2];q[d+232>>2]=q[i+56>>2];q[d+236>>2]=h;h=q[i+52>>2];q[d+224>>2]=q[i+48>>2];q[d+228>>2]=h;h=q[i+44>>2];q[d+216>>2]=q[i+40>>2];q[d+220>>2]=h;h=q[i+36>>2];q[m>>2]=q[i+32>>2];q[m+4>>2]=h;h=q[i+20>>2];q[d+192>>2]=q[i+16>>2];q[d+196>>2]=h;h=q[i+28>>2];q[d+200>>2]=q[i+24>>2];q[d+204>>2]=h;if(r[b+44|0]){vu(d+192|0,c,u[i+204>>2])}h=q[a+8>>2];n[q[q[h>>2]+88>>2]](d+368|0,h);nt(d+384|0,d+368|0);h=q[a+8>>2];n[q[q[h>>2]+92>>2]](d+336|0,h);su(d+192|0,nt(d+432|0,d+336|0),q[b+24>>2],r[b+16|0]);Xs(d+384|0,d+192|0);h=q[d+396>>2];q[d+456>>2]=q[d+392>>2];q[d+460>>2]=h;h=q[d+388>>2];q[d+448>>2]=q[d+384>>2];q[d+452>>2]=h;js(e,d+448|0);f=f+1|0;h=q[a+24>>2];if(f>>>0<(q[a+28>>2]-h|0)/240>>>0){continue}break}}ls(e);s=q[a+24>>2];i=q[a+28>>2]}f=-1;C=q[a+148>>2];D=C;m=q[a+20>>2];h=m;if((i|0)!=(s|0)){Ta=C<<1;Ua=C<<3;Va=w(C,11);Wa=w(C,10);Xa=w(C,7);Ya=w(C,6);Za=w(C,5);_a=C<<2;$a=a+60|0;R=d+272|0;z=d+232|0;h=m;while(1){if(q[b+12>>2]>=1){t=w(xa,240)+s|0;ab=t+88|0;bb=t+87|0;cb=t+75|0;db=t+86|0;eb=t+74|0;s=t+85|0;D=t+73|0;F=t+84|0;K=t+72|0;N=t+83|0;S=t+71|0;T=t+82|0;V=t+70|0;W=t+81|0;ba=t+69|0;ca=t+80|0;da=t+68|0;ea=t+79|0;ka=t+67|0;ma=t+78|0;wa=t+66|0;na=t+77|0;oa=t+65|0;pa=t+76|0;qa=t- -64|0;ra=t+92|0;sa=t+96|0;Fa=t+4|0;ta=t+204|0;i=t+16|0;la=0;while(1){f=i;e=q[f+44>>2];q[d+488>>2]=q[f+40>>2];q[d+492>>2]=e;e=q[f+36>>2];q[d+480>>2]=q[f+32>>2];q[d+484>>2]=e;e=q[f+28>>2];q[d+472>>2]=q[f+24>>2];q[d+476>>2]=e;e=q[f+20>>2];q[d+464>>2]=q[f+16>>2];q[d+468>>2]=e;e=q[f+4>>2];q[d+448>>2]=q[f>>2];q[d+452>>2]=e;e=q[f+12>>2];q[d+456>>2]=q[f+8>>2];q[d+460>>2]=e;if(r[b+44|0]){vu(d+448|0,c,u[ta>>2])}Ys(d+448|0,d+432|0,d+384|0,d+368|0);f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+352|0,f);nt(d+192|0,d+352|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+320|0,f);tu(d+368|0,d+432|0,nt(d+336|0,d+320|0),q[b+24>>2]);ua=q[Fa>>2];O=q[t>>2];G=(ua|0)<((O|0)/2|0);y=u[(G?ab:sa)>>2];H=r[ea|0];Ga=r[ka|0];L=r[ma|0];Ha=r[wa|0];fa=r[pa|0];Ia=r[qa|0];ga=r[na|0];Ja=r[oa|0];ha=r[N|0];Ka=r[S|0];ia=r[T|0];La=r[V|0];ja=r[ca|0];Ma=r[da|0];U=r[W|0];Na=r[ba|0];M=r[bb|0];Oa=r[cb|0];l=r[db|0];Pa=r[eb|0];e=r[F|0];Qa=r[K|0];f=r[s|0];X=r[D|0];v=u[ra>>2];P=q[b+12>>2];yp(d+192|0);yp(z);yp(R);q[d+276>>2]=0;q[d+280>>2]=0;q[d+240>>2]=0;q[d+232>>2]=0;q[d+236>>2]=0;q[d+196>>2]=0;q[d+200>>2]=0;O=O+ -1|0;g=x(x(w(P,ua)+la|0)/x(w(O,P)|0));g=x(g+g);j=G?g:x(x(1)-x(g+x(-1)));v=x(y+x(j*x(v-y)));g=u[d+432>>2];u[d+272>>2]=x(v*x(.5))*g;u[d+192>>2]=g*x(v*x(-.5));g=x(B(x(A(x(x(j*x(f-X|0))+x(X>>>0)),x(255))),x(0)));d:{if(g=x(0)){f=~~g>>>0;break d}f=0}f=f<<8;g=x(B(x(A(x(x(j*x(e-Qa|0))+x(Qa>>>0)),x(255))),x(0)));e:{if(g=x(0)){e=~~g>>>0;break e}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(l-Pa|0))+x(Pa>>>0)),x(255))),x(0)));f:{if(g=x(0)){l=~~g>>>0;break f}l=0}e=l<<16|e;g=x(B(x(A(x(x(j*x(M-Oa|0))+x(Oa>>>0)),x(255))),x(0)));g:{if(g=x(0)){l=~~g>>>0;break g}l=0}q[f+284>>2]=e|l<<24;g=x(B(x(A(x(x(j*x(U-Na|0))+x(Na>>>0)),x(255))),x(0)));h:{if(g=x(0)){e=~~g>>>0;break h}e=0}f=e<<8;g=x(B(x(A(x(x(j*x(ja-Ma|0))+x(Ma>>>0)),x(255))),x(0)));i:{if(g=x(0)){e=~~g>>>0;break i}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(ia-La|0))+x(La>>>0)),x(255))),x(0)));j:{if(g=x(0)){l=~~g>>>0;break j}l=0}e=l<<16|e;g=x(B(x(A(x(x(j*x(ha-Ka|0))+x(Ka>>>0)),x(255))),x(0)));k:{if(g=x(0)){l=~~g>>>0;break k}l=0}q[f+244>>2]=e|l<<24;g=x(B(x(A(x(x(j*x(ga-Ja|0))+x(Ja>>>0)),x(255))),x(0)));l:{if(g=x(0)){e=~~g>>>0;break l}e=0}f=e<<8;g=x(B(x(A(x(x(j*x(fa-Ia|0))+x(Ia>>>0)),x(255))),x(0)));m:{if(g=x(0)){e=~~g>>>0;break m}e=0}e=e|f;f=d;g=x(B(x(A(x(x(j*x(L-Ha|0))+x(Ha>>>0)),x(255))),x(0)));n:{if(g=x(0)){l=~~g>>>0;break n}l=0}e=l<<16|e;g=x(B(x(A(x(x(j*x(H-Ga|0))+x(Ga>>>0)),x(255))),x(0)));o:{if(g=x(0)){l=~~g>>>0;break o}l=0}q[f+204>>2]=e|l<<24;M=la|ua;f=q[b+12>>2];p:{if((f|0)>=2){ns(d+336|0,$a,x(x(x(la|0)/x(f|0))+x(q[Fa>>2])));yp(d+352|0);q[z+8>>2]=q[d+344>>2];f=q[d+340>>2];q[z>>2]=q[d+336>>2];q[z+4>>2]=f;break p}yp(d+336|0);q[z+8>>2]=q[d+376>>2];f=q[d+372>>2];q[z>>2]=q[d+368>>2];q[z+4>>2]=f}f=q[d+196>>2];q[h>>2]=q[d+192>>2];q[h+4>>2]=f;f=q[d+204>>2];q[h+8>>2]=q[d+200>>2];q[h+12>>2]=f;fa=d+224|0;e=fa;f=q[e+4>>2];q[h+32>>2]=q[e>>2];q[h+36>>2]=f;ga=d+216|0;e=ga;f=q[e+4>>2];q[h+24>>2]=q[e>>2];q[h+28>>2]=f;ha=d+208|0;e=ha;f=q[e+4>>2];q[h+16>>2]=q[e>>2];q[h+20>>2]=f;P=z+32|0;e=P;f=q[e+4>>2];U=h+C|0;l=U;q[l+32>>2]=q[e>>2];q[l+36>>2]=f;G=z+24|0;e=G;f=q[e+4>>2];q[l+24>>2]=q[e>>2];q[l+28>>2]=f;H=z+16|0;e=H;f=q[e+4>>2];q[l+16>>2]=q[e>>2];q[l+20>>2]=f;L=z+8|0;e=L;f=q[e+4>>2];q[l+8>>2]=q[e>>2];q[l+12>>2]=f;f=q[z+4>>2];q[l>>2]=q[z>>2];q[l+4>>2]=f;f=q[P+4>>2];l=h+_a|0;e=l;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;ia=R+32|0;e=ia;f=q[e+4>>2];X=h+Za|0;l=X;q[l+32>>2]=q[e>>2];q[l+36>>2]=f;ja=R+24|0;e=ja;f=q[e+4>>2];q[l+24>>2]=q[e>>2];q[l+28>>2]=f;U=R+16|0;e=U;f=q[e+4>>2];q[l+16>>2]=q[e>>2];q[l+20>>2]=f;l=R+8|0;e=l;f=q[e+4>>2];q[X+8>>2]=q[e>>2];q[X+12>>2]=f;f=q[R+4>>2];q[X>>2]=q[R>>2];q[X+4>>2]=f;f=h+Ta|0;q:{if(!M){break q}f=h+Ya|0;if((O|0)==(ua|0)){q[a+12>>2]=q[a+12>>2]+2;break q}e=q[d+196>>2];q[f>>2]=q[d+192>>2];q[f+4>>2]=e;e=q[d+204>>2];q[f+8>>2]=q[d+200>>2];q[f+12>>2]=e;e=q[fa+4>>2];q[f+32>>2]=q[fa>>2];q[f+36>>2]=e;e=q[ga+4>>2];q[f+24>>2]=q[ga>>2];q[f+28>>2]=e;e=q[ha+4>>2];q[f+16>>2]=q[ha>>2];q[f+20>>2]=e;f=q[P+4>>2];M=h+Xa|0;e=M;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;f=q[P+4>>2];M=h+Wa|0;e=M;q[e+32>>2]=q[P>>2];q[e+36>>2]=f;f=q[G+4>>2];q[e+24>>2]=q[G>>2];q[e+28>>2]=f;f=q[H+4>>2];q[e+16>>2]=q[H>>2];q[e+20>>2]=f;f=q[L+4>>2];q[e+8>>2]=q[L>>2];q[e+12>>2]=f;f=q[z+4>>2];q[e>>2]=q[z>>2];q[e+4>>2]=f;f=q[ia+4>>2];M=h+Va|0;e=M;q[e+32>>2]=q[ia>>2];q[e+36>>2]=f;f=q[ja+4>>2];q[e+24>>2]=q[ja>>2];q[e+28>>2]=f;f=q[U+4>>2];q[e+16>>2]=q[U>>2];q[e+20>>2]=f;f=q[l+4>>2];q[e+8>>2]=q[l>>2];q[e+12>>2]=f;f=q[R+4>>2];q[e>>2]=q[R>>2];q[e+4>>2]=f;q[a+12>>2]=q[a+12>>2]+2;f=h+Ua|0}h=f;la=la+1|0;if((O|0)!=(ua|0)?(la|0)>2]:0){continue}break}s=q[a+24>>2];i=q[a+28>>2]}xa=xa+1|0;f=(i-s|0)/240|0;if(xa>>>0>>0){continue}break}D=q[a+148>>2];f=f+ -1|0}W=w(f,q[b+12>>2]);if((W|0)!=-1){L=D<<1;fa=D<<3;ga=w(D,11);ha=w(D,10);ia=w(D,6);ja=D<<2;U=w(D,5);M=w(D,3);wa=w(D,7);l=w(D,9);f=q[a+20>>2];s=0;while(1){r:{s:{if(!s){Cp(d+448|0,f+M|0,f+D|0);nt(d+192|0,d+448|0);v=u[d+192>>2];y=u[d+196>>2];g=u[d+200>>2];Q=x(x(x(v*v)+x(y*y))+x(g*g));if(Q>2];k=u[d+196>>2];j=u[d+200>>2];g=x(x(x(o*o)+x(k*k))+x(j*j));if(!(g>2];Z=u[d+196>>2];_=u[d+192>>2];na=f+32|0;i=na;c=q[i+4>>2];ba=d+224|0;e=ba;q[e>>2]=q[i>>2];q[e+4>>2]=c;oa=f+24|0;i=oa;c=q[i+4>>2];ca=d+216|0;e=ca;q[e>>2]=q[i>>2];q[e+4>>2]=c;qa=f+16|0;i=qa;c=q[i+4>>2];pa=d+208|0;e=pa;q[e>>2]=q[i>>2];q[e+4>>2]=c;ra=f+8|0;i=ra;c=q[i+4>>2];S=d+200|0;e=S;q[e>>2]=q[i>>2];q[e+4>>2]=c;c=q[f+4>>2];q[d+192>>2]=q[f>>2];q[d+196>>2]=c;q[d+352>>2]=q[F+12>>2];c=q[F+36>>2];K=d+392|0;i=K;q[i>>2]=q[F+32>>2];q[i+4>>2]=c;c=q[F+28>>2];q[d+384>>2]=q[F+24>>2];q[d+388>>2]=c;N=f+U|0;sa=N+32|0;i=sa;c=q[i+4>>2];da=d+480|0;e=da;q[e>>2]=q[i>>2];q[e+4>>2]=c;ta=N+24|0;i=ta;c=q[i+4>>2];ea=d+472|0;e=ea;q[e>>2]=q[i>>2];q[e+4>>2]=c;G=N+16|0;i=G;c=q[i+4>>2];O=d+464|0;e=O;q[e>>2]=q[i>>2];q[e+4>>2]=c;H=N+8|0;i=H;c=q[i+4>>2];T=d+456|0;e=T;q[e>>2]=q[i>>2];q[e+4>>2]=c;c=q[N+4>>2];q[d+448>>2]=q[N>>2];q[d+452>>2]=c;t:{if(q[b+48>>2]==1){u:{if((s|0)==(W|0)){c=q[a+52>>2]+ -16|0;o=u[c+12>>2];k=u[c+8>>2];I=u[c>>2];j=u[c+4>>2];break u}i=q[b+12>>2];e=q[a+48>>2]+((s|0)/(i|0)<<4)|0;c=q[e+4>>2];q[d+432>>2]=q[e>>2];q[d+436>>2]=c;c=q[e+12>>2];q[d+440>>2]=q[e+8>>2];q[d+444>>2]=c;c=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=c;c=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=c;Aj(d+336|0,d+432|0,d+368|0,x(x((s>>>0)%(i>>>0)|0)/x(i|0)));o=u[d+348>>2];k=u[d+344>>2];I=u[d+336>>2];j=u[d+340>>2]}Aa=u[d+192>>2];yp(d+432|0);Ba=x(I*I);Ca=x(j*j);Da=x(k*k);Ea=x(o*o);Ra=x(j*k);Sa=x(I*o);p=x(Ra+Sa);va=x(x(p+p)*x(0));J=x(I*k);$=x(j*o);p=x(J-$);aa=x(x(x(x(x(x(-Ba)-Ca)+Da)+Ea)*x(0))+x(va-x(p+p)));u[d+440>>2]=Y+x(Aa*aa);q[S>>2]=q[d+440>>2];p=x(J+$);va=x(x(p+p)*x(0));p=x(I*j);k=x(k*o);j=x(p-k);o=x(va+x(x(x(j+j)*x(0))-x(x(x(Ba-Ca)-Da)+Ea)));u[d+432>>2]=_+x(Aa*o);j=x(Ra-Sa);va=x(x(j+j)*x(0));j=x(p+k);j=x(va+x(x(x(x(x(Ca-Ba)-Da)+Ea)*x(0))-x(j+j)));u[d+436>>2]=Z+x(Aa*j);c=q[d+436>>2];q[d+192>>2]=q[d+432>>2];q[d+196>>2]=c;yp(d+432|0);k=u[d+448>>2];yp(d+432|0);u[d+440>>2]=Y+x(aa*k);q[T>>2]=q[d+440>>2];u[d+436>>2]=Z+x(j*k);u[d+432>>2]=_+x(o*k);break t}c=q[a+8>>2];n[q[q[c>>2]+88>>2]](d+368|0,c);nt(d+432|0,d+368|0);k=u[d+436>>2];p=u[d+432>>2];o=x(x(v*k)-x(y*p));j=u[d+440>>2];k=x(x(y*j)-x(g*k));j=x(x(g*p)-x(v*j));p=x(x(o*o)+x(x(k*k)+x(j*j)));if(!(p>2];yp(d+432|0);u[d+440>>2]=Y-x(o*p);q[S>>2]=q[d+440>>2];u[d+436>>2]=Z-x(j*p);u[d+432>>2]=_-x(k*p);c=q[d+436>>2];q[d+192>>2]=q[d+432>>2];q[d+196>>2]=c;yp(d+432|0);p=u[d+448>>2];yp(d+432|0);u[d+440>>2]=Y-x(o*p);q[T>>2]=q[d+440>>2];u[d+436>>2]=Z-x(j*p);u[d+432>>2]=_-x(k*p)}c=q[d+436>>2];q[d+448>>2]=q[d+432>>2];q[d+452>>2]=c;Cp(d+368|0,d+192|0,d+448|0);nt(d+432|0,d+368|0);o=u[d+432>>2];k=u[d+436>>2];j=u[d+440>>2];p=x(x(x(o*o)+x(k*k))+x(j*j));if(!(p=x(0)){c=~~g>>>0;break v}c=0}c=c<<8;g=x(B(x(A(x(x(x(x(j+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));w:{if(g=x(0)){e=~~g>>>0;break w}e=0}i=c|e<<16;ma=r[b+16|0];c=d;g=x(B(x(A(x(x(x(x(o+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));x:{if(g=x(0)){e=~~g>>>0;break x}e=0}V=e|i|-16777216;q[c+468>>2]=V;q[d+212>>2]=V;g=x(B(x(A(x(x(x(x((ma?v:x(-v))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));y:{if(g=x(0)){c=~~g>>>0;break y}c=0}i=c<<8;ka=F+24|0;c=d;g=x(B(x(A(x(x(x(x((ma?y:x(-y))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));z:{if(g=x(0)){e=~~g>>>0;break z}e=0}e=e|i;g=x(B(x(A(x(x(x(x((ma?I:x(-I))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));A:{if(g=x(0)){i=~~g>>>0;break A}i=0}i=e|i<<16|-16777216;q[c+464>>2]=i;q[d+208>>2]=i;c=q[ba+4>>2];q[na>>2]=q[ba>>2];q[na+4>>2]=c;c=q[ca+4>>2];q[oa>>2]=q[ca>>2];q[oa+4>>2]=c;c=q[S+4>>2];q[ra>>2]=q[S>>2];q[ra+4>>2]=c;c=q[d+196>>2];q[f>>2]=q[d+192>>2];q[f+4>>2]=c;c=q[d+212>>2];q[qa>>2]=q[d+208>>2];q[qa+4>>2]=c;u[F+4>>2]=Z;u[F>>2]=_;u[F+8>>2]=Y;c=q[d+352>>2];q[F+20>>2]=V;q[F+16>>2]=i;q[F+12>>2]=c;c=q[K+4>>2];q[ka+8>>2]=q[K>>2];q[ka+12>>2]=c;c=q[d+388>>2];q[ka>>2]=q[d+384>>2];q[ka+4>>2]=c;e=f+ja|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+352>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;c=q[d+388>>2];q[e+24>>2]=q[d+384>>2];q[e+28>>2]=c;c=q[T+4>>2];q[H>>2]=q[T>>2];q[H+4>>2]=c;c=q[d+468>>2];q[G>>2]=q[d+464>>2];q[G+4>>2]=c;c=q[ea+4>>2];q[ta>>2]=q[ea>>2];q[ta+4>>2]=c;c=q[da+4>>2];q[sa>>2]=q[da>>2];q[sa+4>>2]=c;c=q[d+452>>2];q[N>>2]=q[d+448>>2];q[N+4>>2]=c;c=f+L|0;B:{if(!s){break B}e=f+ia|0;c=e;if((s|0)==(W|0)){break B}c=q[d+196>>2];q[e>>2]=q[d+192>>2];q[e+4>>2]=c;c=q[ba+4>>2];q[e+32>>2]=q[ba>>2];q[e+36>>2]=c;c=q[ca+4>>2];q[e+24>>2]=q[ca>>2];q[e+28>>2]=c;c=q[pa+4>>2];q[e+16>>2]=q[pa>>2];q[e+20>>2]=c;c=q[S+4>>2];q[e+8>>2]=q[S>>2];q[e+12>>2]=c;e=f+wa|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+352>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[d+388>>2];q[e+24>>2]=q[d+384>>2];q[e+28>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;e=f+ha|0;u[e+8>>2]=Y;u[e+4>>2]=Z;u[e>>2]=_;c=q[d+352>>2];q[e+20>>2]=V;q[e+16>>2]=i;q[e+12>>2]=c;c=q[K+4>>2];q[e+32>>2]=q[K>>2];q[e+36>>2]=c;c=q[d+388>>2];q[e+24>>2]=q[d+384>>2];q[e+28>>2]=c;c=q[d+452>>2];e=f+ga|0;q[e>>2]=q[d+448>>2];q[e+4>>2]=c;c=q[T+4>>2];q[e+8>>2]=q[T>>2];q[e+12>>2]=c;c=q[O+4>>2];q[e+16>>2]=q[O>>2];q[e+20>>2]=c;c=q[ea+4>>2];q[e+24>>2]=q[ea>>2];q[e+28>>2]=c;c=q[da+4>>2];q[e+32>>2]=q[da>>2];q[e+36>>2]=c;c=f+fa|0}f=c;s=s+1|0;W=w(q[b+12>>2],((q[a+28>>2]-q[a+24>>2]|0)/240|0)+ -1|0);if(s>>>0>>0){continue}break}}q[d+88>>2]=m;q[d+180>>2]=h;q[d+176>>2]=C;q[d+184>>2]=m;c=q[d+180>>2];q[d+80>>2]=q[d+176>>2];q[d+84>>2]=c;bB(a,b,d+80|0);q[d+72>>2]=m;q[d+164>>2]=h;q[d+160>>2]=C;q[d+168>>2]=m;c=q[d+164>>2];q[d+64>>2]=q[d+160>>2];q[d+68>>2]=c;dB(a,b,d- -64|0);q[d+56>>2]=m;q[d+148>>2]=h;q[d+144>>2]=C;q[d+152>>2]=m;c=q[d+148>>2];q[d+48>>2]=q[d+144>>2];q[d+52>>2]=c;dB(a,b,d+48|0);q[d+40>>2]=m;q[d+132>>2]=h;q[d+128>>2]=C;q[d+136>>2]=m;c=q[d+132>>2];q[d+32>>2]=q[d+128>>2];q[d+36>>2]=c;dB(a,b,d+32|0);q[d+24>>2]=m;q[d+116>>2]=h;q[d+112>>2]=C;q[d+120>>2]=m;c=q[d+116>>2];q[d+16>>2]=q[d+112>>2];q[d+20>>2]=c;dB(a,b,d+16|0);q[d+8>>2]=m;q[d+100>>2]=h;q[d+96>>2]=C;q[d+104>>2]=m;c=q[d+100>>2];q[d>>2]=q[d+96>>2];q[d+4>>2]=c;dB(a,b,d);C:{if(q[a+152>>2]<1){break C}m=q[a+28>>2];h=q[a+24>>2];if((m-h|0)==240){break C}f=q[a+148>>2];s=q[a+20>>2]+40|0;i=q[b+12>>2];c=0;while(1){if((i|0)>=1){h=(w(c,240)+h|0)+208|0;m=0;while(1){s=kV(kV(kV(kV(kV(kV(kV(kV(s,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0,h,q[a+152>>2]<<2)+f|0;m=m+1|0;i=q[b+12>>2];if((m|0)<(i|0)){continue}break}m=q[a+28>>2];h=q[a+24>>2]}c=c+1|0;if(c>>>0<((m-h|0)/240|0)+ -1>>>0){continue}break}}if(q[a+156>>2]<1){break a}m=q[a+28>>2];h=q[a+24>>2];if((m-h|0)==240){break a}f=q[a+148>>2];s=(q[a+20>>2]+(q[a+152>>2]<<2)|0)+40|0;i=q[b+12>>2];c=0;while(1){if((i|0)>=1){h=(w(c,240)+h|0)+224|0;m=0;while(1){s=kV(kV(kV(kV(kV(kV(kV(kV(s,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0,h,q[a+156>>2]<<2)+f|0;m=m+1|0;i=q[b+12>>2];if((m|0)<(i|0)){continue}break}m=q[a+28>>2];h=q[a+24>>2]}c=c+1|0;if(c>>>0<((m-h|0)/240|0)+ -1>>>0){continue}break}}ue=d+512|0}function ex(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;c=ue-336|0;ue=c;n[q[q[b>>2]+224>>2]](c+320|0,b);t=q[c+320>>2];d=10;f=1;if((n[q[q[b>>2]+244>>2]](b)|0)!=1){f=(n[q[q[b>>2]+244>>2]](b)|0)==3;d=f?10:1}e=n[q[q[b>>2]+244>>2]](b)|0;k=(e|0)==3?29568:(e|0)==2?40064:0;j=sV(k);e=n[q[q[b>>2]+244>>2]](b)|0;i=(e|0)==3?50032:(e|0)==2?62576:0;g=sV(i);e=n[q[q[b>>2]+244>>2]](b)|0;y=(e|0)==3?73312:(e|0)==2?83152:0;v=sV(y);e=n[q[q[b>>2]+244>>2]](b)|0;r=(e|0)==3?92448:(e|0)==2?104288:0;s=sV(r);e=n[q[q[b>>2]+244>>2]](b)|0;h=(e|0)==3?114320:(e|0)==2?124800:0;m=sV(h);e=n[q[q[b>>2]+244>>2]](b)|0;u=(e|0)==3?134864:(e|0)==2?144704:0;A=sV(u);e=n[q[q[b>>2]+244>>2]](b)|0;p=(e|0)==3?152896:(e|0)==2?156096:0;K=sV(p);e=n[q[q[b>>2]+244>>2]](b)|0;C=(e|0)==3?158800:(e|0)==2?164128:0;L=sV(C);e=n[q[q[b>>2]+244>>2]](b)|0;D=(e|0)==3?167744:(e|0)==2?170032:0;M=sV(D);e=n[q[q[b>>2]+244>>2]](b)|0;E=(e|0)==3?171792:(e|0)==2?176368:0;N=sV(E);e=n[q[q[b>>2]+244>>2]](b)|0;G=(e|0)==3?179248:(e|0)==2?182432:0;O=sV(G);e=n[q[q[b>>2]+244>>2]](b)|0;H=(e|0)==3?185120:(e|0)==2?188800:0;P=sV(H);_x(c+288|0,0);_x(c+272|0,4);_x(c+256|0,2);_x(c+240|0,3);_x(c+224|0,4);_x(c+208|0,5);q[c+200>>2]=0;q[c+192>>2]=0;q[c+196>>2]=0;Xw(c+192|0,0,f,d);by(c+192|0);q[c+184>>2]=0;q[c+176>>2]=0;q[c+180>>2]=0;Xw(c+176|0,0,f,d);cy(c+176|0);q[c+168>>2]=0;q[c+160>>2]=0;q[c+164>>2]=0;Xw(c+160|0,1,f,d);by(c+160|0);q[c+152>>2]=0;q[c+144>>2]=0;q[c+148>>2]=0;Xw(c+144|0,1,f,d);cy(c+144|0);x=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+228>>2]-q[c+224>>2]|0;e=(d|0)/12|0;a:{b:{c:{d:{e:{f:{g:{h:{i:{if(!d){break i}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+224>>2];z=q[c+228>>2];if((f|0)==(z|0)){break i}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;j:{if(o[f+11|0]>=0){l=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=l;q[e>>2]=q[f+8>>2];break j}l=q[f+4>>2];if(l>>>0>=4294967280){break a}B=q[f>>2];k:{l:{if(l>>>0>=11){wt(c+320|0);I=l+16&-16;e=n[q[c+328>>2]](c+320|0,I)|0;J=q[q[c+332>>2]+4>>2];if(J){n[J](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=l;q[d+8>>2]=I|-2147483648;d=e;break l}o[d+11|0]=l;e=d;if(!l){break k}}kV(e,B,l)}o[d+l|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((z|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+160|0);q[x>>2]=28756;q[x+4>>2]=1;q[x+8>>2]=q[c+304>>2];q[x+12>>2]=q[c+308>>2];q[x+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[x+20>>2]=q[d>>2];q[x+24>>2]=q[d+4>>2];q[x+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=j;q[c+128>>2]=k;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=g;q[c+104>>2]=i;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+96>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[x>>2]>>2]](x)|0;d=q[c+96>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+96>>2]=0}q[c+96>>2]=x;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c+96|0);d=q[c+136>>2];m:{if(!d){z=0;break m}n[q[q[d>>2]>>2]](d)|0;z=d+ -4|0;d=q[c+136>>2];if(!d){break m}n[q[q[d>>2]+8>>2]](d)|0;q[c+136>>2]=0}d=q[c+96>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+96>>2]=0}d=q[c+112>>2];n:{if(!d){break n}q[c+116>>2]=d;e=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break n}n[d](q[c+320>>2])}d=q[c+304>>2];o:{if(!d){break o}q[c+308>>2]=d;e=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break o}n[d](q[c+320>>2])}l=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+244>>2]-q[c+240>>2]|0;e=(d|0)/12|0;p:{if(!d){break p}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+240>>2];j=q[c+244>>2];if((f|0)==(j|0)){break p}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;q:{if(o[f+11|0]>=0){k=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=k;q[e>>2]=q[f+8>>2];break q}k=q[f+4>>2];if(k>>>0>=4294967280){break a}i=q[f>>2];r:{s:{if(k>>>0>=11){wt(c+320|0);g=k+16&-16;e=n[q[c+328>>2]](c+320|0,g)|0;B=q[q[c+332>>2]+4>>2];if(B){n[B](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=k;q[d+8>>2]=g|-2147483648;d=e;break s}o[d+11|0]=k;e=d;if(!k){break r}}kV(e,i,k)}o[d+k|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((j|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+160|0);q[l>>2]=28756;q[l+4>>2]=1;q[l+8>>2]=q[c+304>>2];q[l+12>>2]=q[c+308>>2];q[l+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[l+20>>2]=q[d>>2];q[l+24>>2]=q[d+4>>2];q[l+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=v;q[c+128>>2]=y;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=s;q[c+104>>2]=r;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+88>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[l>>2]>>2]](l)|0;d=q[c+88>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+88>>2]=0}q[c+88>>2]=l;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c+88|0);d=q[c+136>>2];t:{if(!d){y=0;break t}n[q[q[d>>2]>>2]](d)|0;y=d+ -4|0;d=q[c+136>>2];if(!d){break t}n[q[q[d>>2]+8>>2]](d)|0;q[c+136>>2]=0}d=q[c+88>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+88>>2]=0}d=q[c+112>>2];u:{if(!d){break u}q[c+116>>2]=d;e=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break u}n[d](q[c+320>>2])}d=q[c+304>>2];v:{if(!d){break v}q[c+308>>2]=d;e=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break v}n[d](q[c+320>>2])}k=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+212>>2]-q[c+208>>2]|0;e=(d|0)/12|0;w:{if(!d){break w}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+208>>2];i=q[c+212>>2];if((f|0)==(i|0)){break w}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;x:{if(o[f+11|0]>=0){j=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=j;q[e>>2]=q[f+8>>2];break x}j=q[f+4>>2];if(j>>>0>=4294967280){break a}g=q[f>>2];y:{z:{if(j>>>0>=11){wt(c+320|0);v=j+16&-16;e=n[q[c+328>>2]](c+320|0,v)|0;r=q[q[c+332>>2]+4>>2];if(r){n[r](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=j;q[d+8>>2]=v|-2147483648;d=e;break z}o[d+11|0]=j;e=d;if(!j){break y}}kV(e,g,j)}o[d+j|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((i|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+144|0);q[k>>2]=28756;q[k+4>>2]=1;q[k+8>>2]=q[c+304>>2];q[k+12>>2]=q[c+308>>2];q[k+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[k+20>>2]=q[d>>2];q[k+24>>2]=q[d+4>>2];q[k+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=m;q[c+128>>2]=h;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=A;q[c+104>>2]=u;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+80>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[k>>2]>>2]](k)|0;d=q[c+80>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+80>>2]=0}q[c+80>>2]=k;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c+80|0);d=q[c+136>>2];A:{if(!d){v=0;break A}n[q[q[d>>2]>>2]](d)|0;v=d+ -4|0;d=q[c+136>>2];if(!d){break A}n[q[q[d>>2]+8>>2]](d)|0;q[c+136>>2]=0}d=q[c+80>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+80>>2]=0}d=q[c+112>>2];B:{if(!d){break B}q[c+116>>2]=d;e=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break B}n[d](q[c+320>>2])}d=q[c+304>>2];C:{if(!d){break C}q[c+308>>2]=d;e=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break C}n[d](q[c+320>>2])}j=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+276>>2]-q[c+272>>2]|0;e=(d|0)/12|0;D:{if(!d){break D}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+272>>2];g=q[c+276>>2];if((f|0)==(g|0)){break D}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;E:{if(o[f+11|0]>=0){i=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=i;q[e>>2]=q[f+8>>2];break E}i=q[f+4>>2];if(i>>>0>=4294967280){break a}r=q[f>>2];F:{G:{if(i>>>0>=11){wt(c+320|0);s=i+16&-16;e=n[q[c+328>>2]](c+320|0,s)|0;h=q[q[c+332>>2]+4>>2];if(h){n[h](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=i;q[d+8>>2]=s|-2147483648;d=e;break G}o[d+11|0]=i;e=d;if(!i){break F}}kV(e,r,i)}o[d+i|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((g|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+192|0);q[j>>2]=28756;q[j+4>>2]=1;q[j+8>>2]=q[c+304>>2];q[j+12>>2]=q[c+308>>2];q[j+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[j+20>>2]=q[d>>2];q[j+24>>2]=q[d+4>>2];q[j+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=K;q[c+128>>2]=p;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=L;q[c+104>>2]=C;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+72>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[j>>2]>>2]](j)|0;d=q[c+72>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+72>>2]=0}q[c+72>>2]=j;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c+72|0);d=q[c+136>>2];H:{if(!d){r=0;break H}n[q[q[d>>2]>>2]](d)|0;r=d+ -4|0;d=q[c+136>>2];if(!d){break H}n[q[q[d>>2]+8>>2]](d)|0;q[c+136>>2]=0}d=q[c+72>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+72>>2]=0}d=q[c+112>>2];I:{if(!d){break I}q[c+116>>2]=d;e=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break I}n[d](q[c+320>>2])}d=q[c+304>>2];J:{if(!d){break J}q[c+308>>2]=d;e=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break J}n[d](q[c+320>>2])}i=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+292>>2]-q[c+288>>2]|0;e=(d|0)/12|0;K:{if(!d){break K}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+288>>2];s=q[c+292>>2];if((f|0)==(s|0)){break K}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;L:{if(o[f+11|0]>=0){g=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=g;q[e>>2]=q[f+8>>2];break L}g=q[f+4>>2];if(g>>>0>=4294967280){break a}h=q[f>>2];M:{N:{if(g>>>0>=11){wt(c+320|0);m=g+16&-16;e=n[q[c+328>>2]](c+320|0,m)|0;u=q[q[c+332>>2]+4>>2];if(u){n[u](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=g;q[d+8>>2]=m|-2147483648;d=e;break N}o[d+11|0]=g;e=d;if(!g){break M}}kV(e,h,g)}o[d+g|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((s|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+192|0);q[i>>2]=28756;q[i+4>>2]=1;q[i+8>>2]=q[c+304>>2];q[i+12>>2]=q[c+308>>2];q[i+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[i+20>>2]=q[d>>2];q[i+24>>2]=q[d+4>>2];q[i+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=M;q[c+128>>2]=D;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=N;q[c+104>>2]=E;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+64>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[i>>2]>>2]](i)|0;d=q[c+64>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+64>>2]=0}q[c+64>>2]=i;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c- -64|0);d=q[c+136>>2];O:{if(!d){s=0;break O}n[q[q[d>>2]>>2]](d)|0;s=d+ -4|0;d=q[c+136>>2];if(!d){break O}n[q[q[d>>2]+8>>2]](d)|0;q[c+136>>2]=0}d=q[c+64>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+64>>2]=0}d=q[c+112>>2];P:{if(!d){break P}q[c+116>>2]=d;e=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break P}n[d](q[c+320>>2])}d=q[c+304>>2];Q:{if(!d){break Q}q[c+308>>2]=d;e=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,d,e-d|0);d=q[q[c+332>>2]+4>>2];if(!d){break Q}n[d](q[c+320>>2])}g=_S(32);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;d=q[c+260>>2]-q[c+256>>2]|0;e=(d|0)/12|0;R:{if(!d){break R}if(e>>>0>=357913942){break b}wt(c+320|0);d=n[q[c+328>>2]](c+320|0,d)|0;f=q[q[c+332>>2]+4>>2];if(f){n[f](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=w(e,12)+d;f=q[c+256>>2];m=q[c+260>>2];if((f|0)==(m|0)){break R}while(1){q[d>>2]=0;q[d+4>>2]=0;e=d+8|0;q[e>>2]=0;S:{if(o[f+11|0]>=0){h=q[f+4>>2];q[d>>2]=q[f>>2];q[d+4>>2]=h;q[e>>2]=q[f+8>>2];break S}h=q[f+4>>2];if(h>>>0>=4294967280){break a}u=q[f>>2];T:{U:{if(h>>>0>=11){wt(c+320|0);A=h+16&-16;e=n[q[c+328>>2]](c+320|0,A)|0;p=q[q[c+332>>2]+4>>2];if(p){n[p](q[c+320>>2])}q[d>>2]=e;q[d+4>>2]=h;q[d+8>>2]=A|-2147483648;d=e;break U}o[d+11|0]=h;e=d;if(!h){break T}}kV(e,u,h)}o[d+h|0]=0}d=q[c+308>>2]+12|0;q[c+308>>2]=d;f=f+12|0;if((m|0)!=(f|0)){continue}break}}d=Iw(c+320|0,c+176|0);q[g>>2]=28756;q[g+4>>2]=1;q[g+8>>2]=q[c+304>>2];q[g+12>>2]=q[c+308>>2];q[g+16>>2]=q[c+312>>2];q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[g+20>>2]=q[d>>2];q[g+24>>2]=q[d+4>>2];q[g+28>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;Jw(d);Kw(c+304|0);q[c+312>>2]=0;q[c+304>>2]=0;q[c+308>>2]=0;q[c+132>>2]=O;q[c+128>>2]=G;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+308>>2]=d;q[c+304>>2]=d;q[c+312>>2]=d+8;e=q[c+132>>2];q[d>>2]=q[c+128>>2];q[d+4>>2]=e;q[c+308>>2]=q[c+308>>2]+8;q[c+120>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+108>>2]=P;q[c+104>>2]=H;wt(c+320|0);d=n[q[c+328>>2]](c+320|0,8)|0;e=q[q[c+332>>2]+4>>2];if(e){n[e](q[c+320>>2])}q[c+116>>2]=d;q[c+112>>2]=d;q[c+120>>2]=d+8;e=q[c+108>>2];q[d>>2]=q[c+104>>2];q[d+4>>2]=e;q[c+56>>2]=0;q[c+116>>2]=q[c+116>>2]+8;n[q[q[g>>2]>>2]](g)|0;d=q[c+56>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+56>>2]=0}q[c+56>>2]=g;n[q[q[t>>2]+80>>2]](c+136|0,t,c+304|0,c+112|0,c+56|0);d=q[c+136>>2];V:{if(!d){d=0;break V}n[q[q[d>>2]>>2]](d)|0;d=d+ -4|0;e=q[c+136>>2];if(!e){break V}n[q[q[e>>2]+8>>2]](e)|0;q[c+136>>2]=0}e=q[c+56>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c+56>>2]=0}e=q[c+112>>2];W:{if(!e){break W}q[c+116>>2]=e;f=q[c+120>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,e,f-e|0);e=q[q[c+332>>2]+4>>2];if(!e){break W}n[e](q[c+320>>2])}e=q[c+304>>2];X:{if(!e){break X}q[c+308>>2]=e;f=q[c+312>>2];xt(c+320|0);n[q[c+328>>2]](c+320|0,e,f-e|0);e=q[q[c+332>>2]+4>>2];if(!e){break X}n[e](q[c+320>>2])}q[c+48>>2]=0;m=b+16|0;Y:{if(!z){break Y}n[q[q[z+4>>2]>>2]](z+4|0)|0;e=q[c+48>>2];if(!e){break Y}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[c+48>>2]=0}q[c+48>>2]=z;A=rB(m,c+48|0,29240);e=q[c+48>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[c+48>>2]=0}if(!A){break d}q[c+40>>2]=0;Z:{if(!y){break Z}n[q[q[y+4>>2]>>2]](y+4|0)|0;e=q[c+40>>2];if(!e){break Z}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[c+40>>2]=0}q[c+40>>2]=y;u=rB(m,c+40|0,29259);e=q[c+40>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[c+40>>2]=0}if(!u){break h}q[c+32>>2]=0;_:{if(!v){break _}n[q[q[v+4>>2]>>2]](v+4|0)|0;e=q[c+32>>2];if(!e){break _}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[c+32>>2]=0}q[c+32>>2]=v;e=rB(m,c+32|0,29280);f=q[c+32>>2];if(f){n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[c+32>>2]=0}if(!e){break h}q[c+24>>2]=0;$:{if(!r){break $}n[q[q[r+4>>2]>>2]](r+4|0)|0;f=q[c+24>>2];if(!f){break $}n[q[q[f+4>>2]+8>>2]](f+4|0)|0;q[c+24>>2]=0}q[c+24>>2]=r;f=rB(m,c+24|0,29300);h=q[c+24>>2];if(h){n[q[q[h+4>>2]+8>>2]](h+4|0)|0;q[c+24>>2]=0}if(!f){break g}q[c+16>>2]=0;aa:{if(!s){break aa}n[q[q[s+4>>2]>>2]](s+4|0)|0;h=q[c+16>>2];if(!h){break aa}n[q[q[h+4>>2]+8>>2]](h+4|0)|0;q[c+16>>2]=0}q[c+16>>2]=s;h=rB(m,c+16|0,29317);p=q[c+16>>2];if(p){n[q[q[p+4>>2]+8>>2]](p+4|0)|0;q[c+16>>2]=0}if(!h){break f}q[c+8>>2]=0;ba:{if(!d){break ba}n[q[q[d+4>>2]>>2]](d+4|0)|0;p=q[c+8>>2];if(!p){break ba}n[q[q[p+4>>2]+8>>2]](p+4|0)|0;q[c+8>>2]=0}q[c+8>>2]=d;m=rB(m,c+8|0,29336);p=q[c+8>>2];if(p){n[q[q[p+4>>2]+8>>2]](p+4|0)|0;q[c+8>>2]=0}if(!m){break e}ca:{if((n[q[q[b>>2]+244>>2]](b)|0)!=1){if((n[q[q[b>>2]+244>>2]](b)|0)!=3){break ca}}o[A+68|0]=1;o[u+68|0]=1;o[e+68|0]=1;o[f+68|0]=1;o[h+68|0]=1;o[m+68|0]=1}q[c+320>>2]=0;cV(c+320|0,16,548);Q=a,R=_w(q[c+320>>2],b,A,u,e,f,h,m),q[Q>>2]=R;break c}e=0}f=0}h=0}n[q[q[A>>2]+12>>2]](A);if(u){n[q[q[u>>2]+12>>2]](u)}if(e){n[q[q[e>>2]+12>>2]](e)}if(f){n[q[q[f>>2]+12>>2]](f)}if(!h){break d}n[q[q[h>>2]+12>>2]](h)}q[a>>2]=0}if(d){n[q[q[d+4>>2]+8>>2]](d+4|0)|0}n[q[q[g>>2]+8>>2]](g)|0;if(s){n[q[q[s+4>>2]+8>>2]](s+4|0)|0}n[q[q[i>>2]+8>>2]](i)|0;if(r){n[q[q[r+4>>2]+8>>2]](r+4|0)|0}n[q[q[j>>2]+8>>2]](j)|0;if(v){n[q[q[v+4>>2]+8>>2]](v+4|0)|0}n[q[q[k>>2]+8>>2]](k)|0;if(y){n[q[q[y+4>>2]+8>>2]](y+4|0)|0}n[q[q[l>>2]+8>>2]](l)|0;if(z){n[q[q[z+4>>2]+8>>2]](z+4|0)|0}n[q[q[x>>2]+8>>2]](x)|0;Jw(c+144|0);Jw(c+160|0);Jw(c+176|0);Jw(c+192|0);Kw(c+208|0);Kw(c+224|0);Kw(c+240|0);Kw(c+256|0);Kw(c+272|0);Kw(c+288|0);n[q[q[t>>2]+8>>2]](t)|0;ue=c+336|0;return}kU();F()}kT();F()}function ZA(a,b,c){var d=0,e=0,f=0,g=x(0),h=x(0),i=0,j=0,k=x(0),l=0,m=x(0),o=0,p=x(0),s=x(0),t=x(0),v=0,y=0,z=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=x(0),L=0,M=0,N=x(0),O=0,P=0,Q=0,R=x(0),S=0,T=0,U=x(0),V=x(0),W=0,X=x(0),Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=x(0),fa=x(0),ga=x(0),ha=x(0),ia=x(0),ja=x(0),ka=x(0),la=0,ma=0,na=x(0),oa=x(0),pa=x(0),qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=x(0);d=ue-704|0;ue=d;f=q[a+24>>2];e=q[a+28>>2];a:{if((f|0)==(e|0)){break a}b:{if(q[b+48>>2]!=1){break b}j=e-f|0;if(j){o=(j|0)/240|0;j=d+384|0;e=d+216|0;while(1){c:{if(!i){Xs(d+352|0,f+256|0);Xs(d+192|0,q[a+24>>2]+16|0);m=x(u[d+364>>2]-u[d+204>>2]);k=x(u[d+360>>2]-u[d+200>>2]);s=x(u[d+356>>2]-u[d+196>>2]);g=x(u[d+352>>2]-u[d+192>>2]);break c}if((o+ -1|0)==(i|0)){l=w(i,240);Xs(d+352|0,(l+f|0)+16|0);Xs(d+192|0,(l+q[a+24>>2]|0)+ -224|0);m=x(u[d+364>>2]-u[d+204>>2]);k=x(u[d+360>>2]-u[d+200>>2]);s=x(u[d+356>>2]-u[d+196>>2]);g=x(u[d+352>>2]-u[d+192>>2]);break c}l=w(i,240);Xs(d+352|0,(l+f|0)+256|0);Xs(d+192|0,(l+q[a+24>>2]|0)+ -224|0);m=x(u[d+364>>2]-u[d+204>>2]);k=x(u[d+360>>2]-u[d+200>>2]);s=x(u[d+356>>2]-u[d+196>>2]);g=x(u[d+352>>2]-u[d+192>>2])}h=x(x(x(g*g)+x(s*s))+x(k*k));if(!(h>2];n[q[q[l>>2]+88>>2]](d+352|0,l);nt(d+288|0,d+352|0);N=u[d+300>>2];h=x(m*N);h=x(h-h);t=u[d+292>>2];p=u[d+288>>2];m=x(x(g*t)-x(s*p));K=u[d+296>>2];g=x(x(k*p)-x(g*K));k=x(x(s*K)-x(k*t));s=x(x(m*m)+x(x(g*g)+x(k*k)));if(!(s>2]=h;h=x(N*h);u[d+380>>2]=h-h;u[d+352>>2]=k;u[d+356>>2]=g;u[d+376>>2]=x(p*g)-x(t*k);u[d+360>>2]=m;u[d+372>>2]=x(K*k)-x(p*m);u[d+368>>2]=x(t*m)-x(K*g);l=q[d+300>>2];q[j+8>>2]=q[d+296>>2];q[j+12>>2]=l;l=q[d+292>>2];q[j>>2]=q[d+288>>2];q[j+4>>2]=l;it(d+192|0,d+352|0);l=q[d+252>>2];q[d+408>>2]=q[d+248>>2];q[d+412>>2]=l;l=q[d+244>>2];q[d+400>>2]=q[d+240>>2];q[d+404>>2]=l;l=q[d+236>>2];q[d+392>>2]=q[d+232>>2];q[d+396>>2]=l;l=q[d+228>>2];q[j>>2]=q[d+224>>2];q[j+4>>2]=l;l=q[e+4>>2];q[d+376>>2]=q[e>>2];q[d+380>>2]=l;l=q[d+212>>2];q[d+368>>2]=q[d+208>>2];q[d+372>>2]=l;l=q[d+204>>2];q[d+360>>2]=q[d+200>>2];q[d+364>>2]=l;l=q[d+196>>2];q[d+352>>2]=q[d+192>>2];q[d+356>>2]=l;zj(d+192|0,d+352|0);h=u[d+192>>2];s=u[d+196>>2];t=u[d+200>>2];k=u[d+204>>2];g=x(x(E(x(x(x(x(h*h)+x(s*s))+x(t*t))+x(k*k))))+x(9999999747378752e-21));u[d+196>>2]=s/g;u[d+192>>2]=h/g;u[d+204>>2]=k/g;u[d+200>>2]=t/g;o=q[d+196>>2];l=q[a+36>>2]+(i<<4)|0;f=l;q[f>>2]=q[d+192>>2];q[f+4>>2]=o;f=q[d+204>>2];q[l+8>>2]=q[d+200>>2];q[l+12>>2]=f;i=i+1|0;f=q[a+24>>2];o=(q[a+28>>2]-f|0)/240|0;if(i>>>0>>0){continue}break}}j=q[a+36>>2];l=q[j+4>>2];e=q[a+48>>2];q[e>>2]=q[j>>2];q[e+4>>2]=l;i=q[j+12>>2];q[e+8>>2]=q[j+8>>2];q[e+12>>2]=i;j=q[a+40>>2]+ -16|0;l=q[j+4>>2];e=q[a+52>>2]+ -16|0;q[e>>2]=q[j>>2];q[e+4>>2]=l;i=q[j+12>>2];q[e+8>>2]=q[j+8>>2];q[e+12>>2]=i;e=q[a+28>>2];f=q[a+24>>2];if(((e-f|0)/240|0)+ -1>>>0<2){break b}i=1;while(1){j=i<<4;e=q[a+36>>2];i=i+1|0;Aj(d+352|0,(j+e|0)+ -16|0,e+(i<<4)|0,x(.5));Aj(d+192|0,d+352|0,j+q[a+36>>2]|0,x(.6666666865348816));l=q[d+196>>2];j=j+q[a+48>>2]|0;e=j;q[e>>2]=q[d+192>>2];q[e+4>>2]=l;e=q[d+204>>2];q[j+8>>2]=q[d+200>>2];q[j+12>>2]=e;e=q[a+28>>2];f=q[a+24>>2];if(i>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}if(q[b+12>>2]>=2){e=a+60|0;ms(e);f=q[a+24>>2];if((f|0)!=q[a+28>>2]){i=0;l=d+368|0;while(1){q[d+200>>2]=0;q[d+204>>2]=0;q[d+192>>2]=0;q[d+196>>2]=0;f=w(i,240)+f|0;o=q[f+60>>2];q[d+392>>2]=q[f+56>>2];q[d+396>>2]=o;o=q[f+52>>2];q[d+384>>2]=q[f+48>>2];q[d+388>>2]=o;o=q[f+44>>2];q[d+376>>2]=q[f+40>>2];q[d+380>>2]=o;o=q[f+36>>2];q[l>>2]=q[f+32>>2];q[l+4>>2]=o;o=q[f+20>>2];q[d+352>>2]=q[f+16>>2];q[d+356>>2]=o;o=q[f+28>>2];q[d+360>>2]=q[f+24>>2];q[d+364>>2]=o;if(r[b+44|0]){vu(d+352|0,c,u[f+204>>2])}j=q[a+8>>2];n[q[q[j>>2]+88>>2]](d+672|0,j);nt(d+288|0,d+672|0);j=q[a+8>>2];n[q[q[j>>2]+92>>2]](d+640|0,j);su(d+352|0,nt(d+688|0,d+640|0),q[b+24>>2],r[b+16|0]);Xs(d+288|0,d+352|0);j=q[d+300>>2];q[d+200>>2]=q[d+296>>2];q[d+204>>2]=j;j=q[d+292>>2];q[d+192>>2]=q[d+288>>2];q[d+196>>2]=j;js(e,d+192|0);i=i+1|0;f=q[a+24>>2];if(i>>>0<(q[a+28>>2]-f|0)/240>>>0){continue}break}}ls(e);f=q[a+24>>2];e=q[a+28>>2]}i=-1;H=q[a+148>>2];v=H;l=q[a+20>>2];j=l;if((e|0)!=(f|0)){_=H<<1;$=H<<3;aa=w(H,11);ba=w(H,10);ca=w(H,7);Y=w(H,6);da=w(H,5);qa=H<<2;ra=a+60|0;I=d+528|0;o=d+440|0;j=l;while(1){if(q[b+12>>2]>=1){f=w(L,240)+f|0;sa=f+200|0;ta=f+196|0;ua=f+88|0;va=f+87|0;wa=f+75|0;xa=f+86|0;ya=f+74|0;za=f+85|0;Aa=f+73|0;Ba=f+84|0;Ca=f+72|0;Da=f+83|0;Ea=f+71|0;Fa=f+82|0;Ga=f+70|0;Ha=f+81|0;Ia=f+69|0;Ja=f+80|0;Ka=f+68|0;La=f+79|0;Ma=f+67|0;Na=f+78|0;Oa=f+66|0;Pa=f+77|0;Qa=f+65|0;Ra=f+76|0;Sa=f- -64|0;Ta=f+92|0;Ua=f+96|0;M=f+4|0;Va=f+204|0;i=f+16|0;v=0;while(1){e=i;y=q[e+44>>2];q[d+232>>2]=q[e+40>>2];q[d+236>>2]=y;y=q[e+36>>2];q[d+224>>2]=q[e+32>>2];q[d+228>>2]=y;y=q[e+28>>2];q[d+216>>2]=q[e+24>>2];q[d+220>>2]=y;y=q[e+20>>2];q[d+208>>2]=q[e+16>>2];q[d+212>>2]=y;y=q[e+4>>2];q[d+192>>2]=q[e>>2];q[d+196>>2]=y;y=q[e+12>>2];q[d+200>>2]=q[e+8>>2];q[d+204>>2]=y;if(r[b+44|0]){vu(d+192|0,c,u[Va>>2])}Ys(d+192|0,d+688|0,d+288|0,d+672|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+656|0,e);nt(d+352|0,d+656|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+624|0,e);tu(d+672|0,d+688|0,nt(d+640|0,d+624|0),q[b+24>>2]);y=q[M>>2];la=q[f>>2];ma=(y|0)<((la|0)/2|0);h=u[(ma?ua:Ua)>>2];Wa=r[La|0];G=r[Ma|0];Xa=r[Na|0];D=r[Oa|0];Ya=r[Ra|0];J=r[Sa|0];Za=r[Pa|0];z=r[Qa|0];_a=r[Da|0];O=r[Ea|0];$a=r[Fa|0];P=r[Ga|0];ab=r[Ja|0];Q=r[Ka|0];bb=r[Ha|0];W=r[Ia|0];cb=r[va|0];Z=r[wa|0];db=r[xa|0];e=r[ya|0];eb=r[Ba|0];F=r[Ca|0];fb=r[za|0];S=r[Aa|0];s=u[Ta>>2];T=q[b+12>>2];yp(d+352|0);yp(o);yp(I);q[d+532>>2]=0;q[d+536>>2]=0;q[d+448>>2]=0;q[d+440>>2]=0;q[d+444>>2]=0;q[d+356>>2]=0;q[d+360>>2]=0;g=x(w(y,T)+v|0);C=T;T=la+ -1|0;g=x(g/x(w(C,T)|0));g=x(g+g);g=ma?g:x(x(1)-x(g+x(-1)));h=x(h+x(g*x(s-h)));s=u[d+688>>2];u[d+528>>2]=x(h*x(.5))*s;u[d+352>>2]=s*x(h*x(-.5));h=x(B(x(A(x(x(g*x(fb-S|0))+x(S>>>0)),x(255))),x(0)));d:{if(h=x(0)){C=~~h>>>0;break d}C=0}S=C<<8;h=x(B(x(A(x(x(g*x(eb-F|0))+x(F>>>0)),x(255))),x(0)));e:{if(h=x(0)){F=~~h>>>0;break e}F=0}S=F|S;h=x(B(x(A(x(x(g*x(db-e|0))+x(e>>>0)),x(255))),x(0)));f:{if(h=x(0)){F=~~h>>>0;break f}F=0}e=d;C=F<<16|S;h=x(B(x(A(x(x(g*x(cb-Z|0))+x(Z>>>0)),x(255))),x(0)));g:{if(h=x(0)){F=~~h>>>0;break g}F=0}q[e+540>>2]=C|F<<24;h=x(B(x(A(x(x(g*x(bb-W|0))+x(W>>>0)),x(255))),x(0)));h:{if(h=x(0)){e=~~h>>>0;break h}e=0}W=e<<8;h=x(B(x(A(x(x(g*x(ab-Q|0))+x(Q>>>0)),x(255))),x(0)));i:{if(h=x(0)){e=~~h>>>0;break i}e=0}Q=e|W;e=d;h=x(B(x(A(x(x(g*x($a-P|0))+x(P>>>0)),x(255))),x(0)));j:{if(h=x(0)){F=~~h>>>0;break j}F=0}C=F<<16|Q;h=x(B(x(A(x(x(g*x(_a-O|0))+x(O>>>0)),x(255))),x(0)));k:{if(h=x(0)){F=~~h>>>0;break k}F=0}q[e+452>>2]=C|F<<24;h=x(B(x(A(x(x(g*x(Za-z|0))+x(z>>>0)),x(255))),x(0)));l:{if(h=x(0)){e=~~h>>>0;break l}e=0}z=e<<8;h=x(B(x(A(x(x(g*x(Ya-J|0))+x(J>>>0)),x(255))),x(0)));m:{if(h=x(0)){e=~~h>>>0;break m}e=0}J=e|z;e=d;h=x(B(x(A(x(x(g*x(Xa-D|0))+x(D>>>0)),x(255))),x(0)));n:{if(h=x(0)){D=~~h>>>0;break n}D=0}D=D<<16|J;g=x(B(x(A(x(x(g*x(Wa-G|0))+x(G>>>0)),x(255))),x(0)));o:{if(g=x(0)){G=~~g>>>0;break o}G=0}q[e+364>>2]=D|G<<24;e=q[ta>>2];q[d+432>>2]=e;q[d+520>>2]=e;q[d+608>>2]=e;e=q[sa>>2];q[d+436>>2]=e;q[d+524>>2]=e;q[d+612>>2]=e;G=y|v;e=q[b+12>>2];p:{if((e|0)>=2){ns(d+640|0,ra,x(x(x(v|0)/x(e|0))+x(q[M>>2])));yp(d+656|0);q[o+8>>2]=q[d+648>>2];e=q[d+644>>2];q[o>>2]=q[d+640>>2];q[o+4>>2]=e;break p}yp(d+640|0);q[o+8>>2]=q[d+680>>2];e=q[d+676>>2];q[o>>2]=q[d+672>>2];q[o+4>>2]=e}e=kV(j,d+352|0,88);kV(e+H|0,o,88);kV(e+qa|0,o,88);kV(e+da|0,I,88);j=e+_|0;q:{if(!G){break q}j=e+Y|0;if((y|0)==(T|0)){q[a+12>>2]=q[a+12>>2]+2;break q}kV(j,d+352|0,88);kV(e+ca|0,o,88);kV(e+ba|0,o,88);kV(e+aa|0,I,88);q[a+12>>2]=q[a+12>>2]+2;j=e+$|0}v=v+1|0;if((y|0)!=(T|0)?(v|0)>2]:0){continue}break}f=q[a+24>>2];e=q[a+28>>2]}L=L+1|0;i=(e-f|0)/240|0;if(L>>>0>>0){continue}break}v=q[a+148>>2];i=i+ -1|0}Q=w(i,q[b+12>>2]);if((Q|0)!=-1){Z=v<<1;F=v<<3;S=w(v,11);T=w(v,10);_=w(v,6);$=v<<2;aa=w(v,5);ba=w(v,3);W=w(v,7);ca=w(v,9);e=q[a+20>>2];o=0;y=d+296|0;I=d+304|0;while(1){r:{s:{if(!o){Cp(d+192|0,e+ba|0,e+v|0);nt(d+352|0,d+192|0);s=u[d+352>>2];h=u[d+356>>2];t=u[d+360>>2];R=x(x(x(s*s)+x(h*h))+x(t*t));if(R>2];g=u[d+356>>2];k=u[d+360>>2];h=x(x(x(m*m)+x(g*g))+x(k*k));if(!(h>2];N=u[d+356>>2];U=u[d+352>>2];kV(d+352|0,e,88);q[d+656>>2]=q[f+12>>2];c=q[f+36>>2];q[y>>2]=q[f+32>>2];q[y+4>>2]=c;c=q[f+44>>2];q[I>>2]=q[f+40>>2];q[I+4>>2]=c;i=q[f+52>>2];L=d+312|0;c=L;q[c>>2]=q[f+48>>2];q[c+4>>2]=i;i=q[f+60>>2];M=d+320|0;c=M;q[c>>2]=q[f+56>>2];q[c+4>>2]=i;i=f- -64|0;D=q[i+4>>2];G=d+328|0;c=G;q[c>>2]=q[i>>2];q[c+4>>2]=D;i=q[f+76>>2];D=d+336|0;c=D;q[c>>2]=q[f+72>>2];q[c+4>>2]=i;i=q[f+84>>2];J=d+344|0;c=J;q[c>>2]=q[f+80>>2];q[c+4>>2]=i;c=q[f+28>>2];q[d+288>>2]=q[f+24>>2];q[d+292>>2]=c;Y=e+aa|0;kV(d+192|0,Y,88);t:{if(q[b+48>>2]==1){u:{if((o|0)==(Q|0)){c=q[a+52>>2]+ -16|0;m=u[c+12>>2];k=u[c+4>>2];p=u[c>>2];g=u[c+8>>2];break u}i=q[b+12>>2];c=q[a+48>>2]+((o|0)/(i|0)<<4)|0;z=q[c+4>>2];q[d+688>>2]=q[c>>2];q[d+692>>2]=z;z=q[c+12>>2];q[d+696>>2]=q[c+8>>2];q[d+700>>2]=z;z=q[c+28>>2];q[d+680>>2]=q[c+24>>2];q[d+684>>2]=z;z=q[c+20>>2];q[d+672>>2]=q[c+16>>2];q[d+676>>2]=z;Aj(d+640|0,d+688|0,d+672|0,x(x((o>>>0)%(i>>>0)|0)/x(i|0)));m=u[d+652>>2];k=u[d+644>>2];p=u[d+640>>2];g=u[d+648>>2]}ga=u[d+352>>2];yp(d+688|0);ha=x(p*p);ia=x(k*k);ja=x(g*g);ka=x(m*m);na=x(k*g);oa=x(p*m);V=x(na+oa);gb=x(x(V+V)*x(0));V=x(p*g);pa=x(k*m);X=x(V-pa);X=x(x(x(x(x(x(-ha)-ia)+ja)+ka)*x(0))+x(gb-x(X+X)));u[d+696>>2]=K+x(ga*X);q[d+360>>2]=q[d+696>>2];V=x(V+pa);k=x(p*k);g=x(g*m);m=x(k-g);m=x(x(x(V+V)*x(0))+x(x(x(m+m)*x(0))-x(x(x(ha-ia)-ja)+ka)));u[d+688>>2]=U+x(ga*m);p=x(na-oa);g=x(k+g);k=x(x(x(p+p)*x(0))+x(x(x(x(x(ia-ha)-ja)+ka)*x(0))-x(g+g)));u[d+692>>2]=N+x(ga*k);c=q[d+692>>2];q[d+352>>2]=q[d+688>>2];q[d+356>>2]=c;yp(d+688|0);g=u[d+192>>2];yp(d+688|0);u[d+696>>2]=K+x(X*g);q[d+200>>2]=q[d+696>>2];u[d+692>>2]=N+x(k*g);u[d+688>>2]=U+x(m*g);break t}c=q[a+8>>2];n[q[q[c>>2]+88>>2]](d+672|0,c);nt(d+688|0,d+672|0);g=u[d+692>>2];k=u[d+688>>2];m=x(x(s*g)-x(h*k));p=u[d+696>>2];g=x(x(h*p)-x(t*g));k=x(x(t*k)-x(s*p));p=x(x(m*m)+x(x(g*g)+x(k*k)));if(!(p>2];yp(d+688|0);u[d+696>>2]=K-x(m*p);q[d+360>>2]=q[d+696>>2];u[d+692>>2]=N-x(k*p);u[d+688>>2]=U-x(g*p);c=q[d+692>>2];q[d+352>>2]=q[d+688>>2];q[d+356>>2]=c;yp(d+688|0);p=u[d+192>>2];yp(d+688|0);u[d+696>>2]=K-x(m*p);q[d+200>>2]=q[d+696>>2];u[d+692>>2]=N-x(k*p);u[d+688>>2]=U-x(g*p)}c=q[d+692>>2];q[d+192>>2]=q[d+688>>2];q[d+196>>2]=c;Cp(d+672|0,d+352|0,d+192|0);nt(d+688|0,d+672|0);m=u[d+688>>2];g=u[d+692>>2];k=u[d+696>>2];p=x(x(x(m*m)+x(g*g))+x(k*k));if(!(p=x(0)){c=~~t>>>0;break v}c=0}g=x(B(x(A(x(x(x(x(g+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));w:{if(g=x(0)){C=~~g>>>0;break w}C=0}O=C<<8;g=x(B(x(A(x(x(x(x(k+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));x:{if(g=x(0)){C=~~g>>>0;break x}C=0}O=c|(O|C<<16)|-16777216;q[i+372>>2]=O;q[d+212>>2]=O;g=x(B(x(A(x(x(x(x((z?s:x(-s))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));y:{if(g=x(0)){c=~~g>>>0;break y}c=0}da=c<<8;i=f+24|0;c=d;g=x(B(x(A(x(x(x(x((z?h:x(-h))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));z:{if(g=x(0)){C=~~g>>>0;break z}C=0}P=C|da;g=x(B(x(A(x(x(x(x((z?p:x(-p))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));A:{if(g=x(0)){C=~~g>>>0;break A}C=0}P=P|C<<16|-16777216;q[c+208>>2]=P;q[d+368>>2]=P;z=kV(e,d+352|0,88);u[f+8>>2]=K;u[f+4>>2]=N;u[f>>2]=U;c=q[d+656>>2];q[f+20>>2]=O;q[f+16>>2]=P;q[f+12>>2]=c;c=q[J+4>>2];q[i+56>>2]=q[J>>2];q[i+60>>2]=c;c=q[D+4>>2];q[i+48>>2]=q[D>>2];q[i+52>>2]=c;c=q[G+4>>2];q[i+40>>2]=q[G>>2];q[i+44>>2]=c;c=q[M+4>>2];q[i+32>>2]=q[M>>2];q[i+36>>2]=c;c=q[L+4>>2];q[i+24>>2]=q[L>>2];q[i+28>>2]=c;c=q[I+4>>2];q[i+16>>2]=q[I>>2];q[i+20>>2]=c;c=q[y+4>>2];q[i+8>>2]=q[y>>2];q[i+12>>2]=c;c=q[d+292>>2];q[i>>2]=q[d+288>>2];q[i+4>>2]=c;c=z+$|0;u[c+8>>2]=K;u[c+4>>2]=N;u[c>>2]=U;e=q[d+656>>2];q[c+20>>2]=O;q[c+16>>2]=P;q[c+12>>2]=e;e=q[d+292>>2];q[c+24>>2]=q[d+288>>2];q[c+28>>2]=e;e=q[y+4>>2];q[c+32>>2]=q[y>>2];q[c+36>>2]=e;e=q[I+4>>2];q[c+40>>2]=q[I>>2];q[c+44>>2]=e;e=q[L+4>>2];q[c+48>>2]=q[L>>2];q[c+52>>2]=e;e=q[M+4>>2];q[c+56>>2]=q[M>>2];q[c+60>>2]=e;i=q[G+4>>2];e=c- -64|0;q[e>>2]=q[G>>2];q[e+4>>2]=i;e=q[D+4>>2];q[c+72>>2]=q[D>>2];q[c+76>>2]=e;e=q[J+4>>2];q[c+80>>2]=q[J>>2];q[c+84>>2]=e;kV(Y,d+192|0,88);e=z+Z|0;B:{if(!o){break B}c=z+_|0;e=c;if((o|0)==(Q|0)){break B}kV(c,d+352|0,88);c=z+W|0;u[c+8>>2]=K;u[c+4>>2]=N;u[c>>2]=U;e=q[d+656>>2];q[c+20>>2]=O;q[c+16>>2]=P;q[c+12>>2]=e;e=q[d+292>>2];q[c+24>>2]=q[d+288>>2];q[c+28>>2]=e;e=q[y+4>>2];q[c+32>>2]=q[y>>2];q[c+36>>2]=e;e=q[I+4>>2];q[c+40>>2]=q[I>>2];q[c+44>>2]=e;e=q[L+4>>2];q[c+48>>2]=q[L>>2];q[c+52>>2]=e;e=q[M+4>>2];q[c+56>>2]=q[M>>2];q[c+60>>2]=e;i=q[G+4>>2];e=c- -64|0;q[e>>2]=q[G>>2];q[e+4>>2]=i;e=q[D+4>>2];q[c+72>>2]=q[D>>2];q[c+76>>2]=e;e=q[J+4>>2];q[c+80>>2]=q[J>>2];q[c+84>>2]=e;c=z+T|0;u[c+8>>2]=K;u[c+4>>2]=N;u[c>>2]=U;e=q[d+656>>2];q[c+20>>2]=O;q[c+16>>2]=P;q[c+12>>2]=e;e=q[d+292>>2];q[c+24>>2]=q[d+288>>2];q[c+28>>2]=e;e=q[y+4>>2];q[c+32>>2]=q[y>>2];q[c+36>>2]=e;e=q[I+4>>2];q[c+40>>2]=q[I>>2];q[c+44>>2]=e;e=q[L+4>>2];q[c+48>>2]=q[L>>2];q[c+52>>2]=e;e=q[M+4>>2];q[c+56>>2]=q[M>>2];q[c+60>>2]=e;i=q[G+4>>2];e=c- -64|0;q[e>>2]=q[G>>2];q[e+4>>2]=i;e=q[D+4>>2];q[c+72>>2]=q[D>>2];q[c+76>>2]=e;e=q[J+4>>2];q[c+80>>2]=q[J>>2];q[c+84>>2]=e;kV(z+S|0,d+192|0,88);e=z+F|0}o=o+1|0;Q=w(q[b+12>>2],((q[a+28>>2]-q[a+24>>2]|0)/240|0)+ -1|0);if(o>>>0>>0){continue}break}}q[d+88>>2]=l;q[d+180>>2]=j;q[d+176>>2]=H;q[d+184>>2]=l;c=q[d+180>>2];q[d+80>>2]=q[d+176>>2];q[d+84>>2]=c;bB(a,b,d+80|0);q[d+72>>2]=l;q[d+164>>2]=j;q[d+160>>2]=H;q[d+168>>2]=l;c=q[d+164>>2];q[d+64>>2]=q[d+160>>2];q[d+68>>2]=c;eB(a,b,d- -64|0);q[d+56>>2]=l;q[d+148>>2]=j;q[d+144>>2]=H;q[d+152>>2]=l;c=q[d+148>>2];q[d+48>>2]=q[d+144>>2];q[d+52>>2]=c;fB(a,b,d+48|0);q[d+40>>2]=l;q[d+132>>2]=j;q[d+128>>2]=H;q[d+136>>2]=l;c=q[d+132>>2];q[d+32>>2]=q[d+128>>2];q[d+36>>2]=c;gB(a,b,d+32|0);q[d+24>>2]=l;q[d+116>>2]=j;q[d+112>>2]=H;q[d+120>>2]=l;c=q[d+116>>2];q[d+16>>2]=q[d+112>>2];q[d+20>>2]=c;hB(a,b,d+16|0);q[d+8>>2]=l;q[d+100>>2]=j;q[d+96>>2]=H;q[d+104>>2]=l;c=q[d+100>>2];q[d>>2]=q[d+96>>2];q[d+4>>2]=c;iB(a,b,d);C:{if(q[a+152>>2]<1){break C}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break C}c=q[a+148>>2];o=q[a+20>>2]+40|0;v=q[b+12>>2];i=0;while(1){if((v|0)>=1){j=(w(i,240)+f|0)+208|0;e=0;while(1){o=kV(kV(kV(kV(kV(kV(kV(kV(o,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0,j,q[a+152>>2]<<2)+c|0;e=e+1|0;v=q[b+12>>2];if((e|0)<(v|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}i=i+1|0;if(i>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}if(q[a+156>>2]<1){break a}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break a}c=q[a+148>>2];o=(q[a+20>>2]+(q[a+152>>2]<<2)|0)+40|0;v=q[b+12>>2];i=0;while(1){if((v|0)>=1){j=(w(i,240)+f|0)+224|0;e=0;while(1){o=kV(kV(kV(kV(kV(kV(kV(kV(o,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0,j,q[a+156>>2]<<2)+c|0;e=e+1|0;v=q[b+12>>2];if((e|0)<(v|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}i=i+1|0;if(i>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}ue=d+704|0}function Bw(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0,u=0;f=ue+ -64|0;ue=f;h=q[b+16>>2];g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;i=q[q[f+60>>2]+4>>2];if(i){n[i](q[f+48>>2])}q[g>>2]=16;q[g+4>>2]=-2147483616;q[f+20>>2]=e;o[e+16|0]=0;g=r[28098]|r[28099]<<8|(r[28100]<<16|r[28101]<<24);i=r[28094]|r[28095]<<8|(r[28096]<<16|r[28097]<<24);o[e+8|0]=i;o[e+9|0]=i>>>8;o[e+10|0]=i>>>16;o[e+11|0]=i>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28090]|r[28091]<<8|(r[28092]<<16|r[28093]<<24);i=r[28086]|r[28087]<<8|(r[28088]<<16|r[28089]<<24);o[e|0]=i;o[e+1|0]=i>>>8;o[e+2|0]=i>>>16;o[e+3|0]=i>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=h;q[f+32>>2]=1;q[f+36>>2]=1;i=c+4|0;g=q[c+4>>2];a:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break a}Aw(c,f+16|0);if(o[f+31|0]>-1){break a}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break a}n[e](q[f+48>>2])}j=q[b+76>>2];b:{if(d){g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;h=q[q[f+60>>2]+4>>2];if(h){n[h](q[f+48>>2])}q[g>>2]=11;q[g+4>>2]=-2147483632;q[f+20>>2]=e;o[e+11|0]=0;g=r[28110]|r[28111]<<8|(r[28112]<<16|r[28113]<<24);o[e+7|0]=g;o[e+8|0]=g>>>8;o[e+9|0]=g>>>16;o[e+10|0]=g>>>24;g=r[28107]|r[28108]<<8|(r[28109]<<16|r[28110]<<24);h=r[28103]|r[28104]<<8|(r[28105]<<16|r[28106]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=j;q[f+32>>2]=1;q[f+36>>2]=10;g=q[c+4>>2];c:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break c}Aw(c,f+16|0);if(o[f+31|0]>-1){break c}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break c}n[e](q[f+48>>2])}e=q[b+80>>2];q[f+24>>2]=0;q[f+28>>2]=0;o[f+31|0]=8;o[f+28|0]=0;q[f+16>>2]=0;q[f+20>>2]=0;q[f+40>>2]=e;q[f+32>>2]=0;q[f+36>>2]=10;q[f+20>>2]=1716475477;q[f+24>>2]=1952805734;g=q[c+4>>2];d:{if(g>>>0>2]){q[g>>2]=0;e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break d}Aw(c,f+16|0);if(o[f+31|0]>-1){break d}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break d}n[e](q[f+48>>2])}e=q[b+84>>2];p[f+30>>1]=2560;q[f+16>>2]=0;p[f+28>>1]=r[28123]|r[28124]<<8;q[f+40>>2]=e;q[f+32>>2]=0;q[f+36>>2]=10;e=r[28119]|r[28120]<<8|(r[28121]<<16|r[28122]<<24);q[f+20>>2]=r[28115]|r[28116]<<8|(r[28117]<<16|r[28118]<<24);q[f+24>>2]=e;g=q[c+4>>2];if(g>>>0>2]){q[g>>2]=0;e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break b}Aw(c,f+16|0);if(o[f+31|0]>-1){break b}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break b}n[e](q[f+48>>2]);break b}g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;h=q[q[f+60>>2]+4>>2];if(h){n[h](q[f+48>>2])}q[g>>2]=11;q[g+4>>2]=-2147483632;q[f+20>>2]=e;o[e+11|0]=0;g=r[28110]|r[28111]<<8|(r[28112]<<16|r[28113]<<24);o[e+7|0]=g;o[e+8|0]=g>>>8;o[e+9|0]=g>>>16;o[e+10|0]=g>>>24;g=r[28107]|r[28108]<<8|(r[28109]<<16|r[28110]<<24);h=r[28103]|r[28104]<<8|(r[28105]<<16|r[28106]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=j;q[f+32>>2]=1;q[f+36>>2]=1;g=q[c+4>>2];e:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break e}Aw(c,f+16|0);if(o[f+31|0]>-1){break e}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break e}n[e](q[f+48>>2])}e=q[b+80>>2];q[f+24>>2]=0;q[f+28>>2]=0;o[f+31|0]=8;o[f+28|0]=0;q[f+16>>2]=0;q[f+20>>2]=0;q[f+40>>2]=e;q[f+32>>2]=0;q[f+36>>2]=1;q[f+20>>2]=1716475477;q[f+24>>2]=1952805734;g=q[c+4>>2];f:{if(g>>>0>2]){q[g>>2]=0;e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break f}Aw(c,f+16|0);if(o[f+31|0]>-1){break f}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break f}n[e](q[f+48>>2])}e=q[b+84>>2];p[f+30>>1]=2560;q[f+16>>2]=0;p[f+28>>1]=r[28123]|r[28124]<<8;q[f+40>>2]=e;q[f+32>>2]=0;q[f+36>>2]=1;e=r[28119]|r[28120]<<8|(r[28121]<<16|r[28122]<<24);q[f+20>>2]=r[28115]|r[28116]<<8|(r[28117]<<16|r[28118]<<24);q[f+24>>2]=e;g=q[c+4>>2];if(g>>>0>2]){q[g>>2]=0;e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break b}Aw(c,f+16|0);if(o[f+31|0]>-1){break b}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break b}n[e](q[f+48>>2])}j=q[b+20>>2];g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;h=q[q[f+60>>2]+4>>2];if(h){n[h](q[f+48>>2])}q[g>>2]=11;q[g+4>>2]=-2147483632;q[f+20>>2]=e;o[e+11|0]=0;g=r[28045]|r[28046]<<8|(r[28047]<<16|r[28048]<<24);o[e+7|0]=g;o[e+8|0]=g>>>8;o[e+9|0]=g>>>16;o[e+10|0]=g>>>24;g=r[28042]|r[28043]<<8|(r[28044]<<16|r[28045]<<24);h=r[28038]|r[28039]<<8|(r[28040]<<16|r[28041]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=j;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];g:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break g}Aw(c,f+16|0);if(o[f+31|0]>-1){break g}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break g}n[e](q[f+48>>2])}j=q[b+24>>2];g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;h=q[q[f+60>>2]+4>>2];if(h){n[h](q[f+48>>2])}q[g>>2]=18;q[g+4>>2]=-2147483616;q[f+20>>2]=e;o[e+18|0]=0;g=r[28066]|r[28067]<<8;o[e+16|0]=g;o[e+17|0]=g>>>8;g=r[28062]|r[28063]<<8|(r[28064]<<16|r[28065]<<24);h=r[28058]|r[28059]<<8|(r[28060]<<16|r[28061]<<24);o[e+8|0]=h;o[e+9|0]=h>>>8;o[e+10|0]=h>>>16;o[e+11|0]=h>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28054]|r[28055]<<8|(r[28056]<<16|r[28057]<<24);h=r[28050]|r[28051]<<8|(r[28052]<<16|r[28053]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=j;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];h:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break h}Aw(c,f+16|0);if(o[f+31|0]>-1){break h}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break h}n[e](q[f+48>>2])}j=q[b+28>>2];g=f+24|0;e=g;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;h=q[q[f+60>>2]+4>>2];if(h){n[h](q[f+48>>2])}q[g>>2]=14;q[g+4>>2]=-2147483632;q[f+20>>2]=e;o[e+14|0]=0;g=r[28079]|r[28080]<<8|(r[28081]<<16|r[28082]<<24);h=r[28075]|r[28076]<<8|(r[28077]<<16|r[28078]<<24);o[e+6|0]=h;o[e+7|0]=h>>>8;o[e+8|0]=h>>>16;o[e+9|0]=h>>>24;o[e+10|0]=g;o[e+11|0]=g>>>8;o[e+12|0]=g>>>16;o[e+13|0]=g>>>24;g=r[28073]|r[28074]<<8|(r[28075]<<16|r[28076]<<24);h=r[28069]|r[28070]<<8|(r[28071]<<16|r[28072]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=j;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];i:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];j=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=j;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[i>>2]=q[i>>2]+28;break i}Aw(c,f+16|0);if(o[f+31|0]>-1){break i}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break i}n[e](q[f+48>>2])}e=n[q[q[a>>2]+112>>2]](a)|0;j:{if(d){k:{if((e|0)<1){break k}h=q[b+88>>2];e=f+24|0;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);d=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[e>>2]=12;q[e+4>>2]=-2147483632;q[f+20>>2]=d;o[d+12|0]=0;e=r[28134]|r[28135]<<8|(r[28136]<<16|r[28137]<<24);o[d+8|0]=e;o[d+9|0]=e>>>8;o[d+10|0]=e>>>16;o[d+11|0]=e>>>24;e=r[28130]|r[28131]<<8|(r[28132]<<16|r[28133]<<24);g=r[28126]|r[28127]<<8|(r[28128]<<16|r[28129]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=e;o[d+5|0]=e>>>8;o[d+6|0]=e>>>16;o[d+7|0]=e>>>24;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=10;e=q[c+4>>2];if(e>>>0>2]){q[e>>2]=q[f+16>>2];d=f+16|4;g=d+8|0;q[e+12>>2]=q[g>>2];h=q[d+4>>2];q[e+4>>2]=q[d>>2];q[e+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=f+32|0;q[e+24>>2]=q[d+8>>2];g=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=g;q[i>>2]=q[i>>2]+28;break k}Aw(c,f+16|0);if(o[f+31|0]>-1){break k}d=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,d&2147483647);d=q[q[f+60>>2]+4>>2];if(!d){break k}n[d](q[f+48>>2])}if((n[q[q[a>>2]+120>>2]](a)|0)<1){break j}h=q[b+92>>2];e=f+24|0;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);d=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[e>>2]=12;q[e+4>>2]=-2147483632;q[f+20>>2]=d;o[d+12|0]=0;e=r[28147]|r[28148]<<8|(r[28149]<<16|r[28150]<<24);o[d+8|0]=e;o[d+9|0]=e>>>8;o[d+10|0]=e>>>16;o[d+11|0]=e>>>24;e=r[28143]|r[28144]<<8|(r[28145]<<16|r[28146]<<24);g=r[28139]|r[28140]<<8|(r[28141]<<16|r[28142]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=e;o[d+5|0]=e>>>8;o[d+6|0]=e>>>16;o[d+7|0]=e>>>24;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=10;e=q[c+4>>2];if(e>>>0>2]){q[e>>2]=q[f+16>>2];d=f+16|4;g=d+8|0;q[e+12>>2]=q[g>>2];h=q[d+4>>2];q[e+4>>2]=q[d>>2];q[e+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=f+32|0;q[e+24>>2]=q[d+8>>2];g=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=g;q[i>>2]=q[i>>2]+28;break j}Aw(c,f+16|0);if(o[f+31|0]>-1){break j}d=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,d&2147483647);d=q[q[f+60>>2]+4>>2];if(!d){break j}n[d](q[f+48>>2]);break j}l:{if((e|0)<1){break l}h=q[b+88>>2];e=f+24|0;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);d=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[e>>2]=11;q[e+4>>2]=-2147483632;q[f+20>>2]=d;o[d+11|0]=0;e=r[28159]|r[28160]<<8|(r[28161]<<16|r[28162]<<24);o[d+7|0]=e;o[d+8|0]=e>>>8;o[d+9|0]=e>>>16;o[d+10|0]=e>>>24;e=r[28156]|r[28157]<<8|(r[28158]<<16|r[28159]<<24);g=r[28152]|r[28153]<<8|(r[28154]<<16|r[28155]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=e;o[d+5|0]=e>>>8;o[d+6|0]=e>>>16;o[d+7|0]=e>>>24;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=1;e=q[c+4>>2];if(e>>>0>2]){q[e>>2]=q[f+16>>2];d=f+16|4;g=d+8|0;q[e+12>>2]=q[g>>2];h=q[d+4>>2];q[e+4>>2]=q[d>>2];q[e+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=f+32|0;q[e+24>>2]=q[d+8>>2];g=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=g;q[i>>2]=q[i>>2]+28;break l}Aw(c,f+16|0);if(o[f+31|0]>-1){break l}d=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,d&2147483647);d=q[q[f+60>>2]+4>>2];if(!d){break l}n[d](q[f+48>>2])}if((n[q[q[a>>2]+120>>2]](a)|0)<1){break j}h=q[b+92>>2];e=f+24|0;q[e>>2]=0;q[e+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;wt(f+48|0);d=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[e>>2]=11;q[e+4>>2]=-2147483632;q[f+20>>2]=d;o[d+11|0]=0;e=r[28171]|r[28172]<<8|(r[28173]<<16|r[28174]<<24);o[d+7|0]=e;o[d+8|0]=e>>>8;o[d+9|0]=e>>>16;o[d+10|0]=e>>>24;e=r[28168]|r[28169]<<8|(r[28170]<<16|r[28171]<<24);g=r[28164]|r[28165]<<8|(r[28166]<<16|r[28167]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=e;o[d+5|0]=e>>>8;o[d+6|0]=e>>>16;o[d+7|0]=e>>>24;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=1;e=q[c+4>>2];if(e>>>0>2]){q[e>>2]=q[f+16>>2];d=f+16|4;g=d+8|0;q[e+12>>2]=q[g>>2];h=q[d+4>>2];q[e+4>>2]=q[d>>2];q[e+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=f+32|0;q[e+24>>2]=q[d+8>>2];g=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=g;q[i>>2]=q[i>>2]+28;break j}Aw(c,f+16|0);if(o[f+31|0]>-1){break j}d=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,d&2147483647);d=q[q[f+60>>2]+4>>2];if(!d){break j}n[d](q[f+48>>2])}d=q[b+32>>2];m:{if((n[q[q[a>>2]+104>>2]](a)|0)<1){break m}j=f+32|0;b=f+16|4;k=f+24|0;h=0;while(1){n:{l=n[q[q[a>>2]+96>>2]](a,h)|0;q[k>>2]=0;q[k+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;g=sV(l);if(g>>>0>=4294967280){break n}o:{p:{if(g>>>0>=11){wt(f+48|0);s=g+16&-16;e=n[q[f+56>>2]](f+48|0,s)|0;m=q[q[f+60>>2]+4>>2];if(m){n[m](q[f+48>>2])}q[f+20>>2]=e;q[f+24>>2]=g;q[f+28>>2]=s|-2147483648;break p}o[f+31|0]=g;e=b;if(!g){break o}}kV(e,l,g)}o[e+g|0]=0;q[f+40>>2]=d;q[f+32>>2]=0;q[f+36>>2]=1;e=q[c+4>>2];q:{if(e>>>0>2]){q[e>>2]=q[f+16>>2];g=b+8|0;q[e+12>>2]=q[g>>2];l=q[b+4>>2];q[e+4>>2]=q[b>>2];q[e+8>>2]=l;q[b>>2]=0;q[b+4>>2]=0;q[g>>2]=0;q[e+24>>2]=q[j+8>>2];g=q[j+4>>2];q[e+16>>2]=q[j>>2];q[e+20>>2]=g;q[i>>2]=q[i>>2]+28;break q}Aw(c,f+16|0);if(o[f+31|0]>-1){break q}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break q}n[e](q[f+48>>2])}d=d+16|0;h=h+1|0;if((h|0)<(n[q[q[a>>2]+104>>2]](a)|0)){continue}break m}break}kT();F()}r:{b=q[a+68>>2];e=q[a+72>>2];if((b|0)!=(e|0)){l=f+32|0;g=f+16|4;s=f+24|0;j=0;while(1){h=0;if((e-b|0)/244>>>0<=j>>>0){break r}s:{t:{while(1){q[s>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;k=w(j,244)+b|0;b=o[k+11|0];u:{if((b|0)<=-1){b=q[k+4>>2];k=q[k>>2];break u}b=b&255}e=b+1|0;if(e>>>0<4294967280){v:{w:{if(e>>>0>=11){m=b+17&-16;e=_S(m);q[f+24>>2]=m|-2147483648;q[f+16>>2]=e;q[f+20>>2]=b;break w}o[f+27|0]=b;e=f+16|0;if(!b){break v}}kV(e,k,b)}o[b+e|0]=0;yT(f+16|0,28084,1);PT(f+48|0,h);b=r[f+59|0];e=b<<24>>24<0;b=yT(f+16|0,e?q[f+48>>2]:f+48|0,e?q[f+52>>2]:b);e=b+8|0;q[f+8>>2]=q[e>>2];k=q[b+4>>2];q[f>>2]=q[b>>2];q[f+4>>2]=k;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=0;if(o[f+59|0]<=-1){_U(q[f+48>>2])}if(o[f+27|0]<=-1){_U(q[f+16>>2])}b=q[f>>2];e=o[f+11|0];q[s>>2]=0;q[s+4>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;k=(e|0)<0?b:f;b=sV(k);if(b>>>0>=4294967280){break t}x:{y:{if(b>>>0>=11){wt(f+48|0);m=b+16&-16;e=n[q[f+56>>2]](f+48|0,m)|0;u=q[q[f+60>>2]+4>>2];if(u){n[u](q[f+48>>2])}q[f+20>>2]=e;q[f+24>>2]=b;q[f+28>>2]=m|-2147483648;break y}o[f+31|0]=b;e=g;if(!b){break x}}kV(e,k,b)}o[b+e|0]=0;q[f+40>>2]=d;q[f+32>>2]=0;q[f+36>>2]=1;b=q[c+4>>2];z:{if(b>>>0>2]){q[b>>2]=q[f+16>>2];e=g+8|0;q[b+12>>2]=q[e>>2];k=q[g+4>>2];q[b+4>>2]=q[g>>2];q[b+8>>2]=k;q[g>>2]=0;q[g+4>>2]=0;q[e>>2]=0;q[b+24>>2]=q[l+8>>2];e=q[l+4>>2];q[b+16>>2]=q[l>>2];q[b+20>>2]=e;q[i>>2]=q[i>>2]+28;break z}Aw(c,f+16|0);if(o[f+31|0]>-1){break z}b=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,b&2147483647);b=q[q[f+60>>2]+4>>2];if(!b){break z}n[b](q[f+48>>2])}if(o[f+11|0]<=-1){_U(q[f>>2])}d=d+16|0;h=h+1|0;if((h|0)==13){break s}b=q[a+68>>2];if((q[a+72>>2]-b|0)/244>>>0<=j>>>0){break r}continue}break}kT();F()}kT();F()}j=j+1|0;e=q[a+72>>2];b=q[a+68>>2];if(j>>>0<(e-b|0)/244>>>0){continue}break}}ue=f- -64|0;return}lU();F()}function aB(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),o=0,p=x(0),s=0,t=x(0),v=0,y=0,z=0,C=0,D=0,F=0,G=0,H=0,I=x(0),J=0,K=0,L=0,M=x(0),N=0,O=x(0),P=x(0),Q=0,R=0,S=0,T=0,U=0,V=0,W=x(0),X=0,Y=x(0),Z=x(0),_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=x(0),fa=x(0),ga=x(0),ha=x(0),ia=0,ja=0,ka=x(0),la=x(0),ma=x(0),na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=x(0);d=ue-464|0;ue=d;f=q[a+24>>2];j=q[a+28>>2];a:{if((f|0)==(j|0)){break a}b:{if(q[b+48>>2]!=1){break b}h=j-f|0;if(h){j=(h|0)/240|0;e=d+224|0;h=0;s=d+424|0;while(1){c:{if(!h){Xs(d+192|0,f+256|0);Xs(d+400|0,q[a+24>>2]+16|0);t=x(u[d+204>>2]-u[d+412>>2]);m=x(u[d+200>>2]-u[d+408>>2]);p=x(u[d+192>>2]-u[d+400>>2]);i=x(u[d+196>>2]-u[d+404>>2]);break c}if((j+ -1|0)==(h|0)){j=w(h,240);Xs(d+192|0,(j+f|0)+16|0);Xs(d+400|0,(j+q[a+24>>2]|0)+ -224|0);t=x(u[d+204>>2]-u[d+412>>2]);m=x(u[d+200>>2]-u[d+408>>2]);p=x(u[d+192>>2]-u[d+400>>2]);i=x(u[d+196>>2]-u[d+404>>2]);break c}j=w(h,240);Xs(d+192|0,(j+f|0)+256|0);Xs(d+400|0,(j+q[a+24>>2]|0)+ -224|0);t=x(u[d+204>>2]-u[d+412>>2]);m=x(u[d+200>>2]-u[d+408>>2]);p=x(u[d+192>>2]-u[d+400>>2]);i=x(u[d+196>>2]-u[d+404>>2])}g=x(x(x(p*p)+x(i*i))+x(m*m));if(!(g>2];n[q[q[j>>2]+88>>2]](d+192|0,j);nt(d+336|0,d+192|0);P=u[d+348>>2];g=x(t*P);g=x(g-g);k=u[d+340>>2];I=u[d+336>>2];t=x(x(p*k)-x(i*I));M=u[d+344>>2];p=x(x(m*I)-x(p*M));m=x(x(i*M)-x(m*k));i=x(x(t*t)+x(x(p*p)+x(m*m)));if(!(i>2]=g;i=x(P*g);u[d+220>>2]=i-i;u[d+192>>2]=m;u[d+196>>2]=p;u[d+216>>2]=x(I*p)-x(k*m);u[d+200>>2]=t;u[d+212>>2]=x(M*m)-x(I*t);u[d+208>>2]=x(k*t)-x(M*p);j=q[d+348>>2];q[e+8>>2]=q[d+344>>2];q[e+12>>2]=j;j=q[d+340>>2];q[e>>2]=q[d+336>>2];q[e+4>>2]=j;it(d+400|0,d+192|0);j=q[d+460>>2];q[d+248>>2]=q[d+456>>2];q[d+252>>2]=j;j=q[d+452>>2];q[d+240>>2]=q[d+448>>2];q[d+244>>2]=j;j=q[d+444>>2];q[d+232>>2]=q[d+440>>2];q[d+236>>2]=j;j=q[d+436>>2];q[e>>2]=q[d+432>>2];q[e+4>>2]=j;j=q[s+4>>2];q[d+216>>2]=q[s>>2];q[d+220>>2]=j;j=q[d+420>>2];q[d+208>>2]=q[d+416>>2];q[d+212>>2]=j;j=q[d+412>>2];q[d+200>>2]=q[d+408>>2];q[d+204>>2]=j;j=q[d+404>>2];q[d+192>>2]=q[d+400>>2];q[d+196>>2]=j;zj(d+400|0,d+192|0);g=u[d+400>>2];k=u[d+404>>2];m=u[d+408>>2];p=u[d+412>>2];i=x(x(E(x(x(x(x(g*g)+x(k*k))+x(m*m))+x(p*p))))+x(9999999747378752e-21));u[d+404>>2]=k/i;u[d+400>>2]=g/i;u[d+412>>2]=p/i;u[d+408>>2]=m/i;l=q[d+404>>2];j=q[a+36>>2]+(h<<4)|0;f=j;q[f>>2]=q[d+400>>2];q[f+4>>2]=l;f=q[d+412>>2];q[j+8>>2]=q[d+408>>2];q[j+12>>2]=f;h=h+1|0;f=q[a+24>>2];j=(q[a+28>>2]-f|0)/240|0;if(h>>>0>>0){continue}break}}h=q[a+36>>2];j=q[h+4>>2];e=q[a+48>>2];q[e>>2]=q[h>>2];q[e+4>>2]=j;s=q[h+12>>2];q[e+8>>2]=q[h+8>>2];q[e+12>>2]=s;h=q[a+40>>2]+ -16|0;j=q[h+4>>2];e=q[a+52>>2]+ -16|0;q[e>>2]=q[h>>2];q[e+4>>2]=j;s=q[h+12>>2];q[e+8>>2]=q[h+8>>2];q[e+12>>2]=s;j=q[a+28>>2];f=q[a+24>>2];if(((j-f|0)/240|0)+ -1>>>0<2){break b}h=1;while(1){e=h<<4;s=q[a+36>>2];h=h+1|0;Aj(d+192|0,(e+s|0)+ -16|0,s+(h<<4)|0,x(.5));Aj(d+400|0,d+192|0,e+q[a+36>>2]|0,x(.6666666865348816));j=q[d+404>>2];e=e+q[a+48>>2]|0;q[e>>2]=q[d+400>>2];q[e+4>>2]=j;s=q[d+412>>2];q[e+8>>2]=q[d+408>>2];q[e+12>>2]=s;j=q[a+28>>2];f=q[a+24>>2];if(h>>>0<((j-f|0)/240|0)+ -1>>>0){continue}break}}if(q[b+12>>2]>=2){s=a+60|0;ms(s);h=q[a+24>>2];if((h|0)!=q[a+28>>2]){e=0;j=d+208|0;while(1){q[d+408>>2]=0;q[d+412>>2]=0;q[d+400>>2]=0;q[d+404>>2]=0;f=w(e,240)+h|0;l=q[f+60>>2];q[d+232>>2]=q[f+56>>2];q[d+236>>2]=l;l=q[f+52>>2];q[d+224>>2]=q[f+48>>2];q[d+228>>2]=l;l=q[f+44>>2];q[d+216>>2]=q[f+40>>2];q[d+220>>2]=l;l=q[f+36>>2];q[j>>2]=q[f+32>>2];q[j+4>>2]=l;l=q[f+20>>2];q[d+192>>2]=q[f+16>>2];q[d+196>>2]=l;l=q[f+28>>2];q[d+200>>2]=q[f+24>>2];q[d+204>>2]=l;if(r[b+44|0]){vu(d+192|0,c,u[f+204>>2])}h=q[a+8>>2];n[q[q[h>>2]+88>>2]](d+320|0,h);nt(d+336|0,d+320|0);h=q[a+8>>2];n[q[q[h>>2]+92>>2]](d+288|0,h);su(d+192|0,nt(d+384|0,d+288|0),q[b+24>>2],r[b+16|0]);Xs(d+336|0,d+192|0);h=q[d+348>>2];q[d+408>>2]=q[d+344>>2];q[d+412>>2]=h;h=q[d+340>>2];q[d+400>>2]=q[d+336>>2];q[d+404>>2]=h;js(s,d+400|0);e=e+1|0;h=q[a+24>>2];if(e>>>0<(q[a+28>>2]-h|0)/240>>>0){continue}break}}ls(s);f=q[a+24>>2];j=q[a+28>>2]}e=-1;H=q[a+148>>2];l=H;s=q[a+20>>2];h=s;if((f|0)!=(j|0)){_=H<<1;$=H<<3;aa=w(H,11);ba=w(H,10);ca=w(H,7);da=w(H,6);Q=w(H,5);na=H<<2;oa=a+60|0;C=d+240|0;l=d+216|0;h=s;while(1){if(q[b+12>>2]>=1){f=w(R,240)+f|0;pa=f+88|0;qa=f+87|0;ra=f+75|0;sa=f+86|0;ta=f+74|0;ua=f+85|0;va=f+73|0;wa=f+84|0;xa=f+72|0;ya=f+83|0;za=f+71|0;Aa=f+82|0;Ba=f+70|0;Ca=f+81|0;Da=f+69|0;Ea=f+80|0;Fa=f+68|0;Ga=f+79|0;Ha=f+67|0;Ia=f+78|0;Ja=f+66|0;Ka=f+77|0;La=f+65|0;Ma=f+76|0;Na=f- -64|0;Oa=f+92|0;Pa=f+96|0;S=f+4|0;Qa=f+204|0;j=f+16|0;v=0;while(1){e=j;o=q[e+44>>2];q[d+440>>2]=q[e+40>>2];q[d+444>>2]=o;o=q[e+36>>2];q[d+432>>2]=q[e+32>>2];q[d+436>>2]=o;o=q[e+28>>2];q[d+424>>2]=q[e+24>>2];q[d+428>>2]=o;o=q[e+20>>2];q[d+416>>2]=q[e+16>>2];q[d+420>>2]=o;o=q[e+4>>2];q[d+400>>2]=q[e>>2];q[d+404>>2]=o;o=q[e+12>>2];q[d+408>>2]=q[e+8>>2];q[d+412>>2]=o;if(r[b+44|0]){vu(d+400|0,c,u[Qa>>2])}Ys(d+400|0,d+384|0,d+336|0,d+320|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+304|0,e);nt(d+192|0,d+304|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+272|0,e);tu(d+320|0,d+384|0,nt(d+288|0,d+272|0),q[b+24>>2]);N=q[S>>2];ia=q[f>>2];ja=(N|0)<((ia|0)/2|0);g=u[(ja?pa:Pa)>>2];Ra=r[Ga|0];o=r[Ha|0];Sa=r[Ia|0];D=r[Ja|0];Ta=r[Ma|0];y=r[Na|0];Ua=r[Ka|0];z=r[La|0];Va=r[ya|0];F=r[za|0];Wa=r[Aa|0];G=r[Ba|0];Xa=r[Ea|0];K=r[Fa|0];Ya=r[Ca|0];L=r[Da|0];Za=r[qa|0];T=r[ra|0];_a=r[sa|0];e=r[ta|0];$a=r[wa|0];J=r[xa|0];ab=r[ua|0];U=r[va|0];k=u[Oa>>2];V=q[b+12>>2];yp(d+192|0);yp(l);yp(C);q[d+244>>2]=0;q[d+248>>2]=0;q[d+224>>2]=0;q[d+216>>2]=0;q[d+220>>2]=0;q[d+196>>2]=0;q[d+200>>2]=0;i=x(w(N,V)+v|0);X=V;V=ia+ -1|0;i=x(i/x(w(X,V)|0));i=x(i+i);i=ja?i:x(x(1)-x(i+x(-1)));g=x(g+x(i*x(k-g)));k=u[d+384>>2];u[d+240>>2]=x(g*x(.5))*k;u[d+192>>2]=k*x(g*x(-.5));g=x(B(x(A(x(x(i*x(ab-U|0))+x(U>>>0)),x(255))),x(0)));d:{if(g=x(0)){X=~~g>>>0;break d}X=0}U=X<<8;g=x(B(x(A(x(x(i*x($a-J|0))+x(J>>>0)),x(255))),x(0)));e:{if(g=x(0)){J=~~g>>>0;break e}J=0}U=J|U;g=x(B(x(A(x(x(i*x(_a-e|0))+x(e>>>0)),x(255))),x(0)));f:{if(g=x(0)){J=~~g>>>0;break f}J=0}e=d;X=J<<16|U;g=x(B(x(A(x(x(i*x(Za-T|0))+x(T>>>0)),x(255))),x(0)));g:{if(g=x(0)){J=~~g>>>0;break g}J=0}q[e+252>>2]=X|J<<24;g=x(B(x(A(x(x(i*x(Ya-L|0))+x(L>>>0)),x(255))),x(0)));h:{if(g=x(0)){e=~~g>>>0;break h}e=0}L=e<<8;g=x(B(x(A(x(x(i*x(Xa-K|0))+x(K>>>0)),x(255))),x(0)));i:{if(g=x(0)){e=~~g>>>0;break i}e=0}K=e|L;e=d;g=x(B(x(A(x(x(i*x(Wa-G|0))+x(G>>>0)),x(255))),x(0)));j:{if(g=x(0)){G=~~g>>>0;break j}G=0}K=G<<16|K;g=x(B(x(A(x(x(i*x(Va-F|0))+x(F>>>0)),x(255))),x(0)));k:{if(g=x(0)){F=~~g>>>0;break k}F=0}q[e+228>>2]=K|F<<24;g=x(B(x(A(x(x(i*x(Ua-z|0))+x(z>>>0)),x(255))),x(0)));l:{if(g=x(0)){e=~~g>>>0;break l}e=0}z=e<<8;g=x(B(x(A(x(x(i*x(Ta-y|0))+x(y>>>0)),x(255))),x(0)));m:{if(g=x(0)){e=~~g>>>0;break m}e=0}y=e|z;e=d;g=x(B(x(A(x(x(i*x(Sa-D|0))+x(D>>>0)),x(255))),x(0)));n:{if(g=x(0)){z=~~g>>>0;break n}z=0}z=z<<16|y;i=x(B(x(A(x(x(i*x(Ra-o|0))+x(o>>>0)),x(255))),x(0)));o:{if(i=x(0)){y=~~i>>>0;break o}y=0}q[e+204>>2]=z|y<<24;G=v|N;e=q[b+12>>2];p:{if((e|0)>=2){ns(d+288|0,oa,x(x(x(v|0)/x(e|0))+x(q[S>>2])));yp(d+304|0);q[l+8>>2]=q[d+296>>2];e=q[d+292>>2];q[l>>2]=q[d+288>>2];q[l+4>>2]=e;break p}yp(d+288|0);q[l+8>>2]=q[d+328>>2];e=q[d+324>>2];q[l>>2]=q[d+320>>2];q[l+4>>2]=e}e=q[d+196>>2];q[h>>2]=q[d+192>>2];q[h+4>>2]=e;e=q[d+204>>2];q[h+8>>2]=q[d+200>>2];q[h+12>>2]=e;y=d+208|0;e=y;o=q[e+4>>2];q[h+16>>2]=q[e>>2];q[h+20>>2]=o;o=l+16|0;F=q[o+4>>2];e=h+H|0;q[e+16>>2]=q[o>>2];q[e+20>>2]=F;D=l+8|0;F=q[D+4>>2];q[e+8>>2]=q[D>>2];q[e+12>>2]=F;z=q[l+4>>2];q[e>>2]=q[l>>2];q[e+4>>2]=z;F=q[o+4>>2];e=h+na|0;q[e+16>>2]=q[o>>2];q[e+20>>2]=F;z=q[D+4>>2];q[e+8>>2]=q[D>>2];q[e+12>>2]=z;z=q[l+4>>2];q[e>>2]=q[l>>2];q[e+4>>2]=z;z=C+16|0;L=q[z+4>>2];e=h+Q|0;q[e+16>>2]=q[z>>2];q[e+20>>2]=L;F=C+8|0;L=q[F+4>>2];q[e+8>>2]=q[F>>2];q[e+12>>2]=L;K=q[C+4>>2];q[e>>2]=q[C>>2];q[e+4>>2]=K;e=h+_|0;q:{if(!G){break q}e=h+da|0;if((N|0)==(V|0)){q[a+12>>2]=q[a+12>>2]+2;break q}G=q[d+196>>2];q[e>>2]=q[d+192>>2];q[e+4>>2]=G;G=q[d+204>>2];q[e+8>>2]=q[d+200>>2];q[e+12>>2]=G;G=q[y+4>>2];q[e+16>>2]=q[y>>2];q[e+20>>2]=G;G=q[o+4>>2];e=h+ca|0;q[e+16>>2]=q[o>>2];q[e+20>>2]=G;y=q[D+4>>2];q[e+8>>2]=q[D>>2];q[e+12>>2]=y;y=q[l+4>>2];q[e>>2]=q[l>>2];q[e+4>>2]=y;G=q[o+4>>2];e=h+ba|0;q[e+16>>2]=q[o>>2];q[e+20>>2]=G;o=q[D+4>>2];q[e+8>>2]=q[D>>2];q[e+12>>2]=o;o=q[l+4>>2];q[e>>2]=q[l>>2];q[e+4>>2]=o;D=q[z+4>>2];e=h+aa|0;q[e+16>>2]=q[z>>2];q[e+20>>2]=D;o=q[F+4>>2];q[e+8>>2]=q[F>>2];q[e+12>>2]=o;o=q[C+4>>2];q[e>>2]=q[C>>2];q[e+4>>2]=o;q[a+12>>2]=q[a+12>>2]+2;e=h+$|0}h=e;v=v+1|0;if((N|0)!=(V|0)?(v|0)>2]:0){continue}break}f=q[a+24>>2];j=q[a+28>>2]}R=R+1|0;e=(j-f|0)/240|0;if(R>>>0>>0){continue}break}l=q[a+148>>2];e=e+ -1|0}D=w(e,q[b+12>>2]);if((D|0)!=-1){J=l<<1;U=l<<3;V=w(l,11);_=w(l,10);$=w(l,6);aa=l<<2;ba=w(l,5);ca=w(l,3);z=w(l,7);da=w(l,9);e=q[a+20>>2];j=0;while(1){r:{s:{if(!j){Cp(d+400|0,e+ca|0,e+l|0);nt(d+192|0,d+400|0);i=u[d+192>>2];g=u[d+196>>2];k=u[d+200>>2];O=x(x(x(i*i)+x(g*g))+x(k*k));if(O>2];p=u[d+196>>2];m=u[d+200>>2];i=x(x(x(t*t)+x(p*p))+x(m*m));if(!(i>2];t=u[d+196>>2];I=u[d+192>>2];F=e+16|0;v=F;C=q[v+4>>2];N=d+208|0;f=N;q[f>>2]=q[v>>2];q[f+4>>2]=C;G=e+8|0;C=G;o=q[C+4>>2];v=d+200|0;f=v;q[f>>2]=q[C>>2];q[f+4>>2]=o;f=q[e+4>>2];q[d+192>>2]=q[e>>2];q[d+196>>2]=f;R=d+296|0;q[R>>2]=q[c+20>>2];f=q[c+16>>2];q[d+288>>2]=q[c+12>>2];q[d+292>>2]=f;o=e+ba|0;K=o+16|0;C=K;y=q[C+4>>2];S=d+416|0;f=S;q[f>>2]=q[C>>2];q[f+4>>2]=y;L=o+8|0;y=L;T=q[y+4>>2];C=d+408|0;f=C;q[f>>2]=q[y>>2];q[f+4>>2]=T;f=q[o+4>>2];q[d+400>>2]=q[o>>2];q[d+404>>2]=f;y=c+12|0;t:{if(q[b+48>>2]==1){u:{if((j|0)==(D|0)){f=q[a+52>>2]+ -16|0;i=u[f+12>>2];m=u[f>>2];k=u[f+4>>2];g=u[f+8>>2];break u}T=q[b+12>>2];f=q[a+48>>2]+((j|0)/(T|0)<<4)|0;Q=q[f+4>>2];q[d+336>>2]=q[f>>2];q[d+340>>2]=Q;Q=q[f+12>>2];q[d+344>>2]=q[f+8>>2];q[d+348>>2]=Q;Q=q[f+28>>2];q[d+392>>2]=q[f+24>>2];q[d+396>>2]=Q;Q=q[f+20>>2];q[d+384>>2]=q[f+16>>2];q[d+388>>2]=Q;Aj(d+320|0,d+336|0,d+384|0,x(x((j>>>0)%(T>>>0)|0)/x(T|0)));i=u[d+332>>2];m=u[d+320>>2];k=u[d+324>>2];g=u[d+328>>2]}M=u[d+192>>2];yp(d+336|0);P=x(m*m);Y=x(k*k);ga=x(g*g);ha=x(i*i);ka=x(k*g);la=x(m*i);W=x(ka+la);bb=x(x(W+W)*x(0));W=x(m*g);ma=x(k*i);Z=x(W-ma);Z=x(x(x(x(x(x(-P)-Y)+ga)+ha)*x(0))+x(bb-x(Z+Z)));u[d+344>>2]=p+x(M*Z);q[v>>2]=q[d+344>>2];W=x(W+ma);k=x(m*k);i=x(g*i);g=x(k-i);g=x(x(x(W+W)*x(0))+x(x(x(g+g)*x(0))-x(x(x(P-Y)-ga)+ha)));u[d+336>>2]=I+x(M*g);m=x(ka-la);i=x(k+i);k=x(x(x(m+m)*x(0))+x(x(x(x(x(Y-P)-ga)+ha)*x(0))-x(i+i)));u[d+340>>2]=t+x(M*k);f=q[d+340>>2];q[d+192>>2]=q[d+336>>2];q[d+196>>2]=f;yp(d+336|0);i=u[d+400>>2];yp(d+336|0);u[d+344>>2]=p+x(Z*i);q[C>>2]=q[d+344>>2];u[d+340>>2]=t+x(k*i);u[d+336>>2]=I+x(g*i);break t}f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+384|0,f);nt(d+336|0,d+384|0);M=u[d+340>>2];P=u[d+336>>2];m=x(x(i*M)-x(g*P));Y=u[d+344>>2];g=x(x(g*Y)-x(k*M));i=x(x(k*P)-x(i*Y));k=x(x(m*m)+x(x(g*g)+x(i*i)));if(!(k>2];yp(d+336|0);u[d+344>>2]=p-x(m*k);q[v>>2]=q[d+344>>2];u[d+340>>2]=t-x(i*k);u[d+336>>2]=I-x(g*k);f=q[d+340>>2];q[d+192>>2]=q[d+336>>2];q[d+196>>2]=f;yp(d+336|0);k=u[d+400>>2];yp(d+336|0);u[d+344>>2]=p-x(m*k);q[C>>2]=q[d+344>>2];u[d+340>>2]=t-x(i*k);u[d+336>>2]=I-x(g*k)}f=q[d+340>>2];q[d+400>>2]=q[d+336>>2];q[d+404>>2]=f;f=q[d+196>>2];q[e>>2]=q[d+192>>2];q[e+4>>2]=f;f=q[N+4>>2];q[F>>2]=q[N>>2];q[F+4>>2]=f;f=q[v+4>>2];q[G>>2]=q[v>>2];q[G+4>>2]=f;u[c+8>>2]=p;u[c+4>>2]=t;u[c>>2]=I;q[y+8>>2]=q[R>>2];c=q[d+292>>2];q[y>>2]=q[d+288>>2];q[y+4>>2]=c;c=e+aa|0;u[c+8>>2]=p;u[c+4>>2]=t;u[c>>2]=I;q[c+20>>2]=q[R>>2];f=q[d+292>>2];q[c+12>>2]=q[d+288>>2];q[c+16>>2]=f;c=q[C+4>>2];q[L>>2]=q[C>>2];q[L+4>>2]=c;c=q[S+4>>2];q[K>>2]=q[S>>2];q[K+4>>2]=c;c=q[d+404>>2];q[o>>2]=q[d+400>>2];q[o+4>>2]=c;c=e+J|0;v:{if(!j){break v}f=e+$|0;c=f;if((j|0)==(D|0)){break v}c=q[d+196>>2];q[f>>2]=q[d+192>>2];q[f+4>>2]=c;c=q[N+4>>2];q[f+16>>2]=q[N>>2];q[f+20>>2]=c;c=q[v+4>>2];q[f+8>>2]=q[v>>2];q[f+12>>2]=c;c=e+z|0;u[c+8>>2]=p;u[c+4>>2]=t;u[c>>2]=I;f=q[d+292>>2];q[c+12>>2]=q[d+288>>2];q[c+16>>2]=f;q[c+20>>2]=q[R>>2];c=e+_|0;u[c+8>>2]=p;u[c+4>>2]=t;u[c>>2]=I;q[c+20>>2]=q[R>>2];f=q[d+292>>2];q[c+12>>2]=q[d+288>>2];q[c+16>>2]=f;v=q[d+404>>2];c=e+V|0;f=c;q[f>>2]=q[d+400>>2];q[f+4>>2]=v;f=q[C+4>>2];q[c+8>>2]=q[C>>2];q[c+12>>2]=f;f=q[S+4>>2];q[c+16>>2]=q[S>>2];q[c+20>>2]=f;c=e+U|0}e=c;j=j+1|0;D=w(q[b+12>>2],((q[a+28>>2]-q[a+24>>2]|0)/240|0)+ -1|0);if(j>>>0>>0){continue}break}}q[d+88>>2]=s;q[d+180>>2]=h;q[d+176>>2]=H;q[d+184>>2]=s;c=q[d+180>>2];q[d+80>>2]=q[d+176>>2];q[d+84>>2]=c;jB(a,b,d+80|0);q[d+72>>2]=s;q[d+164>>2]=h;q[d+160>>2]=H;q[d+168>>2]=s;c=q[d+164>>2];q[d+64>>2]=q[d+160>>2];q[d+68>>2]=c;dB(a,b,d- -64|0);q[d+56>>2]=s;q[d+148>>2]=h;q[d+144>>2]=H;q[d+152>>2]=s;c=q[d+148>>2];q[d+48>>2]=q[d+144>>2];q[d+52>>2]=c;dB(a,b,d+48|0);q[d+40>>2]=s;q[d+132>>2]=h;q[d+128>>2]=H;q[d+136>>2]=s;c=q[d+132>>2];q[d+32>>2]=q[d+128>>2];q[d+36>>2]=c;dB(a,b,d+32|0);q[d+24>>2]=s;q[d+116>>2]=h;q[d+112>>2]=H;q[d+120>>2]=s;c=q[d+116>>2];q[d+16>>2]=q[d+112>>2];q[d+20>>2]=c;dB(a,b,d+16|0);q[d+8>>2]=s;q[d+100>>2]=h;q[d+96>>2]=H;q[d+104>>2]=s;c=q[d+100>>2];q[d>>2]=q[d+96>>2];q[d+4>>2]=c;dB(a,b,d);w:{if(q[a+152>>2]<1){break w}f=q[a+28>>2];h=q[a+24>>2];if((f-h|0)==240){break w}c=q[a+148>>2];j=q[a+20>>2]+40|0;v=q[b+12>>2];e=0;while(1){if((v|0)>=1){h=(w(e,240)+h|0)+208|0;f=0;while(1){j=kV(kV(kV(kV(kV(kV(kV(kV(j,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0,h,q[a+152>>2]<<2)+c|0;f=f+1|0;v=q[b+12>>2];if((f|0)<(v|0)){continue}break}f=q[a+28>>2];h=q[a+24>>2]}e=e+1|0;if(e>>>0<((f-h|0)/240|0)+ -1>>>0){continue}break}}if(q[a+156>>2]<1){break a}f=q[a+28>>2];h=q[a+24>>2];if((f-h|0)==240){break a}c=q[a+148>>2];j=(q[a+20>>2]+(q[a+152>>2]<<2)|0)+40|0;v=q[b+12>>2];e=0;while(1){if((v|0)>=1){h=(w(e,240)+h|0)+224|0;f=0;while(1){j=kV(kV(kV(kV(kV(kV(kV(kV(j,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0,h,q[a+156>>2]<<2)+c|0;f=f+1|0;v=q[b+12>>2];if((f|0)<(v|0)){continue}break}f=q[a+28>>2];h=q[a+24>>2]}e=e+1|0;if(e>>>0<((f-h|0)/240|0)+ -1>>>0){continue}break}}ue=d+464|0}function _A(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0),i=0,j=0,k=x(0),l=0,m=0,o=0,p=x(0),s=x(0),t=x(0),v=0,y=0,z=0,C=0,D=0,F=0,G=0,H=x(0),I=0,J=x(0),K=0,L=0,M=0,N=x(0),O=x(0),P=0,Q=0,R=0,S=x(0),T=0,U=0,V=0,W=x(0),X=0,Y=x(0),Z=0,_=0,$=0,aa=0,ba=0,ca=x(0),da=x(0),ea=x(0),fa=x(0),ga=0,ha=0,ia=x(0),ja=x(0),ka=x(0),la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=x(0);d=ue-640|0;ue=d;g=q[a+24>>2];e=q[a+28>>2];a:{if((g|0)==(e|0)){break a}b:{if(q[b+48>>2]!=1){break b}i=e-g|0;if(i){o=(i|0)/240|0;i=d+368|0;e=d+216|0;while(1){c:{if(!l){Xs(d+336|0,g+256|0);Xs(d+192|0,q[a+24>>2]+16|0);t=x(u[d+348>>2]-u[d+204>>2]);p=x(u[d+344>>2]-u[d+200>>2]);s=x(u[d+336>>2]-u[d+192>>2]);h=x(u[d+340>>2]-u[d+196>>2]);break c}if((o+ -1|0)==(l|0)){j=w(l,240);Xs(d+336|0,(j+g|0)+16|0);Xs(d+192|0,(j+q[a+24>>2]|0)+ -224|0);t=x(u[d+348>>2]-u[d+204>>2]);p=x(u[d+344>>2]-u[d+200>>2]);s=x(u[d+336>>2]-u[d+192>>2]);h=x(u[d+340>>2]-u[d+196>>2]);break c}j=w(l,240);Xs(d+336|0,(j+g|0)+256|0);Xs(d+192|0,(j+q[a+24>>2]|0)+ -224|0);t=x(u[d+348>>2]-u[d+204>>2]);p=x(u[d+344>>2]-u[d+200>>2]);s=x(u[d+336>>2]-u[d+192>>2]);h=x(u[d+340>>2]-u[d+196>>2])}f=x(x(x(s*s)+x(h*h))+x(p*p));if(!(f>2];n[q[q[j>>2]+88>>2]](d+336|0,j);nt(d+272|0,d+336|0);O=u[d+284>>2];f=x(t*O);f=x(f-f);k=u[d+276>>2];H=u[d+272>>2];t=x(x(s*k)-x(h*H));J=u[d+280>>2];s=x(x(p*H)-x(s*J));p=x(x(h*J)-x(p*k));h=x(x(t*t)+x(x(s*s)+x(p*p)));if(!(h>2]=f;h=x(O*f);u[d+364>>2]=h-h;u[d+336>>2]=p;u[d+340>>2]=s;u[d+360>>2]=x(H*s)-x(k*p);u[d+344>>2]=t;u[d+356>>2]=x(J*p)-x(H*t);u[d+352>>2]=x(k*t)-x(J*s);j=q[d+284>>2];q[i+8>>2]=q[d+280>>2];q[i+12>>2]=j;j=q[d+276>>2];q[i>>2]=q[d+272>>2];q[i+4>>2]=j;it(d+192|0,d+336|0);j=q[d+252>>2];q[d+392>>2]=q[d+248>>2];q[d+396>>2]=j;j=q[d+244>>2];q[d+384>>2]=q[d+240>>2];q[d+388>>2]=j;j=q[d+236>>2];q[d+376>>2]=q[d+232>>2];q[d+380>>2]=j;j=q[d+228>>2];q[i>>2]=q[d+224>>2];q[i+4>>2]=j;j=q[e+4>>2];q[d+360>>2]=q[e>>2];q[d+364>>2]=j;j=q[d+212>>2];q[d+352>>2]=q[d+208>>2];q[d+356>>2]=j;j=q[d+204>>2];q[d+344>>2]=q[d+200>>2];q[d+348>>2]=j;j=q[d+196>>2];q[d+336>>2]=q[d+192>>2];q[d+340>>2]=j;zj(d+192|0,d+336|0);f=u[d+192>>2];k=u[d+196>>2];p=u[d+200>>2];s=u[d+204>>2];h=x(x(E(x(x(x(x(f*f)+x(k*k))+x(p*p))+x(s*s))))+x(9999999747378752e-21));u[d+196>>2]=k/h;u[d+192>>2]=f/h;u[d+204>>2]=s/h;u[d+200>>2]=p/h;o=q[d+196>>2];j=q[a+36>>2]+(l<<4)|0;g=j;q[g>>2]=q[d+192>>2];q[g+4>>2]=o;g=q[d+204>>2];q[j+8>>2]=q[d+200>>2];q[j+12>>2]=g;l=l+1|0;g=q[a+24>>2];o=(q[a+28>>2]-g|0)/240|0;if(l>>>0>>0){continue}break}}i=q[a+36>>2];j=q[i+4>>2];e=q[a+48>>2];q[e>>2]=q[i>>2];q[e+4>>2]=j;l=q[i+12>>2];q[e+8>>2]=q[i+8>>2];q[e+12>>2]=l;i=q[a+40>>2]+ -16|0;j=q[i+4>>2];e=q[a+52>>2]+ -16|0;q[e>>2]=q[i>>2];q[e+4>>2]=j;l=q[i+12>>2];q[e+8>>2]=q[i+8>>2];q[e+12>>2]=l;e=q[a+28>>2];g=q[a+24>>2];if(((e-g|0)/240|0)+ -1>>>0<2){break b}l=1;while(1){i=l<<4;e=q[a+36>>2];l=l+1|0;Aj(d+336|0,(i+e|0)+ -16|0,e+(l<<4)|0,x(.5));Aj(d+192|0,d+336|0,i+q[a+36>>2]|0,x(.6666666865348816));j=q[d+196>>2];i=i+q[a+48>>2]|0;e=i;q[e>>2]=q[d+192>>2];q[e+4>>2]=j;e=q[d+204>>2];q[i+8>>2]=q[d+200>>2];q[i+12>>2]=e;e=q[a+28>>2];g=q[a+24>>2];if(l>>>0<((e-g|0)/240|0)+ -1>>>0){continue}break}}if(q[b+12>>2]>=2){e=a+60|0;ms(e);g=q[a+24>>2];if((g|0)!=q[a+28>>2]){l=0;j=d+352|0;while(1){q[d+200>>2]=0;q[d+204>>2]=0;q[d+192>>2]=0;q[d+196>>2]=0;g=w(l,240)+g|0;o=q[g+60>>2];q[d+376>>2]=q[g+56>>2];q[d+380>>2]=o;o=q[g+52>>2];q[d+368>>2]=q[g+48>>2];q[d+372>>2]=o;o=q[g+44>>2];q[d+360>>2]=q[g+40>>2];q[d+364>>2]=o;o=q[g+36>>2];q[j>>2]=q[g+32>>2];q[j+4>>2]=o;o=q[g+20>>2];q[d+336>>2]=q[g+16>>2];q[d+340>>2]=o;o=q[g+28>>2];q[d+344>>2]=q[g+24>>2];q[d+348>>2]=o;if(r[b+44|0]){vu(d+336|0,c,u[g+204>>2])}i=q[a+8>>2];n[q[q[i>>2]+88>>2]](d+608|0,i);nt(d+272|0,d+608|0);i=q[a+8>>2];n[q[q[i>>2]+92>>2]](d+576|0,i);su(d+336|0,nt(d+624|0,d+576|0),q[b+24>>2],r[b+16|0]);Xs(d+272|0,d+336|0);i=q[d+284>>2];q[d+200>>2]=q[d+280>>2];q[d+204>>2]=i;i=q[d+276>>2];q[d+192>>2]=q[d+272>>2];q[d+196>>2]=i;js(e,d+192|0);l=l+1|0;g=q[a+24>>2];if(l>>>0<(q[a+28>>2]-g|0)/240>>>0){continue}break}}ls(e);g=q[a+24>>2];e=q[a+28>>2]}l=-1;C=q[a+148>>2];v=C;j=q[a+20>>2];i=j;if((e|0)!=(g|0)){$=C<<1;aa=C<<3;ba=w(C,11);Z=w(C,10);P=w(C,7);la=w(C,6);ma=w(C,5);na=C<<2;oa=a+60|0;F=d+480|0;o=d+408|0;i=j;while(1){if(q[b+12>>2]>=1){g=w(G,240)+g|0;pa=g+200|0;qa=g+196|0;ra=g+88|0;sa=g+87|0;ta=g+75|0;ua=g+86|0;va=g+74|0;wa=g+85|0;xa=g+73|0;ya=g+84|0;za=g+72|0;Aa=g+83|0;Ba=g+71|0;Ca=g+82|0;Da=g+70|0;Ea=g+81|0;Fa=g+69|0;Ga=g+80|0;Ha=g+68|0;Ia=g+79|0;Ja=g+67|0;Ka=g+78|0;La=g+66|0;Ma=g+77|0;Na=g+65|0;Oa=g+76|0;Pa=g- -64|0;Qa=g+92|0;Ra=g+96|0;I=g+4|0;Sa=g+204|0;l=g+16|0;v=0;while(1){e=l;y=q[e+44>>2];q[d+232>>2]=q[e+40>>2];q[d+236>>2]=y;y=q[e+36>>2];q[d+224>>2]=q[e+32>>2];q[d+228>>2]=y;y=q[e+28>>2];q[d+216>>2]=q[e+24>>2];q[d+220>>2]=y;y=q[e+20>>2];q[d+208>>2]=q[e+16>>2];q[d+212>>2]=y;y=q[e+4>>2];q[d+192>>2]=q[e>>2];q[d+196>>2]=y;y=q[e+12>>2];q[d+200>>2]=q[e+8>>2];q[d+204>>2]=y;if(r[b+44|0]){vu(d+192|0,c,u[Sa>>2])}Ys(d+192|0,d+624|0,d+272|0,d+608|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+592|0,e);nt(d+336|0,d+592|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+560|0,e);tu(d+608|0,d+624|0,nt(d+576|0,d+560|0),q[b+24>>2]);y=q[I>>2];ga=q[g>>2];ha=(y|0)<((ga|0)/2|0);f=u[(ha?ra:Ra)>>2];Ta=r[Ia|0];D=r[Ja|0];Ua=r[Ka|0];m=r[La|0];Va=r[Oa|0];L=r[Pa|0];Wa=r[Ma|0];K=r[Na|0];Xa=r[Aa|0];X=r[Ba|0];Ya=r[Ca|0];T=r[Da|0];Za=r[Ga|0];U=r[Ha|0];_a=r[Ea|0];V=r[Fa|0];$a=r[sa|0];_=r[ta|0];ab=r[ua|0];e=r[va|0];bb=r[ya|0];z=r[za|0];cb=r[wa|0];Q=r[xa|0];k=u[Qa>>2];R=q[b+12>>2];yp(d+336|0);yp(o);yp(F);q[d+484>>2]=0;q[d+488>>2]=0;q[d+416>>2]=0;q[d+408>>2]=0;q[d+412>>2]=0;q[d+340>>2]=0;q[d+344>>2]=0;h=x(w(y,R)+v|0);M=R;R=ga+ -1|0;h=x(h/x(w(M,R)|0));h=x(h+h);h=ha?h:x(x(1)-x(h+x(-1)));f=x(f+x(h*x(k-f)));k=u[d+624>>2];u[d+480>>2]=x(f*x(.5))*k;u[d+336>>2]=k*x(f*x(-.5));f=x(B(x(A(x(x(h*x(cb-Q|0))+x(Q>>>0)),x(255))),x(0)));d:{if(f=x(0)){M=~~f>>>0;break d}M=0}Q=M<<8;f=x(B(x(A(x(x(h*x(bb-z|0))+x(z>>>0)),x(255))),x(0)));e:{if(f=x(0)){z=~~f>>>0;break e}z=0}Q=z|Q;f=x(B(x(A(x(x(h*x(ab-e|0))+x(e>>>0)),x(255))),x(0)));f:{if(f=x(0)){z=~~f>>>0;break f}z=0}e=d;M=z<<16|Q;f=x(B(x(A(x(x(h*x($a-_|0))+x(_>>>0)),x(255))),x(0)));g:{if(f=x(0)){z=~~f>>>0;break g}z=0}q[e+492>>2]=M|z<<24;f=x(B(x(A(x(x(h*x(_a-V|0))+x(V>>>0)),x(255))),x(0)));h:{if(f=x(0)){e=~~f>>>0;break h}e=0}V=e<<8;f=x(B(x(A(x(x(h*x(Za-U|0))+x(U>>>0)),x(255))),x(0)));i:{if(f=x(0)){e=~~f>>>0;break i}e=0}U=e|V;e=d;f=x(B(x(A(x(x(h*x(Ya-T|0))+x(T>>>0)),x(255))),x(0)));j:{if(f=x(0)){z=~~f>>>0;break j}z=0}M=z<<16|U;f=x(B(x(A(x(x(h*x(Xa-X|0))+x(X>>>0)),x(255))),x(0)));k:{if(f=x(0)){z=~~f>>>0;break k}z=0}q[e+420>>2]=M|z<<24;f=x(B(x(A(x(x(h*x(Wa-K|0))+x(K>>>0)),x(255))),x(0)));l:{if(f=x(0)){e=~~f>>>0;break l}e=0}K=e<<8;f=x(B(x(A(x(x(h*x(Va-L|0))+x(L>>>0)),x(255))),x(0)));m:{if(f=x(0)){e=~~f>>>0;break m}e=0}L=e|K;e=d;f=x(B(x(A(x(x(h*x(Ua-m|0))+x(m>>>0)),x(255))),x(0)));n:{if(f=x(0)){z=~~f>>>0;break n}z=0}M=z<<16|L;h=x(B(x(A(x(x(h*x(Ta-D|0))+x(D>>>0)),x(255))),x(0)));o:{if(h=x(0)){z=~~h>>>0;break o}z=0}q[e+348>>2]=M|z<<24;e=q[qa>>2];q[d+400>>2]=e;q[d+472>>2]=e;q[d+544>>2]=e;e=q[pa>>2];q[d+404>>2]=e;q[d+476>>2]=e;q[d+548>>2]=e;D=y|v;e=q[b+12>>2];p:{if((e|0)>=2){ns(d+576|0,oa,x(x(x(v|0)/x(e|0))+x(q[I>>2])));yp(d+592|0);q[o+8>>2]=q[d+584>>2];e=q[d+580>>2];q[o>>2]=q[d+576>>2];q[o+4>>2]=e;break p}yp(d+576|0);q[o+8>>2]=q[d+616>>2];e=q[d+612>>2];q[o>>2]=q[d+608>>2];q[o+4>>2]=e}e=kV(i,d+336|0,72);kV(e+C|0,o,72);kV(e+na|0,o,72);kV(e+ma|0,F,72);i=e+$|0;q:{if(!D){break q}i=e+la|0;if((y|0)==(R|0)){q[a+12>>2]=q[a+12>>2]+2;break q}kV(i,d+336|0,72);kV(e+P|0,o,72);kV(e+Z|0,o,72);kV(e+ba|0,F,72);q[a+12>>2]=q[a+12>>2]+2;i=e+aa|0}v=v+1|0;if((y|0)!=(R|0)?(v|0)>2]:0){continue}break}g=q[a+24>>2];e=q[a+28>>2]}G=G+1|0;l=(e-g|0)/240|0;if(G>>>0>>0){continue}break}v=q[a+148>>2];l=l+ -1|0}K=w(l,q[b+12>>2]);if((K|0)!=-1){U=v<<1;V=v<<3;_=w(v,11);z=w(v,10);Q=w(v,6);R=v<<2;$=w(v,5);aa=w(v,3);X=w(v,7);ba=w(v,9);e=q[a+20>>2];o=0;L=d+328|0;g=d+320|0;y=d+312|0;F=d+304|0;G=d+296|0;I=d+288|0;D=d+280|0;while(1){r:{s:{if(!o){Cp(d+192|0,e+aa|0,e+v|0);nt(d+336|0,d+192|0);h=u[d+336>>2];f=u[d+340>>2];k=u[d+344>>2];N=x(x(x(h*h)+x(f*f))+x(k*k));if(N>2];s=u[d+340>>2];p=u[d+344>>2];h=x(x(x(t*t)+x(s*s))+x(p*p));if(!(h>2];t=u[d+340>>2];H=u[d+336>>2];kV(d+336|0,e,72);q[L>>2]=q[l+68>>2];c=l;m=q[c+64>>2];q[g>>2]=q[c+60>>2];q[g+4>>2]=m;m=q[c+56>>2];q[y>>2]=q[c+52>>2];q[y+4>>2]=m;m=q[c+48>>2];q[F>>2]=q[c+44>>2];q[F+4>>2]=m;m=q[c+40>>2];q[G>>2]=q[c+36>>2];q[G+4>>2]=m;m=q[c+32>>2];q[I>>2]=q[c+28>>2];q[I+4>>2]=m;m=q[c+24>>2];q[D>>2]=q[c+20>>2];q[D+4>>2]=m;m=q[c+16>>2];q[d+272>>2]=q[c+12>>2];q[d+276>>2]=m;Z=e+$|0;kV(d+192|0,Z,72);c=c+12|0;t:{if(q[b+48>>2]==1){u:{if((o|0)==(K|0)){m=q[a+52>>2]+ -16|0;h=u[m+12>>2];p=u[m>>2];k=u[m+4>>2];f=u[m+8>>2];break u}T=q[b+12>>2];m=q[a+48>>2]+((o|0)/(T|0)<<4)|0;P=q[m+4>>2];q[d+624>>2]=q[m>>2];q[d+628>>2]=P;P=q[m+12>>2];q[d+632>>2]=q[m+8>>2];q[d+636>>2]=P;P=q[m+28>>2];q[d+616>>2]=q[m+24>>2];q[d+620>>2]=P;P=q[m+20>>2];q[d+608>>2]=q[m+16>>2];q[d+612>>2]=P;Aj(d+576|0,d+624|0,d+608|0,x(x((o>>>0)%(T>>>0)|0)/x(T|0)));h=u[d+588>>2];p=u[d+576>>2];k=u[d+580>>2];f=u[d+584>>2]}J=u[d+336>>2];yp(d+624|0);O=x(p*p);W=x(k*k);ea=x(f*f);fa=x(h*h);ia=x(k*f);ja=x(p*h);S=x(ia+ja);db=x(x(S+S)*x(0));S=x(p*f);ka=x(k*h);Y=x(S-ka);Y=x(x(x(x(x(x(-O)-W)+ea)+fa)*x(0))+x(db-x(Y+Y)));u[d+632>>2]=s+x(J*Y);q[d+344>>2]=q[d+632>>2];S=x(S+ka);k=x(p*k);h=x(f*h);f=x(k-h);f=x(x(x(S+S)*x(0))+x(x(x(f+f)*x(0))-x(x(x(O-W)-ea)+fa)));u[d+624>>2]=H+x(J*f);p=x(ia-ja);h=x(k+h);k=x(x(x(p+p)*x(0))+x(x(x(x(x(W-O)-ea)+fa)*x(0))-x(h+h)));u[d+628>>2]=t+x(J*k);m=q[d+628>>2];q[d+336>>2]=q[d+624>>2];q[d+340>>2]=m;yp(d+624|0);h=u[d+192>>2];yp(d+624|0);u[d+632>>2]=s+x(Y*h);q[d+200>>2]=q[d+632>>2];u[d+628>>2]=t+x(k*h);u[d+624>>2]=H+x(f*h);break t}m=q[a+8>>2];n[q[q[m>>2]+88>>2]](d+608|0,m);nt(d+624|0,d+608|0);J=u[d+628>>2];O=u[d+624>>2];p=x(x(h*J)-x(f*O));W=u[d+632>>2];f=x(x(f*W)-x(k*J));h=x(x(k*O)-x(h*W));k=x(x(p*p)+x(x(f*f)+x(h*h)));if(!(k>2];yp(d+624|0);u[d+632>>2]=s-x(p*k);q[d+344>>2]=q[d+632>>2];u[d+628>>2]=t-x(h*k);u[d+624>>2]=H-x(f*k);m=q[d+628>>2];q[d+336>>2]=q[d+624>>2];q[d+340>>2]=m;yp(d+624|0);k=u[d+192>>2];yp(d+624|0);u[d+632>>2]=s-x(p*k);q[d+200>>2]=q[d+632>>2];u[d+628>>2]=t-x(h*k);u[d+624>>2]=H-x(f*k)}m=q[d+628>>2];q[d+192>>2]=q[d+624>>2];q[d+196>>2]=m;m=kV(e,d+336|0,72);u[l+8>>2]=s;u[l+4>>2]=t;u[l>>2]=H;q[c+56>>2]=q[L>>2];e=q[g+4>>2];q[c+48>>2]=q[g>>2];q[c+52>>2]=e;e=q[y+4>>2];q[c+40>>2]=q[y>>2];q[c+44>>2]=e;e=q[F+4>>2];q[c+32>>2]=q[F>>2];q[c+36>>2]=e;e=q[G+4>>2];q[c+24>>2]=q[G>>2];q[c+28>>2]=e;e=q[I+4>>2];q[c+16>>2]=q[I>>2];q[c+20>>2]=e;e=q[D+4>>2];q[c+8>>2]=q[D>>2];q[c+12>>2]=e;e=q[d+276>>2];q[c>>2]=q[d+272>>2];q[c+4>>2]=e;c=m+R|0;u[c+8>>2]=s;u[c+4>>2]=t;u[c>>2]=H;e=q[d+276>>2];q[c+12>>2]=q[d+272>>2];q[c+16>>2]=e;e=q[D+4>>2];q[c+20>>2]=q[D>>2];q[c+24>>2]=e;e=q[I+4>>2];q[c+28>>2]=q[I>>2];q[c+32>>2]=e;e=q[G+4>>2];q[c+36>>2]=q[G>>2];q[c+40>>2]=e;e=q[F+4>>2];q[c+44>>2]=q[F>>2];q[c+48>>2]=e;e=q[y+4>>2];q[c+52>>2]=q[y>>2];q[c+56>>2]=e;e=q[g+4>>2];q[c+60>>2]=q[g>>2];q[c+64>>2]=e;q[c+68>>2]=q[L>>2];kV(Z,d+192|0,72);e=m+U|0;v:{if(!o){break v}c=m+Q|0;e=c;if((o|0)==(K|0)){break v}kV(c,d+336|0,72);c=m+X|0;u[c+8>>2]=s;u[c+4>>2]=t;u[c>>2]=H;e=q[d+276>>2];q[c+12>>2]=q[d+272>>2];q[c+16>>2]=e;e=q[D+4>>2];q[c+20>>2]=q[D>>2];q[c+24>>2]=e;e=q[I+4>>2];q[c+28>>2]=q[I>>2];q[c+32>>2]=e;e=q[G+4>>2];q[c+36>>2]=q[G>>2];q[c+40>>2]=e;e=q[F+4>>2];q[c+44>>2]=q[F>>2];q[c+48>>2]=e;e=q[y+4>>2];q[c+52>>2]=q[y>>2];q[c+56>>2]=e;e=q[g+4>>2];q[c+60>>2]=q[g>>2];q[c+64>>2]=e;q[c+68>>2]=q[L>>2];c=m+z|0;u[c+8>>2]=s;u[c+4>>2]=t;u[c>>2]=H;e=q[d+276>>2];q[c+12>>2]=q[d+272>>2];q[c+16>>2]=e;e=q[D+4>>2];q[c+20>>2]=q[D>>2];q[c+24>>2]=e;e=q[I+4>>2];q[c+28>>2]=q[I>>2];q[c+32>>2]=e;e=q[G+4>>2];q[c+36>>2]=q[G>>2];q[c+40>>2]=e;e=q[F+4>>2];q[c+44>>2]=q[F>>2];q[c+48>>2]=e;e=q[y+4>>2];q[c+52>>2]=q[y>>2];q[c+56>>2]=e;e=q[g+4>>2];q[c+60>>2]=q[g>>2];q[c+64>>2]=e;q[c+68>>2]=q[L>>2];kV(m+_|0,d+192|0,72);e=m+V|0}o=o+1|0;K=w(q[b+12>>2],((q[a+28>>2]-q[a+24>>2]|0)/240|0)+ -1|0);if(o>>>0>>0){continue}break}}q[d+88>>2]=j;q[d+180>>2]=i;q[d+176>>2]=C;q[d+184>>2]=j;c=q[d+180>>2];q[d+80>>2]=q[d+176>>2];q[d+84>>2]=c;jB(a,b,d+80|0);q[d+72>>2]=j;q[d+164>>2]=i;q[d+160>>2]=C;q[d+168>>2]=j;c=q[d+164>>2];q[d+64>>2]=q[d+160>>2];q[d+68>>2]=c;kB(a,b,d- -64|0);q[d+56>>2]=j;q[d+148>>2]=i;q[d+144>>2]=C;q[d+152>>2]=j;c=q[d+148>>2];q[d+48>>2]=q[d+144>>2];q[d+52>>2]=c;lB(a,b,d+48|0);q[d+40>>2]=j;q[d+132>>2]=i;q[d+128>>2]=C;q[d+136>>2]=j;c=q[d+132>>2];q[d+32>>2]=q[d+128>>2];q[d+36>>2]=c;mB(a,b,d+32|0);q[d+24>>2]=j;q[d+116>>2]=i;q[d+112>>2]=C;q[d+120>>2]=j;c=q[d+116>>2];q[d+16>>2]=q[d+112>>2];q[d+20>>2]=c;nB(a,b,d+16|0);q[d+8>>2]=j;q[d+100>>2]=i;q[d+96>>2]=C;q[d+104>>2]=j;c=q[d+100>>2];q[d>>2]=q[d+96>>2];q[d+4>>2]=c;oB(a,b,d);w:{if(q[a+152>>2]<1){break w}e=q[a+28>>2];g=q[a+24>>2];if((e-g|0)==240){break w}c=q[a+148>>2];o=q[a+20>>2]+40|0;v=q[b+12>>2];l=0;while(1){if((v|0)>=1){i=(w(l,240)+g|0)+208|0;e=0;while(1){o=kV(kV(kV(kV(kV(kV(kV(kV(o,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0,i,q[a+152>>2]<<2)+c|0;e=e+1|0;v=q[b+12>>2];if((e|0)<(v|0)){continue}break}g=q[a+24>>2];e=q[a+28>>2]}l=l+1|0;if(l>>>0<((e-g|0)/240|0)+ -1>>>0){continue}break}}if(q[a+156>>2]<1){break a}e=q[a+28>>2];g=q[a+24>>2];if((e-g|0)==240){break a}c=q[a+148>>2];o=(q[a+20>>2]+(q[a+152>>2]<<2)|0)+40|0;v=q[b+12>>2];l=0;while(1){if((v|0)>=1){i=(w(l,240)+g|0)+224|0;e=0;while(1){o=kV(kV(kV(kV(kV(kV(kV(kV(o,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0,i,q[a+156>>2]<<2)+c|0;e=e+1|0;v=q[b+12>>2];if((e|0)<(v|0)){continue}break}g=q[a+24>>2];e=q[a+28>>2]}l=l+1|0;if(l>>>0<((e-g|0)/240|0)+ -1>>>0){continue}break}}ue=d+640|0} + + + +function qx(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,p=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;l=ue-272|0;ue=l;a:{if(q[a+192>>2]==q[a+188>>2]){break a}s=q[i+20>>2];if((s|0)<0){break a}b:{if(r[i+65|0]){p=q[i+4>>2];n[q[q[p>>2]+128>>2]](l+160|0,p,s);break b}p=q[i+4>>2];n[q[q[p>>2]+92>>2]](l+160|0,p,s)}z=q[l+160>>2];if(!z){break a}C=a+364|0;c:{d:{if(!(!r[a+477|0]|j)){s=n[q[q[b>>2]+136>>2]](b)|0;if(s){if(!n[q[q[s>>2]+8>>2]](s,b)){break c}}p=q[C>>2];if(!q[n[q[q[b>>2]+196>>2]](b)>>2]){break c}m=n[q[q[b>>2]+196>>2]](b)|0;s=((q[a+480>>2]<<2)+a|0)+380|0;t=q[m>>2];if(t){n[q[q[t>>2]>>2]](t)|0}t=(p|0)==5;v=(p|0)==2;p=q[s>>2];if(p){n[q[q[p>>2]+8>>2]](p)|0;q[s>>2]=0}q[s>>2]=q[m>>2];p=t|v;break d}s=q[C>>2];p=(s|0)==2|(s|0)==5}q[l+264>>2]=0;q[l+252>>2]=0;q[l+256>>2]=0;q[l+260>>2]=0;q[l+244>>2]=0;q[l+248>>2]=0;q[l+240>>2]=1065353216;Jv(q[b+4>>2],l+264|0,l+240|0);if(r[a+476|0]){e:{f:{g:{s=q[l+264>>2];if(s){m=q[i+40>>2];if(u[m+180>>2]!=x(0)|u[m+184>>2]!=x(0)|(q[C>>2]==6|u[m+188>>2]!=x(0))){break g}}Hv(l+160|0,q[b+4>>2],0);s=q[l+160>>2];q[l+160>>2]=0;m=q[l+264>>2];h:{if(!m){q[l+264>>2]=s;break h}n[q[q[m>>2]+8>>2]](m)|0;q[l+264>>2]=s;m=q[l+160>>2];if(!m){break h}n[q[q[m>>2]+8>>2]](m)|0;q[l+160>>2]=0;s=q[l+264>>2]}m=((q[a+484>>2]<<2)+a|0)+380|0;if(!s){break e}break f}m=((q[a+484>>2]<<2)+a|0)+380|0}n[q[q[s>>2]>>2]](s)|0}s=q[m>>2];if(s){n[q[q[s>>2]+8>>2]](s)|0;q[m>>2]=0}q[m>>2]=q[l+264>>2]}s=q[C>>2];i:{j:{k:{l:{t=q[q[i+40>>2]+40>>2];m:{n:{if(!t){break n}m=6;if((s|0)!=6){break n}s=q[t>>2];if((s|0)<0){break m}m=q[i+4>>2];n[q[q[m>>2]+104>>2]](l+160|0,m,s);s=q[l+160>>2];if(s){break l}s=q[C>>2]}if(s+ -3>>>0<=2){break k}m=s}e=0;if(p){break i}h=(m|0)==1?f:g;break j}n[q[q[s>>2]+8>>2]](s)|0;c=q[i+4>>2];n[q[q[c>>2]+104>>2]](l+160|0,c,q[t>>2]);D=q[l+160>>2];if(!(j|(!D|!r[D+25|0]))){h=q[D+80>>2];e=1;break i}h=q[D+72>>2];break j}h=e;e=0;if(p){break i}h=(s|0)==4?c:d}e=0}if(h){c=Eu(q[b+80>>2]);d=r[i+8|0]|r[c|0]&-2;o[c|0]=d;o[c|0]=d&253|r[i+9|0]<<1;q[c+4>>2]=q[q[i+40>>2]+44>>2];q[c+8>>2]=q[i+16>>2];n[q[q[b>>2]+228>>2]](l+160|0,b);f=q[l+160>>2];d=q[l+164>>2];o:{if(!d){break o}g=q[d+4>>2];q[d+4>>2]=g+ -1;if(g){break o}n[q[q[d>>2]+8>>2]](d);WS(d)}p:{if(f){n[q[q[b>>2]+228>>2]](l+160|0,b);q[c+4>>2]=q[q[l+160>>2]+8>>2];d=q[l+164>>2];if(!d){break p}f=q[d+4>>2];q[d+4>>2]=f+ -1;if(f){break p}n[q[q[d>>2]+8>>2]](d);WS(d);break p}if((n[q[q[b>>2]+160>>2]](b)|0)!=1){break p}q[c+4>>2]=0}if(e){q[c+4>>2]=1}Sy(b,h);e=0;d=q[a+376>>2];if((d|0)>0){while(1){f=e<<2;g=f+c|0;f=a+f|0;q[g+12>>2]=q[f+412>>2];q[g+44>>2]=q[f+444>>2];e=e+1|0;if((d|0)!=(e|0)){continue}break}}Wy(b,h,a+380|0,d);c=q[b+80>>2];n[q[q[c>>2]+8>>2]](c,p);d=n[q[q[h>>2]+28>>2]](h)|0;q[l+236>>2]=0;q[l+232>>2]=0;q:{if(!(!D|!t)){q[l+224>>2]=0;n[q[q[D>>2]>>2]](D)|0;c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}q[l+224>>2]=D;Fx(a,b,h,l+224|0,t,i,j,l+236|0,l+232|0);c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}n[q[q[b>>2]+84>>2]](l+160|0,b);c=q[l+220>>2];e=q[l+216>>2];o[d+56|0]=e;o[d+57|0]=e>>>8;o[d+58|0]=e>>>16;o[d+59|0]=e>>>24;o[d+60|0]=c;o[d+61|0]=c>>>8;o[d+62|0]=c>>>16;o[d+63|0]=c>>>24;c=q[l+212>>2];e=q[l+208>>2];o[d+48|0]=e;o[d+49|0]=e>>>8;o[d+50|0]=e>>>16;o[d+51|0]=e>>>24;o[d+52|0]=c;o[d+53|0]=c>>>8;o[d+54|0]=c>>>16;o[d+55|0]=c>>>24;c=q[l+204>>2];e=q[l+200>>2];o[d+40|0]=e;o[d+41|0]=e>>>8;o[d+42|0]=e>>>16;o[d+43|0]=e>>>24;o[d+44|0]=c;o[d+45|0]=c>>>8;o[d+46|0]=c>>>16;o[d+47|0]=c>>>24;c=q[l+196>>2];e=q[l+192>>2];o[d+32|0]=e;o[d+33|0]=e>>>8;o[d+34|0]=e>>>16;o[d+35|0]=e>>>24;o[d+36|0]=c;o[d+37|0]=c>>>8;o[d+38|0]=c>>>16;o[d+39|0]=c>>>24;c=q[l+188>>2];e=q[l+184>>2];o[d+24|0]=e;o[d+25|0]=e>>>8;o[d+26|0]=e>>>16;o[d+27|0]=e>>>24;o[d+28|0]=c;o[d+29|0]=c>>>8;o[d+30|0]=c>>>16;o[d+31|0]=c>>>24;c=q[l+180>>2];e=q[l+176>>2];o[d+16|0]=e;o[d+17|0]=e>>>8;o[d+18|0]=e>>>16;o[d+19|0]=e>>>24;o[d+20|0]=c;o[d+21|0]=c>>>8;o[d+22|0]=c>>>16;o[d+23|0]=c>>>24;c=q[l+172>>2];e=q[l+168>>2];o[d+8|0]=e;o[d+9|0]=e>>>8;o[d+10|0]=e>>>16;o[d+11|0]=e>>>24;o[d+12|0]=c;o[d+13|0]=c>>>8;o[d+14|0]=c>>>16;o[d+15|0]=c>>>24;c=q[l+164>>2];e=q[l+160>>2];o[d|0]=e;o[d+1|0]=e>>>8;o[d+2|0]=e>>>16;o[d+3|0]=e>>>24;o[d+4|0]=c;o[d+5|0]=c>>>8;o[d+6|0]=c>>>16;o[d+7|0]=c>>>24;break q}if(p){Ix(b,h,i);break q}Jx(b,h,i)}c=q[b+4>>2];e=q[i+68>>2];if(e){n[q[q[e>>2]>>2]](e)|0}e=q[c+316>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c+316>>2]=0}q[c+316>>2]=q[i+68>>2];q[q[b+4>>2]+320>>2]=k;k=q[q[a+320>>2]>>2]%(pr(z)|0)|0;r:{s:{e=q[a+320>>2];c=q[a+324>>2];if((e|0)==(c|0)){break s}while(1){if((q[e>>2]%(pr(z)|0)|0)==(k|0)){e=e+4|0;if((c|0)!=(e|0)){continue}break s}break}if(q[a+192>>2]==q[a+188>>2]){break r}e=d- -64|0;g=0;while(1){s=g<<2;j=q[s+q[a+320>>2]>>2]%(pr(z)|0)|0;Ly(b,kr(z,j));c=b;f=c;t:{if((n[q[q[c>>2]+160>>2]](c)|0)==1){m=6;c=mr(z,j);break t}m=3;c=lr(z,j)}My(f,c);Ny(b,h);c=q[a+188>>2]+(g<<6)|0;f=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);k=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[e|0]=k;o[e+1|0]=k>>>8;o[e+2|0]=k>>>16;o[e+3|0]=k>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;k=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);C=e+56|0;f=C;p=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);t=e+48|0;f=t;p=r[c+48|0]|r[c+49|0]<<8|(r[c+50|0]<<16|r[c+51|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+44|0]|r[c+45|0]<<8|(r[c+46|0]<<16|r[c+47|0]<<24);E=e+40|0;f=E;p=r[c+40|0]|r[c+41|0]<<8|(r[c+42|0]<<16|r[c+43|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+36|0]|r[c+37|0]<<8|(r[c+38|0]<<16|r[c+39|0]<<24);v=e+32|0;f=v;p=r[c+32|0]|r[c+33|0]<<8|(r[c+34|0]<<16|r[c+35|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+28|0]|r[c+29|0]<<8|(r[c+30|0]<<16|r[c+31|0]<<24);y=e+24|0;f=y;p=r[c+24|0]|r[c+25|0]<<8|(r[c+26|0]<<16|r[c+27|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);F=e+16|0;f=F;p=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);o[f|0]=p;o[f+1|0]=p>>>8;o[f+2|0]=p>>>16;o[f+3|0]=p>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);p=e+8|0;f=p;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[f|0]=c;o[f+1|0]=c>>>8;o[f+2|0]=c>>>16;o[f+3|0]=c>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;c=g<<4;f=c+q[a+200>>2]|0;q[d+704>>2]=q[f>>2];q[d+708>>2]=q[f+4>>2];q[d+712>>2]=q[f+8>>2];q[d+716>>2]=q[f+12>>2];f=c+q[a+212>>2]|0;k=q[f>>2];A=q[f+4>>2];B=q[f+12>>2];q[d+872>>2]=q[f+8>>2];q[d+876>>2]=B;q[d+864>>2]=k;q[d+868>>2]=A;f=c+q[a+224>>2]|0;k=q[f+8>>2];A=q[f+12>>2];B=q[f+4>>2];q[d+1024>>2]=q[f>>2];q[d+1028>>2]=B;q[d+1032>>2]=k;q[d+1036>>2]=A;f=c+q[a+236>>2]|0;k=q[f+8>>2];A=q[f+12>>2];B=q[f+4>>2];q[d+1184>>2]=q[f>>2];q[d+1188>>2]=B;q[d+1192>>2]=k;q[d+1196>>2]=A;f=c+q[a+248>>2]|0;k=q[f+8>>2];A=q[f+12>>2];B=q[f+4>>2];q[d+1344>>2]=q[f>>2];q[d+1348>>2]=B;q[d+1352>>2]=k;q[d+1356>>2]=A;f=c+q[a+260>>2]|0;k=q[f+8>>2];A=q[f+12>>2];B=q[f+4>>2];q[d+1504>>2]=q[f>>2];q[d+1508>>2]=B;q[d+1512>>2]=k;q[d+1516>>2]=A;q[d+1696>>2]=q[s+q[a+272>>2]>>2];q[d+1856>>2]=q[s+q[a+284>>2]>>2];f=ht(l+160|0,e);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(f,ht(l+96|0,l+32|0),u[q[a+296>>2]>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(f,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);f=q[l+164>>2];k=q[l+180>>2];A=q[l+196>>2];B=q[l+212>>2];G=q[l+168>>2];H=q[l+184>>2];I=q[l+200>>2];J=q[l+216>>2];K=q[l+172>>2];L=q[l+188>>2];M=q[l+204>>2];N=q[l+220>>2];O=q[l+160>>2];P=q[l+176>>2];Q=q[l+192>>2];R=q[l+208>>2];oo(l+96|0);q[l+108>>2]=R;q[l+104>>2]=Q;q[l+100>>2]=P;q[l+96>>2]=O;q[l+156>>2]=N;q[l+152>>2]=M;q[l+148>>2]=L;q[l+144>>2]=K;q[l+140>>2]=J;q[l+136>>2]=I;q[l+132>>2]=H;q[l+128>>2]=G;q[l+124>>2]=B;q[l+120>>2]=A;q[l+116>>2]=k;q[l+112>>2]=f;f=q[l+108>>2];q[p>>2]=q[l+104>>2];q[p+4>>2]=f;f=q[l+116>>2];q[F>>2]=q[l+112>>2];q[F+4>>2]=f;f=q[l+124>>2];q[y>>2]=q[l+120>>2];q[y+4>>2]=f;f=q[l+132>>2];q[v>>2]=q[l+128>>2];q[v+4>>2]=f;f=q[l+140>>2];q[E>>2]=q[l+136>>2];q[E+4>>2]=f;f=q[l+148>>2];q[t>>2]=q[l+144>>2];q[t+4>>2]=f;f=q[l+100>>2];q[e>>2]=q[l+96>>2];q[e+4>>2]=f;f=q[l+156>>2];q[C>>2]=q[l+152>>2];q[C+4>>2]=f;f=s+q[a+308>>2]|0;f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);u[d+2028>>2]=x(f>>>24>>>0)/x(255);u[d+2016>>2]=x((f&255)>>>0)/x(255);u[d+2024>>2]=x((f>>>16&255)>>>0)/x(255);u[d+2020>>2]=x((f>>>8&255)>>>0)/x(255);f=q[l+236>>2];if(f){k=c+q[a+332>>2]|0;q[f>>2]=q[k>>2];q[f+4>>2]=q[k+4>>2];q[f+8>>2]=q[k+8>>2];q[f+12>>2]=q[k+12>>2]}f=q[l+232>>2];if(f){c=c+q[a+344>>2]|0;q[f>>2]=q[c>>2];q[f+4>>2]=q[c+4>>2];q[f+8>>2]=q[c+8>>2];q[f+12>>2]=q[c+12>>2]}n[q[q[h>>2]+36>>2]](h);Py(b,nr(z,j),w(or(z,j),m));g=g+1|0;if(g>>>0>2]-q[a+188>>2]>>6>>>0){continue}break}break r}Ly(b,kr(z,k));c=b;e=c;u:{if((n[q[q[c>>2]+160>>2]](c)|0)==1){C=6;c=mr(z,k);break u}C=3;c=lr(z,k)}My(e,c);Ny(b,h);f=q[a+188>>2];c=q[a+192>>2]-f|0;if(!c){break r}G=d+2016|0;H=d+704|0;I=d- -64|0;e=c>>6;while(1){c=e-E|0;s=(c|0)<10?c:10;v:{if((c|0)<1){break v}J=(s|0)>1?s:1;c=0;while(1){p=c+E|0;e=(p<<6)+f|0;f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);g=(c<<6)+I|0;j=g;m=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[j|0]=m;o[j+1|0]=m>>>8;o[j+2|0]=m>>>16;o[j+3|0]=m>>>24;o[j+4|0]=f;o[j+5|0]=f>>>8;o[j+6|0]=f>>>16;o[j+7|0]=f>>>24;t=j+56|0;f=t;j=r[e+60|0]|r[e+61|0]<<8|(r[e+62|0]<<16|r[e+63|0]<<24);m=r[e+56|0]|r[e+57|0]<<8|(r[e+58|0]<<16|r[e+59|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+52|0]|r[e+53|0]<<8|(r[e+54|0]<<16|r[e+55|0]<<24);v=g+48|0;f=v;m=r[e+48|0]|r[e+49|0]<<8|(r[e+50|0]<<16|r[e+51|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+44|0]|r[e+45|0]<<8|(r[e+46|0]<<16|r[e+47|0]<<24);y=g+40|0;f=y;m=r[e+40|0]|r[e+41|0]<<8|(r[e+42|0]<<16|r[e+43|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+36|0]|r[e+37|0]<<8|(r[e+38|0]<<16|r[e+39|0]<<24);F=g+32|0;f=F;m=r[e+32|0]|r[e+33|0]<<8|(r[e+34|0]<<16|r[e+35|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+28|0]|r[e+29|0]<<8|(r[e+30|0]<<16|r[e+31|0]<<24);A=g+24|0;f=A;m=r[e+24|0]|r[e+25|0]<<8|(r[e+26|0]<<16|r[e+27|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+20|0]|r[e+21|0]<<8|(r[e+22|0]<<16|r[e+23|0]<<24);B=g+16|0;f=B;m=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;j=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);m=g+8|0;f=m;e=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[f|0]=e;o[f+1|0]=e>>>8;o[f+2|0]=e>>>16;o[f+3|0]=e>>>24;o[f+4|0]=j;o[f+5|0]=j>>>8;o[f+6|0]=j>>>16;o[f+7|0]=j>>>24;e=ht(l+160|0,g);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(e,ht(l+96|0,l+32|0),u[q[a+296>>2]+(p<<2)>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(e,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);e=q[l+164>>2];f=q[l+180>>2];j=q[l+196>>2];K=q[l+212>>2];L=q[l+168>>2];M=q[l+184>>2];N=q[l+200>>2];O=q[l+216>>2];P=q[l+172>>2];Q=q[l+188>>2];R=q[l+204>>2];S=q[l+220>>2];T=q[l+160>>2];U=q[l+176>>2];V=q[l+192>>2];W=q[l+208>>2];oo(l+96|0);q[l+108>>2]=W;q[l+104>>2]=V;q[l+100>>2]=U;q[l+96>>2]=T;q[l+156>>2]=S;q[l+152>>2]=R;q[l+148>>2]=Q;q[l+144>>2]=P;q[l+140>>2]=O;q[l+136>>2]=N;q[l+132>>2]=M;q[l+128>>2]=L;q[l+124>>2]=K;q[l+120>>2]=j;q[l+116>>2]=f;q[l+112>>2]=e;e=q[l+108>>2];q[m>>2]=q[l+104>>2];q[m+4>>2]=e;e=q[l+116>>2];q[B>>2]=q[l+112>>2];q[B+4>>2]=e;e=q[l+124>>2];q[A>>2]=q[l+120>>2];q[A+4>>2]=e;e=q[l+132>>2];q[F>>2]=q[l+128>>2];q[F+4>>2]=e;e=q[l+140>>2];q[y>>2]=q[l+136>>2];q[y+4>>2]=e;e=q[l+148>>2];q[v>>2]=q[l+144>>2];q[v+4>>2]=e;e=q[l+100>>2];q[g>>2]=q[l+96>>2];q[g+4>>2]=e;e=q[l+156>>2];q[t>>2]=q[l+152>>2];q[t+4>>2]=e;e=c<<4;f=e+H|0;g=p<<4;j=g+q[a+200>>2]|0;q[f>>2]=q[j>>2];q[f+4>>2]=q[j+4>>2];q[f+8>>2]=q[j+8>>2];q[f+12>>2]=q[j+12>>2];j=g+q[a+212>>2]|0;t=q[j>>2];v=q[j+4>>2];y=q[j+12>>2];f=d+e|0;q[f+872>>2]=q[j+8>>2];q[f+876>>2]=y;q[f+864>>2]=t;q[f+868>>2]=v;j=g+q[a+224>>2]|0;m=q[j+8>>2];t=q[j+12>>2];y=q[j+4>>2];v=f+1024|0;q[v>>2]=q[j>>2];q[v+4>>2]=y;j=f+1032|0;q[j>>2]=m;q[j+4>>2]=t;j=g+q[a+236>>2]|0;m=q[j+8>>2];t=q[j+12>>2];y=q[j+4>>2];v=f+1184|0;q[v>>2]=q[j>>2];q[v+4>>2]=y;j=f+1192|0;q[j>>2]=m;q[j+4>>2]=t;j=g+q[a+248>>2]|0;m=q[j+8>>2];t=q[j+12>>2];y=q[j+4>>2];v=f+1344|0;q[v>>2]=q[j>>2];q[v+4>>2]=y;j=f+1352|0;q[j>>2]=m;q[j+4>>2]=t;j=g+q[a+260>>2]|0;m=q[j+8>>2];t=q[j+12>>2];y=q[j+4>>2];v=f+1504|0;q[v>>2]=q[j>>2];q[v+4>>2]=y;j=f+1512|0;q[j>>2]=m;q[j+4>>2]=t;j=p<<2;q[f+1696>>2]=q[j+q[a+272>>2]>>2];q[f+1856>>2]=q[j+q[a+284>>2]>>2];f=e+G|0;j=j+q[a+308>>2]|0;j=r[j|0]|r[j+1|0]<<8|(r[j+2|0]<<16|r[j+3|0]<<24);u[f+12>>2]=x(j>>>24>>>0)/x(255);u[f>>2]=x((j&255)>>>0)/x(255);u[f+8>>2]=x((j>>>16&255)>>>0)/x(255);u[f+4>>2]=x((j>>>8&255)>>>0)/x(255);f=q[l+236>>2];if(f){j=g+q[a+332>>2]|0;q[e+f>>2]=q[j>>2];q[f+(e|4)>>2]=q[j+4>>2];q[f+(e|8)>>2]=q[j+8>>2];q[f+(e|12)>>2]=q[j+12>>2]}f=q[l+232>>2];if(f){g=g+q[a+344>>2]|0;q[e+f>>2]=q[g>>2];q[f+(e|4)>>2]=q[g+4>>2];q[f+(e|8)>>2]=q[g+8>>2];q[f+(e|12)>>2]=q[g+12>>2]}c=c+1|0;if((J|0)==(c|0)){break v}f=q[a+188>>2];continue}}n[q[q[h>>2]+36>>2]](h);if(!q[a+488>>2]){Qy(b,nr(z,k),w(or(z,k),C),s)}f=q[a+188>>2];e=q[a+192>>2]-f>>6;E=s+E|0;if(e>>>0>E>>>0){continue}break}}Ty(b,h);Gu(q[b+80>>2])}if(D){n[q[q[D>>2]+8>>2]](D)|0}a=q[l+264>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[l+264>>2]=0}n[q[q[z>>2]+8>>2]](z)|0}ue=l+272|0}function Ai(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=x(0),j=0,k=0,l=x(0),m=x(0),s=x(0);j=ue-112|0;ue=j;h=q[b>>2];q[b>>2]=h+4;q[a+3356>>2]=r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24);q[b>>2]=q[b>>2]+4;h=q[a+4>>2];a:{if((n[q[q[h>>2]+36>>2]](h)|0)>=3){q[a+3436>>2]=q[a+2380>>2];d=q[b>>2];break a}h=q[b>>2];q[a+3436>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);d=q[b>>2]+4|0;q[b>>2]=d}q[a+3440>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4;h=q[a+4>>2];b:{if((n[q[q[h>>2]+36>>2]](h)|0)<15){break b}d=q[b>>2];h=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=d+4|0;q[b>>2]=d;q[a+3448>>2]=h;if(h>>>0>1){break b}if(h-1){h=a+3460|0;q[h>>2]=0;q[h+4>>2]=0;h=a+3568|0;q[h>>2]=0;q[h+4>>2]=1135869952;break b}q[a+3452>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);h=q[b>>2];q[b>>2]=h+4;q[a+3456>>2]=r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24);q[b>>2]=q[b>>2]+4;h=q[a+4>>2];f=n[q[q[h>>2]+36>>2]](h)|0;h=q[b>>2];d=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+3460>>2]=d;e=q[b>>2];h=e+4|0;q[b>>2]=h;if(d>>>0<=2){c:{d:{switch(d-1|0){default:q[a+3464>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);d=4;break c;case 0:d=r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24);g=a+3464|0;q[g>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[g+4>>2]=d;d=8;break c;case 1:break d}}g=a+3472|0;if((f|0)>=1608){d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);h=e+8|0;q[b>>2]=h;wh(g,h,d,f);break c}d=28;wh(g,h,28,f)}q[b>>2]=q[b>>2]+d}h=q[a+4>>2];f=n[q[q[h>>2]+36>>2]](h)|0;h=q[b>>2];d=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+3568>>2]=d;e=q[b>>2];h=e+4|0;q[b>>2]=h;if(d>>>0>2){break b}e:{switch(d-1|0){default:q[a+3572>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[b>>2]=q[b>>2]+4;break b;case 0:d=r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24);g=a+3572|0;q[g>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[g+4>>2]=d;q[b>>2]=q[b>>2]+8;break b;case 1:break e}}g=a+3580|0;f:{if((f|0)>=1608){d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);h=e+8|0;q[b>>2]=h;wh(g,h,d,f);break f}d=28;wh(g,h,28,f)}q[b>>2]=q[b>>2]+d}h=q[b>>2];q[a+3444>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[j+40>>2]=-1;q[j+44>>2]=-1;q[j+32>>2]=-1;q[j+36>>2]=-1;q[j+24>>2]=-1;q[j+28>>2]=-1;p[j+100>>1]=0;q[j+92>>2]=0;q[j+72>>2]=0;f=j+16|0;q[f>>2]=1608;q[f+4>>2]=1608;q[j+12>>2]=7064;g=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[j>>2]=g;d=e+8|0;q[b>>2]=d;if(g>>>0<=2){h=b;g:{h:{switch(g-1|0){default:q[j+4>>2]=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);d=e+12|0;break g;case 0:d=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);q[j+4>>2]=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);q[j+8>>2]=d;d=e+16|0;break g;case 1:break h}}wh(j+12|0,d,28,1500);d=q[b>>2]+28|0}q[h>>2]=d}h=q[a+4>>2];i:{if((n[q[q[h>>2]+36>>2]](h)|0)>14){break i}q[a+3448>>2]=1;h=q[j+4>>2];d=a+3460|0;q[d>>2]=q[j>>2];q[d+4>>2]=h;h=j+8|0;q[a+3468>>2]=q[h>>2];kV(a+3476|0,f,92);q[a+3576>>2]=q[h>>2];h=q[j+4>>2];d=a+3568|0;q[d>>2]=q[j>>2];q[d+4>>2]=h;kV(a+3584|0,f,92);h=q[j>>2];if(h>>>0>2){break i}j:{switch(h-1|0){default:i=x(x(x(360)-u[j+4>>2])*x(.5));u[a+3464>>2]=i+x(90);u[a+3572>>2]=x(x(360)-i)+x(90);break i;case 0:l=x(x(x(360)-u[j+8>>2])*x(.5));u[a+3464>>2]=l+x(90);i=u[j+4>>2];u[a+3576>>2]=x(x(360)-l)+x(90);i=x(x(x(360)-i)*x(.5));u[a+3468>>2]=i+x(90);u[a+3572>>2]=x(x(360)-i)+x(90);break i;case 1:break j}}m=x(x(x(360)-u[j+52>>2])*x(.5));u[a+3508>>2]=m+x(90);s=x(x(x(360)-u[j+48>>2])*x(.5));u[a+3512>>2]=s+x(90);l=x(x(x(360)-u[j+60>>2])*x(.5));u[a+3516>>2]=l+x(90);i=u[j+56>>2];u[a+3628>>2]=x(x(360)-l)+x(90);u[a+3620>>2]=x(x(360)-m)+x(90);u[a+3616>>2]=x(x(360)-s)+x(90);i=x(x(x(360)-i)*x(.5));u[a+3520>>2]=i+x(90);u[a+3624>>2]=x(x(360)-i)+x(90)}h=q[b>>2];g=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+3676>>2]=g;d=q[b>>2]+4|0;q[b>>2]=d;if(g>>>0<=2){h=b;k:{l:{switch(g-1|0){default:g=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+3680|0;q[f>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[f+4>>2]=g;d=q[b>>2]+8|0;break k;case 0:f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=a+3680|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+44|0]|r[d+45|0]<<8|(r[d+46|0]<<16|r[d+47|0]<<24);e=a+3720|0;g=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);e=a+3712|0;g=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);e=a+3704|0;g=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);e=a+3696|0;g=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;g=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);f=a+3688|0;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;d=q[b>>2]+48|0;break k;case 1:break l}}f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=a+3680|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=a+3720|0;g=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;f=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);e=a+3712|0;g=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);e=a+3704|0;g=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);e=a+3696|0;g=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;g=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);f=a+3688|0;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;d=q[b>>2]+44|0}q[h>>2]=d}d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+3728>>2]=d;e=q[b>>2]+4|0;q[b>>2]=e;if(d>>>0<=2){h=b;m:{n:{switch(d-1|0){default:d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);g=a+3732|0;q[g>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[g+4>>2]=d;d=8;break m;case 0:g=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);f=a+3732|0;d=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+44|0]|r[e+45|0]<<8|(r[e+46|0]<<16|r[e+47|0]<<24);f=a+3772|0;d=r[e+40|0]|r[e+41|0]<<8|(r[e+42|0]<<16|r[e+43|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+36|0]|r[e+37|0]<<8|(r[e+38|0]<<16|r[e+39|0]<<24);f=a+3764|0;d=r[e+32|0]|r[e+33|0]<<8|(r[e+34|0]<<16|r[e+35|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+28|0]|r[e+29|0]<<8|(r[e+30|0]<<16|r[e+31|0]<<24);f=a+3756|0;d=r[e+24|0]|r[e+25|0]<<8|(r[e+26|0]<<16|r[e+27|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+20|0]|r[e+21|0]<<8|(r[e+22|0]<<16|r[e+23|0]<<24);f=a+3748|0;d=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);f=a+3740|0;d=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;d=48;break m;case 1:break n}}g=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);f=a+3732|0;d=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=a+3772|0;d=r[e+40|0]|r[e+41|0]<<8|(r[e+42|0]<<16|r[e+43|0]<<24);o[g|0]=d;o[g+1|0]=d>>>8;o[g+2|0]=d>>>16;o[g+3|0]=d>>>24;g=r[e+36|0]|r[e+37|0]<<8|(r[e+38|0]<<16|r[e+39|0]<<24);f=a+3764|0;d=r[e+32|0]|r[e+33|0]<<8|(r[e+34|0]<<16|r[e+35|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+28|0]|r[e+29|0]<<8|(r[e+30|0]<<16|r[e+31|0]<<24);f=a+3756|0;d=r[e+24|0]|r[e+25|0]<<8|(r[e+26|0]<<16|r[e+27|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+20|0]|r[e+21|0]<<8|(r[e+22|0]<<16|r[e+23|0]<<24);f=a+3748|0;d=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;g=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);f=a+3740|0;d=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;d=44}q[h>>2]=d+q[b>>2]}h=q[a+4>>2];f=n[q[q[h>>2]+36>>2]](h)|0;h=q[b>>2];h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+3780>>2]=h;e=q[b>>2];k=e+4|0;q[b>>2]=k;if(h>>>0<=2){o:{p:{switch(h-1|0){default:q[a+3784>>2]=r[k|0]|r[k+1|0]<<8|(r[k+2|0]<<16|r[k+3|0]<<24);d=4;break o;case 0:h=r[k+4|0]|r[k+5|0]<<8|(r[k+6|0]<<16|r[k+7|0]<<24);d=a+3784|0;q[d>>2]=r[k|0]|r[k+1|0]<<8|(r[k+2|0]<<16|r[k+3|0]<<24);q[d+4>>2]=h;d=8;break o;case 1:break p}}g=a+3792|0;if((f|0)>=1608){d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);h=e+8|0;q[b>>2]=h;wh(g,h,d,f);break o}d=28;wh(g,k,28,f)}q[b>>2]=q[b>>2]+d}h=q[a+4>>2];ai(a+3888|0,b,n[q[q[h>>2]+36>>2]](h)|0);h=q[a+4>>2];ai(a+3932|0,b,n[q[q[h>>2]+36>>2]](h)|0);h=q[a+4>>2];ai(a+3976|0,b,n[q[q[h>>2]+36>>2]](h)|0);h=q[a+4>>2];if((n[q[q[h>>2]+36>>2]](h)|0)<=2){q[b>>2]=q[b>>2]+4}q:{if(q[q[c>>2]+8>>2]){break q}b=q[a+3676>>2];if(b>>>0<=2){r:{s:{switch(b-1|0){default:b=a+3684|0;break r;case 0:b=a+3692|0;u[b>>2]=-u[b>>2];b=a+3684|0;u[b>>2]=-u[b>>2];b=a+3708|0;u[b>>2]=-u[b>>2];b=a+3700|0;u[b>>2]=-u[b>>2];b=a+3724|0;u[b>>2]=-u[b>>2];b=a+3716|0;break r;case 1:break s}}b=a+3692|0;u[b>>2]=-u[b>>2];b=a+3684|0;u[b>>2]=-u[b>>2];b=a+3708|0;u[b>>2]=-u[b>>2];b=a+3700|0}u[b>>2]=-u[b>>2]}b=q[a+3728>>2];if(b>>>0>2){break q}t:{switch(b-1|0){default:b=a+3736|0;u[b>>2]=-u[b>>2];break q;case 0:b=a+3744|0;u[b>>2]=-u[b>>2];b=a+3736|0;u[b>>2]=-u[b>>2];b=a+3760|0;u[b>>2]=-u[b>>2];b=a+3752|0;u[b>>2]=-u[b>>2];b=a+3776|0;u[b>>2]=-u[b>>2];b=a+3768|0;u[b>>2]=-u[b>>2];break q;case 1:break t}}b=a+3744|0;u[b>>2]=-u[b>>2];b=a+3736|0;u[b>>2]=-u[b>>2];b=a+3760|0;u[b>>2]=-u[b>>2];b=a+3752|0;u[b>>2]=-u[b>>2]}b=q[a+4>>2];u:{if((n[q[q[b>>2]+36>>2]](b)|0)<8){break u}b=q[a+3676>>2];if(b>>>0<=2){v:{w:{switch(b-1|0){default:c=a+3680|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3684|0;break v;case 0:c=a+3688|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3692|0;u[b>>2]=i*u[b>>2];c=a+3680|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3684|0;u[b>>2]=i*u[b>>2];c=a+3704|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3708|0;u[b>>2]=i*u[b>>2];c=a+3696|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3700|0;u[b>>2]=i*u[b>>2];c=a+3720|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3724|0;u[b>>2]=i*u[b>>2];c=a+3712|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3716|0;break v;case 1:break w}}c=a+3688|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3692|0;u[b>>2]=i*u[b>>2];c=a+3680|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3684|0;u[b>>2]=i*u[b>>2];c=a+3704|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3708|0;u[b>>2]=i*u[b>>2];c=a+3696|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3700|0}u[b>>2]=i*u[b>>2]}b=q[a+3728>>2];if(b>>>0>2){break u}x:{switch(b-1|0){default:c=a+3732|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];a=a+3736|0;u[a>>2]=i*u[a>>2];break u;case 0:c=a+3740|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3744|0;u[b>>2]=i*u[b>>2];c=a+3732|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3736|0;u[b>>2]=i*u[b>>2];c=a+3756|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3760|0;u[b>>2]=i*u[b>>2];c=a+3748|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3752|0;u[b>>2]=i*u[b>>2];c=a+3772|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3776|0;u[b>>2]=i*u[b>>2];c=a+3764|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];a=a+3768|0;u[a>>2]=i*u[a>>2];break u;case 1:break x}}c=a+3740|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3744|0;u[b>>2]=i*u[b>>2];c=a+3732|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3736|0;u[b>>2]=i*u[b>>2];c=a+3756|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];b=a+3760|0;u[b>>2]=i*u[b>>2];c=a+3748|0;b=q[a+4>>2];i=x(n[q[q[b>>2]+32>>2]](b));u[c>>2]=i*u[c>>2];a=a+3752|0;u[a>>2]=i*u[a>>2]}ue=j+112|0}function Qf(a,b,c){var d=0,e=0,f=0,g=0;d=q[b+8>>2];a:{if(!(q[b+12>>2]!=2?d+4>>>0<=t[b+4>>2]:0)){q[b+12>>2]=2;e=q[a>>2];break a}d=q[b>>2]+d|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=e;d=q[b+8>>2]+4|0;q[b+8>>2]=d}b:{if(e>>>0>1){break b}f=b;c:{if(e-1){g=d+4|0;e=q[b+4>>2];d:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break d}d=q[b>>2]+d|0;q[a+12>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;g=e+8|0;e=q[b+4>>2]}e:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break e}d=q[b>>2]+d|0;q[a+16>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;q[b+8>>2]=d;e=q[b+4>>2]}f:{if(!(q[b+12>>2]!=2?d+8>>>0<=e>>>0:0)){q[b+12>>2]=2;break f}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+20>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+24>>2]=e;d=q[b+8>>2]+8|0;q[b+8>>2]=d}if((c|0)<1608){break b}if(!(q[b+12>>2]!=2?d+4>>>0<=t[b+4>>2]:0)){q[b+12>>2]=2;break b}d=q[b>>2]+d|0;q[a+28>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;break c}g=d+4|0;e=q[b+4>>2];g:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break g}d=q[b>>2]+d|0;q[a+12>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;g=e+8|0;e=q[b+4>>2]}h:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break h}d=q[b>>2]+d|0;q[a+16>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;g=e+8|0;e=q[b+4>>2]}i:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break i}d=q[b>>2]+d|0;q[a+20>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;q[b+8>>2]=d;e=q[b+4>>2]}g=d+8|0;j:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break j}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+24>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+28>>2]=e;e=q[b+8>>2];d=e+8|0;q[b+8>>2]=d;g=e+16|0;e=q[b+4>>2]}k:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break k}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+32>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+36>>2]=e;e=q[b+8>>2];d=e+8|0;q[b+8>>2]=d;g=e+16|0;e=q[b+4>>2]}l:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break l}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+40>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+44>>2]=e;d=q[b+8>>2]+8|0;q[b+8>>2]=d;e=q[b+4>>2]}if(!(q[b+12>>2]!=2?d+4>>>0<=e>>>0:0)){q[b+12>>2]=2;break b}d=q[b>>2]+d|0;q[a+48>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0}q[f+8>>2]=d}m:{if(!(q[b+12>>2]!=2?d+4>>>0<=t[b+4>>2]:0)){q[b+12>>2]=2;e=q[a+4>>2];break m}d=q[b>>2]+d|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+4>>2]=e;d=q[b+8>>2]+4|0;q[b+8>>2]=d}n:{if(e>>>0>3){break n}f=b;o:{p:{switch(e-1|0){default:e=d+4|0;g=q[b+4>>2];q:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break q}d=q[b>>2]+d|0;q[a+52>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;e=e+8|0;g=q[b+4>>2]}r:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break r}d=q[b>>2]+d|0;q[a+56>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;e=e+8|0;g=q[b+4>>2]}if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break n}d=q[b>>2]+d|0;q[a+60>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;break o;case 0:e=d+4|0;g=q[b+4>>2];s:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break s}d=q[b>>2]+d|0;q[a+52>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;e=e+8|0;g=q[b+4>>2]}if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break n}d=q[b>>2]+d|0;q[a+56>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;break o;case 1:e=d+4|0;g=q[b+4>>2];t:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break t}d=q[b>>2]+d|0;q[a+52>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;e=e+8|0;g=q[b+4>>2]}u:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break u}d=q[b>>2]+d|0;q[a+56>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=q[b+8>>2];d=e+4|0;q[b+8>>2]=d;e=e+8|0;g=q[b+4>>2]}if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break n}d=q[b>>2]+d|0;q[a+60>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;break o;case 2:break p}}e=d+8|0;g=q[b+4>>2];v:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break v}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+52>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+56>>2]=e;e=q[b+8>>2];d=e+8|0;q[b+8>>2]=d;e=e+16|0;g=q[b+4>>2]}w:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break w}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+60>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+64>>2]=e;e=q[b+8>>2];d=e+8|0;q[b+8>>2]=d;e=e+16|0;g=q[b+4>>2]}x:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break x}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+68>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+72>>2]=e;e=q[b+8>>2];d=e+8|0;q[b+8>>2]=d;e=e+16|0;g=q[b+4>>2]}if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break n}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+76>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+80>>2]=e;d=q[b+8>>2]+8|0}q[f+8>>2]=d}e=q[b+4>>2];y:{if(!(q[b+12>>2]!=2?d+4>>>0<=e>>>0:0)){q[b+12>>2]=2;break y}d=q[b>>2]+d|0;q[a+8>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b+8>>2]+4|0;q[b+8>>2]=d;e=q[b+4>>2]}g=d+8|0;z:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break z}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+84>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+88>>2]=f;f=q[b+8>>2];d=f+8|0;q[b+8>>2]=d;g=f+16|0;e=q[b+4>>2]}A:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break A}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+92>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+96>>2]=f;f=q[b+8>>2];d=f+8|0;q[b+8>>2]=d;g=f+16|0;e=q[b+4>>2]}B:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break B}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+100>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+104>>2]=f;d=q[b+8>>2]+8|0;q[b+8>>2]=d;e=q[b+4>>2]}g=d+12|0;C:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break C}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+108|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;f=q[b+8>>2];d=f+12|0;q[b+8>>2]=d;g=f+24|0;e=q[b+4>>2]}D:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break D}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+120|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;f=q[b+8>>2];d=f+12|0;q[b+8>>2]=d;g=f+24|0;e=q[b+4>>2]}E:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break E}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+132|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;f=q[b+8>>2];d=f+12|0;q[b+8>>2]=d;g=f+24|0;e=q[b+4>>2]}F:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break F}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+144|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;f=q[b+8>>2];d=f+12|0;q[b+8>>2]=d;g=f+24|0;e=q[b+4>>2]}G:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break G}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+156|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;f=q[b+8>>2];d=f+12|0;q[b+8>>2]=d;g=f+24|0;e=q[b+4>>2]}H:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break H}d=q[b>>2]+d|0;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=a+168|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=g;o[f+1|0]=g>>>8;o[f+2|0]=g>>>16;o[f+3|0]=g>>>24;o[f+4|0]=e;o[f+5|0]=e>>>8;o[f+6|0]=e>>>16;o[f+7|0]=e>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;d=q[b+8>>2]+12|0;q[b+8>>2]=d;e=q[b+4>>2]}g=d+4|0;I:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break I}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+196|0]=d;o[a+197|0]=d>>>8;o[a+198|0]=d>>>16;o[a+199|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}J:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break J}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+200|0]=d;o[a+201|0]=d>>>8;o[a+202|0]=d>>>16;o[a+203|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}K:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break K}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+204|0]=d;o[a+205|0]=d>>>8;o[a+206|0]=d>>>16;o[a+207|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}L:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break L}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+208|0]=d;o[a+209|0]=d>>>8;o[a+210|0]=d>>>16;o[a+211|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}M:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break M}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+212|0]=d;o[a+213|0]=d>>>8;o[a+214|0]=d>>>16;o[a+215|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}N:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break N}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+216|0]=d;o[a+217|0]=d>>>8;o[a+218|0]=d>>>16;o[a+219|0]=d>>>24;d=q[b+8>>2]+4|0;q[b+8>>2]=d}O:{P:{Q:{if((c|0)>=1608){g=d+4|0;e=q[b+4>>2];R:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break R}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+220|0]=d;o[a+221|0]=d>>>8;o[a+222|0]=d>>>16;o[a+223|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}S:{if(!(q[b+12>>2]!=2?g>>>0<=e>>>0:0)){q[b+12>>2]=2;break S}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+224|0]=d;o[a+225|0]=d>>>8;o[a+226|0]=d>>>16;o[a+227|0]=d>>>24;f=q[b+8>>2];d=f+4|0;q[b+8>>2]=d;g=f+8|0;e=q[b+4>>2]}if(q[b+12>>2]!=2?g>>>0<=e>>>0:0){break Q}q[b+12>>2]=2;break P}q[a+220>>2]=q[a+196>>2];d=q[a+204>>2];q[a+224>>2]=q[a+200>>2];q[a+228>>2]=d;d=q[b+8>>2];break O}d=q[b>>2]+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+228|0]=d;o[a+229|0]=d>>>8;o[a+230|0]=d>>>16;o[a+231|0]=d>>>24;d=q[b+8>>2]+4|0;q[b+8>>2]=d;e=q[b+4>>2]}if(!(q[b+12>>2]!=2?d+8>>>0<=e>>>0:0)){q[b+12>>2]=2;break O}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+180>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+184>>2]=f;d=q[b+8>>2]+8|0;q[b+8>>2]=d}T:{if(!(q[b+12>>2]!=2?d+8>>>0<=t[b+4>>2]:0)){q[b+12>>2]=2;break T}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+188>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+192>>2]=f;d=q[b+8>>2]+8|0;q[b+8>>2]=d}f=a+232|0;U:{V:{if((c|0)>=1608){c=d+12|0;g=q[b+4>>2];W:{if(!(q[b+12>>2]!=2?c>>>0<=g>>>0:0)){q[b+12>>2]=2;break W}c=q[b>>2]+d|0;d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[f|0]=e;o[f+1|0]=e>>>8;o[f+2|0]=e>>>16;o[f+3|0]=e>>>24;o[f+4|0]=d;o[f+5|0]=d>>>8;o[f+6|0]=d>>>16;o[f+7|0]=d>>>24;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[f+8|0]=c;o[f+9|0]=c>>>8;o[f+10|0]=c>>>16;o[f+11|0]=c>>>24;c=q[b+8>>2];d=c+12|0;q[b+8>>2]=d;c=c+24|0;g=q[b+4>>2]}X:{if(!(q[b+12>>2]!=2?c>>>0<=g>>>0:0)){q[b+12>>2]=2;break X}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);c=a+244|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=f;o[c+5|0]=f>>>8;o[c+6|0]=f>>>16;o[c+7|0]=f>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[c+8|0]=d;o[c+9|0]=d>>>8;o[c+10|0]=d>>>16;o[c+11|0]=d>>>24;c=q[b+8>>2];d=c+12|0;q[b+8>>2]=d;c=c+24|0;g=q[b+4>>2]}if(q[b+12>>2]!=2?c>>>0<=g>>>0:0){break V}q[b+12>>2]=2;break U}q[f>>2]=0;q[f+4>>2]=0;q[f+32>>2]=0;q[f+24>>2]=0;q[f+28>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;q[f+8>>2]=0;q[f+12>>2]=0;return}d=q[b>>2]+d|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);c=a+256|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=f;o[c+5|0]=f>>>8;o[c+6|0]=f>>>16;o[c+7|0]=f>>>24;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[c+8|0]=d;o[c+9|0]=d>>>8;o[c+10|0]=d>>>16;o[c+11|0]=d>>>24;d=q[b+8>>2]+12|0;q[b+8>>2]=d;g=q[b+4>>2]}e=d+8|0;Y:{if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;break Y}c=q[b>>2]+d|0;d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[a+268>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+272>>2]=d;c=q[b+8>>2];d=c+8|0;q[b+8>>2]=d;e=c+16|0;g=q[b+4>>2]}if(!(q[b+12>>2]!=2?e>>>0<=g>>>0:0)){q[b+12>>2]=2;return}c=q[b>>2]+d|0;d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[a+276>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+280>>2]=d;q[b+8>>2]=q[b+8>>2]+8}function vx(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,p=0,s=0,v=0,y=0,z=0,A=0,B=0,C=x(0),D=x(0),F=x(0),G=x(0),H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=x(0);i=ue-768|0;ue=i;z=!g&r[h+913|0]!=0;a:{if((z|0)==1){j=q[a+4>>2];j=n[q[q[j>>2]+136>>2]](j)|0;if(j){if(!n[q[q[j>>2]+8>>2]](j,q[a+4>>2])){break a}}j=q[a+4>>2];if(!q[n[q[q[j>>2]+196>>2]](j)>>2]){break a}}q[i+736>>2]=0;k=q[h+816>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+816>>2]}q[i+740>>2]=0;q[i+736>>2]=k;k=q[h+820>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+820>>2]}q[i+744>>2]=0;q[i+740>>2]=k;k=q[h+824>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+824>>2]}q[i+748>>2]=0;q[i+744>>2]=k;k=q[h+828>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+828>>2]}q[i+752>>2]=0;q[i+748>>2]=k;k=q[h+832>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+832>>2]}q[i+756>>2]=0;q[i+752>>2]=k;k=q[h+836>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+836>>2]}q[i+760>>2]=0;q[i+756>>2]=k;k=q[h+840>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[h+840>>2]}q[i+764>>2]=0;q[i+760>>2]=k;j=i;y=q[h+844>>2];if(y){n[q[q[y>>2]>>2]](y)|0;y=q[h+844>>2]}q[j+764>>2]=y;if(z){j=q[a+4>>2];y=n[q[q[j>>2]+196>>2]](j)|0;z=(i+736|0)+(q[h+916>>2]<<2)|0;j=q[y>>2];if(j){n[q[q[j>>2]>>2]](j)|0}j=q[z>>2];if(j){n[q[q[j>>2]+8>>2]](j)|0;q[z>>2]=0}q[z>>2]=q[y>>2]}q[i+728>>2]=0;q[i+716>>2]=0;q[i+720>>2]=0;q[i+724>>2]=0;q[i+708>>2]=0;q[i+712>>2]=0;q[i+704>>2]=1065353216;Jv(q[q[a+4>>2]+4>>2],i+728|0,i+704|0);l=a+4|0;if(r[h+912|0]){b:{c:{d:{k=q[i+728>>2];if(k){if(u[h+88>>2]!=x(0)|u[h+92>>2]!=x(0)|(q[h+800>>2]==6|u[h+96>>2]!=x(0))){break d}}Hv(i,q[q[l>>2]+4>>2],0);k=q[i>>2];q[i>>2]=0;a=q[i+728>>2];e:{if(!a){q[i+728>>2]=k;break e}n[q[q[a>>2]+8>>2]](a)|0;q[i+728>>2]=k;a=q[i>>2];if(!a){break e}n[q[q[a>>2]+8>>2]](a)|0;q[i>>2]=0;k=q[i+728>>2]}v=(i+736|0)+(q[h+920>>2]<<2)|0;if(!k){break b}break c}v=(i+736|0)+(q[h+920>>2]<<2)|0}n[q[q[k>>2]>>2]](k)|0}a=q[v>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[v>>2]=0}q[v>>2]=q[i+728>>2]}X=r[h+2|0];a=q[h+800>>2];f:{g:{if((a|0)==6){a=q[h+808>>2];if(!(g|!r[a+25|0])){a=q[l>>2];if(!q[n[q[q[a>>2]+196>>2]](a)>>2]){break f}P=q[q[h+808>>2]+76>>2];j=1;break g}P=q[a+68>>2];j=0;break g}P=Ry(q[l>>2],a);j=0}if(!P){break f}z=Eu(q[q[l>>2]+80>>2]);a=r[h|0]|r[z|0]&-2;o[z|0]=a;o[z|0]=a&253|r[h+1|0]<<1;q[z+8>>2]=q[h+16>>2];q[z+4>>2]=j?1:q[h+12>>2];Sy(q[l>>2],P);k=0;y=q[h+812>>2];if((y|0)>0){while(1){a=k<<2;j=a+z|0;a=a+h|0;q[j+12>>2]=q[a+848>>2];q[j+44>>2]=q[a+880>>2];k=k+1|0;if((y|0)!=(k|0)){continue}break}}Wy(q[l>>2],P,i+736|0,y);a=q[l>>2];y=n[q[q[a>>2]+168>>2]](a)|0;a=q[l>>2];j=n[q[q[a>>2]+176>>2]](a)|0;a=(y|0)==1;T=a?-1082130432:1065353216;q[i+692>>2]=T;v=0;U=a?1065353216:0;q[i+688>>2]=U;a=(j|0)==1;V=a?-1082130432:1065353216;q[i+700>>2]=V;W=a?1065353216:0;q[i+696>>2]=W;h:{if(q[h+800>>2]==6){m=q[b+20>>2];A=q[b+36>>2];B=q[b+52>>2];H=q[b+24>>2];I=q[b+40>>2];J=q[b+56>>2];K=q[b+28>>2];L=q[b+44>>2];M=q[b+60>>2];N=q[b>>2];O=q[b+16>>2];k=q[b+32>>2];z=q[b+48>>2];y=q[b+4>>2];j=q[b+8>>2];a=q[b+12>>2];b=oo(i);q[b+48>>2]=a;q[b+32>>2]=j;q[b+16>>2]=y;q[b+12>>2]=z;q[b+8>>2]=k;q[b+4>>2]=O;q[b>>2]=N;q[b+60>>2]=M;q[b+56>>2]=L;q[b+52>>2]=K;q[b+44>>2]=J;q[b+40>>2]=I;q[b+36>>2]=H;q[b+28>>2]=B;q[b+24>>2]=A;q[b+20>>2]=m;A=q[c+20>>2];B=q[c+36>>2];H=q[c+52>>2];I=q[c+24>>2];J=q[c+40>>2];K=q[c+56>>2];L=q[c+28>>2];M=q[c+44>>2];N=q[c+60>>2];O=q[c>>2];k=q[c+16>>2];z=q[c+32>>2];y=q[c+48>>2];j=q[c+4>>2];b=q[c+8>>2];a=q[c+12>>2];c=oo(i+288|0);q[c+48>>2]=a;q[c+32>>2]=b;q[c+16>>2]=j;q[c+12>>2]=y;q[c+8>>2]=z;q[c+4>>2]=k;q[c>>2]=O;q[c+60>>2]=N;q[c+56>>2]=M;q[c+52>>2]=L;q[c+44>>2]=K;q[c+40>>2]=J;q[c+36>>2]=I;q[c+28>>2]=H;q[c+24>>2]=B;q[c+20>>2]=A;a=q[l>>2];n[q[q[a>>2]+92>>2]](i+464|0,a);nt(i+656|0,i+464|0);q[i+684>>2]=1065353216;a=q[i+660>>2];q[i+672>>2]=q[i+656>>2];q[i+676>>2]=a;q[i+680>>2]=q[i+664>>2];q[i+648>>2]=1056964608;q[i+652>>2]=1056964608;q[i+640>>2]=1056964608;q[i+644>>2]=1056964608;a=q[l>>2];Y=i,Z=x(n[q[q[a>>2]+184>>2]](a)),u[Y+640>>2]=Z;q[i+644>>2]=q[h+100>>2];u[i+648>>2]=r[q[q[l>>2]+4>>2]+340|0]?x(1):x(0);q[i+652>>2]=q[h+104>>2];Uy(q[l>>2],i,64,0);Uy(q[l>>2],i+288|0,64,64);Uy(q[l>>2],i+688|0,16,128);Uy(q[l>>2],i+640|0,16,144);Uy(q[l>>2],i+672|0,16,160);k=176;if(q[h+112>>2]){while(1){Uy(q[l>>2],((v<<4)+h|0)+116|0,16,k);k=k+16|0;v=v+1|0;if(v>>>0>2]){continue}break}}a=q[l>>2];if(q[h+372>>2]){v=0;while(1){Uy(a,(w(v,208)+h|0)+376|0,208,k);k=k+208|0;a=q[l>>2];v=v+1|0;if(v>>>0>2]){continue}break}}v=0;Vy(a,i+688|0,16,0);Vy(q[l>>2],i+640|0,16,16);Vy(q[l>>2],i+672|0,16,32);q[i+600>>2]=0;q[i+604>>2]=0;a=q[i+724>>2];q[i+632>>2]=q[i+720>>2];q[i+636>>2]=a;q[i+592>>2]=0;q[i+596>>2]=0;a=q[i+716>>2];q[i+624>>2]=q[i+712>>2];q[i+628>>2]=a;a=q[i+708>>2];q[i+608>>2]=q[i+704>>2];q[i+612>>2]=a;Vy(q[l>>2],i+608|0,16,48);Vy(q[l>>2],i+624|0,16,64);a=q[l>>2];n[q[q[a>>2]+40>>2]](i+464|0,a);a=nt(i+528|0,i+464|0);C=u[a>>2];F=u[a+4>>2];G=u[a+8>>2];D=x(x(1)/x(E(x(x(x(C*C)+x(F*F))+x(G*G)))));u[a+12>>2]=u[a+12>>2]*D;u[a+8>>2]=G*D;u[a+4>>2]=F*D;u[a>>2]=C*D;q[i+588>>2]=1065353216;a=q[i+532>>2];q[i+576>>2]=q[i+528>>2];q[i+580>>2]=a;q[i+584>>2]=q[i+536>>2];a=q[l>>2];a=n[q[q[a>>2]+48>>2]](a)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[i+572>>2]=x(a>>>24>>>0)/x(255);u[i+560>>2]=x((a&255)>>>0)/x(255);u[i+568>>2]=x((a>>>16&255)>>>0)/x(255);u[i+564>>2]=x((a>>>8&255)>>>0)/x(255);a=q[l>>2];a=n[q[q[a>>2]+56>>2]](a)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[i+556>>2]=x(a>>>24>>>0)/x(255);u[i+544>>2]=x((a&255)>>>0)/x(255);u[i+552>>2]=x((a>>>16&255)>>>0)/x(255);u[i+548>>2]=x((a>>>8&255)>>>0)/x(255);Vy(q[l>>2],i+576|0,16,80);Vy(q[l>>2],i+560|0,16,96);Vy(q[l>>2],i+544|0,16,112);k=128;if(!(!q[q[h+808>>2]+76>>2]|g)){a=q[l>>2];n[q[q[a>>2]+76>>2]](i+464|0,a);Vy(q[l>>2],i+464|0,64,128);k=192}if(q[h+112>>2]){while(1){Vy(q[l>>2],((v<<4)+h|0)+116|0,16,k);k=k+16|0;v=v+1|0;if(v>>>0>2]){continue}break}}if(!q[h+372>>2]){break h}v=0;while(1){Vy(q[l>>2],(w(v,208)+h|0)+376|0,208,k);k=k+208|0;v=v+1|0;if(v>>>0>2]){continue}break}break h}if(q[h+108>>2]==7){oo(i+288|0);p=oo(i+352|0);A=q[b+20>>2];B=q[b+36>>2];H=q[b+52>>2];I=q[b+24>>2];J=q[b+40>>2];K=q[b+56>>2];L=q[b+28>>2];M=q[b+44>>2];N=q[b+60>>2];O=q[b>>2];k=q[b+16>>2];z=q[b+32>>2];y=q[b+48>>2];j=q[b+4>>2];g=q[b+8>>2];a=q[b+12>>2];m=oo(i);q[m+48>>2]=a;q[m+32>>2]=g;q[m+16>>2]=j;q[m+12>>2]=y;q[m+8>>2]=z;q[m+4>>2]=k;q[m>>2]=O;q[m+60>>2]=N;q[m+56>>2]=M;q[m+52>>2]=L;q[m+44>>2]=K;q[m+40>>2]=J;q[m+36>>2]=I;q[m+28>>2]=H;q[m+24>>2]=B;q[m+20>>2]=A;S=i+56|0;g=S;a=q[g+4>>2];q[i+344>>2]=q[g>>2];q[i+348>>2]=a;v=i+48|0;g=v;a=q[g+4>>2];q[i+336>>2]=q[g>>2];q[i+340>>2]=a;Q=i+40|0;g=Q;a=q[g+4>>2];q[i+328>>2]=q[g>>2];q[i+332>>2]=a;m=i+32|0;g=m;a=q[g+4>>2];q[i+320>>2]=q[g>>2];q[i+324>>2]=a;R=i+24|0;g=R;a=q[g+4>>2];q[i+312>>2]=q[g>>2];q[i+316>>2]=a;A=i+16|0;g=A;a=q[g+4>>2];q[i+304>>2]=q[g>>2];q[i+308>>2]=a;B=i+8|0;g=B;a=q[g+4>>2];q[i+296>>2]=q[g>>2];q[i+300>>2]=a;a=q[i+4>>2];q[i+288>>2]=q[i>>2];q[i+292>>2]=a;qn(i+464|0,b,c);H=q[i+484>>2];I=q[i+500>>2];J=q[i+516>>2];K=q[i+488>>2];L=q[i+504>>2];M=q[i+520>>2];N=q[i+492>>2];O=q[i+508>>2];k=q[i+524>>2];z=q[i+464>>2];y=q[i+480>>2];j=q[i+496>>2];g=q[i+512>>2];c=q[i+468>>2];b=q[i+472>>2];a=q[i+476>>2];s=oo(i);q[s+48>>2]=a;q[s+32>>2]=b;q[s+16>>2]=c;q[s+12>>2]=g;q[s+8>>2]=j;q[s+4>>2]=y;q[s>>2]=z;q[s+60>>2]=k;q[s+56>>2]=O;q[s+52>>2]=N;q[s+44>>2]=M;q[s+40>>2]=L;q[s+36>>2]=K;q[s+28>>2]=J;q[s+24>>2]=I;q[s+20>>2]=H;a=q[S+4>>2];q[p+56>>2]=q[S>>2];q[p+60>>2]=a;a=q[v+4>>2];q[p+48>>2]=q[v>>2];q[p+52>>2]=a;a=q[Q+4>>2];q[p+40>>2]=q[Q>>2];q[p+44>>2]=a;a=q[m+4>>2];q[p+32>>2]=q[m>>2];q[p+36>>2]=a;a=q[R+4>>2];q[p+24>>2]=q[R>>2];q[p+28>>2]=a;a=q[A+4>>2];q[p+16>>2]=q[A>>2];q[p+20>>2]=a;a=q[B+4>>2];q[p+8>>2]=q[B>>2];q[p+12>>2]=a;a=q[i+4>>2];q[p>>2]=q[i>>2];q[p+4>>2]=a;q[i+420>>2]=T;q[i+416>>2]=U;z=q[h+36>>2];y=q[h+32>>2];j=q[h+24>>2];g=q[h+40>>2];c=q[h+44>>2];b=q[h+20>>2];a=q[h+52>>2];q[i+456>>2]=q[h+48>>2];q[i+460>>2]=a;q[i+448>>2]=g;q[i+452>>2]=c;u[i+436>>2]=j|0;u[i+440>>2]=y|0;u[i+444>>2]=z|0;u[i+432>>2]=b|0;Uy(q[l>>2],i+288|0,176,0);j=lV(i,0,288);a=r[q[q[l>>2]+4>>2]+340|0];q[j+112>>2]=0;u[j+272>>2]=a?x(1):x(0);a=q[l>>2];n[q[q[a>>2]+40>>2]](j+464|0,a);Jp(j+464|0,j+464|0);q[j+12>>2]=1065353216;q[j+8>>2]=q[j+472>>2];a=q[j+468>>2];q[j>>2]=q[j+464>>2];q[j+4>>2]=a;a=q[l>>2];g=n[q[q[a>>2]+48>>2]](a)|0;c=r[g|0];b=r[g+1|0];a=r[g+2|0];u[j+28>>2]=x(r[g+3|0])/x(255);u[R>>2]=x(a>>>0)/x(255);u[j+20>>2]=x(b>>>0)/x(255);u[j+16>>2]=x(c>>>0)/x(255);a=q[l>>2];g=n[q[q[a>>2]+56>>2]](a)|0;c=r[g|0];b=r[g+1|0];a=r[g+2|0];u[j+44>>2]=x(r[g+3|0])/x(255);u[Q>>2]=x(a>>>0)/x(255);u[j+36>>2]=x(b>>>0)/x(255);u[j+32>>2]=x(c>>>0)/x(255);u[j+48>>2]=q[h+20>>2];u[j+52>>2]=q[h+28>>2];q[j+64>>2]=q[h+56>>2];a=q[h+64>>2];q[j+76>>2]=T;q[j+72>>2]=U;q[j+68>>2]=a;u[j+80>>2]=q[h+60>>2];q[j+160>>2]=q[h+68>>2];c=Ne(j+592|0,r[h+76|0],r[h+77|0],r[h+78|0],r[h+79|0]);b=r[c+1|0];a=r[c+2|0];u[j+188>>2]=x(r[c+3|0])/x(255);u[j+184>>2]=x(a>>>0)/x(255);u[j+180>>2]=x(b>>>0)/x(255);u[j+176>>2]=x(r[j+592|0])/x(255);q[j+192>>2]=q[h+72>>2];q[j+196>>2]=q[h+80>>2];D=u[h+88>>2];F=u[h+92>>2];C=u[h+100>>2];G=u[h+96>>2];q[j+260>>2]=V;a=q[j+724>>2];q[j+248>>2]=q[j+720>>2];q[j+252>>2]=a;a=q[j+716>>2];q[j+240>>2]=q[j+712>>2];q[j+244>>2]=a;a=q[j+708>>2];q[j+224>>2]=q[j+704>>2];q[j+228>>2]=a;u[j+216>>2]=G*C;u[j+212>>2]=F*C;u[j+220>>2]=D!=x(0)?x(1):F!=x(0)?x(1):G!=x(0)?x(1):x(0);q[j+256>>2]=W;u[j+208>>2]=D*C;Vy(q[l>>2],j,288,0);break h}oo(i+288|0);p=oo(i+352|0);A=q[b+20>>2];B=q[b+36>>2];H=q[b+52>>2];I=q[b+24>>2];J=q[b+40>>2];K=q[b+56>>2];L=q[b+28>>2];M=q[b+44>>2];N=q[b+60>>2];O=q[b>>2];k=q[b+16>>2];z=q[b+32>>2];y=q[b+48>>2];j=q[b+4>>2];g=q[b+8>>2];a=q[b+12>>2];m=oo(i);q[m+48>>2]=a;q[m+32>>2]=g;q[m+16>>2]=j;q[m+12>>2]=y;q[m+8>>2]=z;q[m+4>>2]=k;q[m>>2]=O;q[m+60>>2]=N;q[m+56>>2]=M;q[m+52>>2]=L;q[m+44>>2]=K;q[m+40>>2]=J;q[m+36>>2]=I;q[m+28>>2]=H;q[m+24>>2]=B;q[m+20>>2]=A;Q=i+56|0;g=Q;a=q[g+4>>2];q[i+344>>2]=q[g>>2];q[i+348>>2]=a;R=i+48|0;g=R;a=q[g+4>>2];q[i+336>>2]=q[g>>2];q[i+340>>2]=a;S=i+40|0;g=S;a=q[g+4>>2];q[i+328>>2]=q[g>>2];q[i+332>>2]=a;v=i+32|0;g=v;a=q[g+4>>2];q[i+320>>2]=q[g>>2];q[i+324>>2]=a;m=i+24|0;g=m;a=q[g+4>>2];q[i+312>>2]=q[g>>2];q[i+316>>2]=a;A=i+16|0;g=A;a=q[g+4>>2];q[i+304>>2]=q[g>>2];q[i+308>>2]=a;B=i+8|0;g=B;a=q[g+4>>2];q[i+296>>2]=q[g>>2];q[i+300>>2]=a;a=q[i+4>>2];q[i+288>>2]=q[i>>2];q[i+292>>2]=a;qn(i+464|0,b,c);H=q[i+484>>2];I=q[i+500>>2];J=q[i+516>>2];K=q[i+488>>2];L=q[i+504>>2];M=q[i+520>>2];N=q[i+492>>2];O=q[i+508>>2];k=q[i+524>>2];z=q[i+464>>2];y=q[i+480>>2];j=q[i+496>>2];g=q[i+512>>2];c=q[i+468>>2];b=q[i+472>>2];a=q[i+476>>2];s=oo(i);q[s+48>>2]=a;q[s+32>>2]=b;q[s+16>>2]=c;q[s+12>>2]=g;q[s+8>>2]=j;q[s+4>>2]=y;q[s>>2]=z;q[s+60>>2]=k;q[s+56>>2]=O;q[s+52>>2]=N;q[s+44>>2]=M;q[s+40>>2]=L;q[s+36>>2]=K;q[s+28>>2]=J;q[s+24>>2]=I;q[s+20>>2]=H;a=q[Q+4>>2];q[p+56>>2]=q[Q>>2];q[p+60>>2]=a;a=q[R+4>>2];q[p+48>>2]=q[R>>2];q[p+52>>2]=a;a=q[S+4>>2];q[p+40>>2]=q[S>>2];q[p+44>>2]=a;a=q[v+4>>2];q[p+32>>2]=q[v>>2];q[p+36>>2]=a;a=q[m+4>>2];q[p+24>>2]=q[m>>2];q[p+28>>2]=a;a=q[A+4>>2];q[p+16>>2]=q[A>>2];q[p+20>>2]=a;a=q[B+4>>2];q[p+8>>2]=q[B>>2];q[p+12>>2]=a;a=q[i+4>>2];q[p>>2]=q[i>>2];q[p+4>>2]=a;q[i+424>>2]=0;q[i+428>>2]=0;q[i+420>>2]=T;q[i+416>>2]=U;z=q[h+36>>2];y=q[h+32>>2];j=q[h+24>>2];g=q[h+40>>2];c=q[h+44>>2];b=q[h+20>>2];a=q[h+52>>2];q[i+456>>2]=q[h+48>>2];q[i+460>>2]=a;q[i+448>>2]=g;q[i+452>>2]=c;u[i+436>>2]=j|0;u[i+440>>2]=y|0;u[i+444>>2]=z|0;u[i+432>>2]=b|0;Uy(q[l>>2],i+288|0,176,0);if(X){a=q[h+4>>2];q[i+20>>2]=V;q[i+16>>2]=W;q[i>>2]=a;u[i+32>>2]=q[h+20>>2];u[i+36>>2]=q[h+28>>2];q[i+48>>2]=q[h+56>>2];a=q[h+64>>2];q[i+60>>2]=T;q[Q>>2]=U;q[i+52>>2]=a;u[i+64>>2]=q[h+60>>2];D=u[h+88>>2];F=u[h+92>>2];C=u[h+100>>2];G=u[h+96>>2];a=q[i+724>>2];q[i+120>>2]=q[i+720>>2];q[i+124>>2]=a;a=q[i+716>>2];q[i+112>>2]=q[i+712>>2];q[i+116>>2]=a;a=q[i+708>>2];q[i+96>>2]=q[i+704>>2];q[i+100>>2]=a;u[i+88>>2]=G*C;u[i+84>>2]=F*C;u[i+92>>2]=D!=x(0)?x(1):F!=x(0)?x(1):G!=x(0)?x(1):x(0);u[i+80>>2]=D*C;Vy(q[l>>2],i,128,0);break h}q[i+280>>2]=0;q[i+284>>2]=0;q[i+272>>2]=0;q[i+276>>2]=0;a=r[q[q[l>>2]+4>>2]+340|0];q[i+112>>2]=0;u[i+272>>2]=a?x(1):x(0);u[i+48>>2]=q[h+20>>2];u[i+52>>2]=q[h+28>>2];q[i+64>>2]=q[h+56>>2];a=q[h+64>>2];q[i+76>>2]=T;q[i+72>>2]=U;q[i+68>>2]=a;u[i+80>>2]=q[h+60>>2];q[i+160>>2]=q[h+68>>2];c=Ne(i+464|0,r[h+76|0],r[h+77|0],r[h+78|0],r[h+79|0]);b=r[c+1|0];a=r[c+2|0];u[i+188>>2]=x(r[c+3|0])/x(255);u[i+184>>2]=x(a>>>0)/x(255);u[i+180>>2]=x(b>>>0)/x(255);u[i+176>>2]=x(r[i+464|0])/x(255);q[i+192>>2]=q[h+72>>2];q[i+196>>2]=q[h+80>>2];D=u[h+88>>2];F=u[h+92>>2];C=u[h+100>>2];G=u[h+96>>2];q[i+260>>2]=V;a=q[i+724>>2];q[i+248>>2]=q[i+720>>2];q[i+252>>2]=a;a=q[i+716>>2];q[i+240>>2]=q[i+712>>2];q[i+244>>2]=a;a=q[i+708>>2];q[i+224>>2]=q[i+704>>2];q[i+228>>2]=a;u[i+216>>2]=G*C;u[i+212>>2]=F*C;u[i+220>>2]=D!=x(0)?x(1):F!=x(0)?x(1):G!=x(0)?x(1):x(0);q[i+256>>2]=W;u[i+208>>2]=D*C;Vy(q[l>>2],i,288,0)}n[q[q[P>>2]+36>>2]](P);a=q[q[l>>2]+80>>2];n[q[q[a>>2]+8>>2]](a,(X|0)!=0);a=q[l>>2];b=sy(a);a=q[a+196>>2];if(!(q[a+16>>2]?a:0)){Yv(34962,q[b+40>>2])}a=q[l>>2];Ky(a,q[a+((n[q[q[a>>2]+160>>2]](a)|0)==1?36:32)>>2]);Ny(q[l>>2],P);b=q[q[l>>2]+4>>2];a=q[h+924>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b+316>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+316>>2]=0}q[b+316>>2]=q[h+924>>2];q[q[q[l>>2]+4>>2]+320>>2]=q[h+928>>2];Oy(q[l>>2],((e|0)/(f|0)|0)/4|0,(d|0)/(f|0)|0);Ty(q[l>>2],P);Gu(q[q[l>>2]+80>>2])}a=q[i+728>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+728>>2]=0}a=q[i+764>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+764>>2]=0}a=q[i+760>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+760>>2]=0}a=q[i+756>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+756>>2]=0}a=q[i+752>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+752>>2]=0}a=q[i+748>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+748>>2]=0}a=q[i+744>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+744>>2]=0}a=q[i+740>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[i+740>>2]=0}a=q[i+736>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[i+736>>2]=0}ue=i+768|0}function zf(a,b,c,d){var e=0,g=0,h=0,i=0,k=0,l=0,m=0,o=0,p=0,s=0,v=x(0),y=x(0),z=0,A=0;i=ue+ -64|0;ue=i;q[i+60>>2]=1024;q[i+44>>2]=c;q[i+40>>2]=b;q[i+48>>2]=0;q[i+52>>2]=0;a:{if(c>>>0<=3){q[i+52>>2]=2;break a}g=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[i+48>>2]=4;if((g|0)!=1162234707){break a}b:{if(c>>>0<=7){q[i+52>>2]=2;l=q[a+24>>2];e=4;g=2;break b}l=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);q[a+24>>2]=l;e=8;q[i+48>>2]=8;g=0}if((l|0)>1710){break a}h=e+4|0;c:{if(!((g|0)!=2?h>>>0<=c>>>0:0)){g=2;q[i+52>>2]=2;h=e;break c}c=b+e|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;d:{if(c>>>0>=1025){q[i+52>>2]=2;break d}if(!c){break c}}m=a+28|0;g=q[a+32>>2];k=q[a+28>>2];e=g-k>>2;e:{if(c>>>0>e>>>0){Af(m,c-e|0);break e}if(c>>>0>=e>>>0){break e}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+32>>2]=e}g=q[a+44>>2];k=q[a+40>>2];e=g-k>>2;f:{if(c>>>0>e>>>0){Bf(a+40|0,c-e|0);break f}if(c>>>0>=e>>>0){break f}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+44>>2]=e}s=c>>>0>1?c:1;g=q[i+52>>2];k=q[i+44>>2];c=0;while(1){e=h+4|0;g:{h:{if(e>>>0>k>>>0){g=0;break h}if((g|0)==2){g=0;break h}h=q[i+40>>2]+h|0;g=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){h=e;break h}h=e;if((g|0)<=q[i+60>>2]){break g}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=c<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}i:{j:{k:{if((g|0)<0){break k}l=g<<1;e=l+h|0;if(e>>>0>k>>>0){break k}g=q[i+52>>2];if((g|0)!=2){break j}}g=2;q[i+52>>2]=2;break i}kV(q[o+q[m>>2]>>2],q[i+40>>2]+h|0,l);q[i+48>>2]=e;h=e}c=c+1|0;if((s|0)!=(c|0)){continue}break}}c=q[a+24>>2];if((c|0)>=9){l:{m:{c=h+4|0;n:{if(!((g|0)==2|c>>>0>t[i+44>>2])){h=q[i+40>>2]+h|0;h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=c;if(!((h|0)<=q[i+60>>2]?(h|0)>=0:0)){q[i+52>>2]=2;g=2}if(h){m=a+52|0;g=q[a+56>>2];k=q[a+52>>2];e=g-k>>2;o:{if(h>>>0>e>>>0){Af(m,h-e|0);break o}if(h>>>0>=e>>>0){break o}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+56>>2]=e}g=q[a+68>>2];k=q[a+64>>2];e=g-k>>2;p:{if(h>>>0>e>>>0){Bf(a- -64|0,h-e|0);break p}if(h>>>0>=e>>>0){break p}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+68>>2]=e}s=h>>>0>1?h:1;g=q[i+52>>2];k=q[i+44>>2];h=0;while(1){e=c+4|0;q:{r:{if(e>>>0>k>>>0){g=0;break r}if((g|0)==2){g=0;break r}c=q[i+40>>2]+c|0;g=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){c=e;break r}c=e;if((g|0)<=q[i+60>>2]){break q}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=h<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}s:{t:{u:{if((g|0)<0){break u}l=g<<1;e=l+c|0;if(e>>>0>k>>>0){break u}g=q[i+52>>2];if((g|0)!=2){break t}}g=2;q[i+52>>2]=2;break s}kV(q[o+q[m>>2]>>2],q[i+40>>2]+c|0,l);q[i+48>>2]=e;c=e}h=h+1|0;if((s|0)!=(h|0)){continue}break}}h=c+4|0;if(h>>>0>t[i+44>>2]){h=c;break n}if((g|0)!=2){break m}h=c;break n}q[i+52>>2]=2}g=2;q[i+52>>2]=2;break l}c=q[i+40>>2]+c|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;if(!((c|0)<=q[i+60>>2]?(c|0)>=0:0)){q[i+52>>2]=2;g=2}if(!c){break l}m=a+76|0;g=q[a+80>>2];k=q[a+76>>2];e=g-k>>2;v:{if(c>>>0>e>>>0){Af(m,c-e|0);break v}if(c>>>0>=e>>>0){break v}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+80>>2]=e}g=q[a+92>>2];k=q[a+88>>2];e=g-k>>2;w:{if(c>>>0>e>>>0){Bf(a+88|0,c-e|0);break w}if(c>>>0>=e>>>0){break w}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+92>>2]=e}s=c>>>0>1?c:1;g=q[i+52>>2];k=q[i+44>>2];c=0;while(1){e=h+4|0;x:{y:{if(e>>>0>k>>>0){g=0;break y}if((g|0)==2){g=0;break y}h=q[i+40>>2]+h|0;g=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){h=e;break y}h=e;if((g|0)<=q[i+60>>2]){break x}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=c<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}z:{A:{B:{if((g|0)<0){break B}l=g<<1;e=l+h|0;if(e>>>0>k>>>0){break B}g=q[i+52>>2];if((g|0)!=2){break A}}g=2;q[i+52>>2]=2;break z}kV(q[o+q[m>>2]>>2],q[i+40>>2]+h|0,l);q[i+48>>2]=e;h=e}c=c+1|0;if((s|0)!=(c|0)){continue}break}}c=q[a+24>>2]}C:{if((c|0)<1){c=h;break C}c=h+4|0;if(!((g|0)!=2?c>>>0<=t[i+44>>2]:0)){g=2;q[i+52>>2]=2;c=h;break C}h=q[i+40>>2]+h|0;h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=c;if(!((h|0)<=q[i+60>>2]?(h|0)>=0:0)){q[i+52>>2]=2;g=2}if(!h){break C}m=a+100|0;g=q[a+104>>2];k=q[a+100>>2];e=g-k>>2;D:{if(h>>>0>e>>>0){Af(m,h-e|0);break D}if(h>>>0>=e>>>0){break D}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+104>>2]=e}g=q[a+116>>2];k=q[a+112>>2];e=g-k>>2;E:{if(h>>>0>e>>>0){Bf(a+112|0,h-e|0);break E}if(h>>>0>=e>>>0){break E}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+116>>2]=e}s=h>>>0>1?h:1;g=q[i+52>>2];k=q[i+44>>2];h=0;while(1){e=c+4|0;F:{G:{if(e>>>0>k>>>0){g=0;break G}if((g|0)==2){g=0;break G}c=q[i+40>>2]+c|0;g=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){c=e;break G}c=e;if((g|0)<=q[i+60>>2]){break F}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=h<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}H:{I:{J:{if((g|0)<0){break J}l=g<<1;e=l+c|0;if(e>>>0>k>>>0){break J}g=q[i+52>>2];if((g|0)!=2){break I}}g=2;q[i+52>>2]=2;break H}kV(q[o+q[m>>2]>>2],q[i+40>>2]+c|0,l);q[i+48>>2]=e;c=e}h=h+1|0;if((s|0)!=(h|0)){continue}break}}K:{if(q[a+24>>2]<6){break K}h=c+4|0;L:{if(!((g|0)!=2?h>>>0<=t[i+44>>2]:0)){g=2;q[i+52>>2]=2;h=c;break L}c=q[i+40>>2]+c|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;if(!((c|0)<=q[i+60>>2]?(c|0)>=0:0)){q[i+52>>2]=2;g=2}if(!c){break L}m=a+124|0;g=q[a+128>>2];k=q[a+124>>2];e=g-k>>2;M:{if(c>>>0>e>>>0){Af(m,c-e|0);break M}if(c>>>0>=e>>>0){break M}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+128>>2]=e}g=q[a+140>>2];k=q[a+136>>2];e=g-k>>2;N:{if(c>>>0>e>>>0){Bf(a+136|0,c-e|0);break N}if(c>>>0>=e>>>0){break N}e=k+(c<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+140>>2]=e}s=c>>>0>1?c:1;g=q[i+52>>2];k=q[i+44>>2];c=0;while(1){e=h+4|0;O:{P:{if(e>>>0>k>>>0){g=0;break P}if((g|0)==2){g=0;break P}h=q[i+40>>2]+h|0;g=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){h=e;break P}h=e;if((g|0)<=q[i+60>>2]){break O}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=c<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}Q:{R:{S:{if((g|0)<0){break S}l=g<<1;e=l+h|0;if(e>>>0>k>>>0){break S}g=q[i+52>>2];if((g|0)!=2){break R}}g=2;q[i+52>>2]=2;break Q}kV(q[o+q[m>>2]>>2],q[i+40>>2]+h|0,l);q[i+48>>2]=e;h=e}c=c+1|0;if((s|0)!=(c|0)){continue}break}}if(q[a+24>>2]<15){break K}c=h+4|0;if(!((g|0)!=2?c>>>0<=t[i+44>>2]:0)){q[i+52>>2]=2;break K}h=q[i+40>>2]+h|0;h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=c;if(!((h|0)<=q[i+60>>2]?(h|0)>=0:0)){q[i+52>>2]=2}if(!h){break K}m=a+172|0;g=q[a+176>>2];k=q[a+172>>2];e=g-k>>2;T:{if(h>>>0>e>>>0){Af(m,h-e|0);break T}if(h>>>0>=e>>>0){break T}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];q[g>>2]=0;if(k){_U(k)}if((g|0)!=(e|0)){continue}break}}q[a+176>>2]=e}g=q[a+188>>2];k=q[a+184>>2];e=g-k>>2;U:{if(h>>>0>e>>>0){Bf(a+184|0,h-e|0);break U}if(h>>>0>=e>>>0){break U}e=k+(h<<2)|0;if((e|0)!=(g|0)){while(1){g=g+ -4|0;k=q[g>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[g>>2]=0}if((g|0)!=(e|0)){continue}break}}q[a+188>>2]=e}s=h>>>0>1?h:1;g=q[i+52>>2];k=q[i+44>>2];h=0;while(1){e=c+4|0;V:{W:{if(e>>>0>k>>>0){g=0;break W}if((g|0)==2){g=0;break W}c=q[i+40>>2]+c|0;g=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=e;if((g|0)<0){c=e;break W}c=e;if((g|0)<=q[i+60>>2]){break V}}q[i+52>>2]=2}e=q[m>>2];l=g+g|0;l=_S(l>>>0>>0?-1:l);o=h<<2;p=o+e|0;e=q[p>>2];q[p>>2]=l;if(e){_U(e)}X:{Y:{Z:{if((g|0)<0){break Z}l=g<<1;e=l+c|0;if(e>>>0>k>>>0){break Z}g=q[i+52>>2];if((g|0)!=2){break Y}}g=2;q[i+52>>2]=2;break X}kV(q[o+q[m>>2]>>2],q[i+40>>2]+c|0,l);q[i+48>>2]=e;c=e}h=h+1|0;if((s|0)!=(h|0)){continue}break}}q[i+32>>2]=a;q[i+28>>2]=i+60;q[i+24>>2]=i+40;q[i+16>>2]=a;q[i+12>>2]=i+60;q[i+8>>2]=i+40;g=q[a+24>>2];if((g|0)>=1607){Cf(i+24|0);Df(i+8|0);g=q[a+24>>2]}q[a+244>>2]=0;q[a+248>>2]=0;q[a+252>>2]=0;q[a+256>>2]=0;_:{if((g|0)<14){break _}$:{aa:{ba:{h=q[i+48>>2];g=h+4|0;m=q[i+44>>2];if(g>>>0<=m>>>0){l=q[i+52>>2];if((l|0)!=2){break ba}}q[i+52>>2]=2;break aa}c=h+q[i+40>>2]|0;e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=g;if(!((e|0)<=q[i+60>>2]?(e|0)>=0:0)){q[i+52>>2]=2;l=2}h=h+8|0;ca:{da:{if(!e){break da}k=q[i+40>>2];ea:{if(!((l|0)==2|h>>>0>m>>>0)){c=g+k|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;g=h;break ea}l=2;q[i+52>>2]=2;c=0}q[a+244>>2]=c;h=g+4|0;if((e|0)==1){break da}fa:{if(!((l|0)==2|h>>>0>m>>>0)){c=g+k|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;g=h;break fa}l=2;q[i+52>>2]=2;c=0}q[a+248>>2]=c;h=g+4|0;if((e|0)==2){break da}ga:{if(!((l|0)==2|h>>>0>m>>>0)){c=g+k|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;g=h;break ga}l=2;q[i+52>>2]=2;c=0}q[a+252>>2]=c;h=g+4|0;if((e|0)==3){break da}ha:{if(!((l|0)==2|h>>>0>m>>>0)){c=g+k|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;g=h;break ha}l=2;q[i+52>>2]=2;c=0}q[a+256>>2]=c;k=4;h=g+4|0;c=h>>>0>m>>>0;if((e|0)==4){break ca}while(1){ia:{if(!((l|0)!=2?!(c&1):0)){l=2;q[i+52>>2]=2;break ia}q[i+48>>2]=h;g=h}h=g+4|0;c=h>>>0>m>>>0;k=k+1|0;if((e|0)!=(k|0)){continue}break}break ca}c=h>>>0>m>>>0}if(c){break aa}if((l|0)!=2){break $}}q[i+52>>2]=2;break _}c=q[i+40>>2]+g|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=h;if(!((c|0)<=q[i+60>>2]?(c|0)>=0:0)){q[i+52>>2]=2}if((c|0)<=0){break _}e=a+260|0;g=q[a+264>>2];m=q[a+260>>2];h=(g-m|0)/60|0;ja:{if(c>>>0>h>>>0){Ef(e,c-h|0);h=q[a+264>>2];break ja}if(c>>>0>=h>>>0){h=g;break ja}h=m+w(c,60)|0;if((h|0)!=(g|0)){while(1){g=g+ -60|0;n[q[q[g>>2]>>2]](g)|0;if((g|0)!=(h|0)){continue}break}}q[a+264>>2]=h}l=q[e>>2];if((h|0)==(l|0)){break _}h=0;g=q[i+48>>2];while(1){c=g+4|0;ka:{la:{if(!(q[i+52>>2]==2|c>>>0>t[i+44>>2])){g=q[i+40>>2]+g|0;g=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);q[i+48>>2]=c;if(g>>>0<102401){break ka}break la}c=g;g=0}q[i+52>>2]=2}$k(w(h,60)+l|0,b+c|0,g);g=q[i+48>>2]+g|0;q[i+48>>2]=g;h=h+1|0;l=q[a+260>>2];if(h>>>0<(q[a+264>>2]-l|0)/60>>>0){continue}break}}g=q[a+24>>2];if(g+ -1600>>>0<=6){Cf(i+24|0);Df(i+8|0);g=q[a+24>>2]}ma:{na:{if((g|0)>=13){e=q[i+48>>2];h=e+4|0;c=q[i+44>>2];oa:{pa:{if(h>>>0>c>>>0){h=e;break pa}l=q[i+52>>2];if((l|0)==2){h=e;break pa}e=e+q[i+40>>2]|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a+272>>2]=e;q[i+48>>2]=h;if((e|0)<0){break pa}if((e|0)<=q[i+60>>2]){break oa}}l=2;q[i+52>>2]=2}e=h+4|0;if(!((l|0)!=2?e>>>0<=c>>>0:0)){q[i+52>>2]=2;break na}h=q[i+40>>2]+h|0;h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+276>>2]=h;q[i+48>>2]=e;if(!((h|0)<0|(h|0)>q[i+60>>2])){h=e;break na}q[i+52>>2]=2;h=e;break na}if((g|0)<2){break ma}c=q[i+44>>2];h=q[i+48>>2]}e=h+4|0;if(!(q[i+52>>2]!=2?e>>>0<=c>>>0:0)){q[i+52>>2]=2;break ma}c=q[i+40>>2]+h|0;q[a+280>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[i+48>>2]=e}u[a+284>>2]=d;d=x(u[a+280>>2]*d);u[a+280>>2]=d;qa:{ra:{if((g|0)>=11){h=q[i+48>>2];c=h+4|0;l=q[i+44>>2];if(!(q[i+52>>2]!=2?c>>>0<=l>>>0:0)){q[i+52>>2]=2;break ra}h=q[i+40>>2]+h|0;q[a+288>>2]=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[i+48>>2]=c;h=c;break ra}q[a+288>>2]=-1;if((g|0)<=8){c=q[i+52>>2];break qa}l=q[i+44>>2];h=q[i+48>>2]}sa:{ta:{m=h+4|0;if(m>>>0<=l>>>0){c=q[i+52>>2];if((c|0)!=2){break ta}}c=2;q[i+52>>2]=2;e=q[a+296>>2];break sa}h=q[i+40>>2]+h|0;e=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a+296>>2]=e;q[i+48>>2]=m;h=m}if((e|0)==1){o=a;y=d;ua:{va:{wa:{xa:{e=h+4|0;ya:{za:{if(!((c|0)==2|e>>>0>l>>>0)){m=q[i+40>>2]+h|0;q[a+312>>2]=r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24);q[i+48>>2]=e;m=h+8|0;if(m>>>0>l>>>0){h=e;break za}e=e+q[i+40>>2]|0;q[a+300>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[i+48>>2]=m;k=h+12|0;if(k>>>0<=l>>>0){break xa}h=m;break ya}q[i+52>>2]=2}q[i+52>>2]=2}q[i+52>>2]=2;e=a+308|0;break wa}e=m+q[i+40>>2]|0;q[a+304>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[i+48>>2]=k;e=a+308|0;h=h+16|0;if(h>>>0<=l>>>0){break va}h=k}c=2;q[i+52>>2]=2;v=u[e>>2];break ua}m=e;e=k+q[i+40>>2]|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[m>>2]=e;q[i+48>>2]=h;v=(f(0,e),j())}u[o+308>>2]=y*v;u[a+312>>2]=d*u[a+312>>2];u[a+300>>2]=d*u[a+300>>2];u[a+304>>2]=d*u[a+304>>2]}if((g|0)<1702){break qa}g=a;y=d;m=h+4|0;Aa:{Ba:{Ca:{if(!((c|0)==2|m>>>0>l>>>0)){e=q[i+40>>2]+h|0;q[a+316>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[i+48>>2]=m;k=h+8|0;if(k>>>0>l>>>0){break Ca}e=m+q[i+40>>2]|0;q[a+320>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[i+48>>2]=k;m=a+324|0;s=h+12|0;e=m;if(s>>>0>l>>>0){break Ba}h=k+q[i+40>>2]|0;h=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[m>>2]=h;q[i+48>>2]=s;v=(f(0,h),j());break Aa}q[i+52>>2]=2}q[i+52>>2]=2;e=a+324|0}c=2;q[i+52>>2]=2;v=u[e>>2]}u[g+324>>2]=y*v;u[a+316>>2]=d*u[a+316>>2];u[a+320>>2]=d*u[a+320>>2]}h=0;if((c|0)==2){break a}q[i+4>>2]=q[i+48>>2]+b;z=a,A=uh(a,0,i+4|0),q[z+292>>2]=A;h=1}ue=i- -64|0;return h}function kx(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=0,p=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=0,C=0,D=x(0),E=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=x(0),S=x(0),T=0,U=0,V=0,W=0,X=0,Y=0;f=ue-240|0;ue=f;e=q[c+12>>2];a:{if((e|0)==2){b=q[d+4>>2];j=q[d>>2];q[f+64>>2]=j;q[f+68>>2]=b;e=q[d+12>>2];i=q[d+8>>2];q[f+72>>2]=i;q[f+76>>2]=e;h=q[d+28>>2];k=q[d+24>>2];q[f+88>>2]=k;q[f+92>>2]=h;g=q[d+20>>2];m=q[d+16>>2];q[f+80>>2]=m;q[f+84>>2]=g;B=q[d+40>>2];C=q[d+44>>2];q[f+200>>2]=k;q[f+204>>2]=h;h=q[d+32>>2];k=q[d+36>>2];q[f+232>>2]=0;q[f+208>>2]=h;q[f+212>>2]=k;q[f+216>>2]=B;q[f+220>>2]=C;q[f+192>>2]=m;q[f+196>>2]=g;q[f+184>>2]=i;q[f+188>>2]=e;q[f+176>>2]=j;q[f+180>>2]=b;q[f+224>>2]=0;q[f+228>>2]=0;break a}n[q[q[b>>2]+88>>2]](f,b);ru(e,f- -64|0,f+160|0,f+144|0,f+128|0,d,nt(f+176|0,f));$s(f,f+160|0);l=u[f+88>>2];Q=u[f+92>>2];p=u[f+84>>2];D=u[f+36>>2];E=u[f+20>>2];G=u[f+40>>2];H=u[f+24>>2];s=u[f+104>>2];I=u[f+44>>2];R=u[f+108>>2];t=u[f+100>>2];J=u[f+28>>2];v=u[f+72>>2];S=u[f+76>>2];w=u[f+64>>2];y=u[f+68>>2];K=u[f+32>>2];L=u[f>>2];M=u[f+16>>2];z=u[f+80>>2];N=u[f+4>>2];O=u[f+8>>2];A=u[f+96>>2];P=u[f+12>>2];q[f+232>>2]=0;u[f+220>>2]=x(I*s)+x(x(J*t)+x(R+x(P*A)));u[f+216>>2]=x(G*s)+x(x(H*t)+x(x(O*A)+x(0)));u[f+212>>2]=x(D*s)+x(x(E*t)+x(x(N*A)+x(0)));u[f+204>>2]=x(I*l)+x(x(J*p)+x(Q+x(P*z)));u[f+200>>2]=x(G*l)+x(x(H*p)+x(x(O*z)+x(0)));u[f+196>>2]=x(D*l)+x(x(E*p)+x(x(N*z)+x(0)));q[f+224>>2]=0;q[f+228>>2]=0;u[f+208>>2]=x(K*s)+x(x(M*t)+x(x(L*A)+x(0)));u[f+192>>2]=x(K*l)+x(x(M*p)+x(x(L*z)+x(0)));u[f+188>>2]=x(x(S+x(w*P))+x(y*J))+x(v*I);u[f+184>>2]=x(x(x(w*O)+x(0))+x(y*H))+x(v*G);u[f+180>>2]=x(x(x(w*N)+x(0))+x(y*E))+x(v*D);u[f+176>>2]=x(x(x(w*L)+x(0))+x(y*M))+x(v*K)}q[f+236>>2]=1065353216;l=u[c+24>>2];if(l!=x(1)){u[f+172>>2]=l;u[f+168>>2]=l;u[f+164>>2]=l;u[f+160>>2]=l;kt(f,f+160|0);qn(f- -64|0,f,f+176|0);b=q[f+124>>2];q[f+232>>2]=q[f+120>>2];q[f+236>>2]=b;b=q[f+116>>2];q[f+224>>2]=q[f+112>>2];q[f+228>>2]=b;b=q[f+108>>2];q[f+216>>2]=q[f+104>>2];q[f+220>>2]=b;b=q[f+100>>2];q[f+208>>2]=q[f+96>>2];q[f+212>>2]=b;b=q[f+92>>2];q[f+200>>2]=q[f+88>>2];q[f+204>>2]=b;b=q[f+84>>2];q[f+192>>2]=q[f+80>>2];q[f+196>>2]=b;b=q[f+76>>2];q[f+184>>2]=q[f+72>>2];q[f+188>>2]=b;b=q[f+68>>2];q[f+176>>2]=q[f+64>>2];q[f+180>>2]=b}if(!r[c+28|0]){jt(f);qn(f- -64|0,f,f+176|0);b=q[f+124>>2];q[f+232>>2]=q[f+120>>2];q[f+236>>2]=b;b=q[f+116>>2];q[f+224>>2]=q[f+112>>2];q[f+228>>2]=b;b=q[f+108>>2];q[f+216>>2]=q[f+104>>2];q[f+220>>2]=b;b=q[f+100>>2];q[f+208>>2]=q[f+96>>2];q[f+212>>2]=b;b=q[f+92>>2];q[f+200>>2]=q[f+88>>2];q[f+204>>2]=b;b=q[f+84>>2];q[f+192>>2]=q[f+80>>2];q[f+196>>2]=b;b=q[f+76>>2];q[f+184>>2]=q[f+72>>2];q[f+188>>2]=b;b=q[f+68>>2];q[f+176>>2]=q[f+64>>2];q[f+180>>2]=b}c=q[f+196>>2];e=q[f+212>>2];h=q[f+228>>2];g=q[f+200>>2];j=q[f+216>>2];i=q[f+232>>2];k=q[f+204>>2];m=q[f+220>>2];B=q[f+236>>2];C=q[f+176>>2];T=q[f+192>>2];U=q[f+208>>2];V=q[f+224>>2];W=q[f+180>>2];X=q[f+184>>2];Y=q[f+188>>2];b=oo(f- -64|0);q[b+48>>2]=Y;q[b+32>>2]=X;q[b+16>>2]=W;q[b+12>>2]=V;q[b+8>>2]=U;q[b+4>>2]=T;q[b>>2]=C;q[b+60>>2]=B;q[b+56>>2]=m;q[b+52>>2]=k;q[b+44>>2]=i;q[b+40>>2]=j;q[b+36>>2]=g;q[b+28>>2]=h;q[b+24>>2]=e;q[b+20>>2]=c;b:{c:{b=q[a+192>>2];e=q[a+196>>2];d:{if(b>>>0>>0){c=q[f+68>>2];e=q[f+64>>2];o[b|0]=e;o[b+1|0]=e>>>8;o[b+2|0]=e>>>16;o[b+3|0]=e>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;c=q[f+124>>2];e=q[f+120>>2];o[b+56|0]=e;o[b+57|0]=e>>>8;o[b+58|0]=e>>>16;o[b+59|0]=e>>>24;o[b+60|0]=c;o[b+61|0]=c>>>8;o[b+62|0]=c>>>16;o[b+63|0]=c>>>24;c=q[f+116>>2];e=q[f+112>>2];o[b+48|0]=e;o[b+49|0]=e>>>8;o[b+50|0]=e>>>16;o[b+51|0]=e>>>24;o[b+52|0]=c;o[b+53|0]=c>>>8;o[b+54|0]=c>>>16;o[b+55|0]=c>>>24;c=q[f+108>>2];e=q[f+104>>2];o[b+40|0]=e;o[b+41|0]=e>>>8;o[b+42|0]=e>>>16;o[b+43|0]=e>>>24;o[b+44|0]=c;o[b+45|0]=c>>>8;o[b+46|0]=c>>>16;o[b+47|0]=c>>>24;c=q[f+100>>2];e=q[f+96>>2];o[b+32|0]=e;o[b+33|0]=e>>>8;o[b+34|0]=e>>>16;o[b+35|0]=e>>>24;o[b+36|0]=c;o[b+37|0]=c>>>8;o[b+38|0]=c>>>16;o[b+39|0]=c>>>24;c=q[f+92>>2];e=q[f+88>>2];o[b+24|0]=e;o[b+25|0]=e>>>8;o[b+26|0]=e>>>16;o[b+27|0]=e>>>24;o[b+28|0]=c;o[b+29|0]=c>>>8;o[b+30|0]=c>>>16;o[b+31|0]=c>>>24;c=q[f+84>>2];e=q[f+80>>2];o[b+16|0]=e;o[b+17|0]=e>>>8;o[b+18|0]=e>>>16;o[b+19|0]=e>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=q[f+76>>2];e=q[f+72>>2];o[b+8|0]=e;o[b+9|0]=e>>>8;o[b+10|0]=e>>>16;o[b+11|0]=e>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;q[a+192>>2]=q[a+192>>2]- -64;break d}h=q[a+188>>2];k=b-h|0;g=k>>6;c=g+1|0;if(c>>>0>=67108864){break c}e=e-h|0;j=e>>5;j=e>>6>>>0<33554431?j>>>0>>0?c:j:67108863;b=0;e:{if(!j){break e}if(j>>>0>=67108864){break b}b=_S(j<<6)}c=b+(g<<6)|0;g=q[f+68>>2];i=q[f+64>>2];o[c|0]=i;o[c+1|0]=i>>>8;o[c+2|0]=i>>>16;o[c+3|0]=i>>>24;o[c+4|0]=g;o[c+5|0]=g>>>8;o[c+6|0]=g>>>16;o[c+7|0]=g>>>24;e=q[f+124>>2];g=q[f+120>>2];o[c+56|0]=g;o[c+57|0]=g>>>8;o[c+58|0]=g>>>16;o[c+59|0]=g>>>24;o[c+60|0]=e;o[c+61|0]=e>>>8;o[c+62|0]=e>>>16;o[c+63|0]=e>>>24;e=q[f+116>>2];g=q[f+112>>2];o[c+48|0]=g;o[c+49|0]=g>>>8;o[c+50|0]=g>>>16;o[c+51|0]=g>>>24;o[c+52|0]=e;o[c+53|0]=e>>>8;o[c+54|0]=e>>>16;o[c+55|0]=e>>>24;e=q[f+108>>2];g=q[f+104>>2];o[c+40|0]=g;o[c+41|0]=g>>>8;o[c+42|0]=g>>>16;o[c+43|0]=g>>>24;o[c+44|0]=e;o[c+45|0]=e>>>8;o[c+46|0]=e>>>16;o[c+47|0]=e>>>24;e=q[f+100>>2];g=q[f+96>>2];o[c+32|0]=g;o[c+33|0]=g>>>8;o[c+34|0]=g>>>16;o[c+35|0]=g>>>24;o[c+36|0]=e;o[c+37|0]=e>>>8;o[c+38|0]=e>>>16;o[c+39|0]=e>>>24;e=q[f+92>>2];g=q[f+88>>2];o[c+24|0]=g;o[c+25|0]=g>>>8;o[c+26|0]=g>>>16;o[c+27|0]=g>>>24;o[c+28|0]=e;o[c+29|0]=e>>>8;o[c+30|0]=e>>>16;o[c+31|0]=e>>>24;e=q[f+84>>2];g=q[f+80>>2];o[c+16|0]=g;o[c+17|0]=g>>>8;o[c+18|0]=g>>>16;o[c+19|0]=g>>>24;o[c+20|0]=e;o[c+21|0]=e>>>8;o[c+22|0]=e>>>16;o[c+23|0]=e>>>24;e=q[f+76>>2];g=q[f+72>>2];o[c+8|0]=g;o[c+9|0]=g>>>8;o[c+10|0]=g>>>16;o[c+11|0]=g>>>24;o[c+12|0]=e;o[c+13|0]=e>>>8;o[c+14|0]=e>>>16;o[c+15|0]=e>>>24;e=b+(j<<6)|0;c=c- -64|0;if((k|0)>=1){kV(b,h,k)}q[a+196>>2]=e;q[a+192>>2]=c;q[a+188>>2]=b;if(!h){break d}_U(h)}b=d+48|0;c=q[a+204>>2];g=q[a+208>>2];f:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+204>>2]=q[a+204>>2]+16;break f}h=q[a+200>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;g:{if(!g){break g}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+208>>2]=b;q[a+204>>2]=e;q[a+200>>2]=c;if(!h){break f}_U(h)}b=d- -64|0;c=q[a+216>>2];g=q[a+220>>2];h:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+216>>2]=q[a+216>>2]+16;break h}h=q[a+212>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;i:{if(!g){break i}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+220>>2]=b;q[a+216>>2]=e;q[a+212>>2]=c;if(!h){break h}_U(h)}b=d+80|0;c=q[a+228>>2];g=q[a+232>>2];j:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+228>>2]=q[a+228>>2]+16;break j}h=q[a+224>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;k:{if(!g){break k}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+232>>2]=b;q[a+228>>2]=e;q[a+224>>2]=c;if(!h){break j}_U(h)}b=d+96|0;c=q[a+240>>2];g=q[a+244>>2];l:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+240>>2]=q[a+240>>2]+16;break l}h=q[a+236>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;m:{if(!g){break m}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+244>>2]=b;q[a+240>>2]=e;q[a+236>>2]=c;if(!h){break l}_U(h)}b=d+112|0;c=q[a+252>>2];g=q[a+256>>2];n:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+252>>2]=q[a+252>>2]+16;break n}h=q[a+248>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;o:{if(!g){break o}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+256>>2]=b;q[a+252>>2]=e;q[a+248>>2]=c;if(!h){break n}_U(h)}b=d+128|0;c=q[a+264>>2];g=q[a+268>>2];p:{if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+264>>2]=q[a+264>>2]+16;break p}h=q[a+260>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;q:{if(!g){break q}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+268>>2]=b;q[a+264>>2]=e;q[a+260>>2]=c;if(!h){break p}_U(h)}b=q[a+276>>2];g=q[a+280>>2];r:{if((b|0)!=(g|0)){q[b>>2]=q[d+144>>2];q[a+276>>2]=b+4;break r}c=q[a+272>>2];h=b-c|0;j=h>>2;e=j+1|0;if(e>>>0>=1073741824){break c}g=g-c|0;i=g>>1;e=g>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;b=0;s:{if(!e){break s}if(e>>>0>=1073741824){break b}b=_S(e<<2)}g=b+(j<<2)|0;q[g>>2]=q[d+144>>2];e=b+(e<<2)|0;g=g+4|0;if((h|0)>=1){kV(b,c,h)}q[a+280>>2]=e;q[a+276>>2]=g;q[a+272>>2]=b;if(!c){break r}_U(c)}b=q[a+288>>2];g=q[a+292>>2];t:{if((b|0)!=(g|0)){q[b>>2]=q[d+148>>2];q[a+288>>2]=b+4;break t}c=q[a+284>>2];h=b-c|0;j=h>>2;e=j+1|0;if(e>>>0>=1073741824){break c}g=g-c|0;i=g>>1;e=g>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;b=0;u:{if(!e){break u}if(e>>>0>=1073741824){break b}b=_S(e<<2)}g=b+(j<<2)|0;q[g>>2]=q[d+148>>2];e=b+(e<<2)|0;g=g+4|0;if((h|0)>=1){kV(b,c,h)}q[a+292>>2]=e;q[a+288>>2]=g;q[a+284>>2]=b;if(!c){break t}_U(c)}b=q[a+300>>2];g=q[a+304>>2];v:{if((b|0)!=(g|0)){q[b>>2]=q[d+152>>2];q[a+300>>2]=b+4;break v}c=q[a+296>>2];h=b-c|0;j=h>>2;e=j+1|0;if(e>>>0>=1073741824){break c}g=g-c|0;i=g>>1;e=g>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;b=0;w:{if(!e){break w}if(e>>>0>=1073741824){break b}b=_S(e<<2)}g=b+(j<<2)|0;q[g>>2]=q[d+152>>2];e=b+(e<<2)|0;g=g+4|0;if((h|0)>=1){kV(b,c,h)}q[a+304>>2]=e;q[a+300>>2]=g;q[a+296>>2]=b;if(!c){break v}_U(c)}b=q[a+312>>2];h=q[a+316>>2];x:{if((b|0)!=(h|0)){c=r[d+156|0]|r[d+157|0]<<8|(r[d+158|0]<<16|r[d+159|0]<<24);o[b|0]=c;o[b+1|0]=c>>>8;o[b+2|0]=c>>>16;o[b+3|0]=c>>>24;q[a+312>>2]=q[a+312>>2]+4;break x}c=q[a+308>>2];j=b-c|0;g=j>>2;e=g+1|0;if(e>>>0>=1073741824){break c}h=h-c|0;i=h>>1;h=h>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;b=0;y:{if(!h){break y}if(h>>>0>=1073741824){break b}b=_S(h<<2)}e=b+(g<<2)|0;g=r[d+156|0]|r[d+157|0]<<8|(r[d+158|0]<<16|r[d+159|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;h=b+(h<<2)|0;e=e+4|0;if((j|0)>=1){kV(b,c,j)}q[a+316>>2]=h;q[a+312>>2]=e;q[a+308>>2]=b;if(!c){break x}_U(c)}b=q[a+324>>2];g=q[a+328>>2];z:{if((b|0)!=(g|0)){q[b>>2]=q[d+160>>2];q[a+324>>2]=b+4;break z}c=q[a+320>>2];h=b-c|0;j=h>>2;e=j+1|0;if(e>>>0>=1073741824){break c}g=g-c|0;i=g>>1;e=g>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;b=0;A:{if(!e){break A}if(e>>>0>=1073741824){break b}b=_S(e<<2)}g=b+(j<<2)|0;q[g>>2]=q[d+160>>2];e=b+(e<<2)|0;g=g+4|0;if((h|0)>=1){kV(b,c,h)}q[a+328>>2]=e;q[a+324>>2]=g;q[a+320>>2]=b;if(!c){break z}_U(c)}B:{if(q[a+356>>2]<1){break B}b=d+164|0;c=q[a+336>>2];g=q[a+340>>2];if((c|0)!=(g|0)){e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=e;q[a+336>>2]=q[a+336>>2]+16;break B}h=q[a+332>>2];j=c-h|0;i=j>>4;e=i+1|0;if(e>>>0>=268435456){break c}g=g-h|0;k=g>>3;g=g>>4>>>0<134217727?k>>>0>>0?e:k:268435455;c=0;C:{if(!g){break C}if(g>>>0>=268435456){break b}c=_S(g<<4)}e=c+(i<<4)|0;k=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=k;i=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=i;b=c+(g<<4)|0;e=e+16|0;if((j|0)>=1){kV(c,h,j)}q[a+340>>2]=b;q[a+336>>2]=e;q[a+332>>2]=c;if(!h){break B}_U(h)}D:{if(q[a+360>>2]<1){break D}b=d+180|0;c=q[a+348>>2];h=q[a+352>>2];if((c|0)!=(h|0)){d=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=d;d=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=d;q[a+348>>2]=q[a+348>>2]+16;break D}e=q[a+344>>2];g=c-e|0;j=g>>4;d=j+1|0;if(d>>>0>=268435456){break c}h=h-e|0;i=h>>3;h=h>>4>>>0<134217727?i>>>0>>0?d:i:268435455;c=0;E:{if(!h){break E}if(h>>>0>=268435456){break b}c=_S(h<<4)}d=c+(j<<4)|0;i=q[b+4>>2];q[d>>2]=q[b>>2];q[d+4>>2]=i;j=q[b+12>>2];q[d+8>>2]=q[b+8>>2];q[d+12>>2]=j;b=c+(h<<4)|0;d=d+16|0;if((g|0)>=1){kV(c,e,g)}q[a+352>>2]=b;q[a+348>>2]=d;q[a+344>>2]=c;if(!e){break D}_U(e)}ue=f+240|0;return}kU();F()}Ue(190925);F()}function Ur(a,b,c){var d=0,g=0,h=0,i=0,l=x(0),m=0,o=x(0),p=0,r=x(0),s=x(0),v=x(0),z=0,A=0,B=x(0),C=x(0),D=x(0),G=x(0),H=x(0),I=x(0),J=0,K=0,L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=x(0),S=0,T=x(0),U=0,V=0,W=0,X=x(0),Y=0,Z=x(0),_=0,$=0,aa=x(0),ba=x(0),ca=0,da=0,ea=0,fa=0,ga=x(0);d=ue-224|0;ue=d;q[d+200>>2]=0;q[d+192>>2]=0;q[d+196>>2]=0;q[d+184>>2]=0;q[d+176>>2]=0;q[d+180>>2]=0;q[d+168>>2]=0;q[d+160>>2]=0;q[d+164>>2]=0;a:{b:{c:{d:{g=q[b+68>>2];e:{if(g>>>0>2){break e}f:{switch(g-1|0){case 0:h=_S(16);q[h+8>>2]=0;q[h+12>>2]=1065353216;q[h>>2]=1056964608;q[h+4>>2]=0;g=_S(32);q[g+24>>2]=0;q[g+28>>2]=1065353216;q[g+16>>2]=0;q[g+20>>2]=0;i=q[h+4>>2];q[g>>2]=q[h>>2];q[g+4>>2]=i;p=q[h+12>>2];m=g+8|0;i=m;q[i>>2]=q[h+8>>2];q[i+4>>2]=p;i=g+32|0;q[d+200>>2]=i;q[d+196>>2]=i;q[d+192>>2]=g;_U(h);i=_S(64);q[i+40>>2]=0;q[i+44>>2]=1065353216;q[i+32>>2]=-1090519040;q[i+36>>2]=0;h=q[g+4>>2];q[i>>2]=q[g>>2];q[i+4>>2]=h;h=q[m+4>>2];q[i+8>>2]=q[m>>2];q[i+12>>2]=h;h=q[g+20>>2];q[i+16>>2]=q[g+16>>2];q[i+20>>2]=h;h=q[g+28>>2];q[i+24>>2]=q[g+24>>2];q[i+28>>2]=h;q[d+200>>2]=i- -64;q[d+196>>2]=i+48;q[d+192>>2]=i;_U(g);q[i+56>>2]=-1090519040;q[i+60>>2]=1065353216;q[i+48>>2]=0;q[i+52>>2]=0;g=q[d+196>>2];h=g+16|0;q[d+196>>2]=h;m=q[d+200>>2];g:{if(h>>>0>>0){q[g+16>>2]=0;q[g+20>>2]=0;q[g+24>>2]=0;q[g+28>>2]=1065353216;g=q[d+196>>2]+16|0;q[d+196>>2]=g;p=q[d+200>>2];break g}z=h-i|0;p=z>>4;g=p+1|0;if(g>>>0>=268435456){break a}m=m-i|0;A=m>>3;m=m>>4>>>0<134217727?A>>>0>>0?g:A:268435455;h=0;h:{if(!m){break h}if(m>>>0>=268435456){break b}h=_S(m<<4)}g=h+(p<<4)|0;q[g+8>>2]=0;q[g+12>>2]=1065353216;q[g>>2]=0;q[g+4>>2]=0;p=h+(m<<4)|0;g=g+16|0;if((z|0)>=1){kV(h,i,z)}q[d+200>>2]=p;q[d+196>>2]=g;q[d+192>>2]=h;_U(i)}i:{if(g>>>0

>>0){q[g+8>>2]=1056964608;q[g+12>>2]=1065353216;q[g>>2]=0;q[g+4>>2]=0;q[d+196>>2]=q[d+196>>2]+16;break i}h=q[d+192>>2];z=g-h|0;A=z>>4;i=A+1|0;if(i>>>0>=268435456){break c}m=p-h|0;p=m>>3;m=m>>4>>>0<134217727?p>>>0>>0?i:p:268435455;g=0;j:{if(!m){break j}if(m>>>0>=268435456){break d}g=_S(m<<4)}i=g+(A<<4)|0;q[i+8>>2]=1056964608;q[i+12>>2]=1065353216;q[i>>2]=0;q[i+4>>2]=0;m=g+(m<<4)|0;i=i+16|0;if((z|0)>=1){kV(g,h,z)}q[d+200>>2]=m;q[d+196>>2]=i;q[d+192>>2]=g;if(!h){break i}_U(h)}h=q[1617];g=d+152|0;q[g>>2]=q[1616];q[g+4>>2]=h;m=q[1615];h=d+144|0;q[h>>2]=q[1614];q[h+4>>2]=m;p=q[1613];i=d+136|0;q[i>>2]=q[1612];q[i+4>>2]=p;m=q[1611];q[d+128>>2]=q[1610];q[d+132>>2]=m;Zr(d+176|0,d+128|0,d+160|0);m=q[1623];q[h>>2]=q[1622];q[h+4>>2]=m;h=q[1621];q[i>>2]=q[1620];q[i+4>>2]=h;h=q[1619];q[d+128>>2]=q[1618];q[d+132>>2]=h;Zr(d+160|0,d+128|0,g);break e;default:h=_S(16);g=h;q[g+8>>2]=0;q[g+12>>2]=1065353216;q[g>>2]=1056964608;q[g+4>>2]=0;g=_S(32);q[g+24>>2]=0;q[g+28>>2]=1065353216;q[g+16>>2]=0;q[g+20>>2]=0;i=q[h+4>>2];q[g>>2]=q[h>>2];q[g+4>>2]=i;p=q[h+12>>2];m=g+8|0;i=m;q[i>>2]=q[h+8>>2];q[i+4>>2]=p;i=g+32|0;q[d+200>>2]=i;q[d+196>>2]=i;q[d+192>>2]=g;_U(h);h=_S(64);q[h+40>>2]=0;q[h+44>>2]=1065353216;q[h+32>>2]=-1090519040;q[h+36>>2]=0;i=q[g+4>>2];q[h>>2]=q[g>>2];q[h+4>>2]=i;i=q[m+4>>2];q[h+8>>2]=q[m>>2];q[h+12>>2]=i;i=q[g+20>>2];q[h+16>>2]=q[g+16>>2];q[h+20>>2]=i;i=q[g+28>>2];q[h+24>>2]=q[g+24>>2];q[h+28>>2]=i;q[d+200>>2]=h- -64;q[d+196>>2]=h+48;q[d+192>>2]=h;_U(g);q[d+136>>2]=1;q[d+140>>2]=2;q[d+128>>2]=0;q[d+132>>2]=1;Zr(d+176|0,d+128|0,d+144|0);q[d+136>>2]=1065353216;q[d+128>>2]=0;q[d+132>>2]=1056964608;Zr(d+160|0,d+128|0,d+140|0);break e;case 1:break f}}g=_S(16);q[g+8>>2]=0;q[g+12>>2]=1065353216;q[g>>2]=0;q[g+4>>2]=0;h=g+16|0;q[d+196>>2]=h;q[d+200>>2]=h;q[d+192>>2]=g;q[d+128>>2]=0;g=d+132|0;Zr(d+176|0,d+128|0,g);q[d+128>>2]=0;Zr(d+160|0,d+128|0,g)}k:{if(q[b+8>>2]>=1){ea=b+52|0;W=b+36|0;fa=d+140|0;while(1){v=u[b+16>>2];l=x(n[q[q[c>>2]+12>>2]](c));o=u[b+16>>2];C=x(n[q[q[c>>2]+12>>2]](c));s=u[b+12>>2];i=q[b+8>>2];r=x(n[q[q[c>>2]+12>>2]](c));q[d+120>>2]=0;q[d+112>>2]=0;q[d+116>>2]=0;q[d+104>>2]=0;q[d+96>>2]=0;q[d+100>>2]=0;q[d+88>>2]=0;q[d+80>>2]=0;q[d+84>>2]=0;g=0;h=0;z=0;H=x(l*x(v*x(.5)));L=x(x(1)-x(C*x(o*x(.5))));if(!!(H>2]);N=x(l/o);Q=x(N*x(9999999747378752e-20));l=x(x(l*u[b>>2])*x(3.1415927410125732));X=x(x(l+l)/o);R=x(X*x(9999999747378752e-20));while(1){n[q[b+44>>2]](d+128|0,W,H);q[d+60>>2]=1065353216;q[d+52>>2]=q[d+132>>2];g=d;l=v;O=l;o=x(x(l*x(.15915493667125702))+(f(0,(k(l),e(0))&-2147483648|1056964608),j()));l:{if(x(y(o))>2];u[g+56>>2]=D*B;M=x(l*x(x(x(x(x(x(1)-x(o/x(6)))+x(C/x(120)))-x(s/x(5040)))+x(r/x(362880)))-x(I/x(39916800))));u[d+48>>2]=B*M;n[q[b+44>>2]](d+128|0,W,x(Q+H));Z=u[d+132>>2];I=u[d+128>>2];n[q[b+44>>2]](d+128|0,W,H);T=u[d+132>>2];C=u[d+128>>2];n[q[b+44>>2]](d+128|0,W,x(H+x(9999999747378752e-20)));l=x(v+x(9999999747378752e-20));o=x(x(l*x(.15915493667125702))+(f(0,(k(l),e(0))&-2147483648|1056964608),j()));m:{if(x(y(o))>2];P=x(O-l);O=D;D=u[d+128>>2];aa=u[d+56>>2];ba=x(x(O*D)-aa);ga=x(P*ba);l=x(x(M*D)-l);o=x(x(x(x(x(x(x(x(1)-x(o*x(.5)))+x(s/x(24)))-x(r/x(720)))+x(B/x(40320)))-x(G/x(3628800)))*C)-aa);C=x(l*o);s=u[d+52>>2];r=x(u[d+132>>2]-s);B=x(P*r);O=l;l=x(T-s);s=x(O*l);r=x(r*o);G=x(l*ba);l=x(R+v);o=x(x(l*x(.15915493667125702))+(f(0,(k(l),e(0))&-2147483648|1056964608),j()));n:{if(x(y(o))>2]);r=x(r*r);r=x(r-r);g=q[d+116>>2];o:{if(g>>>0>2]){h=q[d+52>>2];q[g>>2]=q[d+48>>2];q[g+4>>2]=h;h=q[d+60>>2];q[g+8>>2]=q[d+56>>2];q[g+12>>2]=h;q[d+116>>2]=g+16;break o}_r(d+112|0,d+48|0)}B=x(T*I);I=x(l*I);l=x(x(1)/x(E(x(x(C*C)+x(x(s*s)+x(o*o))))));u[d+140>>2]=r*l;u[d+136>>2]=C*l;u[d+132>>2]=o*l;u[d+128>>2]=s*l;g=q[d+84>>2];p:{if(g>>>0>2]){h=q[d+132>>2];q[g>>2]=q[d+128>>2];q[g+4>>2]=h;h=q[d+140>>2];q[g+8>>2]=q[d+136>>2];q[g+12>>2]=h;q[d+84>>2]=g+16;break p}_r(d+80|0,d+128|0)}o=x(I-u[d+48>>2]);C=x(Z-u[d+52>>2]);s=x(B-u[d+56>>2]);l=x(x(1)/x(E(x(x(x(o*o)+x(C*C))+x(s*s)))));u[d+140>>2]=x(x(1)-u[d+60>>2])*l;u[d+136>>2]=s*l;u[d+132>>2]=C*l;u[d+128>>2]=o*l;g=q[d+100>>2];q:{if(g>>>0>2]){h=q[d+132>>2];q[g>>2]=q[d+128>>2];q[g+4>>2]=h;h=q[d+140>>2];q[g+8>>2]=q[d+136>>2];q[g+12>>2]=h;q[d+100>>2]=g+16;break q}_r(d+96|0,d+128|0)}v=x(X+v);H=x(N+H);if(H>2];g=q[d+112>>2];h=g}m=z-h|0;i=m>>4;if(i>>>0<=1){q[a>>2]=0;q[a+4>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;a=q[d+80>>2];r:{if(!a){break r}q[d+84>>2]=a;b=q[d+88>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,a,b-a|0);a=q[q[d+140>>2]+4>>2];if(!a){break r}n[a](q[d+128>>2])}a=q[d+96>>2];s:{if(!a){break s}q[d+100>>2]=a;b=q[d+104>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,a,b-a|0);a=q[q[d+140>>2]+4>>2];if(!a){break s}n[a](q[d+128>>2])}a=q[d+112>>2];t:{if(!a){break t}q[d+116>>2]=a;b=q[d+120>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,a,b-a|0);a=q[q[d+140>>2]+4>>2];if(!a){break t}n[a](q[d+128>>2])}u:{if(!U){break u}xt(d+128|0);n[q[d+136>>2]](d+128|0,U,_-U|0);a=q[q[d+140>>2]+4>>2];if(!a){break u}n[a](q[d+128>>2])}if(!V){break k}zt(d+128|0);n[q[d+136>>2]](d+128|0,V,$-V|0);a=q[q[d+140>>2]+4>>2];if(!a){break k}n[a](q[d+128>>2]);break k}q[d+144>>2]=0;q[d+148>>2]=0;q[d+136>>2]=0;q[d+140>>2]=0;q[d+128>>2]=0;q[d+132>>2]=0;p=w(q[d+196>>2]-q[d+192>>2]>>4,i);if(p){Vr(d+128|0,p);z=q[d+116>>2];g=q[d+112>>2];m=z-g|0;i=m>>4;h=g}if(m){A=0;J=q[d+192>>2];S=q[d+196>>2];while(1){K=A<<4;m=K+q[d+96>>2]|0;H=u[m+4>>2];p=K+q[d+80>>2]|0;o=u[p+8>>2];C=u[m+8>>2];s=u[p+4>>2];r=u[p>>2];L=u[m>>2];v=u[b+20>>2];M=x(A|0);N=x(M/x(i+ -1>>>0));l=x(x(x(v+x(N*x(u[b+24>>2]-v)))/x(180))*x(3.1415927410125732));v=AG(l);l=zG(l);i=S-J|0;if(i){B=x(x(r*H)-x(s*L));G=x(x(o*L)-x(r*C));D=x(x(s*C)-x(o*H));I=x(x(1)/x(E(x(x(B*B)+x(x(G*G)+x(D*D))))));Q=x(B*I);X=x(x(o*l)-x(Q*v));R=x(G*I);Z=x(x(s*l)-x(R*v));D=x(D*I);T=x(x(r*l)-x(D*v));B=u[p+12>>2];G=u[m+12>>2];P=x(B*G);I=x(x(x(x(P-P)*I)*l)+x(B*v));Q=x(x(Q*l)+x(o*v));R=x(x(R*l)+x(s*v));r=x(x(D*l)+x(r*v));B=x(v+x(B*l));v=u[b+28>>2];v=x(v+x(N*x(u[b+32>>2]-v)));p=i>>4;m=0;while(1){g=g+K|0;D=u[g>>2];N=u[g+4>>2];P=u[g+8>>2];h=q[d+128>>2]+w(w(p,A)+m|0,80)|0;i=(m<<4)+J|0;l=u[i>>2];o=u[i+4>>2];s=u[i+8>>2];u[h+12>>2]=x(v*x(x(x(I*l)+x(o*G))+x(B*s)))+u[g+12>>2];u[h+8>>2]=P+x(v*x(x(x(Q*l)+x(o*C))+x(X*s)));u[h+4>>2]=N+x(v*x(x(x(R*l)+x(o*H))+x(Z*s)));u[h>>2]=D+x(v*x(x(x(r*l)+x(o*L))+x(T*s)));h=q[d+112>>2];i=q[d+116>>2];g=q[d+128>>2]+w(w(q[d+196>>2]-q[d+192>>2]>>4,A)+m|0,80)|0;q[g+48>>2]=q[q[d+160>>2]+(m<<2)>>2];q[g+56>>2]=0;q[g+60>>2]=1065353216;u[g+52>>2]=x(1)-x(M/x((i-h>>4)+ -1>>>0));m=m+1|0;S=q[d+196>>2];J=q[d+192>>2];p=S-J>>4;if(m>>>0

>>0){g=K+q[d+96>>2]|0;G=u[g+12>>2];C=u[g+8>>2];H=u[g+4>>2];L=u[g>>2];g=q[d+112>>2];continue}break}z=q[d+116>>2];h=q[d+112>>2]}A=A+1|0;g=h;i=z-g>>4;if(A>>>0>>0){continue}break}}g=w(i+ -1|0,q[d+180>>2]-q[d+176>>2]>>2);m=q[d+140>>2];i=(q[d+144>>2]-m|0)/12|0;v:{if(g>>>0>i>>>0){gr(fa,g-i|0);h=q[d+112>>2];z=q[d+116>>2];break v}if(g>>>0>=i>>>0){break v}q[d+144>>2]=m+w(g,12)}if((z-h|0)!=16){g=0;p=q[d+176>>2];J=q[d+180>>2];while(1){i=g+1|0;m=0;A=J-p>>2;if(A>>>0>1){while(1){z=m<<1;J=z|1;h=q[(J<<2)+p>>2];z=q[d+140>>2]+w(z+w(g,A)|0,12)|0;A=q[d+196>>2]-q[d+192>>2]>>4;K=w(A,g);p=q[(m<<3)+p>>2];S=K+p|0;q[z>>2]=S;q[z+8>>2]=h+K;K=z;z=w(i,A);A=z+h|0;q[K+4>>2]=A;h=q[d+140>>2]+w(J+w(q[d+180>>2]-q[d+176>>2]>>2,g)|0,12)|0;q[h+8>>2]=A;q[h+4>>2]=p+z;q[h>>2]=S;m=m+1|0;J=q[d+180>>2];p=q[d+176>>2];A=J-p>>2;if(m>>>0>>1>>>0){continue}break}z=q[d+116>>2];h=q[d+112>>2]}g=i;if(g>>>0<(z-h>>4)+ -1>>>0){continue}break}}m=0;g=q[d+128>>2];if((g|0)!=q[d+132>>2]){while(1){h=w(m,80);g=h+g|0;i=q[g+4>>2];q[d+48>>2]=q[g>>2];q[d+52>>2]=i;i=q[g+12>>2];q[d+56>>2]=q[g+8>>2];q[d+60>>2]=i;n[q[b+60>>2]](d+208|0,ea,d+48|0);i=q[d+212>>2];g=h+q[d+128>>2]|0;q[g>>2]=q[d+208>>2];q[g+4>>2]=i;h=q[d+220>>2];q[g+8>>2]=q[d+216>>2];q[g+12>>2]=h;m=m+1|0;g=q[d+128>>2];if(m>>>0<(q[d+132>>2]-g|0)/80>>>0){continue}break}}Qr(d+128|0);q[d+44>>2]=_;q[d+40>>2]=ca;q[d+36>>2]=U;q[d+32>>2]=$;q[d+28>>2]=da;q[d+24>>2]=V;g=q[d+128>>2];q[d+128>>2]=0;q[d>>2]=g;q[d+4>>2]=q[d+132>>2];i=q[d+136>>2];q[d+132>>2]=0;q[d+136>>2]=0;q[d+8>>2]=i;h=q[d+140>>2];q[d+12>>2]=h;q[d+16>>2]=q[d+144>>2];q[d+140>>2]=0;q[d+144>>2]=0;m=q[d+148>>2];q[d+148>>2]=0;q[d+20>>2]=m;Ar(d+48|0,d+24|0,d);da=q[d+52>>2];V=q[d+48>>2];q[d+48>>2]=0;q[d+52>>2]=0;U=q[d+60>>2];$=q[d+56>>2];q[d+56>>2]=0;q[d+60>>2]=0;_=q[d+68>>2];ca=q[d+64>>2];q[d+64>>2]=0;q[d+68>>2]=0;w:{if(!h){break w}q[d+16>>2]=h;xt(d+208|0);n[q[d+216>>2]](d+208|0,h,m-h|0);h=q[q[d+220>>2]+4>>2];if(!h){break w}n[h](q[d+208>>2])}x:{if(!g){break x}q[d+4>>2]=g;zt(d+208|0);n[q[d+216>>2]](d+208|0,g,i-g|0);g=q[q[d+220>>2]+4>>2];if(!g){break x}n[g](q[d+208>>2])}g=q[d+36>>2];y:{if(!g){break y}q[d+40>>2]=g;h=q[d+44>>2];xt(d+208|0);n[q[d+216>>2]](d+208|0,g,h-g|0);g=q[q[d+220>>2]+4>>2];if(!g){break y}n[g](q[d+208>>2])}g=q[d+24>>2];z:{if(!g){break z}q[d+28>>2]=g;h=q[d+32>>2];zt(d+208|0);n[q[d+216>>2]](d+208|0,g,h-g|0);g=q[q[d+220>>2]+4>>2];if(!g){break z}n[g](q[d+208>>2])}g=q[d+140>>2];A:{if(!g){break A}q[d+144>>2]=g;h=q[d+148>>2];xt(d+48|0);n[q[d+56>>2]](d+48|0,g,h-g|0);g=q[q[d+60>>2]+4>>2];if(!g){break A}n[g](q[d+48>>2])}g=q[d+128>>2];B:{if(!g){break B}q[d+132>>2]=g;h=q[d+136>>2];zt(d+48|0);n[q[d+56>>2]](d+48|0,g,h-g|0);g=q[q[d+60>>2]+4>>2];if(!g){break B}n[g](q[d+48>>2])}g=q[d+80>>2];C:{if(!g){break C}q[d+84>>2]=g;h=q[d+88>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,g,h-g|0);g=q[q[d+140>>2]+4>>2];if(!g){break C}n[g](q[d+128>>2])}g=q[d+96>>2];D:{if(!g){break D}q[d+100>>2]=g;h=q[d+104>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,g,h-g|0);g=q[q[d+140>>2]+4>>2];if(!g){break D}n[g](q[d+128>>2])}g=q[d+112>>2];E:{if(!g){break E}q[d+116>>2]=g;h=q[d+120>>2];zt(d+128|0);n[q[d+136>>2]](d+128|0,g,h-g|0);g=q[q[d+140>>2]+4>>2];if(!g){break E}n[g](q[d+128>>2])}Y=Y+1|0;if((Y|0)>2]){continue}break}}q[a+12>>2]=U;q[a+8>>2]=$;q[a+4>>2]=da;q[a>>2]=V;q[a+20>>2]=_;q[a+16>>2]=ca}a=q[d+160>>2];if(a){q[d+164>>2]=a;_U(a)}a=q[d+176>>2];if(a){q[d+180>>2]=a;_U(a)}a=q[d+192>>2];if(a){q[d+196>>2]=a;_U(a)}ue=d+224|0;return}Ue(6368);F()}kU();F()}Ue(6368);F()}kU();F()}function zA(a,b,c,d){var e=0,f=0,g=x(0),h=x(0),i=0,j=x(0),k=0,l=x(0),m=0,o=x(0),p=0,s=0,t=x(0),v=x(0),y=0,z=x(0),C=x(0),D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=0,P=x(0),Q=x(0),R=x(0),S=0,T=x(0),U=x(0),V=0,W=x(0),X=x(0),Y=0,Z=x(0),_=x(0),$=x(0),aa=x(0),ba=x(0),ca=x(0),da=x(0),ea=x(0),fa=0,ga=x(0),ha=x(0),ia=x(0),ja=x(0),ka=0,la=0,ma=0,na=x(0),oa=x(0),pa=x(0),qa=x(0),ra=x(0),sa=x(0),ta=x(0),ua=x(0),va=x(0),wa=x(0),xa=x(0),ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=0,Da=x(0),Ea=0,Fa=0,Ga=0,Ha=0,Ia=x(0),Ja=x(0),Ka=x(0),La=x(0),Ma=x(0),Na=x(0),Oa=x(0),Pa=x(0),Qa=x(0),Ra=x(0),Sa=x(0),Ta=x(0),Ua=x(0),Va=x(0),Wa=x(0),Xa=x(0),Ya=x(0),Za=x(0),_a=x(0),$a=x(0),ab=x(0),bb=x(0),cb=x(0),db=x(0),eb=x(0),fb=0,gb=0,hb=x(0),ib=x(0);e=ue-224|0;ue=e;k=e+216|0;f=k;q[f>>2]=0;q[f+4>>2]=0;q[e+208>>2]=0;q[e+212>>2]=0;s=e+200|0;f=s;q[f>>2]=0;q[f+4>>2]=0;q[e+192>>2]=0;q[e+196>>2]=0;q[e+184>>2]=0;q[e+188>>2]=0;q[e+176>>2]=0;q[e+180>>2]=0;f=q[b+12>>2];a:{if(f>>>0>3){break a}if(f-2){i=e+80|0;b:{if(r[b+236|0]){f=q[c+44>>2];q[e+152>>2]=q[c+40>>2];q[e+156>>2]=f;f=q[c+36>>2];q[e+144>>2]=q[c+32>>2];q[e+148>>2]=f;f=q[c+28>>2];q[e+136>>2]=q[c+24>>2];q[e+140>>2]=f;f=q[c+20>>2];q[e+128>>2]=q[c+16>>2];q[e+132>>2]=f;f=q[c+4>>2];q[e+112>>2]=q[c>>2];q[e+116>>2]=f;f=q[c+12>>2];q[e+120>>2]=q[c+8>>2];q[e+124>>2]=f;vu(e+112|0,d,u[c+208>>2]);d=q[b+12>>2];f=q[a+20>>2];n[q[q[f>>2]+88>>2]](e+80|0,f);ru(d,e+176|0,e+32|0,e,e+160|0,e+112|0,nt(e+96|0,e+80|0));d=a+20|0;break b}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e+96|0,d);ru(f,e+176|0,e+32|0,e,e+160|0,c,nt(e+112|0,e+96|0));d=a+20|0}f=q[d>>2];n[q[q[f>>2]+88>>2]](i,f);nt(e+112|0,e+80|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](e- -64|0,d);uu(e+176|0,nt(e+96|0,e- -64|0),e+32|0,q[b+36>>2],r[b+20|0]);$s(e+112|0,e+32|0);d=e+200|0;g=u[d>>2];f=e+204|0;ia=u[f>>2];i=e+196|0;j=u[i>>2];h=u[e+148>>2];L=u[e+132>>2];C=u[e+152>>2];M=u[e+136>>2];o=u[e+184>>2];da=u[e+188>>2];l=u[e+176>>2];t=u[e+180>>2];F=u[e+144>>2];I=u[e+112>>2];G=u[e+128>>2];v=u[e+192>>2];D=u[e+116>>2];N=u[e+120>>2];m=e+220|0;Q=u[e+156>>2];p=e+216|0;J=u[p>>2];U=u[e+140>>2];y=e+212|0;z=u[y>>2];X=u[e+124>>2];H=u[e+208>>2];u[m>>2]=x(Q*J)+x(x(U*z)+x(u[m>>2]+x(X*H)));u[p>>2]=x(C*J)+x(x(M*z)+x(x(N*H)+x(0)));u[y>>2]=x(h*J)+x(x(L*z)+x(x(D*H)+x(0)));u[f>>2]=x(Q*g)+x(x(U*j)+x(ia+x(X*v)));u[d>>2]=x(C*g)+x(x(M*j)+x(x(N*v)+x(0)));u[i>>2]=x(h*g)+x(x(L*j)+x(x(D*v)+x(0)));u[e+208>>2]=x(F*J)+x(x(G*z)+x(x(I*H)+x(0)));u[e+192>>2]=x(F*g)+x(x(G*j)+x(x(I*v)+x(0)));u[e+188>>2]=x(x(da+x(l*X))+x(t*U))+x(o*Q);u[e+184>>2]=x(x(x(l*N)+x(0))+x(t*M))+x(o*C);u[e+180>>2]=x(x(x(l*D)+x(0))+x(t*L))+x(o*h);u[e+176>>2]=x(x(x(l*I)+x(0))+x(t*G))+x(o*F);break a}f=q[c+44>>2];q[e+216>>2]=q[c+40>>2];q[e+220>>2]=f;f=q[c+36>>2];q[e+208>>2]=q[c+32>>2];q[e+212>>2]=f;f=q[c+28>>2];q[e+200>>2]=q[c+24>>2];q[e+204>>2]=f;f=q[c+20>>2];q[e+192>>2]=q[c+16>>2];q[e+196>>2]=f;f=q[c+4>>2];q[e+176>>2]=q[c>>2];q[e+180>>2]=f;f=q[c+12>>2];q[e+184>>2]=q[c+8>>2];q[e+188>>2]=f;if(r[b+236|0]){vu(e+176|0,d,u[c+208>>2])}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e,d);nt(e+112|0,e);d=q[a+20>>2];n[q[q[d>>2]+92>>2]](e+160|0,d);su(e+176|0,nt(e+32|0,e+160|0),q[b+36>>2],r[b+20|0])}U=u[c+112>>2];l=u[c+68>>2];t=u[c+52>>2];j=u[c+116>>2];ja=u[c+108>>2];C=u[c+104>>2];Da=u[b+28>>2];Y=q[c+96>>2];ka=q[c+100>>2];la=q[c+92>>2];fb=q[a+120>>2];gb=q[a+28>>2];X=u[c+84>>2];o=u[c+80>>2];z=u[c+88>>2];ea=u[c+64>>2];W=u[c+48>>2];ma=q[b+16>>2];q[e+112>>2]=q[c+120>>2];q[e+116>>2]=q[c+136>>2];q[e+120>>2]=q[c+152>>2];q[e+124>>2]=q[c+168>>2];q[e+128>>2]=q[c+184>>2];g=x(ma|0);u[e+32>>2]=u[c+128>>2]/g;u[e+36>>2]=u[c+144>>2]/g;u[e+40>>2]=u[c+160>>2]/g;u[e+44>>2]=u[c+176>>2]/g;u[e+48>>2]=u[c+192>>2]/g;F=u[c+132>>2];na=u[c+124>>2];I=u[c+148>>2];oa=u[c+140>>2];G=u[c+164>>2];pa=u[c+156>>2];H=u[c+180>>2];qa=u[c+172>>2];Q=u[c+196>>2];ra=u[c+188>>2];q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e>>2]=0;q[e+4>>2]=0;v=x(x(x(o+x(90))/x(180))*x(3.141592025756836));h=AG(v);T=zG(v);v=u[k>>2];L=u[e+220>>2];M=u[s>>2];D=u[e+204>>2];N=u[e+184>>2];J=u[e+188>>2];fa=ma<<3;Z=u[e+212>>2];_=u[e+196>>2];Ia=u[b+32>>2];sa=x(X-o);Ja=x(sa/g);o=x(x(Ja/x(180))*x(3.141592025756836));ta=AG(o);ua=zG(o);c:{if((ma|0)<1){break c}Ka=x(ja+j);La=x(ja+x(j*x(.5)));Ma=x(ra+Q);Na=x(qa+H);Oa=x(pa+G);Pa=x(oa+I);Qa=x(na+F);Ra=x(ra+x(Q*x(.5)));Sa=x(qa+x(H*x(.5)));Ta=x(pa+x(G*x(.5)));Ua=x(oa+x(I*x(.5)));Va=x(na+x(F*x(.5)));hb=x(x(1)/g);ib=x(U/g);d=Da>x(0);Ea=d?0:Y&-16777216;Fa=d?0:ka&-16777216;Ga=d?0:la&-16777216;g=x(W*h);$=u[e+180>>2];j=x(W*T);aa=u[e+176>>2];va=x(x(t*N)+J);F=x(x(g*$)+x(x(j*aa)+va));ba=u[e+192>>2];wa=x(x(t*M)+D);I=x(x(g*_)+x(x(j*ba)+wa));ca=u[e+208>>2];xa=x(x(t*v)+L);G=x(x(g*Z)+x(x(j*ca)+xa));o=x(ea*h);H=x(ea*T);Wa=x(x(l*N)+J);g=x(x(o*$)+x(x(H*aa)+Wa));Xa=x(x(l*M)+D);j=x(x(o*_)+x(x(H*ba)+Xa));Ya=x(x(l*v)+L);o=x(x(o*Z)+x(x(H*ca)+Ya));ya=x(ea+x(x(W-ea)*z));H=x(h*ya);Q=x(T*ya);z=x(l+x(z*x(t-l)));Za=x(x(z*N)+J);l=x(x(H*$)+x(x(Q*aa)+Za));_a=x(x(z*M)+D);t=x(x(H*_)+x(x(Q*ba)+_a));$a=x(x(z*v)+L);v=x(x(H*Z)+x(x(Q*ca)+$a));ab=x(sa-Ia);L=x(0);while(1){bb=x(ua*h);cb=x(ta*T);M=x(bb+cb);D=x(ya*M);N=x(Z*D);db=x(ua*T);eb=x(ta*h);T=x(db-eb);h=x(ya*T);J=x($a+x(ca*h));z=x(_*D);U=x($*D);D=x(ea*T);da=x(Ya+x(ca*D));R=x(Xa+x(ba*D));za=x(Wa+x(aa*D));D=x(W*T);Aa=x(xa+x(ca*D));ga=x(wa+x(ba*D));Ba=x(va+x(aa*D));H=x(N+J);Q=x(z+x(_a+x(ba*h)));U=x(U+x(Za+x(aa*h)));h=x(ea*M);X=x(x(Z*h)+da);ia=x(x(_*h)+R);da=x(x($*h)+za);h=x(W*M);D=x(x(Z*h)+Aa);N=x(x(_*h)+ga);J=x(x($*h)+Ba);S=q[c+96>>2];f=S>>>24|0;V=q[c+100>>2];k=V>>>24|0;O=q[c+92>>2];d=O>>>24|0;p=d;h=x(Ja+ha);ha=hab)){break d}h=x(x(1)-x(x(ha-ab)/Ia))}e:{if(h==x(1)){break e}z=x(h*x(f>>>0));f:{if(z=x(0)){f=~~z>>>0;break f}f=0}z=x(h*x(k>>>0));g:{if(z=x(0)){k=~~z>>>0;break g}k=0}h=x(h*x(d>>>0));if(h=x(0)){p=~~h>>>0;break e}p=0}y=q[a+120>>2];yp(e+160|0);u[e+168>>2]=G;u[e+160>>2]=F;u[e+164>>2]=I;s=q[e+164>>2];d=w(Ha,fb)+gb|0;q[d>>2]=q[e+160>>2];q[d+4>>2]=s;q[d+8>>2]=q[e+168>>2];u[d+28>>2]=ja;u[d+24>>2]=C;q[d+12>>2]=la&16777215|Ga&-16777216;yp(e+160|0);u[e+164>>2]=t;u[e+160>>2]=l;u[e+168>>2]=v;m=q[e+164>>2];s=d+y|0;i=s;q[i>>2]=q[e+160>>2];q[i+4>>2]=m;q[i+8>>2]=q[e+168>>2];u[i+28>>2]=La;u[i+24>>2]=C;q[i+12>>2]=Y&16777215|Ea&-16777216;yp(e+160|0);u[e+168>>2]=D;u[e+160>>2]=J;u[e+164>>2]=N;Y=q[e+164>>2];m=d+(y<<1)|0;i=m;q[i>>2]=q[e+160>>2];q[i+4>>2]=Y;q[i+8>>2]=q[e+168>>2];u[i+28>>2]=ja;z=x(ib+C);u[i+24>>2]=z;Ga=p<<24;la=Ga|O&16777215;q[i+12>>2]=la;yp(e+160|0);u[e+164>>2]=Q;u[e+160>>2]=U;u[e+168>>2]=H;Y=q[e+164>>2];i=d+w(y,3)|0;q[i>>2]=q[e+160>>2];q[i+4>>2]=Y;q[i+8>>2]=q[e+168>>2];u[i+28>>2]=La;u[i+24>>2]=z;Ea=f<<24;Y=Ea|S&16777215;q[i+12>>2]=Y;S=kV(d+(y<<2)|0,s,88);yp(e+160|0);u[e+164>>2]=j;u[e+160>>2]=g;u[e+168>>2]=o;O=q[e+164>>2];p=d+w(y,5)|0;f=p;q[f>>2]=q[e+160>>2];q[f+4>>2]=O;q[f+8>>2]=q[e+168>>2];u[f+28>>2]=Ka;u[f+24>>2]=C;q[f+12>>2]=ka&16777215|Fa&-16777216;O=kV(d+w(y,6)|0,i,88);yp(e+160|0);u[e+164>>2]=ia;u[e+160>>2]=da;u[e+168>>2]=X;f=d+w(y,7)|0;y=q[e+164>>2];q[f>>2]=q[e+160>>2];q[f+4>>2]=y;q[f+8>>2]=q[e+168>>2];u[f+28>>2]=Ka;u[f+24>>2]=z;Fa=k<<24;ka=Fa|V&16777215;q[f+12>>2]=ka;g=u[e+112>>2];j=x(g+u[e+32>>2]);u[e>>2]=j;o=u[e+116>>2];l=x(o+u[e+36>>2]);u[e+4>>2]=l;t=u[e+120>>2];v=x(t+u[e+40>>2]);u[e+8>>2]=v;h=u[e+124>>2];C=x(h+u[e+44>>2]);u[e+12>>2]=C;P=u[e+128>>2];R=x(P+u[e+48>>2]);u[e+16>>2]=R;u[d+76>>2]=ra;u[d+72>>2]=P;u[d+68>>2]=qa;u[d+64>>2]=h;u[d+60>>2]=pa;u[d+56>>2]=t;u[d+52>>2]=oa;u[d+48>>2]=o;u[d+44>>2]=na;u[d+40>>2]=g;u[s+76>>2]=Ra;u[s+72>>2]=P;u[s+68>>2]=Sa;u[s+64>>2]=h;u[s+60>>2]=Ta;u[s+56>>2]=t;u[s+52>>2]=Ua;u[s+48>>2]=o;u[s+44>>2]=Va;u[s+40>>2]=g;u[m+76>>2]=ra;u[m+72>>2]=R;u[m+68>>2]=qa;u[m+64>>2]=C;u[m+60>>2]=pa;u[m+56>>2]=v;u[m+52>>2]=oa;u[m+48>>2]=l;u[m+44>>2]=na;u[m+40>>2]=j;u[i+76>>2]=Ra;u[i+72>>2]=R;u[i+68>>2]=Sa;u[i+64>>2]=C;u[i+60>>2]=Ta;u[i+56>>2]=v;u[i+52>>2]=Ua;u[i+48>>2]=l;u[i+44>>2]=Va;u[i+40>>2]=j;S=kV(S,s,88);u[p+76>>2]=Ma;u[p+72>>2]=P;u[p+68>>2]=Na;u[p+64>>2]=h;u[p+60>>2]=Oa;u[p+56>>2]=t;u[p+52>>2]=Pa;u[p+48>>2]=o;u[p+44>>2]=Qa;u[p+40>>2]=g;V=kV(O,i,80);u[f+76>>2]=Ma;u[f+72>>2]=R;u[f+68>>2]=Na;u[f+64>>2]=C;u[f+60>>2]=Oa;u[f+56>>2]=v;u[f+52>>2]=Pa;u[f+48>>2]=l;u[f+44>>2]=Qa;u[f+40>>2]=j;k=q[c+200>>2];y=q[c+204>>2];q[d+84>>2]=y;q[d+80>>2]=k;q[s+84>>2]=y;q[s+80>>2]=k;q[m+84>>2]=y;q[m+80>>2]=k;q[i+84>>2]=y;q[i+80>>2]=k;q[S+84>>2]=y;q[S+80>>2]=k;q[p+84>>2]=y;q[p+80>>2]=k;q[V+84>>2]=y;q[V+80>>2]=k;q[f+84>>2]=y;q[f+80>>2]=k;k=q[a+120>>2];Cp(e+96|0,p,d);Cp(e+80|0,f,m);nt(e+160|0,e+96|0);v=u[e+168>>2];R=u[e+164>>2];t=u[e+160>>2];nt(e+160|0,e+80|0);o=x(D-G);g=x(J-F);l=x(N-I);j=x(x(1)/x(E(x(x(o*o)+x(x(g*g)+x(l*l))))));za=x(g*j);g=x(W*x(x(ua*M)+x(ta*T)));h=x(W*x(x(ua*T)-x(ta*M)));C=x(x(x($*g)+x(va+x(aa*h)))-J);P=x(x(x(Z*g)+x(xa+x(ca*h)))-D);g=x(x(x(_*g)+x(wa+x(ba*h)))-N);K=x(x(1)/x(E(x(x(P*P)+x(x(C*C)+x(g*g))))));h=x(x(za+x(C*K))*x(.5));ga=u[e+164>>2];Aa=x(l*j);C=x(x(Aa+x(g*K))*x(.5));l=u[e+160>>2];g=x(x(h*ga)-x(C*l));Ba=x(o*j);P=x(x(Ba+x(P*K))*x(.5));o=u[e+168>>2];j=x(x(P*l)-x(h*o));o=x(x(C*o)-x(P*ga));K=F;l=x(W*x(bb-cb));F=x(W*x(eb+db));K=x(K-x(x($*l)+x(va+x(aa*F))));ga=K;G=x(G-x(x(Z*l)+x(xa+x(ca*F))));l=x(I-x(x(_*l)+x(wa+x(ba*F))));K=x(x(1)/x(E(x(x(G*G)+x(x(K*K)+x(l*l))))));F=x(x(x(ga*K)+za)*x(.5));I=x(x(x(l*K)+Aa)*x(.5));l=x(x(R*F)-x(t*I));G=x(x(x(G*K)+Ba)*x(.5));t=x(x(t*G)-x(F*v));v=x(x(I*v)-x(G*R));if(!r[b+20|0]){j=x(-j);o=x(-o);l=x(-l);t=x(-t);v=x(-v);g=x(-g)}K=t;t=x(x(1)/x(E(x(x(l*l)+x(x(t*t)+x(v*v))))));R=x(B(x(A(x(x(x(x(x(K*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));h:{if(R=x(0)){f=~~R>>>0;break h}f=0}i=f<<8;f=d;v=x(B(x(A(x(x(x(x(x(v*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));i:{if(v=x(0)){p=~~v>>>0;break i}p=0}p=p|i;l=x(B(x(A(x(x(x(x(x(l*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(l=x(0)){i=~~l>>>0;break j}i=0}s=p|i<<16|-16777216;q[f+16>>2]=s;i=d+k|0;q[i+16>>2]=s;t=j;j=x(x(1)/x(E(x(x(g*g)+x(x(j*j)+x(o*o))))));l=x(B(x(A(x(x(x(x(x(t*j)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(l=x(0)){f=~~l>>>0;break k}f=0}p=f<<8;f=d+(k<<1)|0;O=f;o=x(B(x(A(x(x(x(x(x(o*j)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(o=x(0)){m=~~o>>>0;break l}m=0}m=m|p;g=x(B(x(A(x(x(x(x(x(g*j)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(g=x(0)){p=~~g>>>0;break m}p=0}m=m|p<<16|-16777216;q[O+16>>2]=m;p=d+w(k,3)|0;q[p+16>>2]=m;y=d+(k<<2)|0;q[y+16>>2]=s;S=d+w(k,5)|0;q[S+16>>2]=s;s=d+w(k,6)|0;q[s+16>>2]=m;V=d+w(k,7)|0;q[V+16>>2]=m;g=x(x(1)/x(E(x(x(G*G)+x(x(F*F)+x(I*I))))));j=x(B(x(A(x(x(x(x(x(I*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(j=x(0)){k=~~j>>>0;break n}k=0}O=k<<8;k=d;j=x(B(x(A(x(x(x(x(x(F*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));o:{if(j=x(0)){m=~~j>>>0;break o}m=0}O=m|O;g=x(B(x(A(x(x(x(x(x(G*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));p:{if(g=x(0)){m=~~g>>>0;break p}m=0}m=O|m<<16|-16777216;q[k+20>>2]=m;q[i+20>>2]=m;g=x(x(1)/x(E(x(x(P*P)+x(x(h*h)+x(C*C))))));j=x(B(x(A(x(x(x(x(x(C*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));q:{if(j=x(0)){k=~~j>>>0;break q}k=0}k=k<<8;O=f;j=x(B(x(A(x(x(x(x(x(h*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));r:{if(j=x(0)){Ca=~~j>>>0;break r}Ca=0}Ca=Ca|k;g=x(B(x(A(x(x(x(x(x(P*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));s:{if(g=x(0)){k=~~g>>>0;break s}k=0}k=Ca|k<<16|-16777216;q[O+20>>2]=k;q[p+20>>2]=k;q[y+20>>2]=m;q[S+20>>2]=m;q[s+20>>2]=k;q[V+20>>2]=k;q[d+36>>2]=0;u[d+32>>2]=L;q[i+36>>2]=1056964608;u[i+32>>2]=L;q[f+36>>2]=0;g=x(hb+L);u[f+32>>2]=g;q[p+36>>2]=1056964608;u[p+32>>2]=g;q[y+36>>2]=1056964608;u[y+32>>2]=L;q[S+36>>2]=1065353216;u[S+32>>2]=L;q[s+36>>2]=1056964608;u[s+32>>2]=g;q[V+36>>2]=1065353216;u[V+32>>2]=g;q[e+128>>2]=q[e+16>>2];d=q[e+4>>2];q[e+112>>2]=q[e>>2];q[e+116>>2]=d;d=q[e+12>>2];q[e+120>>2]=q[e+8>>2];q[e+124>>2]=d;h=M;C=z;L=g;G=D;I=N;F=J;o=X;j=ia;g=da;v=H;t=Q;l=U;Ha=Ha+8|0;if((Ha|0)<(fa|0)){continue}break}d=q[a+124>>2];if((d|0)<=0){break c}f=q[a+120>>2];k=c+212|0;s=kV(q[a+28>>2]+40|0,k,d<<2);if((fa|0)<2){break c}d=1;while(1){kV(s+w(d,f)|0,k,q[a+124>>2]<<2);d=d+1|0;if((fa|0)!=(d|0)){continue}break}}f=q[a+128>>2];t:{if((f|0)<1){break t}d=1;if((ma|0)<1){break t}k=q[a+120>>2];c=c+228|0;f=kV((q[a+28>>2]+(q[a+124>>2]<<2)|0)+40|0,c,f<<2);if((fa|0)<2){break t}while(1){kV(f+w(d,k)|0,c,q[a+128>>2]<<2);d=d+1|0;if((fa|0)!=(d|0)){continue}break}}q[a+32>>2]=q[a+32>>2]+(q[b+16>>2]<<1);q[a+28>>2]=q[a+28>>2]+w(q[a+120>>2],fa);ue=e+224|0}function lh(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=0,k=0,l=0,m=0,t=0,v=0,w=x(0),y=0,z=0,A=0;j=ue-48|0;ue=j;g=q[a+4>>2];e=a;if(c){c=(n[q[q[c>>2]+16>>2]](c)|0)+1|0}else{c=0}q[e+8>>2]=c;c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;a:{if((e|0)==-1){q[a+2196>>2]=0;q[a+2200>>2]=0;q[a+3360>>2]=-1;q[a+60>>2]=1;c=a+2204|0;q[c>>2]=0;q[c+4>>2]=0;c=a+2212|0;q[c>>2]=0;q[c+4>>2]=0;c=a+2220|0;q[c>>2]=0;q[c+4>>2]=0;break a}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=10){c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;o[a+28|0]=(e|0)!=0}c=q[a+4>>2];b:{if((n[q[q[c>>2]+36>>2]](c)|0)>=13){c=q[b>>2];q[a+3360>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2]+4|0;q[b>>2]=c;break b}q[a+3360>>2]=-1;c=q[b>>2]}e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;c:{if((n[q[q[g>>2]+36>>2]](g)|0)>=14){kV(a+32|0,q[b>>2],e);q[b>>2]=e+q[b>>2];break c}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=9){kV(a+60|0,q[b>>2],e);q[b>>2]=e+q[b>>2];break c}f=q[b>>2];c=kV(j,f,e);q[b>>2]=e+f;q[a+60>>2]=q[c>>2];q[a- -64>>2]=q[c+4>>2];q[a+68>>2]=q[c+8>>2];q[a+72>>2]=q[c+12>>2];q[a+76>>2]=q[c+16>>2];q[a+80>>2]=q[c+20>>2];q[a+84>>2]=q[c+24>>2];e=q[c+32>>2];q[a+88>>2]=q[c+28>>2];q[a+92>>2]=e;e=q[c+36>>2];q[a+100>>2]=e;q[a+96>>2]=e;c=q[c+40>>2];q[a+108>>2]=c;q[a+104>>2]=c}if(!((n[q[q[g>>2]+36>>2]](g)|0)<1600|(q[a- -64>>2]&-2)!=4)){c=q[b>>2];e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);f=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+112|0]=f;o[a+113|0]=f>>>8;o[a+114|0]=f>>>16;o[a+115|0]=f>>>24;o[a+116|0]=e;o[a+117|0]=e>>>8;o[a+118|0]=e>>>16;o[a+119|0]=e>>>24;e=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[a+120|0]=c;o[a+121|0]=c>>>8;o[a+122|0]=c>>>16;o[a+123|0]=c>>>24;o[a+124|0]=e;o[a+125|0]=e>>>8;o[a+126|0]=e>>>16;o[a+127|0]=e>>>24;q[b>>2]=q[b>>2]+16}d:{if((n[q[q[g>>2]+36>>2]](g)|0)<1700){break d}e=q[b>>2];c=r[e|0];e=e+1|0;q[b>>2]=e;if(c&1){p[a+128>>1]=r[e|0]|r[e+1|0]<<8;e=q[b>>2]+2|0;q[b>>2]=e}if(c&2){p[a+130>>1]=r[e|0]|r[e+1|0]<<8;e=q[b>>2]+2|0;q[b>>2]=e}if(!(c&4)){break d}p[a+132>>1]=r[e|0]|r[e+1|0]<<8;q[b>>2]=q[b>>2]+2}if((n[q[q[g>>2]+36>>2]](g)|0)>=1702){c=q[b>>2];e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[a+136>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+140>>2]=e;q[b>>2]=q[b>>2]+8}c=a+180|0;mh(c,b,g);if(fg(g)){e=c;c=q[a+4>>2];nh(e,x(n[q[q[c>>2]+32>>2]](c)),a+3364|0)}if((n[q[q[g>>2]+36>>2]](g)|0)>=1500){Up(a+496|0,b,n[q[q[g>>2]+36>>2]](g)|0)}e:{if((n[q[q[g>>2]+36>>2]](g)|0)>1600){break e}q[j>>2]=0;c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[j>>2]=e;q[b>>2]=c+4;if(e>>>0>2){break e}f:{switch(e-1|0){default:e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=c+8|0;q[b>>2]=c;kV(j+16|0,c,e);q[b>>2]=c+e;break e;case 0:e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=c+8|0;q[b>>2]=c;f=kV(j+16|0,c,e);q[b>>2]=c+e;Vp(a+496|0,f);break e;case 1:break f}}e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=c+8|0;q[b>>2]=c;kV(j+16|0,c,e);q[b>>2]=c+e;Wp(a+496|0,u[j+16>>2],u[j+20>>2],u[j+24>>2],u[j+28>>2])}m=a+1344|0;Ps(m,b,n[q[q[g>>2]+36>>2]](g)|0);oh(a+1792|0,b,n[q[q[g>>2]+36>>2]](g)|0);t=a+2196|0;c=q[a+4>>2];ph(t,b,n[q[q[c>>2]+36>>2]](c)|0);g:{if(!fg(g)){break g}c=q[a+2200>>2];if(c>>>0>4){break g}h:{switch(c-1|0){default:c=a+2216|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2220|0;u[c>>2]=h*u[c>>2];c=a+2224|0;u[c>>2]=h*u[c>>2];c=a+2204|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2208|0;u[c>>2]=h*u[c>>2];c=a+2212|0;u[c>>2]=h*u[c>>2];break g;case 3:c=a+2244|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2248|0;u[c>>2]=h*u[c>>2];c=a+2252|0;u[c>>2]=h*u[c>>2];c=a+2232|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2236|0;u[c>>2]=h*u[c>>2];c=a+2240|0;u[c>>2]=h*u[c>>2];c=a+2220|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2224|0;u[c>>2]=h*u[c>>2];c=a+2228|0;u[c>>2]=h*u[c>>2];c=a+2208|0;e=q[a+4>>2];h=x(n[q[q[e>>2]+32>>2]](e));u[c>>2]=h*u[c>>2];c=a+2212|0;u[c>>2]=h*u[c>>2];c=a+2216|0;u[c>>2]=h*u[c>>2];c=a+2260|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w;c=a+2256|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w;break g;case 0:c=a+2208|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w;c=a+2204|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w;break g;case 1:break g;case 2:break h}}c=a+2212|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w;c=a+2208|0;e=q[a+4>>2];v=c,w=x(x(n[q[q[e>>2]+32>>2]](e))*u[c>>2]),u[v>>2]=w}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=12){c=q[b>>2];q[a+2268>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=c+8;o[a+2272|0]=(e|0)>0;e=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);q[b>>2]=c+12;o[a+2273|0]=(e|0)>0;c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=15){c=q[b>>2];q[a+2300>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+2304>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];i:{if((n[q[q[c>>2]+36>>2]](c)|0)<=12){c=q[b>>2];break i}c=q[b>>2];q[a+2276>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+2280>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2]+4|0;q[b>>2]=c}e=a+2284|0;q[e>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];v=a,w=x(x(n[q[q[c>>2]+32>>2]](c))*u[a+2268>>2]),u[v+2268>>2]=w;c=q[a+4>>2];v=e,w=x(x(n[q[q[c>>2]+32>>2]](c))*u[e>>2]),u[v>>2]=w;if(!!(u[a+2304>>2]>2];v=a,w=x(x(n[q[q[c>>2]+32>>2]](c))*u[a+2304>>2]),u[v+2304>>2]=w}q[a+2288>>2]=q[a+2268>>2];p[a+2292>>1]=s[a+2272>>1];q[a+2296>>2]=q[a+2276>>2]}j:{if((n[q[q[g>>2]+36>>2]](g)|0)>=1704){c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+144>>2]=e;c=q[b>>2];q[b>>2]=c+4;q[a+148>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2]+4|0;q[b>>2]=c;e=e+ -1|0;if(e>>>0>2){break j}k:{switch(e-1|0){default:f=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=a+152|0;i=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[e|0]=i;o[e+1|0]=i>>>8;o[e+2|0]=i>>>16;o[e+3|0]=i>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;i=a+160|0;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[i|0]=c;o[i+1|0]=c>>>8;o[i+2|0]=c>>>16;o[i+3|0]=c>>>24;c=q[b>>2];q[b>>2]=c+12;k=a+172|0;f=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);o[k|0]=f;o[k+1|0]=f>>>8;o[k+2|0]=f>>>16;o[k+3|0]=f>>>24;l=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);f=a+164|0;c=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);o[f|0]=c;o[f+1|0]=c>>>8;o[f+2|0]=c>>>16;o[f+3|0]=c>>>24;o[f+4|0]=l;o[f+5|0]=l>>>8;o[f+6|0]=l>>>16;o[f+7|0]=l>>>24;c=q[b>>2];q[b>>2]=c+12;q[a+176>>2]=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);q[b>>2]=q[b>>2]+4;h=x(n[q[q[g>>2]+32>>2]](g));u[e>>2]=h*u[e>>2];c=a+156|0;u[c>>2]=h*u[c>>2];u[i>>2]=h*u[i>>2];h=x(n[q[q[g>>2]+32>>2]](g));u[f>>2]=h*u[f>>2];c=a+168|0;u[c>>2]=h*u[c>>2];u[k>>2]=h*u[k>>2];break j;case 0:f=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=a+152|0;i=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[e|0]=i;o[e+1|0]=i>>>8;o[e+2|0]=i>>>16;o[e+3|0]=i>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=a+160|0;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[f|0]=c;o[f+1|0]=c>>>8;o[f+2|0]=c>>>16;o[f+3|0]=c>>>24;c=q[b>>2];q[b>>2]=c+12;i=a+164|0;q[i>>2]=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);q[b>>2]=q[b>>2]+4;c=a+156|0;h=Hp(zp(j,u[e>>2],u[c>>2],u[f>>2]));u[e>>2]=u[e>>2]/h;u[c>>2]=u[c>>2]/h;u[f>>2]=u[f>>2]/h;v=i,w=x(x(n[q[q[g>>2]+32>>2]](g))*u[i>>2]),u[v>>2]=w;break j;case 1:break k}}f=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=a+152|0;i=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[e|0]=i;o[e+1|0]=i>>>8;o[e+2|0]=i>>>16;o[e+3|0]=i>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=a+160|0;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[f|0]=c;o[f+1|0]=c>>>8;o[f+2|0]=c>>>16;o[f+3|0]=c>>>24;c=q[b>>2];q[b>>2]=c+12;i=a+164|0;q[i>>2]=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+168>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4;h=x(n[q[q[g>>2]+32>>2]](g));u[e>>2]=h*u[e>>2];c=a+156|0;u[c>>2]=h*u[c>>2];u[f>>2]=h*u[f>>2];v=i,w=x(x(n[q[q[g>>2]+32>>2]](g))*u[i>>2]),u[v>>2]=w;break j}q[a+144>>2]=0;q[a+148>>2]=1}l:{if(q[q[d>>2]+8>>2]){break l}c=a+3372|0;u[c>>2]=-u[c>>2];c=q[a+180>>2];if(c>>>0<=2){m:{n:{switch(c-1|0){default:c=a+196|0;break m;case 0:c=a+232|0;u[c>>2]=-u[c>>2];c=a+244|0;u[c>>2]=-u[c>>2];c=a+256|0;u[c>>2]=-u[c>>2];c=a+268|0;u[c>>2]=-u[c>>2];c=a+280|0;u[c>>2]=-u[c>>2];c=a+292|0;break m;case 1:break n}}c=a+340|0;u[c>>2]=-u[c>>2];c=a+352|0;u[c>>2]=-u[c>>2];c=a+364|0;u[c>>2]=-u[c>>2];c=a+376|0}u[c>>2]=-u[c>>2]}c=a+3388|0;u[c>>2]=-u[c>>2];c=a+3392|0;u[c>>2]=-u[c>>2];Qs(m);qh(t);c=q[a+144>>2]+ -1|0;if(c>>>0>2){break l}o:{switch(c-1|0){default:c=a+160|0;u[c>>2]=-u[c>>2];break l;case 0:c=a+160|0;u[c>>2]=-u[c>>2];break l;case 1:break o}}c=a+160|0;u[c>>2]=-u[c>>2]}u[a+3376>>2]=x(1)/u[a+3364>>2];u[a+3380>>2]=x(1)/u[a+3368>>2];u[a+3384>>2]=x(1)/u[a+3372>>2];u[a+3400>>2]=x(1)/u[a+3388>>2];u[a+3404>>2]=x(1)/u[a+3392>>2];u[a+3408>>2]=x(1)/u[a+3396>>2];u[a+3424>>2]=x(1)/u[a+3412>>2];u[a+3428>>2]=x(1)/u[a+3416>>2];u[a+3432>>2]=x(1)/u[a+3420>>2];c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=3){c=q[a+4>>2];rh(a+2308|0,b,n[q[q[c>>2]+36>>2]](c)|0)}c=q[a+4>>2];p:{if((n[q[q[c>>2]+36>>2]](c)|0)<1600){break p}c=q[a+4>>2];q:{if((n[q[q[c>>2]+36>>2]](c)|0)<=1604){c=a+2652|0;o[c|0]=1;break q}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;c=a+2652|0;o[c|0]=(d|0)==1;if((d|0)!=1){break p}}d=q[a+4>>2];sh(a+3116|0,b,n[q[q[d>>2]+36>>2]](d)|0);q[a+2640>>2]=q[a+3276>>2];e=a+3280|0;g=q[e+4>>2];d=a+2644|0;q[d>>2]=q[e>>2];q[d+4>>2]=g;o[c|0]=q[a+3116>>2]?1:u[a+3124>>2]!=x(0)}c=q[a+4>>2];r:{if((n[q[q[c>>2]+36>>2]](c)|0)<1602){break r}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=c+4|0;q[b>>2]=c;o[a+3288|0]=(d|0)==1;if((d|0)!=1){break r}d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+3292|0]=e;o[a+3293|0]=e>>>8;o[a+3294|0]=e>>>16;o[a+3295|0]=e>>>24;o[a+3296|0]=d;o[a+3297|0]=d>>>8;o[a+3298|0]=d>>>16;o[a+3299|0]=d>>>24;e=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);d=a+3300|0;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[d|0]=c;o[d+1|0]=c>>>8;o[d+2|0]=c>>>16;o[d+3|0]=c>>>24;o[d+4|0]=e;o[d+5|0]=e>>>8;o[d+6|0]=e>>>16;o[d+7|0]=e>>>24;q[b>>2]=q[b>>2]+16}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=1603){c=q[b>>2];q[a+2656>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=1604){c=q[b>>2];q[a+2660>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+2664>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];y=a,z=b,A=n[q[q[c>>2]+28>>2]](c)|0,v=q[q[a>>2]+52>>2],n[v](y|0,z|0,A|0);c=a+2512|0;d=q[a+4>>2];v=c,w=x(x(n[q[q[d>>2]+32>>2]](d))*u[c>>2]),u[v>>2]=w;c=a+2468|0;d=q[a+4>>2];v=c,w=x(x(n[q[q[d>>2]+32>>2]](d))*u[c>>2]),u[v>>2]=w;c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<1){break a}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3308>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if((d|0)!=1){break a}q[a+3312>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;e=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);d=a+3316|0;q[d>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[d+4>>2]=e;c=q[b>>2];q[b>>2]=c+8;e=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);d=a+3324|0;q[d>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);q[d+4>>2]=e;c=q[b>>2];q[b>>2]=c+8;q[a+3332>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);c=q[b>>2];q[b>>2]=c+4;e=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);d=a+3336|0;q[d>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[d+4>>2]=e;c=q[b>>2];q[b>>2]=c+8;q[a+3344>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);c=q[b>>2];q[b>>2]=c+4;e=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);d=a+3348|0;q[d>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[d+4>>2]=e;q[b>>2]=q[b>>2]+8}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;c=q[a+16>>2];e=q[a+12>>2];g=c-e>>2;s:{if(d>>>0>g>>>0){th(a+12|0,d-g|0);e=q[a+12>>2];c=q[a+16>>2];break s}if(d>>>0>=g>>>0){break s}c=(d<<2)+e|0;q[a+16>>2]=c}if((c|0)!=(e|0)){c=0;while(1){d=uh(q[a+4>>2],a,b);q[q[a+12>>2]+(c<<2)>>2]=d;c=c+1|0;if(c>>>0>2]-q[a+12>>2]>>2>>>0){continue}break}}ue=j+48|0}function px(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,p=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;l=ue-272|0;ue=l;a:{if(q[a+192>>2]==q[a+188>>2]){break a}m=q[i+20>>2];if((m|0)<0){break a}b:{if(r[i+65|0]){p=q[i+4>>2];n[q[q[p>>2]+128>>2]](l+160|0,p,m);break b}p=q[i+4>>2];n[q[q[p>>2]+92>>2]](l+160|0,p,m)}v=q[l+160>>2];if(!v){break a}y=a+364|0;c:{d:{if(!(!r[a+477|0]|j)){m=n[q[q[b>>2]+136>>2]](b)|0;if(m){if(!n[q[q[m>>2]+8>>2]](m,b)){break c}}p=q[y>>2];if(!q[n[q[q[b>>2]+196>>2]](b)>>2]){break c}s=n[q[q[b>>2]+196>>2]](b)|0;m=((q[a+480>>2]<<2)+a|0)+380|0;t=q[s>>2];if(t){n[q[q[t>>2]>>2]](t)|0}t=(p|0)==5;A=(p|0)==2;p=q[m>>2];if(p){n[q[q[p>>2]+8>>2]](p)|0;q[m>>2]=0}q[m>>2]=q[s>>2];p=t|A;break d}m=q[y>>2];p=(m|0)==2|(m|0)==5}q[l+264>>2]=0;q[l+252>>2]=0;q[l+256>>2]=0;q[l+260>>2]=0;q[l+244>>2]=0;q[l+248>>2]=0;q[l+240>>2]=1065353216;Jv(q[b+4>>2],l+264|0,l+240|0);if(r[a+476|0]){e:{f:{g:{m=q[l+264>>2];if(m){s=q[i+40>>2];if(u[s+180>>2]!=x(0)|u[s+184>>2]!=x(0)|(q[y>>2]==6|u[s+188>>2]!=x(0))){break g}}Hv(l+160|0,q[b+4>>2],0);m=q[l+160>>2];q[l+160>>2]=0;s=q[l+264>>2];h:{if(!s){q[l+264>>2]=m;break h}n[q[q[s>>2]+8>>2]](s)|0;q[l+264>>2]=m;s=q[l+160>>2];if(!s){break h}n[q[q[s>>2]+8>>2]](s)|0;q[l+160>>2]=0;m=q[l+264>>2]}s=((q[a+484>>2]<<2)+a|0)+380|0;if(!m){break e}break f}s=((q[a+484>>2]<<2)+a|0)+380|0}n[q[q[m>>2]>>2]](m)|0}m=q[s>>2];if(m){n[q[q[m>>2]+8>>2]](m)|0;q[s>>2]=0}q[s>>2]=q[l+264>>2]}m=q[y>>2];i:{j:{k:{l:{t=q[q[i+40>>2]+40>>2];m:{n:{if(!t){break n}s=6;if((m|0)!=6){break n}m=q[t>>2];if((m|0)<0){break m}s=q[i+4>>2];n[q[q[s>>2]+104>>2]](l+160|0,s,m);m=q[l+160>>2];if(m){break l}m=q[y>>2]}if(m+ -3>>>0<=2){break k}s=m}e=0;if(p){break i}h=(s|0)==1?f:g;break j}n[q[q[m>>2]+8>>2]](m)|0;c=q[i+4>>2];n[q[q[c>>2]+104>>2]](l+160|0,c,q[t>>2]);z=q[l+160>>2];if(!(j|(!z|!r[z+25|0]))){h=q[z+80>>2];e=1;break i}h=q[z+72>>2];break j}h=e;e=0;if(p){break i}h=(m|0)==4?c:d}e=0}if(h){c=Eu(q[b+80>>2]);d=r[i+8|0]|r[c|0]&-2;o[c|0]=d;o[c|0]=d&253|r[i+9|0]<<1;q[c+4>>2]=q[q[i+40>>2]+44>>2];q[c+8>>2]=q[i+16>>2];n[q[q[b>>2]+228>>2]](l+160|0,b);f=q[l+160>>2];d=q[l+164>>2];o:{if(!d){break o}g=q[d+4>>2];q[d+4>>2]=g+ -1;if(g){break o}n[q[q[d>>2]+8>>2]](d);WS(d)}p:{if(f){n[q[q[b>>2]+228>>2]](l+160|0,b);q[c+4>>2]=q[q[l+160>>2]+8>>2];d=q[l+164>>2];if(!d){break p}f=q[d+4>>2];q[d+4>>2]=f+ -1;if(f){break p}n[q[q[d>>2]+8>>2]](d);WS(d);break p}if((n[q[q[b>>2]+160>>2]](b)|0)!=1){break p}q[c+4>>2]=0}if(e){q[c+4>>2]=1}Sy(b,h);e=0;d=q[a+376>>2];if((d|0)>0){while(1){f=e<<2;g=f+c|0;f=a+f|0;q[g+12>>2]=q[f+412>>2];q[g+44>>2]=q[f+444>>2];e=e+1|0;if((d|0)!=(e|0)){continue}break}}Wy(b,h,a+380|0,d);c=q[b+80>>2];n[q[q[c>>2]+8>>2]](c,p);g=n[q[q[h>>2]+28>>2]](h)|0;q[l+236>>2]=0;q[l+232>>2]=0;q:{if(!(!z|!t)){q[l+224>>2]=0;n[q[q[z>>2]>>2]](z)|0;c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}q[l+224>>2]=z;Fx(a,b,h,l+224|0,t,i,j,l+236|0,l+232|0);c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}n[q[q[b>>2]+84>>2]](l+160|0,b);c=q[l+220>>2];d=q[l+216>>2];o[g+56|0]=d;o[g+57|0]=d>>>8;o[g+58|0]=d>>>16;o[g+59|0]=d>>>24;o[g+60|0]=c;o[g+61|0]=c>>>8;o[g+62|0]=c>>>16;o[g+63|0]=c>>>24;c=q[l+212>>2];d=q[l+208>>2];o[g+48|0]=d;o[g+49|0]=d>>>8;o[g+50|0]=d>>>16;o[g+51|0]=d>>>24;o[g+52|0]=c;o[g+53|0]=c>>>8;o[g+54|0]=c>>>16;o[g+55|0]=c>>>24;c=q[l+204>>2];d=q[l+200>>2];o[g+40|0]=d;o[g+41|0]=d>>>8;o[g+42|0]=d>>>16;o[g+43|0]=d>>>24;o[g+44|0]=c;o[g+45|0]=c>>>8;o[g+46|0]=c>>>16;o[g+47|0]=c>>>24;c=q[l+196>>2];d=q[l+192>>2];o[g+32|0]=d;o[g+33|0]=d>>>8;o[g+34|0]=d>>>16;o[g+35|0]=d>>>24;o[g+36|0]=c;o[g+37|0]=c>>>8;o[g+38|0]=c>>>16;o[g+39|0]=c>>>24;c=q[l+188>>2];d=q[l+184>>2];o[g+24|0]=d;o[g+25|0]=d>>>8;o[g+26|0]=d>>>16;o[g+27|0]=d>>>24;o[g+28|0]=c;o[g+29|0]=c>>>8;o[g+30|0]=c>>>16;o[g+31|0]=c>>>24;c=q[l+180>>2];d=q[l+176>>2];o[g+16|0]=d;o[g+17|0]=d>>>8;o[g+18|0]=d>>>16;o[g+19|0]=d>>>24;o[g+20|0]=c;o[g+21|0]=c>>>8;o[g+22|0]=c>>>16;o[g+23|0]=c>>>24;c=q[l+172>>2];d=q[l+168>>2];o[g+8|0]=d;o[g+9|0]=d>>>8;o[g+10|0]=d>>>16;o[g+11|0]=d>>>24;o[g+12|0]=c;o[g+13|0]=c>>>8;o[g+14|0]=c>>>16;o[g+15|0]=c>>>24;c=q[l+164>>2];d=q[l+160>>2];o[g|0]=d;o[g+1|0]=d>>>8;o[g+2|0]=d>>>16;o[g+3|0]=d>>>24;o[g+4|0]=c;o[g+5|0]=c>>>8;o[g+6|0]=c>>>16;o[g+7|0]=c>>>24;break q}if(p){Gx(b,h,i);break q}Hx(b,h,i)}c=q[b+4>>2];d=q[i+68>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[c+316>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+316>>2]=0}q[c+316>>2]=q[i+68>>2];q[q[b+4>>2]+320>>2]=k;j=q[q[a+320>>2]>>2]%(pr(v)|0)|0;r:{s:{e=q[a+320>>2];c=q[a+324>>2];if((e|0)==(c|0)){break s}while(1){if((q[e>>2]%(pr(v)|0)|0)==(j|0)){e=e+4|0;if((c|0)!=(e|0)){continue}break s}break}if(q[a+192>>2]==q[a+188>>2]){break r}e=g- -64|0;c=0;while(1){D=c<<2;j=q[D+q[a+320>>2]>>2]%(pr(v)|0)|0;Ly(b,kr(v,j));d=b;f=d;t:{if((n[q[q[d>>2]+160>>2]](d)|0)==1){p=6;d=mr(v,j);break t}p=3;d=lr(v,j)}My(f,d);Ny(b,h);d=q[a+188>>2]+(c<<6)|0;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);k=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=k;o[e+1|0]=k>>>8;o[e+2|0]=k>>>16;o[e+3|0]=k>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;k=r[d+60|0]|r[d+61|0]<<8|(r[d+62|0]<<16|r[d+63|0]<<24);s=e+56|0;f=s;m=r[d+56|0]|r[d+57|0]<<8|(r[d+58|0]<<16|r[d+59|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+52|0]|r[d+53|0]<<8|(r[d+54|0]<<16|r[d+55|0]<<24);y=e+48|0;f=y;m=r[d+48|0]|r[d+49|0]<<8|(r[d+50|0]<<16|r[d+51|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+44|0]|r[d+45|0]<<8|(r[d+46|0]<<16|r[d+47|0]<<24);t=e+40|0;f=t;m=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);B=e+32|0;f=B;m=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);A=e+24|0;f=A;m=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);C=e+16|0;f=C;m=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[f|0]=m;o[f+1|0]=m>>>8;o[f+2|0]=m>>>16;o[f+3|0]=m>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);m=e+8|0;f=m;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=k;o[f+5|0]=k>>>8;o[f+6|0]=k>>>16;o[f+7|0]=k>>>24;k=c<<4;d=k+q[a+200>>2]|0;q[g+704>>2]=q[d>>2];q[g+708>>2]=q[d+4>>2];q[g+712>>2]=q[d+8>>2];q[g+716>>2]=q[d+12>>2];d=ht(l+160|0,e);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(d,ht(l+96|0,l+32|0),u[q[a+296>>2]>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(d,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);d=q[l+164>>2];f=q[l+180>>2];E=q[l+196>>2];F=q[l+212>>2];G=q[l+168>>2];H=q[l+184>>2];I=q[l+200>>2];J=q[l+216>>2];K=q[l+172>>2];L=q[l+188>>2];M=q[l+204>>2];N=q[l+220>>2];O=q[l+160>>2];P=q[l+176>>2];Q=q[l+192>>2];R=q[l+208>>2];oo(l+96|0);q[l+108>>2]=R;q[l+104>>2]=Q;q[l+100>>2]=P;q[l+96>>2]=O;q[l+156>>2]=N;q[l+152>>2]=M;q[l+148>>2]=L;q[l+144>>2]=K;q[l+140>>2]=J;q[l+136>>2]=I;q[l+132>>2]=H;q[l+128>>2]=G;q[l+124>>2]=F;q[l+120>>2]=E;q[l+116>>2]=f;q[l+112>>2]=d;d=q[l+108>>2];q[m>>2]=q[l+104>>2];q[m+4>>2]=d;d=q[l+116>>2];q[C>>2]=q[l+112>>2];q[C+4>>2]=d;d=q[l+124>>2];q[A>>2]=q[l+120>>2];q[A+4>>2]=d;d=q[l+132>>2];q[B>>2]=q[l+128>>2];q[B+4>>2]=d;d=q[l+140>>2];q[t>>2]=q[l+136>>2];q[t+4>>2]=d;d=q[l+148>>2];q[y>>2]=q[l+144>>2];q[y+4>>2]=d;d=q[l+100>>2];q[e>>2]=q[l+96>>2];q[e+4>>2]=d;d=q[l+156>>2];q[s>>2]=q[l+152>>2];q[s+4>>2]=d;d=D+q[a+308>>2]|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[g+876>>2]=x(d>>>24>>>0)/x(255);u[g+864>>2]=x((d&255)>>>0)/x(255);u[g+872>>2]=x((d>>>16&255)>>>0)/x(255);u[g+868>>2]=x((d>>>8&255)>>>0)/x(255);d=q[l+236>>2];if(d){f=k+q[a+332>>2]|0;q[d>>2]=q[f>>2];q[d+4>>2]=q[f+4>>2];q[d+8>>2]=q[f+8>>2];q[d+12>>2]=q[f+12>>2]}d=q[l+232>>2];if(d){f=k+q[a+344>>2]|0;q[d>>2]=q[f>>2];q[d+4>>2]=q[f+4>>2];q[d+8>>2]=q[f+8>>2];q[d+12>>2]=q[f+12>>2]}n[q[q[h>>2]+36>>2]](h);Py(b,nr(v,j),w(or(v,j),p));c=c+1|0;if(c>>>0>2]-q[a+188>>2]>>6>>>0){continue}break}break r}Ly(b,kr(v,j));c=b;d=c;u:{if((n[q[q[c>>2]+160>>2]](c)|0)==1){s=6;c=mr(v,j);break u}s=3;c=lr(v,j)}My(d,c);Ny(b,h);f=q[a+188>>2];c=q[a+192>>2]-f|0;if(!c){break r}F=g+864|0;G=g+704|0;H=g- -64|0;e=c>>6;while(1){c=e-B|0;k=(c|0)<10?c:10;v:{if((c|0)<1){break v}I=(k|0)>1?k:1;g=0;while(1){m=g+B|0;c=(m<<6)+f|0;f=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);d=(g<<6)+H|0;p=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[d|0]=p;o[d+1|0]=p>>>8;o[d+2|0]=p>>>16;o[d+3|0]=p>>>24;o[d+4|0]=f;o[d+5|0]=f>>>8;o[d+6|0]=f>>>16;o[d+7|0]=f>>>24;f=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);y=d+56|0;e=y;p=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);t=d+48|0;e=t;p=r[c+48|0]|r[c+49|0]<<8|(r[c+50|0]<<16|r[c+51|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+44|0]|r[c+45|0]<<8|(r[c+46|0]<<16|r[c+47|0]<<24);A=d+40|0;e=A;p=r[c+40|0]|r[c+41|0]<<8|(r[c+42|0]<<16|r[c+43|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+36|0]|r[c+37|0]<<8|(r[c+38|0]<<16|r[c+39|0]<<24);C=d+32|0;e=C;p=r[c+32|0]|r[c+33|0]<<8|(r[c+34|0]<<16|r[c+35|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+28|0]|r[c+29|0]<<8|(r[c+30|0]<<16|r[c+31|0]<<24);D=d+24|0;e=D;p=r[c+24|0]|r[c+25|0]<<8|(r[c+26|0]<<16|r[c+27|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);E=d+16|0;e=E;p=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);o[e|0]=p;o[e+1|0]=p>>>8;o[e+2|0]=p>>>16;o[e+3|0]=p>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;f=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);p=d+8|0;e=p;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[e|0]=c;o[e+1|0]=c>>>8;o[e+2|0]=c>>>16;o[e+3|0]=c>>>24;o[e+4|0]=f;o[e+5|0]=f>>>8;o[e+6|0]=f>>>16;o[e+7|0]=f>>>24;c=ht(l+160|0,d);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(c,ht(l+96|0,l+32|0),u[q[a+296>>2]+(m<<2)>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(c,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);c=q[l+164>>2];e=q[l+180>>2];f=q[l+196>>2];J=q[l+212>>2];K=q[l+168>>2];L=q[l+184>>2];M=q[l+200>>2];N=q[l+216>>2];O=q[l+172>>2];P=q[l+188>>2];Q=q[l+204>>2];R=q[l+220>>2];S=q[l+160>>2];T=q[l+176>>2];U=q[l+192>>2];V=q[l+208>>2];oo(l+96|0);q[l+108>>2]=V;q[l+104>>2]=U;q[l+100>>2]=T;q[l+96>>2]=S;q[l+156>>2]=R;q[l+152>>2]=Q;q[l+148>>2]=P;q[l+144>>2]=O;q[l+140>>2]=N;q[l+136>>2]=M;q[l+132>>2]=L;q[l+128>>2]=K;q[l+124>>2]=J;q[l+120>>2]=f;q[l+116>>2]=e;q[l+112>>2]=c;c=q[l+108>>2];q[p>>2]=q[l+104>>2];q[p+4>>2]=c;c=q[l+116>>2];q[E>>2]=q[l+112>>2];q[E+4>>2]=c;c=q[l+124>>2];q[D>>2]=q[l+120>>2];q[D+4>>2]=c;c=q[l+132>>2];q[C>>2]=q[l+128>>2];q[C+4>>2]=c;c=q[l+140>>2];q[A>>2]=q[l+136>>2];q[A+4>>2]=c;c=q[l+148>>2];q[t>>2]=q[l+144>>2];q[t+4>>2]=c;c=q[l+100>>2];q[d>>2]=q[l+96>>2];q[d+4>>2]=c;c=q[l+156>>2];q[y>>2]=q[l+152>>2];q[y+4>>2]=c;c=g<<4;d=c+G|0;f=m<<4;e=f+q[a+200>>2]|0;q[d>>2]=q[e>>2];q[d+4>>2]=q[e+4>>2];q[d+8>>2]=q[e+8>>2];q[d+12>>2]=q[e+12>>2];d=c+F|0;e=q[a+308>>2]+(m<<2)|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);u[d+12>>2]=x(e>>>24>>>0)/x(255);u[d>>2]=x((e&255)>>>0)/x(255);u[d+8>>2]=x((e>>>16&255)>>>0)/x(255);u[d+4>>2]=x((e>>>8&255)>>>0)/x(255);d=q[l+236>>2];if(d){e=f+q[a+332>>2]|0;q[c+d>>2]=q[e>>2];q[d+(c|4)>>2]=q[e+4>>2];q[d+(c|8)>>2]=q[e+8>>2];q[d+(c|12)>>2]=q[e+12>>2]}d=q[l+232>>2];if(d){e=f+q[a+344>>2]|0;q[c+d>>2]=q[e>>2];q[d+(c|4)>>2]=q[e+4>>2];q[d+(c|8)>>2]=q[e+8>>2];q[d+(c|12)>>2]=q[e+12>>2]}g=g+1|0;if((I|0)==(g|0)){break v}f=q[a+188>>2];continue}}n[q[q[h>>2]+36>>2]](h);if(!q[a+488>>2]){Qy(b,nr(v,j),w(or(v,j),s),k)}f=q[a+188>>2];e=q[a+192>>2]-f>>6;B=k+B|0;if(e>>>0>B>>>0){continue}break}}Ty(b,h);Gu(q[b+80>>2])}if(z){n[q[q[z>>2]+8>>2]](z)|0}a=q[l+264>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[l+264>>2]=0}n[q[q[v>>2]+8>>2]](v)|0}ue=l+272|0}function Yz(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0),s=x(0),t=0,v=x(0),y=0,z=0,C=0,D=0,F=x(0),G=x(0),H=0,I=x(0),J=0,K=x(0),L=x(0),M=x(0),N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;d=ue-480|0;ue=d;H=q[a+24>>2];e=q[a+28>>2];a:{if((H|0)==(e|0)){break a}if(q[b+16>>2]>=2){C=a+36|0;ms(C);P=a+120|0;ms(P);f=q[a+24>>2];if((f|0)!=q[a+28>>2]){H=0;D=d+416|0;while(1){f=w(H,240)+f|0;e=q[f+84>>2];q[d+476>>2]=1065353216;q[d+468>>2]=0;q[d+472>>2]=0;q[d+464>>2]=e;e=q[f+88>>2];q[d+460>>2]=1065353216;q[d+452>>2]=0;q[d+456>>2]=0;q[d+448>>2]=e;b:{if(r[b+10|0]){e=f;t=q[e+60>>2];q[d+440>>2]=q[e+56>>2];q[d+444>>2]=t;t=q[e+52>>2];q[d+432>>2]=q[e+48>>2];q[d+436>>2]=t;t=q[e+44>>2];q[d+424>>2]=q[e+40>>2];q[d+428>>2]=t;t=q[e+36>>2];q[D>>2]=q[e+32>>2];q[D+4>>2]=t;t=q[e+20>>2];q[d+400>>2]=q[e+16>>2];q[d+404>>2]=t;t=q[e+28>>2];q[d+408>>2]=q[e+24>>2];q[d+412>>2]=t;if(r[b+32|0]){vu(d+400|0,c,u[f+204>>2])}Ys(d+400|0,d+384|0,d+336|0,d+320|0);f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+288|0,f);nt(d+304|0,d+288|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+256|0,f);tu(d+320|0,d+384|0,nt(d+272|0,d+256|0),q[b+20>>2]);j=u[d+384>>2];u[d+464>>2]=u[d+464>>2]*j;u[d+448>>2]=j*u[d+448>>2];o=u[d+356>>2];j=u[d+340>>2];f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+288|0,f);Ap(d+272|0,d+288|0);nt(d+304|0,d+272|0);p=u[d+472>>2];s=u[d+468>>2];h=u[d+464>>2];u[d+476>>2]=x(p*x(0))+x(x(s*x(0))+x(x(h*x(0))+x(0)));i=u[d+304>>2];m=u[d+308>>2];l=u[d+312>>2];k=x(x(1)/x(E(x(x(x(i*i)+x(m*m))+x(l*l)))));L=x(j*s);G=u[d+320>>2];l=x(l*k);v=x(j*x(m*k));m=x(x(o*l)-v);K=m;k=x(i*k);i=x(v-x(o*k));F=x(m*m);m=x(x(j*k)-x(j*l));l=x(x(1)/x(E(x(x(i*i)+x(F+x(m*m))))));k=x(K*l);m=x(m*l);v=x(j*m);i=x(i*l);l=x(v-x(o*i));K=l;v=x(x(o*k)-v);F=x(l*l);l=x(x(j*i)-x(j*k));I=x(x(1)/x(E(x(x(v*v)+x(F+x(l*l))))));F=x(K*I);u[d+464>>2]=x(L+x(G-x(h*k)))+x(p*F);K=x(o*s);s=u[d+324>>2];l=x(l*I);u[d+468>>2]=x(K+x(s-x(h*m)))+x(p*l);K=L;L=u[d+328>>2];v=x(v*I);u[d+472>>2]=x(K+x(L-x(h*i)))+x(p*v);h=u[d+452>>2];I=x(j*h);j=u[d+448>>2];p=u[d+456>>2];u[d+448>>2]=x(I+x(G-x(k*j)))+x(p*F);u[d+460>>2]=x(p*x(0))+x(x(h*x(0))+x(x(j*x(0))+x(0)));u[d+456>>2]=x(I+x(L-x(i*j)))+x(p*v);u[d+452>>2]=x(x(o*h)+x(s-x(m*j)))+x(p*l);break b}e=f;t=q[e+60>>2];q[d+440>>2]=q[e+56>>2];q[d+444>>2]=t;t=q[e+52>>2];q[d+432>>2]=q[e+48>>2];q[d+436>>2]=t;t=q[e+44>>2];q[d+424>>2]=q[e+40>>2];q[d+428>>2]=t;t=q[e+36>>2];q[D>>2]=q[e+32>>2];q[D+4>>2]=t;t=q[e+20>>2];q[d+400>>2]=q[e+16>>2];q[d+404>>2]=t;t=q[e+28>>2];q[d+408>>2]=q[e+24>>2];q[d+412>>2]=t;if(r[b+32|0]){vu(d+400|0,c,u[f+204>>2])}f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+320|0,f);nt(d+336|0,d+320|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+304|0,f);su(d+400|0,nt(d+384|0,d+304|0),q[b+20>>2],r[b+11|0]);h=u[d+408>>2];j=u[d+472>>2];k=u[d+404>>2];o=u[d+468>>2];i=u[d+412>>2];s=u[d+400>>2];p=u[d+464>>2];u[d+464>>2]=x(h*j)+x(x(k*o)+x(i+x(s*p)));m=u[d+440>>2];l=u[d+436>>2];v=u[d+444>>2];I=u[d+432>>2];u[d+472>>2]=x(j*m)+x(x(o*l)+x(v+x(p*I)));L=u[d+424>>2];G=u[d+420>>2];F=u[d+428>>2];M=u[d+416>>2];u[d+468>>2]=x(j*L)+x(x(o*G)+x(F+x(p*M)));u[d+476>>2]=x(j*x(0))+x(x(o*x(0))+x(x(p*x(0))+x(0)));j=u[d+456>>2];o=u[d+452>>2];p=u[d+448>>2];u[d+460>>2]=x(j*x(0))+x(x(o*x(0))+x(x(p*x(0))+x(0)));u[d+456>>2]=x(m*j)+x(x(l*o)+x(v+x(I*p)));u[d+452>>2]=x(L*j)+x(x(G*o)+x(F+x(M*p)));u[d+448>>2]=x(h*j)+x(x(k*o)+x(i+x(s*p)))}js(C,d+464|0);js(P,d+448|0);H=H+1|0;f=q[a+24>>2];if(H>>>0<(q[a+28>>2]-f|0)/240>>>0){continue}break}}ls(C);ls(P);H=q[a+24>>2];e=q[a+28>>2]}J=q[a+208>>2];C=q[a+20>>2];f=C;if((e|0)!=(H|0)){Q=J<<2;X=w(J,3);D=J<<1;Y=a+120|0;Z=a+36|0;f=C;while(1){g=q[b+16>>2];if((g|0)>=1){O=w(T,240)+H|0;P=O+72|0;_=O+88|0;t=O+68|0;$=O+84|0;V=O+204|0;H=O+16|0;aa=O+80|0;ba=O+76|0;W=O+4|0;z=0;while(1){S=q[O>>2];R=q[W>>2];c:{if((g|0)<=1){e=q[$>>2];q[f+4>>2]=0;q[f+8>>2]=0;q[f>>2]=e;e=t;q[f+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);g=q[_>>2];e=f+J|0;q[e+4>>2]=0;q[e+8>>2]=0;q[e>>2]=g;g=e;e=P;q[g+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);break c}o=x(z|0);j=x(o/x(g|0));ns(d+400|0,Z,x(j+x(R|0)));yp(d+336|0);g=d+344|0;N=q[d+408>>2];q[g>>2]=N;e=q[d+404>>2];y=q[d+400>>2];q[d+336>>2]=y;q[d+340>>2]=e;q[f+8>>2]=N;q[f>>2]=y;q[f+4>>2]=e;ns(d+400|0,Y,x(x(o/x(q[b+16>>2]))+x(q[W>>2])));yp(d+336|0);N=q[d+408>>2];q[g>>2]=N;g=q[d+404>>2];y=q[d+400>>2];q[d+336>>2]=y;q[d+340>>2]=g;e=f+J|0;q[e+8>>2]=N;q[e>>2]=y;q[e+4>>2]=g;g=q[t>>2];q[d+252>>2]=g;N=q[ba>>2];q[d+248>>2]=N;q[d+124>>2]=g;q[d+120>>2]=N;Pe(d+400|0,d+124|0,d+120|0,j);q[f+12>>2]=q[d+400>>2];g=q[P>>2];q[d+244>>2]=g;N=q[aa>>2];q[d+240>>2]=N;q[d+116>>2]=g;q[d+112>>2]=N;Pe(d+400|0,d+116|0,d+112|0,j);q[e+12>>2]=q[d+400>>2]}N=z|R;d:{if(r[b+10|0]){e=H;g=q[e+44>>2];q[d+440>>2]=q[e+40>>2];q[d+444>>2]=g;g=q[e+36>>2];q[d+432>>2]=q[e+32>>2];q[d+436>>2]=g;g=q[e+28>>2];q[d+424>>2]=q[e+24>>2];q[d+428>>2]=g;g=q[e+20>>2];q[d+416>>2]=q[e+16>>2];q[d+420>>2]=g;g=q[e+4>>2];q[d+400>>2]=q[e>>2];q[d+404>>2]=g;g=q[e+12>>2];q[d+408>>2]=q[e+8>>2];q[d+412>>2]=g;if(r[b+32|0]){vu(d+400|0,c,u[V>>2])}Ys(d+400|0,d+464|0,d+336|0,d+448|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+304|0,e);nt(d+384|0,d+304|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+272|0,e);tu(d+448|0,d+464|0,nt(d+320|0,d+272|0),q[b+20>>2]);if(q[b+16>>2]>1){break d}u[f>>2]=u[f>>2]*u[d+464>>2];e=f+J|0;u[e>>2]=u[e>>2]*u[d+464>>2];j=u[d+356>>2];o=u[d+372>>2];p=u[d+340>>2];g=q[a+8>>2];n[q[q[g>>2]+88>>2]](d+304|0,g);Ap(d+320|0,d+304|0);nt(d+384|0,d+320|0);h=u[d+388>>2];k=u[d+384>>2];i=u[d+392>>2];v=u[d+456>>2];I=u[d+448>>2];L=u[d+452>>2];g=nt(d+384|0,f);s=u[d+392>>2];m=u[d+384>>2];l=u[d+388>>2];y=yp(d+320|0);K=h;h=x(x(1)/x(E(x(x(x(k*k)+x(h*h))+x(i*i)))));G=x(K*h);F=x(k*h);k=x(x(p*G)-x(j*F));K=k;M=x(k*k);h=x(i*h);k=x(x(j*h)-x(o*G));i=x(x(o*F)-x(p*h));G=x(x(1)/x(E(x(M+x(x(k*k)+x(i*i))))));h=x(K*G);k=x(k*G);F=x(x(p*h)-x(o*k));K=F;i=x(i*G);G=x(x(j*k)-x(p*i));M=x(x(o*i)-x(j*h));F=x(x(1)/x(E(x(x(G*G)+x(x(M*M)+x(F*F))))));K=x(K*F);u[d+324>>2]=x(s*K)+x(x(j*l)+x(L-x(i*m)));M=x(M*F);u[d+320>>2]=x(s*M)+x(x(p*l)+x(I-x(k*m)));G=x(G*F);u[d+328>>2]=x(s*G)+x(x(o*l)+x(v-x(h*m)));U=q[d+324>>2];q[f>>2]=q[d+320>>2];q[f+4>>2]=U;q[f+8>>2]=q[d+328>>2];nt(g,e);s=u[d+388>>2];m=u[d+384>>2];l=u[d+392>>2];yp(y);u[d+324>>2]=x(K*l)+x(x(j*s)+x(L-x(i*m)));u[d+320>>2]=x(M*l)+x(x(p*s)+x(I-x(k*m)));u[d+328>>2]=x(G*l)+x(x(o*s)+x(v-x(h*m)));g=q[d+324>>2];q[e>>2]=q[d+320>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+328>>2];break d}if(q[b+16>>2]>1){break d}e=H;g=q[e+44>>2];q[d+440>>2]=q[e+40>>2];q[d+444>>2]=g;g=q[e+36>>2];q[d+432>>2]=q[e+32>>2];q[d+436>>2]=g;g=q[e+28>>2];q[d+424>>2]=q[e+24>>2];q[d+428>>2]=g;g=q[e+20>>2];q[d+416>>2]=q[e+16>>2];q[d+420>>2]=g;g=q[e+4>>2];q[d+400>>2]=q[e>>2];q[d+404>>2]=g;g=q[e+12>>2];q[d+408>>2]=q[e+8>>2];q[d+412>>2]=g;if(r[b+32|0]){vu(d+400|0,c,u[V>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+448|0,e);nt(d+336|0,d+448|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+384|0,e);su(d+400|0,nt(d+464|0,d+384|0),q[b+20>>2],r[b+11|0]);e=nt(d+336|0,f);j=u[d+340>>2];h=u[d+420>>2];o=u[d+336>>2];k=u[d+416>>2];i=u[d+428>>2];p=u[d+344>>2];s=u[d+424>>2];m=u[d+440>>2];l=u[d+444>>2];v=u[d+432>>2];I=u[d+436>>2];L=u[d+408>>2];G=u[d+412>>2];F=u[d+400>>2];M=u[d+404>>2];g=yp(d+464|0);u[d+468>>2]=x(s*p)+x(x(h*j)+x(i+x(k*o)));u[d+464>>2]=x(L*p)+x(x(M*j)+x(G+x(F*o)));u[d+472>>2]=x(m*p)+x(x(I*j)+x(l+x(v*o)));y=q[d+468>>2];q[f>>2]=q[d+464>>2];q[f+4>>2]=y;q[f+8>>2]=q[d+472>>2];y=e;e=f+J|0;nt(y,e);h=u[d+440>>2];k=u[d+444>>2];i=u[d+432>>2];s=u[d+436>>2];m=u[d+408>>2];l=u[d+412>>2];v=u[d+400>>2];I=u[d+404>>2];j=u[d+344>>2];L=u[d+424>>2];G=u[d+428>>2];o=u[d+336>>2];F=u[d+416>>2];p=u[d+340>>2];M=u[d+420>>2];yp(g);u[d+468>>2]=x(L*j)+x(x(M*p)+x(G+x(F*o)));u[d+464>>2]=x(m*j)+x(x(I*p)+x(l+x(v*o)));u[d+472>>2]=x(h*j)+x(x(s*p)+x(k+x(i*o)));g=q[d+468>>2];q[e>>2]=q[d+464>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+472>>2]}S=S+ -1|0;e=D;e:{if(!N){break e}e=D;if((R|0)==(S|0)){break e}y=q[f+4>>2];e=f+D|0;q[e>>2]=q[f>>2];q[e+4>>2]=y;g=q[f+36>>2];q[e+32>>2]=q[f+32>>2];q[e+36>>2]=g;g=q[f+28>>2];q[e+24>>2]=q[f+24>>2];q[e+28>>2]=g;g=q[f+20>>2];q[e+16>>2]=q[f+16>>2];q[e+20>>2]=g;g=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=g;e=f+J|0;U=q[e+36>>2];g=f+X|0;q[g+32>>2]=q[e+32>>2];q[g+36>>2]=U;y=q[e+28>>2];q[g+24>>2]=q[e+24>>2];q[g+28>>2]=y;y=q[e+20>>2];q[g+16>>2]=q[e+16>>2];q[g+20>>2]=y;y=q[e+12>>2];q[g+8>>2]=q[e+8>>2];q[g+12>>2]=y;y=q[e+4>>2];q[g>>2]=q[e>>2];q[g+4>>2]=y;e=Q}if(N){q[a+12>>2]=q[a+12>>2]+1}f=e+f|0;if((R|0)!=(S|0)){z=z+1|0;g=q[b+16>>2];if((z|0)<(g|0)){continue}}break}H=q[a+24>>2];e=q[a+28>>2]}T=T+1|0;if(T>>>0<(e-H|0)/240>>>0){continue}break}}q[d+104>>2]=C;q[d+228>>2]=f;q[d+224>>2]=J;q[d+232>>2]=C;c=q[d+228>>2];q[d+96>>2]=q[d+224>>2];q[d+100>>2]=c;bA(a,b,d+96|0);q[d+88>>2]=C;q[d+212>>2]=f;q[d+208>>2]=J;q[d+216>>2]=C;c=q[d+212>>2];q[d+80>>2]=q[d+208>>2];q[d+84>>2]=c;cA(a,b,d+80|0);q[d+72>>2]=C;q[d+196>>2]=f;q[d+192>>2]=J;q[d+200>>2]=C;c=q[d+196>>2];q[d+64>>2]=q[d+192>>2];q[d+68>>2]=c;dA(a,b,d- -64|0);q[d+56>>2]=C;q[d+180>>2]=f;q[d+176>>2]=J;q[d+184>>2]=C;c=q[d+180>>2];q[d+48>>2]=q[d+176>>2];q[d+52>>2]=c;dA(a,b,d+48|0);q[d+40>>2]=C;q[d+164>>2]=f;q[d+160>>2]=J;q[d+168>>2]=C;c=q[d+164>>2];q[d+32>>2]=q[d+160>>2];q[d+36>>2]=c;dA(a,b,d+32|0);q[d+24>>2]=C;q[d+148>>2]=f;q[d+144>>2]=J;q[d+152>>2]=C;c=q[d+148>>2];q[d+16>>2]=q[d+144>>2];q[d+20>>2]=c;dA(a,b,d+16|0);q[d+8>>2]=C;q[d+132>>2]=f;q[d+128>>2]=J;q[d+136>>2]=C;c=q[d+132>>2];q[d>>2]=q[d+128>>2];q[d+4>>2]=c;dA(a,b,d);e=q[b+16>>2];c=q[a+28>>2];z=q[a+24>>2];D=w(e,((c-z|0)/240|0)+ -1|0);if((D|0)!=-1){C=q[a+208>>2];J=C<<2;g=C<<1;P=w(C,3);O=w(C,5);f=q[a+20>>2];H=0;j=x(0);o=x(0);p=x(0);while(1){f:{g:{if(!H){Cp(d+336|0,f+P|0,f+C|0);nt(d+400|0,d+336|0);h=u[d+400>>2];k=u[d+404>>2];i=u[d+408>>2];j=x(x(x(h*h)+x(k*k))+x(i*i));if(j>2];m=u[d+404>>2];l=u[d+408>>2];h=x(x(x(s*s)+x(m*m))+x(l*l));if(!(h>2];m=u[d+404>>2];l=u[d+408>>2];v=x(x(x(s*s)+x(m*m))+x(l*l));h:{if(!!(v>2];break h}I=x(x(1)/x(E(v)));v=x(I*u[d+412>>2]);l=x(l*I);m=x(m*I);s=x(s*I)}u[d+412>>2]=v;u[d+408>>2]=l;u[d+400>>2]=s;u[d+404>>2]=m;v=x(x(h*m)-x(k*s));k=x(x(k*l)-x(i*m));h=x(x(i*s)-x(h*l));i=x(x(v*v)+x(x(k*k)+x(h*h)));if(!(i=x(0)){c=~~i>>>0;break i}c=0}i=x(B(x(A(x(x(x(x(m+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(i=x(0)){y=~~i>>>0;break j}y=0}c=c|y<<8;i=x(B(x(A(x(x(x(x(l+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(i=x(0)){y=~~i>>>0;break k}y=0}Q=c|y<<16|-16777216;q[e+20>>2]=Q;h=x(B(x(A(x(x(x(x((t?h:x(-h))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(h=x(0)){c=~~h>>>0;break l}c=0}R=c<<8;c=f;h=x(B(x(A(x(x(x(x((t?k:x(-k))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(h=x(0)){e=~~h>>>0;break m}e=0}e=e|R;h=x(B(x(A(x(x(x(x((t?v:x(-v))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(h=x(0)){y=~~h>>>0;break n}y=0}t=e|y<<16|-16777216;q[c+16>>2]=t;q[z+20>>2]=Q;q[z+16>>2]=t;e=f+g|0;c=e;o:{if(!H){break o}c=e;if((D|0)==(H|0)){break o}q[e+20>>2]=Q;q[e+16>>2]=t;c=f+P|0;q[c+20>>2]=Q;q[c+16>>2]=t;c=f+J|0}f=c;H=H+1|0;e=q[b+16>>2];c=q[a+28>>2];z=q[a+24>>2];D=w(e,((c-z|0)/240|0)+ -1|0);if(H>>>0>>0){continue}break}}if(!((c-z|0)==240|q[a+212>>2]<1)){f=q[a+208>>2];g=q[a+20>>2]+40|0;D=0;while(1){if((e|0)>0){c=(w(D,240)+z|0)+208|0;z=0;while(1){g=kV(kV(kV(kV(g,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0;z=z+1|0;e=q[b+16>>2];if((z|0)<(e|0)){continue}break}z=q[a+24>>2];c=q[a+28>>2]}D=D+1|0;if(D>>>0<((c-z|0)/240|0)+ -1>>>0){continue}break}}if((c-z|0)==240|q[a+216>>2]<1){break a}f=q[a+208>>2];g=(q[a+20>>2]+(q[a+212>>2]<<2)|0)+40|0;D=0;while(1){if((e|0)>=1){c=(w(D,240)+z|0)+224|0;z=0;while(1){g=kV(kV(kV(kV(g,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0;z=z+1|0;e=q[b+16>>2];if((z|0)<(e|0)){continue}break}z=q[a+24>>2];c=q[a+28>>2]}D=D+1|0;if(D>>>0<((c-z|0)/240|0)+ -1>>>0){continue}break}}ue=d+480|0} + + + +function $z(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0),s=x(0),t=0,v=x(0),y=0,z=0,C=0,D=0,F=x(0),G=x(0),H=0,I=x(0),J=x(0),K=0,L=x(0),M=x(0),N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;d=ue-448|0;ue=d;H=q[a+24>>2];e=q[a+28>>2];a:{if((H|0)==(e|0)){break a}if(q[b+16>>2]>=2){C=a+36|0;ms(C);P=a+120|0;ms(P);f=q[a+24>>2];if((f|0)!=q[a+28>>2]){H=0;D=d+384|0;while(1){f=w(H,240)+f|0;e=q[f+84>>2];q[d+444>>2]=1065353216;q[d+436>>2]=0;q[d+440>>2]=0;q[d+432>>2]=e;e=q[f+88>>2];q[d+428>>2]=1065353216;q[d+420>>2]=0;q[d+424>>2]=0;q[d+416>>2]=e;b:{if(r[b+10|0]){e=f;t=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=t;t=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=t;t=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=t;t=q[e+36>>2];q[D>>2]=q[e+32>>2];q[D+4>>2]=t;t=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=t;t=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=t;if(r[b+32|0]){vu(d+368|0,c,u[f+204>>2])}Ys(d+368|0,d+352|0,d+304|0,d+288|0);f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+256|0,f);nt(d+272|0,d+256|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+224|0,f);tu(d+288|0,d+352|0,nt(d+240|0,d+224|0),q[b+20>>2]);j=u[d+352>>2];u[d+432>>2]=u[d+432>>2]*j;u[d+416>>2]=j*u[d+416>>2];o=u[d+324>>2];j=u[d+308>>2];f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+256|0,f);Ap(d+240|0,d+256|0);nt(d+272|0,d+240|0);p=u[d+440>>2];s=u[d+436>>2];h=u[d+432>>2];u[d+444>>2]=x(p*x(0))+x(x(s*x(0))+x(x(h*x(0))+x(0)));i=u[d+272>>2];m=u[d+276>>2];l=u[d+280>>2];k=x(x(1)/x(E(x(x(x(i*i)+x(m*m))+x(l*l)))));L=x(j*s);G=u[d+288>>2];l=x(l*k);v=x(j*x(m*k));m=x(x(o*l)-v);J=m;k=x(i*k);i=x(v-x(o*k));F=x(m*m);m=x(x(j*k)-x(j*l));l=x(x(1)/x(E(x(x(i*i)+x(F+x(m*m))))));k=x(J*l);m=x(m*l);v=x(j*m);i=x(i*l);l=x(v-x(o*i));J=l;v=x(x(o*k)-v);F=x(l*l);l=x(x(j*i)-x(j*k));I=x(x(1)/x(E(x(x(v*v)+x(F+x(l*l))))));F=x(J*I);u[d+432>>2]=x(L+x(G-x(h*k)))+x(p*F);J=x(o*s);s=u[d+292>>2];l=x(l*I);u[d+436>>2]=x(J+x(s-x(h*m)))+x(p*l);J=L;L=u[d+296>>2];v=x(v*I);u[d+440>>2]=x(J+x(L-x(h*i)))+x(p*v);h=u[d+420>>2];I=x(j*h);j=u[d+416>>2];p=u[d+424>>2];u[d+416>>2]=x(I+x(G-x(k*j)))+x(p*F);u[d+428>>2]=x(p*x(0))+x(x(h*x(0))+x(x(j*x(0))+x(0)));u[d+424>>2]=x(I+x(L-x(i*j)))+x(p*v);u[d+420>>2]=x(x(o*h)+x(s-x(m*j)))+x(p*l);break b}e=f;t=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=t;t=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=t;t=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=t;t=q[e+36>>2];q[D>>2]=q[e+32>>2];q[D+4>>2]=t;t=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=t;t=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=t;if(r[b+32|0]){vu(d+368|0,c,u[f+204>>2])}f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+288|0,f);nt(d+304|0,d+288|0);f=q[a+8>>2];n[q[q[f>>2]+92>>2]](d+272|0,f);su(d+368|0,nt(d+352|0,d+272|0),q[b+20>>2],r[b+11|0]);h=u[d+376>>2];j=u[d+440>>2];k=u[d+372>>2];o=u[d+436>>2];i=u[d+380>>2];s=u[d+368>>2];p=u[d+432>>2];u[d+432>>2]=x(h*j)+x(x(k*o)+x(i+x(s*p)));m=u[d+408>>2];l=u[d+404>>2];v=u[d+412>>2];I=u[d+400>>2];u[d+440>>2]=x(j*m)+x(x(o*l)+x(v+x(p*I)));L=u[d+392>>2];G=u[d+388>>2];F=u[d+396>>2];M=u[d+384>>2];u[d+436>>2]=x(j*L)+x(x(o*G)+x(F+x(p*M)));u[d+444>>2]=x(j*x(0))+x(x(o*x(0))+x(x(p*x(0))+x(0)));j=u[d+424>>2];o=u[d+420>>2];p=u[d+416>>2];u[d+428>>2]=x(j*x(0))+x(x(o*x(0))+x(x(p*x(0))+x(0)));u[d+424>>2]=x(m*j)+x(x(l*o)+x(v+x(I*p)));u[d+420>>2]=x(L*j)+x(x(G*o)+x(F+x(M*p)));u[d+416>>2]=x(h*j)+x(x(k*o)+x(i+x(s*p)))}js(C,d+432|0);js(P,d+416|0);H=H+1|0;f=q[a+24>>2];if(H>>>0<(q[a+28>>2]-f|0)/240>>>0){continue}break}}ls(C);ls(P);H=q[a+24>>2];e=q[a+28>>2]}K=q[a+208>>2];C=q[a+20>>2];f=C;if((e|0)!=(H|0)){Q=K<<2;X=w(K,3);D=K<<1;Y=a+120|0;Z=a+36|0;f=C;while(1){g=q[b+16>>2];if((g|0)>=1){O=w(T,240)+H|0;P=O+72|0;_=O+88|0;t=O+68|0;$=O+84|0;V=O+204|0;H=O+16|0;aa=O+80|0;ba=O+76|0;W=O+4|0;z=0;while(1){S=q[O>>2];R=q[W>>2];c:{if((g|0)<=1){e=q[$>>2];q[f+4>>2]=0;q[f+8>>2]=0;q[f>>2]=e;e=t;q[f+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);g=q[_>>2];e=f+K|0;q[e+4>>2]=0;q[e+8>>2]=0;q[e>>2]=g;g=e;e=P;q[g+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);break c}o=x(z|0);j=x(o/x(g|0));ns(d+368|0,Z,x(j+x(R|0)));yp(d+304|0);g=d+312|0;N=q[d+376>>2];q[g>>2]=N;e=q[d+372>>2];y=q[d+368>>2];q[d+304>>2]=y;q[d+308>>2]=e;q[f+8>>2]=N;q[f>>2]=y;q[f+4>>2]=e;ns(d+368|0,Y,x(x(o/x(q[b+16>>2]))+x(q[W>>2])));yp(d+304|0);N=q[d+376>>2];q[g>>2]=N;g=q[d+372>>2];y=q[d+368>>2];q[d+304>>2]=y;q[d+308>>2]=g;e=f+K|0;q[e+8>>2]=N;q[e>>2]=y;q[e+4>>2]=g;g=q[t>>2];q[d+220>>2]=g;N=q[ba>>2];q[d+216>>2]=N;q[d+108>>2]=g;q[d+104>>2]=N;Pe(d+368|0,d+108|0,d+104|0,j);q[f+12>>2]=q[d+368>>2];g=q[P>>2];q[d+212>>2]=g;N=q[aa>>2];q[d+208>>2]=N;q[d+100>>2]=g;q[d+96>>2]=N;Pe(d+368|0,d+100|0,d+96|0,j);q[e+12>>2]=q[d+368>>2]}N=z|R;d:{if(r[b+10|0]){e=H;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[V>>2])}Ys(d+368|0,d+432|0,d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+272|0,e);nt(d+352|0,d+272|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+240|0,e);tu(d+416|0,d+432|0,nt(d+288|0,d+240|0),q[b+20>>2]);if(q[b+16>>2]>1){break d}u[f>>2]=u[f>>2]*u[d+432>>2];e=f+K|0;u[e>>2]=u[e>>2]*u[d+432>>2];j=u[d+324>>2];o=u[d+340>>2];p=u[d+308>>2];g=q[a+8>>2];n[q[q[g>>2]+88>>2]](d+272|0,g);Ap(d+288|0,d+272|0);nt(d+352|0,d+288|0);h=u[d+356>>2];k=u[d+352>>2];i=u[d+360>>2];v=u[d+424>>2];I=u[d+416>>2];L=u[d+420>>2];g=nt(d+352|0,f);s=u[d+360>>2];m=u[d+352>>2];l=u[d+356>>2];y=yp(d+288|0);J=h;h=x(x(1)/x(E(x(x(x(k*k)+x(h*h))+x(i*i)))));G=x(J*h);F=x(k*h);k=x(x(p*G)-x(j*F));J=k;M=x(k*k);h=x(i*h);k=x(x(j*h)-x(o*G));i=x(x(o*F)-x(p*h));G=x(x(1)/x(E(x(M+x(x(k*k)+x(i*i))))));h=x(J*G);k=x(k*G);F=x(x(p*h)-x(o*k));J=F;i=x(i*G);G=x(x(j*k)-x(p*i));M=x(x(o*i)-x(j*h));F=x(x(1)/x(E(x(x(G*G)+x(x(M*M)+x(F*F))))));J=x(J*F);u[d+292>>2]=x(s*J)+x(x(j*l)+x(L-x(i*m)));M=x(M*F);u[d+288>>2]=x(s*M)+x(x(p*l)+x(I-x(k*m)));G=x(G*F);u[d+296>>2]=x(s*G)+x(x(o*l)+x(v-x(h*m)));U=q[d+292>>2];q[f>>2]=q[d+288>>2];q[f+4>>2]=U;q[f+8>>2]=q[d+296>>2];nt(g,e);s=u[d+356>>2];m=u[d+352>>2];l=u[d+360>>2];yp(y);u[d+292>>2]=x(J*l)+x(x(j*s)+x(L-x(i*m)));u[d+288>>2]=x(M*l)+x(x(p*s)+x(I-x(k*m)));u[d+296>>2]=x(G*l)+x(x(o*s)+x(v-x(h*m)));g=q[d+292>>2];q[e>>2]=q[d+288>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+296>>2];break d}if(q[b+16>>2]>1){break d}e=H;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[V>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+416|0,e);nt(d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+352|0,e);su(d+368|0,nt(d+432|0,d+352|0),q[b+20>>2],r[b+11|0]);e=nt(d+304|0,f);j=u[d+308>>2];h=u[d+388>>2];o=u[d+304>>2];k=u[d+384>>2];i=u[d+396>>2];p=u[d+312>>2];s=u[d+392>>2];m=u[d+408>>2];l=u[d+412>>2];v=u[d+400>>2];I=u[d+404>>2];L=u[d+376>>2];G=u[d+380>>2];F=u[d+368>>2];M=u[d+372>>2];g=yp(d+432|0);u[d+436>>2]=x(s*p)+x(x(h*j)+x(i+x(k*o)));u[d+432>>2]=x(L*p)+x(x(M*j)+x(G+x(F*o)));u[d+440>>2]=x(m*p)+x(x(I*j)+x(l+x(v*o)));y=q[d+436>>2];q[f>>2]=q[d+432>>2];q[f+4>>2]=y;q[f+8>>2]=q[d+440>>2];y=e;e=f+K|0;nt(y,e);h=u[d+408>>2];k=u[d+412>>2];i=u[d+400>>2];s=u[d+404>>2];m=u[d+376>>2];l=u[d+380>>2];v=u[d+368>>2];I=u[d+372>>2];j=u[d+312>>2];L=u[d+392>>2];G=u[d+396>>2];o=u[d+304>>2];F=u[d+384>>2];p=u[d+308>>2];M=u[d+388>>2];yp(g);u[d+436>>2]=x(L*j)+x(x(M*p)+x(G+x(F*o)));u[d+432>>2]=x(m*j)+x(x(I*p)+x(l+x(v*o)));u[d+440>>2]=x(h*j)+x(x(s*p)+x(k+x(i*o)));g=q[d+436>>2];q[e>>2]=q[d+432>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+440>>2]}S=S+ -1|0;e=D;e:{if(!N){break e}e=D;if((R|0)==(S|0)){break e}y=q[f+4>>2];e=f+D|0;q[e>>2]=q[f>>2];q[e+4>>2]=y;g=q[f+36>>2];q[e+32>>2]=q[f+32>>2];q[e+36>>2]=g;g=q[f+28>>2];q[e+24>>2]=q[f+24>>2];q[e+28>>2]=g;g=q[f+20>>2];q[e+16>>2]=q[f+16>>2];q[e+20>>2]=g;g=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=g;e=f+K|0;U=q[e+36>>2];g=f+X|0;q[g+32>>2]=q[e+32>>2];q[g+36>>2]=U;y=q[e+28>>2];q[g+24>>2]=q[e+24>>2];q[g+28>>2]=y;y=q[e+20>>2];q[g+16>>2]=q[e+16>>2];q[g+20>>2]=y;y=q[e+12>>2];q[g+8>>2]=q[e+8>>2];q[g+12>>2]=y;y=q[e+4>>2];q[g>>2]=q[e>>2];q[g+4>>2]=y;e=Q}if(N){q[a+12>>2]=q[a+12>>2]+1}f=e+f|0;if((R|0)!=(S|0)){z=z+1|0;g=q[b+16>>2];if((z|0)<(g|0)){continue}}break}H=q[a+24>>2];e=q[a+28>>2]}T=T+1|0;if(T>>>0<(e-H|0)/240>>>0){continue}break}}q[d+88>>2]=C;q[d+196>>2]=f;q[d+192>>2]=K;q[d+200>>2]=C;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;bA(a,b,d+80|0);q[d+72>>2]=C;q[d+180>>2]=f;q[d+176>>2]=K;q[d+184>>2]=C;c=q[d+180>>2];q[d+64>>2]=q[d+176>>2];q[d+68>>2]=c;dA(a,b,d- -64|0);q[d+56>>2]=C;q[d+164>>2]=f;q[d+160>>2]=K;q[d+168>>2]=C;c=q[d+164>>2];q[d+48>>2]=q[d+160>>2];q[d+52>>2]=c;dA(a,b,d+48|0);q[d+40>>2]=C;q[d+148>>2]=f;q[d+144>>2]=K;q[d+152>>2]=C;c=q[d+148>>2];q[d+32>>2]=q[d+144>>2];q[d+36>>2]=c;dA(a,b,d+32|0);q[d+24>>2]=C;q[d+132>>2]=f;q[d+128>>2]=K;q[d+136>>2]=C;c=q[d+132>>2];q[d+16>>2]=q[d+128>>2];q[d+20>>2]=c;dA(a,b,d+16|0);q[d+8>>2]=C;q[d+116>>2]=f;q[d+112>>2]=K;q[d+120>>2]=C;c=q[d+116>>2];q[d>>2]=q[d+112>>2];q[d+4>>2]=c;dA(a,b,d);e=q[b+16>>2];c=q[a+28>>2];z=q[a+24>>2];D=w(e,((c-z|0)/240|0)+ -1|0);if((D|0)!=-1){C=q[a+208>>2];K=C<<2;g=C<<1;P=w(C,3);O=w(C,5);f=q[a+20>>2];H=0;j=x(0);o=x(0);p=x(0);while(1){f:{g:{if(!H){Cp(d+304|0,f+P|0,f+C|0);nt(d+368|0,d+304|0);h=u[d+368>>2];k=u[d+372>>2];i=u[d+376>>2];j=x(x(x(h*h)+x(k*k))+x(i*i));if(j>2];m=u[d+372>>2];l=u[d+376>>2];h=x(x(x(s*s)+x(m*m))+x(l*l));if(!(h>2];m=u[d+372>>2];l=u[d+376>>2];v=x(x(x(s*s)+x(m*m))+x(l*l));h:{if(!!(v>2];break h}I=x(x(1)/x(E(v)));v=x(I*u[d+380>>2]);l=x(l*I);m=x(m*I);s=x(s*I)}u[d+380>>2]=v;u[d+376>>2]=l;u[d+368>>2]=s;u[d+372>>2]=m;v=x(x(h*m)-x(k*s));k=x(x(k*l)-x(i*m));h=x(x(i*s)-x(h*l));i=x(x(v*v)+x(x(k*k)+x(h*h)));if(!(i=x(0)){c=~~i>>>0;break i}c=0}i=x(B(x(A(x(x(x(x(m+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(i=x(0)){y=~~i>>>0;break j}y=0}c=c|y<<8;i=x(B(x(A(x(x(x(x(l+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(i=x(0)){y=~~i>>>0;break k}y=0}Q=c|y<<16|-16777216;q[e+20>>2]=Q;h=x(B(x(A(x(x(x(x((t?h:x(-h))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(h=x(0)){c=~~h>>>0;break l}c=0}R=c<<8;c=f;h=x(B(x(A(x(x(x(x((t?k:x(-k))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(h=x(0)){e=~~h>>>0;break m}e=0}e=e|R;h=x(B(x(A(x(x(x(x((t?v:x(-v))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(h=x(0)){y=~~h>>>0;break n}y=0}t=e|y<<16|-16777216;q[c+16>>2]=t;q[z+20>>2]=Q;q[z+16>>2]=t;e=f+g|0;c=e;o:{if(!H){break o}c=e;if((D|0)==(H|0)){break o}q[e+20>>2]=Q;q[e+16>>2]=t;c=f+P|0;q[c+20>>2]=Q;q[c+16>>2]=t;c=f+K|0}f=c;H=H+1|0;e=q[b+16>>2];c=q[a+28>>2];z=q[a+24>>2];D=w(e,((c-z|0)/240|0)+ -1|0);if(H>>>0>>0){continue}break}}if(!((c-z|0)==240|q[a+212>>2]<1)){f=q[a+208>>2];g=q[a+20>>2]+40|0;D=0;while(1){if((e|0)>0){c=(w(D,240)+z|0)+208|0;z=0;while(1){g=kV(kV(kV(kV(g,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0,c,q[a+212>>2]<<2)+f|0;z=z+1|0;e=q[b+16>>2];if((z|0)<(e|0)){continue}break}z=q[a+24>>2];c=q[a+28>>2]}D=D+1|0;if(D>>>0<((c-z|0)/240|0)+ -1>>>0){continue}break}}if((c-z|0)==240|q[a+216>>2]<1){break a}f=q[a+208>>2];g=(q[a+20>>2]+(q[a+212>>2]<<2)|0)+40|0;D=0;while(1){if((e|0)>=1){c=(w(D,240)+z|0)+224|0;z=0;while(1){g=kV(kV(kV(kV(g,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0,c,q[a+216>>2]<<2)+f|0;z=z+1|0;e=q[b+16>>2];if((z|0)<(e|0)){continue}break}z=q[a+24>>2];c=q[a+28>>2]}D=D+1|0;if(D>>>0<((c-z|0)/240|0)+ -1>>>0){continue}break}}ue=d+448|0}function Cw(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0,u=0,v=0;f=ue+ -64|0;ue=f;h=q[b+36>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;j=q[q[f+60>>2]+4>>2];if(j){n[j](q[f+48>>2])}q[f+24>>2]=15;q[f+28>>2]=-2147483632;q[f+20>>2]=e;o[e+15|0]=0;j=r[28187]|r[28188]<<8|(r[28189]<<16|r[28190]<<24);g=r[28183]|r[28184]<<8|(r[28185]<<16|r[28186]<<24);o[e+7|0]=g;o[e+8|0]=g>>>8;o[e+9|0]=g>>>16;o[e+10|0]=g>>>24;o[e+11|0]=j;o[e+12|0]=j>>>8;o[e+13|0]=j>>>16;o[e+14|0]=j>>>24;j=r[28180]|r[28181]<<8|(r[28182]<<16|r[28183]<<24);g=r[28176]|r[28177]<<8|(r[28178]<<16|r[28179]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=j;o[e+5|0]=j>>>8;o[e+6|0]=j>>>16;o[e+7|0]=j>>>24;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=1;j=c+4|0;g=q[c+4>>2];a:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break a}Aw(c,f+16|0);if(o[f+31|0]>-1){break a}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break a}n[e](q[f+48>>2])}i=q[b+40>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=18;q[f+28>>2]=-2147483616;q[f+20>>2]=e;o[e+18|0]=0;g=r[28066]|r[28067]<<8;o[e+16|0]=g;o[e+17|0]=g>>>8;g=r[28062]|r[28063]<<8|(r[28064]<<16|r[28065]<<24);h=r[28058]|r[28059]<<8|(r[28060]<<16|r[28061]<<24);o[e+8|0]=h;o[e+9|0]=h>>>8;o[e+10|0]=h>>>16;o[e+11|0]=h>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28054]|r[28055]<<8|(r[28056]<<16|r[28057]<<24);h=r[28050]|r[28051]<<8|(r[28052]<<16|r[28053]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];b:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break b}Aw(c,f+16|0);if(o[f+31|0]>-1){break b}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break b}n[e](q[f+48>>2])}i=q[b+44>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=14;q[f+28>>2]=-2147483632;q[f+20>>2]=e;o[e+14|0]=0;g=r[28079]|r[28080]<<8|(r[28081]<<16|r[28082]<<24);h=r[28075]|r[28076]<<8|(r[28077]<<16|r[28078]<<24);o[e+6|0]=h;o[e+7|0]=h>>>8;o[e+8|0]=h>>>16;o[e+9|0]=h>>>24;o[e+10|0]=g;o[e+11|0]=g>>>8;o[e+12|0]=g>>>16;o[e+13|0]=g>>>24;g=r[28073]|r[28074]<<8|(r[28075]<<16|r[28076]<<24);h=r[28069]|r[28070]<<8|(r[28071]<<16|r[28072]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];c:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break c}Aw(c,f+16|0);if(o[f+31|0]>-1){break c}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break c}n[e](q[f+48>>2])}i=q[b+48>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=20;q[f+28>>2]=-2147483616;q[f+20>>2]=e;o[e+20|0]=0;g=r[28208]|r[28209]<<8|(r[28210]<<16|r[28211]<<24);o[e+16|0]=g;o[e+17|0]=g>>>8;o[e+18|0]=g>>>16;o[e+19|0]=g>>>24;g=r[28204]|r[28205]<<8|(r[28206]<<16|r[28207]<<24);h=r[28200]|r[28201]<<8|(r[28202]<<16|r[28203]<<24);o[e+8|0]=h;o[e+9|0]=h>>>8;o[e+10|0]=h>>>16;o[e+11|0]=h>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28196]|r[28197]<<8|(r[28198]<<16|r[28199]<<24);h=r[28192]|r[28193]<<8|(r[28194]<<16|r[28195]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];d:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break d}Aw(c,f+16|0);if(o[f+31|0]>-1){break d}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break d}n[e](q[f+48>>2])}i=q[b+52>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=20;q[f+28>>2]=-2147483616;q[f+20>>2]=e;o[e+20|0]=0;g=r[28229]|r[28230]<<8|(r[28231]<<16|r[28232]<<24);o[e+16|0]=g;o[e+17|0]=g>>>8;o[e+18|0]=g>>>16;o[e+19|0]=g>>>24;g=r[28225]|r[28226]<<8|(r[28227]<<16|r[28228]<<24);h=r[28221]|r[28222]<<8|(r[28223]<<16|r[28224]<<24);o[e+8|0]=h;o[e+9|0]=h>>>8;o[e+10|0]=h>>>16;o[e+11|0]=h>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28217]|r[28218]<<8|(r[28219]<<16|r[28220]<<24);h=r[28213]|r[28214]<<8|(r[28215]<<16|r[28216]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];e:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break e}Aw(c,f+16|0);if(o[f+31|0]>-1){break e}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break e}n[e](q[f+48>>2])}i=q[b+56>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,16)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=14;q[f+28>>2]=-2147483632;q[f+20>>2]=e;o[e+14|0]=0;g=r[28244]|r[28245]<<8|(r[28246]<<16|r[28247]<<24);h=r[28240]|r[28241]<<8|(r[28242]<<16|r[28243]<<24);o[e+6|0]=h;o[e+7|0]=h>>>8;o[e+8|0]=h>>>16;o[e+9|0]=h>>>24;o[e+10|0]=g;o[e+11|0]=g>>>8;o[e+12|0]=g>>>16;o[e+13|0]=g>>>24;g=r[28238]|r[28239]<<8|(r[28240]<<16|r[28241]<<24);h=r[28234]|r[28235]<<8|(r[28236]<<16|r[28237]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];f:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break f}Aw(c,f+16|0);if(o[f+31|0]>-1){break f}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break f}n[e](q[f+48>>2])}e=q[b+60>>2];p[f+28>>1]=r[28257]|r[28258]<<8;p[f+30>>1]=2560;q[f+40>>2]=e;q[f+32>>2]=0;q[f+36>>2]=1;e=r[28253]|r[28254]<<8|(r[28255]<<16|r[28256]<<24);q[f+20>>2]=r[28249]|r[28250]<<8|(r[28251]<<16|r[28252]<<24);q[f+24>>2]=e;q[f+16>>2]=1;g=q[c+4>>2];g:{if(g>>>0>2]){q[g>>2]=1;e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break g}Aw(c,f+16|0);if(o[f+31|0]>-1){break g}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break g}n[e](q[f+48>>2])}i=q[b+64>>2];q[f+28>>2]=0;q[f+20>>2]=0;q[f+24>>2]=0;q[f+16>>2]=1;wt(f+48|0);e=n[q[f+56>>2]](f+48|0,32)|0;g=q[q[f+60>>2]+4>>2];if(g){n[g](q[f+48>>2])}q[f+24>>2]=17;q[f+28>>2]=-2147483616;q[f+20>>2]=e;o[e+17|0]=0;o[e+16|0]=r[28276];g=r[28272]|r[28273]<<8|(r[28274]<<16|r[28275]<<24);h=r[28268]|r[28269]<<8|(r[28270]<<16|r[28271]<<24);o[e+8|0]=h;o[e+9|0]=h>>>8;o[e+10|0]=h>>>16;o[e+11|0]=h>>>24;o[e+12|0]=g;o[e+13|0]=g>>>8;o[e+14|0]=g>>>16;o[e+15|0]=g>>>24;g=r[28264]|r[28265]<<8|(r[28266]<<16|r[28267]<<24);h=r[28260]|r[28261]<<8|(r[28262]<<16|r[28263]<<24);o[e|0]=h;o[e+1|0]=h>>>8;o[e+2|0]=h>>>16;o[e+3|0]=h>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;q[f+40>>2]=i;q[f+32>>2]=0;q[f+36>>2]=1;g=q[c+4>>2];h:{if(g>>>0>2]){q[g>>2]=q[f+16>>2];e=f+16|4;h=e+8|0;q[g+12>>2]=q[h>>2];i=q[e+4>>2];q[g+4>>2]=q[e>>2];q[g+8>>2]=i;q[e>>2]=0;q[e+4>>2]=0;q[h>>2]=0;e=f+32|0;q[g+24>>2]=q[e+8>>2];h=q[e+4>>2];q[g+16>>2]=q[e>>2];q[g+20>>2]=h;q[j>>2]=q[j>>2]+28;break h}Aw(c,f+16|0);if(o[f+31|0]>-1){break h}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break h}n[e](q[f+48>>2])}i:{if(!n[q[q[a>>2]+28>>2]](a)|(d|0)!=1){break i}d=q[b+68>>2];e=f+28|0;q[e>>2]=0;o[f+29|0]=0;o[e|0]=r[28286];o[f+31|0]=9;q[f+40>>2]=d;q[f+32>>2]=1;q[f+36>>2]=1;d=r[28282]|r[28283]<<8|(r[28284]<<16|r[28285]<<24);q[f+20>>2]=r[28278]|r[28279]<<8|(r[28280]<<16|r[28281]<<24);q[f+24>>2]=d;q[f+16>>2]=1;e=q[c+4>>2];if(e>>>0>2]){q[e>>2]=1;d=f+16|4;g=d+8|0;q[e+12>>2]=q[g>>2];h=q[d+4>>2];q[e+4>>2]=q[d>>2];q[e+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=f+32|0;q[e+24>>2]=q[d+8>>2];g=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=g;q[j>>2]=q[j>>2]+28;break i}Aw(c,f+16|0);if(o[f+31|0]>-1){break i}d=q[f+28>>2];e=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,e,d&2147483647);d=q[q[f+60>>2]+4>>2];if(!d){break i}n[d](q[f+48>>2])}h=q[b+72>>2];j:{if((n[q[q[a>>2]+104>>2]](a)|0)<1){break j}i=f+32|0;b=f+16|4;l=b+8|0;d=0;while(1){k:{m=n[q[q[a>>2]+96>>2]](a,d)|0;q[f+16>>2]=1;q[l>>2]=0;q[b>>2]=0;q[b+4>>2]=0;g=sV(m);if(g>>>0>=4294967280){break k}l:{m:{if(g>>>0>=11){wt(f+48|0);s=g+16&-16;e=n[q[f+56>>2]](f+48|0,s)|0;k=q[q[f+60>>2]+4>>2];if(k){n[k](q[f+48>>2])}q[f+20>>2]=e;q[f+24>>2]=g;q[f+28>>2]=s|-2147483648;break m}o[f+31|0]=g;e=b;if(!g){break l}}kV(e,m,g)}o[e+g|0]=0;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=1;e=q[c+4>>2];n:{if(e>>>0>2]){q[e>>2]=q[f+16>>2];q[e+12>>2]=q[l>>2];g=q[b+4>>2];q[e+4>>2]=q[b>>2];q[e+8>>2]=g;q[b>>2]=0;q[b+4>>2]=0;q[l>>2]=0;q[e+24>>2]=q[i+8>>2];g=q[i+4>>2];q[e+16>>2]=q[i>>2];q[e+20>>2]=g;q[j>>2]=q[j>>2]+28;break n}Aw(c,f+16|0);if(o[f+31|0]>-1){break n}e=q[f+28>>2];g=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,g,e&2147483647);e=q[q[f+60>>2]+4>>2];if(!e){break n}n[e](q[f+48>>2])}h=h+16|0;d=d+1|0;if((d|0)<(n[q[q[a>>2]+104>>2]](a)|0)){continue}break j}break}kT();F()}o:{b=q[a+68>>2];d=q[a+72>>2];if((b|0)!=(d|0)){l=f+32|0;e=f+16|4;s=f+24|0;g=0;while(1){m=0;if((d-b|0)/244>>>0<=g>>>0){break o}p:{q:{while(1){q[s>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;i=w(g,244)+b|0;b=o[i+11|0];r:{if((b|0)<=-1){b=q[i+4>>2];i=q[i>>2];break r}b=b&255}d=b+1|0;if(d>>>0<4294967280){s:{t:{if(d>>>0>=11){k=b+17&-16;d=_S(k);q[f+24>>2]=k|-2147483648;q[f+16>>2]=d;q[f+20>>2]=b;break t}o[f+27|0]=b;d=f+16|0;if(!b){break s}}kV(d,i,b)}o[b+d|0]=0;yT(f+16|0,28084,1);PT(f+48|0,m);b=r[f+59|0];d=b<<24>>24<0;b=yT(f+16|0,d?q[f+48>>2]:f+48|0,d?q[f+52>>2]:b);d=b+8|0;q[f+8>>2]=q[d>>2];i=q[b+4>>2];q[f>>2]=q[b>>2];q[f+4>>2]=i;q[b>>2]=0;q[b+4>>2]=0;q[d>>2]=0;if(o[f+59|0]<=-1){_U(q[f+48>>2])}if(o[f+27|0]<=-1){_U(q[f+16>>2])}b=q[f>>2];d=o[f+11|0];q[f+16>>2]=1;i=e+8|0;q[i>>2]=0;q[e>>2]=0;q[e+4>>2]=0;k=(d|0)<0?b:f;b=sV(k);if(b>>>0>=4294967280){break q}u:{v:{if(b>>>0>=11){wt(f+48|0);u=b+16&-16;d=n[q[f+56>>2]](f+48|0,u)|0;v=q[q[f+60>>2]+4>>2];if(v){n[v](q[f+48>>2])}q[f+20>>2]=d;q[f+24>>2]=b;q[f+28>>2]=u|-2147483648;break v}o[f+31|0]=b;d=e;if(!b){break u}}kV(d,k,b)}o[b+d|0]=0;q[f+40>>2]=h;q[f+32>>2]=0;q[f+36>>2]=1;b=q[c+4>>2];w:{if(b>>>0>2]){q[b>>2]=q[f+16>>2];q[b+12>>2]=q[i>>2];d=q[e+4>>2];q[b+4>>2]=q[e>>2];q[b+8>>2]=d;q[e>>2]=0;q[e+4>>2]=0;q[i>>2]=0;q[b+24>>2]=q[l+8>>2];d=q[l+4>>2];q[b+16>>2]=q[l>>2];q[b+20>>2]=d;q[j>>2]=q[j>>2]+28;break w}Aw(c,f+16|0);if(o[f+31|0]>-1){break w}b=q[f+28>>2];d=q[f+20>>2];xt(f+48|0);n[q[f+56>>2]](f+48|0,d,b&2147483647);b=q[q[f+60>>2]+4>>2];if(!b){break w}n[b](q[f+48>>2])}if(o[f+11|0]<=-1){_U(q[f>>2])}h=h+16|0;m=m+1|0;if((m|0)==13){break p}b=q[a+68>>2];if((q[a+72>>2]-b|0)/244>>>0<=g>>>0){break o}continue}break}kT();F()}kT();F()}g=g+1|0;d=q[a+72>>2];b=q[a+68>>2];if(g>>>0<(d-b|0)/244>>>0){continue}break}}ue=f- -64|0;return}lU();F()}function yA(a,b,c,d){var e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=x(0),l=x(0),m=0,o=x(0),p=0,s=0,t=x(0),v=x(0),y=x(0),z=x(0),C=0,D=x(0),F=0,G=x(0),H=x(0),I=0,J=x(0),K=x(0),L=x(0),M=0,N=x(0),O=x(0),P=x(0),Q=0,R=0,S=x(0),T=0,U=x(0),V=x(0),W=x(0),X=0,Y=x(0),Z=0,_=x(0),$=x(0),aa=x(0),ba=x(0),ca=x(0),da=x(0),ea=x(0),fa=x(0),ga=x(0),ha=0,ia=x(0),ja=x(0),ka=0,la=x(0),ma=x(0),na=0,oa=0,pa=0,qa=x(0),ra=x(0),sa=0,ta=0,ua=x(0),va=x(0),wa=x(0),xa=x(0),ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=x(0),Ea=x(0),Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=x(0),Na=x(0),Oa=x(0),Pa=x(0),Qa=x(0),Ra=x(0),Sa=x(0),Ta=x(0),Ua=x(0),Va=x(0),Wa=x(0),Xa=x(0),Ya=x(0),Za=x(0),_a=x(0),$a=0,ab=0,bb=0,cb=0,db=0,eb=x(0),fb=x(0);e=ue-224|0;ue=e;j=e+216|0;f=j;q[f>>2]=0;q[f+4>>2]=0;q[e+208>>2]=0;q[e+212>>2]=0;p=e+200|0;f=p;q[f>>2]=0;q[f+4>>2]=0;q[e+192>>2]=0;q[e+196>>2]=0;q[e+184>>2]=0;q[e+188>>2]=0;q[e+176>>2]=0;q[e+180>>2]=0;f=q[b+12>>2];a:{if(f>>>0>3){break a}if(f-2){h=e+80|0;b:{if(r[b+236|0]){f=q[c+44>>2];q[e+152>>2]=q[c+40>>2];q[e+156>>2]=f;f=q[c+36>>2];q[e+144>>2]=q[c+32>>2];q[e+148>>2]=f;f=q[c+28>>2];q[e+136>>2]=q[c+24>>2];q[e+140>>2]=f;f=q[c+20>>2];q[e+128>>2]=q[c+16>>2];q[e+132>>2]=f;f=q[c+4>>2];q[e+112>>2]=q[c>>2];q[e+116>>2]=f;f=q[c+12>>2];q[e+120>>2]=q[c+8>>2];q[e+124>>2]=f;vu(e+112|0,d,u[c+208>>2]);d=q[b+12>>2];f=q[a+20>>2];n[q[q[f>>2]+88>>2]](e+80|0,f);ru(d,e+176|0,e+32|0,e,e+160|0,e+112|0,nt(e+96|0,e+80|0));d=a+20|0;break b}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e+96|0,d);ru(f,e+176|0,e+32|0,e,e+160|0,c,nt(e+112|0,e+96|0));d=a+20|0}f=q[d>>2];n[q[q[f>>2]+88>>2]](h,f);nt(e+112|0,e+80|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](e- -64|0,d);uu(e+176|0,nt(e+96|0,e- -64|0),e+32|0,q[b+36>>2],r[b+20|0]);$s(e+112|0,e+32|0);d=e+200|0;g=u[d>>2];f=e+204|0;qa=u[f>>2];m=e+196|0;k=u[m>>2];i=u[e+148>>2];N=u[e+132>>2];G=u[e+152>>2];O=u[e+136>>2];o=u[e+184>>2];ia=u[e+188>>2];l=u[e+176>>2];t=u[e+180>>2];D=u[e+144>>2];J=u[e+112>>2];H=u[e+128>>2];v=u[e+192>>2];z=u[e+116>>2];P=u[e+120>>2];s=e+220|0;V=u[e+156>>2];h=e+216|0;K=u[h>>2];$=u[e+140>>2];X=e+212|0;y=u[X>>2];ja=u[e+124>>2];L=u[e+208>>2];u[s>>2]=x(V*K)+x(x($*y)+x(u[s>>2]+x(ja*L)));u[h>>2]=x(G*K)+x(x(O*y)+x(x(P*L)+x(0)));u[X>>2]=x(i*K)+x(x(N*y)+x(x(z*L)+x(0)));u[f>>2]=x(V*g)+x(x($*k)+x(qa+x(ja*v)));u[d>>2]=x(G*g)+x(x(O*k)+x(x(P*v)+x(0)));u[m>>2]=x(i*g)+x(x(N*k)+x(x(z*v)+x(0)));u[e+208>>2]=x(D*K)+x(x(H*y)+x(x(J*L)+x(0)));u[e+192>>2]=x(D*g)+x(x(H*k)+x(x(J*v)+x(0)));u[e+188>>2]=x(x(ia+x(l*ja))+x(t*$))+x(o*V);u[e+184>>2]=x(x(x(l*P)+x(0))+x(t*O))+x(o*G);u[e+180>>2]=x(x(x(l*z)+x(0))+x(t*N))+x(o*i);u[e+176>>2]=x(x(x(l*J)+x(0))+x(t*H))+x(o*D);break a}f=q[c+44>>2];q[e+216>>2]=q[c+40>>2];q[e+220>>2]=f;f=q[c+36>>2];q[e+208>>2]=q[c+32>>2];q[e+212>>2]=f;f=q[c+28>>2];q[e+200>>2]=q[c+24>>2];q[e+204>>2]=f;f=q[c+20>>2];q[e+192>>2]=q[c+16>>2];q[e+196>>2]=f;f=q[c+4>>2];q[e+176>>2]=q[c>>2];q[e+180>>2]=f;f=q[c+12>>2];q[e+184>>2]=q[c+8>>2];q[e+188>>2]=f;if(r[b+236|0]){vu(e+176|0,d,u[c+208>>2])}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e,d);nt(e+112|0,e);d=q[a+20>>2];n[q[q[d>>2]+92>>2]](e+160|0,d);su(e+176|0,nt(e+32|0,e+160|0),q[b+36>>2],r[b+20|0])}D=u[c+112>>2];l=u[c+68>>2];t=u[c+52>>2];k=u[c+116>>2];ra=u[c+108>>2];G=u[c+104>>2];Ea=u[b+28>>2];ka=q[c+96>>2];F=q[c+100>>2];sa=q[c+92>>2];cb=q[a+120>>2];db=q[a+28>>2];J=u[c+84>>2];o=u[c+80>>2];y=u[c+88>>2];la=u[c+64>>2];Y=u[c+48>>2];ta=q[b+16>>2];q[e+112>>2]=q[c+120>>2];q[e+116>>2]=q[c+136>>2];q[e+120>>2]=q[c+152>>2];q[e+124>>2]=q[c+168>>2];q[e+128>>2]=q[c+184>>2];g=x(ta|0);u[e+32>>2]=u[c+128>>2]/g;u[e+36>>2]=u[c+144>>2]/g;u[e+40>>2]=u[c+160>>2]/g;u[e+44>>2]=u[c+176>>2]/g;u[e+48>>2]=u[c+192>>2]/g;q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e>>2]=0;q[e+4>>2]=0;v=x(x(x(o+x(90))/x(180))*x(3.141592025756836));i=AG(v);S=zG(v);v=u[j>>2];N=u[e+220>>2];O=u[p>>2];z=u[e+204>>2];P=u[e+184>>2];K=u[e+188>>2];X=ta<<3;aa=u[e+212>>2];ba=u[e+196>>2];Ma=u[b+32>>2];ua=x(J-o);Na=x(ua/g);o=x(x(Na/x(180))*x(3.141592025756836));va=AG(o);wa=zG(o);c:{if((ta|0)<1){break c}Oa=x(ra+k);Pa=x(ra+x(k*x(.5)));eb=x(x(1)/g);fb=x(D/g);d=Ea>x(0);Fa=d?0:ka&-16777216;Q=d?0:F&-16777216;Ga=d?0:sa&-16777216;g=x(Y*i);ca=u[e+180>>2];k=x(Y*S);da=u[e+176>>2];xa=x(x(t*P)+K);D=x(x(g*ca)+x(x(k*da)+xa));ea=u[e+192>>2];ya=x(x(t*O)+z);J=x(x(g*ba)+x(x(k*ea)+ya));fa=u[e+208>>2];za=x(x(t*v)+N);H=x(x(g*aa)+x(x(k*fa)+za));o=x(la*i);L=x(la*S);Qa=x(x(l*P)+K);g=x(x(o*ca)+x(x(L*da)+Qa));Ra=x(x(l*O)+z);k=x(x(o*ba)+x(x(L*ea)+Ra));Sa=x(x(l*v)+N);o=x(x(o*aa)+x(x(L*fa)+Sa));Aa=x(la+x(x(Y-la)*y));L=x(i*Aa);V=x(S*Aa);y=x(l+x(y*x(t-l)));Ta=x(x(y*P)+K);l=x(x(L*ca)+x(x(V*da)+Ta));Ua=x(x(y*O)+z);t=x(x(L*ba)+x(x(V*ea)+Ua));Va=x(x(y*v)+N);v=x(x(L*aa)+x(x(V*fa)+Va));Wa=x(ua-Ma);N=x(0);while(1){Xa=x(wa*i);Ya=x(va*S);O=x(Xa+Ya);z=x(Aa*O);P=x(aa*z);Za=x(wa*S);_a=x(va*i);S=x(Za-_a);i=x(Aa*S);K=x(Va+x(fa*i));y=x(ba*z);$=x(ca*z);z=x(la*S);ia=x(Sa+x(fa*z));ga=x(Ra+x(ea*z));Ba=x(Qa+x(da*z));z=x(Y*S);Ca=x(za+x(fa*z));W=x(ya+x(ea*z));Da=x(xa+x(da*z));L=x(P+K);V=x(y+x(Ua+x(ea*i)));$=x($+x(Ta+x(da*i)));i=x(la*O);ja=x(x(aa*i)+ia);qa=x(x(ba*i)+ga);ia=x(x(ca*i)+Ba);i=x(Y*O);z=x(x(aa*i)+Ca);P=x(x(ba*i)+W);K=x(x(ca*i)+Da);T=q[c+96>>2];f=T>>>24|0;$a=q[c+100>>2];j=$a>>>24|0;M=q[c+92>>2];d=M>>>24|0;h=d;i=x(Na+ma);ma=iWa)){break d}i=x(x(1)-x(x(ma-Wa)/Ma))}e:{if(i==x(1)){break e}y=x(i*x(f>>>0));f:{if(y=x(0)){f=~~y>>>0;break f}f=0}y=x(i*x(j>>>0));g:{if(y=x(0)){j=~~y>>>0;break g}j=0}i=x(i*x(d>>>0));if(i=x(0)){h=~~i>>>0;break e}h=0}s=q[a+120>>2];yp(e+160|0);u[e+168>>2]=H;u[e+160>>2]=D;u[e+164>>2]=J;m=q[e+164>>2];d=w(Ha,cb)+db|0;q[d>>2]=q[e+160>>2];q[d+4>>2]=m;q[d+8>>2]=q[e+168>>2];u[d+28>>2]=ra;u[d+24>>2]=G;q[d+12>>2]=sa&16777215|Ga&-16777216;yp(e+160|0);u[e+164>>2]=t;u[e+160>>2]=l;u[e+168>>2]=v;R=q[e+164>>2];p=d+s|0;m=p;q[m>>2]=q[e+160>>2];q[m+4>>2]=R;R=m+8|0;q[R>>2]=q[e+168>>2];u[m+28>>2]=Pa;u[m+24>>2]=G;q[m+12>>2]=ka&16777215|Fa&-16777216;yp(e+160|0);u[e+168>>2]=z;u[e+160>>2]=K;u[e+164>>2]=P;ka=q[e+164>>2];ab=d+(s<<1)|0;m=ab;q[m>>2]=q[e+160>>2];q[m+4>>2]=ka;q[m+8>>2]=q[e+168>>2];u[m+28>>2]=ra;y=x(fb+G);u[m+24>>2]=y;Ga=h<<24;sa=Ga|M&16777215;q[m+12>>2]=sa;yp(e+160|0);u[e+164>>2]=V;u[e+160>>2]=$;u[e+168>>2]=L;M=q[e+164>>2];m=d+w(s,3)|0;h=m;q[h>>2]=q[e+160>>2];q[h+4>>2]=M;M=h+8|0;q[M>>2]=q[e+168>>2];u[h+28>>2]=Pa;u[h+24>>2]=y;Fa=f<<24;ka=Fa|T&16777215;q[h+12>>2]=ka;na=p+32|0;C=na;ha=q[C+4>>2];f=d+(s<<2)|0;T=f+32|0;h=T;q[h>>2]=q[C>>2];q[h+4>>2]=ha;ha=q[p+28>>2];C=f+24|0;h=C;q[h>>2]=q[p+24>>2];q[h+4>>2]=ha;Ia=p+16|0;I=Ia;Z=q[I+4>>2];ha=f+16|0;h=ha;q[h>>2]=q[I>>2];q[h+4>>2]=Z;Z=q[R+4>>2];I=f+8|0;h=I;q[h>>2]=q[R>>2];q[h+4>>2]=Z;h=q[p+4>>2];q[f>>2]=q[p>>2];q[f+4>>2]=h;yp(e+160|0);u[e+164>>2]=k;u[e+160>>2]=g;u[e+168>>2]=o;Z=q[e+164>>2];bb=d+w(s,5)|0;h=bb;q[h>>2]=q[e+160>>2];q[h+4>>2]=Z;q[h+8>>2]=q[e+168>>2];u[h+28>>2]=Oa;u[h+24>>2]=G;q[h+12>>2]=F&16777215|Q&-16777216;Ja=m+32|0;Q=Ja;oa=q[Q+4>>2];h=d+w(s,6)|0;Z=h+32|0;F=Z;q[F>>2]=q[Q>>2];q[F+4>>2]=oa;Q=q[m+28>>2];oa=h+24|0;F=oa;q[F>>2]=q[m+24>>2];q[F+4>>2]=Q;Ka=m+16|0;Q=Ka;pa=q[Q+4>>2];La=h+16|0;F=La;q[F>>2]=q[Q>>2];q[F+4>>2]=pa;Q=q[M+4>>2];pa=h+8|0;F=pa;q[F>>2]=q[M>>2];q[F+4>>2]=Q;F=q[m+4>>2];q[h>>2]=q[m>>2];q[h+4>>2]=F;yp(e+160|0);u[e+164>>2]=qa;u[e+160>>2]=ia;u[e+168>>2]=ja;F=q[e+164>>2];s=d+w(s,7)|0;q[s>>2]=q[e+160>>2];q[s+4>>2]=F;q[s+8>>2]=q[e+168>>2];u[s+28>>2]=Oa;u[s+24>>2]=y;Q=j<<24;F=Q|$a&16777215;q[s+12>>2]=F;u[e>>2]=u[e+112>>2]+u[e+32>>2];u[e+4>>2]=u[e+116>>2]+u[e+36>>2];u[e+8>>2]=u[e+120>>2]+u[e+40>>2];u[e+12>>2]=u[e+124>>2]+u[e+44>>2];u[e+16>>2]=u[e+128>>2]+u[e+48>>2];j=q[na+4>>2];q[T>>2]=q[na>>2];q[T+4>>2]=j;j=q[p+28>>2];q[C>>2]=q[p+24>>2];q[C+4>>2]=j;j=q[Ia+4>>2];q[ha>>2]=q[Ia>>2];q[ha+4>>2]=j;j=q[R+4>>2];q[I>>2]=q[R>>2];q[I+4>>2]=j;j=q[p+4>>2];q[f>>2]=q[p>>2];q[f+4>>2]=j;f=q[Ja+4>>2];q[Z>>2]=q[Ja>>2];q[Z+4>>2]=f;f=q[m+28>>2];q[oa>>2]=q[m+24>>2];q[oa+4>>2]=f;f=q[Ka+4>>2];q[La>>2]=q[Ka>>2];q[La+4>>2]=f;f=q[M+4>>2];q[pa>>2]=q[M>>2];q[pa+4>>2]=f;f=q[m+4>>2];q[h>>2]=q[m>>2];q[h+4>>2]=f;j=q[a+120>>2];Cp(e+96|0,bb,d);Cp(e+80|0,s,ab);nt(e+160|0,e+96|0);v=u[e+168>>2];ga=u[e+164>>2];t=u[e+160>>2];nt(e+160|0,e+80|0);o=x(z-H);g=x(K-D);l=x(P-J);k=x(x(1)/x(E(x(x(o*o)+x(x(g*g)+x(l*l))))));Ba=x(g*k);g=x(Y*x(x(wa*O)+x(va*S)));i=x(Y*x(x(wa*S)-x(va*O)));G=x(x(x(ca*g)+x(xa+x(da*i)))-K);_=x(x(x(aa*g)+x(za+x(fa*i)))-z);g=x(x(x(ba*g)+x(ya+x(ea*i)))-P);U=x(x(1)/x(E(x(x(_*_)+x(x(G*G)+x(g*g))))));i=x(x(Ba+x(G*U))*x(.5));W=u[e+164>>2];Ca=x(l*k);G=x(x(Ca+x(g*U))*x(.5));l=u[e+160>>2];g=x(x(i*W)-x(G*l));Da=x(o*k);_=x(x(Da+x(_*U))*x(.5));o=u[e+168>>2];k=x(x(_*l)-x(i*o));o=x(x(G*o)-x(_*W));W=D;l=x(Y*x(Xa-Ya));D=x(Y*x(_a+Za));U=x(W-x(x(ca*l)+x(xa+x(da*D))));W=U;H=x(H-x(x(aa*l)+x(za+x(fa*D))));l=x(J-x(x(ba*l)+x(ya+x(ea*D))));U=x(x(1)/x(E(x(x(H*H)+x(x(U*U)+x(l*l))))));D=x(x(x(W*U)+Ba)*x(.5));J=x(x(x(l*U)+Ca)*x(.5));l=x(x(ga*D)-x(t*J));H=x(x(x(H*U)+Da)*x(.5));t=x(x(t*H)-x(D*v));v=x(x(J*v)-x(H*ga));if(!r[b+20|0]){k=x(-k);o=x(-o);t=x(-t);v=x(-v);l=x(-l);g=x(-g)}W=t;t=x(x(1)/x(E(x(x(l*l)+x(x(t*t)+x(v*v))))));ga=x(B(x(A(x(x(x(x(x(W*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));h:{if(ga=x(0)){h=~~ga>>>0;break h}h=0}m=h<<8;h=d;v=x(B(x(A(x(x(x(x(x(v*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));i:{if(v=x(0)){f=~~v>>>0;break i}f=0}f=f|m;l=x(B(x(A(x(x(x(x(x(l*t)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(l=x(0)){p=~~l>>>0;break j}p=0}p=f|p<<16|-16777216;q[h+16>>2]=p;m=d+j|0;q[m+16>>2]=p;t=k;k=x(x(1)/x(E(x(x(g*g)+x(x(k*k)+x(o*o))))));l=x(B(x(A(x(x(x(x(x(t*k)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(l=x(0)){h=~~l>>>0;break k}h=0}h=h<<8;f=d+(j<<1)|0;I=f;o=x(B(x(A(x(x(x(x(x(o*k)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(o=x(0)){C=~~o>>>0;break l}C=0}h=C|h;g=x(B(x(A(x(x(x(x(x(g*k)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(g=x(0)){C=~~g>>>0;break m}C=0}s=h|C<<16|-16777216;q[I+16>>2]=s;h=d+w(j,3)|0;q[h+16>>2]=s;R=d+(j<<2)|0;q[R+16>>2]=p;M=d+w(j,5)|0;q[M+16>>2]=p;p=d+w(j,6)|0;q[p+16>>2]=s;T=d+w(j,7)|0;q[T+16>>2]=s;g=x(x(1)/x(E(x(x(H*H)+x(x(D*D)+x(J*J))))));k=x(B(x(A(x(x(x(x(x(J*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(k=x(0)){I=~~k>>>0;break n}I=0}na=I<<8;I=d;k=x(B(x(A(x(x(x(x(x(D*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));o:{if(k=x(0)){C=~~k>>>0;break o}C=0}C=C|na;g=x(B(x(A(x(x(x(x(x(H*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));p:{if(g=x(0)){j=~~g>>>0;break p}j=0}s=C|j<<16|-16777216;q[I+20>>2]=s;q[m+20>>2]=s;g=x(x(1)/x(E(x(x(_*_)+x(x(i*i)+x(G*G))))));k=x(B(x(A(x(x(x(x(x(G*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));q:{if(k=x(0)){I=~~k>>>0;break q}I=0}C=I<<8;I=f;k=x(B(x(A(x(x(x(x(x(i*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));r:{if(k=x(0)){j=~~k>>>0;break r}j=0}C=j|C;g=x(B(x(A(x(x(x(x(x(_*g)+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));s:{if(g=x(0)){j=~~g>>>0;break s}j=0}j=C|j<<16|-16777216;q[I+20>>2]=j;q[h+20>>2]=j;q[R+20>>2]=s;q[M+20>>2]=s;q[p+20>>2]=j;q[T+20>>2]=j;q[d+36>>2]=0;u[d+32>>2]=N;q[m+36>>2]=1056964608;u[m+32>>2]=N;q[f+36>>2]=0;g=x(eb+N);u[f+32>>2]=g;q[h+36>>2]=1056964608;u[h+32>>2]=g;q[R+36>>2]=1056964608;u[R+32>>2]=N;q[M+36>>2]=1065353216;u[M+32>>2]=N;q[p+36>>2]=1056964608;u[p+32>>2]=g;q[T+36>>2]=1065353216;u[T+32>>2]=g;q[e+128>>2]=q[e+16>>2];d=q[e+4>>2];q[e+112>>2]=q[e>>2];q[e+116>>2]=d;d=q[e+12>>2];q[e+120>>2]=q[e+8>>2];q[e+124>>2]=d;i=O;G=y;N=g;H=z;J=P;D=K;o=ja;k=qa;g=ia;v=L;t=V;l=$;Ha=Ha+8|0;if((Ha|0)<(X|0)){continue}break}d=q[a+124>>2];if((d|0)<=0){break c}f=q[a+120>>2];j=c+212|0;p=kV(q[a+28>>2]+40|0,j,d<<2);if((X|0)<2){break c}d=1;while(1){kV(p+w(d,f)|0,j,q[a+124>>2]<<2);d=d+1|0;if((X|0)!=(d|0)){continue}break}}f=q[a+128>>2];t:{if((f|0)<1){break t}d=1;if((ta|0)<1){break t}j=q[a+120>>2];c=c+228|0;f=kV((q[a+28>>2]+(q[a+124>>2]<<2)|0)+40|0,c,f<<2);if((X|0)<2){break t}while(1){kV(f+w(d,j)|0,c,q[a+128>>2]<<2);d=d+1|0;if((X|0)!=(d|0)){continue}break}}q[a+32>>2]=q[a+32>>2]+(q[b+16>>2]<<1);q[a+28>>2]=q[a+28>>2]+w(q[a+120>>2],X);ue=e+224|0}function Zz(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0),s=x(0),t=x(0),v=x(0),y=0,z=x(0),C=x(0),D=x(0),F=0,G=0,H=0,I=0,J=0,K=x(0),L=x(0),M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=x(0),U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;d=ue-448|0;ue=d;H=q[a+24>>2];y=q[a+28>>2];a:{if((H|0)==(y|0)){break a}if(q[b+16>>2]>=2){O=a+36|0;ms(O);P=a+120|0;ms(P);g=q[a+24>>2];if((g|0)!=q[a+28>>2]){H=0;Q=d+384|0;while(1){g=w(H,240)+g|0;e=q[g+84>>2];q[d+444>>2]=1065353216;q[d+436>>2]=0;q[d+440>>2]=0;q[d+432>>2]=e;e=q[g+88>>2];q[d+428>>2]=1065353216;q[d+420>>2]=0;q[d+424>>2]=0;q[d+416>>2]=e;b:{if(r[b+10|0]){e=q[g+60>>2];q[d+408>>2]=q[g+56>>2];q[d+412>>2]=e;e=q[g+52>>2];q[d+400>>2]=q[g+48>>2];q[d+404>>2]=e;e=q[g+44>>2];q[d+392>>2]=q[g+40>>2];q[d+396>>2]=e;e=q[g+36>>2];q[Q>>2]=q[g+32>>2];q[Q+4>>2]=e;e=q[g+20>>2];q[d+368>>2]=q[g+16>>2];q[d+372>>2]=e;e=q[g+28>>2];q[d+376>>2]=q[g+24>>2];q[d+380>>2]=e;if(r[b+32|0]){vu(d+368|0,c,u[g+204>>2])}Ys(d+368|0,d+352|0,d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);nt(d+272|0,d+256|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+224|0,e);tu(d+288|0,d+352|0,nt(d+240|0,d+224|0),q[b+20>>2]);h=u[d+352>>2];u[d+432>>2]=u[d+432>>2]*h;u[d+416>>2]=h*u[d+416>>2];t=u[d+324>>2];L=u[d+308>>2];e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);Ap(d+240|0,d+256|0);nt(d+272|0,d+240|0);v=u[d+440>>2];s=u[d+436>>2];D=u[d+432>>2];u[d+444>>2]=x(v*x(0))+x(x(s*x(0))+x(x(D*x(0))+x(0)));l=u[d+272>>2];f=u[d+276>>2];h=u[d+280>>2];k=x(x(1)/x(E(x(x(x(l*l)+x(f*f))+x(h*h)))));C=x(L*s);p=u[d+288>>2];j=x(h*k);h=x(L*x(f*k));m=x(x(t*j)-h);f=h;h=x(l*k);f=x(f-x(t*h));h=x(x(L*h)-x(L*j));j=x(x(1)/x(E(x(x(f*f)+x(x(m*m)+x(h*h))))));K=x(m*j);o=x(h*j);h=x(L*o);z=x(f*j);j=x(h-x(t*z));f=j;k=x(x(t*K)-h);h=x(j*j);j=x(x(L*z)-x(L*K));h=x(x(1)/x(E(x(x(k*k)+x(h+x(j*j))))));l=x(f*h);u[d+432>>2]=x(C+x(p-x(D*K)))+x(v*l);m=u[d+292>>2];f=x(j*h);u[d+436>>2]=x(x(t*s)+x(m-x(D*o)))+x(v*f);T=C;C=u[d+296>>2];j=x(k*h);u[d+440>>2]=x(T+x(C-x(D*z)))+x(v*j);k=u[d+420>>2];h=x(L*k);s=u[d+416>>2];T=x(h+x(p-x(K*s)));p=u[d+424>>2];u[d+416>>2]=T+x(p*l);u[d+428>>2]=x(p*x(0))+x(x(k*x(0))+x(x(s*x(0))+x(0)));u[d+424>>2]=x(h+x(C-x(z*s)))+x(p*j);u[d+420>>2]=x(x(t*k)+x(m-x(o*s)))+x(p*f);break b}e=q[g+60>>2];q[d+408>>2]=q[g+56>>2];q[d+412>>2]=e;e=q[g+52>>2];q[d+400>>2]=q[g+48>>2];q[d+404>>2]=e;e=q[g+44>>2];q[d+392>>2]=q[g+40>>2];q[d+396>>2]=e;e=q[g+36>>2];q[Q>>2]=q[g+32>>2];q[Q+4>>2]=e;e=q[g+20>>2];q[d+368>>2]=q[g+16>>2];q[d+372>>2]=e;e=q[g+28>>2];q[d+376>>2]=q[g+24>>2];q[d+380>>2]=e;if(r[b+32|0]){vu(d+368|0,c,u[g+204>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+288|0,e);nt(d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+272|0,e);su(d+368|0,nt(d+352|0,d+272|0),q[b+20>>2],r[b+11|0]);K=u[d+376>>2];t=u[d+440>>2];z=u[d+372>>2];v=u[d+436>>2];s=u[d+380>>2];o=u[d+368>>2];D=u[d+432>>2];u[d+432>>2]=x(K*t)+x(x(z*v)+x(s+x(o*D)));k=u[d+408>>2];p=u[d+404>>2];l=u[d+412>>2];m=u[d+400>>2];u[d+440>>2]=x(t*k)+x(x(v*p)+x(l+x(D*m)));f=u[d+392>>2];C=u[d+388>>2];j=u[d+396>>2];h=u[d+384>>2];u[d+436>>2]=x(t*f)+x(x(v*C)+x(j+x(D*h)));u[d+444>>2]=x(t*x(0))+x(x(v*x(0))+x(x(D*x(0))+x(0)));t=u[d+424>>2];v=u[d+420>>2];D=u[d+416>>2];u[d+428>>2]=x(t*x(0))+x(x(v*x(0))+x(x(D*x(0))+x(0)));u[d+424>>2]=x(k*t)+x(x(p*v)+x(l+x(m*D)));u[d+420>>2]=x(f*t)+x(x(C*v)+x(j+x(h*D)));u[d+416>>2]=x(K*t)+x(x(z*v)+x(s+x(o*D)))}js(O,d+432|0);js(P,d+416|0);H=H+1|0;g=q[a+24>>2];if(H>>>0<(q[a+28>>2]-g|0)/240>>>0){continue}break}}ls(O);ls(P);H=q[a+24>>2];y=q[a+28>>2]}M=q[a+208>>2];G=q[a+20>>2];g=G;if((y|0)!=(H|0)){Q=M<<2;aa=w(M,3);O=M<<1;ba=a+120|0;ca=a+36|0;g=G;while(1){i=q[b+16>>2];if((i|0)>=1){N=w(X,240)+H|0;U=N+72|0;da=N+88|0;y=N+68|0;ea=N+84|0;Y=N+204|0;P=N+16|0;H=N+80|0;J=N+76|0;Z=N+200|0;_=N+196|0;$=N+4|0;F=0;while(1){R=q[N>>2];W=q[$>>2];c:{if((i|0)<=1){e=q[ea>>2];q[g+4>>2]=0;q[g+8>>2]=0;q[g>>2]=e;e=y;q[g+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[g+80>>2]=q[_>>2];q[g+84>>2]=q[Z>>2];e=q[da>>2];i=g+M|0;q[i+4>>2]=0;q[i+8>>2]=0;q[i>>2]=e;e=U;q[i+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[i+80>>2]=q[_>>2];q[i+84>>2]=q[Z>>2];break c}h=x(F|0);j=x(h/x(i|0));ns(d+368|0,ca,x(j+x(W|0)));yp(d+304|0);I=d+312|0;i=q[d+376>>2];q[I>>2]=i;S=q[d+372>>2];e=q[d+368>>2];q[d+304>>2]=e;q[d+308>>2]=S;q[g+8>>2]=i;q[g>>2]=e;q[g+4>>2]=S;ns(d+368|0,ba,x(x(h/x(q[b+16>>2]))+x(q[$>>2])));yp(d+304|0);e=I;I=q[d+376>>2];q[e>>2]=I;S=q[d+372>>2];i=q[d+368>>2];q[d+304>>2]=i;q[d+308>>2]=S;e=g+M|0;q[e+8>>2]=I;q[e>>2]=i;q[e+4>>2]=S;I=q[y>>2];q[d+220>>2]=I;i=q[J>>2];q[d+216>>2]=i;q[d+108>>2]=I;q[d+104>>2]=i;Pe(d+368|0,d+108|0,d+104|0,j);q[g+12>>2]=q[d+368>>2];I=q[U>>2];q[d+212>>2]=I;i=q[H>>2];q[d+208>>2]=i;q[d+100>>2]=I;q[d+96>>2]=i;Pe(d+368|0,d+100|0,d+96|0,j);q[e+12>>2]=q[d+368>>2]}S=F|W;d:{if(r[b+10|0]){e=P;i=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=i;i=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=i;i=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=i;i=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=i;i=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=i;i=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=i;if(r[b+32|0]){vu(d+368|0,c,u[Y>>2])}Ys(d+368|0,d+432|0,d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+272|0,e);nt(d+352|0,d+272|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+240|0,e);tu(d+416|0,d+432|0,nt(d+288|0,d+240|0),q[b+20>>2]);if(q[b+16>>2]>1){break d}u[g>>2]=u[g>>2]*u[d+432>>2];V=g+M|0;u[V>>2]=u[V>>2]*u[d+432>>2];L=u[d+324>>2];t=u[d+340>>2];v=u[d+308>>2];e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+272|0,e);Ap(d+288|0,d+272|0);nt(d+352|0,d+288|0);j=u[d+356>>2];h=u[d+352>>2];s=u[d+360>>2];p=u[d+424>>2];l=u[d+416>>2];m=u[d+420>>2];I=nt(d+352|0,g);D=u[d+360>>2];o=u[d+352>>2];k=u[d+356>>2];i=yp(d+288|0);f=x(x(1)/x(E(x(x(x(h*h)+x(j*j))+x(s*s)))));C=x(j*f);j=x(h*f);h=x(x(v*C)-x(L*j));T=h;z=x(h*h);h=x(s*f);f=x(x(L*h)-x(t*C));C=x(x(t*j)-x(v*h));j=x(x(1)/x(E(x(z+x(x(f*f)+x(C*C))))));K=x(T*j);z=x(f*j);h=x(x(v*K)-x(t*z));T=h;s=x(C*j);f=x(x(L*z)-x(v*s));j=x(x(t*s)-x(L*K));h=x(x(1)/x(E(x(x(f*f)+x(x(j*j)+x(h*h))))));C=x(T*h);u[d+292>>2]=x(D*C)+x(x(L*k)+x(m-x(s*o)));j=x(j*h);u[d+288>>2]=x(D*j)+x(x(v*k)+x(l-x(z*o)));h=x(f*h);u[d+296>>2]=x(D*h)+x(x(t*k)+x(p-x(K*o)));e=q[d+292>>2];q[g>>2]=q[d+288>>2];q[g+4>>2]=e;q[g+8>>2]=q[d+296>>2];nt(I,V);o=u[d+356>>2];k=u[d+352>>2];f=u[d+360>>2];yp(i);u[d+292>>2]=x(C*f)+x(x(L*o)+x(m-x(s*k)));u[d+288>>2]=x(j*f)+x(x(v*o)+x(l-x(z*k)));u[d+296>>2]=x(h*f)+x(x(t*o)+x(p-x(K*k)));e=q[d+292>>2];q[V>>2]=q[d+288>>2];q[V+4>>2]=e;q[V+8>>2]=q[d+296>>2];break d}if(q[b+16>>2]>1){break d}e=P;i=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=i;i=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=i;i=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=i;i=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=i;i=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=i;i=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=i;if(r[b+32|0]){vu(d+368|0,c,u[Y>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+416|0,e);nt(d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+352|0,e);su(d+368|0,nt(d+432|0,d+352|0),q[b+20>>2],r[b+11|0]);I=nt(d+304|0,g);t=u[d+308>>2];K=u[d+388>>2];v=u[d+304>>2];z=u[d+384>>2];s=u[d+396>>2];D=u[d+312>>2];o=u[d+392>>2];k=u[d+408>>2];p=u[d+412>>2];l=u[d+400>>2];m=u[d+404>>2];f=u[d+376>>2];C=u[d+380>>2];j=u[d+368>>2];h=u[d+372>>2];i=yp(d+432|0);u[d+436>>2]=x(o*D)+x(x(K*t)+x(s+x(z*v)));u[d+432>>2]=x(f*D)+x(x(h*t)+x(C+x(j*v)));u[d+440>>2]=x(k*D)+x(x(m*t)+x(p+x(l*v)));e=q[d+436>>2];q[g>>2]=q[d+432>>2];q[g+4>>2]=e;q[g+8>>2]=q[d+440>>2];e=g+M|0;nt(I,e);K=u[d+408>>2];z=u[d+412>>2];s=u[d+400>>2];o=u[d+404>>2];k=u[d+376>>2];p=u[d+380>>2];l=u[d+368>>2];m=u[d+372>>2];t=u[d+312>>2];f=u[d+392>>2];C=u[d+396>>2];v=u[d+304>>2];j=u[d+384>>2];D=u[d+308>>2];h=u[d+388>>2];yp(i);u[d+436>>2]=x(f*t)+x(x(h*D)+x(C+x(j*v)));u[d+432>>2]=x(k*t)+x(x(m*D)+x(p+x(l*v)));u[d+440>>2]=x(K*t)+x(x(o*D)+x(z+x(s*v)));i=q[d+436>>2];q[e>>2]=q[d+432>>2];q[e+4>>2]=i;q[e+8>>2]=q[d+440>>2]}i=R+ -1|0;e=O;e:{if(!S){break e}e=O;if((i|0)==(W|0)){break e}kV(g+O|0,g,88);kV(g+aa|0,g+M|0,88);e=Q}if(S){q[a+12>>2]=q[a+12>>2]+1}g=e+g|0;if((i|0)!=(W|0)){F=F+1|0;i=q[b+16>>2];if((F|0)<(i|0)){continue}}break}H=q[a+24>>2];y=q[a+28>>2]}X=X+1|0;if(X>>>0<(y-H|0)/240>>>0){continue}break}}q[d+88>>2]=G;q[d+196>>2]=g;q[d+192>>2]=M;q[d+200>>2]=G;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;bA(a,b,d+80|0);q[d+72>>2]=G;q[d+180>>2]=g;q[d+176>>2]=M;q[d+184>>2]=G;c=q[d+180>>2];q[d+64>>2]=q[d+176>>2];q[d+68>>2]=c;eA(a,b,d- -64|0);q[d+56>>2]=G;q[d+164>>2]=g;q[d+160>>2]=M;q[d+168>>2]=G;c=q[d+164>>2];q[d+48>>2]=q[d+160>>2];q[d+52>>2]=c;fA(a,b,d+48|0);q[d+40>>2]=G;q[d+148>>2]=g;q[d+144>>2]=M;q[d+152>>2]=G;c=q[d+148>>2];q[d+32>>2]=q[d+144>>2];q[d+36>>2]=c;gA(a,b,d+32|0);q[d+24>>2]=G;q[d+132>>2]=g;q[d+128>>2]=M;q[d+136>>2]=G;c=q[d+132>>2];q[d+16>>2]=q[d+128>>2];q[d+20>>2]=c;hA(a,b,d+16|0);q[d+8>>2]=G;q[d+116>>2]=g;q[d+112>>2]=M;q[d+120>>2]=G;c=q[d+116>>2];q[d>>2]=q[d+112>>2];q[d+4>>2]=c;iA(a,b,d);y=q[b+16>>2];c=q[a+28>>2];F=q[a+24>>2];J=w(y,((c-F|0)/240|0)+ -1|0);if((J|0)!=-1){R=q[a+208>>2];Q=R<<2;O=R<<1;I=w(R,3);P=w(R,5);g=q[a+20>>2];H=0;C=x(0);j=x(0);h=x(0);while(1){f:{g:{if(!H){Cp(d+304|0,g+I|0,g+R|0);nt(d+368|0,d+304|0);l=u[d+368>>2];m=u[d+372>>2];f=u[d+376>>2];h=x(x(x(l*l)+x(m*m))+x(f*f));if(h>2];k=u[d+372>>2];p=u[d+376>>2];f=x(x(x(o*o)+x(k*k))+x(p*p));if(!(f>2];k=u[d+372>>2];p=u[d+376>>2];s=x(x(x(o*o)+x(k*k))+x(p*p));h:{if(!!(s>2];break h}s=x(x(1)/x(E(s)));z=x(s*u[d+380>>2]);p=x(p*s);k=x(k*s);o=x(o*s)}u[d+380>>2]=z;u[d+376>>2]=p;u[d+368>>2]=o;u[d+372>>2]=k;z=x(x(l*k)-x(m*o));m=x(x(m*p)-x(f*k));l=x(x(f*o)-x(l*p));f=x(x(z*z)+x(x(m*m)+x(l*l)));if(!(f=x(0)){c=~~f>>>0;break i}c=0}f=x(B(x(A(x(x(x(x(k+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(f=x(0)){G=~~f>>>0;break j}G=0}G=c|G<<8;f=x(B(x(A(x(x(x(x(p+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(f=x(0)){c=~~f>>>0;break k}c=0}G=G|c<<16|-16777216;q[e+20>>2]=G;f=x(B(x(A(x(x(x(x((i?l:x(-l))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(f=x(0)){c=~~f>>>0;break l}c=0}e=c<<8;c=g;f=x(B(x(A(x(x(x(x((i?m:x(-m))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(f=x(0)){y=~~f>>>0;break m}y=0}y=y|e;f=x(B(x(A(x(x(x(x((i?z:x(-z))+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(f=x(0)){e=~~f>>>0;break n}e=0}y=y|e<<16|-16777216;q[c+16>>2]=y;q[U+20>>2]=G;q[U+16>>2]=y;e=g+O|0;c=e;o:{if(!H){break o}c=e;if((H|0)==(J|0)){break o}q[e+20>>2]=G;q[e+16>>2]=y;c=g+I|0;q[c+20>>2]=G;q[c+16>>2]=y;c=g+Q|0}g=c;H=H+1|0;y=q[b+16>>2];c=q[a+28>>2];F=q[a+24>>2];J=w(y,((c-F|0)/240|0)+ -1|0);if(H>>>0>>0){continue}break}}if(!((c-F|0)==240|q[a+212>>2]<1)){e=q[a+208>>2];i=q[a+20>>2]+40|0;J=0;while(1){if((y|0)>0){c=(w(J,240)+F|0)+208|0;F=0;while(1){i=kV(kV(kV(kV(i,c,q[a+212>>2]<<2)+e|0,c,q[a+212>>2]<<2)+e|0,c,q[a+212>>2]<<2)+e|0,c,q[a+212>>2]<<2)+e|0;F=F+1|0;y=q[b+16>>2];if((F|0)<(y|0)){continue}break}F=q[a+24>>2];c=q[a+28>>2]}J=J+1|0;if(J>>>0<((c-F|0)/240|0)+ -1>>>0){continue}break}}if((c-F|0)==240|q[a+216>>2]<1){break a}e=q[a+208>>2];i=(q[a+20>>2]+(q[a+212>>2]<<2)|0)+40|0;J=0;while(1){if((y|0)>=1){c=(w(J,240)+F|0)+224|0;F=0;while(1){i=kV(kV(kV(kV(i,c,q[a+216>>2]<<2)+e|0,c,q[a+216>>2]<<2)+e|0,c,q[a+216>>2]<<2)+e|0,c,q[a+216>>2]<<2)+e|0;F=F+1|0;y=q[b+16>>2];if((F|0)<(y|0)){continue}break}F=q[a+24>>2];c=q[a+28>>2]}J=J+1|0;if(J>>>0<((c-F|0)/240|0)+ -1>>>0){continue}break}}ue=d+448|0}function Pj(a,b,c,d,e,f,g,h){var i=0,j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),z=x(0),A=0,B=x(0),C=x(0),D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=0,S=x(0),T=x(0),U=x(0),V=x(0),W=x(0),X=x(0);i=ue-144|0;ue=i;a:{b:{A=q[b+4>>2];if(A>>>0>4){break b}c:{switch(A-1|0){default:ft(i+96|0,x(n[q[q[h>>2]+16>>2]](h,u[b+20>>2],u[b+8>>2])),x(n[q[q[h>>2]+16>>2]](h,u[b+24>>2],u[b+12>>2])),x(n[q[q[h>>2]+16>>2]](h,u[b+28>>2],u[b+16>>2])));b=q[i+140>>2];q[a+40>>2]=q[i+136>>2];q[a+44>>2]=b;b=q[i+132>>2];q[a+32>>2]=q[i+128>>2];q[a+36>>2]=b;b=q[i+124>>2];q[a+24>>2]=q[i+120>>2];q[a+28>>2]=b;b=q[i+116>>2];q[a+16>>2]=q[i+112>>2];q[a+20>>2]=b;b=q[i+108>>2];q[a+8>>2]=q[i+104>>2];q[a+12>>2]=b;b=q[i+100>>2];q[a>>2]=q[i+96>>2];q[a+4>>2]=b;break a;case 3:v=x(n[q[q[h>>2]+16>>2]](h,u[b+24>>2],u[b+12>>2]));w=x(n[q[q[h>>2]+16>>2]](h,u[b+28>>2],u[b+16>>2]));F=x(n[q[q[h>>2]+16>>2]](h,u[b+32>>2],u[b+20>>2]));o=x(n[q[q[h>>2]+16>>2]](h,u[b+48>>2],u[b+36>>2]));k=x(n[q[q[h>>2]+16>>2]](h,u[b+52>>2],u[b+40>>2]));l=x(n[q[q[h>>2]+16>>2]](h,u[b+56>>2],u[b+44>>2]));f=x(n[q[q[h>>2]+16>>2]](h,u[b- -64>>2],u[b+60>>2]));k=x(k-w);o=x(o-v);l=x(l-F);if(((x(y(k))<=x(9.999999974752427e-7))<<1|x(y(o))<=x(9.999999974752427e-7)|(x(y(l))<=x(9.999999974752427e-7))<<2)==7){ft(i+96|0,x(0),x(0),x(0));b=q[i+140>>2];q[a+40>>2]=q[i+136>>2];q[a+44>>2]=b;b=q[i+132>>2];q[a+32>>2]=q[i+128>>2];q[a+36>>2]=b;b=q[i+124>>2];q[a+24>>2]=q[i+120>>2];q[a+28>>2]=b;b=q[i+116>>2];q[a+16>>2]=q[i+112>>2];q[a+20>>2]=b;b=q[i+108>>2];q[a+8>>2]=q[i+104>>2];q[a+12>>2]=b;b=q[i+100>>2];q[a>>2]=q[i+96>>2];q[a+4>>2]=b;break a}g=q[b+8>>2];e=(g|0)>1?g:1;m=x(E(x(x(x(o*o)+x(k*k))+x(l*l))));A=q[b+68>>2];c=0;d:{if(A>>>0>1){break d}c=(d|0)%(e|0)|0;if(!(A-1)){break d}j=x(x(n[q[q[h>>2]+12>>2]](h))*x(e|0));e:{if(x(y(j))=2?x(x(m/x(e+ -1|0))*x(c|0)):x(0)));B=x(l*f);C=x(k*f);D=x(o*f);f:{if(!!(x(y(k))>x(.9990000128746033))){f=x(o*x(0));r=x(k+f);m=x(x(k*x(0))-x(l*x(0)));j=x(x(-l)-f);f=x(x(1)/x(E(x(x(r*r)+x(x(m*m)+x(j*j))))));m=x(m*f);j=x(j*f);p=x(x(k*m)-x(o*j));z=p;t=x(p*p);f=x(r*f);s=x(x(l*j)-x(k*f));p=x(x(o*f)-x(l*m));t=x(x(1)/x(E(x(t+x(x(s*s)+x(p*p))))));r=x(z*t);p=x(p*t);s=x(s*t);break f}j=x(l*x(0));f=x(o-j);p=f;m=x(x(k*x(0))-x(o*x(0)));j=x(j-k);f=x(x(1)/x(E(x(x(m*m)+x(x(j*j)+x(f*f))))));p=x(p*f);s=x(j*f);j=x(x(o*p)-x(k*s));z=j;t=x(j*j);r=x(m*f);m=x(x(k*r)-x(l*p));j=x(x(l*s)-x(o*r));t=x(x(1)/x(E(x(t+x(x(m*m)+x(j*j))))));f=x(z*t);j=x(j*t);m=x(m*t)}F=x(F+B);w=x(w+C);v=x(v+D);g:{if(q[b>>2]){u[a+32>>2]=l;u[a+16>>2]=k;u[a>>2]=o;u[a+4>>2]=s;u[a+8>>2]=m;u[a+36>>2]=r;u[a+20>>2]=p;u[a+40>>2]=f;u[a+24>>2]=j;break g}b=q[1831];q[a+40>>2]=q[1830];q[a+44>>2]=b;b=q[1829];q[a+32>>2]=q[1828];q[a+36>>2]=b;b=q[1827];q[a+24>>2]=q[1826];q[a+28>>2]=b;b=q[1825];q[a+16>>2]=q[1824];q[a+20>>2]=b;b=q[1823];q[a+8>>2]=q[1822];q[a+12>>2]=b;b=q[1821];q[a>>2]=q[1820];q[a+4>>2]=b}u[a+12>>2]=v;u[a+44>>2]=F;u[a+28>>2]=w;break a;case 0:at(i+96|0,x(n[q[q[h>>2]+16>>2]](h,u[b+20>>2],u[b+16>>2])));bt(i+48|0,x(n[q[q[h>>2]+16>>2]](h,u[b+28>>2],u[b+24>>2])));ft(i,x(0),x(n[q[q[h>>2]+16>>2]](h,u[b+12>>2],u[b+8>>2])),x(0));f=u[i+72>>2];W=u[i+76>>2];k=u[i+68>>2];r=u[i+36>>2];p=u[i+20>>2];s=u[i+40>>2];v=u[i+24>>2];o=u[i+56>>2];X=u[i+60>>2];l=u[i+48>>2];m=u[i+52>>2];j=u[i+64>>2];w=u[i+32>>2];F=u[i>>2];t=u[i+16>>2];B=u[i+4>>2];C=u[i+8>>2];M=u[i+44>>2];D=u[i+136>>2];N=u[i+28>>2];z=u[i+132>>2];O=u[i+12>>2];G=u[i+128>>2];S=x(x(M*D)+x(x(N*z)+x(u[i+140>>2]+x(O*G))));H=u[i+88>>2];I=u[i+120>>2];J=u[i+116>>2];K=u[i+112>>2];T=x(x(M*I)+x(x(N*J)+x(u[i+124>>2]+x(O*K))));L=u[i+84>>2];Q=u[i+96>>2];P=x(u[i+108>>2]+x(Q*O));O=u[i+100>>2];P=x(P+x(O*N));N=u[i+104>>2];P=x(P+x(N*M));M=u[i+80>>2];u[a+44>>2]=x(S*H)+x(x(T*L)+x(u[i+92>>2]+x(P*M)));U=x(x(s*D)+x(x(v*z)+x(x(C*G)+x(0))));V=x(x(s*I)+x(x(v*J)+x(x(C*K)+x(0))));s=x(x(x(x(Q*C)+x(0))+x(O*v))+x(N*s));u[a+40>>2]=x(H*U)+x(x(L*V)+x(x(M*s)+x(0)));v=x(x(r*D)+x(x(p*z)+x(x(B*G)+x(0))));C=x(x(r*I)+x(x(p*J)+x(x(B*K)+x(0))));r=x(x(x(x(Q*B)+x(0))+x(O*p))+x(N*r));u[a+36>>2]=x(H*v)+x(x(L*C)+x(x(M*r)+x(0)));p=x(x(w*D)+x(x(t*z)+x(x(F*G)+x(0))));B=x(x(w*I)+x(x(t*J)+x(x(F*K)+x(0))));w=x(x(x(x(Q*F)+x(0))+x(O*t))+x(N*w));u[a+32>>2]=x(H*p)+x(x(L*B)+x(x(M*w)+x(0)));u[a+28>>2]=x(S*f)+x(x(T*k)+x(W+x(P*j)));u[a+24>>2]=x(U*f)+x(x(V*k)+x(x(s*j)+x(0)));u[a+20>>2]=x(v*f)+x(x(C*k)+x(x(r*j)+x(0)));u[a+16>>2]=x(p*f)+x(x(B*k)+x(x(w*j)+x(0)));u[a+12>>2]=x(S*o)+x(x(T*m)+x(X+x(P*l)));u[a+8>>2]=x(U*o)+x(x(V*m)+x(x(s*l)+x(0)));u[a+4>>2]=x(v*o)+x(x(C*m)+x(x(r*l)+x(0)));u[a>>2]=x(p*o)+x(x(B*m)+x(x(w*l)+x(0)));break a;case 2:break b;case 1:break c}}A=q[1831];q[a+40>>2]=q[1830];q[a+44>>2]=A;A=q[1829];q[a+32>>2]=q[1828];q[a+36>>2]=A;A=q[1827];q[a+24>>2]=q[1826];q[a+28>>2]=A;A=q[1825];q[a+16>>2]=q[1824];q[a+20>>2]=A;A=q[1823];q[a+8>>2]=q[1822];q[a+12>>2]=A;A=q[1821];q[a>>2]=q[1820];q[a+4>>2]=A;R=q[b+8>>2];if(R>>>0>1){break a}A=q[b+16>>2];h:{if(R-1){n[q[q[c>>2]+92>>2]](i+96|0,c,q[b+12>>2]);break h}n[q[q[c>>2]+128>>2]](i+96|0,c,q[b+12>>2])}c=q[i+96>>2];if(!c){break a}R=yp(i+96|0);yp(i+108|0);yp(i+120|0);yp(i+132|0);i:{if(A>>>0>4){break i}j:{switch(A-1|0){default:qr(i+48|0,c,h,e,g,f);d=q[i+92>>2];q[i+136>>2]=q[i+88>>2];q[i+140>>2]=d;d=q[i+84>>2];q[i+128>>2]=q[i+80>>2];q[i+132>>2]=d;d=q[i+76>>2];q[i+120>>2]=q[i+72>>2];q[i+124>>2]=d;d=i- -64|0;e=q[d+4>>2];q[i+112>>2]=q[d>>2];q[i+116>>2]=e;d=q[i+60>>2];q[i+104>>2]=q[i+56>>2];q[i+108>>2]=d;d=q[i+52>>2];q[i+96>>2]=q[i+48>>2];q[i+100>>2]=d;break i;case 0:sr(i+48|0,c,d,e,g,f);d=q[i+92>>2];q[i+136>>2]=q[i+88>>2];q[i+140>>2]=d;d=q[i+84>>2];q[i+128>>2]=q[i+80>>2];q[i+132>>2]=d;d=q[i+76>>2];q[i+120>>2]=q[i+72>>2];q[i+124>>2]=d;d=i- -64|0;e=q[d+4>>2];q[i+112>>2]=q[d>>2];q[i+116>>2]=e;d=q[i+60>>2];q[i+104>>2]=q[i+56>>2];q[i+108>>2]=d;d=q[i+52>>2];q[i+96>>2]=q[i+48>>2];q[i+100>>2]=d;break i;case 1:rr(i+48|0,c,h,e,g,f);d=q[i+92>>2];q[i+136>>2]=q[i+88>>2];q[i+140>>2]=d;d=q[i+84>>2];q[i+128>>2]=q[i+80>>2];q[i+132>>2]=d;d=q[i+76>>2];q[i+120>>2]=q[i+72>>2];q[i+124>>2]=d;d=i- -64|0;e=q[d+4>>2];q[i+112>>2]=q[d>>2];q[i+116>>2]=e;d=q[i+60>>2];q[i+104>>2]=q[i+56>>2];q[i+108>>2]=d;d=q[i+52>>2];q[i+96>>2]=q[i+48>>2];q[i+100>>2]=d;break i;case 2:ur(i+48|0,c,d,e,g,f);d=q[i+92>>2];q[i+136>>2]=q[i+88>>2];q[i+140>>2]=d;d=q[i+84>>2];q[i+128>>2]=q[i+80>>2];q[i+132>>2]=d;d=q[i+76>>2];q[i+120>>2]=q[i+72>>2];q[i+124>>2]=d;d=i- -64|0;e=q[d+4>>2];q[i+112>>2]=q[d>>2];q[i+116>>2]=e;d=q[i+60>>2];q[i+104>>2]=q[i+56>>2];q[i+108>>2]=d;d=q[i+52>>2];q[i+96>>2]=q[i+48>>2];q[i+100>>2]=d;break i;case 3:break j}}tr(i+48|0,c,h,e,g,f);d=q[i+92>>2];q[i+136>>2]=q[i+88>>2];q[i+140>>2]=d;d=q[i+84>>2];q[i+128>>2]=q[i+80>>2];q[i+132>>2]=d;d=q[i+76>>2];q[i+120>>2]=q[i+72>>2];q[i+124>>2]=d;d=i- -64|0;e=q[d+4>>2];q[i+112>>2]=q[d>>2];q[i+116>>2]=e;d=q[i+60>>2];q[i+104>>2]=q[i+56>>2];q[i+108>>2]=d;d=q[i+52>>2];q[i+96>>2]=q[i+48>>2];q[i+100>>2]=d}gt(i+48|0,nt(i,R));g=q[i+92>>2];d=a+40|0;q[d>>2]=q[i+88>>2];q[d+4>>2]=g;e=q[i+84>>2];q[a+32>>2]=q[i+80>>2];q[a+36>>2]=e;e=q[i+76>>2];q[a+24>>2]=q[i+72>>2];q[a+28>>2]=e;e=i- -64|0;g=q[e+4>>2];q[a+16>>2]=q[e>>2];q[a+20>>2]=g;e=q[i+60>>2];q[a+8>>2]=q[i+56>>2];q[a+12>>2]=e;e=q[i+52>>2];q[a>>2]=q[i+48>>2];q[a+4>>2]=e;if(q[b>>2]){q[a>>2]=q[i+120>>2];q[a+16>>2]=q[i+124>>2];q[a+32>>2]=q[i+128>>2];q[a+4>>2]=q[i+132>>2];q[a+20>>2]=q[i+136>>2];q[a+36>>2]=q[i+140>>2];q[a+8>>2]=q[i+108>>2];q[a+24>>2]=q[i+112>>2];q[d>>2]=q[i+116>>2]}n[q[q[c>>2]+8>>2]](c)|0;break a}c=0;e=q[1831];q[a+40>>2]=q[1830];q[a+44>>2]=e;e=q[1829];q[a+32>>2]=q[1828];q[a+36>>2]=e;e=q[1827];q[a+24>>2]=q[1826];q[a+28>>2]=e;e=q[1825];q[a+16>>2]=q[1824];q[a+20>>2]=e;e=q[1823];q[a+8>>2]=q[1822];q[a+12>>2]=e;e=q[1821];q[a>>2]=q[1820];q[a+4>>2]=e;if((A|0)!=3){break a}f=x(n[q[q[h>>2]+16>>2]](h,u[b+16>>2],u[b+12>>2]));k=x(n[q[q[h>>2]+16>>2]](h,u[b+24>>2],u[b+20>>2]));o=x(n[q[q[h>>2]+16>>2]](h,u[b+32>>2],u[b+28>>2]));e=q[b+8>>2];e=(e|0)>1?e:1;g=q[b+36>>2];k:{if(g>>>0>2){break k}l:{switch(g-1|0){case 0:c=(d|0)%(e|0)|0;break k;case 1:c=e+((d|0)%(e|0)^-1)|0;break k;default:break l}}l=x(x(n[q[q[h>>2]+12>>2]](h))*x(e|0));m:{if(x(y(l))>2]+16>>2]](h,u[b+48>>2],u[b+44>>2]));b=q[b+40>>2];if(b>>>0>2){break a}k=x(x(k+x(x(o-k)*x(x(c|0)/x(e|0))))+l);n:{switch(b-1|0){default:ft(i+96|0,x(0),x(0),f);at(i+48|0,k);f=u[i+72>>2];K=u[i+76>>2];k=u[i+68>>2];r=u[i+132>>2];p=u[i+116>>2];s=u[i+136>>2];v=u[i+120>>2];o=u[i+56>>2];L=u[i+60>>2];l=u[i+48>>2];m=u[i+52>>2];j=u[i+64>>2];w=u[i+128>>2];F=u[i+96>>2];t=u[i+112>>2];B=u[i+100>>2];C=u[i+104>>2];H=u[i+140>>2];D=u[i+88>>2];I=u[i+124>>2];z=u[i+84>>2];J=u[i+108>>2];G=u[i+80>>2];u[a+44>>2]=x(H*D)+x(x(I*z)+x(u[i+92>>2]+x(J*G)));u[a+40>>2]=x(s*D)+x(x(v*z)+x(x(C*G)+x(0)));u[a+36>>2]=x(r*D)+x(x(p*z)+x(x(B*G)+x(0)));u[a+32>>2]=x(w*D)+x(x(t*z)+x(x(F*G)+x(0)));u[a+28>>2]=x(H*f)+x(x(I*k)+x(K+x(J*j)));u[a+24>>2]=x(s*f)+x(x(v*k)+x(x(C*j)+x(0)));u[a+20>>2]=x(r*f)+x(x(p*k)+x(x(B*j)+x(0)));u[a+16>>2]=x(w*f)+x(x(t*k)+x(x(F*j)+x(0)));u[a+12>>2]=x(x(L+x(l*J))+x(m*I))+x(o*H);u[a+8>>2]=x(x(x(l*C)+x(0))+x(m*v))+x(o*s);u[a+4>>2]=x(x(x(l*B)+x(0))+x(m*p))+x(o*r);u[a>>2]=x(x(x(l*F)+x(0))+x(m*t))+x(o*w);break a;case 0:ft(i+96|0,f,x(0),x(0));bt(i+48|0,k);f=u[i+72>>2];K=u[i+76>>2];k=u[i+68>>2];r=u[i+132>>2];p=u[i+116>>2];s=u[i+136>>2];v=u[i+120>>2];o=u[i+56>>2];L=u[i+60>>2];l=u[i+48>>2];m=u[i+52>>2];j=u[i+64>>2];w=u[i+128>>2];F=u[i+96>>2];t=u[i+112>>2];B=u[i+100>>2];C=u[i+104>>2];H=u[i+140>>2];D=u[i+88>>2];I=u[i+124>>2];z=u[i+84>>2];J=u[i+108>>2];G=u[i+80>>2];u[a+44>>2]=x(H*D)+x(x(I*z)+x(u[i+92>>2]+x(J*G)));u[a+40>>2]=x(s*D)+x(x(v*z)+x(x(C*G)+x(0)));u[a+36>>2]=x(r*D)+x(x(p*z)+x(x(B*G)+x(0)));u[a+32>>2]=x(w*D)+x(x(t*z)+x(x(F*G)+x(0)));u[a+28>>2]=x(H*f)+x(x(I*k)+x(K+x(J*j)));u[a+24>>2]=x(s*f)+x(x(v*k)+x(x(C*j)+x(0)));u[a+20>>2]=x(r*f)+x(x(p*k)+x(x(B*j)+x(0)));u[a+16>>2]=x(w*f)+x(x(t*k)+x(x(F*j)+x(0)));u[a+12>>2]=x(x(L+x(l*J))+x(m*I))+x(o*H);u[a+8>>2]=x(x(x(l*C)+x(0))+x(m*v))+x(o*s);u[a+4>>2]=x(x(x(l*B)+x(0))+x(m*p))+x(o*r);u[a>>2]=x(x(x(l*F)+x(0))+x(m*t))+x(o*w);break a;case 1:break n}}ft(i+96|0,x(0),f,x(0));ct(i+48|0,k);f=u[i+72>>2];K=u[i+76>>2];k=u[i+68>>2];r=u[i+132>>2];p=u[i+116>>2];s=u[i+136>>2];v=u[i+120>>2];o=u[i+56>>2];L=u[i+60>>2];l=u[i+48>>2];m=u[i+52>>2];j=u[i+64>>2];w=u[i+128>>2];F=u[i+96>>2];t=u[i+112>>2];B=u[i+100>>2];C=u[i+104>>2];H=u[i+140>>2];D=u[i+88>>2];I=u[i+124>>2];z=u[i+84>>2];J=u[i+108>>2];G=u[i+80>>2];u[a+44>>2]=x(H*D)+x(x(I*z)+x(u[i+92>>2]+x(J*G)));u[a+40>>2]=x(s*D)+x(x(v*z)+x(x(C*G)+x(0)));u[a+36>>2]=x(r*D)+x(x(p*z)+x(x(B*G)+x(0)));u[a+32>>2]=x(w*D)+x(x(t*z)+x(x(F*G)+x(0)));u[a+28>>2]=x(H*f)+x(x(I*k)+x(K+x(J*j)));u[a+24>>2]=x(s*f)+x(x(v*k)+x(x(C*j)+x(0)));u[a+20>>2]=x(r*f)+x(x(p*k)+x(x(B*j)+x(0)));u[a+16>>2]=x(w*f)+x(x(t*k)+x(x(F*j)+x(0)));u[a+12>>2]=x(x(L+x(l*J))+x(m*I))+x(o*H);u[a+8>>2]=x(x(x(l*C)+x(0))+x(m*v))+x(o*s);u[a+4>>2]=x(x(x(l*B)+x(0))+x(m*p))+x(o*r);u[a>>2]=x(x(x(l*F)+x(0))+x(m*t))+x(o*w)}ue=i+144|0}function ZU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=ue-16|0;ue=l;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{if(a>>>0<=244){f=q[93110];h=a>>>0<11?16:a+11&-8;b=h>>>3|0;a=f>>>b|0;if(a&3){d=b+((a^-1)&1)|0;b=d<<3;e=q[b+372488>>2];a=e+8|0;c=q[e+8>>2];b=b+372480|0;l:{if((c|0)==(b|0)){m=372440,n=zW(-2,d)&f,q[m>>2]=n;break l}q[c+12>>2]=b;q[b+8>>2]=c}b=d<<3;q[e+4>>2]=b|3;b=b+e|0;q[b+4>>2]=q[b+4>>2]|1;break a}k=q[93112];if(h>>>0<=k>>>0){break k}if(a){c=a<>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;c=(c|a)+(b>>>a|0)|0;a=c<<3;g=q[a+372488>>2];b=q[g+8>>2];a=a+372480|0;m:{if((b|0)==(a|0)){f=zW(-2,c)&f;q[93110]=f;break m}q[b+12>>2]=a;q[a+8>>2]=b}a=g+8|0;q[g+4>>2]=h|3;d=g+h|0;b=c<<3;e=b-h|0;q[d+4>>2]=e|1;q[b+g>>2]=e;if(k){b=k>>>3|0;c=(b<<3)+372480|0;h=q[93115];b=1<>2]}q[c+8>>2]=h;q[b+12>>2]=h;q[h+12>>2]=c;q[h+8>>2]=b}q[93115]=d;q[93112]=e;break a}i=q[93111];if(!i){break k}b=(i&0-i)+ -1|0;a=b>>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;b=q[((c|a)+(b>>>a|0)<<2)+372744>>2];d=(q[b+4>>2]&-8)-h|0;c=b;while(1){o:{a=q[c+16>>2];if(!a){a=q[c+20>>2];if(!a){break o}}c=(q[a+4>>2]&-8)-h|0;e=c>>>0>>0;d=e?c:d;b=e?a:b;c=a;continue}break}j=q[b+24>>2];e=q[b+12>>2];if((e|0)!=(b|0)){a=q[b+8>>2];q[a+12>>2]=e;q[e+8>>2]=a;break b}c=b+20|0;a=q[c>>2];if(!a){a=q[b+16>>2];if(!a){break j}c=b+16|0}while(1){g=c;e=a;c=a+20|0;a=q[c>>2];if(a){continue}c=e+16|0;a=q[e+16>>2];if(a){continue}break}q[g>>2]=0;break b}h=-1;if(a>>>0>4294967231){break k}a=a+11|0;h=a&-8;i=q[93111];if(!i){break k}a=a>>>8|0;g=0;p:{if(!a){break p}g=31;if(h>>>0>16777215){break p}b=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(c|(b|d))|0;g=(a<<1|h>>>a+21&1)+28|0}c=0-h|0;d=q[(g<<2)+372744>>2];q:{r:{s:{if(!d){a=0;break s}b=h<<((g|0)==31?0:25-(g>>>1|0)|0);a=0;while(1){t:{f=(q[d+4>>2]&-8)-h|0;if(f>>>0>=c>>>0){break t}e=d;c=f;if(c){break t}c=0;a=d;break r}f=q[d+20>>2];d=q[((b>>>29&4)+d|0)+16>>2];a=f?(f|0)==(d|0)?a:f:a;b=b<<((d|0)!=0);if(d){continue}break}}if(!(a|e)){a=2<>>12&16;d=a;b=b>>>a|0;a=b>>>5&8;d=d|a;b=b>>>a|0;a=b>>>2&4;d=d|a;b=b>>>a|0;a=b>>>1&2;d=d|a;b=b>>>a|0;a=b>>>1&1;a=q[((d|a)+(b>>>a|0)<<2)+372744>>2]}if(!a){break q}}while(1){b=(q[a+4>>2]&-8)-h|0;d=b>>>0>>0;c=d?b:c;e=d?a:e;b=q[a+16>>2];if(b){a=b}else{a=q[a+20>>2]}if(a){continue}break}}if(!e|c>>>0>=q[93112]-h>>>0){break k}g=q[e+24>>2];b=q[e+12>>2];if((e|0)!=(b|0)){a=q[e+8>>2];q[a+12>>2]=b;q[b+8>>2]=a;break c}d=e+20|0;a=q[d>>2];if(!a){a=q[e+16>>2];if(!a){break i}d=e+16|0}while(1){f=d;b=a;d=a+20|0;a=q[d>>2];if(a){continue}d=b+16|0;a=q[b+16>>2];if(a){continue}break}q[f>>2]=0;break c}c=q[93112];if(c>>>0>=h>>>0){d=q[93115];b=c-h|0;u:{if(b>>>0>=16){q[93112]=b;a=d+h|0;q[93115]=a;q[a+4>>2]=b|1;q[c+d>>2]=b;q[d+4>>2]=h|3;break u}q[93115]=0;q[93112]=0;q[d+4>>2]=c|3;a=c+d|0;q[a+4>>2]=q[a+4>>2]|1}a=d+8|0;break a}j=q[93113];if(j>>>0>h>>>0){b=j-h|0;q[93113]=b;c=q[93116];a=c+h|0;q[93116]=a;q[a+4>>2]=b|1;q[c+4>>2]=h|3;a=c+8|0;break a}a=0;i=h+47|0;b=i;if(q[93228]){c=q[93230]}else{q[93231]=-1;q[93232]=-1;q[93229]=4096;q[93230]=4096;q[93228]=l+12&-16^1431655768;q[93233]=0;q[93221]=0;c=4096}g=b+c|0;f=0-c|0;c=g&f;if(c>>>0<=h>>>0){break a}e=q[93220];if(e){d=q[93218];b=d+c|0;if(b>>>0<=d>>>0|b>>>0>e>>>0){break a}}if(r[372884]&4){break f}v:{w:{d=q[93116];if(d){a=372888;while(1){b=q[a>>2];if(b+q[a+4>>2]>>>0>d>>>0?b>>>0<=d>>>0:0){break w}a=q[a+8>>2];if(a){continue}break}}b=eV(0);if((b|0)==-1){break g}f=c;d=q[93229];a=d+ -1|0;if(a&b){f=(c-b|0)+(a+b&0-d)|0}if(f>>>0<=h>>>0|f>>>0>2147483646){break g}e=q[93220];if(e){d=q[93218];a=d+f|0;if(a>>>0<=d>>>0|a>>>0>e>>>0){break g}}a=eV(f);if((b|0)!=(a|0)){break v}break e}f=f&g-j;if(f>>>0>2147483646){break g}b=eV(f);if((b|0)==(q[a>>2]+q[a+4>>2]|0)){break h}a=b}if(!((a|0)==-1|h+48>>>0<=f>>>0)){b=q[93230];b=b+(i-f|0)&0-b;if(b>>>0>2147483646){b=a;break e}if((eV(b)|0)!=-1){f=b+f|0;b=a;break e}eV(0-f|0);break g}b=a;if((a|0)!=-1){break e}break g}e=0;break b}b=0;break c}if((b|0)!=-1){break e}}q[93221]=q[93221]|4}if(c>>>0>2147483646){break d}b=eV(c);a=eV(0);if(b>>>0>=a>>>0|(b|0)==-1|(a|0)==-1){break d}f=a-b|0;if(f>>>0<=h+40>>>0){break d}}a=q[93218]+f|0;q[93218]=a;if(a>>>0>t[93219]){q[93219]=a}x:{y:{z:{d=q[93116];if(d){a=372888;while(1){e=q[a>>2];c=q[a+4>>2];if((e+c|0)==(b|0)){break z}a=q[a+8>>2];if(a){continue}break}break y}a=q[93114];if(!(b>>>0>=a>>>0?a:0)){q[93114]=b}a=0;q[93223]=f;q[93222]=b;q[93118]=-1;q[93119]=q[93228];q[93225]=0;while(1){d=a<<3;c=d+372480|0;q[d+372488>>2]=c;q[d+372492>>2]=c;a=a+1|0;if((a|0)!=32){continue}break}d=f+ -40|0;a=b+8&7?-8-b&7:0;c=d-a|0;q[93113]=c;a=a+b|0;q[93116]=a;q[a+4>>2]=c|1;q[(b+d|0)+4>>2]=40;q[93117]=q[93232];break x}if(r[a+12|0]&8|b>>>0<=d>>>0|e>>>0>d>>>0){break y}q[a+4>>2]=c+f;a=d+8&7?-8-d&7:0;c=a+d|0;q[93116]=c;b=q[93113]+f|0;a=b-a|0;q[93113]=a;q[c+4>>2]=a|1;q[(b+d|0)+4>>2]=40;q[93117]=q[93232];break x}e=q[93114];if(b>>>0>>0){q[93114]=b;e=0}c=b+f|0;a=372888;A:{B:{C:{D:{E:{F:{while(1){if((c|0)!=q[a>>2]){a=q[a+8>>2];if(a){continue}break F}break}if(!(r[a+12|0]&8)){break E}}a=372888;while(1){c=q[a>>2];if(c>>>0<=d>>>0){g=c+q[a+4>>2]|0;if(g>>>0>d>>>0){break D}}a=q[a+8>>2];continue}}q[a>>2]=b;q[a+4>>2]=q[a+4>>2]+f;j=(b+8&7?-8-b&7:0)+b|0;q[j+4>>2]=h|3;b=c+(c+8&7?-8-c&7:0)|0;a=(b-j|0)-h|0;g=h+j|0;if((b|0)==(d|0)){q[93116]=g;a=q[93113]+a|0;q[93113]=a;q[g+4>>2]=a|1;break B}if(q[93115]==(b|0)){q[93115]=g;a=q[93112]+a|0;q[93112]=a;q[g+4>>2]=a|1;q[a+g>>2]=a;break B}c=q[b+4>>2];if((c&3)==1){i=c&-8;G:{if(c>>>0<=255){e=q[b+8>>2];c=c>>>3|0;d=q[b+12>>2];if((d|0)==(e|0)){m=372440,n=q[93110]&zW(-2,c),q[m>>2]=n;break G}q[e+12>>2]=d;q[d+8>>2]=e;break G}k=q[b+24>>2];f=q[b+12>>2];H:{if((f|0)!=(b|0)){c=q[b+8>>2];q[c+12>>2]=f;q[f+8>>2]=c;break H}I:{d=b+20|0;h=q[d>>2];if(h){break I}d=b+16|0;h=q[d>>2];if(h){break I}f=0;break H}while(1){c=d;f=h;d=f+20|0;h=q[d>>2];if(h){continue}d=f+16|0;h=q[f+16>>2];if(h){continue}break}q[c>>2]=0}if(!k){break G}d=q[b+28>>2];c=(d<<2)+372744|0;J:{if(q[c>>2]==(b|0)){q[c>>2]=f;if(f){break J}m=372444,n=q[93111]&zW(-2,d),q[m>>2]=n;break G}q[k+(q[k+16>>2]==(b|0)?16:20)>>2]=f;if(!f){break G}}q[f+24>>2]=k;c=q[b+16>>2];if(c){q[f+16>>2]=c;q[c+24>>2]=f}c=q[b+20>>2];if(!c){break G}q[f+20>>2]=c;q[c+24>>2]=f}b=b+i|0;a=a+i|0}q[b+4>>2]=q[b+4>>2]&-2;q[g+4>>2]=a|1;q[a+g>>2]=a;if(a>>>0<=255){a=a>>>3|0;b=(a<<3)+372480|0;c=q[93110];a=1<>2]}q[b+8>>2]=g;q[a+12>>2]=g;q[g+12>>2]=b;q[g+8>>2]=a;break B}b=g;d=a>>>8|0;c=0;L:{if(!d){break L}c=31;if(a>>>0>16777215){break L}c=d;d=d+1048320>>>16&8;c=c<>>16&4;c=c<>>16&2;c=(c<>>15|0)-(e|(d|f))|0;c=(c<<1|a>>>c+21&1)+28|0}q[b+28>>2]=c;q[g+16>>2]=0;q[g+20>>2]=0;e=(c<<2)+372744|0;d=q[93111];b=1<>2]=g;q[g+24>>2]=e;break M}d=a<<((c|0)==31?0:25-(c>>>1|0)|0);b=q[e>>2];while(1){c=b;if((q[b+4>>2]&-8)==(a|0)){break C}b=d>>>29|0;d=d<<1;e=(c+(b&4)|0)+16|0;b=q[e>>2];if(b){continue}break}q[e>>2]=g;q[g+24>>2]=c}q[g+12>>2]=g;q[g+8>>2]=g;break B}e=f+ -40|0;a=b+8&7?-8-b&7:0;c=e-a|0;q[93113]=c;a=a+b|0;q[93116]=a;q[a+4>>2]=c|1;q[(b+e|0)+4>>2]=40;q[93117]=q[93232];a=(g+(g+ -39&7?39-g&7:0)|0)+ -47|0;c=a>>>0>>0?d:a;q[c+4>>2]=27;a=q[93225];q[c+16>>2]=q[93224];q[c+20>>2]=a;a=q[93223];q[c+8>>2]=q[93222];q[c+12>>2]=a;q[93224]=c+8;q[93223]=f;q[93222]=b;q[93225]=0;a=c+24|0;while(1){q[a+4>>2]=7;b=a+8|0;a=a+4|0;if(g>>>0>b>>>0){continue}break}if((c|0)==(d|0)){break x}q[c+4>>2]=q[c+4>>2]&-2;g=c-d|0;q[d+4>>2]=g|1;q[c>>2]=g;if(g>>>0<=255){a=g>>>3|0;b=(a<<3)+372480|0;c=q[93110];a=1<>2]}q[b+8>>2]=d;q[a+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=a;break x}q[d+16>>2]=0;q[d+20>>2]=0;a=d;c=g>>>8|0;b=0;O:{if(!c){break O}b=31;if(g>>>0>16777215){break O}b=c;c=c+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(e|(c|f))|0;b=(b<<1|g>>>b+21&1)+28|0}q[a+28>>2]=b;e=(b<<2)+372744|0;c=q[93111];a=1<>2]=d;q[d+24>>2]=e;break P}a=g<<((b|0)==31?0:25-(b>>>1|0)|0);b=q[e>>2];while(1){c=b;if((g|0)==(q[b+4>>2]&-8)){break A}b=a>>>29|0;a=a<<1;e=(c+(b&4)|0)+16|0;b=q[e>>2];if(b){continue}break}q[e>>2]=d;q[d+24>>2]=c}q[d+12>>2]=d;q[d+8>>2]=d;break x}a=q[c+8>>2];q[a+12>>2]=g;q[c+8>>2]=g;q[g+24>>2]=0;q[g+12>>2]=c;q[g+8>>2]=a}a=j+8|0;break a}a=q[c+8>>2];q[a+12>>2]=d;q[c+8>>2]=d;q[d+24>>2]=0;q[d+12>>2]=c;q[d+8>>2]=a}a=q[93113];if(a>>>0<=h>>>0){break d}b=a-h|0;q[93113]=b;c=q[93116];a=c+h|0;q[93116]=a;q[a+4>>2]=b|1;q[c+4>>2]=h|3;a=c+8|0;break a}q[91802]=48;a=0;break a}Q:{if(!g){break Q}d=q[e+28>>2];a=(d<<2)+372744|0;R:{if(q[a>>2]==(e|0)){q[a>>2]=b;if(b){break R}i=zW(-2,d)&i;q[93111]=i;break Q}q[g+(q[g+16>>2]==(e|0)?16:20)>>2]=b;if(!b){break Q}}q[b+24>>2]=g;a=q[e+16>>2];if(a){q[b+16>>2]=a;q[a+24>>2]=b}a=q[e+20>>2];if(!a){break Q}q[b+20>>2]=a;q[a+24>>2]=b}S:{if(c>>>0<=15){a=c+h|0;q[e+4>>2]=a|3;a=a+e|0;q[a+4>>2]=q[a+4>>2]|1;break S}q[e+4>>2]=h|3;d=e+h|0;q[d+4>>2]=c|1;q[c+d>>2]=c;if(c>>>0<=255){a=c>>>3|0;b=(a<<3)+372480|0;c=q[93110];a=1<>2]}q[b+8>>2]=d;q[a+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=a;break S}a=d;f=c>>>8|0;b=0;U:{if(!f){break U}b=31;if(c>>>0>16777215){break U}b=f;f=f+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(h|(f|g))|0;b=(b<<1|c>>>b+21&1)+28|0}q[a+28>>2]=b;q[d+16>>2]=0;q[d+20>>2]=0;f=(b<<2)+372744|0;V:{a=1<>2]=d;q[d+24>>2]=f;break W}a=c<<((b|0)==31?0:25-(b>>>1|0)|0);h=q[f>>2];while(1){b=h;if((q[b+4>>2]&-8)==(c|0)){break V}f=a>>>29|0;a=a<<1;f=(b+(f&4)|0)+16|0;h=q[f>>2];if(h){continue}break}q[f>>2]=d;q[d+24>>2]=b}q[d+12>>2]=d;q[d+8>>2]=d;break S}a=q[b+8>>2];q[a+12>>2]=d;q[b+8>>2]=d;q[d+24>>2]=0;q[d+12>>2]=b;q[d+8>>2]=a}a=e+8|0;break a}X:{if(!j){break X}c=q[b+28>>2];a=(c<<2)+372744|0;Y:{if(q[a>>2]==(b|0)){q[a>>2]=e;if(e){break Y}m=372444,n=zW(-2,c)&i,q[m>>2]=n;break X}q[(q[j+16>>2]==(b|0)?16:20)+j>>2]=e;if(!e){break X}}q[e+24>>2]=j;a=q[b+16>>2];if(a){q[e+16>>2]=a;q[a+24>>2]=e}a=q[b+20>>2];if(!a){break X}q[e+20>>2]=a;q[a+24>>2]=e}Z:{if(d>>>0<=15){a=d+h|0;q[b+4>>2]=a|3;a=a+b|0;q[a+4>>2]=q[a+4>>2]|1;break Z}q[b+4>>2]=h|3;e=b+h|0;q[e+4>>2]=d|1;q[d+e>>2]=d;if(k){a=k>>>3|0;c=(a<<3)+372480|0;h=q[93115];a=1<>2]}q[c+8>>2]=h;q[a+12>>2]=h;q[h+12>>2]=c;q[h+8>>2]=a}q[93115]=e;q[93112]=d}a=b+8|0}ue=l+16|0;return a|0} + + + +function Bz(a,b,c,d){var g=0,h=0,i=0,l=0,m=0,p=x(0),s=0,t=0,v=0,y=x(0),z=0,C=x(0),D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0);g=ue-192|0;ue=g;l=q[a+16>>2];if(l){v=q[a+36>>2];q[l>>2]=q[c+80>>2];h=q[c+84>>2];q[l+8>>2]=0;q[l+4>>2]=h;q[l+12>>2]=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);q[l+80>>2]=q[c+240>>2];q[l+84>>2]=q[c+244>>2];h=l+v|0;q[h>>2]=q[c+96>>2];i=q[c+100>>2];q[h+8>>2]=0;q[h+4>>2]=i;q[h+12>>2]=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);q[h+80>>2]=q[c+240>>2];q[h+84>>2]=q[c+244>>2];i=l+(v<<1)|0;q[i>>2]=q[c+112>>2];m=q[c+116>>2];q[i+8>>2]=0;q[i+4>>2]=m;q[i+12>>2]=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);q[i+80>>2]=q[c+240>>2];q[i+84>>2]=q[c+244>>2];m=l+w(v,3)|0;q[m>>2]=q[c+128>>2];s=q[c+132>>2];q[m+8>>2]=0;q[m+4>>2]=s;s=c- -64|0;q[m+12>>2]=r[s|0]|r[s+1|0]<<8|(r[s+2|0]<<16|r[s+3|0]<<24);q[m+80>>2]=q[c+240>>2];q[m+84>>2]=q[c+244>>2];q[l+24>>2]=q[c+144>>2];s=c+148|0;z=c+156|0;u[l+28>>2]=u[s>>2]+u[z>>2];t=c+152|0;u[h+24>>2]=u[c+144>>2]+u[t>>2];u[h+28>>2]=u[s>>2]+u[z>>2];q[i+24>>2]=q[c+144>>2];q[i+28>>2]=q[s>>2];u[m+24>>2]=u[c+144>>2]+u[t>>2];q[m+28>>2]=q[s>>2];q[l+40>>2]=q[c+160>>2];s=c+164|0;z=c+172|0;u[l+44>>2]=u[s>>2]+u[z>>2];t=c+168|0;u[h+40>>2]=u[c+160>>2]+u[t>>2];u[h+44>>2]=u[s>>2]+u[z>>2];q[i+40>>2]=q[c+160>>2];q[i+44>>2]=q[s>>2];u[m+40>>2]=u[c+160>>2]+u[t>>2];q[m+44>>2]=q[s>>2];q[l+48>>2]=q[c+176>>2];s=c+180|0;z=c+188|0;u[l+52>>2]=u[s>>2]+u[z>>2];t=c+184|0;u[h+48>>2]=u[c+176>>2]+u[t>>2];u[h+52>>2]=u[s>>2]+u[z>>2];q[i+48>>2]=q[c+176>>2];q[i+52>>2]=q[s>>2];u[m+48>>2]=u[c+176>>2]+u[t>>2];q[m+52>>2]=q[s>>2];q[l+56>>2]=q[c+192>>2];s=c+196|0;z=c+204|0;u[l+60>>2]=u[s>>2]+u[z>>2];t=c+200|0;u[h+56>>2]=u[c+192>>2]+u[t>>2];u[h+60>>2]=u[s>>2]+u[z>>2];q[i+56>>2]=q[c+192>>2];q[i+60>>2]=q[s>>2];u[m+56>>2]=u[c+192>>2]+u[t>>2];q[m+60>>2]=q[s>>2];q[l+64>>2]=q[c+208>>2];s=c+212|0;z=c+220|0;u[l+68>>2]=u[s>>2]+u[z>>2];t=c+216|0;u[h+64>>2]=u[c+208>>2]+u[t>>2];u[h+68>>2]=u[s>>2]+u[z>>2];q[i+64>>2]=q[c+208>>2];q[i+68>>2]=q[s>>2];u[m+64>>2]=u[c+208>>2]+u[t>>2];q[m+68>>2]=q[s>>2];q[l+72>>2]=q[c+224>>2];s=c+228|0;z=c+236|0;u[l+76>>2]=u[s>>2]+u[z>>2];t=c+232|0;u[h+72>>2]=u[c+224>>2]+u[t>>2];u[h+76>>2]=u[s>>2]+u[z>>2];q[i+72>>2]=q[c+224>>2];q[i+76>>2]=q[s>>2];u[m+72>>2]=u[c+224>>2]+u[t>>2];q[m+76>>2]=q[s>>2];s=q[b+12>>2];a:{if(s>>>0>3){break a}if(s-2){v=q[1831];q[g+184>>2]=q[1830];q[g+188>>2]=v;v=q[1829];q[g+176>>2]=q[1828];q[g+180>>2]=v;v=q[1827];q[g+168>>2]=q[1826];q[g+172>>2]=v;v=q[1825];q[g+160>>2]=q[1824];q[g+164>>2]=v;v=q[1823];q[g+152>>2]=q[1822];q[g+156>>2]=v;v=q[1821];q[g+144>>2]=q[1820];q[g+148>>2]=v;b:{if(r[b+36|0]){v=q[c+44>>2];q[g+88>>2]=q[c+40>>2];q[g+92>>2]=v;v=q[c+36>>2];q[g+80>>2]=q[c+32>>2];q[g+84>>2]=v;v=q[c+28>>2];q[g+72>>2]=q[c+24>>2];q[g+76>>2]=v;s=q[c+20>>2];v=g- -64|0;q[v>>2]=q[c+16>>2];q[v+4>>2]=s;v=q[c+4>>2];q[g+48>>2]=q[c>>2];q[g+52>>2]=v;v=q[c+12>>2];q[g+56>>2]=q[c+8>>2];q[g+60>>2]=v;vu(g+48|0,d,u[c+248>>2]);d=q[b+12>>2];v=q[a+8>>2];n[q[q[v>>2]+88>>2]](g+16|0,v);ru(d,g+144|0,g+128|0,g+112|0,g+96|0,g+48|0,nt(g+32|0,g+16|0));d=a+8|0;break b}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+32|0,d);ru(s,g+144|0,g+128|0,g+112|0,g+96|0,c,nt(g+48|0,g+32|0));d=a+8|0}u[l>>2]=u[l>>2]*u[g+128>>2];u[l+4>>2]=u[l+4>>2]*u[g+132>>2];u[h>>2]=u[h>>2]*u[g+128>>2];u[h+4>>2]=u[h+4>>2]*u[g+132>>2];u[i>>2]=u[i>>2]*u[g+128>>2];u[i+4>>2]=u[i+4>>2]*u[g+132>>2];u[m>>2]=u[m>>2]*u[g+128>>2];u[m+4>>2]=u[m+4>>2]*u[g+132>>2];v=q[d>>2];n[q[q[v>>2]+88>>2]](g+16|0,v);nt(g+48|0,g+16|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](g,d);uu(g+144|0,nt(g+32|0,g),g+128|0,q[b+28>>2],r[b+16|0]);p=u[g+184>>2];D=u[g+188>>2];C=u[g+180>>2];y=u[g+152>>2];F=u[g+156>>2];G=u[g+144>>2];K=u[g+148>>2];O=u[g+176>>2];L=u[g+168>>2];H=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());M=u[g+164>>2];I=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());N=u[g+172>>2];P=u[g+160>>2];J=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[l+4|0]=d;o[l+5|0]=d>>>8;o[l+6|0]=d>>>16;o[l+7|0]=d>>>24;d=(k(x(x(p*H)+x(x(C*I)+x(D+x(O*J))))),e(0));o[l+8|0]=d;o[l+9|0]=d>>>8;o[l+10|0]=d>>>16;o[l+11|0]=d>>>24;d=(k(x(x(y*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[l|0]=d;o[l+1|0]=d>>>8;o[l+2|0]=d>>>16;o[l+3|0]=d>>>24;H=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());I=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());J=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[h+4|0]=d;o[h+5|0]=d>>>8;o[h+6|0]=d>>>16;o[h+7|0]=d>>>24;d=(k(x(x(p*H)+x(x(C*I)+x(D+x(O*J))))),e(0));o[h+8|0]=d;o[h+9|0]=d>>>8;o[h+10|0]=d>>>16;o[h+11|0]=d>>>24;d=(k(x(x(y*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[h|0]=d;o[h+1|0]=d>>>8;o[h+2|0]=d>>>16;o[h+3|0]=d>>>24;H=(f(0,r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24)),j());I=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());J=(f(0,r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[i+4|0]=d;o[i+5|0]=d>>>8;o[i+6|0]=d>>>16;o[i+7|0]=d>>>24;d=(k(x(x(p*H)+x(x(C*I)+x(D+x(O*J))))),e(0));o[i+8|0]=d;o[i+9|0]=d>>>8;o[i+10|0]=d>>>16;o[i+11|0]=d>>>24;d=(k(x(x(y*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[i|0]=d;o[i+1|0]=d>>>8;o[i+2|0]=d>>>16;o[i+3|0]=d>>>24;H=L;L=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());I=M;M=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());J=N;N=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());d=(k(x(x(H*L)+x(x(I*M)+x(J+x(P*N))))),e(0));o[m+4|0]=d;o[m+5|0]=d>>>8;o[m+6|0]=d>>>16;o[m+7|0]=d>>>24;d=(k(x(x(p*L)+x(x(C*M)+x(D+x(O*N))))),e(0));o[m+8|0]=d;o[m+9|0]=d>>>8;o[m+10|0]=d>>>16;o[m+11|0]=d>>>24;d=(k(x(x(y*L)+x(x(K*M)+x(F+x(G*N))))),e(0));o[m|0]=d;o[m+1|0]=d>>>8;o[m+2|0]=d>>>16;o[m+3|0]=d>>>24;if(!r[b+16|0]){q[g+108>>2]=1065353216;q[g+124>>2]=1065353216;u[g+104>>2]=-u[g+104>>2];u[g+100>>2]=-u[g+100>>2];u[g+96>>2]=-u[g+96>>2];u[g+112>>2]=-u[g+112>>2];u[g+116>>2]=-u[g+116>>2];u[g+120>>2]=-u[g+120>>2]}i=q[a+36>>2];d=0;while(1){p=x(B(x(A(x(x(x(x(u[g+100>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));c:{if(p=x(0)){b=~~p>>>0;break c}b=0}m=b<<8;b=l+w(d,i)|0;h=b;p=x(B(x(A(x(x(x(x(u[g+96>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));d:{if(p=x(0)){t=~~p>>>0;break d}t=0}t=t|m;p=x(B(x(A(x(x(x(x(u[g+104>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));e:{if(p=x(0)){z=~~p>>>0;break e}z=0}q[h+16>>2]=t|z<<16|-16777216;p=x(B(x(A(x(x(x(x(u[g+116>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));f:{if(p=x(0)){h=~~p>>>0;break f}h=0}h=h<<8;p=x(B(x(A(x(x(x(x(u[g+112>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));g:{if(p=x(0)){t=~~p>>>0;break g}t=0}h=h|t;p=x(B(x(A(x(x(x(x(u[g+120>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));h:{if(p=x(0)){t=~~p>>>0;break h}t=0}q[b+20>>2]=h|t<<16|-16777216;d=d+1|0;if((d|0)!=4){continue}break}break a}h=q[c+44>>2];q[g+184>>2]=q[c+40>>2];q[g+188>>2]=h;h=q[c+36>>2];q[g+176>>2]=q[c+32>>2];q[g+180>>2]=h;h=q[c+28>>2];q[g+168>>2]=q[c+24>>2];q[g+172>>2]=h;h=q[c+20>>2];q[g+160>>2]=q[c+16>>2];q[g+164>>2]=h;h=q[c+4>>2];q[g+144>>2]=q[c>>2];q[g+148>>2]=h;h=q[c+12>>2];q[g+152>>2]=q[c+8>>2];q[g+156>>2]=h;if(r[b+36|0]){vu(g+144|0,d,u[c+248>>2])}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+112|0,d);nt(g+48|0,g+112|0);d=q[a+8>>2];n[q[q[d>>2]+92>>2]](g+96|0,d);su(g+144|0,nt(g+128|0,g+96|0),q[b+28>>2],r[b+16|0]);i=0;while(1){y=u[g+152>>2];F=u[g+156>>2];G=u[g+144>>2];K=u[g+148>>2];O=u[g+168>>2];L=u[g+172>>2];M=u[g+160>>2];N=u[g+164>>2];d=l+w(i,v)|0;p=(f(0,r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24)),j());D=(f(0,r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24)),j());C=(f(0,r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24)),j());h=(k(x(x(p*u[g+184>>2])+x(x(D*u[g+180>>2])+x(x(C*u[g+176>>2])+u[g+188>>2])))),e(0));o[d+8|0]=h;o[d+9|0]=h>>>8;o[d+10|0]=h>>>16;o[d+11|0]=h>>>24;h=(k(x(x(p*O)+x(x(D*N)+x(L+x(C*M))))),e(0));o[d+4|0]=h;o[d+5|0]=h>>>8;o[d+6|0]=h>>>16;o[d+7|0]=h>>>24;h=(k(x(x(p*y)+x(x(D*K)+x(F+x(C*G))))),e(0));o[d|0]=h;o[d+1|0]=h>>>8;o[d+2|0]=h>>>16;o[d+3|0]=h>>>24;y=u[g+152>>2];C=u[g+168>>2];D=u[g+184>>2];p=x(x(1)/x(E(x(x(x(y*y)+x(C*C))+x(D*D)))));D=x(D*p);C=x(C*p);p=x(y*p);K=u[g+144>>2];G=u[g+160>>2];F=u[g+176>>2];y=x(x(1)/x(E(x(x(x(K*K)+x(G*G))+x(F*F)))));F=x(F*y);G=x(G*y);y=x(K*y);h=q[a+36>>2];if(!r[b+16|0]){D=x(-D);C=x(-C);F=x(-F);G=x(-G);y=x(-y);p=x(-p)}h=l+w(h,i)|0;t=h;y=x(B(x(A(x(x(x(x(y+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));i:{if(y=x(0)){d=~~y>>>0;break i}d=0}y=x(B(x(A(x(x(x(x(G+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(y=x(0)){z=~~y>>>0;break j}z=0}d=d|z<<8;y=x(B(x(A(x(x(x(x(F+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(y=x(0)){z=~~y>>>0;break k}z=0}q[t+20>>2]=d|z<<16|-16777216;p=x(B(x(A(x(x(x(x(p+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(p=x(0)){d=~~p>>>0;break l}d=0}C=x(B(x(A(x(x(x(x(C+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(C=x(0)){t=~~C>>>0;break m}t=0}d=d|t<<8;p=x(B(x(A(x(x(x(x(D+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(p=x(0)){t=~~p>>>0;break n}t=0}q[h+16>>2]=d|t<<16|-16777216;i=i+1|0;if((i|0)!=4){continue}break}}h=q[a+44>>2];if((h|0)>=1){d=q[a+36>>2];b=c+252|0;h=kV(q[a+16>>2]+40|0,b,h<<2);kV(d+h|0,b,q[a+44>>2]<<2);kV(h+(d<<1)|0,b,q[a+44>>2]<<2);kV(h+w(d,3)|0,b,q[a+44>>2]<<2)}h=q[a+48>>2];if((h|0)>=1){d=q[a+36>>2];b=c+268|0;c=kV((q[a+16>>2]+(q[a+44>>2]<<2)|0)+40|0,b,h<<2);kV(d+c|0,b,q[a+48>>2]<<2);kV(c+(d<<1)|0,b,q[a+48>>2]<<2);kV(c+w(d,3)|0,b,q[a+48>>2]<<2)}q[a+12>>2]=q[a+12>>2]+1;q[a+16>>2]=q[a+16>>2]+(q[a+36>>2]<<2)}ue=g+192|0}function aA(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0),s=0,t=x(0),v=x(0),y=x(0),z=x(0),A=0,B=0,C=0,D=x(0),F=x(0),G=x(0),H=x(0),I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=ue-448|0;ue=d;s=q[a+24>>2];e=q[a+28>>2];a:{if((s|0)==(e|0)){break a}if(q[b+16>>2]>=2){M=a+36|0;ms(M);N=a+120|0;ms(N);f=q[a+24>>2];if((f|0)!=q[a+28>>2]){s=0;A=d+384|0;while(1){e=w(s,240)+f|0;B=q[e+84>>2];q[d+444>>2]=1065353216;q[d+436>>2]=0;q[d+440>>2]=0;q[d+432>>2]=B;B=q[e+88>>2];q[d+428>>2]=1065353216;q[d+420>>2]=0;q[d+424>>2]=0;q[d+416>>2]=B;b:{if(r[b+10|0]){f=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=f;f=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=f;f=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=f;f=q[e+36>>2];q[A>>2]=q[e+32>>2];q[A+4>>2]=f;f=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=f;f=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=f;if(r[b+32|0]){vu(d+368|0,c,u[e+204>>2])}Ys(d+368|0,d+352|0,d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);nt(d+272|0,d+256|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+224|0,e);tu(d+288|0,d+352|0,nt(d+240|0,d+224|0),q[b+20>>2]);h=u[d+352>>2];u[d+432>>2]=u[d+432>>2]*h;u[d+416>>2]=h*u[d+416>>2];k=u[d+324>>2];h=u[d+308>>2];e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);Ap(d+240|0,d+256|0);nt(d+272|0,d+240|0);l=u[d+440>>2];z=u[d+436>>2];o=u[d+432>>2];u[d+444>>2]=x(l*x(0))+x(x(z*x(0))+x(x(o*x(0))+x(0)));m=u[d+272>>2];p=u[d+276>>2];i=u[d+280>>2];j=x(x(1)/x(E(x(x(x(m*m)+x(p*p))+x(i*i)))));G=x(h*z);v=u[d+288>>2];i=x(i*j);y=x(h*x(p*j));p=x(x(k*i)-y);D=p;j=x(m*j);m=x(y-x(k*j));t=x(p*p);p=x(x(h*j)-x(h*i));i=x(x(1)/x(E(x(x(m*m)+x(t+x(p*p))))));j=x(D*i);p=x(p*i);y=x(h*p);m=x(m*i);i=x(y-x(k*m));D=i;y=x(x(k*j)-y);t=x(i*i);i=x(x(h*m)-x(h*j));F=x(x(1)/x(E(x(x(y*y)+x(t+x(i*i))))));t=x(D*F);u[d+432>>2]=x(G+x(v-x(o*j)))+x(l*t);D=x(k*z);z=u[d+292>>2];i=x(i*F);u[d+436>>2]=x(D+x(z-x(o*p)))+x(l*i);D=G;G=u[d+296>>2];y=x(y*F);u[d+440>>2]=x(D+x(G-x(o*m)))+x(l*y);o=u[d+420>>2];F=x(h*o);h=u[d+416>>2];l=u[d+424>>2];u[d+416>>2]=x(F+x(v-x(j*h)))+x(l*t);u[d+428>>2]=x(l*x(0))+x(x(o*x(0))+x(x(h*x(0))+x(0)));u[d+424>>2]=x(F+x(G-x(m*h)))+x(l*y);u[d+420>>2]=x(x(k*o)+x(z-x(p*h)))+x(l*i);break b}f=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=f;f=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=f;f=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=f;f=q[e+36>>2];q[A>>2]=q[e+32>>2];q[A+4>>2]=f;f=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=f;f=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=f;if(r[b+32|0]){vu(d+368|0,c,u[e+204>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+288|0,e);nt(d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+272|0,e);su(d+368|0,nt(d+352|0,d+272|0),q[b+20>>2],r[b+11|0]);o=u[d+376>>2];h=u[d+440>>2];j=u[d+372>>2];k=u[d+436>>2];m=u[d+380>>2];z=u[d+368>>2];l=u[d+432>>2];u[d+432>>2]=x(o*h)+x(x(j*k)+x(m+x(z*l)));p=u[d+408>>2];i=u[d+404>>2];y=u[d+412>>2];F=u[d+400>>2];u[d+440>>2]=x(h*p)+x(x(k*i)+x(y+x(l*F)));G=u[d+392>>2];v=u[d+388>>2];t=u[d+396>>2];H=u[d+384>>2];u[d+436>>2]=x(h*G)+x(x(k*v)+x(t+x(l*H)));u[d+444>>2]=x(h*x(0))+x(x(k*x(0))+x(x(l*x(0))+x(0)));h=u[d+424>>2];k=u[d+420>>2];l=u[d+416>>2];u[d+428>>2]=x(h*x(0))+x(x(k*x(0))+x(x(l*x(0))+x(0)));u[d+424>>2]=x(p*h)+x(x(i*k)+x(y+x(F*l)));u[d+420>>2]=x(G*h)+x(x(v*k)+x(t+x(H*l)));u[d+416>>2]=x(o*h)+x(x(j*k)+x(m+x(z*l)))}js(M,d+432|0);js(N,d+416|0);s=s+1|0;f=q[a+24>>2];if(s>>>0<(q[a+28>>2]-f|0)/240>>>0){continue}break}}ls(M);ls(N);s=q[a+24>>2];e=q[a+28>>2]}I=q[a+208>>2];A=q[a+20>>2];f=A;if((e|0)!=(s|0)){U=I<<2;V=w(I,3);B=I<<1;W=a+120|0;X=a+36|0;f=A;while(1){g=q[b+16>>2];if((g|0)>=1){L=w(Q,240)+s|0;M=L+72|0;Y=L+88|0;N=L+68|0;Z=L+84|0;S=L+204|0;s=L+16|0;_=L+80|0;$=L+76|0;T=L+4|0;K=0;while(1){O=q[L>>2];P=q[T>>2];c:{if((g|0)<=1){e=q[Z>>2];q[f+4>>2]=0;q[f+8>>2]=0;q[f>>2]=e;e=N;q[f+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);g=q[Y>>2];e=f+I|0;q[e+4>>2]=0;q[e+8>>2]=0;q[e>>2]=g;g=e;e=M;q[g+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);break c}k=x(K|0);h=x(k/x(g|0));ns(d+368|0,X,x(h+x(P|0)));yp(d+304|0);g=d+312|0;J=q[d+376>>2];q[g>>2]=J;e=q[d+372>>2];C=q[d+368>>2];q[d+304>>2]=C;q[d+308>>2]=e;q[f+8>>2]=J;q[f>>2]=C;q[f+4>>2]=e;ns(d+368|0,W,x(x(k/x(q[b+16>>2]))+x(q[T>>2])));yp(d+304|0);J=q[d+376>>2];q[g>>2]=J;g=q[d+372>>2];C=q[d+368>>2];q[d+304>>2]=C;q[d+308>>2]=g;e=f+I|0;q[e+8>>2]=J;q[e>>2]=C;q[e+4>>2]=g;g=q[N>>2];q[d+220>>2]=g;J=q[$>>2];q[d+216>>2]=J;q[d+108>>2]=g;q[d+104>>2]=J;Pe(d+368|0,d+108|0,d+104|0,h);q[f+12>>2]=q[d+368>>2];g=q[M>>2];q[d+212>>2]=g;J=q[_>>2];q[d+208>>2]=J;q[d+100>>2]=g;q[d+96>>2]=J;Pe(d+368|0,d+100|0,d+96|0,h);q[e+12>>2]=q[d+368>>2]}J=K|P;d:{if(r[b+10|0]){e=s;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[S>>2])}Ys(d+368|0,d+432|0,d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+272|0,e);nt(d+352|0,d+272|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+240|0,e);tu(d+416|0,d+432|0,nt(d+288|0,d+240|0),q[b+20>>2]);if(q[b+16>>2]>1){break d}u[f>>2]=u[f>>2]*u[d+432>>2];e=f+I|0;u[e>>2]=u[e>>2]*u[d+432>>2];h=u[d+324>>2];k=u[d+340>>2];l=u[d+308>>2];g=q[a+8>>2];n[q[q[g>>2]+88>>2]](d+272|0,g);Ap(d+288|0,d+272|0);nt(d+352|0,d+288|0);o=u[d+356>>2];j=u[d+352>>2];m=u[d+360>>2];y=u[d+424>>2];F=u[d+416>>2];G=u[d+420>>2];g=nt(d+352|0,f);z=u[d+360>>2];p=u[d+352>>2];i=u[d+356>>2];C=yp(d+288|0);D=o;o=x(x(1)/x(E(x(x(x(j*j)+x(o*o))+x(m*m)))));v=x(D*o);t=x(j*o);j=x(x(l*v)-x(h*t));D=j;H=x(j*j);o=x(m*o);j=x(x(h*o)-x(k*v));m=x(x(k*t)-x(l*o));v=x(x(1)/x(E(x(H+x(x(j*j)+x(m*m))))));o=x(D*v);j=x(j*v);t=x(x(l*o)-x(k*j));D=t;m=x(m*v);v=x(x(h*j)-x(l*m));H=x(x(k*m)-x(h*o));t=x(x(1)/x(E(x(x(v*v)+x(x(H*H)+x(t*t))))));D=x(D*t);u[d+292>>2]=x(z*D)+x(x(h*i)+x(G-x(m*p)));H=x(H*t);u[d+288>>2]=x(z*H)+x(x(l*i)+x(F-x(j*p)));v=x(v*t);u[d+296>>2]=x(z*v)+x(x(k*i)+x(y-x(o*p)));R=q[d+292>>2];q[f>>2]=q[d+288>>2];q[f+4>>2]=R;q[f+8>>2]=q[d+296>>2];nt(g,e);z=u[d+356>>2];p=u[d+352>>2];i=u[d+360>>2];yp(C);u[d+292>>2]=x(D*i)+x(x(h*z)+x(G-x(m*p)));u[d+288>>2]=x(H*i)+x(x(l*z)+x(F-x(j*p)));u[d+296>>2]=x(v*i)+x(x(k*z)+x(y-x(o*p)));g=q[d+292>>2];q[e>>2]=q[d+288>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+296>>2];break d}if(q[b+16>>2]>1){break d}e=s;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[S>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+416|0,e);nt(d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+352|0,e);su(d+368|0,nt(d+432|0,d+352|0),q[b+20>>2],r[b+11|0]);e=nt(d+304|0,f);h=u[d+308>>2];o=u[d+388>>2];k=u[d+304>>2];j=u[d+384>>2];m=u[d+396>>2];l=u[d+312>>2];z=u[d+392>>2];p=u[d+408>>2];i=u[d+412>>2];y=u[d+400>>2];F=u[d+404>>2];G=u[d+376>>2];v=u[d+380>>2];t=u[d+368>>2];H=u[d+372>>2];g=yp(d+432|0);u[d+436>>2]=x(z*l)+x(x(o*h)+x(m+x(j*k)));u[d+432>>2]=x(G*l)+x(x(H*h)+x(v+x(t*k)));u[d+440>>2]=x(p*l)+x(x(F*h)+x(i+x(y*k)));C=q[d+436>>2];q[f>>2]=q[d+432>>2];q[f+4>>2]=C;q[f+8>>2]=q[d+440>>2];C=e;e=f+I|0;nt(C,e);o=u[d+408>>2];j=u[d+412>>2];m=u[d+400>>2];z=u[d+404>>2];p=u[d+376>>2];i=u[d+380>>2];y=u[d+368>>2];F=u[d+372>>2];h=u[d+312>>2];G=u[d+392>>2];v=u[d+396>>2];k=u[d+304>>2];t=u[d+384>>2];l=u[d+308>>2];H=u[d+388>>2];yp(g);u[d+436>>2]=x(G*h)+x(x(H*l)+x(v+x(t*k)));u[d+432>>2]=x(p*h)+x(x(F*l)+x(i+x(y*k)));u[d+440>>2]=x(o*h)+x(x(z*l)+x(j+x(m*k)));g=q[d+436>>2];q[e>>2]=q[d+432>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+440>>2]}O=O+ -1|0;e=B;e:{if(!J){break e}e=B;if((O|0)==(P|0)){break e}C=q[f+4>>2];e=f+B|0;q[e>>2]=q[f>>2];q[e+4>>2]=C;g=q[f+20>>2];q[e+16>>2]=q[f+16>>2];q[e+20>>2]=g;g=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=g;e=f+I|0;R=q[e+20>>2];g=f+V|0;q[g+16>>2]=q[e+16>>2];q[g+20>>2]=R;C=q[e+12>>2];q[g+8>>2]=q[e+8>>2];q[g+12>>2]=C;C=q[e+4>>2];q[g>>2]=q[e>>2];q[g+4>>2]=C;e=U}if(J){q[a+12>>2]=q[a+12>>2]+1}f=e+f|0;if((O|0)!=(P|0)){K=K+1|0;g=q[b+16>>2];if((K|0)<(g|0)){continue}}break}s=q[a+24>>2];e=q[a+28>>2]}Q=Q+1|0;if(Q>>>0<(e-s|0)/240>>>0){continue}break}}q[d+88>>2]=A;q[d+196>>2]=f;q[d+192>>2]=I;q[d+200>>2]=A;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;jA(a,b,d+80|0);q[d+72>>2]=A;q[d+180>>2]=f;q[d+176>>2]=I;q[d+184>>2]=A;c=q[d+180>>2];q[d+64>>2]=q[d+176>>2];q[d+68>>2]=c;dA(a,b,d- -64|0);q[d+56>>2]=A;q[d+164>>2]=f;q[d+160>>2]=I;q[d+168>>2]=A;c=q[d+164>>2];q[d+48>>2]=q[d+160>>2];q[d+52>>2]=c;dA(a,b,d+48|0);q[d+40>>2]=A;q[d+148>>2]=f;q[d+144>>2]=I;q[d+152>>2]=A;c=q[d+148>>2];q[d+32>>2]=q[d+144>>2];q[d+36>>2]=c;dA(a,b,d+32|0);q[d+24>>2]=A;q[d+132>>2]=f;q[d+128>>2]=I;q[d+136>>2]=A;c=q[d+132>>2];q[d+16>>2]=q[d+128>>2];q[d+20>>2]=c;dA(a,b,d+16|0);q[d+8>>2]=A;q[d+116>>2]=f;q[d+112>>2]=I;q[d+120>>2]=A;c=q[d+116>>2];q[d>>2]=q[d+112>>2];q[d+4>>2]=c;dA(a,b,d);f:{if(q[a+212>>2]<1){break f}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break f}B=q[a+208>>2];K=q[a+20>>2]+40|0;g=q[b+16>>2];c=0;while(1){if((g|0)>=1){s=(w(c,240)+f|0)+208|0;e=0;while(1){K=kV(kV(kV(kV(K,s,q[a+212>>2]<<2)+B|0,s,q[a+212>>2]<<2)+B|0,s,q[a+212>>2]<<2)+B|0,s,q[a+212>>2]<<2)+B|0;e=e+1|0;g=q[b+16>>2];if((e|0)<(g|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}c=c+1|0;if(c>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}if(q[a+216>>2]<1){break a}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break a}B=q[a+208>>2];K=(q[a+20>>2]+(q[a+212>>2]<<2)|0)+40|0;g=q[b+16>>2];c=0;while(1){if((g|0)>=1){s=(w(c,240)+f|0)+224|0;e=0;while(1){K=kV(kV(kV(kV(K,s,q[a+216>>2]<<2)+B|0,s,q[a+216>>2]<<2)+B|0,s,q[a+216>>2]<<2)+B|0,s,q[a+216>>2]<<2)+B|0;e=e+1|0;g=q[b+16>>2];if((e|0)<(g|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}c=c+1|0;if(c>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}ue=d+448|0}function _z(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=0,l=x(0),m=x(0),o=x(0),p=x(0),s=x(0),t=0,v=x(0),y=x(0),z=x(0),A=x(0),B=0,C=0,D=x(0),F=x(0),G=x(0),H=x(0),I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;d=ue-448|0;ue=d;t=q[a+24>>2];e=q[a+28>>2];a:{if((t|0)==(e|0)){break a}if(q[b+16>>2]>=2){M=a+36|0;ms(M);N=a+120|0;ms(N);f=q[a+24>>2];if((f|0)!=q[a+28>>2]){t=0;B=d+384|0;while(1){e=w(t,240)+f|0;C=q[e+84>>2];q[d+444>>2]=1065353216;q[d+436>>2]=0;q[d+440>>2]=0;q[d+432>>2]=C;C=q[e+88>>2];q[d+428>>2]=1065353216;q[d+420>>2]=0;q[d+424>>2]=0;q[d+416>>2]=C;b:{if(r[b+10|0]){f=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=f;f=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=f;f=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=f;f=q[e+36>>2];q[B>>2]=q[e+32>>2];q[B+4>>2]=f;f=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=f;f=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=f;if(r[b+32|0]){vu(d+368|0,c,u[e+204>>2])}Ys(d+368|0,d+352|0,d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);nt(d+272|0,d+256|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+224|0,e);tu(d+288|0,d+352|0,nt(d+240|0,d+224|0),q[b+20>>2]);h=u[d+352>>2];u[d+432>>2]=u[d+432>>2]*h;u[d+416>>2]=h*u[d+416>>2];l=u[d+324>>2];h=u[d+308>>2];e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+256|0,e);Ap(d+240|0,d+256|0);nt(d+272|0,d+240|0);m=u[d+440>>2];A=u[d+436>>2];p=u[d+432>>2];u[d+444>>2]=x(m*x(0))+x(x(A*x(0))+x(x(p*x(0))+x(0)));o=u[d+272>>2];s=u[d+276>>2];i=u[d+280>>2];j=x(x(1)/x(E(x(x(x(o*o)+x(s*s))+x(i*i)))));G=x(h*A);y=u[d+288>>2];i=x(i*j);z=x(h*x(s*j));s=x(x(l*i)-z);D=s;j=x(o*j);o=x(z-x(l*j));v=x(s*s);s=x(x(h*j)-x(h*i));i=x(x(1)/x(E(x(x(o*o)+x(v+x(s*s))))));j=x(D*i);s=x(s*i);z=x(h*s);o=x(o*i);i=x(z-x(l*o));D=i;z=x(x(l*j)-z);v=x(i*i);i=x(x(h*o)-x(h*j));F=x(x(1)/x(E(x(x(z*z)+x(v+x(i*i))))));v=x(D*F);u[d+432>>2]=x(G+x(y-x(p*j)))+x(m*v);D=x(l*A);A=u[d+292>>2];i=x(i*F);u[d+436>>2]=x(D+x(A-x(p*s)))+x(m*i);D=G;G=u[d+296>>2];z=x(z*F);u[d+440>>2]=x(D+x(G-x(p*o)))+x(m*z);p=u[d+420>>2];F=x(h*p);h=u[d+416>>2];m=u[d+424>>2];u[d+416>>2]=x(F+x(y-x(j*h)))+x(m*v);u[d+428>>2]=x(m*x(0))+x(x(p*x(0))+x(x(h*x(0))+x(0)));u[d+424>>2]=x(F+x(G-x(o*h)))+x(m*z);u[d+420>>2]=x(x(l*p)+x(A-x(s*h)))+x(m*i);break b}f=q[e+60>>2];q[d+408>>2]=q[e+56>>2];q[d+412>>2]=f;f=q[e+52>>2];q[d+400>>2]=q[e+48>>2];q[d+404>>2]=f;f=q[e+44>>2];q[d+392>>2]=q[e+40>>2];q[d+396>>2]=f;f=q[e+36>>2];q[B>>2]=q[e+32>>2];q[B+4>>2]=f;f=q[e+20>>2];q[d+368>>2]=q[e+16>>2];q[d+372>>2]=f;f=q[e+28>>2];q[d+376>>2]=q[e+24>>2];q[d+380>>2]=f;if(r[b+32|0]){vu(d+368|0,c,u[e+204>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+288|0,e);nt(d+304|0,d+288|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+272|0,e);su(d+368|0,nt(d+352|0,d+272|0),q[b+20>>2],r[b+11|0]);p=u[d+376>>2];h=u[d+440>>2];j=u[d+372>>2];l=u[d+436>>2];o=u[d+380>>2];A=u[d+368>>2];m=u[d+432>>2];u[d+432>>2]=x(p*h)+x(x(j*l)+x(o+x(A*m)));s=u[d+408>>2];i=u[d+404>>2];z=u[d+412>>2];F=u[d+400>>2];u[d+440>>2]=x(h*s)+x(x(l*i)+x(z+x(m*F)));G=u[d+392>>2];y=u[d+388>>2];v=u[d+396>>2];H=u[d+384>>2];u[d+436>>2]=x(h*G)+x(x(l*y)+x(v+x(m*H)));u[d+444>>2]=x(h*x(0))+x(x(l*x(0))+x(x(m*x(0))+x(0)));h=u[d+424>>2];l=u[d+420>>2];m=u[d+416>>2];u[d+428>>2]=x(h*x(0))+x(x(l*x(0))+x(x(m*x(0))+x(0)));u[d+424>>2]=x(s*h)+x(x(i*l)+x(z+x(F*m)));u[d+420>>2]=x(G*h)+x(x(y*l)+x(v+x(H*m)));u[d+416>>2]=x(p*h)+x(x(j*l)+x(o+x(A*m)))}js(M,d+432|0);js(N,d+416|0);t=t+1|0;f=q[a+24>>2];if(t>>>0<(q[a+28>>2]-f|0)/240>>>0){continue}break}}ls(M);ls(N);t=q[a+24>>2];e=q[a+28>>2]}I=q[a+208>>2];B=q[a+20>>2];f=B;if((e|0)!=(t|0)){W=I<<2;X=w(I,3);C=I<<1;Y=a+120|0;Z=a+36|0;f=B;while(1){k=q[b+16>>2];if((k|0)>=1){J=w(Q,240)+t|0;M=J+72|0;_=J+88|0;N=J+68|0;$=J+84|0;S=J+204|0;t=J+16|0;aa=J+80|0;ba=J+76|0;T=J+200|0;U=J+196|0;V=J+4|0;K=0;while(1){O=q[J>>2];P=q[V>>2];c:{if((k|0)<=1){e=q[$>>2];q[f+4>>2]=0;q[f+8>>2]=0;q[f>>2]=e;e=N;q[f+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[f+64>>2]=q[U>>2];q[f+68>>2]=q[T>>2];e=q[_>>2];k=f+I|0;q[k+4>>2]=0;q[k+8>>2]=0;q[k>>2]=e;e=M;q[k+12>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[k+64>>2]=q[U>>2];q[k+68>>2]=q[T>>2];break c}l=x(K|0);h=x(l/x(k|0));ns(d+368|0,Z,x(h+x(P|0)));yp(d+304|0);k=d+312|0;g=q[d+376>>2];q[k>>2]=g;e=q[d+372>>2];L=q[d+368>>2];q[d+304>>2]=L;q[d+308>>2]=e;q[f+8>>2]=g;q[f>>2]=L;q[f+4>>2]=e;ns(d+368|0,Y,x(x(l/x(q[b+16>>2]))+x(q[V>>2])));yp(d+304|0);g=q[d+376>>2];q[k>>2]=g;k=q[d+372>>2];L=q[d+368>>2];q[d+304>>2]=L;q[d+308>>2]=k;e=f+I|0;q[e+8>>2]=g;q[e>>2]=L;q[e+4>>2]=k;k=q[N>>2];q[d+220>>2]=k;g=q[ba>>2];q[d+216>>2]=g;q[d+108>>2]=k;q[d+104>>2]=g;Pe(d+368|0,d+108|0,d+104|0,h);q[f+12>>2]=q[d+368>>2];k=q[M>>2];q[d+212>>2]=k;g=q[aa>>2];q[d+208>>2]=g;q[d+100>>2]=k;q[d+96>>2]=g;Pe(d+368|0,d+100|0,d+96|0,h);q[e+12>>2]=q[d+368>>2]}k=K|P;d:{if(r[b+10|0]){e=t;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[S>>2])}Ys(d+368|0,d+432|0,d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+272|0,e);nt(d+352|0,d+272|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+240|0,e);tu(d+416|0,d+432|0,nt(d+288|0,d+240|0),q[b+20>>2]);if(q[b+16>>2]>1){break d}u[f>>2]=u[f>>2]*u[d+432>>2];e=f+I|0;u[e>>2]=u[e>>2]*u[d+432>>2];h=u[d+324>>2];l=u[d+340>>2];m=u[d+308>>2];g=q[a+8>>2];n[q[q[g>>2]+88>>2]](d+272|0,g);Ap(d+288|0,d+272|0);nt(d+352|0,d+288|0);p=u[d+356>>2];j=u[d+352>>2];o=u[d+360>>2];z=u[d+424>>2];F=u[d+416>>2];G=u[d+420>>2];g=nt(d+352|0,f);A=u[d+360>>2];s=u[d+352>>2];i=u[d+356>>2];L=yp(d+288|0);D=p;p=x(x(1)/x(E(x(x(x(j*j)+x(p*p))+x(o*o)))));y=x(D*p);v=x(j*p);j=x(x(m*y)-x(h*v));D=j;H=x(j*j);p=x(o*p);j=x(x(h*p)-x(l*y));o=x(x(l*v)-x(m*p));y=x(x(1)/x(E(x(H+x(x(j*j)+x(o*o))))));p=x(D*y);j=x(j*y);v=x(x(m*p)-x(l*j));D=v;o=x(o*y);y=x(x(h*j)-x(m*o));H=x(x(l*o)-x(h*p));v=x(x(1)/x(E(x(x(y*y)+x(x(H*H)+x(v*v))))));D=x(D*v);u[d+292>>2]=x(A*D)+x(x(h*i)+x(G-x(o*s)));H=x(H*v);u[d+288>>2]=x(A*H)+x(x(m*i)+x(F-x(j*s)));y=x(y*v);u[d+296>>2]=x(A*y)+x(x(l*i)+x(z-x(p*s)));R=q[d+292>>2];q[f>>2]=q[d+288>>2];q[f+4>>2]=R;q[f+8>>2]=q[d+296>>2];nt(g,e);A=u[d+356>>2];s=u[d+352>>2];i=u[d+360>>2];yp(L);u[d+292>>2]=x(D*i)+x(x(h*A)+x(G-x(o*s)));u[d+288>>2]=x(H*i)+x(x(m*A)+x(F-x(j*s)));u[d+296>>2]=x(y*i)+x(x(l*A)+x(z-x(p*s)));g=q[d+292>>2];q[e>>2]=q[d+288>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+296>>2];break d}if(q[b+16>>2]>1){break d}e=t;g=q[e+44>>2];q[d+408>>2]=q[e+40>>2];q[d+412>>2]=g;g=q[e+36>>2];q[d+400>>2]=q[e+32>>2];q[d+404>>2]=g;g=q[e+28>>2];q[d+392>>2]=q[e+24>>2];q[d+396>>2]=g;g=q[e+20>>2];q[d+384>>2]=q[e+16>>2];q[d+388>>2]=g;g=q[e+4>>2];q[d+368>>2]=q[e>>2];q[d+372>>2]=g;g=q[e+12>>2];q[d+376>>2]=q[e+8>>2];q[d+380>>2]=g;if(r[b+32|0]){vu(d+368|0,c,u[S>>2])}e=q[a+8>>2];n[q[q[e>>2]+88>>2]](d+416|0,e);nt(d+304|0,d+416|0);e=q[a+8>>2];n[q[q[e>>2]+92>>2]](d+352|0,e);su(d+368|0,nt(d+432|0,d+352|0),q[b+20>>2],r[b+11|0]);e=nt(d+304|0,f);h=u[d+308>>2];p=u[d+388>>2];l=u[d+304>>2];j=u[d+384>>2];o=u[d+396>>2];m=u[d+312>>2];A=u[d+392>>2];s=u[d+408>>2];i=u[d+412>>2];z=u[d+400>>2];F=u[d+404>>2];G=u[d+376>>2];y=u[d+380>>2];v=u[d+368>>2];H=u[d+372>>2];g=yp(d+432|0);u[d+436>>2]=x(A*m)+x(x(p*h)+x(o+x(j*l)));u[d+432>>2]=x(G*m)+x(x(H*h)+x(y+x(v*l)));u[d+440>>2]=x(s*m)+x(x(F*h)+x(i+x(z*l)));L=q[d+436>>2];q[f>>2]=q[d+432>>2];q[f+4>>2]=L;q[f+8>>2]=q[d+440>>2];R=e;e=f+I|0;nt(R,e);p=u[d+408>>2];j=u[d+412>>2];o=u[d+400>>2];A=u[d+404>>2];s=u[d+376>>2];i=u[d+380>>2];z=u[d+368>>2];F=u[d+372>>2];h=u[d+312>>2];G=u[d+392>>2];y=u[d+396>>2];l=u[d+304>>2];v=u[d+384>>2];m=u[d+308>>2];H=u[d+388>>2];yp(g);u[d+436>>2]=x(G*h)+x(x(H*m)+x(y+x(v*l)));u[d+432>>2]=x(s*h)+x(x(F*m)+x(i+x(z*l)));u[d+440>>2]=x(p*h)+x(x(A*m)+x(j+x(o*l)));g=q[d+436>>2];q[e>>2]=q[d+432>>2];q[e+4>>2]=g;q[e+8>>2]=q[d+440>>2]}O=O+ -1|0;e=C;e:{if(!k){break e}e=C;if((O|0)==(P|0)){break e}kV(f+C|0,f,72);kV(f+X|0,f+I|0,72);e=W}if(k){q[a+12>>2]=q[a+12>>2]+1}f=e+f|0;if((O|0)!=(P|0)){K=K+1|0;k=q[b+16>>2];if((K|0)<(k|0)){continue}}break}t=q[a+24>>2];e=q[a+28>>2]}Q=Q+1|0;if(Q>>>0<(e-t|0)/240>>>0){continue}break}}q[d+88>>2]=B;q[d+196>>2]=f;q[d+192>>2]=I;q[d+200>>2]=B;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;jA(a,b,d+80|0);q[d+72>>2]=B;q[d+180>>2]=f;q[d+176>>2]=I;q[d+184>>2]=B;c=q[d+180>>2];q[d+64>>2]=q[d+176>>2];q[d+68>>2]=c;kA(a,b,d- -64|0);q[d+56>>2]=B;q[d+164>>2]=f;q[d+160>>2]=I;q[d+168>>2]=B;c=q[d+164>>2];q[d+48>>2]=q[d+160>>2];q[d+52>>2]=c;lA(a,b,d+48|0);q[d+40>>2]=B;q[d+148>>2]=f;q[d+144>>2]=I;q[d+152>>2]=B;c=q[d+148>>2];q[d+32>>2]=q[d+144>>2];q[d+36>>2]=c;mA(a,b,d+32|0);q[d+24>>2]=B;q[d+132>>2]=f;q[d+128>>2]=I;q[d+136>>2]=B;c=q[d+132>>2];q[d+16>>2]=q[d+128>>2];q[d+20>>2]=c;nA(a,b,d+16|0);q[d+8>>2]=B;q[d+116>>2]=f;q[d+112>>2]=I;q[d+120>>2]=B;c=q[d+116>>2];q[d>>2]=q[d+112>>2];q[d+4>>2]=c;oA(a,b,d);f:{if(q[a+212>>2]<1){break f}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break f}C=q[a+208>>2];K=q[a+20>>2]+40|0;k=q[b+16>>2];c=0;while(1){if((k|0)>=1){t=(w(c,240)+f|0)+208|0;e=0;while(1){K=kV(kV(kV(kV(K,t,q[a+212>>2]<<2)+C|0,t,q[a+212>>2]<<2)+C|0,t,q[a+212>>2]<<2)+C|0,t,q[a+212>>2]<<2)+C|0;e=e+1|0;k=q[b+16>>2];if((e|0)<(k|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}c=c+1|0;if(c>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}if(q[a+216>>2]<1){break a}e=q[a+28>>2];f=q[a+24>>2];if((e-f|0)==240){break a}C=q[a+208>>2];K=(q[a+20>>2]+(q[a+212>>2]<<2)|0)+40|0;k=q[b+16>>2];c=0;while(1){if((k|0)>=1){t=(w(c,240)+f|0)+224|0;e=0;while(1){K=kV(kV(kV(kV(K,t,q[a+216>>2]<<2)+C|0,t,q[a+216>>2]<<2)+C|0,t,q[a+216>>2]<<2)+C|0,t,q[a+216>>2]<<2)+C|0;e=e+1|0;k=q[b+16>>2];if((e|0)<(k|0)){continue}break}f=q[a+24>>2];e=q[a+28>>2]}c=c+1|0;if(c>>>0<((e-f|0)/240|0)+ -1>>>0){continue}break}}ue=d+448|0}function AA(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=0,m=0,o=x(0),p=0,s=x(0),t=x(0),v=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=0,I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=0,R=x(0),S=0,T=0,U=x(0),V=x(0),W=x(0),X=x(0),Y=x(0),Z=x(0),_=0,$=x(0),aa=0,ba=x(0),ca=x(0),da=0,ea=0,fa=x(0),ga=x(0),ha=x(0),ia=x(0),ja=x(0),ka=x(0),la=x(0),ma=x(0),na=0,oa=0,pa=0,qa=0,ra=x(0),sa=x(0),ta=x(0),ua=x(0),va=x(0),wa=x(0),xa=x(0),ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=x(0),Ea=x(0),Fa=x(0),Ga=x(0),Ha=x(0),Ia=x(0),Ja=x(0),Ka=x(0),La=x(0),Ma=x(0),Na=x(0),Oa=x(0),Pa=x(0),Qa=x(0),Ra=0,Sa=0,Ta=x(0),Ua=0;e=ue-224|0;ue=e;g=e+216|0;f=g;q[f>>2]=0;q[f+4>>2]=0;q[e+208>>2]=0;q[e+212>>2]=0;i=e+200|0;f=i;q[f>>2]=0;q[f+4>>2]=0;q[e+192>>2]=0;q[e+196>>2]=0;q[e+184>>2]=0;q[e+188>>2]=0;q[e+176>>2]=0;q[e+180>>2]=0;f=q[b+12>>2];a:{if(f>>>0>3){break a}if(f-2){l=e+80|0;b:{if(r[b+236|0]){f=q[c+44>>2];q[e+152>>2]=q[c+40>>2];q[e+156>>2]=f;f=q[c+36>>2];q[e+144>>2]=q[c+32>>2];q[e+148>>2]=f;f=q[c+28>>2];q[e+136>>2]=q[c+24>>2];q[e+140>>2]=f;f=q[c+20>>2];q[e+128>>2]=q[c+16>>2];q[e+132>>2]=f;f=q[c+4>>2];q[e+112>>2]=q[c>>2];q[e+116>>2]=f;f=q[c+12>>2];q[e+120>>2]=q[c+8>>2];q[e+124>>2]=f;vu(e+112|0,d,u[c+208>>2]);d=q[b+12>>2];f=q[a+20>>2];n[q[q[f>>2]+88>>2]](e+80|0,f);ru(d,e+176|0,e+32|0,e,e+160|0,e+112|0,nt(e+96|0,e+80|0));d=a+20|0;break b}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e+96|0,d);ru(f,e+176|0,e+32|0,e,e+160|0,c,nt(e+112|0,e+96|0));d=a+20|0}f=q[d>>2];n[q[q[f>>2]+88>>2]](l,f);nt(e+112|0,e+80|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](e- -64|0,d);uu(e+176|0,nt(e+96|0,e- -64|0),e+32|0,q[b+36>>2],r[b+20|0]);$s(e+112|0,e+32|0);d=e+200|0;h=u[d>>2];f=e+204|0;J=u[f>>2];p=e+196|0;B=u[p>>2];D=u[e+148>>2];E=u[e+132>>2];s=u[e+152>>2];z=u[e+136>>2];k=u[e+184>>2];O=u[e+188>>2];C=u[e+176>>2];t=u[e+180>>2];A=u[e+144>>2];v=u[e+112>>2];M=u[e+128>>2];o=u[e+192>>2];N=u[e+116>>2];F=u[e+120>>2];m=e+220|0;G=u[e+156>>2];l=e+216|0;K=u[l>>2];P=u[e+140>>2];j=e+212|0;L=u[j>>2];I=u[e+124>>2];y=u[e+208>>2];u[m>>2]=x(G*K)+x(x(P*L)+x(u[m>>2]+x(I*y)));u[l>>2]=x(s*K)+x(x(z*L)+x(x(F*y)+x(0)));u[j>>2]=x(D*K)+x(x(E*L)+x(x(N*y)+x(0)));u[f>>2]=x(G*h)+x(x(P*B)+x(J+x(I*o)));u[d>>2]=x(s*h)+x(x(z*B)+x(x(F*o)+x(0)));u[p>>2]=x(D*h)+x(x(E*B)+x(x(N*o)+x(0)));u[e+208>>2]=x(A*K)+x(x(M*L)+x(x(v*y)+x(0)));u[e+192>>2]=x(A*h)+x(x(M*B)+x(x(v*o)+x(0)));u[e+188>>2]=x(x(O+x(C*I))+x(t*P))+x(k*G);u[e+184>>2]=x(x(x(C*F)+x(0))+x(t*z))+x(k*s);u[e+180>>2]=x(x(x(C*N)+x(0))+x(t*E))+x(k*D);u[e+176>>2]=x(x(x(C*v)+x(0))+x(t*M))+x(k*A);break a}f=q[c+44>>2];q[e+216>>2]=q[c+40>>2];q[e+220>>2]=f;f=q[c+36>>2];q[e+208>>2]=q[c+32>>2];q[e+212>>2]=f;f=q[c+28>>2];q[e+200>>2]=q[c+24>>2];q[e+204>>2]=f;f=q[c+20>>2];q[e+192>>2]=q[c+16>>2];q[e+196>>2]=f;f=q[c+4>>2];q[e+176>>2]=q[c>>2];q[e+180>>2]=f;f=q[c+12>>2];q[e+184>>2]=q[c+8>>2];q[e+188>>2]=f;if(r[b+236|0]){vu(e+176|0,d,u[c+208>>2])}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e,d);nt(e+112|0,e);d=q[a+20>>2];n[q[q[d>>2]+92>>2]](e+160|0,d);su(e+176|0,nt(e+32|0,e+160|0),q[b+36>>2],r[b+20|0])}P=u[c+112>>2];z=u[c+68>>2];A=u[c+52>>2];C=u[c+116>>2];ca=u[c+108>>2];B=u[c+104>>2];ma=u[b+28>>2];Q=q[c+96>>2];S=q[c+100>>2];da=q[c+92>>2];Ra=q[a+120>>2];Sa=q[a+28>>2];I=u[c+84>>2];t=u[c+80>>2];y=u[c+88>>2];O=u[c+64>>2];$=u[c+48>>2];ea=q[b+16>>2];q[e+112>>2]=q[c+120>>2];q[e+116>>2]=q[c+136>>2];q[e+120>>2]=q[c+152>>2];q[e+124>>2]=q[c+168>>2];q[e+128>>2]=q[c+184>>2];k=x(ea|0);u[e+32>>2]=u[c+128>>2]/k;u[e+36>>2]=u[c+144>>2]/k;u[e+40>>2]=u[c+160>>2]/k;u[e+44>>2]=u[c+176>>2]/k;u[e+48>>2]=u[c+192>>2]/k;o=u[c+132>>2];fa=u[c+124>>2];D=u[c+148>>2];ga=u[c+140>>2];E=u[c+164>>2];ha=u[c+156>>2];s=u[c+180>>2];ia=u[c+172>>2];G=u[c+196>>2];ja=u[c+188>>2];q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e>>2]=0;q[e+4>>2]=0;v=x(x(x(t+x(90))/x(180))*x(3.141592025756836));h=AG(v);J=zG(v);v=u[g>>2];M=u[e+220>>2];N=u[i>>2];F=u[e+204>>2];K=u[e+184>>2];L=u[e+188>>2];T=ea<<3;U=u[e+212>>2];V=u[e+196>>2];ra=u[b+32>>2];ka=x(I-t);sa=x(ka/k);t=x(x(sa/x(180))*x(3.141592025756836));ta=AG(t);ua=zG(t);c:{if((ea|0)<1){break c}va=x(ca+C);wa=x(ca+x(C*x(.5)));xa=x(ja+G);ya=x(ia+s);za=x(ha+E);Aa=x(ga+D);Ba=x(fa+o);Ca=x(ja+x(G*x(.5)));Da=x(ia+x(s*x(.5)));Ea=x(ha+x(E*x(.5)));Fa=x(ga+x(D*x(.5)));Ga=x(fa+x(o*x(.5)));Ta=x(P/k);d=ma>x(0);na=d?0:Q&-16777216;oa=d?0:S&-16777216;pa=d?0:da&-16777216;k=x($*h);W=u[e+180>>2];o=x($*J);X=u[e+176>>2];Ha=x(x(A*K)+L);C=x(x(k*W)+x(x(o*X)+Ha));Y=u[e+192>>2];Ia=x(x(A*N)+F);t=x(x(k*V)+x(x(o*Y)+Ia));Z=u[e+208>>2];Ja=x(x(A*v)+M);o=x(x(k*U)+x(x(o*Z)+Ja));k=x(O*h);s=x(O*J);Ka=x(x(z*K)+L);D=x(x(k*W)+x(x(s*X)+Ka));La=x(x(z*N)+F);E=x(x(k*V)+x(x(s*Y)+La));Ma=x(x(z*v)+M);s=x(x(k*U)+x(x(s*Z)+Ma));la=x(O+x(x($-O)*y));k=x(h*la);G=x(J*la);y=x(z+x(y*x(A-z)));Na=x(x(y*K)+L);z=x(x(k*W)+x(x(G*X)+Na));Oa=x(x(y*N)+F);A=x(x(k*V)+x(x(G*Y)+Oa));Pa=x(x(y*v)+M);v=x(x(k*U)+x(x(G*Z)+Pa));Qa=x(ka-ra);while(1){k=x(x(ua*h)+x(ta*J));F=x(la*k);J=x(x(ua*J)-x(ta*h));h=x(la*J);M=x(x(U*F)+x(Pa+x(Z*h)));N=x(x(V*F)+x(Oa+x(Y*h)));F=x(x(W*F)+x(Na+x(X*h)));h=x(O*k);y=x(O*J);K=x(x(U*h)+x(Ma+x(Z*y)));L=x(x(V*h)+x(La+x(Y*y)));y=x(x(W*h)+x(Ka+x(X*y)));h=x($*k);I=x($*J);G=x(x(U*h)+x(Ja+x(Z*I)));P=x(x(V*h)+x(Ia+x(Y*I)));I=x(x(W*h)+x(Ha+x(X*I)));H=q[c+96>>2];d=H>>>24|0;aa=q[c+100>>2];f=aa>>>24|0;_=q[c+92>>2];i=_>>>24|0;g=i;h=x(sa+ba);ba=hQa)){break d}h=x(x(1)-x(x(ba-Qa)/ra))}e:{if(h==x(1)){break e}R=x(h*x(d>>>0));f:{if(R=x(0)){d=~~R>>>0;break f}d=0}R=x(h*x(f>>>0));g:{if(R=x(0)){f=~~R>>>0;break g}f=0}h=x(h*x(i>>>0));if(h=x(0)){g=~~h>>>0;break e}g=0}j=q[a+120>>2];yp(e+160|0);u[e+164>>2]=t;u[e+160>>2]=C;u[e+168>>2]=o;m=q[e+164>>2];i=w(qa,Ra)+Sa|0;q[i>>2]=q[e+160>>2];q[i+4>>2]=m;q[i+8>>2]=q[e+168>>2];u[i+20>>2]=ca;u[i+16>>2]=B;q[i+12>>2]=da&16777215|pa&-16777216;yp(e+160|0);u[e+164>>2]=A;u[e+160>>2]=z;u[e+168>>2]=v;l=q[e+164>>2];p=i+j|0;m=p;q[m>>2]=q[e+160>>2];q[m+4>>2]=l;q[m+8>>2]=q[e+168>>2];u[m+20>>2]=wa;u[m+16>>2]=B;q[m+12>>2]=Q&16777215|na&-16777216;yp(e+160|0);u[e+164>>2]=P;u[e+160>>2]=I;u[e+168>>2]=G;Q=q[e+164>>2];m=i+(j<<1)|0;l=m;q[l>>2]=q[e+160>>2];q[l+4>>2]=Q;q[l+8>>2]=q[e+168>>2];u[l+20>>2]=ca;C=x(Ta+B);u[l+16>>2]=C;pa=g<<24;da=pa|_&16777215;q[l+12>>2]=da;yp(e+160|0);u[e+164>>2]=N;u[e+160>>2]=F;u[e+168>>2]=M;Q=q[e+164>>2];g=i+w(j,3)|0;q[g>>2]=q[e+160>>2];q[g+4>>2]=Q;_=g+8|0;q[_>>2]=q[e+168>>2];u[g+20>>2]=wa;u[g+16>>2]=C;na=d<<24;Q=na|H&16777215;q[g+12>>2]=Q;Ua=kV(i+(j<<2)|0,p,72);yp(e+160|0);u[e+164>>2]=E;u[e+160>>2]=D;u[e+168>>2]=s;H=q[e+164>>2];l=i+w(j,5)|0;d=l;q[d>>2]=q[e+160>>2];q[d+4>>2]=H;q[d+8>>2]=q[e+168>>2];u[d+20>>2]=va;u[d+16>>2]=B;q[d+12>>2]=S&16777215|oa&-16777216;d=kV(i+w(j,6)|0,g,72);yp(e+160|0);u[e+164>>2]=L;u[e+160>>2]=y;u[e+168>>2]=K;S=q[e+164>>2];j=i+w(j,7)|0;q[j>>2]=q[e+160>>2];q[j+4>>2]=S;q[j+8>>2]=q[e+168>>2];u[j+20>>2]=va;u[j+16>>2]=C;oa=f<<24;S=oa|aa&16777215;q[j+12>>2]=S;h=u[e+112>>2];B=x(h+u[e+32>>2]);u[e>>2]=B;t=u[e+116>>2];o=x(t+u[e+36>>2]);u[e+4>>2]=o;D=u[e+120>>2];E=x(D+u[e+40>>2]);u[e+8>>2]=E;s=u[e+124>>2];z=x(s+u[e+44>>2]);u[e+12>>2]=z;A=u[e+128>>2];v=x(A+u[e+48>>2]);u[e+16>>2]=v;u[i+60>>2]=ja;u[i+56>>2]=A;u[i+52>>2]=ia;u[i+48>>2]=s;u[i+44>>2]=ha;u[i+40>>2]=D;u[i+36>>2]=ga;u[i+32>>2]=t;u[i+28>>2]=fa;u[i+24>>2]=h;u[p+60>>2]=Ca;u[p+56>>2]=A;u[p+52>>2]=Da;u[p+48>>2]=s;u[p+44>>2]=Ea;u[p+40>>2]=D;u[p+36>>2]=Fa;u[p+32>>2]=t;u[p+28>>2]=Ga;u[p+24>>2]=h;u[m+60>>2]=ja;u[m+56>>2]=v;u[m+52>>2]=ia;u[m+48>>2]=z;u[m+44>>2]=ha;u[m+40>>2]=E;u[m+36>>2]=ga;u[m+32>>2]=o;u[m+28>>2]=fa;u[m+24>>2]=B;u[g+60>>2]=Ca;u[g+56>>2]=v;u[g+52>>2]=Da;u[g+48>>2]=z;u[g+44>>2]=Ea;u[g+40>>2]=E;u[g+36>>2]=Fa;u[g+32>>2]=o;u[g+28>>2]=Ga;u[g+24>>2]=B;aa=kV(Ua,p,72);u[l+60>>2]=xa;u[l+56>>2]=A;u[l+52>>2]=ya;u[l+48>>2]=s;u[l+44>>2]=za;u[l+40>>2]=D;u[l+36>>2]=Aa;u[l+32>>2]=t;u[l+28>>2]=Ba;u[l+24>>2]=h;f=q[g+60>>2];q[d+56>>2]=q[g+56>>2];q[d+60>>2]=f;f=q[g+52>>2];q[d+48>>2]=q[g+48>>2];q[d+52>>2]=f;f=q[g+44>>2];q[d+40>>2]=q[g+40>>2];q[d+44>>2]=f;f=q[g+36>>2];q[d+32>>2]=q[g+32>>2];q[d+36>>2]=f;f=q[g+28>>2];q[d+24>>2]=q[g+24>>2];q[d+28>>2]=f;f=q[g+20>>2];q[d+16>>2]=q[g+16>>2];q[d+20>>2]=f;f=q[_+4>>2];q[d+8>>2]=q[_>>2];q[d+12>>2]=f;f=q[g+4>>2];q[d>>2]=q[g>>2];q[d+4>>2]=f;u[j+60>>2]=xa;u[j+56>>2]=v;u[j+52>>2]=ya;u[j+48>>2]=z;u[j+44>>2]=za;u[j+40>>2]=E;u[j+36>>2]=Aa;u[j+32>>2]=o;u[j+28>>2]=Ba;u[j+24>>2]=B;f=q[c+200>>2];H=q[c+204>>2];q[i+68>>2]=H;q[i+64>>2]=f;q[p+68>>2]=H;q[p+64>>2]=f;q[m+68>>2]=H;q[m+64>>2]=f;q[g+68>>2]=H;q[g+64>>2]=f;q[aa+68>>2]=H;q[aa+64>>2]=f;q[l+68>>2]=H;q[l+64>>2]=f;q[d+68>>2]=H;q[d+64>>2]=f;q[j+68>>2]=H;q[j+64>>2]=f;q[e+128>>2]=q[e+16>>2];d=q[e+12>>2];q[e+120>>2]=q[e+8>>2];q[e+124>>2]=d;d=q[e+4>>2];q[e+112>>2]=q[e>>2];q[e+116>>2]=d;h=k;B=C;o=G;t=P;C=I;s=K;E=L;D=y;v=M;A=N;z=F;qa=qa+8|0;if((qa|0)<(T|0)){continue}break}d=q[a+124>>2];if((d|0)<=0){break c}f=q[a+120>>2];g=c+212|0;i=kV(q[a+28>>2]+40|0,g,d<<2);if((T|0)<2){break c}d=1;while(1){kV(i+w(d,f)|0,g,q[a+124>>2]<<2);d=d+1|0;if((T|0)!=(d|0)){continue}break}}f=q[a+128>>2];h:{if((f|0)<1){break h}d=1;if((ea|0)<1){break h}g=q[a+120>>2];c=c+228|0;f=kV((q[a+28>>2]+(q[a+124>>2]<<2)|0)+40|0,c,f<<2);if((T|0)<2){break h}while(1){kV(f+w(d,g)|0,c,q[a+128>>2]<<2);d=d+1|0;if((T|0)!=(d|0)){continue}break}}q[a+32>>2]=q[a+32>>2]+(q[b+16>>2]<<1);q[a+28>>2]=q[a+28>>2]+w(q[a+120>>2],T);ue=e+224|0}function Cz(a,b,c,d){var g=0,h=0,i=0,l=0,m=0,p=0,s=0,t=0,v=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=0,E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=0,N=x(0);g=ue-192|0;ue=g;h=q[a+16>>2];if(h){i=q[a+36>>2];q[h>>2]=q[c+80>>2];l=q[c+84>>2];q[h+8>>2]=0;q[h+4>>2]=l;q[h+12>>2]=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);q[h+64>>2]=q[c+240>>2];q[h+68>>2]=q[c+244>>2];l=h+i|0;q[l>>2]=q[c+96>>2];m=q[c+100>>2];q[l+8>>2]=0;q[l+4>>2]=m;q[l+12>>2]=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);q[l+64>>2]=q[c+240>>2];q[l+68>>2]=q[c+244>>2];m=h+(i<<1)|0;q[m>>2]=q[c+112>>2];p=q[c+116>>2];q[m+8>>2]=0;q[m+4>>2]=p;q[m+12>>2]=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);q[m+64>>2]=q[c+240>>2];q[m+68>>2]=q[c+244>>2];i=h+w(i,3)|0;q[i>>2]=q[c+128>>2];p=q[c+132>>2];q[i+8>>2]=0;q[i+4>>2]=p;p=c- -64|0;q[i+12>>2]=r[p|0]|r[p+1|0]<<8|(r[p+2|0]<<16|r[p+3|0]<<24);q[i+64>>2]=q[c+240>>2];q[i+68>>2]=q[c+244>>2];q[h+16>>2]=q[c+144>>2];p=c+148|0;s=c+156|0;u[h+20>>2]=u[p>>2]+u[s>>2];t=c+152|0;u[l+16>>2]=u[c+144>>2]+u[t>>2];u[l+20>>2]=u[p>>2]+u[s>>2];q[m+16>>2]=q[c+144>>2];q[m+20>>2]=q[p>>2];u[i+16>>2]=u[c+144>>2]+u[t>>2];q[i+20>>2]=q[p>>2];q[h+24>>2]=q[c+160>>2];p=c+164|0;s=c+172|0;u[h+28>>2]=u[p>>2]+u[s>>2];t=c+168|0;u[l+24>>2]=u[c+160>>2]+u[t>>2];u[l+28>>2]=u[p>>2]+u[s>>2];q[m+24>>2]=q[c+160>>2];q[m+28>>2]=q[p>>2];u[i+24>>2]=u[c+160>>2]+u[t>>2];q[i+28>>2]=q[p>>2];q[h+32>>2]=q[c+176>>2];p=c+180|0;s=c+188|0;u[h+36>>2]=u[p>>2]+u[s>>2];t=c+184|0;u[l+32>>2]=u[c+176>>2]+u[t>>2];u[l+36>>2]=u[p>>2]+u[s>>2];q[m+32>>2]=q[c+176>>2];q[m+36>>2]=q[p>>2];u[i+32>>2]=u[c+176>>2]+u[t>>2];q[i+36>>2]=q[p>>2];q[h+40>>2]=q[c+192>>2];p=c+196|0;s=c+204|0;u[h+44>>2]=u[p>>2]+u[s>>2];t=c+200|0;u[l+40>>2]=u[c+192>>2]+u[t>>2];u[l+44>>2]=u[p>>2]+u[s>>2];q[m+40>>2]=q[c+192>>2];q[m+44>>2]=q[p>>2];u[i+40>>2]=u[c+192>>2]+u[t>>2];q[i+44>>2]=q[p>>2];q[h+48>>2]=q[c+208>>2];p=c+212|0;s=c+220|0;u[h+52>>2]=u[p>>2]+u[s>>2];t=c+216|0;u[l+48>>2]=u[c+208>>2]+u[t>>2];u[l+52>>2]=u[p>>2]+u[s>>2];q[m+48>>2]=q[c+208>>2];q[m+52>>2]=q[p>>2];u[i+48>>2]=u[c+208>>2]+u[t>>2];q[i+52>>2]=q[p>>2];q[h+56>>2]=q[c+224>>2];p=c+228|0;s=c+236|0;u[h+60>>2]=u[p>>2]+u[s>>2];t=c+232|0;u[l+56>>2]=u[c+224>>2]+u[t>>2];u[l+60>>2]=u[p>>2]+u[s>>2];q[m+56>>2]=q[c+224>>2];q[m+60>>2]=q[p>>2];u[i+56>>2]=u[c+224>>2]+u[t>>2];q[i+60>>2]=q[p>>2];p=q[b+12>>2];a:{if(p>>>0>3){break a}if(p-2){s=q[1831];q[g+184>>2]=q[1830];q[g+188>>2]=s;s=q[1829];q[g+176>>2]=q[1828];q[g+180>>2]=s;s=q[1827];q[g+168>>2]=q[1826];q[g+172>>2]=s;s=q[1825];q[g+160>>2]=q[1824];q[g+164>>2]=s;s=q[1823];q[g+152>>2]=q[1822];q[g+156>>2]=s;s=q[1821];q[g+144>>2]=q[1820];q[g+148>>2]=s;b:{if(r[b+36|0]){p=q[c+44>>2];q[g+88>>2]=q[c+40>>2];q[g+92>>2]=p;p=q[c+36>>2];q[g+80>>2]=q[c+32>>2];q[g+84>>2]=p;p=q[c+28>>2];q[g+72>>2]=q[c+24>>2];q[g+76>>2]=p;s=q[c+20>>2];p=g- -64|0;q[p>>2]=q[c+16>>2];q[p+4>>2]=s;p=q[c+4>>2];q[g+48>>2]=q[c>>2];q[g+52>>2]=p;p=q[c+12>>2];q[g+56>>2]=q[c+8>>2];q[g+60>>2]=p;vu(g+48|0,d,u[c+248>>2]);d=q[b+12>>2];p=q[a+8>>2];n[q[q[p>>2]+88>>2]](g+16|0,p);ru(d,g+144|0,g+128|0,g+112|0,g+96|0,g+48|0,nt(g+32|0,g+16|0));d=a+8|0;break b}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+32|0,d);ru(p,g+144|0,g+128|0,g+112|0,g+96|0,c,nt(g+48|0,g+32|0));d=a+8|0}u[h>>2]=u[h>>2]*u[g+128>>2];u[h+4>>2]=u[h+4>>2]*u[g+132>>2];u[l>>2]=u[l>>2]*u[g+128>>2];u[l+4>>2]=u[l+4>>2]*u[g+132>>2];u[m>>2]=u[m>>2]*u[g+128>>2];u[m+4>>2]=u[m+4>>2]*u[g+132>>2];u[i>>2]=u[i>>2]*u[g+128>>2];u[i+4>>2]=u[i+4>>2]*u[g+132>>2];p=q[d>>2];n[q[q[p>>2]+88>>2]](g+16|0,p);nt(g+48|0,g+16|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](g,d);uu(g+144|0,nt(g+32|0,g),g+128|0,q[b+28>>2],r[b+16|0]);v=u[g+184>>2];y=u[g+188>>2];z=u[g+180>>2];H=u[g+176>>2];I=u[g+152>>2];J=u[g+156>>2];K=u[g+144>>2];L=u[g+148>>2];A=u[g+168>>2];E=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());B=u[g+164>>2];F=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());C=u[g+172>>2];N=u[g+160>>2];G=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());b=(k(x(x(A*E)+x(x(B*F)+x(C+x(N*G))))),e(0));o[h+4|0]=b;o[h+5|0]=b>>>8;o[h+6|0]=b>>>16;o[h+7|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[h|0]=b;o[h+1|0]=b>>>8;o[h+2|0]=b>>>16;o[h+3|0]=b>>>24;b=(k(x(x(v*E)+x(x(z*F)+x(y+x(H*G))))),e(0));o[h+8|0]=b;o[h+9|0]=b>>>8;o[h+10|0]=b>>>16;o[h+11|0]=b>>>24;E=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());F=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());G=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());b=(k(x(x(A*E)+x(x(B*F)+x(C+x(N*G))))),e(0));o[l+4|0]=b;o[l+5|0]=b>>>8;o[l+6|0]=b>>>16;o[l+7|0]=b>>>24;b=(k(x(x(v*E)+x(x(z*F)+x(y+x(H*G))))),e(0));o[l+8|0]=b;o[l+9|0]=b>>>8;o[l+10|0]=b>>>16;o[l+11|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[l|0]=b;o[l+1|0]=b>>>8;o[l+2|0]=b>>>16;o[l+3|0]=b>>>24;E=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());F=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());G=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());b=(k(x(x(A*E)+x(x(B*F)+x(C+x(N*G))))),e(0));o[m+4|0]=b;o[m+5|0]=b>>>8;o[m+6|0]=b>>>16;o[m+7|0]=b>>>24;b=(k(x(x(v*E)+x(x(z*F)+x(y+x(H*G))))),e(0));o[m+8|0]=b;o[m+9|0]=b>>>8;o[m+10|0]=b>>>16;o[m+11|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[m|0]=b;o[m+1|0]=b>>>8;o[m+2|0]=b>>>16;o[m+3|0]=b>>>24;E=A;A=(f(0,r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24)),j());F=B;B=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());G=C;C=(f(0,r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24)),j());b=(k(x(x(E*A)+x(x(F*B)+x(G+x(N*C))))),e(0));o[i+4|0]=b;o[i+5|0]=b>>>8;o[i+6|0]=b>>>16;o[i+7|0]=b>>>24;b=(k(x(x(v*A)+x(x(z*B)+x(y+x(H*C))))),e(0));o[i+8|0]=b;o[i+9|0]=b>>>8;o[i+10|0]=b>>>16;o[i+11|0]=b>>>24;b=(k(x(x(I*A)+x(x(L*B)+x(J+x(K*C))))),e(0));o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;break a}s=q[c+44>>2];p=g+184|0;q[p>>2]=q[c+40>>2];q[p+4>>2]=s;s=q[c+36>>2];q[g+176>>2]=q[c+32>>2];q[g+180>>2]=s;M=q[c+28>>2];s=g+168|0;q[s>>2]=q[c+24>>2];q[s+4>>2]=M;t=q[c+20>>2];q[g+160>>2]=q[c+16>>2];q[g+164>>2]=t;t=q[c+4>>2];q[g+144>>2]=q[c>>2];q[g+148>>2]=t;t=q[c+12>>2];q[g+152>>2]=q[c+8>>2];q[g+156>>2]=t;if(r[b+36|0]){vu(g+144|0,d,u[c+248>>2])}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+112|0,d);nt(g+48|0,g+112|0);d=q[a+8>>2];n[q[q[d>>2]+92>>2]](g+96|0,d);su(g+144|0,nt(g+128|0,g+96|0),q[b+28>>2],r[b+16|0]);H=u[p>>2];b=g+188|0;I=u[b>>2];d=g+180|0;J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];A=u[g+156>>2];B=u[g+144>>2];C=u[g+148>>2];v=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());y=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());t=g+164|0;z=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());M=g+172|0;D=(k(x(x(v*u[s>>2])+x(x(y*u[t>>2])+x(x(z*u[g+160>>2])+u[M>>2])))),e(0));o[h+4|0]=D;o[h+5|0]=D>>>8;o[h+6|0]=D>>>16;o[h+7|0]=D>>>24;D=(k(x(x(v*L)+x(x(y*C)+x(A+x(z*B))))),e(0));o[h|0]=D;o[h+1|0]=D>>>8;o[h+2|0]=D>>>16;o[h+3|0]=D>>>24;D=(k(x(x(v*H)+x(x(y*J)+x(I+x(z*K))))),e(0));o[h+8|0]=D;o[h+9|0]=D>>>8;o[h+10|0]=D>>>16;o[h+11|0]=D>>>24;H=u[s>>2];I=u[M>>2];J=u[t>>2];K=u[g+152>>2];L=u[g+156>>2];A=u[g+144>>2];B=u[g+148>>2];C=u[g+160>>2];v=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());y=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());z=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());h=(k(x(x(v*u[p>>2])+x(x(y*u[d>>2])+x(x(z*u[g+176>>2])+u[b>>2])))),e(0));o[l+8|0]=h;o[l+9|0]=h>>>8;o[l+10|0]=h>>>16;o[l+11|0]=h>>>24;h=(k(x(x(v*H)+x(x(y*J)+x(I+x(z*C))))),e(0));o[l+4|0]=h;o[l+5|0]=h>>>8;o[l+6|0]=h>>>16;o[l+7|0]=h>>>24;h=(k(x(x(v*K)+x(x(y*B)+x(L+x(z*A))))),e(0));o[l|0]=h;o[l+1|0]=h>>>8;o[l+2|0]=h>>>16;o[l+3|0]=h>>>24;H=u[p>>2];I=u[b>>2];J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];A=u[g+156>>2];B=u[g+144>>2];C=u[g+148>>2];v=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());y=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());z=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());h=(k(x(x(v*u[s>>2])+x(x(y*u[t>>2])+x(x(z*u[g+160>>2])+u[M>>2])))),e(0));o[m+4|0]=h;o[m+5|0]=h>>>8;o[m+6|0]=h>>>16;o[m+7|0]=h>>>24;h=(k(x(x(v*L)+x(x(y*C)+x(A+x(z*B))))),e(0));o[m|0]=h;o[m+1|0]=h>>>8;o[m+2|0]=h>>>16;o[m+3|0]=h>>>24;h=(k(x(x(v*H)+x(x(y*J)+x(I+x(z*K))))),e(0));o[m+8|0]=h;o[m+9|0]=h>>>8;o[m+10|0]=h>>>16;o[m+11|0]=h>>>24;H=u[p>>2];I=u[b>>2];J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];A=u[g+156>>2];B=u[g+144>>2];C=u[g+148>>2];v=(f(0,r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24)),j());y=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());z=(f(0,r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24)),j());b=(k(x(x(v*u[s>>2])+x(x(y*u[t>>2])+x(x(z*u[g+160>>2])+u[M>>2])))),e(0));o[i+4|0]=b;o[i+5|0]=b>>>8;o[i+6|0]=b>>>16;o[i+7|0]=b>>>24;b=(k(x(x(v*L)+x(x(y*C)+x(A+x(z*B))))),e(0));o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;b=(k(x(x(v*H)+x(x(y*J)+x(I+x(z*K))))),e(0));o[i+8|0]=b;o[i+9|0]=b>>>8;o[i+10|0]=b>>>16;o[i+11|0]=b>>>24}h=q[a+44>>2];if((h|0)>=1){d=q[a+36>>2];b=c+252|0;h=kV(q[a+16>>2]+40|0,b,h<<2);kV(d+h|0,b,q[a+44>>2]<<2);kV(h+(d<<1)|0,b,q[a+44>>2]<<2);kV(h+w(d,3)|0,b,q[a+44>>2]<<2)}h=q[a+48>>2];if((h|0)>=1){d=q[a+36>>2];b=c+268|0;c=kV((q[a+16>>2]+(q[a+44>>2]<<2)|0)+40|0,b,h<<2);kV(d+c|0,b,q[a+48>>2]<<2);kV(c+(d<<1)|0,b,q[a+48>>2]<<2);kV(c+w(d,3)|0,b,q[a+48>>2]<<2)}q[a+12>>2]=q[a+12>>2]+1;q[a+16>>2]=q[a+16>>2]+(q[a+36>>2]<<2)}ue=g+192|0}function sx(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,p=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;l=ue-272|0;ue=l;a:{if(q[a+192>>2]==q[a+188>>2]){break a}p=q[i+20>>2];if((p|0)<0){break a}b:{if(r[i+65|0]){m=q[i+4>>2];n[q[q[m>>2]+128>>2]](l+160|0,m,p);break b}m=q[i+4>>2];n[q[q[m>>2]+92>>2]](l+160|0,m,p)}v=q[l+160>>2];if(!v){break a}B=a+364|0;c:{d:{if(!(!r[a+477|0]|j)){p=n[q[q[b>>2]+136>>2]](b)|0;if(p){if(!n[q[q[p>>2]+8>>2]](p,b)){break c}}m=q[B>>2];if(!q[n[q[q[b>>2]+196>>2]](b)>>2]){break c}s=n[q[q[b>>2]+196>>2]](b)|0;p=((q[a+480>>2]<<2)+a|0)+380|0;t=q[s>>2];if(t){n[q[q[t>>2]>>2]](t)|0}t=(m|0)==5;C=(m|0)==2;m=q[p>>2];if(m){n[q[q[m>>2]+8>>2]](m)|0;q[p>>2]=0}q[p>>2]=q[s>>2];m=t|C;break d}p=q[B>>2];m=(p|0)==2|(p|0)==5}q[l+264>>2]=0;q[l+252>>2]=0;q[l+256>>2]=0;q[l+260>>2]=0;q[l+244>>2]=0;q[l+248>>2]=0;q[l+240>>2]=1065353216;Jv(q[b+4>>2],l+264|0,l+240|0);if(r[a+476|0]){e:{f:{g:{p=q[l+264>>2];if(p){s=q[i+40>>2];if(u[s+180>>2]!=x(0)|u[s+184>>2]!=x(0)|(q[B>>2]==6|u[s+188>>2]!=x(0))){break g}}Hv(l+160|0,q[b+4>>2],0);p=q[l+160>>2];q[l+160>>2]=0;s=q[l+264>>2];h:{if(!s){q[l+264>>2]=p;break h}n[q[q[s>>2]+8>>2]](s)|0;q[l+264>>2]=p;s=q[l+160>>2];if(!s){break h}n[q[q[s>>2]+8>>2]](s)|0;q[l+160>>2]=0;p=q[l+264>>2]}s=((q[a+484>>2]<<2)+a|0)+380|0;if(!p){break e}break f}s=((q[a+484>>2]<<2)+a|0)+380|0}n[q[q[p>>2]>>2]](p)|0}p=q[s>>2];if(p){n[q[q[p>>2]+8>>2]](p)|0;q[s>>2]=0}q[s>>2]=q[l+264>>2]}p=q[B>>2];i:{j:{k:{l:{t=q[q[i+40>>2]+40>>2];m:{n:{if(!t){break n}s=6;if((p|0)!=6){break n}p=q[t>>2];if((p|0)<0){break m}s=q[i+4>>2];n[q[q[s>>2]+104>>2]](l+160|0,s,p);p=q[l+160>>2];if(p){break l}p=q[B>>2]}if(p+ -3>>>0<=2){break k}s=p}e=0;if(m){break i}h=(s|0)==1?f:g;break j}n[q[q[p>>2]+8>>2]](p)|0;c=q[i+4>>2];n[q[q[c>>2]+104>>2]](l+160|0,c,q[t>>2]);y=q[l+160>>2];if(!(j|(!y|!r[y+25|0]))){h=q[y+80>>2];e=1;break i}h=q[y+72>>2];break j}h=e;e=0;if(m){break i}h=(p|0)==4?c:d}e=0}if(h){c=Eu(q[b+80>>2]);d=r[i+8|0]|r[c|0]&-2;o[c|0]=d;o[c|0]=d&253|r[i+9|0]<<1;q[c+4>>2]=q[q[i+40>>2]+44>>2];q[c+8>>2]=q[i+16>>2];n[q[q[b>>2]+228>>2]](l+160|0,b);f=q[l+160>>2];d=q[l+164>>2];o:{if(!d){break o}g=q[d+4>>2];q[d+4>>2]=g+ -1;if(g){break o}n[q[q[d>>2]+8>>2]](d);WS(d)}p:{if(f){n[q[q[b>>2]+228>>2]](l+160|0,b);q[c+4>>2]=q[q[l+160>>2]+8>>2];d=q[l+164>>2];if(!d){break p}f=q[d+4>>2];q[d+4>>2]=f+ -1;if(f){break p}n[q[q[d>>2]+8>>2]](d);WS(d);break p}if((n[q[q[b>>2]+160>>2]](b)|0)!=1){break p}q[c+4>>2]=0}if(e){q[c+4>>2]=1}Sy(b,h);e=0;d=q[a+376>>2];if((d|0)>0){while(1){f=e<<2;g=f+c|0;f=a+f|0;q[g+12>>2]=q[f+412>>2];q[g+44>>2]=q[f+444>>2];e=e+1|0;if((d|0)!=(e|0)){continue}break}}Wy(b,h,a+380|0,d);c=q[b+80>>2];n[q[q[c>>2]+8>>2]](c,m);e=n[q[q[h>>2]+28>>2]](h)|0;q[l+236>>2]=0;q[l+232>>2]=0;q:{if(!(!y|!t)){q[l+224>>2]=0;n[q[q[y>>2]>>2]](y)|0;c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}q[l+224>>2]=y;Ox(a,b,h,l+224|0,t,i,j,l+236|0,l+232|0);c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}n[q[q[b>>2]+84>>2]](l+160|0,b);c=q[l+220>>2];d=q[l+216>>2];o[e+56|0]=d;o[e+57|0]=d>>>8;o[e+58|0]=d>>>16;o[e+59|0]=d>>>24;o[e+60|0]=c;o[e+61|0]=c>>>8;o[e+62|0]=c>>>16;o[e+63|0]=c>>>24;c=q[l+212>>2];d=q[l+208>>2];o[e+48|0]=d;o[e+49|0]=d>>>8;o[e+50|0]=d>>>16;o[e+51|0]=d>>>24;o[e+52|0]=c;o[e+53|0]=c>>>8;o[e+54|0]=c>>>16;o[e+55|0]=c>>>24;c=q[l+204>>2];d=q[l+200>>2];o[e+40|0]=d;o[e+41|0]=d>>>8;o[e+42|0]=d>>>16;o[e+43|0]=d>>>24;o[e+44|0]=c;o[e+45|0]=c>>>8;o[e+46|0]=c>>>16;o[e+47|0]=c>>>24;c=q[l+196>>2];d=q[l+192>>2];o[e+32|0]=d;o[e+33|0]=d>>>8;o[e+34|0]=d>>>16;o[e+35|0]=d>>>24;o[e+36|0]=c;o[e+37|0]=c>>>8;o[e+38|0]=c>>>16;o[e+39|0]=c>>>24;c=q[l+188>>2];d=q[l+184>>2];o[e+24|0]=d;o[e+25|0]=d>>>8;o[e+26|0]=d>>>16;o[e+27|0]=d>>>24;o[e+28|0]=c;o[e+29|0]=c>>>8;o[e+30|0]=c>>>16;o[e+31|0]=c>>>24;c=q[l+180>>2];d=q[l+176>>2];o[e+16|0]=d;o[e+17|0]=d>>>8;o[e+18|0]=d>>>16;o[e+19|0]=d>>>24;o[e+20|0]=c;o[e+21|0]=c>>>8;o[e+22|0]=c>>>16;o[e+23|0]=c>>>24;c=q[l+172>>2];d=q[l+168>>2];o[e+8|0]=d;o[e+9|0]=d>>>8;o[e+10|0]=d>>>16;o[e+11|0]=d>>>24;o[e+12|0]=c;o[e+13|0]=c>>>8;o[e+14|0]=c>>>16;o[e+15|0]=c>>>24;c=q[l+164>>2];d=q[l+160>>2];o[e|0]=d;o[e+1|0]=d>>>8;o[e+2|0]=d>>>16;o[e+3|0]=d>>>24;o[e+4|0]=c;o[e+5|0]=c>>>8;o[e+6|0]=c>>>16;o[e+7|0]=c>>>24;break q}if(m){Rx(b,h,i);break q}Sx(b,h,i)}c=q[b+4>>2];d=q[i+68>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[c+316>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+316>>2]=0}q[c+316>>2]=q[i+68>>2];q[q[b+4>>2]+320>>2]=k;c=q[q[a+320>>2]>>2]%(pr(v)|0)|0;f=q[a+320>>2];d=q[a+324>>2];r:{if((f|0)==(d|0)){break r}while(1){if((c|0)!=(q[f>>2]%(pr(v)|0)|0)){break r}f=f+4|0;if((d|0)!=(f|0)){continue}break}}if(q[a+192>>2]!=q[a+188>>2]){f=e- -64|0;c=0;while(1){p=c<<2;j=q[p+q[a+320>>2]>>2]%(pr(v)|0)|0;Ly(b,kr(v,j));d=b;g=d;s:{if((n[q[q[d>>2]+160>>2]](d)|0)==1){s=6;d=mr(v,j);break s}s=3;d=lr(v,j)}My(g,d);Ny(b,h);d=q[a+188>>2]+(c<<6)|0;g=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);k=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[f|0]=k;o[f+1|0]=k>>>8;o[f+2|0]=k>>>16;o[f+3|0]=k>>>24;o[f+4|0]=g;o[f+5|0]=g>>>8;o[f+6|0]=g>>>16;o[f+7|0]=g>>>24;k=r[d+60|0]|r[d+61|0]<<8|(r[d+62|0]<<16|r[d+63|0]<<24);B=f+56|0;g=B;m=r[d+56|0]|r[d+57|0]<<8|(r[d+58|0]<<16|r[d+59|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+52|0]|r[d+53|0]<<8|(r[d+54|0]<<16|r[d+55|0]<<24);t=f+48|0;g=t;m=r[d+48|0]|r[d+49|0]<<8|(r[d+50|0]<<16|r[d+51|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+44|0]|r[d+45|0]<<8|(r[d+46|0]<<16|r[d+47|0]<<24);C=f+40|0;g=C;m=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);D=f+32|0;g=D;m=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);E=f+24|0;g=E;m=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);F=f+16|0;g=F;m=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);m=f+8|0;g=m;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[g|0]=d;o[g+1|0]=d>>>8;o[g+2|0]=d>>>16;o[g+3|0]=d>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;d=c<<4;g=d+q[a+200>>2]|0;q[e+128>>2]=q[g>>2];q[e+132>>2]=q[g+4>>2];q[e+136>>2]=q[g+8>>2];q[e+140>>2]=q[g+12>>2];g=d+q[a+212>>2]|0;k=q[g>>2];z=q[g+4>>2];A=q[g+12>>2];q[e+152>>2]=q[g+8>>2];q[e+156>>2]=A;q[e+144>>2]=k;q[e+148>>2]=z;g=d+q[a+224>>2]|0;k=q[g+8>>2];z=q[g+12>>2];A=q[g+4>>2];q[e+160>>2]=q[g>>2];q[e+164>>2]=A;q[e+168>>2]=k;q[e+172>>2]=z;g=d+q[a+236>>2]|0;k=q[g+8>>2];z=q[g+12>>2];A=q[g+4>>2];q[e+176>>2]=q[g>>2];q[e+180>>2]=A;q[e+184>>2]=k;q[e+188>>2]=z;g=d+q[a+248>>2]|0;k=q[g+8>>2];z=q[g+12>>2];A=q[g+4>>2];q[e+192>>2]=q[g>>2];q[e+196>>2]=A;q[e+200>>2]=k;q[e+204>>2]=z;g=d+q[a+260>>2]|0;k=q[g+8>>2];z=q[g+12>>2];A=q[g+4>>2];q[e+208>>2]=q[g>>2];q[e+212>>2]=A;q[e+216>>2]=k;q[e+220>>2]=z;q[e+256>>2]=q[p+q[a+272>>2]>>2];q[e+272>>2]=q[p+q[a+284>>2]>>2];g=ht(l+160|0,f);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(g,ht(l+96|0,l+32|0),u[q[a+296>>2]>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(g,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);g=q[l+164>>2];k=q[l+180>>2];z=q[l+196>>2];A=q[l+212>>2];G=q[l+168>>2];H=q[l+184>>2];I=q[l+200>>2];J=q[l+216>>2];K=q[l+172>>2];L=q[l+188>>2];M=q[l+204>>2];N=q[l+220>>2];O=q[l+160>>2];P=q[l+176>>2];Q=q[l+192>>2];R=q[l+208>>2];oo(l+96|0);q[l+108>>2]=R;q[l+104>>2]=Q;q[l+100>>2]=P;q[l+96>>2]=O;q[l+156>>2]=N;q[l+152>>2]=M;q[l+148>>2]=L;q[l+144>>2]=K;q[l+140>>2]=J;q[l+136>>2]=I;q[l+132>>2]=H;q[l+128>>2]=G;q[l+124>>2]=A;q[l+120>>2]=z;q[l+116>>2]=k;q[l+112>>2]=g;g=q[l+108>>2];q[m>>2]=q[l+104>>2];q[m+4>>2]=g;g=q[l+116>>2];q[F>>2]=q[l+112>>2];q[F+4>>2]=g;g=q[l+124>>2];q[E>>2]=q[l+120>>2];q[E+4>>2]=g;g=q[l+132>>2];q[D>>2]=q[l+128>>2];q[D+4>>2]=g;g=q[l+140>>2];q[C>>2]=q[l+136>>2];q[C+4>>2]=g;g=q[l+148>>2];q[t>>2]=q[l+144>>2];q[t+4>>2]=g;g=q[l+100>>2];q[f>>2]=q[l+96>>2];q[f+4>>2]=g;g=q[l+156>>2];q[B>>2]=q[l+152>>2];q[B+4>>2]=g;g=p+q[a+308>>2]|0;g=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);u[e+300>>2]=x(g>>>24>>>0)/x(255);u[e+288>>2]=x((g&255)>>>0)/x(255);u[e+296>>2]=x((g>>>16&255)>>>0)/x(255);u[e+292>>2]=x((g>>>8&255)>>>0)/x(255);g=q[l+236>>2];if(g){k=d+q[a+332>>2]|0;q[g>>2]=q[k>>2];q[g+4>>2]=q[k+4>>2];q[g+8>>2]=q[k+8>>2];q[g+12>>2]=q[k+12>>2]}g=q[l+232>>2];if(g){d=d+q[a+344>>2]|0;q[g>>2]=q[d>>2];q[g+4>>2]=q[d+4>>2];q[g+8>>2]=q[d+8>>2];q[g+12>>2]=q[d+12>>2]}n[q[q[h>>2]+36>>2]](h);Py(b,nr(v,j),w(or(v,j),s));c=c+1|0;if(c>>>0>2]-q[a+188>>2]>>6>>>0){continue}break}}Ty(b,h);Gu(q[b+80>>2])}if(y){n[q[q[y>>2]+8>>2]](y)|0}a=q[l+264>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[l+264>>2]=0}n[q[q[v>>2]+8>>2]](v)|0}ue=l+272|0}function ZJ(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;n=ue-192|0;ue=n;F=h;I=i&65535;r=d;o=e&65535;E=(e^i)&-2147483648;s=i>>>16&32767;a:{u=e>>>16&32767;b:{c:{if(s+ -1>>>0<32766?u+ -1>>>0<=32765:0){break c}m=e&2147483647;k=m;j=d;if(!(!j&(k|0)==2147418112?!(b|c):(k|0)==2147418112&j>>>0<0|k>>>0<2147418112)){J=d;E=e|32768;break b}m=i&2147483647;e=m;d=h;if(!(!d&(e|0)==2147418112?!(f|g):(e|0)==2147418112&d>>>0<0|e>>>0<2147418112)){J=h;E=i|32768;b=f;c=g;break b}if(!(b|j|(k^2147418112|c))){if(!(d|f|(e^2147418112|g))){b=0;c=0;E=2147450880;break b}E=E|2147418112;b=0;c=0;break b}if(!(d|f|(e^2147418112|g))){b=0;c=0;break b}if(!(b|j|(c|k))){break a}if(!(d|f|(e|g))){E=E|2147418112;b=0;c=0;break b}if((k|0)==65535&j>>>0<=4294967295|k>>>0<65535){j=b;h=!(o|r);i=h<<6;k=z(h?b:r)+32|0;b=z(h?c:o);b=i+((b|0)==32?k:b)|0;MJ(n+176|0,j,c,r,o,b+ -15|0);l=16-b|0;r=q[n+184>>2];o=q[n+188>>2];c=q[n+180>>2];b=q[n+176>>2]}if((e|0)==65535&d>>>0>4294967295|e>>>0>65535){break c}d=!(F|I);e=d<<6;h=z(d?f:F)+32|0;d=z(d?g:I);d=e+((d|0)==32?h:d)|0;MJ(n+160|0,f,g,F,I,d+ -15|0);l=(d+l|0)+ -16|0;F=q[n+168>>2];I=q[n+172>>2];f=q[n+160>>2];g=q[n+164>>2]}e=I|65536;H=e;O=F;d=F;k=e<<15|d>>>17;d=d<<15|g>>>17;h=-102865788-d|0;e=k;i=1963258675-(k+(4192101508>>0)|0)|0;JJ(n+144|0,d,k,h,i);j=q[n+152>>2];JJ(n+128|0,0-j|0,0-(q[n+156>>2]+(0>>0)|0)|0,h,i);h=q[n+136>>2];i=h<<1|q[n+132>>2]>>>31;h=q[n+140>>2]<<1|h>>>31;JJ(n+112|0,i,h,d,k);j=h;h=q[n+120>>2];JJ(n+96|0,i,j,0-h|0,0-(q[n+124>>2]+(0>>0)|0)|0);h=q[n+104>>2];i=h<<1|q[n+100>>2]>>>31;h=q[n+108>>2]<<1|h>>>31;JJ(n+80|0,i,h,d,k);j=h;h=q[n+88>>2];JJ(n- -64|0,i,j,0-h|0,0-(q[n+92>>2]+(0>>0)|0)|0);h=q[n+72>>2];i=h<<1|q[n+68>>2]>>>31;h=q[n+76>>2]<<1|h>>>31;JJ(n+48|0,i,h,d,k);j=h;h=q[n+56>>2];JJ(n+32|0,i,j,0-h|0,0-(q[n+60>>2]+(0>>0)|0)|0);h=q[n+40>>2];i=h<<1|q[n+36>>2]>>>31;h=q[n+44>>2]<<1|h>>>31;JJ(n+16|0,i,h,d,k);j=h;h=q[n+24>>2];JJ(n,i,j,0-h|0,0-(q[n+28>>2]+(0>>0)|0)|0);K=(u-s|0)+l|0;h=q[n+8>>2];j=q[n+12>>2]<<1|h>>>31;i=h<<1;k=j+ -1|0;i=(q[n+4>>2]>>>31|i)+ -1|0;if(i>>>0<4294967295){k=k+1|0}h=i;j=0;w=j;v=e;l=0;m=vW(h,j,e,l);e=we;u=e;x=k;s=0;j=d;h=vW(k,s,j,0);d=h+m|0;k=we+e|0;k=d>>>0>>0?k+1|0:k;h=d;d=k;p=vW(i,w,j,p);e=0+p|0;k=h;j=k+we|0;j=e>>>0

>>0?j+1|0:j;p=e;e=j;j=(k|0)==(j|0)&p>>>0>>0|j>>>0>>0;k=(d|0)==(u|0)&k>>>0>>0|d>>>0>>0;h=d;d=vW(x,s,v,l)+d|0;l=k+we|0;l=d>>>0>>0?l+1|0:l;h=d;d=j+d|0;j=l;C=d;h=d>>>0>>0?j+1|0:j;d=g;A=(d&131071)<<15|f>>>17;v=vW(i,w,A,0);d=we;y=d;k=f;t=k<<15&-32768;m=vW(x,s,t,0);j=m+v|0;k=we+d|0;k=j>>>0>>0?k+1|0:k;d=k;B=vW(i,w,t,B);t=0+B|0;k=j+we|0;k=t>>>0>>0?k+1|0:k;k=(j|0)==(k|0)&t>>>0>>0|k>>>0>>0;j=(d|0)==(y|0)&j>>>0>>0|d>>>0>>0;m=d;d=vW(x,s,A,D)+d|0;l=j+we|0;l=d>>>0>>0?l+1|0:l;j=d;d=k+j|0;m=d>>>0>>0?l+1|0:l;k=d;d=p+d|0;j=m+e|0;j=d>>>0>>0?j+1|0:j;u=d;k=h;v=j;d=(e|0)==(j|0)&d>>>0

>>0|j>>>0>>0;e=d+C|0;if(e>>>0>>0){k=k+1|0}j=k;d=(u|0)!=0|(v|0)!=0;e=e+d|0;if(e>>>0>>0){j=j+1|0}k=e;e=0-k|0;p=0;h=vW(e,p,i,w);d=we;y=d;t=vW(x,s,e,p);e=we;C=e;A=0-((0>>0)+j|0)|0;j=0;p=vW(i,w,A,j);l=p+t|0;k=we+e|0;k=l>>>0

>>0?k+1|0:k;e=l;p=0+h|0;l=d+e|0;l=p>>>0>>0?l+1|0:l;m=p;d=l;l=(y|0)==(d|0)&m>>>0>>0|d>>>0>>0;m=(k|0)==(C|0)&e>>>0>>0|k>>>0>>0;e=vW(x,s,A,j)+k|0;j=m+we|0;j=e>>>0>>0?j+1|0:j;h=e;e=l+e|0;if(e>>>0>>0){j=j+1|0}A=e;h=j;l=p;e=0-u|0;D=0-((0>>0)+v|0)|0;u=0;C=vW(D,u,i,w);t=we;v=e;B=0;j=vW(e,B,x,s);e=j+C|0;k=we+t|0;m=e;e=e>>>0>>0?k+1|0:k;v=vW(i,w,v,B);i=0+v|0;j=m;k=j+we|0;k=i>>>0>>0?k+1|0:k;k=(j|0)==(k|0)&i>>>0>>0|k>>>0>>0;j=(e|0)==(t|0)&j>>>0>>0|e>>>0>>0;i=e;e=vW(D,u,x,s)+e|0;m=j+we|0;m=e>>>0>>0?m+1|0:m;i=e;e=k+e|0;j=m;j=e>>>0>>0?j+1|0:j;i=e;e=e+l|0;j=j+d|0;j=e>>>0>>0?j+1|0:j;i=e;k=h;e=j;d=(d|0)==(j|0)&i>>>0>>0|j>>>0>>0;h=d+A|0;if(h>>>0>>0){k=k+1|0}d=h;j=k;m=d;l=e+ -1|0;d=i+ -2|0;if(d>>>0<4294967294){l=l+1|0}h=d;k=d;d=l;e=(e|0)==(d|0)&k>>>0>>0|d>>>0>>0;i=m+e|0;if(i>>>0>>0){j=j+1|0}e=i+ -1|0;k=j+ -1|0;k=e>>>0<4294967295?k+1|0:k;i=0;x=i;s=e;j=r;t=j<<2|c>>>30;A=0;p=vW(e,i,t,A);i=we;m=i;i=c;D=(i&1073741823)<<2|b>>>30;B=k;i=0;j=vW(D,0,k,i);e=j+p|0;l=we+m|0;l=e>>>0>>0?l+1|0:l;j=e;v=l;y=(m|0)==(l|0)&j>>>0

>>0|l>>>0>>0;m=l;l=0;p=l;k=0;C=d;G=((o&1073741823)<<2|r>>>30)&-262145|262144;e=vW(d,l,G,0);d=e+j|0;m=we+m|0;m=d>>>0>>0?m+1|0:m;r=d;e=m;d=(v|0)==(e|0)&d>>>0>>0|e>>>0>>0;j=d+y|0;if(j>>>0>>0){k=1}m=vW(B,i,G,L);d=m+j|0;j=we+k|0;k=d>>>0>>0?j+1|0:j;l=vW(s,x,G,L);j=we;c=d;o=vW(t,A,B,i);d=o+l|0;m=we+j|0;m=d>>>0>>0?m+1|0:m;o=d;d=m;m=(j|0)==(d|0)&o>>>0>>0|d>>>0>>0;l=c+d|0;k=k+m|0;j=l;m=j>>>0>>0?k+1|0:k;c=j;l=e+o|0;k=0;d=k+r|0;if(d>>>0>>0){l=l+1|0}o=d;j=d;d=l;e=(e|0)==(d|0)&j>>>0>>0|d>>>0>>0;j=c+e|0;if(j>>>0>>0){m=m+1|0}P=j;e=o;k=d;r=vW(D,u,C,p);l=we;v=h;y=vW(h,0,t,A);h=y+r|0;j=we+l|0;j=h>>>0>>0?j+1|0:j;w=h;h=j;r=(l|0)==(j|0)&w>>>0>>0|j>>>0>>0;Q=e;j=0;R=r;M=b<<2&-4;c=0;r=vW(s,x,M,c);e=r+w|0;l=we+h|0;l=e>>>0>>0?l+1|0:l;y=e;r=e;e=l;h=(h|0)==(e|0)&r>>>0>>0|e>>>0>>0;l=R+h|0;if(l>>>0>>0){j=1}h=Q+l|0;k=j+k|0;k=h>>>0>>0?k+1|0:k;r=h;l=m;h=k;d=(d|0)==(k|0)&r>>>0>>0|k>>>0>>0;j=d+P|0;if(j>>>0>>0){l=l+1|0}Q=j;o=r;w=h;P=vW(B,i,M,c);B=we;i=vW(G,L,v,N);d=i+P|0;m=we+B|0;m=d>>>0>>0?m+1|0:m;G=d;j=vW(t,A,C,p);d=d+j|0;i=m;k=i+we|0;k=d>>>0>>0?k+1|0:k;t=d;m=vW(s,x,D,u);d=d+m|0;j=we+k|0;s=d;j=d>>>0>>0?j+1|0:j;x=0;m=l;d=j;j=(j|0)==(k|0)&s>>>0>>0|j>>>0>>0;l=(i|0)==(B|0)&G>>>0

>>0|i>>>0>>0;i=(i|0)==(k|0)&t>>>0>>0|k>>>0>>0;k=l+i|0;k>>>0>>0;i=j+k|0;k=i;j=d|0;i=j+o|0;k=(k|x)+w|0;k=i>>>0>>0?k+1|0:k;w=i;o=k;h=(h|0)==(k|0)&i>>>0>>0|k>>>0>>0;i=h+Q|0;if(i>>>0>>0){m=m+1|0}A=i;i=m;m=w;r=o;x=y;C=vW(C,p,M,c);p=we;j=vW(D,u,v,N);h=j+C|0;l=we+p|0;l=h>>>0>>0?l+1|0:l;k=l;u=k;l=0;j=(k|0)==(p|0)&h>>>0>>0|k>>>0

>>0;h=k+x|0;k=(j|l)+e|0;k=h>>>0>>0?k+1|0:k;u=h;j=h;h=k;j=(e|0)==(k|0)&j>>>0>>0|k>>>0>>0;y=m;e=j;j=k+s|0;m=0;d=m+u|0;if(d>>>0>>0){j=j+1|0}d=(h|0)==(j|0)&d>>>0>>0|j>>>0>>0;e=e+d|0;if(e>>>0>>0){l=1}d=y+e|0;m=l+r|0;h=d;j=i;m=d>>>0>>0?m+1|0:m;i=m;d=(o|0)==(i|0)&d>>>0>>0|i>>>0>>0;e=d+A|0;if(e>>>0>>0){j=j+1|0}d=e;e=j;d:{if((j|0)==131071&d>>>0<=4294967295|j>>>0<131071){x=0;o=f;t=0;k=vW(h,x,o,t);l=we;j=b<<17;b=0;c=(k|0)!=0|(l|0)!=0;r=b-c|0;G=j-(b>>>0>>0)|0;u=0-k|0;p=0-((0>>0)+l|0)|0;c=0;A=vW(i,c,o,t);b=we;D=b;s=0;k=vW(h,x,g,s);j=k+A|0;l=we+b|0;l=j>>>0>>0?l+1|0:l;b=j;k=j;v=0;j=v;y=k;j=(k|0)==(p|0)&u>>>0>>0|p>>>0>>0;w=r-j|0;G=G-(r>>>0>>0)|0;j=vW(d,0,o,t);k=we;o=vW(h,x,F,0);j=o+j|0;m=we+k|0;m=j>>>0>>0?m+1|0:m;o=vW(i,c,g,s);j=o+j|0;k=we+m|0;k=j>>>0>>0?k+1|0:k;m=k;k=(l|0)==(D|0)&b>>>0>>0|l>>>0>>0;b=l+j|0;k=k+m|0;m=b;b=m>>>0>>0?k+1|0:k;j=vW(h,i,H,0);l=we;r=m;m=vW(f,g,e,0);k=m+j|0;j=we+l|0;j=k>>>0>>0?j+1|0:j;l=vW(d,e,g,s);m=l+k|0;j=vW(i,c,F,I);c=j+m|0;j=c;k=0;c=r+k|0;j=b+j|0;b=c;r=w-b|0;c=G-((w>>>0>>0)+(b>>>0>>0?j+1|0:j)|0)|0;K=K+ -1|0;F=u-v|0;b=p-((u>>>0>>0)+y|0)|0;break d}s=i>>>1|0;l=0;m=b<<16;k=d<<31;h=(i&1)<<31|h>>>1;i=i>>>1|k;D=0;B=0;b=vW(h,D,f,B);j=we;k=j;j=(b|0)!=0|(j|0)!=0;o=c-j|0;N=m-(c>>>0>>0)|0;w=0-b|0;x=0-((0>>0)+k|0)|0;m=x;p=0;v=vW(h,D,g,p);b=we;L=b;y=s|d<<31;M=e<<31|d>>>1|l;k=y;s=vW(k,0,f,B);c=s+v|0;j=we+b|0;j=c>>>0>>0?j+1|0:j;b=j;j=c;C=j;t=0;j=(j|0)==(m|0)&w>>>0>>0|m>>>0>>0;A=o-j|0;N=N-(o>>>0>>0)|0;k=vW(g,p,k,l);l=we;j=e;m=j>>>1|0;s=(j&1)<<31|d>>>1;o=m;m=vW(s,0,f,B);j=m+k|0;k=we+l|0;k=j>>>0>>0?k+1|0:k;l=vW(h,D,F,0);m=l+j|0;j=we+k|0;k=m;m=k>>>0>>0?j+1|0:j;j=(b|0)==(L|0)&c>>>0>>0|b>>>0>>0;c=b;b=b+k|0;l=j+m|0;j=b;b=j>>>0>>0?l+1|0:l;c=vW(h,i,H,0);k=we;m=j;d=vW(f,g,e>>>1|0,0);c=d+c|0;j=we+k|0;j=c>>>0>>0?j+1|0:j;d=vW(g,p,s,o);c=d+c|0;j=we+j|0;d=vW(y,M,F,I);c=d+c|0;j=c;d=0;c=m+d|0;k=b+j|0;b=c;r=A-b|0;c=N-((A>>>0>>0)+(b>>>0>>0?k+1|0:k)|0)|0;d=s;e=o;F=w-t|0;b=x-((w>>>0>>0)+C|0)|0}if((K|0)>=16384){E=E|2147418112;b=0;c=0;break b}l=K+16383|0;if((K|0)<=-16383){e:{if(l){break e}l=i;o=F;m=b<<1|o>>>31;j=o<<1;g=(g|0)==(m|0)&j>>>0>f>>>0|m>>>0>g>>>0;j=e&65535;f=r;m=c<<1|f>>>31;c=f<<1|b>>>31;e=c;b=(e|0)==(O|0)&(m|0)==(H|0)?g:(H|0)==(m|0)&e>>>0>O>>>0|m>>>0>H>>>0;c=b+h|0;if(c>>>0>>0){l=l+1|0}b=c;e=b;c=l;e=d+((i|0)==(l|0)&e>>>0>>0|l>>>0>>0)|0;if(e>>>0>>0){j=j+1|0}d=j;if(!(j&65536)){break e}J=e|J;E=d|E;break b}b=0;c=0;break b}k=i;e=e&65535;o=F;j=b<<1|o>>>31;o=o<<1;g=(g|0)==(j|0)&o>>>0>=f>>>0|j>>>0>g>>>0;f=r;j=c<<1|f>>>31;c=f<<1|b>>>31;b=(c|0)==(O|0)&(j|0)==(H|0)?g:(H|0)==(j|0)&c>>>0>=O>>>0|j>>>0>H>>>0;c=b+h|0;if(c>>>0>>0){k=k+1|0}b=c;c=k;f=d;d=((i|0)==(k|0)&b>>>0>>0|k>>>0>>0)+d|0;k=l<<16|e;J=d|J;E=E|(d>>>0>>0?k+1|0:k)}q[a>>2]=b;q[a+4>>2]=c;q[a+8>>2]=J;q[a+12>>2]=E;ue=n+192|0;return}q[a>>2]=0;q[a+4>>2]=0;b=(d|f)!=0|(e|g)!=0;q[a+8>>2]=b?J:0;q[a+12>>2]=b?E:2147450880;ue=n+192|0}function Az(a,b,c,d){var g=0,h=0,i=x(0),l=0,m=0,p=0,s=0,t=x(0),v=0,y=0,z=x(0),C=0,D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0);g=ue-192|0;ue=g;l=q[a+16>>2];if(l){s=q[a+36>>2];q[l>>2]=q[c+80>>2];h=q[c+84>>2];q[l+8>>2]=0;q[l+4>>2]=h;q[l+12>>2]=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);h=l+s|0;q[h>>2]=q[c+96>>2];m=q[c+100>>2];q[h+8>>2]=0;q[h+4>>2]=m;q[h+12>>2]=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);m=l+(s<<1)|0;q[m>>2]=q[c+112>>2];p=q[c+116>>2];q[m+8>>2]=0;q[m+4>>2]=p;q[m+12>>2]=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);p=l+w(s,3)|0;q[p>>2]=q[c+128>>2];v=q[c+132>>2];q[p+8>>2]=0;q[p+4>>2]=v;v=c- -64|0;q[p+12>>2]=r[v|0]|r[v+1|0]<<8|(r[v+2|0]<<16|r[v+3|0]<<24);q[l+24>>2]=q[c+144>>2];v=c+148|0;C=c+156|0;u[l+28>>2]=u[v>>2]+u[C>>2];y=c+152|0;u[h+24>>2]=u[c+144>>2]+u[y>>2];u[h+28>>2]=u[v>>2]+u[C>>2];q[m+24>>2]=q[c+144>>2];q[m+28>>2]=q[v>>2];u[p+24>>2]=u[c+144>>2]+u[y>>2];q[p+28>>2]=q[v>>2];v=q[a+36>>2];q[l+32>>2]=0;q[l+36>>2]=1065353216;C=l+v|0;q[C+32>>2]=1065353216;q[C+36>>2]=1065353216;C=l+(v<<1)|0;q[C+32>>2]=0;q[C+36>>2]=0;v=l+w(v,3)|0;q[v+32>>2]=1065353216;q[v+36>>2]=0;v=q[b+12>>2];a:{if(v>>>0>3){break a}if(v-2){s=q[1831];q[g+184>>2]=q[1830];q[g+188>>2]=s;s=q[1829];q[g+176>>2]=q[1828];q[g+180>>2]=s;s=q[1827];q[g+168>>2]=q[1826];q[g+172>>2]=s;s=q[1825];q[g+160>>2]=q[1824];q[g+164>>2]=s;s=q[1823];q[g+152>>2]=q[1822];q[g+156>>2]=s;s=q[1821];q[g+144>>2]=q[1820];q[g+148>>2]=s;b:{if(r[b+36|0]){s=q[c+44>>2];q[g+88>>2]=q[c+40>>2];q[g+92>>2]=s;s=q[c+36>>2];q[g+80>>2]=q[c+32>>2];q[g+84>>2]=s;s=q[c+28>>2];q[g+72>>2]=q[c+24>>2];q[g+76>>2]=s;v=q[c+20>>2];s=g- -64|0;q[s>>2]=q[c+16>>2];q[s+4>>2]=v;s=q[c+4>>2];q[g+48>>2]=q[c>>2];q[g+52>>2]=s;s=q[c+12>>2];q[g+56>>2]=q[c+8>>2];q[g+60>>2]=s;vu(g+48|0,d,u[c+248>>2]);d=q[b+12>>2];s=q[a+8>>2];n[q[q[s>>2]+88>>2]](g+16|0,s);ru(d,g+144|0,g+128|0,g+112|0,g+96|0,g+48|0,nt(g+32|0,g+16|0));d=a+8|0;break b}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+32|0,d);ru(v,g+144|0,g+128|0,g+112|0,g+96|0,c,nt(g+48|0,g+32|0));d=a+8|0}u[l>>2]=u[l>>2]*u[g+128>>2];u[l+4>>2]=u[l+4>>2]*u[g+132>>2];u[h>>2]=u[h>>2]*u[g+128>>2];u[h+4>>2]=u[h+4>>2]*u[g+132>>2];u[m>>2]=u[m>>2]*u[g+128>>2];u[m+4>>2]=u[m+4>>2]*u[g+132>>2];u[p>>2]=u[p>>2]*u[g+128>>2];u[p+4>>2]=u[p+4>>2]*u[g+132>>2];s=q[d>>2];n[q[q[s>>2]+88>>2]](g+16|0,s);nt(g+48|0,g+16|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](g,d);uu(g+144|0,nt(g+32|0,g),g+128|0,q[b+28>>2],r[b+16|0]);i=u[g+184>>2];D=u[g+188>>2];z=u[g+180>>2];t=u[g+152>>2];F=u[g+156>>2];G=u[g+144>>2];K=u[g+148>>2];O=u[g+176>>2];L=u[g+168>>2];H=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());M=u[g+164>>2];I=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());N=u[g+172>>2];P=u[g+160>>2];J=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[l+4|0]=d;o[l+5|0]=d>>>8;o[l+6|0]=d>>>16;o[l+7|0]=d>>>24;d=(k(x(x(i*H)+x(x(z*I)+x(D+x(O*J))))),e(0));o[l+8|0]=d;o[l+9|0]=d>>>8;o[l+10|0]=d>>>16;o[l+11|0]=d>>>24;d=(k(x(x(t*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[l|0]=d;o[l+1|0]=d>>>8;o[l+2|0]=d>>>16;o[l+3|0]=d>>>24;H=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());I=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());J=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[h+4|0]=d;o[h+5|0]=d>>>8;o[h+6|0]=d>>>16;o[h+7|0]=d>>>24;d=(k(x(x(i*H)+x(x(z*I)+x(D+x(O*J))))),e(0));o[h+8|0]=d;o[h+9|0]=d>>>8;o[h+10|0]=d>>>16;o[h+11|0]=d>>>24;d=(k(x(x(t*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[h|0]=d;o[h+1|0]=d>>>8;o[h+2|0]=d>>>16;o[h+3|0]=d>>>24;H=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());I=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());J=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());d=(k(x(x(L*H)+x(x(M*I)+x(N+x(P*J))))),e(0));o[m+4|0]=d;o[m+5|0]=d>>>8;o[m+6|0]=d>>>16;o[m+7|0]=d>>>24;d=(k(x(x(i*H)+x(x(z*I)+x(D+x(O*J))))),e(0));o[m+8|0]=d;o[m+9|0]=d>>>8;o[m+10|0]=d>>>16;o[m+11|0]=d>>>24;d=(k(x(x(t*H)+x(x(K*I)+x(F+x(G*J))))),e(0));o[m|0]=d;o[m+1|0]=d>>>8;o[m+2|0]=d>>>16;o[m+3|0]=d>>>24;H=L;L=(f(0,r[p+8|0]|r[p+9|0]<<8|(r[p+10|0]<<16|r[p+11|0]<<24)),j());I=M;M=(f(0,r[p+4|0]|r[p+5|0]<<8|(r[p+6|0]<<16|r[p+7|0]<<24)),j());J=N;N=(f(0,r[p|0]|r[p+1|0]<<8|(r[p+2|0]<<16|r[p+3|0]<<24)),j());d=(k(x(x(H*L)+x(x(I*M)+x(J+x(P*N))))),e(0));o[p+4|0]=d;o[p+5|0]=d>>>8;o[p+6|0]=d>>>16;o[p+7|0]=d>>>24;d=(k(x(x(i*L)+x(x(z*M)+x(D+x(O*N))))),e(0));o[p+8|0]=d;o[p+9|0]=d>>>8;o[p+10|0]=d>>>16;o[p+11|0]=d>>>24;d=(k(x(x(t*L)+x(x(K*M)+x(F+x(G*N))))),e(0));o[p|0]=d;o[p+1|0]=d>>>8;o[p+2|0]=d>>>16;o[p+3|0]=d>>>24;if(!r[b+16|0]){q[g+108>>2]=1065353216;q[g+124>>2]=1065353216;u[g+104>>2]=-u[g+104>>2];u[g+100>>2]=-u[g+100>>2];u[g+96>>2]=-u[g+96>>2];u[g+112>>2]=-u[g+112>>2];u[g+116>>2]=-u[g+116>>2];u[g+120>>2]=-u[g+120>>2]}m=q[a+36>>2];d=0;while(1){i=x(B(x(A(x(x(x(x(u[g+100>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));c:{if(i=x(0)){b=~~i>>>0;break c}b=0}p=b<<8;b=l+w(d,m)|0;h=b;i=x(B(x(A(x(x(x(x(u[g+96>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));d:{if(i=x(0)){y=~~i>>>0;break d}y=0}y=y|p;i=x(B(x(A(x(x(x(x(u[g+104>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));e:{if(i=x(0)){C=~~i>>>0;break e}C=0}q[h+16>>2]=y|C<<16|-16777216;i=x(B(x(A(x(x(x(x(u[g+116>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));f:{if(i=x(0)){h=~~i>>>0;break f}h=0}h=h<<8;i=x(B(x(A(x(x(x(x(u[g+112>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));g:{if(i=x(0)){y=~~i>>>0;break g}y=0}h=h|y;i=x(B(x(A(x(x(x(x(u[g+120>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));h:{if(i=x(0)){y=~~i>>>0;break h}y=0}q[b+20>>2]=h|y<<16|-16777216;d=d+1|0;if((d|0)!=4){continue}break}break a}h=q[c+44>>2];q[g+184>>2]=q[c+40>>2];q[g+188>>2]=h;h=q[c+36>>2];q[g+176>>2]=q[c+32>>2];q[g+180>>2]=h;h=q[c+28>>2];q[g+168>>2]=q[c+24>>2];q[g+172>>2]=h;h=q[c+20>>2];q[g+160>>2]=q[c+16>>2];q[g+164>>2]=h;h=q[c+4>>2];q[g+144>>2]=q[c>>2];q[g+148>>2]=h;h=q[c+12>>2];q[g+152>>2]=q[c+8>>2];q[g+156>>2]=h;if(r[b+36|0]){vu(g+144|0,d,u[c+248>>2])}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+112|0,d);nt(g+48|0,g+112|0);d=q[a+8>>2];n[q[q[d>>2]+92>>2]](g+96|0,d);su(g+144|0,nt(g+128|0,g+96|0),q[b+28>>2],r[b+16|0]);m=0;while(1){t=u[g+152>>2];F=u[g+156>>2];G=u[g+144>>2];K=u[g+148>>2];O=u[g+168>>2];L=u[g+172>>2];M=u[g+160>>2];N=u[g+164>>2];d=l+w(m,s)|0;i=(f(0,r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24)),j());D=(f(0,r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24)),j());z=(f(0,r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24)),j());h=(k(x(x(i*u[g+184>>2])+x(x(D*u[g+180>>2])+x(x(z*u[g+176>>2])+u[g+188>>2])))),e(0));o[d+8|0]=h;o[d+9|0]=h>>>8;o[d+10|0]=h>>>16;o[d+11|0]=h>>>24;h=(k(x(x(i*O)+x(x(D*N)+x(L+x(z*M))))),e(0));o[d+4|0]=h;o[d+5|0]=h>>>8;o[d+6|0]=h>>>16;o[d+7|0]=h>>>24;h=(k(x(x(i*t)+x(x(D*K)+x(F+x(z*G))))),e(0));o[d|0]=h;o[d+1|0]=h>>>8;o[d+2|0]=h>>>16;o[d+3|0]=h>>>24;t=u[g+152>>2];z=u[g+168>>2];D=u[g+184>>2];i=x(x(1)/x(E(x(x(x(t*t)+x(z*z))+x(D*D)))));D=x(D*i);z=x(z*i);i=x(t*i);K=u[g+144>>2];G=u[g+160>>2];F=u[g+176>>2];t=x(x(1)/x(E(x(x(x(K*K)+x(G*G))+x(F*F)))));F=x(F*t);G=x(G*t);t=x(K*t);h=q[a+36>>2];if(!r[b+16|0]){D=x(-D);z=x(-z);F=x(-F);G=x(-G);t=x(-t);i=x(-i)}h=l+w(h,m)|0;y=h;t=x(B(x(A(x(x(x(x(t+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));i:{if(t=x(0)){d=~~t>>>0;break i}d=0}t=x(B(x(A(x(x(x(x(G+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(t=x(0)){C=~~t>>>0;break j}C=0}d=d|C<<8;t=x(B(x(A(x(x(x(x(F+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(t=x(0)){C=~~t>>>0;break k}C=0}q[y+20>>2]=d|C<<16|-16777216;i=x(B(x(A(x(x(x(x(i+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(i=x(0)){d=~~i>>>0;break l}d=0}z=x(B(x(A(x(x(x(x(z+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(z=x(0)){y=~~z>>>0;break m}y=0}d=d|y<<8;i=x(B(x(A(x(x(x(x(D+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(i=x(0)){y=~~i>>>0;break n}y=0}q[h+16>>2]=d|y<<16|-16777216;m=m+1|0;if((m|0)!=4){continue}break}}h=q[a+44>>2];if((h|0)>=1){d=q[a+36>>2];b=c+252|0;h=kV(q[a+16>>2]+40|0,b,h<<2);kV(d+h|0,b,q[a+44>>2]<<2);kV(h+(d<<1)|0,b,q[a+44>>2]<<2);kV(h+w(d,3)|0,b,q[a+44>>2]<<2)}h=q[a+48>>2];if((h|0)>=1){d=q[a+36>>2];b=c+268|0;c=kV((q[a+16>>2]+(q[a+44>>2]<<2)|0)+40|0,b,h<<2);kV(d+c|0,b,q[a+48>>2]<<2);kV(c+(d<<1)|0,b,q[a+48>>2]<<2);kV(c+w(d,3)|0,b,q[a+48>>2]<<2)}q[a+12>>2]=q[a+12>>2]+1;q[a+16>>2]=q[a+16>>2]+(q[a+36>>2]<<2)}ue=g+192|0}function rx(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,p=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;l=ue-272|0;ue=l;a:{if(q[a+192>>2]==q[a+188>>2]){break a}m=q[i+20>>2];if((m|0)<0){break a}b:{if(r[i+65|0]){s=q[i+4>>2];n[q[q[s>>2]+128>>2]](l+160|0,s,m);break b}s=q[i+4>>2];n[q[q[s>>2]+92>>2]](l+160|0,s,m)}v=q[l+160>>2];if(!v){break a}z=a+364|0;c:{d:{if(!(!r[a+477|0]|j)){m=n[q[q[b>>2]+136>>2]](b)|0;if(m){if(!n[q[q[m>>2]+8>>2]](m,b)){break c}}s=q[z>>2];if(!q[n[q[q[b>>2]+196>>2]](b)>>2]){break c}p=n[q[q[b>>2]+196>>2]](b)|0;m=((q[a+480>>2]<<2)+a|0)+380|0;t=q[p>>2];if(t){n[q[q[t>>2]>>2]](t)|0}t=(s|0)==5;A=(s|0)==2;s=q[m>>2];if(s){n[q[q[s>>2]+8>>2]](s)|0;q[m>>2]=0}q[m>>2]=q[p>>2];s=t|A;break d}m=q[z>>2];s=(m|0)==2|(m|0)==5}q[l+264>>2]=0;q[l+252>>2]=0;q[l+256>>2]=0;q[l+260>>2]=0;q[l+244>>2]=0;q[l+248>>2]=0;q[l+240>>2]=1065353216;Jv(q[b+4>>2],l+264|0,l+240|0);if(r[a+476|0]){e:{f:{g:{m=q[l+264>>2];if(m){p=q[i+40>>2];if(u[p+180>>2]!=x(0)|u[p+184>>2]!=x(0)|(q[z>>2]==6|u[p+188>>2]!=x(0))){break g}}Hv(l+160|0,q[b+4>>2],0);m=q[l+160>>2];q[l+160>>2]=0;p=q[l+264>>2];h:{if(!p){q[l+264>>2]=m;break h}n[q[q[p>>2]+8>>2]](p)|0;q[l+264>>2]=m;p=q[l+160>>2];if(!p){break h}n[q[q[p>>2]+8>>2]](p)|0;q[l+160>>2]=0;m=q[l+264>>2]}p=((q[a+484>>2]<<2)+a|0)+380|0;if(!m){break e}break f}p=((q[a+484>>2]<<2)+a|0)+380|0}n[q[q[m>>2]>>2]](m)|0}m=q[p>>2];if(m){n[q[q[m>>2]+8>>2]](m)|0;q[p>>2]=0}q[p>>2]=q[l+264>>2]}m=q[z>>2];i:{j:{k:{l:{t=q[q[i+40>>2]+40>>2];m:{n:{if(!t){break n}p=6;if((m|0)!=6){break n}m=q[t>>2];if((m|0)<0){break m}p=q[i+4>>2];n[q[q[p>>2]+104>>2]](l+160|0,p,m);m=q[l+160>>2];if(m){break l}m=q[z>>2]}if(m+ -3>>>0<=2){break k}p=m}e=0;if(s){break i}h=(p|0)==1?f:g;break j}n[q[q[m>>2]+8>>2]](m)|0;c=q[i+4>>2];n[q[q[c>>2]+104>>2]](l+160|0,c,q[t>>2]);y=q[l+160>>2];if(!(j|(!y|!r[y+25|0]))){h=q[y+80>>2];e=1;break i}h=q[y+72>>2];break j}h=e;e=0;if(s){break i}h=(m|0)==4?c:d}e=0}if(h){c=Eu(q[b+80>>2]);d=r[i+8|0]|r[c|0]&-2;o[c|0]=d;o[c|0]=d&253|r[i+9|0]<<1;q[c+4>>2]=q[q[i+40>>2]+44>>2];q[c+8>>2]=q[i+16>>2];n[q[q[b>>2]+228>>2]](l+160|0,b);f=q[l+160>>2];d=q[l+164>>2];o:{if(!d){break o}g=q[d+4>>2];q[d+4>>2]=g+ -1;if(g){break o}n[q[q[d>>2]+8>>2]](d);WS(d)}p:{if(f){n[q[q[b>>2]+228>>2]](l+160|0,b);q[c+4>>2]=q[q[l+160>>2]+8>>2];d=q[l+164>>2];if(!d){break p}f=q[d+4>>2];q[d+4>>2]=f+ -1;if(f){break p}n[q[q[d>>2]+8>>2]](d);WS(d);break p}if((n[q[q[b>>2]+160>>2]](b)|0)!=1){break p}q[c+4>>2]=0}if(e){q[c+4>>2]=1}Sy(b,h);e=0;d=q[a+376>>2];if((d|0)>0){while(1){f=e<<2;g=f+c|0;f=a+f|0;q[g+12>>2]=q[f+412>>2];q[g+44>>2]=q[f+444>>2];e=e+1|0;if((d|0)!=(e|0)){continue}break}}Wy(b,h,a+380|0,d);c=q[b+80>>2];n[q[q[c>>2]+8>>2]](c,s);f=n[q[q[h>>2]+28>>2]](h)|0;q[l+236>>2]=0;q[l+232>>2]=0;q:{if(!(!y|!t)){q[l+224>>2]=0;n[q[q[y>>2]>>2]](y)|0;c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}q[l+224>>2]=y;Ox(a,b,h,l+224|0,t,i,j,l+236|0,l+232|0);c=q[l+224>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[l+224>>2]=0}n[q[q[b>>2]+84>>2]](l+160|0,b);c=q[l+220>>2];d=q[l+216>>2];o[f+56|0]=d;o[f+57|0]=d>>>8;o[f+58|0]=d>>>16;o[f+59|0]=d>>>24;o[f+60|0]=c;o[f+61|0]=c>>>8;o[f+62|0]=c>>>16;o[f+63|0]=c>>>24;c=q[l+212>>2];d=q[l+208>>2];o[f+48|0]=d;o[f+49|0]=d>>>8;o[f+50|0]=d>>>16;o[f+51|0]=d>>>24;o[f+52|0]=c;o[f+53|0]=c>>>8;o[f+54|0]=c>>>16;o[f+55|0]=c>>>24;c=q[l+204>>2];d=q[l+200>>2];o[f+40|0]=d;o[f+41|0]=d>>>8;o[f+42|0]=d>>>16;o[f+43|0]=d>>>24;o[f+44|0]=c;o[f+45|0]=c>>>8;o[f+46|0]=c>>>16;o[f+47|0]=c>>>24;c=q[l+196>>2];d=q[l+192>>2];o[f+32|0]=d;o[f+33|0]=d>>>8;o[f+34|0]=d>>>16;o[f+35|0]=d>>>24;o[f+36|0]=c;o[f+37|0]=c>>>8;o[f+38|0]=c>>>16;o[f+39|0]=c>>>24;c=q[l+188>>2];d=q[l+184>>2];o[f+24|0]=d;o[f+25|0]=d>>>8;o[f+26|0]=d>>>16;o[f+27|0]=d>>>24;o[f+28|0]=c;o[f+29|0]=c>>>8;o[f+30|0]=c>>>16;o[f+31|0]=c>>>24;c=q[l+180>>2];d=q[l+176>>2];o[f+16|0]=d;o[f+17|0]=d>>>8;o[f+18|0]=d>>>16;o[f+19|0]=d>>>24;o[f+20|0]=c;o[f+21|0]=c>>>8;o[f+22|0]=c>>>16;o[f+23|0]=c>>>24;c=q[l+172>>2];d=q[l+168>>2];o[f+8|0]=d;o[f+9|0]=d>>>8;o[f+10|0]=d>>>16;o[f+11|0]=d>>>24;o[f+12|0]=c;o[f+13|0]=c>>>8;o[f+14|0]=c>>>16;o[f+15|0]=c>>>24;c=q[l+164>>2];d=q[l+160>>2];o[f|0]=d;o[f+1|0]=d>>>8;o[f+2|0]=d>>>16;o[f+3|0]=d>>>24;o[f+4|0]=c;o[f+5|0]=c>>>8;o[f+6|0]=c>>>16;o[f+7|0]=c>>>24;break q}if(s){Px(b,h,i);break q}Qx(b,h,i)}c=q[b+4>>2];d=q[i+68>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[c+316>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c+316>>2]=0}q[c+316>>2]=q[i+68>>2];q[q[b+4>>2]+320>>2]=k;c=q[q[a+320>>2]>>2]%(pr(v)|0)|0;e=q[a+320>>2];d=q[a+324>>2];r:{if((e|0)==(d|0)){break r}while(1){if((c|0)!=(q[e>>2]%(pr(v)|0)|0)){break r}e=e+4|0;if((d|0)!=(e|0)){continue}break}}if(q[a+192>>2]!=q[a+188>>2]){e=f- -64|0;c=0;while(1){D=c<<2;j=q[D+q[a+320>>2]>>2]%(pr(v)|0)|0;Ly(b,kr(v,j));d=b;g=d;s:{if((n[q[q[d>>2]+160>>2]](d)|0)==1){s=6;d=mr(v,j);break s}s=3;d=lr(v,j)}My(g,d);Ny(b,h);d=q[a+188>>2]+(c<<6)|0;g=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);k=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=k;o[e+1|0]=k>>>8;o[e+2|0]=k>>>16;o[e+3|0]=k>>>24;o[e+4|0]=g;o[e+5|0]=g>>>8;o[e+6|0]=g>>>16;o[e+7|0]=g>>>24;k=r[d+60|0]|r[d+61|0]<<8|(r[d+62|0]<<16|r[d+63|0]<<24);p=e+56|0;g=p;m=r[d+56|0]|r[d+57|0]<<8|(r[d+58|0]<<16|r[d+59|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+52|0]|r[d+53|0]<<8|(r[d+54|0]<<16|r[d+55|0]<<24);z=e+48|0;g=z;m=r[d+48|0]|r[d+49|0]<<8|(r[d+50|0]<<16|r[d+51|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+44|0]|r[d+45|0]<<8|(r[d+46|0]<<16|r[d+47|0]<<24);t=e+40|0;g=t;m=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);A=e+32|0;g=A;m=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);B=e+24|0;g=B;m=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);C=e+16|0;g=C;m=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[g|0]=m;o[g+1|0]=m>>>8;o[g+2|0]=m>>>16;o[g+3|0]=m>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);m=e+8|0;g=m;d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[g|0]=d;o[g+1|0]=d>>>8;o[g+2|0]=d>>>16;o[g+3|0]=d>>>24;o[g+4|0]=k;o[g+5|0]=k>>>8;o[g+6|0]=k>>>16;o[g+7|0]=k>>>24;k=c<<4;d=k+q[a+200>>2]|0;q[f+128>>2]=q[d>>2];q[f+132>>2]=q[d+4>>2];q[f+136>>2]=q[d+8>>2];q[f+140>>2]=q[d+12>>2];d=ht(l+160|0,e);if(r[i+64|0]){n[q[q[b>>2]+76>>2]](l+32|0,b);vu(d,ht(l+96|0,l+32|0),u[q[a+296>>2]>>2])}n[q[q[b>>2]+88>>2]](l+16|0,b);nt(l+96|0,l+16|0);n[q[q[b>>2]+92>>2]](l,b);su(d,nt(l+32|0,l),q[i+36>>2],r[i+28|0]);d=q[l+164>>2];g=q[l+180>>2];E=q[l+196>>2];F=q[l+212>>2];G=q[l+168>>2];H=q[l+184>>2];I=q[l+200>>2];J=q[l+216>>2];K=q[l+172>>2];L=q[l+188>>2];M=q[l+204>>2];N=q[l+220>>2];O=q[l+160>>2];P=q[l+176>>2];Q=q[l+192>>2];R=q[l+208>>2];oo(l+96|0);q[l+108>>2]=R;q[l+104>>2]=Q;q[l+100>>2]=P;q[l+96>>2]=O;q[l+156>>2]=N;q[l+152>>2]=M;q[l+148>>2]=L;q[l+144>>2]=K;q[l+140>>2]=J;q[l+136>>2]=I;q[l+132>>2]=H;q[l+128>>2]=G;q[l+124>>2]=F;q[l+120>>2]=E;q[l+116>>2]=g;q[l+112>>2]=d;d=q[l+108>>2];q[m>>2]=q[l+104>>2];q[m+4>>2]=d;d=q[l+116>>2];q[C>>2]=q[l+112>>2];q[C+4>>2]=d;d=q[l+124>>2];q[B>>2]=q[l+120>>2];q[B+4>>2]=d;d=q[l+132>>2];q[A>>2]=q[l+128>>2];q[A+4>>2]=d;d=q[l+140>>2];q[t>>2]=q[l+136>>2];q[t+4>>2]=d;d=q[l+148>>2];q[z>>2]=q[l+144>>2];q[z+4>>2]=d;d=q[l+100>>2];q[e>>2]=q[l+96>>2];q[e+4>>2]=d;d=q[l+156>>2];q[p>>2]=q[l+152>>2];q[p+4>>2]=d;d=D+q[a+308>>2]|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[f+156>>2]=x(d>>>24>>>0)/x(255);u[f+144>>2]=x((d&255)>>>0)/x(255);u[f+152>>2]=x((d>>>16&255)>>>0)/x(255);u[f+148>>2]=x((d>>>8&255)>>>0)/x(255);d=q[l+236>>2];if(d){g=k+q[a+332>>2]|0;q[d>>2]=q[g>>2];q[d+4>>2]=q[g+4>>2];q[d+8>>2]=q[g+8>>2];q[d+12>>2]=q[g+12>>2]}d=q[l+232>>2];if(d){g=k+q[a+344>>2]|0;q[d>>2]=q[g>>2];q[d+4>>2]=q[g+4>>2];q[d+8>>2]=q[g+8>>2];q[d+12>>2]=q[g+12>>2]}n[q[q[h>>2]+36>>2]](h);Py(b,nr(v,j),w(or(v,j),s));c=c+1|0;if(c>>>0>2]-q[a+188>>2]>>6>>>0){continue}break}}Ty(b,h);Gu(q[b+80>>2])}if(y){n[q[q[y>>2]+8>>2]](y)|0}a=q[l+264>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[l+264>>2]=0}n[q[q[v>>2]+8>>2]](v)|0}ue=l+272|0}function rh(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:{if((c|0)>=15){d=q[b>>2];d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=d;f=q[b>>2]+4|0;q[b>>2]=f;o[a+158|0]=(d|0)==6;b:{if(d>>>0>7){break b}c:{switch(d-1|0){default:d:{if((c|0)>=1600){q[a+152>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);f=q[b>>2]+4|0;q[b>>2]=f;break d}q[a+152>>2]=1065353216}if(!(1<>>0>7){break b}break;case 0:case 1:case 2:case 3:case 4:break b;case 5:break c}}q[a+4>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+8>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=q[b>>2]+4|0;q[b>>2]=d;if((c|0)<1600){break a}q[a+12>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+16>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+20>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+24>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+28>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[b>>2]=q[b>>2]+4;break a}q[a+32>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);e=q[b>>2];q[b>>2]=e+4;d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[b>>2]=e+8;e=q[a+40>>2];h=a+36|0;f=q[h>>2];g=e-f>>3;e:{if(d>>>0>g>>>0){xh(h,d-g|0);f=q[a+36>>2];e=q[a+40>>2];break e}if(d>>>0>=g>>>0){break e}e=(d<<3)+f|0;q[a+40>>2]=e}f:{if((e|0)==(f|0)){d=d<<3;break f}d=d<<3;kV(f,q[b>>2],d)}e=q[b>>2]+d|0;q[b>>2]=e;d=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[b>>2]=e+4;e=q[a+52>>2];h=a+48|0;f=q[h>>2];g=e-f>>4;g:{if(d>>>0>g>>>0){yh(h,d-g|0);f=q[a+48>>2];e=q[a+52>>2];break g}if(d>>>0>=g>>>0){break g}e=(d<<4)+f|0;q[a+52>>2]=e}h:{if((e|0)==(f|0)){d=d<<4;break h}d=d<<4;kV(f,q[b>>2],d)}d=q[b>>2]+d|0;q[b>>2]=d;if((c|0)<1703){break a}e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=d+4;d=q[a- -64>>2];g=a+60|0;h=q[g>>2];f=d-h>>3;i:{if(e>>>0>f>>>0){zh(g,e-f|0);e=q[a+64>>2];break i}if(e>>>0>=f>>>0){e=d;break i}e=h+(e<<3)|0;if((e|0)!=(d|0)){while(1){f=d;d=d+ -8|0;f=q[f+ -4>>2];j:{if(!f){break j}h=q[f+4>>2];q[f+4>>2]=h+ -1;if(h){break j}n[q[q[f>>2]+8>>2]](f);WS(f)}if((d|0)!=(e|0)){continue}break}}q[a+64>>2]=e}if(q[g>>2]==(e|0)){break a}e=0;while(1){d=_S(244);q[d+4>>2]=0;q[d+8>>2]=0;q[d+36>>2]=1065353216;q[d+28>>2]=1065353216;q[d+32>>2]=1065353216;q[d+12>>2]=0;q[d+16>>2]=0;q[d>>2]=2808;q[d+48>>2]=1065353216;q[d+52>>2]=1065353216;q[d+20>>2]=0;q[d+24>>2]=1065353216;q[d+72>>2]=1065353216;q[d+76>>2]=1065353216;q[d+64>>2]=1065353216;q[d+68>>2]=1065353216;q[d+40>>2]=0;q[d+44>>2]=1065353216;q[d+84>>2]=1065353216;q[d+88>>2]=1065353216;q[d+92>>2]=1065353216;q[d+96>>2]=1065353216;q[d+56>>2]=1065353216;q[d+60>>2]=0;q[d+80>>2]=0;q[d+112>>2]=1065353216;q[d+116>>2]=1065353216;q[d+104>>2]=1065353216;q[d+108>>2]=1065353216;q[d+100>>2]=0;q[d+132>>2]=1065353216;q[d+136>>2]=1065353216;q[d+124>>2]=1065353216;q[d+128>>2]=1065353216;q[d+152>>2]=1065353216;q[d+156>>2]=1065353216;q[d+144>>2]=1065353216;q[d+148>>2]=1065353216;q[d+120>>2]=0;q[d+164>>2]=1065353216;q[d+168>>2]=1065353216;q[d+172>>2]=1065353216;q[d+176>>2]=1065353216;q[d+140>>2]=0;q[d+180>>2]=0;q[d+184>>2]=1065353216;q[d+160>>2]=0;q[d+188>>2]=0;q[d+192>>2]=1065353216;q[d+196>>2]=0;q[d+200>>2]=1065353216;q[d+204>>2]=0;q[d+208>>2]=1065353216;q[d+212>>2]=0;q[d+216>>2]=1065353216;q[d+220>>2]=0;q[d+224>>2]=1065353216;q[d+228>>2]=0;q[d+232>>2]=1065353216;q[d+236>>2]=0;q[d+240>>2]=1065353216;i=e<<3;h=i+q[g>>2]|0;q[h>>2]=d+12;f=q[h+4>>2];q[h+4>>2]=d;k:{if(!f){break k}d=q[f+4>>2];q[f+4>>2]=d+ -1;if(d){break k}n[q[q[f>>2]+8>>2]](f);WS(f)}Ds(q[i+q[a+60>>2]>>2],b);e=e+1|0;if(e>>>0>2]-q[a+60>>2]>>3>>>0){continue}break}break a}d=q[b>>2];q[a+4>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4}d=q[b>>2];q[a+72>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2];q[b>>2]=d+4;f=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+76>>2]=f;d=q[b>>2];q[b>>2]=d+4;g=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+108>>2]=g;e=q[b>>2]+4|0;q[b>>2]=e;d=a;l:{m:{n:{if((c|0)<=14){q[a+80>>2]=f;q[a+112>>2]=g;break n}q[a+80>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+112>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2]+4|0;q[b>>2]=e;if((c|0)<1600){break n}q[a+84>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+116>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+88>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+120>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+92>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+124>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+96>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+128>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+100>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+132>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2]+4|0;q[b>>2]=e;g=1;break m}q[a+116>>2]=g;q[a+84>>2]=f;q[a+120>>2]=g;q[a+88>>2]=f;q[a+124>>2]=g;q[a+92>>2]=f;q[a+128>>2]=g;q[a+96>>2]=f;q[a+132>>2]=g;q[a+100>>2]=f;g=0;h=1;f=0;if((c|0)<5){break l}}h=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[b>>2]=e+4;f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[b>>2]=e+8;h=(h|0)!=0;f=(f|0)!=0}o[d+157|0]=h;o[a+156|0]=f;d=q[b>>2];e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+456>>2]=e;d=q[b>>2]+4|0;q[b>>2]=d;if(e){e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+460|0]=f;o[a+461|0]=f>>>8;o[a+462|0]=f>>>16;o[a+463|0]=f>>>24;o[a+464|0]=e;o[a+465|0]=e>>>8;o[a+466|0]=e>>>16;o[a+467|0]=e>>>24;e=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+468|0]=d;o[a+469|0]=d>>>8;o[a+470|0]=d>>>16;o[a+471|0]=d>>>24;o[a+472|0]=e;o[a+473|0]=e>>>8;o[a+474|0]=e>>>16;o[a+475|0]=e>>>24;d=q[b>>2]+16|0;q[b>>2]=d}e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+476>>2]=e;d=q[b>>2]+4|0;q[b>>2]=d;if(e){e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+480|0]=f;o[a+481|0]=f>>>8;o[a+482|0]=f>>>16;o[a+483|0]=f>>>24;o[a+484|0]=e;o[a+485|0]=e>>>8;o[a+486|0]=e>>>16;o[a+487|0]=e>>>24;e=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+488|0]=d;o[a+489|0]=d>>>8;o[a+490|0]=d>>>16;o[a+491|0]=d>>>24;o[a+492|0]=e;o[a+493|0]=e>>>8;o[a+494|0]=e>>>16;o[a+495|0]=e>>>24;q[b>>2]=q[b>>2]+16}Ah(a+496|0,b,c,0);if(g){Ah(a+548|0,b,c,1);Ah(a+600|0,b,c,2);d=q[b>>2];q[a+140>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4;Ah(a+652|0,b,c,3);d=q[b>>2];q[a+144>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4;Ah(a+704|0,b,c,4);Ah(a+756|0,b,c,5);d=q[b>>2];q[a+148>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4}o:{p:{q:{if((c|0)<=9){q[a+164>>2]=0;if((c|0)!=9){break o}d=q[b>>2];break q}d=q[b>>2];q[a+164>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2]+4|0;q[b>>2]=d;if((c|0)>14){break p}}e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=d+4|0;q[b>>2]=d;o[a+158|0]=(e|0)>0;if((e|0)>=1){q[a>>2]=6}}q[a+160>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4}d=a+108|0;e=a+76|0;if((c|0)>=15){Bh(a+360|0,b,c);Bh(a+408|0,b,c)}q[a+212>>2]=q[a+72>>2];b=q[e+28>>2];q[a+240>>2]=q[e+24>>2];q[a+244>>2]=b;b=q[e+20>>2];q[a+232>>2]=q[e+16>>2];q[a+236>>2]=b;b=q[e+12>>2];q[a+224>>2]=q[e+8>>2];q[a+228>>2]=b;b=q[e+4>>2];q[a+216>>2]=q[e>>2];q[a+220>>2]=b;b=q[d+28>>2];q[a+272>>2]=q[d+24>>2];q[a+276>>2]=b;b=q[d+20>>2];q[a+264>>2]=q[d+16>>2];q[a+268>>2]=b;b=q[d+12>>2];q[a+256>>2]=q[d+8>>2];q[a+260>>2]=b;b=q[d+4>>2];q[a+248>>2]=q[d>>2];q[a+252>>2]=b;q[a+204>>2]=q[a+160>>2];b=q[a>>2];q[a+168>>2]=b;q[a+172>>2]=q[a+4>>2];q[a+176>>2]=q[a+8>>2];q[a+180>>2]=q[a+12>>2];q[a+184>>2]=q[a+16>>2];q[a+188>>2]=q[a+20>>2];q[a+192>>2]=q[a+24>>2];q[a+196>>2]=q[a+28>>2];q[a+316>>2]=q[a+140>>2];q[a+320>>2]=q[a+144>>2];q[a+324>>2]=q[a+148>>2];if(q[a+496>>2]==2){c=q[a+504>>2];q[a+308>>2]=q[a+500>>2];q[a+312>>2]=c;c=q[a+512>>2];q[a+300>>2]=q[a+508>>2];q[a+304>>2]=c;c=q[a+524>>2];q[a+292>>2]=q[a+520>>2];q[a+296>>2]=c;c=q[a+540>>2];q[a+288>>2]=c;q[a+284>>2]=q[a+528>>2];o[a+280|0]=(c|0)!=0}q[a+328>>2]=q[a+152>>2];r:{s:{if((b|0)==128){q[a+208>>2]=a+32;break s}q[a+208>>2]=0;if((b|0)==7){break r}}q[a+252>>2]=1;q[a+220>>2]=0}}function Dz(a,b,c,d){var g=0,h=0,i=x(0),l=0,m=0,p=0,s=0,t=x(0),v=0,y=x(0),z=0,C=x(0),D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=0,K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0);g=ue-192|0;ue=g;m=q[a+16>>2];if(m){s=q[a+36>>2];q[m>>2]=q[c+80>>2];h=q[c+84>>2];q[m+8>>2]=0;q[m+4>>2]=h;q[m+12>>2]=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);h=m+s|0;q[h>>2]=q[c+96>>2];l=q[c+100>>2];q[h+8>>2]=0;q[h+4>>2]=l;q[h+12>>2]=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);l=m+(s<<1)|0;q[l>>2]=q[c+112>>2];p=q[c+116>>2];q[l+8>>2]=0;q[l+4>>2]=p;q[l+12>>2]=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);p=m+w(s,3)|0;q[p>>2]=q[c+128>>2];z=q[c+132>>2];q[p+8>>2]=0;q[p+4>>2]=z;z=c- -64|0;q[p+12>>2]=r[z|0]|r[z+1|0]<<8|(r[z+2|0]<<16|r[z+3|0]<<24);q[m+24>>2]=q[c+144>>2];z=c+148|0;J=c+156|0;u[m+28>>2]=u[z>>2]+u[J>>2];v=c+152|0;u[h+24>>2]=u[c+144>>2]+u[v>>2];u[h+28>>2]=u[z>>2]+u[J>>2];q[l+24>>2]=q[c+144>>2];q[l+28>>2]=q[z>>2];u[p+24>>2]=u[c+144>>2]+u[v>>2];q[p+28>>2]=q[z>>2];z=q[b+12>>2];a:{if(z>>>0>3){break a}if(z-2){s=q[1831];q[g+184>>2]=q[1830];q[g+188>>2]=s;s=q[1829];q[g+176>>2]=q[1828];q[g+180>>2]=s;s=q[1827];q[g+168>>2]=q[1826];q[g+172>>2]=s;s=q[1825];q[g+160>>2]=q[1824];q[g+164>>2]=s;s=q[1823];q[g+152>>2]=q[1822];q[g+156>>2]=s;s=q[1821];q[g+144>>2]=q[1820];q[g+148>>2]=s;b:{if(r[b+36|0]){s=q[c+44>>2];q[g+88>>2]=q[c+40>>2];q[g+92>>2]=s;s=q[c+36>>2];q[g+80>>2]=q[c+32>>2];q[g+84>>2]=s;s=q[c+28>>2];q[g+72>>2]=q[c+24>>2];q[g+76>>2]=s;z=q[c+20>>2];s=g- -64|0;q[s>>2]=q[c+16>>2];q[s+4>>2]=z;s=q[c+4>>2];q[g+48>>2]=q[c>>2];q[g+52>>2]=s;s=q[c+12>>2];q[g+56>>2]=q[c+8>>2];q[g+60>>2]=s;vu(g+48|0,d,u[c+248>>2]);d=q[b+12>>2];s=q[a+8>>2];n[q[q[s>>2]+88>>2]](g+16|0,s);ru(d,g+144|0,g+128|0,g+112|0,g+96|0,g+48|0,nt(g+32|0,g+16|0));d=a+8|0;break b}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+32|0,d);ru(z,g+144|0,g+128|0,g+112|0,g+96|0,c,nt(g+48|0,g+32|0));d=a+8|0}u[m>>2]=u[m>>2]*u[g+128>>2];u[m+4>>2]=u[m+4>>2]*u[g+132>>2];u[h>>2]=u[h>>2]*u[g+128>>2];u[h+4>>2]=u[h+4>>2]*u[g+132>>2];u[l>>2]=u[l>>2]*u[g+128>>2];u[l+4>>2]=u[l+4>>2]*u[g+132>>2];u[p>>2]=u[p>>2]*u[g+128>>2];u[p+4>>2]=u[p+4>>2]*u[g+132>>2];s=q[d>>2];n[q[q[s>>2]+88>>2]](g+16|0,s);nt(g+48|0,g+16|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](g,d);uu(g+144|0,nt(g+32|0,g),g+128|0,q[b+28>>2],r[b+16|0]);i=u[g+184>>2];C=u[g+188>>2];y=u[g+180>>2];t=u[g+152>>2];D=u[g+156>>2];F=u[g+144>>2];K=u[g+148>>2];O=u[g+176>>2];L=u[g+168>>2];G=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());M=u[g+164>>2];H=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());N=u[g+172>>2];P=u[g+160>>2];I=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());d=(k(x(x(L*G)+x(x(M*H)+x(N+x(P*I))))),e(0));o[m+4|0]=d;o[m+5|0]=d>>>8;o[m+6|0]=d>>>16;o[m+7|0]=d>>>24;d=(k(x(x(i*G)+x(x(y*H)+x(C+x(O*I))))),e(0));o[m+8|0]=d;o[m+9|0]=d>>>8;o[m+10|0]=d>>>16;o[m+11|0]=d>>>24;d=(k(x(x(t*G)+x(x(K*H)+x(D+x(F*I))))),e(0));o[m|0]=d;o[m+1|0]=d>>>8;o[m+2|0]=d>>>16;o[m+3|0]=d>>>24;G=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());H=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());I=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());d=(k(x(x(L*G)+x(x(M*H)+x(N+x(P*I))))),e(0));o[h+4|0]=d;o[h+5|0]=d>>>8;o[h+6|0]=d>>>16;o[h+7|0]=d>>>24;d=(k(x(x(i*G)+x(x(y*H)+x(C+x(O*I))))),e(0));o[h+8|0]=d;o[h+9|0]=d>>>8;o[h+10|0]=d>>>16;o[h+11|0]=d>>>24;d=(k(x(x(t*G)+x(x(K*H)+x(D+x(F*I))))),e(0));o[h|0]=d;o[h+1|0]=d>>>8;o[h+2|0]=d>>>16;o[h+3|0]=d>>>24;G=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());H=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());I=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());d=(k(x(x(L*G)+x(x(M*H)+x(N+x(P*I))))),e(0));o[l+4|0]=d;o[l+5|0]=d>>>8;o[l+6|0]=d>>>16;o[l+7|0]=d>>>24;d=(k(x(x(i*G)+x(x(y*H)+x(C+x(O*I))))),e(0));o[l+8|0]=d;o[l+9|0]=d>>>8;o[l+10|0]=d>>>16;o[l+11|0]=d>>>24;d=(k(x(x(t*G)+x(x(K*H)+x(D+x(F*I))))),e(0));o[l|0]=d;o[l+1|0]=d>>>8;o[l+2|0]=d>>>16;o[l+3|0]=d>>>24;G=L;L=(f(0,r[p+8|0]|r[p+9|0]<<8|(r[p+10|0]<<16|r[p+11|0]<<24)),j());H=M;M=(f(0,r[p+4|0]|r[p+5|0]<<8|(r[p+6|0]<<16|r[p+7|0]<<24)),j());I=N;N=(f(0,r[p|0]|r[p+1|0]<<8|(r[p+2|0]<<16|r[p+3|0]<<24)),j());d=(k(x(x(G*L)+x(x(H*M)+x(I+x(P*N))))),e(0));o[p+4|0]=d;o[p+5|0]=d>>>8;o[p+6|0]=d>>>16;o[p+7|0]=d>>>24;d=(k(x(x(i*L)+x(x(y*M)+x(C+x(O*N))))),e(0));o[p+8|0]=d;o[p+9|0]=d>>>8;o[p+10|0]=d>>>16;o[p+11|0]=d>>>24;d=(k(x(x(t*L)+x(x(K*M)+x(D+x(F*N))))),e(0));o[p|0]=d;o[p+1|0]=d>>>8;o[p+2|0]=d>>>16;o[p+3|0]=d>>>24;if(!r[b+16|0]){q[g+108>>2]=1065353216;q[g+124>>2]=1065353216;u[g+104>>2]=-u[g+104>>2];u[g+100>>2]=-u[g+100>>2];u[g+96>>2]=-u[g+96>>2];u[g+112>>2]=-u[g+112>>2];u[g+116>>2]=-u[g+116>>2];u[g+120>>2]=-u[g+120>>2]}l=q[a+36>>2];d=0;while(1){i=x(B(x(A(x(x(x(x(u[g+100>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));c:{if(i=x(0)){b=~~i>>>0;break c}b=0}p=b<<8;b=m+w(d,l)|0;h=b;i=x(B(x(A(x(x(x(x(u[g+96>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));d:{if(i=x(0)){v=~~i>>>0;break d}v=0}v=v|p;i=x(B(x(A(x(x(x(x(u[g+104>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));e:{if(i=x(0)){J=~~i>>>0;break e}J=0}q[h+16>>2]=v|J<<16|-16777216;i=x(B(x(A(x(x(x(x(u[g+116>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));f:{if(i=x(0)){h=~~i>>>0;break f}h=0}h=h<<8;i=x(B(x(A(x(x(x(x(u[g+112>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));g:{if(i=x(0)){v=~~i>>>0;break g}v=0}h=h|v;i=x(B(x(A(x(x(x(x(u[g+120>>2]+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));h:{if(i=x(0)){v=~~i>>>0;break h}v=0}q[b+20>>2]=h|v<<16|-16777216;d=d+1|0;if((d|0)!=4){continue}break}break a}h=q[c+44>>2];q[g+184>>2]=q[c+40>>2];q[g+188>>2]=h;h=q[c+36>>2];q[g+176>>2]=q[c+32>>2];q[g+180>>2]=h;h=q[c+28>>2];q[g+168>>2]=q[c+24>>2];q[g+172>>2]=h;h=q[c+20>>2];q[g+160>>2]=q[c+16>>2];q[g+164>>2]=h;h=q[c+4>>2];q[g+144>>2]=q[c>>2];q[g+148>>2]=h;h=q[c+12>>2];q[g+152>>2]=q[c+8>>2];q[g+156>>2]=h;if(r[b+36|0]){vu(g+144|0,d,u[c+248>>2])}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+112|0,d);nt(g+48|0,g+112|0);d=q[a+8>>2];n[q[q[d>>2]+92>>2]](g+96|0,d);su(g+144|0,nt(g+128|0,g+96|0),q[b+28>>2],r[b+16|0]);l=0;while(1){t=u[g+152>>2];D=u[g+156>>2];F=u[g+144>>2];K=u[g+148>>2];O=u[g+168>>2];L=u[g+172>>2];M=u[g+160>>2];N=u[g+164>>2];d=m+w(l,s)|0;i=(f(0,r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24)),j());C=(f(0,r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24)),j());y=(f(0,r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24)),j());h=(k(x(x(i*u[g+184>>2])+x(x(C*u[g+180>>2])+x(x(y*u[g+176>>2])+u[g+188>>2])))),e(0));o[d+8|0]=h;o[d+9|0]=h>>>8;o[d+10|0]=h>>>16;o[d+11|0]=h>>>24;h=(k(x(x(i*O)+x(x(C*N)+x(L+x(y*M))))),e(0));o[d+4|0]=h;o[d+5|0]=h>>>8;o[d+6|0]=h>>>16;o[d+7|0]=h>>>24;h=(k(x(x(i*t)+x(x(C*K)+x(D+x(y*F))))),e(0));o[d|0]=h;o[d+1|0]=h>>>8;o[d+2|0]=h>>>16;o[d+3|0]=h>>>24;t=u[g+152>>2];y=u[g+168>>2];C=u[g+184>>2];i=x(x(1)/x(E(x(x(x(t*t)+x(y*y))+x(C*C)))));C=x(C*i);y=x(y*i);i=x(t*i);K=u[g+144>>2];F=u[g+160>>2];D=u[g+176>>2];t=x(x(1)/x(E(x(x(x(K*K)+x(F*F))+x(D*D)))));D=x(D*t);F=x(F*t);t=x(K*t);h=q[a+36>>2];if(!r[b+16|0]){C=x(-C);y=x(-y);D=x(-D);F=x(-F);t=x(-t);i=x(-i)}h=m+w(h,l)|0;v=h;t=x(B(x(A(x(x(x(x(t+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));i:{if(t=x(0)){d=~~t>>>0;break i}d=0}t=x(B(x(A(x(x(x(x(F+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));j:{if(t=x(0)){J=~~t>>>0;break j}J=0}d=d|J<<8;t=x(B(x(A(x(x(x(x(D+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));k:{if(t=x(0)){J=~~t>>>0;break k}J=0}q[v+20>>2]=d|J<<16|-16777216;i=x(B(x(A(x(x(x(x(i+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));l:{if(i=x(0)){d=~~i>>>0;break l}d=0}y=x(B(x(A(x(x(x(x(y+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));m:{if(y=x(0)){v=~~y>>>0;break m}v=0}d=d|v<<8;i=x(B(x(A(x(x(x(x(C+x(1))*x(.5))+x(.0019607844296842813))*x(255)),x(255))),x(0)));n:{if(i=x(0)){v=~~i>>>0;break n}v=0}q[h+16>>2]=d|v<<16|-16777216;l=l+1|0;if((l|0)!=4){continue}break}}h=q[a+44>>2];if((h|0)>=1){d=q[a+36>>2];b=c+252|0;h=kV(q[a+16>>2]+40|0,b,h<<2);kV(d+h|0,b,q[a+44>>2]<<2);kV(h+(d<<1)|0,b,q[a+44>>2]<<2);kV(h+w(d,3)|0,b,q[a+44>>2]<<2)}h=q[a+48>>2];if((h|0)>=1){d=q[a+36>>2];b=c+268|0;c=kV((q[a+16>>2]+(q[a+44>>2]<<2)|0)+40|0,b,h<<2);kV(d+c|0,b,q[a+48>>2]<<2);kV(c+(d<<1)|0,b,q[a+48>>2]<<2);kV(c+w(d,3)|0,b,q[a+48>>2]<<2)}q[a+12>>2]=q[a+12>>2]+1;q[a+16>>2]=q[a+16>>2]+(q[a+36>>2]<<2)}ue=g+192|0}function go(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0,t=0,v=0,w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=0,M=0,N=0,O=0,P=0,Q=x(0),R=0,S=0,T=0,U=0,V=0,W=0,X=0;g=ue-368|0;ue=g;f=1;d=(b-a|0)/288|0;a:{if(d>>>0<=5){b:{switch(d-2|0){case 0:e=b+ -24|0;f=q[e+4>>2];d=g+40|0;q[d>>2]=q[e>>2];q[d+4>>2]=f;f=b+ -32|0;j=q[f+4>>2];s=g+32|0;e=s;q[e>>2]=q[f>>2];q[e+4>>2]=j;j=b+ -40|0;t=q[j+4>>2];e=g+24|0;f=e;q[f>>2]=q[j>>2];q[f+4>>2]=t;t=b+ -48|0;h=q[t+4>>2];f=g+16|0;q[f>>2]=q[t>>2];q[f+4>>2]=h;j=b+ -56|0;t=q[j+4>>2];q[g+8>>2]=q[j>>2];q[g+12>>2]=t;j=b+ -64|0;t=q[j+4>>2];q[g>>2]=q[j>>2];q[g+4>>2]=t;Xs(g+304|0,g);j=nt(g+240|0,q[c>>2]+72|0);w=u[j+8>>2];y=u[j>>2];z=u[j+4>>2];A=u[g+312>>2];B=u[g+304>>2];C=u[g+308>>2];j=nt(g+352|0,q[c>>2]+84|0);D=u[j+8>>2];E=u[j>>2];F=u[j+4>>2];j=q[a+268>>2];q[d>>2]=q[a+264>>2];q[d+4>>2]=j;d=q[a+260>>2];q[s>>2]=q[a+256>>2];q[s+4>>2]=d;d=q[a+252>>2];q[e>>2]=q[a+248>>2];q[e+4>>2]=d;d=q[a+244>>2];q[f>>2]=q[a+240>>2];q[f+4>>2]=d;d=q[a+236>>2];q[g+8>>2]=q[a+232>>2];q[g+12>>2]=d;d=q[a+228>>2];q[g>>2]=q[a+224>>2];q[g+4>>2]=d;Xs(g+304|0,g);d=nt(g+240|0,q[c>>2]+72|0);G=u[d+8>>2];H=u[d+4>>2];I=u[g+308>>2];J=u[g+312>>2];f=1;K=x(u[g+304>>2]-u[d>>2]);c=nt(g+352|0,q[c>>2]+84|0);if(!(x(x(x(E*x(B-y))+x(F*x(C-z)))+x(D*x(A-w)))>x(x(x(K*u[c>>2])+x(x(I-H)*u[c+4>>2]))+x(x(J-G)*u[c+8>>2])))){break a}bo(a,b+ -288|0);break a;case 1:fo(a,a+288|0,b+ -288|0,c);break a;case 2:co(a,a+288|0,a+576|0,b+ -288|0,c);break a;case 3:break b;default:break a}}eo(a,a+288|0,a+576|0,a+864|0,b+ -288|0,c);break a}e=a+576|0;fo(a,a+288|0,e,c);s=a+864|0;if((s|0)==(b|0)){break a}T=g+116|0;U=g+68|0;j=g+180|0;t=g+253|0;P=g+248|0;c:{while(1){d=s;h=q[d+268>>2];L=g+40|0;f=L;q[f>>2]=q[d+264>>2];q[f+4>>2]=h;h=q[d+260>>2];M=g+32|0;f=M;q[f>>2]=q[d+256>>2];q[f+4>>2]=h;h=q[d+252>>2];N=g+24|0;f=N;q[f>>2]=q[d+248>>2];q[f+4>>2]=h;h=q[d+244>>2];O=g+16|0;f=O;q[f>>2]=q[d+240>>2];q[f+4>>2]=h;f=q[d+236>>2];q[g+8>>2]=q[d+232>>2];q[g+12>>2]=f;f=q[d+228>>2];q[g>>2]=q[d+224>>2];q[g+4>>2]=f;Xs(g+304|0,g);nt(g+240|0,q[c>>2]+72|0);w=u[g+248>>2];y=u[g+312>>2];z=u[g+240>>2];A=u[g+304>>2];B=u[g+244>>2];C=u[g+308>>2];nt(g+352|0,q[c>>2]+84|0);D=u[g+360>>2];E=u[g+352>>2];F=u[g+356>>2];d=e;f=q[d+268>>2];q[L>>2]=q[d+264>>2];q[L+4>>2]=f;f=q[d+260>>2];q[M>>2]=q[d+256>>2];q[M+4>>2]=f;f=q[d+252>>2];q[N>>2]=q[d+248>>2];q[N+4>>2]=f;f=q[d+244>>2];q[O>>2]=q[d+240>>2];q[O+4>>2]=f;f=q[d+236>>2];q[g+8>>2]=q[d+232>>2];q[g+12>>2]=f;f=q[d+228>>2];q[g>>2]=q[d+224>>2];q[g+4>>2]=f;Xs(g+304|0,g);nt(g+240|0,q[c>>2]+72|0);G=u[g+248>>2];H=u[g+312>>2];I=u[g+240>>2];J=u[g+304>>2];K=u[g+244>>2];Q=u[g+308>>2];nt(g+352|0,q[c>>2]+84|0);if(!!(x(x(x(E*x(A-z))+x(F*x(C-B)))+x(D*x(y-w)))>x(x(x(x(J-I)*u[g+352>>2])+x(x(Q-K)*u[g+356>>2]))+x(x(H-G)*u[g+360>>2])))){v=q[s>>2];q[s>>2]=0;d=s;h=r[d+21|0]|r[d+22|0]<<8|(r[d+23|0]<<16|r[d+24|0]<<24);f=t;k=r[d+17|0]|r[d+18|0]<<8|(r[d+19|0]<<16|r[d+20|0]<<24);o[f|0]=k;o[f+1|0]=k>>>8;o[f+2|0]=k>>>16;o[f+3|0]=k>>>24;o[f+4|0]=h;o[f+5|0]=h>>>8;o[f+6|0]=h>>>16;o[f+7|0]=h>>>24;f=q[d+16>>2];q[P>>2]=q[d+12>>2];q[P+4>>2]=f;f=q[d+8>>2];q[g+240>>2]=q[d+4>>2];q[g+244>>2]=f;V=q[d+36>>2];W=q[d+32>>2];X=q[d+28>>2];R=q[d+40>>2];if(q[R+4>>2]){q[s+36>>2]=191;q[s+40>>2]=4896}k=kV(g,s+44|0,228);f=s;d:{while(1){d=e;h=q[d>>2];q[d>>2]=0;e=q[f>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f>>2]=0}q[f>>2]=h;e=q[d+8>>2];q[f+4>>2]=q[d+4>>2];q[f+8>>2]=e;e=q[d+16>>2];q[f+12>>2]=q[d+12>>2];q[f+16>>2]=e;e=r[d+21|0]|r[d+22|0]<<8|(r[d+23|0]<<16|r[d+24|0]<<24);h=r[d+17|0]|r[d+18|0]<<8|(r[d+19|0]<<16|r[d+20|0]<<24);o[f+17|0]=h;o[f+18|0]=h>>>8;o[f+19|0]=h>>>16;o[f+20|0]=h>>>24;o[f+21|0]=e;o[f+22|0]=e>>>8;o[f+23|0]=e>>>16;o[f+24|0]=e>>>24;e=f+40|0;h=q[e>>2];q[e>>2]=4896;q[f+36>>2]=191;e=q[h+4>>2];if(e){n[e](q[f+28>>2])}e=q[d+32>>2];q[f+28>>2]=q[d+28>>2];q[f+32>>2]=e;e=d+36|0;q[f+36>>2]=q[e>>2];i=d+40|0;q[f+40>>2]=q[i>>2];q[e>>2]=191;q[i>>2]=4896;q[f+100>>2]=q[d+100>>2];e=q[d+96>>2];q[f+92>>2]=q[d+92>>2];q[f+96>>2]=e;e=q[d+88>>2];q[f+84>>2]=q[d+84>>2];q[f+88>>2]=e;e=q[d+80>>2];q[f+76>>2]=q[d+76>>2];q[f+80>>2]=e;e=q[d+72>>2];q[f+68>>2]=q[d+68>>2];q[f+72>>2]=e;e=q[d+64>>2];q[f+60>>2]=q[d+60>>2];q[f+64>>2]=e;e=q[d+56>>2];q[f+52>>2]=q[d+52>>2];q[f+56>>2]=e;e=q[d+48>>2];q[f+44>>2]=q[d+44>>2];q[f+48>>2]=e;e=q[d+156>>2];q[f+152>>2]=q[d+152>>2];q[f+156>>2]=e;e=q[d+148>>2];q[f+144>>2]=q[d+144>>2];q[f+148>>2]=e;e=q[d+140>>2];q[f+136>>2]=q[d+136>>2];q[f+140>>2]=e;e=q[d+132>>2];q[f+128>>2]=q[d+128>>2];q[f+132>>2]=e;e=q[d+124>>2];q[f+120>>2]=q[d+120>>2];q[f+124>>2]=e;e=q[d+116>>2];q[f+112>>2]=q[d+112>>2];q[f+116>>2]=e;e=q[d+164>>2];q[f+160>>2]=q[d+160>>2];q[f+164>>2]=e;e=q[d+172>>2];q[f+168>>2]=q[d+168>>2];q[f+172>>2]=e;e=q[d+180>>2];q[f+176>>2]=q[d+176>>2];q[f+180>>2]=e;e=q[d+188>>2];q[f+184>>2]=q[d+184>>2];q[f+188>>2]=e;e=q[d+196>>2];q[f+192>>2]=q[d+192>>2];q[f+196>>2]=e;e=q[d+204>>2];q[f+200>>2]=q[d+200>>2];q[f+204>>2]=e;e=q[d+212>>2];q[f+208>>2]=q[d+208>>2];q[f+212>>2]=e;e=q[d+228>>2];q[f+224>>2]=q[d+224>>2];q[f+228>>2]=e;e=q[d+260>>2];q[f+256>>2]=q[d+256>>2];q[f+260>>2]=e;e=q[d+268>>2];q[f+264>>2]=q[d+264>>2];q[f+268>>2]=e;e=q[d+252>>2];q[f+248>>2]=q[d+248>>2];q[f+252>>2]=e;e=q[d+244>>2];q[f+240>>2]=q[d+240>>2];q[f+244>>2]=e;e=q[d+236>>2];q[f+232>>2]=q[d+232>>2];q[f+236>>2]=e;e=a;f=e;if((d|0)==(e|0)){break d}e=j;i=q[e+44>>2];f=k+344|0;q[f>>2]=q[e+40>>2];q[f+4>>2]=i;l=q[e+36>>2];i=k+336|0;h=i;q[h>>2]=q[e+32>>2];q[h+4>>2]=l;m=q[e+28>>2];l=k+328|0;h=l;q[h>>2]=q[e+24>>2];q[h+4>>2]=m;p=q[e+20>>2];m=k+320|0;h=m;q[h>>2]=q[e+16>>2];q[h+4>>2]=p;h=q[e+12>>2];q[k+312>>2]=q[e+8>>2];q[k+316>>2]=h;p=q[e+4>>2];h=k;q[h+304>>2]=q[e>>2];q[h+308>>2]=p;Xs(h+352|0,h+304|0);nt(h+288|0,q[c>>2]+72|0);w=u[h+296>>2];y=u[h+360>>2];z=u[h+288>>2];A=u[h+352>>2];B=u[h+292>>2];C=u[h+356>>2];nt(h+272|0,q[c>>2]+84|0);D=u[h+280>>2];E=u[h+272>>2];F=u[h+276>>2];e=d+ -24|0;p=q[e+4>>2];q[f>>2]=q[e>>2];q[f+4>>2]=p;e=d+ -32|0;f=q[e+4>>2];q[i>>2]=q[e>>2];q[i+4>>2]=f;e=d+ -40|0;f=q[e+4>>2];q[l>>2]=q[e>>2];q[l+4>>2]=f;e=d+ -48|0;f=q[e+4>>2];q[m>>2]=q[e>>2];q[m+4>>2]=f;e=d+ -56|0;f=q[e+4>>2];q[h+312>>2]=q[e>>2];q[h+316>>2]=f;e=d+ -64|0;f=q[e+4>>2];q[h+304>>2]=q[e>>2];q[h+308>>2]=f;Xs(h+352|0,h+304|0);nt(h+288|0,q[c>>2]+72|0);G=u[h+296>>2];H=u[h+360>>2];I=u[h+288>>2];J=u[h+352>>2];K=u[h+292>>2];Q=u[h+356>>2];nt(h+272|0,q[c>>2]+84|0);e=d+ -288|0;f=d;if(x(x(x(E*x(A-z))+x(F*x(C-B)))+x(D*x(y-w)))>x(x(x(x(J-I)*u[h+272>>2])+x(x(Q-K)*u[h+276>>2]))+x(x(H-G)*u[h+280>>2]))){continue}break}f=d}e=f;f=d+4|0;h=e;e=q[e>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[h>>2]=0}m=d+224|0;l=d+160|0;p=d+112|0;i=d+44|0;q[h>>2]=v;e=f;f=t;v=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);o[e+13|0]=f;o[e+14|0]=f>>>8;o[e+15|0]=f>>>16;o[e+16|0]=f>>>24;o[e+17|0]=v;o[e+18|0]=v>>>8;o[e+19|0]=v>>>16;o[e+20|0]=v>>>24;f=q[P+4>>2];q[e+8>>2]=q[P>>2];q[e+12>>2]=f;f=q[k+244>>2];q[e>>2]=q[k+240>>2];q[e+4>>2]=f;q[d+36>>2]=191;e=q[d+40>>2];q[d+40>>2]=4896;e=q[e+4>>2];if(e){n[e](q[d+28>>2])}q[d+28>>2]=X;q[h+32>>2]=W;q[d+40>>2]=R;q[d+36>>2]=V;q[i+56>>2]=q[k+56>>2];d=q[k+52>>2];q[i+48>>2]=q[k+48>>2];q[i+52>>2]=d;d=q[L+4>>2];q[i+40>>2]=q[L>>2];q[i+44>>2]=d;d=q[M+4>>2];q[i+32>>2]=q[M>>2];q[i+36>>2]=d;d=q[N+4>>2];q[i+24>>2]=q[N>>2];q[i+28>>2]=d;d=q[O+4>>2];q[i+16>>2]=q[O>>2];q[i+20>>2]=d;d=q[k+12>>2];q[i+8>>2]=q[k+8>>2];q[i+12>>2]=d;d=q[k+4>>2];q[i>>2]=q[k>>2];q[i+4>>2]=d;d=U;e=q[d+44>>2];q[p+40>>2]=q[d+40>>2];q[p+44>>2]=e;e=q[d+36>>2];q[p+32>>2]=q[d+32>>2];q[p+36>>2]=e;e=q[d+28>>2];q[p+24>>2]=q[d+24>>2];q[p+28>>2]=e;e=q[d+20>>2];q[p+16>>2]=q[d+16>>2];q[p+20>>2]=e;e=q[d+12>>2];q[p+8>>2]=q[d+8>>2];q[p+12>>2]=e;e=q[d+4>>2];q[p>>2]=q[d>>2];q[p+4>>2]=e;d=T;e=q[d+52>>2];q[l+48>>2]=q[d+48>>2];q[l+52>>2]=e;e=q[d+44>>2];q[l+40>>2]=q[d+40>>2];q[l+44>>2]=e;e=q[d+36>>2];q[l+32>>2]=q[d+32>>2];q[l+36>>2]=e;e=q[d+28>>2];q[l+24>>2]=q[d+24>>2];q[l+28>>2]=e;e=q[d+20>>2];q[l+16>>2]=q[d+16>>2];q[l+20>>2]=e;e=q[d+12>>2];q[l+8>>2]=q[d+8>>2];q[l+12>>2]=e;e=q[d+4>>2];q[l>>2]=q[d>>2];q[l+4>>2]=e;d=j;e=q[d+44>>2];q[m+40>>2]=q[d+40>>2];q[m+44>>2]=e;e=q[d+36>>2];q[m+32>>2]=q[d+32>>2];q[m+36>>2]=e;e=q[d+28>>2];q[m+24>>2]=q[d+24>>2];q[m+28>>2]=e;e=q[d+20>>2];q[m+16>>2]=q[d+16>>2];q[m+20>>2]=e;e=q[d+12>>2];q[m+8>>2]=q[d+8>>2];q[m+12>>2]=e;e=q[d+4>>2];q[m>>2]=q[d>>2];q[m+4>>2]=e;S=S+1|0;if((S|0)==8){break c}}e=s;s=e+288|0;if((s|0)!=(b|0)){continue}break}f=1;break a}f=(s+288|0)==(b|0)}ue=g+368|0;return f}function ix(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0;h=ue-16|0;ue=h;g=q[a+16>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+16>>2]=0}q[a+16>>2]=0;g=q[a+20>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+20>>2]=0}q[a+20>>2]=0;g=q[a+24>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+24>>2]=0}q[a+24>>2]=0;g=q[a+28>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+28>>2]=0}q[a+28>>2]=0;g=q[a+32>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+32>>2]=0}q[a+32>>2]=0;g=q[a+36>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+36>>2]=0}q[a+36>>2]=0;g=q[a+40>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+40>>2]=0}q[a+40>>2]=0;g=q[a+44>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+44>>2]=0}q[a+80>>2]=0;q[a+84>>2]=0;q[a+44>>2]=0;q[a+48>>2]=1;q[a+116>>2]=-1;q[a+120>>2]=-1;o[a+113|0]=0;o[a+112|0]=f;q[a+4>>2]=0;q[a+104>>2]=0;q[a+108>>2]=0;q[a+96>>2]=0;q[a+100>>2]=0;q[a+88>>2]=0;q[a+92>>2]=0;q[a+76>>2]=1;q[a+68>>2]=1;q[a+72>>2]=1;q[a+60>>2]=1;q[a+64>>2]=1;q[a+52>>2]=1;q[a+56>>2]=1;a:{b:{c:{if(q[d>>2]==128){d:{if(!q[d+40>>2]){break d}if(n[q[q[b>>2]+160>>2]](b)){break d}n[q[q[c>>2]+104>>2]](h+8|0,c,q[q[d+40>>2]>>2]);f=q[h+8>>2];q[h+8>>2]=0;g=q[a+8>>2];e:{if(!g){q[a+8>>2]=f;break e}n[q[q[g>>2]+8>>2]](g)|0;g=q[h+8>>2];q[a+8>>2]=f;if(!g){break e}n[q[q[g>>2]+8>>2]](g)|0;q[h+8>>2]=0;f=q[a+8>>2]}if(r[f+24|0]|!f){break d}g=q[d+40>>2];if(q[f+36>>2]==q[g+8>>2]-q[g+4>>2]>>3){j=1;if(q[f+40>>2]==q[g+20>>2]-q[g+16>>2]>>4){break d}}j=0}if(q[d>>2]==128){break c}}f:{if(q[d+12>>2]>-1|q[d+16>>2]>-1|(q[d+20>>2]>-1|q[d+24>>2]>-1)){break f}if(q[d+28>>2]>-1|q[d+32>>2]>-1|(r[d+112|0]|q[d+152>>2]!=-1)){break f}if(u[d+164>>2]!=x(0)){break f}e=r[d+176|0]!=0|e;if(j){break b}break a}i=1}e=e|i;i=0;if(!j){break a}}i=1;o[a+112|0]=1}g:{h:{i:{j:{if((n[q[q[b>>2]+160>>2]](b)|0)==1){break j}n[q[q[b>>2]+228>>2]](h+8|0,b);g=q[h+8>>2];m=q[h+12>>2];k:{if(!m){break k}f=q[m+4>>2];q[m+4>>2]=f+ -1;if(f){break k}n[q[q[m>>2]+8>>2]](m);WS(m)}if(g){break j}g=q[d>>2];if(!(i^1|(g|0)!=128)){f=q[d+40>>2];q[a+4>>2]=f;if(!f){break h}n[q[q[c>>2]+104>>2]](h+8|0,c,q[f>>2]);j=q[h+8>>2];q[h+8>>2]=0;f=q[a+8>>2];l:{if(!f){q[a+8>>2]=j;break l}n[q[q[f>>2]+8>>2]](f)|0;f=q[h+8>>2];q[a+8>>2]=j;if(!f){break l}n[q[q[f>>2]+8>>2]](f)|0;q[h+8>>2]=0;j=q[a+8>>2]}if(!j){break h}q[a>>2]=6;f=r[j+25|0];o[a+113|0]=f;if(!f){break h}o[a+114|0]=1;break h}f=e^1;if(!(f|(g|0)!=7)){q[a>>2]=4;break h}if(!(f|(g|0)!=6)){o[a+113|0]=1;q[a>>2]=5;break h}if(!(f|(g|0)!=0)){q[a>>2]=3;break h}if((g|0)==7){q[a>>2]=1;break h}if((g|0)!=6){break i}o[a+113|0]=1;q[a>>2]=2;break h}q[a+12>>2]=1;q[a>>2]=0;Hv(h+8|0,q[b+4>>2],0);c=q[h+8>>2];q[h+8>>2]=0;b=q[a+16>>2];m:{if(!b){q[a+16>>2]=c;break m}n[q[q[b>>2]+8>>2]](b)|0;b=q[h+8>>2];q[a+16>>2]=c;if(!b){break m}n[q[q[b>>2]+8>>2]](b)|0;q[h+8>>2]=0}q[a+48>>2]=q[d+48>>2];q[a+80>>2]=q[d+80>>2];if(!r[a+112|0]){break g}b=q[a+12>>2];q[a+120>>2]=b;q[a+12>>2]=b+1;break g}q[a>>2]=0}n:{if(i){b=q[a+4>>2];d=q[b+8>>2]-q[b+4>>2]>>3;d=d>>>0<6?d:6;q[a+12>>2]=d;if((d|0)<1){b=0;break n}d=0;while(1){b=q[b+4>>2]+(d<<3)|0;e=q[b+4>>2];o:{if(q[b>>2]==1){if((e|0)>=0){n[q[q[c>>2]+56>>2]](h+8|0,c,e);p:{q:{i=q[h+8>>2];r:{if(!i){e=((d<<2)+a|0)+16|0;break r}e=((d<<2)+a|0)+16|0;b=q[i+20>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[i+20>>2]}if(b){break q}}b=0;f=1;break p}n[q[q[b>>2]>>2]](b)|0;f=0}g=((d<<2)+a|0)+16|0;m=q[g>>2];if(m){n[q[q[m>>2]+8>>2]](m)|0;q[g>>2]=0}q[e>>2]=b;if(!f){n[q[q[b>>2]+8>>2]](b)|0}if(!i){break o}n[q[q[i>>2]+8>>2]](i)|0;break o}e=((d<<2)+a|0)+16|0;b=q[e>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e>>2]=0}q[e>>2]=0;break o}if((e|0)>=0){n[q[q[c>>2]+44>>2]](h+8|0,c,e);s:{t:{i=q[h+8>>2];u:{if(!i){e=((d<<2)+a|0)+16|0;break u}e=((d<<2)+a|0)+16|0;b=q[i+20>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[i+20>>2]}if(b){break t}}b=0;f=1;break s}n[q[q[b>>2]>>2]](b)|0;f=0}g=((d<<2)+a|0)+16|0;m=q[g>>2];if(m){n[q[q[m>>2]+8>>2]](m)|0;q[g>>2]=0}q[e>>2]=b;if(!f){n[q[q[b>>2]+8>>2]](b)|0}if(!i){break o}n[q[q[i>>2]+8>>2]](i)|0;break o}e=((d<<2)+a|0)+16|0;b=q[e>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e>>2]=0}q[e>>2]=0}e=d<<2;b=e+a|0;q[b+48>>2]=1;q[b+80>>2]=q[(e+q[a+8>>2]|0)+44>>2];d=d+1|0;b=q[a+12>>2];if((d|0)>=(b|0)){break n}b=q[a+4>>2];continue}}g=q[d>>2];v:{if(e){f=g?7:6;q[a+12>>2]=f;if(!r[a+112|0]){break v}q[a+120>>2]=f;q[a+12>>2]=f+1;break v}f=g?2:1;q[a+12>>2]=f;if(!r[a+112|0]){break v}q[a+120>>2]=f;q[a+12>>2]=f+1}w:{if((g|0)==6){n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+4>>2]);break w}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+4>>2])}x:{y:{f=q[h+8>>2];if(f){j=q[f+20>>2];if(j){n[q[q[j>>2]>>2]](j)|0;j=q[f+20>>2]}if(j){n[q[q[j>>2]>>2]](j)|0;n[q[q[j>>2]+8>>2]](j)|0}n[q[q[f>>2]+8>>2]](f)|0;if(j){break y}}Hv(h+8|0,q[b+4>>2],0);j=q[h+8>>2];if(j){break y}j=0;m=1;break x}n[q[q[j>>2]>>2]](j)|0;m=0}f=q[a+16>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[a+16>>2]=0}q[a+16>>2]=j;q[a+48>>2]=q[d+48>>2];q[a+80>>2]=q[d+80>>2];z:{A:{B:{C:{g=a;D:{E:{i=q[d>>2];F:{if(i>>>0>7){break F}G:{H:{I:{J:{switch(i-1|0){case 5:q[a+116>>2]=1;o[a+113|0]=1;break G;case 6:n[q[q[c>>2]+56>>2]](h+8|0,c,q[d+8>>2]);K:{i=q[h+8>>2];if(!i){break K}k=q[i+20>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[i+20>>2]}if(!k){break K}n[q[q[k>>2]>>2]](k)|0;n[q[q[k>>2]+8>>2]](k)|0;break I}Hv(h+8|0,q[b+4>>2],1);k=q[h+8>>2];if(k){break I}k=0;break H;case 0:case 1:case 2:case 3:case 4:break F;default:break J}}if(!e){break z}break C}n[q[q[k>>2]>>2]](k)|0}f=q[a+20>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[a+20>>2]=0}q[a+20>>2]=k;if(!i){break G}n[q[q[i>>2]+8>>2]](i)|0}i=6;f=q[d>>2];if((f|0)==6){break E}i=f}q[a+52>>2]=q[d+52>>2];f=q[d+84>>2];break D}q[a+52>>2]=1;f=1}q[g+84>>2]=f;if(!e){break A}if((i|0)!=6){break C}n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+12>>2]);break B}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+12>>2])}e=q[h+8>>2];L:{if(e){i=q[e+20>>2];if(i){n[q[q[i>>2]>>2]](i)|0;i=q[e+20>>2]}if(i){n[q[q[i>>2]>>2]](i)|0;n[q[q[i>>2]+8>>2]](i)|0}n[q[q[e>>2]+8>>2]](e)|0;if(i){break L}}Hv(h+8|0,q[b+4>>2],0);i=q[h+8>>2]}M:{if(q[d>>2]==6){n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+16>>2]);break M}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+16>>2])}f=q[h+8>>2];N:{if(f){e=q[f+20>>2];if(e){n[q[q[e>>2]>>2]](e)|0;e=q[f+20>>2]}if(e){n[q[q[e>>2]>>2]](e)|0;n[q[q[e>>2]+8>>2]](e)|0}n[q[q[f>>2]+8>>2]](f)|0;if(e){break N}}Hv(h+8|0,q[b+4>>2],1);e=q[h+8>>2]}O:{if(q[d>>2]==6){n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+20>>2]);break O}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+20>>2])}g=q[h+8>>2];P:{if(g){f=q[g+20>>2];if(f){n[q[q[f>>2]>>2]](f)|0;f=q[g+20>>2]}if(f){n[q[q[f>>2]>>2]](f)|0;n[q[q[f>>2]+8>>2]](f)|0}n[q[q[g>>2]+8>>2]](g)|0;if(f){break P}}Hv(h+8|0,q[b+4>>2],0);f=q[h+8>>2]}Q:{if(q[d>>2]==6){n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+24>>2]);break Q}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+24>>2])}g=q[h+8>>2];R:{if(g){l=q[g+20>>2];if(l){n[q[q[l>>2]>>2]](l)|0;l=q[g+20>>2]}if(l){n[q[q[l>>2]>>2]](l)|0;n[q[q[l>>2]+8>>2]](l)|0}n[q[q[g>>2]+8>>2]](g)|0;if(l){break R}}Hv(h+8|0,q[b+4>>2],0);l=q[h+8>>2]}S:{if(q[d>>2]==6){n[q[q[c>>2]+68>>2]](h+8|0,c,q[d+28>>2]);break S}n[q[q[c>>2]+44>>2]](h+8|0,c,q[d+28>>2])}g=q[h+8>>2];T:{if(g){c=q[g+20>>2];if(c){n[q[q[c>>2]>>2]](c)|0;c=q[g+20>>2]}if(c){n[q[q[c>>2]>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}n[q[q[g>>2]+8>>2]](g)|0;if(c){break T}}Hv(h+8|0,q[b+4>>2],1);c=q[h+8>>2]}s=q[d>>2]?2:1;g=((s<<2)+a|0)+16|0;if(i){n[q[q[i>>2]>>2]](i)|0}b=q[g>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[g>>2]=0}q[g>>2]=i;b=(s<<2)+a|0;q[b+48>>2]=q[d+56>>2];q[b+80>>2]=q[d+88>>2];b=s+1|0;p=((b<<2)+a|0)+16|0;if(e){n[q[q[e>>2]>>2]](e)|0}g=q[p>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[p>>2]=0}q[p>>2]=e;b=(b<<2)+a|0;q[b+48>>2]=q[d+60>>2];q[b+80>>2]=q[d+92>>2];b=s+2|0;p=((b<<2)+a|0)+16|0;if(f){n[q[q[f>>2]>>2]](f)|0}g=q[p>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[p>>2]=0}q[p>>2]=f;b=(b<<2)+a|0;q[b+48>>2]=q[d- -64>>2];q[b+80>>2]=q[d+96>>2];b=s+3|0;p=((b<<2)+a|0)+16|0;if(l){n[q[q[l>>2]>>2]](l)|0}g=q[p>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[p>>2]=0}q[p>>2]=l;b=(b<<2)+a|0;q[b+48>>2]=q[d+68>>2];q[b+80>>2]=q[d+100>>2];b=s|4;p=((b<<2)+a|0)+16|0;if(c){n[q[q[c>>2]>>2]](c)|0}g=q[p>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[p>>2]=0}q[p>>2]=c;a=(b<<2)+a|0;q[a+48>>2]=q[d+72>>2];q[a+80>>2]=q[d+104>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0}if(l){n[q[q[l>>2]+8>>2]](l)|0}if(f){n[q[q[f>>2]+8>>2]](f)|0}if(e){n[q[q[e>>2]+8>>2]](e)|0}if(!i){break A}n[q[q[i>>2]+8>>2]](i)|0}if(!k){break z}n[q[q[k>>2]+8>>2]](k)|0}if(m){break g}n[q[q[j>>2]+8>>2]](j)|0;break g}if(r[a+113|0]){c=(b<<2)+a|0;q[c+80>>2]=1;q[c+48>>2]=1;q[a+116>>2]=b}d=b+1|0;q[a+12>>2]=d;if(!r[a+112|0]){break g}c=(d<<2)+a|0;q[c+80>>2]=1;q[c+48>>2]=1;q[a+12>>2]=b+2;q[a+120>>2]=d}ue=h+16|0}function qq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=ue+ -64|0;ue=d;q[d+60>>2]=b;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[d+56>>2]=4;q[d+48>>2]=b;o[d+52|0]=0;q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;o[d+11|0]=4;o[d+4|0]=0;q[d>>2]=1296778821;q[d+40>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;a:{b:{c:{b=sV(d+48|0);if(b>>>0<4294967280){d:{e:{if(b>>>0>=11){e=b+16&-16;f=_S(e);q[d+40>>2]=e|-2147483648;q[d+32>>2]=f;q[d+36>>2]=b;e=d+32|0;break e}o[d+43|0]=b;e=d+32|0;f=e;if(!b){break d}}kV(f,d+48|0,b)}o[b+f|0]=0;h=1;f=r[d+11|0];l=f<<24>>24;k=(l|0)<0;e=r[e+11|0];n=e<<24>>24;b=(n|0)<0;g=b?q[d+36>>2]:e;e=k?q[d+4>>2]:f;if((g|0)!=(e|0)){break b}b=b?q[d+32>>2]:d+32|0;g=q[d>>2];if(k){break c}if(!e){h=0;break b}if(r[b|0]!=(g&255)){break b}e=d;while(1){f=f+ -1|0;if(!f){h=0;break b}k=r[b+1|0];b=b+1|0;e=e+1|0;if((k|0)==r[e|0]){continue}break}break b}break a}if(!e){h=0;break b}h=(sG(k?g:d,b,e)|0)!=0}if((n|0)<=-1){_U(q[d+32>>2])}if((l|0)<=-1){_U(q[d>>2])}e=0;f:{g:{if(h){break g}f=q[d+60>>2];k=q[d+56>>2];b=f+k|0;h=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=k+4|0;q[d+56>>2]=b;if(h>>>0>1710){break g}b=b+f|0;e=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);q[a+8>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[a+12>>2]=e;b=k+12|0;q[d+56>>2]=b;e=1;if((b|0)<0|(b|0)>=(c|0)){break g}t=a+80|0;u=a+68|0;v=a+56|0;w=a+44|0;x=a+92|0;y=a+16|0;n=d+12|0;z=(h|0)<1703;s=(h|0)<3;A=(h|0)>1702;while(1){e=b+f|0;q[d+24>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[d+28|0]=0;e=b+4|0;q[d+56>>2]=e;e=e+f|0;m=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[d+56>>2]=b+8;k=d+8|0;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;o[d+11|0]=4;o[d+4|0]=0;q[d>>2]=1598902864;h=d+40|0;q[h>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;h:{i:{b=sV(d+24|0);if(b>>>0<4294967280){j:{k:{if(b>>>0>=11){f=b+16&-16;e=_S(f);q[d+40>>2]=f|-2147483648;q[d+32>>2]=e;q[d+36>>2]=b;break k}o[d+43|0]=b;e=d+32|0;if(!b){break j}}kV(e,d+24|0,b)}g=0;o[b+e|0]=0;e=r[d+11|0];l=e<<24>>24;b=r[d+43|0];i=b<<24>>24;f=(l|0)<0?q[d+4>>2]:e;if((f|0)!=(((i|0)<0?q[d+36>>2]:b)|0)){break h}b=(i|0)<0?q[d+32>>2]:d+32|0;j=q[d>>2];p=(l|0)<0;if(p){break i}if(!f){g=1;break h}f=d;if(r[b|0]!=(j&255)){break h}while(1){e=e+ -1|0;if(!e){g=1;break h}j=r[b+1|0];b=b+1|0;f=f+1|0;if((j|0)==r[f|0]){continue}break}break h}break a}if(!f){g=1;break h}g=!sG(p?j:d,b,f)}if((i|0)<=-1){_U(q[d+32>>2])}if((l|0)<=-1){_U(q[d>>2])}l:{m:{n:{o:{p:{q:{if(g){b=q[d+60>>2];f=q[d+56>>2];e=b+f|0;q[a+32>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=f+8|0;q[d+56>>2]=e;e=b+e|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);g=f+12|0;q[d+56>>2]=g;o[a+28|0]=(e|0)>0;e=b+g|0;q[a+36>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=f+16|0;q[d+56>>2]=e;e=b+e|0;q[a+40>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=f+20|0;q[d+56>>2]=e;r:{if(z){break r}e=b+e|0;l=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=f+24|0;q[d+56>>2]=e;f=0;if((l|0)<1){break r}while(1){b=b+e|0;i=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[d+56>>2]=e+4;b=q[a+96>>2];m=q[a+100>>2];s:{if(b>>>0>>0){q[b>>2]=i;q[a+96>>2]=b+4;break s}e=q[x>>2];j=b-e|0;p=j>>2;g=p+1|0;if(g>>>0>=1073741824){break q}m=m-e|0;b=m>>1;g=m>>2>>>0<536870911?b>>>0>>0?g:b:1073741823;b=0;t:{if(!g){break t}if(g>>>0>=1073741824){break p}b=_S(g<<2)}m=b+(p<<2)|0;q[m>>2]=i;g=b+(g<<2)|0;i=m+4|0;if((j|0)>=1){kV(b,e,j)}q[a+100>>2]=g;q[a+96>>2]=i;q[a+92>>2]=b;if(!e){break s}_U(e)}e=q[d+56>>2];b=q[d+60>>2];f=f+1|0;if((l|0)!=(f|0)){continue}break}}f=b+e|0;g=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);f=e+4|0;q[d+56>>2]=f;f=b+f|0;f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);e=e+8|0;q[d+56>>2]=e;l=0;if((g|0)<=0){break m}while(1){q[h>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;i=b+e|0;b=sV(i);if(b>>>0>=4294967280){break a}u:{v:{if(b>>>0>=11){j=b+16&-16;e=_S(j);q[d+40>>2]=j|-2147483648;q[d+32>>2]=e;q[d+36>>2]=b;break v}o[d+43|0]=b;e=d+32|0;if(!b){break u}}kV(e,i,b)}o[b+e|0]=0;b=q[d+56>>2]+f|0;q[d+56>>2]=b;if(!s){f=q[d+60>>2];e=f+b|0;i=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);b=b+4|0;q[d+56>>2]=b;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;f=b+f|0;b=sV(f);if(b>>>0>=4294967280){break f}w:{x:{if(b>>>0>=11){j=b+16&-16;e=_S(j);q[d+8>>2]=j|-2147483648;q[d>>2]=e;q[d+4>>2]=b;break x}o[d+11|0]=b;e=d;if(!b){break w}}kV(e,f,b)}o[b+e|0]=0;y:{if(o[d+43|0]>=0){o[d+43|0]=0;o[d+32|0]=0;break y}o[q[d+32>>2]]=0;q[d+36>>2]=0;if(o[d+43|0]>-1){break y}_U(q[d+32>>2]);q[d+40>>2]=0}q[h>>2]=q[k>>2];b=q[d+4>>2];q[d+32>>2]=q[d>>2];q[d+36>>2]=b;b=i+q[d+56>>2]|0;q[d+56>>2]=b}f=b;b=q[d+60>>2];e=f+b|0;e=f+(r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24))|0;f=e+4|0;q[d+56>>2]=f;f=b+f|0;i=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);f=e+16|0;q[d+56>>2]=f;f=b+f|0;f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);j=e+20|0;q[d+56>>2]=j;b=b+j|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[d+56>>2]=e+24;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;pT(d,d+32|0);q[d+20>>2]=f;q[d+16>>2]=b;q[d+12>>2]=i;b=q[a+48>>2];z:{if((b|0)!=q[a+52>>2]){mT(b,d);q[b+20>>2]=q[n+8>>2];e=q[n+4>>2];q[b+12>>2]=q[n>>2];q[b+16>>2]=e;q[a+48>>2]=q[a+48>>2]+24;break z}rq(w,d)}if(o[d+11|0]<=-1){_U(q[d>>2])}if(o[d+43|0]<=-1){_U(q[d+32>>2])}b=q[d+60>>2];i=q[d+56>>2];e=b+i|0;f=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);e=i+4|0;q[d+56>>2]=e;l=l+1|0;if((g|0)!=(l|0)){continue}break}break m}q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;o[d+4|0]=0;q[d>>2]=1162757447;o[d+11|0]=4;q[h>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;b=sV(d+24|0);if(b>>>0>=4294967280){break a}A:{B:{if(b>>>0>=11){f=b+16&-16;e=_S(f);q[d+40>>2]=f|-2147483648;q[d+32>>2]=e;q[d+36>>2]=b;break B}o[d+43|0]=b;e=d+32|0;if(!b){break A}}kV(e,d+24|0,b)}g=0;o[b+e|0]=0;e=r[d+11|0];f=e<<24>>24;b=r[d+43|0];l=b<<24>>24;h=(f|0)<0?q[d+4>>2]:e;if((h|0)!=(((l|0)<0?q[d+36>>2]:b)|0)){break n}b=(l|0)<0?q[d+32>>2]:d+32|0;i=q[d>>2];j=(f|0)<0;if(j){break o}if(!h){g=1;break n}h=d;if(r[b|0]!=(i&255)){break n}while(1){e=e+ -1|0;if(!e){g=1;break n}i=r[b+1|0];b=b+1|0;h=h+1|0;if((i|0)==r[h|0]){continue}break}break n}kU();F()}Ue(6104);F()}if(!h){g=1;break n}g=!sG(j?i:d,b,h)}if((l|0)<=-1){_U(q[d+32>>2])}if((f|0)<=-1){_U(q[d>>2])}if(g){e=q[d+60>>2];f=q[d+56>>2];b=e+f|0;h=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=f+4|0;q[d+56>>2]=b;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;e=b+e|0;b=sV(e);if(b>>>0>=4294967280){break f}C:{D:{if(b>>>0>=11){k=b+16&-16;f=_S(k);q[d+8>>2]=k|-2147483648;q[d>>2]=f;q[d+4>>2]=b;break D}o[d+11|0]=b;f=d;if(!b){break C}}kV(f,e,b)}o[b+f|0]=0;pT(y,d);q[d+56>>2]=h+q[d+56>>2];if(o[d+11|0]>-1){break l}_U(q[d>>2]);break l}q[d+56>>2]=m+q[d+56>>2];break l}E:{if((f|0)<1){break E}g=b+e|0;i=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);e=e+4|0;q[d+56>>2]=e;l=0;q[h>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;g=b+e|0;b=sV(g);if(b>>>0>4294967279){break f}while(1){F:{G:{if(b>>>0>=11){j=b+16&-16;e=_S(j);q[d+40>>2]=j|-2147483648;q[d+32>>2]=e;q[d+36>>2]=b;break G}o[d+43|0]=b;e=d+32|0;if(!b){break F}}kV(e,g,b)}o[b+e|0]=0;b=q[d+56>>2]+i|0;q[d+56>>2]=b;if(!s){g=q[d+60>>2];e=g+b|0;i=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);b=b+4|0;q[d+56>>2]=b;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;g=b+g|0;b=sV(g);if(b>>>0>=4294967280){break f}H:{I:{if(b>>>0>=11){j=b+16&-16;e=_S(j);q[d+8>>2]=j|-2147483648;q[d>>2]=e;q[d+4>>2]=b;break I}o[d+11|0]=b;e=d;if(!b){break H}}kV(e,g,b)}o[b+e|0]=0;J:{if(o[d+43|0]>=0){o[d+43|0]=0;o[d+32|0]=0;break J}o[q[d+32>>2]]=0;q[d+36>>2]=0;if(o[d+43|0]>-1){break J}_U(q[d+32>>2]);q[d+40>>2]=0}q[h>>2]=q[k>>2];b=q[d+4>>2];q[d+32>>2]=q[d>>2];q[d+36>>2]=b;b=i+q[d+56>>2]|0;q[d+56>>2]=b}e=b+8|0;q[d+56>>2]=e;e=e+q[d+60>>2]|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[d+56>>2]=b+28;q[k>>2]=0;q[d>>2]=0;q[d+4>>2]=0;pT(d,d+32|0);q[d+12>>2]=e;b=q[a+60>>2];K:{if((b|0)!=q[a+64>>2]){mT(b,d);q[b+12>>2]=q[d+12>>2];q[a+60>>2]=q[a+60>>2]+16;break K}sq(v,d)}if(o[d+11|0]<=-1){_U(q[d>>2])}if(o[d+43|0]<=-1){_U(q[d+32>>2])}l=l+1|0;if((l|0)==(f|0)){break E}e=q[d+60>>2];g=q[d+56>>2];b=e+g|0;i=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=g+4|0;q[d+56>>2]=b;q[h>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;g=b+e|0;b=sV(g);if(b>>>0<=4294967279){continue}break}break f}if(!A){break l}q[d+4>>2]=d+56;q[d>>2]=d+60;tq(d,u);tq(d,t)}e=1;b=q[d+56>>2];if((b|0)<0|(b|0)>=(c|0)){break g}f=q[d+60>>2];continue}}ue=d- -64|0;return e|0}}kT();F()}function Mj(a,b){var c=0,d=0,e=0,f=x(0),g=x(0),h=0,i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),p=0,s=0,t=0,v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=0,L=x(0),M=0,N=x(0),O=x(0);c=ue-176|0;ue=c;if(!r[a+1393|0]){d=q[a+148>>2];if((n[q[q[d>>2]+12>>2]](d)|0)!=-1){q[a+1400>>2]=q[q[a+144>>2]+580>>2];d=q[a+148>>2];d=n[q[q[d>>2]+8>>2]](d)|0;e=q[q[n[q[q[d>>2]+28>>2]](d)>>2]+8>>2];if(q[a+164>>2]){Tj(a,b)}d=q[a+84>>2];q[c+160>>2]=q[a+80>>2];q[c+164>>2]=d;d=q[a+92>>2];q[c+168>>2]=q[a+88>>2];q[c+172>>2]=d;d=q[a+148>>2];a:{if((q[d- -64>>2]&-2)==4){g=u[c+168>>2];f=u[c+164>>2];i=u[c+160>>2];k=x(u[a+124>>2]-x(x(g*x(0))+x(x(f*x(0))+x(x(i*x(0))+x(0)))));j=x(u[a+112>>2]-x(x(u[a+1352>>2]*g)+x(x(u[a+1348>>2]*f)+x(u[a+1356>>2]+x(u[a+1344>>2]*i)))));l=x(u[a+116>>2]-x(x(u[a+1368>>2]*g)+x(x(u[a+1364>>2]*f)+x(u[a+1372>>2]+x(u[a+1360>>2]*i)))));g=x(u[a+120>>2]-x(x(u[a+1384>>2]*g)+x(x(u[a+1380>>2]*f)+x(u[a+1388>>2]+x(u[a+1376>>2]*i)))));f=x(E(x(x(x(j*j)+x(l*l))+x(g*g))));i=u[a+328>>2];if(!!(f>i)){f=x(x(1)/f);k=x(i*x(k*f));l=x(i*x(l*f));j=x(i*x(j*f));g=x(i*x(g*f))}f=u[a+128>>2];L=x(j-f);j=u[a+332>>2];f=x(f+x(x(L*j)*b));u[a+128>>2]=f;e=a+140|0;m=u[e>>2];k=x(m+x(x(j*x(k-m))*b));u[e>>2]=k;e=a+136|0;m=u[e>>2];g=x(m+x(x(j*x(g-m))*b));u[e>>2]=g;e=a+132|0;m=u[e>>2];l=x(m+x(x(j*x(l-m))*b));u[e>>2]=l;j=x(E(x(x(g*g)+x(x(f*f)+x(l*l)))));if(!!(j>i)){j=x(x(1)/j);k=x(i*x(k*j));u[a+140>>2]=k;g=x(i*x(g*j));u[a+136>>2]=g;l=x(i*x(l*j));u[a+132>>2]=l;f=x(i*x(f*j));u[a+128>>2]=f}L=x(k*b);d=q[d+4>>2];k=x(n[q[q[d>>2]+32>>2]](d));j=x(L*k);i=x(x(g*b)*k);g=x(x(l*b)*k);f=x(x(f*b)*k);break a}Uj(c+112|0,d+180|0,a+336|0,a+168|0,n[q[q[d>>2]+8>>2]](d)|0,q[q[a+152>>2]+20>>2],u[a+828>>2],u[a+824>>2],q[a+164>>2],e,q[a+148>>2]+3364|0);i=u[c+120>>2];g=u[c+116>>2];f=u[c+112>>2];if(!q[q[a+148>>2]+2196>>2]){j=u[c+124>>2];break a}Us(c+112|0,a+1136|0);j=x(x(i*x(0))+x(x(g*x(0))+x(x(f*x(0))+x(0))));l=x(g*u[c+148>>2]);k=x(f*u[c+144>>2]);m=x(f*u[c+128>>2]);f=x(x(i*u[c+120>>2])+x(x(g*u[c+116>>2])+x(x(f*u[c+112>>2])+u[c+124>>2])));g=x(x(i*u[c+136>>2])+x(x(g*u[c+132>>2])+x(m+u[c+140>>2])));i=x(x(i*u[c+152>>2])+x(l+x(k+u[c+156>>2])))}e=a+80|0;u[c+160>>2]=f+u[c+160>>2];u[c+164>>2]=g+u[c+164>>2];u[c+168>>2]=i+u[c+168>>2];u[c+172>>2]=j+u[c+172>>2];d=q[a+148>>2];h=n[q[q[d>>2]+8>>2]](d)|0;t=d+1344|0;p=a+168|0;d=q[a+144>>2];Ss(c+112|0,a+416|0,t,p,h,q[q[a+152>>2]+20>>2],u[a+828>>2],u[a+824>>2],q[a+164>>2],q[a+148>>2]+3364|0,n[q[q[d>>2]+180>>2]](d,q[q[q[a+152>>2]+20>>2]+64>>2])|0);d=q[a+148>>2];h=n[q[q[d>>2]+8>>2]](d)|0;Vj(c+96|0,a+480|0,d+1792|0,p,h,q[q[a+152>>2]+20>>2],u[a+828>>2],u[a+824>>2],q[a+164>>2],q[a+148>>2]+3364|0);d=q[a+148>>2];if(r[d+1328|0]){u[a+268>>2]=j;u[a+264>>2]=i;u[a+260>>2]=g;u[a+256>>2]=f;t=d+496|0;d=n[q[q[d>>2]+8>>2]](d)|0;L=x(n[q[q[d>>2]+32>>2]](d));d=q[a+148>>2];d=n[q[q[d>>2]+8>>2]](d)|0;Xp(c+48|0,a+192|0,t,c+160|0,L,b,q[q[n[q[q[d>>2]+28>>2]](d)>>2]+8>>2]);u[c+160>>2]=u[c+48>>2]+u[c+160>>2];u[c+164>>2]=u[c+52>>2]+u[c+164>>2];u[c+168>>2]=u[c+56>>2]+u[c+168>>2];u[c+172>>2]=u[c+60>>2]+u[c+172>>2];d=q[a+148>>2]}h=q[c+164>>2];q[e>>2]=q[c+160>>2];q[e+4>>2]=h;h=q[c+172>>2];q[e+8>>2]=q[c+168>>2];q[e+12>>2]=h;n[q[q[d>>2]+84>>2]](d,a,q[a+156>>2],q[a+144>>2]);b:{if(q[q[a+148>>2]+2196>>2]){Us(c+48|0,a+1136|0);d=c+72|0;g=u[d>>2];O=u[c+76>>2];f=u[c+68>>2];h=c+148|0;m=u[h>>2];p=c+132|0;A=u[p>>2];s=c+152|0;B=u[s>>2];t=c+136|0;C=u[t>>2];l=u[c+56>>2];L=u[c+60>>2];j=u[c+48>>2];i=u[c+52>>2];D=u[c+144>>2];F=u[c+112>>2];G=u[c+128>>2];k=u[c+64>>2];H=u[c+116>>2];I=u[c+120>>2];e=c+156|0;z=u[e>>2];M=e;e=c+88|0;v=u[e>>2];K=c+140|0;J=u[K>>2];w=u[c+84>>2];N=u[c+124>>2];y=u[c+80>>2];u[M>>2]=x(z*v)+x(x(J*w)+x(u[c+92>>2]+x(N*y)));u[s>>2]=x(B*v)+x(x(C*w)+x(x(I*y)+x(0)));u[h>>2]=x(m*v)+x(x(A*w)+x(x(H*y)+x(0)));u[K>>2]=x(z*g)+x(x(J*f)+x(O+x(N*k)));u[t>>2]=x(B*g)+x(x(C*f)+x(x(I*k)+x(0)));u[p>>2]=x(m*g)+x(x(A*f)+x(x(H*k)+x(0)));u[c+144>>2]=x(D*v)+x(x(G*w)+x(x(F*y)+x(0)));u[c+128>>2]=x(D*g)+x(x(G*f)+x(x(F*k)+x(0)));u[c+124>>2]=x(x(L+x(j*N))+x(i*J))+x(l*z);u[c+120>>2]=x(x(x(j*I)+x(0))+x(i*C))+x(l*B);u[c+116>>2]=x(x(x(j*H)+x(0))+x(i*A))+x(l*m);u[c+112>>2]=x(x(x(j*F)+x(0))+x(i*G))+x(l*D);_s(c,c+96|0,c+112|0,c+160|0);h=q[c+44>>2];q[e>>2]=q[c+40>>2];q[e+4>>2]=h;e=q[c+36>>2];q[c+80>>2]=q[c+32>>2];q[c+84>>2]=e;e=q[c+28>>2];q[d>>2]=q[c+24>>2];q[d+4>>2]=e;break b}_s(c,c+96|0,c+112|0,c+160|0);d=q[c+44>>2];q[c+88>>2]=q[c+40>>2];q[c+92>>2]=d;d=q[c+36>>2];q[c+80>>2]=q[c+32>>2];q[c+84>>2]=d;d=q[c+28>>2];q[c+72>>2]=q[c+24>>2];q[c+76>>2]=d}e=q[c+20>>2];d=c- -64|0;q[d>>2]=q[c+16>>2];q[d+4>>2]=e;d=q[c+12>>2];q[c+56>>2]=q[c+8>>2];q[c+60>>2]=d;d=q[c+4>>2];q[c+48>>2]=q[c>>2];q[c+52>>2]=d;d=q[a+148>>2];if(q[d+180>>2]!=5){g=u[a+1352>>2];f=u[a+1348>>2];O=u[a+1356>>2];l=u[a+1368>>2];j=u[a+1364>>2];L=u[a+1372>>2];i=u[a+1360>>2];k=u[a+1344>>2];e=c+84|0;m=u[e>>2];h=c+68|0;A=u[h>>2];p=c+88|0;B=u[p>>2];s=c+72|0;C=u[s>>2];D=u[c+80>>2];F=u[c+48>>2];G=u[c+64>>2];H=u[c+52>>2];I=u[c+56>>2];t=c+92|0;z=u[t>>2];M=t;v=u[a+1384>>2];t=c+76|0;J=u[t>>2];w=u[a+1380>>2];N=u[c+60>>2];y=u[a+1376>>2];u[M>>2]=x(z*v)+x(x(J*w)+x(u[a+1388>>2]+x(N*y)));u[p>>2]=x(B*v)+x(x(C*w)+x(x(I*y)+x(0)));u[e>>2]=x(m*v)+x(x(A*w)+x(x(H*y)+x(0)));u[t>>2]=x(z*l)+x(x(J*j)+x(L+x(N*i)));u[s>>2]=x(B*l)+x(x(C*j)+x(x(I*i)+x(0)));u[h>>2]=x(m*l)+x(x(A*j)+x(x(H*i)+x(0)));u[c+60>>2]=x(x(O+x(k*N))+x(f*J))+x(g*z);u[c+56>>2]=x(x(x(k*I)+x(0))+x(f*C))+x(g*B);u[c+52>>2]=x(x(x(k*H)+x(0))+x(f*A))+x(g*m);u[c+48>>2]=x(x(x(k*F)+x(0))+x(f*G))+x(g*D);u[c+80>>2]=x(D*v)+x(x(G*w)+x(x(F*y)+x(0)));u[c+64>>2]=x(D*l)+x(x(G*j)+x(x(F*i)+x(0)))}if(r[d+1329|0]){e=q[q[a+152>>2]+20>>2];d=q[a+148>>2];h=n[q[q[d>>2]+8>>2]](d)|0;g=x(n[q[q[h>>2]+32>>2]](h));t=d+496|0;d=q[a+148>>2];d=n[q[q[d>>2]+8>>2]](d)|0;_p(a+192|0,t,a+96|0,g,e+16|0,b,q[q[n[q[q[d>>2]+28>>2]](d)>>2]+8>>2]);gt(c,a+304|0);b=u[c+24>>2];N=u[c+28>>2];g=u[c+20>>2];d=c+84|0;k=u[d>>2];e=c+68|0;m=u[e>>2];h=c+88|0;A=u[h>>2];p=c+72|0;B=u[p>>2];f=u[c+8>>2];O=u[c+12>>2];l=u[c>>2];j=u[c+4>>2];C=u[c+80>>2];D=u[c+48>>2];F=u[c+64>>2];i=u[c+16>>2];G=u[c+52>>2];H=u[c+56>>2];s=c+92|0;I=u[s>>2];t=s;z=u[c+40>>2];s=c+76|0;y=u[s>>2];v=u[c+36>>2];J=u[c+60>>2];w=u[c+32>>2];u[t>>2]=x(I*z)+x(x(y*v)+x(u[c+44>>2]+x(J*w)));u[h>>2]=x(A*z)+x(x(B*v)+x(x(H*w)+x(0)));u[d>>2]=x(k*z)+x(x(m*v)+x(x(G*w)+x(0)));u[s>>2]=x(I*b)+x(x(y*g)+x(N+x(J*i)));u[p>>2]=x(A*b)+x(x(B*g)+x(x(H*i)+x(0)));u[e>>2]=x(k*b)+x(x(m*g)+x(x(G*i)+x(0)));u[c+80>>2]=x(C*z)+x(x(F*v)+x(x(D*w)+x(0)));u[c+64>>2]=x(C*b)+x(x(F*g)+x(x(D*i)+x(0)));u[c+60>>2]=x(x(O+x(l*J))+x(j*y))+x(f*I);u[c+56>>2]=x(x(x(l*H)+x(0))+x(j*B))+x(f*A);u[c+52>>2]=x(x(x(l*G)+x(0))+x(j*m))+x(f*k);u[c+48>>2]=x(x(x(l*D)+x(0))+x(j*F))+x(f*C)}d=a+1184|0;s=q[a+828>>2];c:{if(r[a+1288|0]){e=a+1272|0;h=q[e+4>>2];q[d+40>>2]=q[e>>2];q[d+44>>2]=h;e=a+1264|0;h=q[e+4>>2];q[d+32>>2]=q[e>>2];q[d+36>>2]=h;e=a+1256|0;h=q[e+4>>2];q[d+24>>2]=q[e>>2];q[d+28>>2]=h;e=a+1248|0;h=q[e+4>>2];q[d+16>>2]=q[e>>2];q[d+20>>2]=h;e=a+1240|0;h=q[e+4>>2];q[d+8>>2]=q[e>>2];q[d+12>>2]=h;e=a+1232|0;h=q[e+4>>2];q[d>>2]=q[e>>2];q[d+4>>2]=h;break c}e=q[c+52>>2];q[d>>2]=q[c+48>>2];q[d+4>>2]=e;e=q[c+60>>2];q[d+8>>2]=q[c+56>>2];q[d+12>>2]=e;e=q[c+92>>2];q[d+40>>2]=q[c+88>>2];q[d+44>>2]=e;e=q[c+84>>2];q[d+32>>2]=q[c+80>>2];q[d+36>>2]=e;e=q[c+76>>2];q[d+24>>2]=q[c+72>>2];q[d+28>>2]=e;e=c- -64|0;h=q[e+4>>2];q[d+16>>2]=q[e>>2];q[d+20>>2]=h}e=q[c+60>>2];d=a+1240|0;q[d>>2]=q[c+56>>2];q[d+4>>2]=e;e=q[c+52>>2];t=a+1232|0;d=t;q[d>>2]=q[c+48>>2];q[d+4>>2]=e;d=c+88|0;p=q[d+4>>2];e=a+1272|0;q[e>>2]=q[d>>2];q[e+4>>2]=p;e=c+80|0;K=q[e+4>>2];h=a+1264|0;q[h>>2]=q[e>>2];q[h+4>>2]=K;h=c+72|0;M=q[h+4>>2];p=a+1256|0;q[p>>2]=q[h>>2];q[p+4>>2]=M;p=c- -64|0;M=q[p+4>>2];K=a+1248|0;q[K>>2]=q[p>>2];q[K+4>>2]=M;K=a+1284|0;M=q[K>>2];q[K>>2]=s;o[a+1288|0]=1;q[a+1280>>2]=M;Xs(c,t);s=q[c+12>>2];q[a+104>>2]=q[c+8>>2];q[a+108>>2]=s;s=q[c+4>>2];q[a+96>>2]=q[c>>2];q[a+100>>2]=s;t=q[d+4>>2];s=a+1336|0;q[s>>2]=q[d>>2];q[s+4>>2]=t;s=q[e+4>>2];d=a+1328|0;q[d>>2]=q[e>>2];q[d+4>>2]=s;e=q[h+4>>2];d=a+1320|0;q[d>>2]=q[h>>2];q[d+4>>2]=e;e=q[p+4>>2];d=a+1312|0;q[d>>2]=q[p>>2];q[d+4>>2]=e;e=q[c+60>>2];d=a+1304|0;q[d>>2]=q[c+56>>2];q[d+4>>2]=e;d=q[c+52>>2];q[a+1296>>2]=q[c+48>>2];q[a+1300>>2]=d}o[a+1393|0]=1}ue=c+176|0}function zw(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0;e=ue+ -64|0;ue=e;d=q[b+12>>2];p[e+30>>1]=2560;q[e+16>>2]=0;p[e+28>>1]=r[28020]|r[28021]<<8;q[e+40>>2]=d;q[e+32>>2]=1;q[e+36>>2]=1;d=r[28016]|r[28017]<<8|(r[28018]<<16|r[28019]<<24);q[e+20>>2]=r[28012]|r[28013]<<8|(r[28014]<<16|r[28015]<<24);q[e+24>>2]=d;f=q[c+4>>2];a:{if(f>>>0>2]){q[f>>2]=0;d=e+16|4;g=d+8|0;q[f+12>>2]=q[g>>2];h=q[d+4>>2];q[f+4>>2]=q[d>>2];q[f+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=e+32|0;q[f+24>>2]=q[d+8>>2];g=q[d+4>>2];q[f+16>>2]=q[d>>2];q[f+20>>2]=g;q[c+4>>2]=q[c+4>>2]+28;break a}Aw(c,e+16|0);if(o[e+31|0]>-1){break a}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break a}n[d](q[e+48>>2])}h=q[b+16>>2];f=e+24|0;d=f;q[d>>2]=0;q[d+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;wt(e+48|0);d=n[q[e+56>>2]](e+48|0,16)|0;g=q[q[e+60>>2]+4>>2];if(g){n[g](q[e+48>>2])}q[f>>2]=14;q[f+4>>2]=-2147483632;q[e+20>>2]=d;o[d+14|0]=0;f=r[28033]|r[28034]<<8|(r[28035]<<16|r[28036]<<24);g=r[28029]|r[28030]<<8|(r[28031]<<16|r[28032]<<24);o[d+6|0]=g;o[d+7|0]=g>>>8;o[d+8|0]=g>>>16;o[d+9|0]=g>>>24;o[d+10|0]=f;o[d+11|0]=f>>>8;o[d+12|0]=f>>>16;o[d+13|0]=f>>>24;f=r[28027]|r[28028]<<8|(r[28029]<<16|r[28030]<<24);g=r[28023]|r[28024]<<8|(r[28025]<<16|r[28026]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=f;o[d+5|0]=f>>>8;o[d+6|0]=f>>>16;o[d+7|0]=f>>>24;q[e+40>>2]=h;q[e+32>>2]=1;q[e+36>>2]=1;f=q[c+4>>2];b:{if(f>>>0>2]){q[f>>2]=q[e+16>>2];d=e+16|4;g=d+8|0;q[f+12>>2]=q[g>>2];h=q[d+4>>2];q[f+4>>2]=q[d>>2];q[f+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=e+32|0;q[f+24>>2]=q[d+8>>2];g=q[d+4>>2];q[f+16>>2]=q[d>>2];q[f+20>>2]=g;q[c+4>>2]=q[c+4>>2]+28;break b}Aw(c,e+16|0);if(o[e+31|0]>-1){break b}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break b}n[d](q[e+48>>2])}h=q[b+20>>2];f=e+24|0;d=f;q[d>>2]=0;q[d+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;wt(e+48|0);d=n[q[e+56>>2]](e+48|0,16)|0;g=q[q[e+60>>2]+4>>2];if(g){n[g](q[e+48>>2])}q[f>>2]=11;q[f+4>>2]=-2147483632;q[e+20>>2]=d;o[d+11|0]=0;f=r[28045]|r[28046]<<8|(r[28047]<<16|r[28048]<<24);o[d+7|0]=f;o[d+8|0]=f>>>8;o[d+9|0]=f>>>16;o[d+10|0]=f>>>24;f=r[28042]|r[28043]<<8|(r[28044]<<16|r[28045]<<24);g=r[28038]|r[28039]<<8|(r[28040]<<16|r[28041]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=f;o[d+5|0]=f>>>8;o[d+6|0]=f>>>16;o[d+7|0]=f>>>24;q[e+40>>2]=h;q[e+32>>2]=0;q[e+36>>2]=1;f=q[c+4>>2];c:{if(f>>>0>2]){q[f>>2]=q[e+16>>2];d=e+16|4;g=d+8|0;q[f+12>>2]=q[g>>2];h=q[d+4>>2];q[f+4>>2]=q[d>>2];q[f+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=e+32|0;q[f+24>>2]=q[d+8>>2];g=q[d+4>>2];q[f+16>>2]=q[d>>2];q[f+20>>2]=g;q[c+4>>2]=q[c+4>>2]+28;break c}Aw(c,e+16|0);if(o[e+31|0]>-1){break c}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break c}n[d](q[e+48>>2])}h=q[b+24>>2];f=e+24|0;d=f;q[d>>2]=0;q[d+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;wt(e+48|0);d=n[q[e+56>>2]](e+48|0,32)|0;g=q[q[e+60>>2]+4>>2];if(g){n[g](q[e+48>>2])}q[f>>2]=18;q[f+4>>2]=-2147483616;q[e+20>>2]=d;o[d+18|0]=0;f=r[28066]|r[28067]<<8;o[d+16|0]=f;o[d+17|0]=f>>>8;f=r[28062]|r[28063]<<8|(r[28064]<<16|r[28065]<<24);g=r[28058]|r[28059]<<8|(r[28060]<<16|r[28061]<<24);o[d+8|0]=g;o[d+9|0]=g>>>8;o[d+10|0]=g>>>16;o[d+11|0]=g>>>24;o[d+12|0]=f;o[d+13|0]=f>>>8;o[d+14|0]=f>>>16;o[d+15|0]=f>>>24;f=r[28054]|r[28055]<<8|(r[28056]<<16|r[28057]<<24);g=r[28050]|r[28051]<<8|(r[28052]<<16|r[28053]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=f;o[d+5|0]=f>>>8;o[d+6|0]=f>>>16;o[d+7|0]=f>>>24;q[e+40>>2]=h;q[e+32>>2]=0;q[e+36>>2]=1;f=q[c+4>>2];d:{if(f>>>0>2]){q[f>>2]=q[e+16>>2];d=e+16|4;g=d+8|0;q[f+12>>2]=q[g>>2];h=q[d+4>>2];q[f+4>>2]=q[d>>2];q[f+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=e+32|0;q[f+24>>2]=q[d+8>>2];g=q[d+4>>2];q[f+16>>2]=q[d>>2];q[f+20>>2]=g;q[c+4>>2]=q[c+4>>2]+28;break d}Aw(c,e+16|0);if(o[e+31|0]>-1){break d}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break d}n[d](q[e+48>>2])}h=q[b+28>>2];f=e+24|0;d=f;q[d>>2]=0;q[d+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;wt(e+48|0);d=n[q[e+56>>2]](e+48|0,16)|0;g=q[q[e+60>>2]+4>>2];if(g){n[g](q[e+48>>2])}q[f>>2]=14;q[f+4>>2]=-2147483632;q[e+20>>2]=d;o[d+14|0]=0;f=r[28079]|r[28080]<<8|(r[28081]<<16|r[28082]<<24);g=r[28075]|r[28076]<<8|(r[28077]<<16|r[28078]<<24);o[d+6|0]=g;o[d+7|0]=g>>>8;o[d+8|0]=g>>>16;o[d+9|0]=g>>>24;o[d+10|0]=f;o[d+11|0]=f>>>8;o[d+12|0]=f>>>16;o[d+13|0]=f>>>24;f=r[28073]|r[28074]<<8|(r[28075]<<16|r[28076]<<24);g=r[28069]|r[28070]<<8|(r[28071]<<16|r[28072]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=f;o[d+5|0]=f>>>8;o[d+6|0]=f>>>16;o[d+7|0]=f>>>24;q[e+40>>2]=h;q[e+32>>2]=0;q[e+36>>2]=1;f=q[c+4>>2];e:{if(f>>>0>2]){q[f>>2]=q[e+16>>2];d=e+16|4;g=d+8|0;q[f+12>>2]=q[g>>2];h=q[d+4>>2];q[f+4>>2]=q[d>>2];q[f+8>>2]=h;q[d>>2]=0;q[d+4>>2]=0;q[g>>2]=0;d=e+32|0;q[f+24>>2]=q[d+8>>2];g=q[d+4>>2];q[f+16>>2]=q[d>>2];q[f+20>>2]=g;q[c+4>>2]=q[c+4>>2]+28;break e}Aw(c,e+16|0);if(o[e+31|0]>-1){break e}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break e}n[d](q[e+48>>2])}h=q[b+32>>2];f:{if((n[q[q[a>>2]+104>>2]](a)|0)<1){break f}j=e+32|0;b=e+16|4;i=e+24|0;g=0;while(1){g:{k=n[q[q[a>>2]+96>>2]](a,g)|0;q[i>>2]=0;q[i+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;f=sV(k);if(f>>>0>=4294967280){break g}h:{i:{if(f>>>0>=11){wt(e+48|0);m=f+16&-16;d=n[q[e+56>>2]](e+48|0,m)|0;l=q[q[e+60>>2]+4>>2];if(l){n[l](q[e+48>>2])}q[e+20>>2]=d;q[e+24>>2]=f;q[e+28>>2]=m|-2147483648;break i}o[e+31|0]=f;d=b;if(!f){break h}}kV(d,k,f)}o[d+f|0]=0;q[e+40>>2]=h;q[e+32>>2]=0;q[e+36>>2]=1;d=q[c+4>>2];j:{if(d>>>0>2]){q[d>>2]=q[e+16>>2];f=b+8|0;q[d+12>>2]=q[f>>2];k=q[b+4>>2];q[d+4>>2]=q[b>>2];q[d+8>>2]=k;q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;q[d+24>>2]=q[j+8>>2];f=q[j+4>>2];q[d+16>>2]=q[j>>2];q[d+20>>2]=f;q[c+4>>2]=q[c+4>>2]+28;break j}Aw(c,e+16|0);if(o[e+31|0]>-1){break j}d=q[e+28>>2];f=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,f,d&2147483647);d=q[q[e+60>>2]+4>>2];if(!d){break j}n[d](q[e+48>>2])}h=h+16|0;g=g+1|0;if((g|0)<(n[q[q[a>>2]+104>>2]](a)|0)){continue}break f}break}kT();F()}k:{b=q[a+68>>2];d=q[a+72>>2];if((b|0)!=(d|0)){k=e+32|0;f=e+16|4;m=e+24|0;j=0;while(1){g=0;if((d-b|0)/244>>>0<=j>>>0){break k}l:{m:{while(1){q[m>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;i=w(j,244)+b|0;b=o[i+11|0];n:{if((b|0)<=-1){b=q[i+4>>2];i=q[i>>2];break n}b=b&255}d=b+1|0;if(d>>>0<4294967280){o:{p:{if(d>>>0>=11){l=b+17&-16;d=_S(l);q[e+24>>2]=l|-2147483648;q[e+16>>2]=d;q[e+20>>2]=b;break p}o[e+27|0]=b;d=e+16|0;if(!b){break o}}kV(d,i,b)}o[b+d|0]=0;yT(e+16|0,28084,1);PT(e+48|0,g);b=r[e+59|0];d=b<<24>>24<0;b=yT(e+16|0,d?q[e+48>>2]:e+48|0,d?q[e+52>>2]:b);d=b+8|0;q[e+8>>2]=q[d>>2];i=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=i;q[b>>2]=0;q[b+4>>2]=0;q[d>>2]=0;if(o[e+59|0]<=-1){_U(q[e+48>>2])}if(o[e+27|0]<=-1){_U(q[e+16>>2])}b=q[e>>2];d=o[e+11|0];q[m>>2]=0;q[m+4>>2]=0;q[e+16>>2]=0;q[e+20>>2]=0;i=(d|0)<0?b:e;b=sV(i);if(b>>>0>=4294967280){break m}q:{r:{if(b>>>0>=11){wt(e+48|0);l=b+16&-16;d=n[q[e+56>>2]](e+48|0,l)|0;s=q[q[e+60>>2]+4>>2];if(s){n[s](q[e+48>>2])}q[e+20>>2]=d;q[e+24>>2]=b;q[e+28>>2]=l|-2147483648;break r}o[e+31|0]=b;d=f;if(!b){break q}}kV(d,i,b)}o[b+d|0]=0;q[e+40>>2]=h;q[e+32>>2]=0;q[e+36>>2]=1;b=q[c+4>>2];s:{if(b>>>0>2]){q[b>>2]=q[e+16>>2];d=f+8|0;q[b+12>>2]=q[d>>2];i=q[f+4>>2];q[b+4>>2]=q[f>>2];q[b+8>>2]=i;q[f>>2]=0;q[f+4>>2]=0;q[d>>2]=0;q[b+24>>2]=q[k+8>>2];d=q[k+4>>2];q[b+16>>2]=q[k>>2];q[b+20>>2]=d;q[c+4>>2]=q[c+4>>2]+28;break s}Aw(c,e+16|0);if(o[e+31|0]>-1){break s}b=q[e+28>>2];d=q[e+20>>2];xt(e+48|0);n[q[e+56>>2]](e+48|0,d,b&2147483647);b=q[q[e+60>>2]+4>>2];if(!b){break s}n[b](q[e+48>>2])}if(o[e+11|0]<=-1){_U(q[e>>2])}h=h+16|0;g=g+1|0;if((g|0)==13){break l}b=q[a+68>>2];if((q[a+72>>2]-b|0)/244>>>0<=j>>>0){break k}continue}break}kT();F()}kT();F()}j=j+1|0;d=q[a+72>>2];b=q[a+68>>2];if(j>>>0<(d-b|0)/244>>>0){continue}break}}ue=e- -64|0;return}lU();F()}function Zt(a,b,c,d,e,f){var g=0,h=0;g=ue-48|0;ue=g;a:{if(!c){b:{if(d){if(n[q[q[b>>2]+20>>2]](b)){Ft(a,16160,721);break b}Ft(a,16896,834);break b}Ft(a,17744,1326)}c:{if((n[q[q[b>>2]+112>>2]](b)|0)<1){break c}d:{if(d){e:{f:{c=(n[q[q[b>>2]+112>>2]](b)|0)+ -1|0;if(c>>>0>15){break f}g:{switch(c-1|0){default:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;q[g+16>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+20|0]=r[13382];o[g+21|0]=0;o[g+27|0]=5;break e;case 0:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=845374838;o[g+27|0]=4;break e;case 1:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=862152054;o[g+27|0]=4;break e;case 2:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=878929270;o[g+27|0]=4;break e;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break f;case 14:break g}}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=880042349;o[g+27|0]=4;break e}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0}c=zT(g+16|0,19071);e=c+8|0;q[g+40>>2]=q[e>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=r[g+43|0];e=c<<24>>24<0;Ft(a,e?q[g+32>>2]:g+32|0,e?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]>-1){break d}_U(q[g+16>>2]);break d}c=Ft(a,19102,34);EH(g+32|0,q[q[c>>2]+ -12>>2]+c|0);e=pL(g+32|0,370576);e=n[q[q[e>>2]+28>>2]](e,10)|0;kL(g+32|0);pI(c,e);DH(c);q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+27|0]=4;o[g+20|0]=0;q[g+16>>2]=878929270;c=zT(g+16|0,19137);e=c+8|0;q[g+40>>2]=q[e>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=r[g+43|0];e=c<<24>>24<0;Ft(a,e?q[g+32>>2]:g+32|0,e?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]<=-1){_U(q[g+16>>2])}c=Ft(a,19187,6);EH(g+32|0,q[q[c>>2]+ -12>>2]+c|0);e=pL(g+32|0,370576);e=n[q[q[e>>2]+28>>2]](e,10)|0;kL(g+32|0);pI(c,e);DH(c)}c=(n[q[q[b>>2]+112>>2]](b)|0)+ -1|0;h:{if(c>>>0<=3){i:{switch(c-1|0){default:q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;o[g+2|0]=0;p[g>>1]=30766;o[g+11|0]=2;break h;case 0:q[g+4>>2]=0;q[g+8>>2]=50331648;o[g+3|0]=0;p[g>>1]=r[13384]|r[13385]<<8;o[g+2|0]=r[13386];break h;case 1:q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;o[g+4|0]=0;q[g>>2]=2054780974;o[g+11|0]=4;break h;case 2:break i}}q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;q[g>>2]=r[13388]|r[13389]<<8|(r[13390]<<16|r[13391]<<24);o[g+4|0]=r[13392];o[g+5|0]=0;o[g+11|0]=5;break h}q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0}c=DT(g,19194);e=c+8|0;q[g+24>>2]=q[e>>2];h=q[c+4>>2];q[g+16>>2]=q[c>>2];q[g+20>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=zT(g+16|0,19222);e=c+8|0;q[g+40>>2]=q[e>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=r[g+43|0];e=c<<24>>24<0;Ft(a,e?q[g+32>>2]:g+32|0,e?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]<=-1){_U(q[g+16>>2])}if(o[g+11|0]>-1){break c}_U(q[g>>2])}j:{if((n[q[q[b>>2]+120>>2]](b)|0)<1){break j}k:{if(d){l:{m:{c=(n[q[q[b>>2]+120>>2]](b)|0)+ -1|0;if(c>>>0>15){break m}n:{switch(c-1|0){default:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;q[g+16>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+20|0]=r[13382];o[g+21|0]=0;o[g+27|0]=5;break l;case 0:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=845374838;o[g+27|0]=4;break l;case 1:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=862152054;o[g+27|0]=4;break l;case 2:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=878929270;o[g+27|0]=4;break l;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break m;case 14:break n}}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=880042349;o[g+27|0]=4;break l}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0}c=zT(g+16|0,19225);e=c+8|0;q[g+40>>2]=q[e>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=r[g+43|0];e=c<<24>>24<0;Ft(a,e?q[g+32>>2]:g+32|0,e?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]>-1){break k}_U(q[g+16>>2]);break k}c=Ft(a,19102,34);EH(g+32|0,q[q[c>>2]+ -12>>2]+c|0);e=pL(g+32|0,370576);e=n[q[q[e>>2]+28>>2]](e,10)|0;kL(g+32|0);pI(c,e);DH(c);q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+27|0]=4;o[g+20|0]=0;q[g+16>>2]=878929270;c=zT(g+16|0,19256);e=c+8|0;q[g+40>>2]=q[e>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[e>>2]=0;c=r[g+43|0];e=c<<24>>24<0;Ft(a,e?q[g+32>>2]:g+32|0,e?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]<=-1){_U(q[g+16>>2])}c=Ft(a,19187,6);EH(g+32|0,q[q[c>>2]+ -12>>2]+c|0);e=pL(g+32|0,370576);e=n[q[q[e>>2]+28>>2]](e,10)|0;kL(g+32|0);pI(c,e);DH(c)}b=(n[q[q[b>>2]+120>>2]](b)|0)+ -1|0;o:{if(b>>>0<=3){p:{switch(b-1|0){default:q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;o[g+2|0]=0;p[g>>1]=30766;o[g+11|0]=2;break o;case 0:q[g+4>>2]=0;q[g+8>>2]=50331648;o[g+3|0]=0;p[g>>1]=r[13384]|r[13385]<<8;o[g+2|0]=r[13386];break o;case 1:q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;o[g+4|0]=0;q[g>>2]=2054780974;o[g+11|0]=4;break o;case 2:break p}}q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;q[g>>2]=r[13388]|r[13389]<<8|(r[13390]<<16|r[13391]<<24);o[g+4|0]=r[13392];o[g+5|0]=0;o[g+11|0]=5;break o}q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0}b=DT(g,19306);c=b+8|0;q[g+24>>2]=q[c>>2];e=q[b+4>>2];q[g+16>>2]=q[b>>2];q[g+20>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[c>>2]=0;b=zT(g+16|0,19222);c=b+8|0;q[g+40>>2]=q[c>>2];e=q[b+4>>2];q[g+32>>2]=q[b>>2];q[g+36>>2]=e;q[b>>2]=0;q[b+4>>2]=0;q[c>>2]=0;b=r[g+43|0];c=b<<24>>24<0;Ft(a,c?q[g+32>>2]:g+32|0,c?q[g+36>>2]:b);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]<=-1){_U(q[g+16>>2])}if(o[g+11|0]>-1){break j}_U(q[g>>2])}b=r[f+11|0];c=b<<24>>24<0;Ft(a,c?q[f>>2]:f,c?q[f+4>>2]:b);if(d){Ft(a,19344,530);break a}Ft(a,19888,547);break a}Ft(a,20448,2703);q:{if((n[q[q[b>>2]+112>>2]](b)|0)<1){break q}r:{s:{c=(n[q[q[b>>2]+112>>2]](b)|0)+ -1|0;if(c>>>0>15){break s}t:{switch(c-1|0){default:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;q[g+16>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+20|0]=r[13382];o[g+21|0]=0;o[g+27|0]=5;break r;case 0:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=845374838;o[g+27|0]=4;break r;case 1:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=862152054;o[g+27|0]=4;break r;case 2:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=878929270;o[g+27|0]=4;break r;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break s;case 14:break t}}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=880042349;o[g+27|0]=4;break r}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0}c=zT(g+16|0,23152);d=c+8|0;q[g+40>>2]=q[d>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[d>>2]=0;c=r[g+43|0];d=c<<24>>24<0;Ft(a,d?q[g+32>>2]:g+32|0,d?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]>-1){break q}_U(q[g+16>>2])}u:{if((n[q[q[b>>2]+120>>2]](b)|0)<1){break u}v:{w:{c=(n[q[q[b>>2]+120>>2]](b)|0)+ -1|0;if(c>>>0>15){break w}x:{switch(c-1|0){default:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;q[g+16>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[g+20|0]=r[13382];o[g+21|0]=0;o[g+27|0]=5;break v;case 0:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=845374838;o[g+27|0]=4;break v;case 1:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=862152054;o[g+27|0]=4;break v;case 2:q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=878929270;o[g+27|0]=4;break v;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break w;case 14:break x}}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0;o[g+20|0]=0;q[g+16>>2]=880042349;o[g+27|0]=4;break v}q[g+24>>2]=0;q[g+16>>2]=0;q[g+20>>2]=0}c=zT(g+16|0,23183);d=c+8|0;q[g+40>>2]=q[d>>2];h=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=h;q[c>>2]=0;q[c+4>>2]=0;q[d>>2]=0;c=r[g+43|0];d=c<<24>>24<0;Ft(a,d?q[g+32>>2]:g+32|0,d?q[g+36>>2]:c);if(o[g+43|0]<=-1){_U(q[g+32>>2])}if(o[g+27|0]>-1){break u}_U(q[g+16>>2])}c=r[f+11|0];d=c<<24>>24<0;Ft(a,d?q[f>>2]:f,d?q[f+4>>2]:c);if((e&-2)==2){Ft(a,23216,323);break a}if(!n[q[q[b>>2]+12>>2]](b)){Ft(a,23552,583);break a}if((n[q[q[b>>2]+12>>2]](b)|0)!=1){break a}Ft(a,24144,123)}ue=g+48|0}function bK(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0,u=0,v=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;h=ue-8960|0;ue=h;A=d+e|0;G=0-A|0;a:{b:{while(1){c:{if((c|0)!=48){if((c|0)!=46){break a}c=q[b+4>>2];if(c>>>0>=t[b+104>>2]){break c}q[b+4>>2]=c+1;c=r[c|0];break b}c=q[b+4>>2];if(c>>>0>2]){o=1;q[b+4>>2]=c+1;c=r[c|0]}else{o=1;c=HJ(b)}continue}break}c=HJ(b)}k=1;if((c|0)!=48){break a}while(1){i=i+ -1|0;c=j+ -1|0;if(c>>>0<4294967295){i=i+1|0}j=c;c=q[b+4>>2];d:{if(c>>>0>2]){q[b+4>>2]=c+1;c=r[c|0];break d}c=HJ(b)}if((c|0)==48){continue}break}o=1}q[h+768>>2]=0;H=a;I=a;e:{f:{l=(c|0)==46;x=c+ -48|0;g:{h:{i:{j:{if(!(l|x>>>0<=9)){break j}while(1){k:{if(l&1){if(!k){j=p;i=m;k=1;break k}o=(o|0)!=0;break i}l=p+1|0;if(l>>>0<1){m=m+1|0}p=l;if((n|0)<=2044){z=(c|0)!=48?p:z;l=(h+768|0)+(n<<2)|0;o=l;if(s){x=(w(q[l>>2],10)+c|0)+ -48|0}q[o>>2]=x;o=1;l=s+1|0;c=(l|0)==9;s=c?0:l;n=c+n|0;break k}if((c|0)==48){break k}q[h+8944>>2]=q[h+8944>>2]|1}c=q[b+4>>2];l:{if(c>>>0>2]){q[b+4>>2]=c+1;c=r[c|0];break l}c=HJ(b)}l=(c|0)==46;x=c+ -48|0;if(l|x>>>0<10){continue}break}}j=k?j:p;i=k?i:m;if(!(!o|(c&-33)!=69)){c=cK(b,g);l=we;k=l;m:{if(c|(k|0)!=-2147483648){break m}if(!g){break g}c=0;k=0;if(!q[b+104>>2]){break m}q[b+4>>2]=q[b+4>>2]+ -1}i=i+k|0;b=c+j|0;if(b>>>0>>0){i=i+1|0}j=b;break f}o=(o|0)!=0;if((c|0)<0){break h}}if(!q[b+104>>2]){break h}q[b+4>>2]=q[b+4>>2]+ -1}if(o){break f}q[91802]=28}GJ(b,0,0);j=0;i=0;c=0;b=0;break e}b=q[h+768>>2];if(!b){SJ(h,+(f|0)*0);j=q[h+8>>2];i=q[h+12>>2];c=q[h+4>>2];b=q[h>>2];break e}if(!((j|0)!=(p|0)|(i|0)!=(m|0)|((m|0)>0?1:(m|0)>=0?p>>>0<=9?0:1:0)|(b>>>d|0?(d|0)<=30:0))){OJ(h+48|0,f);WJ(h+32|0,b);QJ(h+16|0,q[h+48>>2],q[h+52>>2],q[h+56>>2],q[h+60>>2],q[h+32>>2],q[h+36>>2],q[h+40>>2],q[h+44>>2]);j=q[h+24>>2];i=q[h+28>>2];c=q[h+20>>2];b=q[h+16>>2];break e}b=(e|0)/-2|0;c=j>>>0<=b>>>0?0:1;b=b>>31;if((i|0)>(b|0)?1:(i|0)>=(b|0)?c:0){q[91802]=68;OJ(h+96|0,f);QJ(h+80|0,q[h+96>>2],q[h+100>>2],q[h+104>>2],q[h+108>>2],-1,-1,-1,2147418111);QJ(h- -64|0,q[h+80>>2],q[h+84>>2],q[h+88>>2],q[h+92>>2],-1,-1,-1,2147418111);j=q[h+72>>2];i=q[h+76>>2];c=q[h+68>>2];b=q[h+64>>2];break e}b=e+ -226|0;c=j>>>0>=b>>>0?0:1;b=b>>31;if((i|0)<(b|0)?1:(i|0)<=(b|0)?c:0){q[91802]=68;OJ(h+144|0,f);QJ(h+128|0,q[h+144>>2],q[h+148>>2],q[h+152>>2],q[h+156>>2],0,0,0,65536);QJ(h+112|0,q[h+128>>2],q[h+132>>2],q[h+136>>2],q[h+140>>2],0,0,0,65536);j=q[h+120>>2];i=q[h+124>>2];c=q[h+116>>2];b=q[h+112>>2];break e}if(s){if((s|0)<=8){c=(h+768|0)+(n<<2)|0;b=q[c>>2];while(1){b=w(b,10);s=s+1|0;if((s|0)!=9){continue}break}q[c>>2]=b}n=n+1|0}n:{k=j;if((z|0)>8|(z|0)>(k|0)|(k|0)>17){break n}if((k|0)==9){OJ(h+192|0,f);WJ(h+176|0,q[h+768>>2]);QJ(h+160|0,q[h+192>>2],q[h+196>>2],q[h+200>>2],q[h+204>>2],q[h+176>>2],q[h+180>>2],q[h+184>>2],q[h+188>>2]);j=q[h+168>>2];i=q[h+172>>2];c=q[h+164>>2];b=q[h+160>>2];break e}if((k|0)<=8){OJ(h+272|0,f);WJ(h+256|0,q[h+768>>2]);QJ(h+240|0,q[h+272>>2],q[h+276>>2],q[h+280>>2],q[h+284>>2],q[h+256>>2],q[h+260>>2],q[h+264>>2],q[h+268>>2]);OJ(h+224|0,q[(0-k<<2)+350512>>2]);ZJ(h+208|0,q[h+240>>2],q[h+244>>2],q[h+248>>2],q[h+252>>2],q[h+224>>2],q[h+228>>2],q[h+232>>2],q[h+236>>2]);j=q[h+216>>2];i=q[h+220>>2];c=q[h+212>>2];b=q[h+208>>2];break e}b=(w(k,-3)+d|0)+27|0;c=q[h+768>>2];if(c>>>b|0?(b|0)<=30:0){break n}OJ(h+352|0,f);WJ(h+336|0,c);QJ(h+320|0,q[h+352>>2],q[h+356>>2],q[h+360>>2],q[h+364>>2],q[h+336>>2],q[h+340>>2],q[h+344>>2],q[h+348>>2]);OJ(h+304|0,q[(k<<2)+350440>>2]);QJ(h+288|0,q[h+320>>2],q[h+324>>2],q[h+328>>2],q[h+332>>2],q[h+304>>2],q[h+308>>2],q[h+312>>2],q[h+316>>2]);j=q[h+296>>2];i=q[h+300>>2];c=q[h+292>>2];b=q[h+288>>2];break e}s=0;b=(k|0)%9|0;o:{if(!b){c=0;break o}g=(k|0)>-1?b:b+9|0;p:{if(!n){c=0;n=0;break p}i=q[(0-g<<2)+350512>>2];l=1e9/(i|0)|0;o=0;b=0;c=0;while(1){j=o;m=(h+768|0)+(b<<2)|0;p=q[m>>2];o=(p>>>0)/(i>>>0)|0;j=j+o|0;q[m>>2]=j;j=!j&(b|0)==(c|0);c=j?c+1&2047:c;k=j?k+ -9|0:k;o=w(l,p-w(i,o)|0);b=b+1|0;if((n|0)!=(b|0)){continue}break}if(!o){break p}q[(h+768|0)+(n<<2)>>2]=o;n=n+1|0}k=(k-g|0)+9|0}while(1){p=(h+768|0)+(c<<2)|0;q:{while(1){if((k|0)!=36|t[p>>2]>=10384593?(k|0)>=36:0){break q}x=n+2047|0;o=0;l=n;while(1){n=l;m=x&2047;l=(h+768|0)+(m<<2)|0;b=q[l>>2];i=b>>>3|0;g=b<<29;b=g+o|0;if(b>>>0>>0){i=i+1|0}j=b;g=0;r:{if(!i&b>>>0<1000000001|i>>>0<0){break r}g=xW(b,i,1e9,0);j=j-vW(g,we,1e9,0)|0}o=g;q[l>>2]=j;l=(m|0)!=(n+ -1&2047)?n:(c|0)==(m|0)?n:j?n:m;x=m+ -1|0;if((c|0)!=(m|0)){continue}break}s=s+ -29|0;if(!o){continue}break}c=c+ -1&2047;if((l|0)==(c|0)){b=(h+768|0)+((l+2046&2047)<<2)|0;n=l+ -1&2047;q[b>>2]=q[b>>2]|q[(h+768|0)+(n<<2)>>2]}k=k+9|0;q[(h+768|0)+(c<<2)>>2]=o;continue}break}s:{t:while(1){g=n+1&2047;j=(h+768|0)+((n+ -1&2047)<<2)|0;while(1){i=(k|0)>45?9:1;u:{while(1){l=c;b=0;v:{while(1){w:{c=b+l&2047;if((c|0)==(n|0)){break w}c=q[(h+768|0)+(c<<2)>>2];m=q[(b<<2)+350464>>2];if(c>>>0>>0){break w}if(c>>>0>m>>>0){break v}b=b+1|0;if((b|0)!=4){continue}}break}if((k|0)!=36){break v}j=0;i=0;b=0;p=0;m=0;while(1){c=b+l&2047;if((c|0)==(n|0)){n=n+1&2047;q[((n<<2)+h|0)+764>>2]=0}QJ(h+752|0,j,i,p,m,0,0,1342177280,1075633366);WJ(h+736|0,q[(h+768|0)+(c<<2)>>2]);RJ(h+720|0,q[h+752>>2],q[h+756>>2],q[h+760>>2],q[h+764>>2],q[h+736>>2],q[h+740>>2],q[h+744>>2],q[h+748>>2]);p=q[h+728>>2];m=q[h+732>>2];j=q[h+720>>2];i=q[h+724>>2];b=b+1|0;if((b|0)!=4){continue}break}OJ(h+704|0,f);QJ(h+688|0,j,i,p,m,q[h+704>>2],q[h+708>>2],q[h+712>>2],q[h+716>>2]);p=q[h+696>>2];m=q[h+700>>2];j=0;i=0;c=q[h+688>>2];k=q[h+692>>2];o=s+113|0;e=o-e|0;g=(e|0)<(d|0);d=g?(e|0)>0?e:0:d;if((d|0)<=112){break u}break s}s=i+s|0;c=n;if((l|0)==(c|0)){continue}break}m=1e9>>>i|0;p=-1<>2];b=(x>>>i|0)+b|0;q[o>>2]=b;b=!b&(c|0)==(l|0);c=b?c+1&2047:c;k=b?k+ -9|0:k;b=w(m,p&x);l=l+1&2047;if((l|0)!=(n|0)){continue}break}if(!b){continue}if((c|0)!=(g|0)){q[(h+768|0)+(n<<2)>>2]=b;n=g;continue t}q[j>>2]=q[j>>2]|1;c=g;continue}break}break}SJ(h+640|0,iV(1,225-d|0));VJ(h+672|0,q[h+640>>2],q[h+644>>2],q[h+648>>2],q[h+652>>2],c,k,p,m);B=q[h+680>>2];C=q[h+684>>2];D=q[h+672>>2];E=q[h+676>>2];SJ(h+624|0,iV(1,113-d|0));gV(h+656|0,c,k,p,m,q[h+624>>2],q[h+628>>2],q[h+632>>2],q[h+636>>2]);j=q[h+656>>2];i=q[h+660>>2];u=q[h+664>>2];v=q[h+668>>2];XJ(h+608|0,c,k,p,m,j,i,u,v);RJ(h+592|0,D,E,B,C,q[h+608>>2],q[h+612>>2],q[h+616>>2],q[h+620>>2]);p=q[h+600>>2];m=q[h+604>>2];c=q[h+592>>2];k=q[h+596>>2]}b=l+4&2047;x:{if((b|0)==(n|0)){break x}b=q[(h+768|0)+(b<<2)>>2];y:{if(b>>>0<=499999999){if((l+5&2047)==(n|0)?!b:0){break y}SJ(h+480|0,+(f|0)*.25);RJ(h+464|0,j,i,u,v,q[h+480>>2],q[h+484>>2],q[h+488>>2],q[h+492>>2]);u=q[h+472>>2];v=q[h+476>>2];j=q[h+464>>2];i=q[h+468>>2];break y}if((b|0)!=5e8){SJ(h+576|0,+(f|0)*.75);RJ(h+560|0,j,i,u,v,q[h+576>>2],q[h+580>>2],q[h+584>>2],q[h+588>>2]);u=q[h+568>>2];v=q[h+572>>2];j=q[h+560>>2];i=q[h+564>>2];break y}F=+(f|0);if((l+5&2047)==(n|0)){SJ(h+512|0,F*.5);RJ(h+496|0,j,i,u,v,q[h+512>>2],q[h+516>>2],q[h+520>>2],q[h+524>>2]);u=q[h+504>>2];v=q[h+508>>2];j=q[h+496>>2];i=q[h+500>>2];break y}SJ(h+544|0,F*.75);RJ(h+528|0,j,i,u,v,q[h+544>>2],q[h+548>>2],q[h+552>>2],q[h+556>>2]);u=q[h+536>>2];v=q[h+540>>2];j=q[h+528>>2];i=q[h+532>>2]}if((d|0)>111){break x}gV(h+448|0,j,i,u,v,0,0,0,1073676288);if(TJ(q[h+448>>2],q[h+452>>2],q[h+456>>2],q[h+460>>2],0,0,0,0)){break x}RJ(h+432|0,j,i,u,v,0,0,0,1073676288);u=q[h+440>>2];v=q[h+444>>2];j=q[h+432>>2];i=q[h+436>>2]}RJ(h+416|0,c,k,p,m,j,i,u,v);XJ(h+400|0,q[h+416>>2],q[h+420>>2],q[h+424>>2],q[h+428>>2],D,E,B,C);p=q[h+408>>2];m=q[h+412>>2];c=q[h+400>>2];k=q[h+404>>2];z:{if((o&2147483647)<=(-2-A|0)){break z}QJ(h+384|0,c,k,p,m,0,0,0,1073610752);f=TJ(j,i,u,v,0,0,0,0);b=y(_J(c,k,p,m))>=1.0384593717069655e+34;p=b?q[h+392>>2]:p;m=b?q[h+396>>2]:m;c=b?q[h+384>>2]:c;k=b?q[h+388>>2]:k;s=b+s|0;if((s+110|0)<=(G|0)?!(g&(b^1|(d|0)!=(e|0))&(f|0)!=0):0){break z}q[91802]=68}YJ(h+368|0,c,k,p,m,s);j=q[h+376>>2];i=q[h+380>>2];c=q[h+372>>2];b=q[h+368>>2]}q[I>>2]=b;q[H+4>>2]=c;q[a+8>>2]=j;q[a+12>>2]=i;ue=h+8960|0}function BA(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=x(0),j=0,k=0,l=x(0),m=0,o=x(0),p=x(0),s=x(0),t=x(0),v=x(0),y=0,z=0,A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=0,M=x(0),N=0,O=x(0),P=x(0),Q=0,R=x(0),S=0,T=0,U=x(0),V=0,W=x(0),X=x(0),Y=x(0),Z=x(0),_=x(0),$=x(0),aa=0,ba=x(0),ca=x(0),da=0,ea=x(0),fa=0,ga=0,ha=x(0),ia=x(0),ja=x(0),ka=0,la=0,ma=0,na=0,oa=x(0),pa=x(0),qa=x(0),ra=x(0),sa=x(0),ta=x(0),ua=x(0),va=x(0),wa=x(0),xa=x(0),ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=x(0),Ea=0,Fa=0,Ga=0,Ha=x(0);e=ue-224|0;ue=e;k=e+216|0;f=k;q[f>>2]=0;q[f+4>>2]=0;q[e+208>>2]=0;q[e+212>>2]=0;j=e+200|0;f=j;q[f>>2]=0;q[f+4>>2]=0;q[e+192>>2]=0;q[e+196>>2]=0;q[e+184>>2]=0;q[e+188>>2]=0;q[e+176>>2]=0;q[e+180>>2]=0;f=q[b+12>>2];a:{if(f>>>0>3){break a}if(f-2){g=e+80|0;b:{if(r[b+236|0]){f=q[c+44>>2];q[e+152>>2]=q[c+40>>2];q[e+156>>2]=f;f=q[c+36>>2];q[e+144>>2]=q[c+32>>2];q[e+148>>2]=f;f=q[c+28>>2];q[e+136>>2]=q[c+24>>2];q[e+140>>2]=f;f=q[c+20>>2];q[e+128>>2]=q[c+16>>2];q[e+132>>2]=f;f=q[c+4>>2];q[e+112>>2]=q[c>>2];q[e+116>>2]=f;f=q[c+12>>2];q[e+120>>2]=q[c+8>>2];q[e+124>>2]=f;vu(e+112|0,d,u[c+208>>2]);d=q[b+12>>2];f=q[a+20>>2];n[q[q[f>>2]+88>>2]](e+80|0,f);ru(d,e+176|0,e+32|0,e,e+160|0,e+112|0,nt(e+96|0,e+80|0));d=a+20|0;break b}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e+96|0,d);ru(f,e+176|0,e+32|0,e,e+160|0,c,nt(e+112|0,e+96|0));d=a+20|0}f=q[d>>2];n[q[q[f>>2]+88>>2]](g,f);nt(e+112|0,e+80|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](e- -64|0,d);uu(e+176|0,nt(e+96|0,e- -64|0),e+32|0,q[b+36>>2],r[b+20|0]);$s(e+112|0,e+32|0);d=e+200|0;h=u[d>>2];f=e+204|0;A=u[f>>2];m=e+196|0;E=u[m>>2];O=u[e+148>>2];M=u[e+132>>2];F=u[e+152>>2];v=u[e+136>>2];i=u[e+184>>2];P=u[e+188>>2];o=u[e+176>>2];s=u[e+180>>2];B=u[e+144>>2];G=u[e+112>>2];H=u[e+128>>2];t=u[e+192>>2];I=u[e+116>>2];p=u[e+120>>2];N=e+220|0;J=u[e+156>>2];y=e+216|0;C=u[y>>2];U=u[e+140>>2];g=e+212|0;D=u[g>>2];K=u[e+124>>2];l=u[e+208>>2];u[N>>2]=x(J*C)+x(x(U*D)+x(u[N>>2]+x(K*l)));u[y>>2]=x(F*C)+x(x(v*D)+x(x(p*l)+x(0)));u[g>>2]=x(O*C)+x(x(M*D)+x(x(I*l)+x(0)));u[f>>2]=x(J*h)+x(x(U*E)+x(A+x(K*t)));u[d>>2]=x(F*h)+x(x(v*E)+x(x(p*t)+x(0)));u[m>>2]=x(O*h)+x(x(M*E)+x(x(I*t)+x(0)));u[e+208>>2]=x(B*C)+x(x(H*D)+x(x(G*l)+x(0)));u[e+192>>2]=x(B*h)+x(x(H*E)+x(x(G*t)+x(0)));u[e+188>>2]=x(x(P+x(o*K))+x(s*U))+x(i*J);u[e+184>>2]=x(x(x(o*p)+x(0))+x(s*v))+x(i*F);u[e+180>>2]=x(x(x(o*I)+x(0))+x(s*M))+x(i*O);u[e+176>>2]=x(x(x(o*G)+x(0))+x(s*H))+x(i*B);break a}f=q[c+44>>2];q[e+216>>2]=q[c+40>>2];q[e+220>>2]=f;f=q[c+36>>2];q[e+208>>2]=q[c+32>>2];q[e+212>>2]=f;f=q[c+28>>2];q[e+200>>2]=q[c+24>>2];q[e+204>>2]=f;f=q[c+20>>2];q[e+192>>2]=q[c+16>>2];q[e+196>>2]=f;f=q[c+4>>2];q[e+176>>2]=q[c>>2];q[e+180>>2]=f;f=q[c+12>>2];q[e+184>>2]=q[c+8>>2];q[e+188>>2]=f;if(r[b+236|0]){vu(e+176|0,d,u[c+208>>2])}d=q[a+20>>2];n[q[q[d>>2]+88>>2]](e,d);nt(e+112|0,e);d=q[a+20>>2];n[q[q[d>>2]+92>>2]](e+160|0,d);su(e+176|0,nt(e+32|0,e+160|0),q[b+36>>2],r[b+20|0])}t=u[c+112>>2];v=u[c+68>>2];B=u[c+52>>2];o=u[c+116>>2];ea=u[c+108>>2];E=u[c+104>>2];ja=u[b+28>>2];V=q[c+96>>2];z=q[c+100>>2];fa=q[c+92>>2];Fa=q[a+120>>2];Ga=q[a+28>>2];O=u[c+84>>2];s=u[c+80>>2];l=u[c+88>>2];P=u[c+64>>2];ba=u[c+48>>2];ga=q[b+16>>2];q[e+112>>2]=q[c+120>>2];q[e+116>>2]=q[c+136>>2];q[e+120>>2]=q[c+152>>2];q[e+124>>2]=q[c+168>>2];q[e+128>>2]=q[c+184>>2];i=x(ga|0);u[e+32>>2]=u[c+128>>2]/i;u[e+36>>2]=u[c+144>>2]/i;u[e+40>>2]=u[c+160>>2]/i;u[e+44>>2]=u[c+176>>2]/i;u[e+48>>2]=u[c+192>>2]/i;q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e>>2]=0;q[e+4>>2]=0;M=x(x(x(s+x(90))/x(180))*x(3.141592025756836));h=AG(M);A=zG(M);G=u[k>>2];H=u[e+220>>2];I=u[j>>2];p=u[e+204>>2];C=u[e+184>>2];D=u[e+188>>2];N=ga<<3;W=u[e+212>>2];X=u[e+196>>2];oa=u[b+32>>2];ha=x(O-s);pa=x(ha/i);s=x(x(pa/x(180))*x(3.141592025756836));qa=AG(s);ra=zG(s);c:{if((ga|0)<1){break c}sa=x(ea+o);ta=x(ea+x(o*x(.5)));Ha=x(t/i);d=ja>x(0);ka=d?0:V&-16777216;Q=d?0:z&-16777216;la=d?0:fa&-16777216;i=x(ba*h);Y=u[e+180>>2];t=x(ba*A);Z=u[e+176>>2];ua=x(x(B*C)+D);o=x(x(i*Y)+x(x(t*Z)+ua));_=u[e+192>>2];va=x(x(B*I)+p);s=x(x(i*X)+x(x(t*_)+va));$=u[e+208>>2];wa=x(x(B*G)+H);t=x(x(i*W)+x(x(t*$)+wa));i=x(P*h);F=x(P*A);xa=x(x(v*C)+D);O=x(x(i*Y)+x(x(F*Z)+xa));ya=x(x(v*I)+p);M=x(x(i*X)+x(x(F*_)+ya));za=x(x(v*G)+H);F=x(x(i*W)+x(x(F*$)+za));ia=x(P+x(x(ba-P)*l));i=x(h*ia);J=x(A*ia);l=x(v+x(l*x(B-v)));Aa=x(x(l*C)+D);v=x(x(i*Y)+x(x(J*Z)+Aa));Ba=x(x(l*I)+p);B=x(x(i*X)+x(x(J*_)+Ba));Ca=x(x(l*G)+H);G=x(x(i*W)+x(x(J*$)+Ca));Da=x(ha-oa);while(1){i=x(x(ra*h)+x(qa*A));p=x(ia*i);A=x(x(ra*A)-x(qa*h));h=x(ia*A);H=x(x(W*p)+x(Ca+x($*h)));I=x(x(X*p)+x(Ba+x(_*h)));p=x(x(Y*p)+x(Aa+x(Z*h)));h=x(P*i);l=x(P*A);C=x(x(W*h)+x(za+x($*l)));D=x(x(X*h)+x(ya+x(_*l)));l=x(x(Y*h)+x(xa+x(Z*l)));h=x(ba*i);K=x(ba*A);J=x(x(W*h)+x(wa+x($*K)));U=x(x(X*h)+x(va+x(_*K)));K=x(x(Y*h)+x(ua+x(Z*K)));aa=q[c+96>>2];d=aa>>>24|0;Ea=q[c+100>>2];f=Ea>>>24|0;L=q[c+92>>2];j=L>>>24|0;k=j;h=x(pa+ca);ca=hDa)){break d}h=x(x(1)-x(x(ca-Da)/oa))}e:{if(h==x(1)){break e}R=x(h*x(d>>>0));f:{if(R=x(0)){d=~~R>>>0;break f}d=0}R=x(h*x(f>>>0));g:{if(R=x(0)){f=~~R>>>0;break g}f=0}h=x(h*x(j>>>0));if(h=x(0)){k=~~h>>>0;break e}k=0}m=q[a+120>>2];yp(e+160|0);u[e+164>>2]=s;u[e+160>>2]=o;u[e+168>>2]=t;g=q[e+164>>2];y=w(ma,Fa)+Ga|0;j=y;q[j>>2]=q[e+160>>2];q[j+4>>2]=g;q[j+8>>2]=q[e+168>>2];u[j+20>>2]=ea;u[j+16>>2]=E;q[j+12>>2]=fa&16777215|la&-16777216;yp(e+160|0);u[e+164>>2]=B;u[e+160>>2]=v;u[e+168>>2]=G;S=q[e+164>>2];j=j+m|0;g=j;q[g>>2]=q[e+160>>2];q[g+4>>2]=S;S=g+8|0;q[S>>2]=q[e+168>>2];u[g+20>>2]=ta;u[g+16>>2]=E;q[g+12>>2]=V&16777215|ka&-16777216;yp(e+160|0);u[e+164>>2]=U;u[e+160>>2]=K;u[e+168>>2]=J;V=q[e+164>>2];g=y+(m<<1)|0;q[g>>2]=q[e+160>>2];q[g+4>>2]=V;q[g+8>>2]=q[e+168>>2];u[g+20>>2]=ea;o=x(Ha+E);u[g+16>>2]=o;la=k<<24;fa=la|L&16777215;q[g+12>>2]=fa;yp(e+160|0);u[e+164>>2]=I;u[e+160>>2]=p;u[e+168>>2]=H;L=q[e+164>>2];k=y+w(m,3)|0;g=k;q[g>>2]=q[e+160>>2];q[g+4>>2]=L;L=g+8|0;q[L>>2]=q[e+168>>2];u[g+20>>2]=ta;u[g+16>>2]=o;ka=d<<24;V=ka|aa&16777215;q[g+12>>2]=V;da=q[j+20>>2];d=y+(m<<2)|0;aa=d+16|0;g=aa;q[g>>2]=q[j+16>>2];q[g+4>>2]=da;T=q[S+4>>2];da=d+8|0;g=da;q[g>>2]=q[S>>2];q[g+4>>2]=T;g=q[j+4>>2];q[d>>2]=q[j>>2];q[d+4>>2]=g;yp(e+160|0);u[e+164>>2]=M;u[e+160>>2]=O;u[e+168>>2]=F;T=q[e+164>>2];g=y+w(m,5)|0;q[g>>2]=q[e+160>>2];q[g+4>>2]=T;q[g+8>>2]=q[e+168>>2];u[g+20>>2]=sa;u[g+16>>2]=E;q[g+12>>2]=z&16777215|Q&-16777216;Q=q[k+20>>2];g=y+w(m,6)|0;T=g+16|0;z=T;q[z>>2]=q[k+16>>2];q[z+4>>2]=Q;Q=q[L+4>>2];na=g+8|0;z=na;q[z>>2]=q[L>>2];q[z+4>>2]=Q;z=q[k+4>>2];q[g>>2]=q[k>>2];q[g+4>>2]=z;yp(e+160|0);u[e+164>>2]=D;u[e+160>>2]=l;u[e+168>>2]=C;m=y+w(m,7)|0;y=q[e+164>>2];q[m>>2]=q[e+160>>2];q[m+4>>2]=y;q[m+8>>2]=q[e+168>>2];u[m+20>>2]=sa;u[m+16>>2]=o;Q=f<<24;z=Q|Ea&16777215;q[m+12>>2]=z;u[e>>2]=u[e+112>>2]+u[e+32>>2];u[e+4>>2]=u[e+116>>2]+u[e+36>>2];u[e+8>>2]=u[e+120>>2]+u[e+40>>2];u[e+12>>2]=u[e+124>>2]+u[e+44>>2];u[e+16>>2]=u[e+128>>2]+u[e+48>>2];f=q[j+20>>2];q[aa>>2]=q[j+16>>2];q[aa+4>>2]=f;f=q[S+4>>2];q[da>>2]=q[S>>2];q[da+4>>2]=f;f=q[j+4>>2];q[d>>2]=q[j>>2];q[d+4>>2]=f;d=q[k+20>>2];q[T>>2]=q[k+16>>2];q[T+4>>2]=d;d=q[L+4>>2];q[na>>2]=q[L>>2];q[na+4>>2]=d;d=q[k+4>>2];q[g>>2]=q[k>>2];q[g+4>>2]=d;q[e+128>>2]=q[e+16>>2];d=q[e+12>>2];q[e+120>>2]=q[e+8>>2];q[e+124>>2]=d;d=q[e+4>>2];q[e+112>>2]=q[e>>2];q[e+116>>2]=d;h=i;E=o;t=J;s=U;o=K;F=C;M=D;O=l;G=H;B=I;v=p;ma=ma+8|0;if((ma|0)<(N|0)){continue}break}d=q[a+124>>2];if((d|0)<=0){break c}f=q[a+120>>2];k=c+212|0;j=kV(q[a+28>>2]+40|0,k,d<<2);if((N|0)<2){break c}d=1;while(1){kV(j+w(d,f)|0,k,q[a+124>>2]<<2);d=d+1|0;if((N|0)!=(d|0)){continue}break}}f=q[a+128>>2];h:{if((f|0)<1){break h}d=1;if((ga|0)<1){break h}k=q[a+120>>2];c=c+228|0;f=kV((q[a+28>>2]+(q[a+124>>2]<<2)|0)+40|0,c,f<<2);if((N|0)<2){break h}while(1){kV(f+w(d,k)|0,c,q[a+128>>2]<<2);d=d+1|0;if((N|0)!=(d|0)){continue}break}}q[a+32>>2]=q[a+32>>2]+(q[b+16>>2]<<1);q[a+28>>2]=q[a+28>>2]+w(q[a+120>>2],N);ue=e+224|0}function Ez(a,b,c,d){var g=0,h=0,i=0,l=0,m=0,p=0,s=0,t=x(0),v=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=0,D=0,E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=0,N=x(0);g=ue-192|0;ue=g;h=q[a+16>>2];if(h){i=q[a+36>>2];q[h>>2]=q[c+80>>2];l=q[c+84>>2];q[h+8>>2]=0;q[h+4>>2]=l;q[h+12>>2]=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);l=h+i|0;q[l>>2]=q[c+96>>2];m=q[c+100>>2];q[l+8>>2]=0;q[l+4>>2]=m;q[l+12>>2]=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);m=h+(i<<1)|0;q[m>>2]=q[c+112>>2];p=q[c+116>>2];q[m+8>>2]=0;q[m+4>>2]=p;q[m+12>>2]=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);i=h+w(i,3)|0;q[i>>2]=q[c+128>>2];p=q[c+132>>2];q[i+8>>2]=0;q[i+4>>2]=p;p=c- -64|0;q[i+12>>2]=r[p|0]|r[p+1|0]<<8|(r[p+2|0]<<16|r[p+3|0]<<24);q[h+16>>2]=q[c+144>>2];p=c+148|0;s=c+156|0;u[h+20>>2]=u[p>>2]+u[s>>2];C=c+152|0;u[l+16>>2]=u[c+144>>2]+u[C>>2];u[l+20>>2]=u[p>>2]+u[s>>2];q[m+16>>2]=q[c+144>>2];q[m+20>>2]=q[p>>2];u[i+16>>2]=u[c+144>>2]+u[C>>2];q[i+20>>2]=q[p>>2];p=q[b+12>>2];a:{if(p>>>0>3){break a}if(p-2){s=q[1831];q[g+184>>2]=q[1830];q[g+188>>2]=s;s=q[1829];q[g+176>>2]=q[1828];q[g+180>>2]=s;s=q[1827];q[g+168>>2]=q[1826];q[g+172>>2]=s;s=q[1825];q[g+160>>2]=q[1824];q[g+164>>2]=s;s=q[1823];q[g+152>>2]=q[1822];q[g+156>>2]=s;s=q[1821];q[g+144>>2]=q[1820];q[g+148>>2]=s;b:{if(r[b+36|0]){p=q[c+44>>2];q[g+88>>2]=q[c+40>>2];q[g+92>>2]=p;p=q[c+36>>2];q[g+80>>2]=q[c+32>>2];q[g+84>>2]=p;p=q[c+28>>2];q[g+72>>2]=q[c+24>>2];q[g+76>>2]=p;s=q[c+20>>2];p=g- -64|0;q[p>>2]=q[c+16>>2];q[p+4>>2]=s;p=q[c+4>>2];q[g+48>>2]=q[c>>2];q[g+52>>2]=p;p=q[c+12>>2];q[g+56>>2]=q[c+8>>2];q[g+60>>2]=p;vu(g+48|0,d,u[c+248>>2]);d=q[b+12>>2];p=q[a+8>>2];n[q[q[p>>2]+88>>2]](g+16|0,p);ru(d,g+144|0,g+128|0,g+112|0,g+96|0,g+48|0,nt(g+32|0,g+16|0));d=a+8|0;break b}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+32|0,d);ru(p,g+144|0,g+128|0,g+112|0,g+96|0,c,nt(g+48|0,g+32|0));d=a+8|0}u[h>>2]=u[h>>2]*u[g+128>>2];u[h+4>>2]=u[h+4>>2]*u[g+132>>2];u[l>>2]=u[l>>2]*u[g+128>>2];u[l+4>>2]=u[l+4>>2]*u[g+132>>2];u[m>>2]=u[m>>2]*u[g+128>>2];u[m+4>>2]=u[m+4>>2]*u[g+132>>2];u[i>>2]=u[i>>2]*u[g+128>>2];u[i+4>>2]=u[i+4>>2]*u[g+132>>2];p=q[d>>2];n[q[q[p>>2]+88>>2]](g+16|0,p);nt(g+48|0,g+16|0);d=q[d>>2];n[q[q[d>>2]+92>>2]](g,d);uu(g+144|0,nt(g+32|0,g),g+128|0,q[b+28>>2],r[b+16|0]);t=u[g+184>>2];v=u[g+188>>2];y=u[g+180>>2];H=u[g+176>>2];I=u[g+152>>2];J=u[g+156>>2];K=u[g+144>>2];L=u[g+148>>2];z=u[g+168>>2];E=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());A=u[g+164>>2];F=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());B=u[g+172>>2];N=u[g+160>>2];G=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());b=(k(x(x(z*E)+x(x(A*F)+x(B+x(N*G))))),e(0));o[h+4|0]=b;o[h+5|0]=b>>>8;o[h+6|0]=b>>>16;o[h+7|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[h|0]=b;o[h+1|0]=b>>>8;o[h+2|0]=b>>>16;o[h+3|0]=b>>>24;b=(k(x(x(t*E)+x(x(y*F)+x(v+x(H*G))))),e(0));o[h+8|0]=b;o[h+9|0]=b>>>8;o[h+10|0]=b>>>16;o[h+11|0]=b>>>24;E=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());F=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());G=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());b=(k(x(x(z*E)+x(x(A*F)+x(B+x(N*G))))),e(0));o[l+4|0]=b;o[l+5|0]=b>>>8;o[l+6|0]=b>>>16;o[l+7|0]=b>>>24;b=(k(x(x(t*E)+x(x(y*F)+x(v+x(H*G))))),e(0));o[l+8|0]=b;o[l+9|0]=b>>>8;o[l+10|0]=b>>>16;o[l+11|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[l|0]=b;o[l+1|0]=b>>>8;o[l+2|0]=b>>>16;o[l+3|0]=b>>>24;E=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());F=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());G=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());b=(k(x(x(z*E)+x(x(A*F)+x(B+x(N*G))))),e(0));o[m+4|0]=b;o[m+5|0]=b>>>8;o[m+6|0]=b>>>16;o[m+7|0]=b>>>24;b=(k(x(x(t*E)+x(x(y*F)+x(v+x(H*G))))),e(0));o[m+8|0]=b;o[m+9|0]=b>>>8;o[m+10|0]=b>>>16;o[m+11|0]=b>>>24;b=(k(x(x(I*E)+x(x(L*F)+x(J+x(K*G))))),e(0));o[m|0]=b;o[m+1|0]=b>>>8;o[m+2|0]=b>>>16;o[m+3|0]=b>>>24;E=z;z=(f(0,r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24)),j());F=A;A=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());G=B;B=(f(0,r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24)),j());b=(k(x(x(E*z)+x(x(F*A)+x(G+x(N*B))))),e(0));o[i+4|0]=b;o[i+5|0]=b>>>8;o[i+6|0]=b>>>16;o[i+7|0]=b>>>24;b=(k(x(x(t*z)+x(x(y*A)+x(v+x(H*B))))),e(0));o[i+8|0]=b;o[i+9|0]=b>>>8;o[i+10|0]=b>>>16;o[i+11|0]=b>>>24;b=(k(x(x(I*z)+x(x(L*A)+x(J+x(K*B))))),e(0));o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;break a}C=q[c+44>>2];p=g+184|0;q[p>>2]=q[c+40>>2];q[p+4>>2]=C;s=q[c+36>>2];q[g+176>>2]=q[c+32>>2];q[g+180>>2]=s;M=q[c+28>>2];s=g+168|0;q[s>>2]=q[c+24>>2];q[s+4>>2]=M;C=q[c+20>>2];q[g+160>>2]=q[c+16>>2];q[g+164>>2]=C;C=q[c+4>>2];q[g+144>>2]=q[c>>2];q[g+148>>2]=C;C=q[c+12>>2];q[g+152>>2]=q[c+8>>2];q[g+156>>2]=C;if(r[b+36|0]){vu(g+144|0,d,u[c+248>>2])}d=q[a+8>>2];n[q[q[d>>2]+88>>2]](g+112|0,d);nt(g+48|0,g+112|0);d=q[a+8>>2];n[q[q[d>>2]+92>>2]](g+96|0,d);su(g+144|0,nt(g+128|0,g+96|0),q[b+28>>2],r[b+16|0]);H=u[p>>2];b=g+188|0;I=u[b>>2];d=g+180|0;J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];z=u[g+156>>2];A=u[g+144>>2];B=u[g+148>>2];t=(f(0,r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24)),j());v=(f(0,r[h+4|0]|r[h+5|0]<<8|(r[h+6|0]<<16|r[h+7|0]<<24)),j());C=g+164|0;y=(f(0,r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24)),j());M=g+172|0;D=(k(x(x(t*u[s>>2])+x(x(v*u[C>>2])+x(x(y*u[g+160>>2])+u[M>>2])))),e(0));o[h+4|0]=D;o[h+5|0]=D>>>8;o[h+6|0]=D>>>16;o[h+7|0]=D>>>24;D=(k(x(x(t*L)+x(x(v*B)+x(z+x(y*A))))),e(0));o[h|0]=D;o[h+1|0]=D>>>8;o[h+2|0]=D>>>16;o[h+3|0]=D>>>24;D=(k(x(x(t*H)+x(x(v*J)+x(I+x(y*K))))),e(0));o[h+8|0]=D;o[h+9|0]=D>>>8;o[h+10|0]=D>>>16;o[h+11|0]=D>>>24;H=u[s>>2];I=u[M>>2];J=u[C>>2];K=u[g+152>>2];L=u[g+156>>2];z=u[g+144>>2];A=u[g+148>>2];B=u[g+160>>2];t=(f(0,r[l+8|0]|r[l+9|0]<<8|(r[l+10|0]<<16|r[l+11|0]<<24)),j());v=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());y=(f(0,r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24)),j());h=(k(x(x(t*u[p>>2])+x(x(v*u[d>>2])+x(x(y*u[g+176>>2])+u[b>>2])))),e(0));o[l+8|0]=h;o[l+9|0]=h>>>8;o[l+10|0]=h>>>16;o[l+11|0]=h>>>24;h=(k(x(x(t*H)+x(x(v*J)+x(I+x(y*B))))),e(0));o[l+4|0]=h;o[l+5|0]=h>>>8;o[l+6|0]=h>>>16;o[l+7|0]=h>>>24;h=(k(x(x(t*K)+x(x(v*A)+x(L+x(y*z))))),e(0));o[l|0]=h;o[l+1|0]=h>>>8;o[l+2|0]=h>>>16;o[l+3|0]=h>>>24;H=u[p>>2];I=u[b>>2];J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];z=u[g+156>>2];A=u[g+144>>2];B=u[g+148>>2];t=(f(0,r[m+8|0]|r[m+9|0]<<8|(r[m+10|0]<<16|r[m+11|0]<<24)),j());v=(f(0,r[m+4|0]|r[m+5|0]<<8|(r[m+6|0]<<16|r[m+7|0]<<24)),j());y=(f(0,r[m|0]|r[m+1|0]<<8|(r[m+2|0]<<16|r[m+3|0]<<24)),j());h=(k(x(x(t*u[s>>2])+x(x(v*u[C>>2])+x(x(y*u[g+160>>2])+u[M>>2])))),e(0));o[m+4|0]=h;o[m+5|0]=h>>>8;o[m+6|0]=h>>>16;o[m+7|0]=h>>>24;h=(k(x(x(t*L)+x(x(v*B)+x(z+x(y*A))))),e(0));o[m|0]=h;o[m+1|0]=h>>>8;o[m+2|0]=h>>>16;o[m+3|0]=h>>>24;h=(k(x(x(t*H)+x(x(v*J)+x(I+x(y*K))))),e(0));o[m+8|0]=h;o[m+9|0]=h>>>8;o[m+10|0]=h>>>16;o[m+11|0]=h>>>24;H=u[p>>2];I=u[b>>2];J=u[d>>2];K=u[g+176>>2];L=u[g+152>>2];z=u[g+156>>2];A=u[g+144>>2];B=u[g+148>>2];t=(f(0,r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24)),j());v=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());y=(f(0,r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24)),j());b=(k(x(x(t*u[s>>2])+x(x(v*u[C>>2])+x(x(y*u[g+160>>2])+u[M>>2])))),e(0));o[i+4|0]=b;o[i+5|0]=b>>>8;o[i+6|0]=b>>>16;o[i+7|0]=b>>>24;b=(k(x(x(t*L)+x(x(v*B)+x(z+x(y*A))))),e(0));o[i|0]=b;o[i+1|0]=b>>>8;o[i+2|0]=b>>>16;o[i+3|0]=b>>>24;b=(k(x(x(t*H)+x(x(v*J)+x(I+x(y*K))))),e(0));o[i+8|0]=b;o[i+9|0]=b>>>8;o[i+10|0]=b>>>16;o[i+11|0]=b>>>24}h=q[a+44>>2];if((h|0)>=1){d=q[a+36>>2];b=c+252|0;h=kV(q[a+16>>2]+40|0,b,h<<2);kV(d+h|0,b,q[a+44>>2]<<2);kV(h+(d<<1)|0,b,q[a+44>>2]<<2);kV(h+w(d,3)|0,b,q[a+44>>2]<<2)}h=q[a+48>>2];if((h|0)>=1){d=q[a+36>>2];b=c+268|0;c=kV((q[a+16>>2]+(q[a+44>>2]<<2)|0)+40|0,b,h<<2);kV(d+c|0,b,q[a+48>>2]<<2);kV(c+(d<<1)|0,b,q[a+48>>2]<<2);kV(c+w(d,3)|0,b,q[a+48>>2]<<2)}q[a+12>>2]=q[a+12>>2]+1;q[a+16>>2]=q[a+16>>2]+(q[a+36>>2]<<2)}ue=g+192|0}function Vo(a,b){var c=x(0),d=x(0),e=0,f=0;a:{b:{c:{d:{e=q[a>>2];f=q[b>>2];if((e|0)!=(f|0)){break d}e:{f:{g:{if(e>>>0>1){break g}if(e-1){c=u[a+12>>2];d=u[b+12>>2];if(c!=d){break c}c=u[a+16>>2];d=u[b+16>>2];if(c!=d){break c}e=q[a+20>>2];f=q[b+20>>2];if((e|0)!=(f|0)){break d}e=q[a+24>>2];f=q[b+24>>2];if((e|0)!=(f|0)){break d}c=u[a+28>>2];d=u[b+28>>2];if(c==d){break g}break c}e=q[a+12>>2];f=q[b+12>>2];if((e|0)!=(f|0)){break d}c=u[a+16>>2];d=u[b+16>>2];if(c!=d){break c}e=q[a+20>>2];f=q[b+20>>2];if((e|0)!=(f|0)){break d}c=u[a+24>>2];d=u[b+24>>2];if(!(u[a+28>>2]==u[b+28>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+32>>2];d=u[b+32>>2];if(!(u[a+36>>2]==u[b+36>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+40>>2];d=u[b+40>>2];if(c!=d){break c}c=u[a+44>>2];d=u[b+44>>2];if(c!=d){break c}e=q[a+48>>2];f=q[b+48>>2];if((e|0)==(f|0)){break g}break d}e=q[a+4>>2];f=q[b+4>>2];if((e|0)!=(f|0)){break d}h:{if(e>>>0>3){break h}i:{switch(e-1|0){default:c=u[a+52>>2];d=u[b+52>>2];if(c!=d){break c}c=u[a+56>>2];d=u[b+56>>2];if(c!=d){break c}c=u[a+60>>2];d=u[b+60>>2];if(c==d){break h}break c;case 0:c=u[a+52>>2];d=u[b+52>>2];if(c!=d){break c}c=u[a+56>>2];d=u[b+56>>2];if(c==d){break h}break c;case 1:c=u[a+52>>2];d=u[b+52>>2];if(c!=d){break c}c=u[a+56>>2];d=u[b+56>>2];if(c!=d){break c}c=u[a+60>>2];d=u[b+60>>2];if(c==d){break h}break c;case 2:break i}}c=u[a+52>>2];d=u[b+52>>2];if(!(u[a+56>>2]==u[b+56>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+60>>2];d=u[b+60>>2];if(!(u[a- -64>>2]==u[b- -64>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+68>>2];d=u[b+68>>2];if(!(u[a+72>>2]==u[b+72>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+76>>2];d=u[b+76>>2];if(u[a+80>>2]==u[b+80>>2]?c==d:0){break h}e=1;if(c>2]>2]){break e}break f}e=q[a+8>>2];f=q[b+8>>2];if((e|0)!=(f|0)){break d}c=u[a+84>>2];d=u[b+84>>2];if(!(u[a+88>>2]==u[b+88>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+92>>2];d=u[b+92>>2];if(!(u[a+96>>2]==u[b+96>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+100>>2];d=u[b+100>>2];if(!(u[a+104>>2]==u[b+104>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+108>>2];d=u[b+108>>2];if(!(u[a+116>>2]==u[b+116>>2]?!(c!=d|u[a+112>>2]!=u[b+112>>2]):0)){e=1;if(c>2];d=u[b+112>>2];if(c>2]>2]){break e}break f}c=u[a+120>>2];d=u[b+120>>2];if(!(u[a+128>>2]==u[b+128>>2]?!(c!=d|u[a+124>>2]!=u[b+124>>2]):0)){e=1;if(c>2];d=u[b+124>>2];if(c>2]>2]){break e}break f}c=u[a+132>>2];d=u[b+132>>2];if(!(u[a+140>>2]==u[b+140>>2]?!(c!=d|u[a+136>>2]!=u[b+136>>2]):0)){e=1;if(c>2];d=u[b+136>>2];if(c>2]>2]){break e}break f}c=u[a+144>>2];d=u[b+144>>2];if(!(u[a+152>>2]==u[b+152>>2]?!(c!=d|u[a+148>>2]!=u[b+148>>2]):0)){e=1;if(c>2];d=u[b+148>>2];if(c>2]>2]){break e}break f}c=u[a+156>>2];d=u[b+156>>2];if(!(u[a+164>>2]==u[b+164>>2]?!(c!=d|u[a+160>>2]!=u[b+160>>2]):0)){e=1;if(c>2];d=u[b+160>>2];if(c>2]>2]){break e}break f}c=u[a+168>>2];d=u[b+168>>2];if(!(u[a+176>>2]==u[b+176>>2]?!(c!=d|u[a+172>>2]!=u[b+172>>2]):0)){e=1;if(c>2];d=u[b+172>>2];if(c>2]>2]){break e}break f}j:{k:{e=r[a+196|0];f=r[b+196|0];if((e|0)==(f|0)){e=r[a+197|0];f=r[b+197|0];if((e|0)!=(f|0)){break b}if(r[a+199|0]==r[b+199|0]?r[a+198|0]==r[b+198|0]:0){break j}e=r[a+198|0];f=r[b+198|0];if((e|0)==(f|0)){break k}break b}break b}return r[a+199|0]>2];d=u[b+180>>2];if(u[a+184>>2]==u[b+184>>2]?c==d:0){break z}e=1;if(c>2]>2]){break e}break f}break b}e=r[a+230|0];f=r[b+230|0];if((e|0)!=(f|0)){break b}return r[a+231|0]>2];d=u[b+188>>2];if(!(u[a+192>>2]==u[b+192>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+232>>2];d=u[b+232>>2];if(!(u[a+240>>2]==u[b+240>>2]?!(c!=d|u[a+236>>2]!=u[b+236>>2]):0)){e=1;if(c>2];d=u[b+236>>2];if(c>2]>2]){break e}break f}c=u[a+244>>2];d=u[b+244>>2];if(!(u[a+252>>2]==u[b+252>>2]?!(c!=d|u[a+248>>2]!=u[b+248>>2]):0)){e=1;if(c>2];d=u[b+248>>2];if(c>2]>2]){break e}break f}c=u[a+256>>2];d=u[b+256>>2];if(!(u[a+264>>2]==u[b+264>>2]?!(c!=d|u[a+260>>2]!=u[b+260>>2]):0)){e=1;if(c>2];d=u[b+260>>2];if(c>2]>2]){break e}break f}c=u[a+268>>2];d=u[b+268>>2];if(!(u[a+272>>2]==u[b+272>>2]?c==d:0)){e=1;if(c>2]>2]){break e}break f}c=u[a+276>>2];d=u[b+276>>2];if(c==d){e=0;if(u[a+280>>2]==u[b+280>>2]){break e}}e=1;if(c>2]>2]){break e}}e=0}return e}return(e|0)<(f|0)}return c>>0>>0}return 0}function ox(a,b,c){var d=0,e=0,g=0,h=0,i=0,k=0,l=x(0),m=x(0),p=x(0);i=ue-32|0;ue=i;if(q[q[c+36>>2]+8>>2]){e=q[a+192>>2]-q[a+188>>2]>>6;h=q[a+12>>2];d=q[a+8>>2];g=h-d>>3;a:{if(e>>>0>g>>>0){wx(a+8|0,e-g|0);h=q[a+12>>2];d=q[a+8>>2];break a}if(e>>>0>=g>>>0){break a}h=(e<<3)+d|0;q[a+12>>2]=h}k=a+188|0;if((d|0)!=(h|0)){e=0;while(1){d=q[k>>2]+(e<<6)|0;l=(f(0,r[d+48|0]|r[d+49|0]<<8|(r[d+50|0]<<16|r[d+51|0]<<24)),j());m=(f(0,r[d+56|0]|r[d+57|0]<<8|(r[d+58|0]<<16|r[d+59|0]<<24)),j());p=(f(0,r[d+52|0]|r[d+53|0]<<8|(r[d+54|0]<<16|r[d+55|0]<<24)),j());n[q[q[b>>2]+88>>2]](i+16|0,b);if(!r[c+28|0]){Ap(i,i+16|0);q[i+24>>2]=q[i+8>>2];d=q[i+4>>2];q[i+16>>2]=q[i>>2];q[i+20>>2]=d}nt(i,i+16|0);d=q[a+8>>2];h=d+(e<<3)|0;u[h>>2]=x(x(l*u[i>>2])+x(p*u[i+4>>2]))+x(m*u[i+8>>2]);q[h+4>>2]=e;e=e+1|0;h=q[a+12>>2];if(e>>>0>3>>>0){continue}break}}b:{if(q[q[c+36>>2]+8>>2]==1){xx(d,h,i);break b}yx(d,h,i)}e=q[a+192>>2]-q[a+188>>2]>>6;c=q[a+20>>2];b=q[a+24>>2]-c>>6;c:{if(e>>>0>b>>>0){zx(a+20|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break c}if(e>>>0>=b>>>0){break c}q[a+24>>2]=c+(e<<6)}c=q[a+32>>2];b=q[a+36>>2]-c>>4;d:{if(e>>>0>b>>>0){Ax(a+32|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break d}if(e>>>0>=b>>>0){break d}q[a+36>>2]=c+(e<<4)}c=q[a+44>>2];b=q[a+48>>2]-c>>4;e:{if(e>>>0>b>>>0){Ax(a+44|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break e}if(e>>>0>=b>>>0){break e}q[a+48>>2]=c+(e<<4)}c=q[a+56>>2];b=q[a+60>>2]-c>>4;f:{if(e>>>0>b>>>0){Ax(a+56|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break f}if(e>>>0>=b>>>0){break f}q[a+60>>2]=c+(e<<4)}c=q[a+68>>2];b=q[a+72>>2]-c>>4;g:{if(e>>>0>b>>>0){Ax(a+68|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break g}if(e>>>0>=b>>>0){break g}q[a+72>>2]=c+(e<<4)}c=q[a+80>>2];b=q[a+84>>2]-c>>4;h:{if(e>>>0>b>>>0){Ax(a+80|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break h}if(e>>>0>=b>>>0){break h}q[a+84>>2]=c+(e<<4)}c=q[a+92>>2];b=q[a+96>>2]-c>>4;i:{if(e>>>0>b>>>0){Ax(a+92|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break i}if(e>>>0>=b>>>0){break i}q[a+96>>2]=c+(e<<4)}c=q[a+104>>2];b=q[a+108>>2]-c>>2;j:{if(e>>>0>b>>>0){al(a+104|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break j}if(e>>>0>=b>>>0){break j}q[a+108>>2]=c+(e<<2)}c=q[a+116>>2];b=q[a+120>>2]-c>>2;k:{if(e>>>0>b>>>0){al(a+116|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break k}if(e>>>0>=b>>>0){break k}q[a+120>>2]=c+(e<<2)}c=q[a+128>>2];b=q[a+132>>2]-c>>2;l:{if(e>>>0>b>>>0){al(a+128|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break l}if(e>>>0>=b>>>0){break l}q[a+132>>2]=c+(e<<2)}c=q[a+140>>2];b=q[a+144>>2]-c>>2;m:{if(e>>>0>b>>>0){Bx(a+140|0,e-b|0);e=q[a+192>>2]-q[a+188>>2]>>6;break m}if(e>>>0>=b>>>0){break m}q[a+144>>2]=c+(e<<2)}c=q[a+152>>2];b=q[a+156>>2]-c>>2;n:{if(e>>>0>b>>>0){Cx(a+152|0,e-b|0);break n}if(e>>>0>=b>>>0){break n}q[a+156>>2]=c+(e<<2)}o:{if(q[a+356>>2]<1){break o}b=q[a+192>>2]-q[a+188>>2]>>6;e=q[a+164>>2];c=q[a+168>>2]-e>>4;if(b>>>0>c>>>0){yh(a+164|0,b-c|0);break o}if(b>>>0>=c>>>0){break o}q[a+168>>2]=e+(b<<4)}p:{if(q[a+360>>2]<1){break p}b=q[a+192>>2]-q[a+188>>2]>>6;e=q[a+176>>2];c=q[a+180>>2]-e>>4;if(b>>>0>c>>>0){yh(a+176|0,b-c|0);break p}if(b>>>0>=c>>>0){break p}q[a+180>>2]=e+(b<<4)}e=q[a+12>>2];d=q[a+8>>2];q:{if((e|0)==(d|0)){b=e;break q}h=0;while(1){e=h<<3;b=q[a+20>>2]+(q[(e+d|0)+4>>2]<<6)|0;c=q[a+188>>2]+(h<<6)|0;d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);g=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=d;o[b+5|0]=d>>>8;o[b+6|0]=d>>>16;o[b+7|0]=d>>>24;d=r[c+60|0]|r[c+61|0]<<8|(r[c+62|0]<<16|r[c+63|0]<<24);g=r[c+56|0]|r[c+57|0]<<8|(r[c+58|0]<<16|r[c+59|0]<<24);o[b+56|0]=g;o[b+57|0]=g>>>8;o[b+58|0]=g>>>16;o[b+59|0]=g>>>24;o[b+60|0]=d;o[b+61|0]=d>>>8;o[b+62|0]=d>>>16;o[b+63|0]=d>>>24;d=r[c+52|0]|r[c+53|0]<<8|(r[c+54|0]<<16|r[c+55|0]<<24);g=r[c+48|0]|r[c+49|0]<<8|(r[c+50|0]<<16|r[c+51|0]<<24);o[b+48|0]=g;o[b+49|0]=g>>>8;o[b+50|0]=g>>>16;o[b+51|0]=g>>>24;o[b+52|0]=d;o[b+53|0]=d>>>8;o[b+54|0]=d>>>16;o[b+55|0]=d>>>24;d=r[c+44|0]|r[c+45|0]<<8|(r[c+46|0]<<16|r[c+47|0]<<24);g=r[c+40|0]|r[c+41|0]<<8|(r[c+42|0]<<16|r[c+43|0]<<24);o[b+40|0]=g;o[b+41|0]=g>>>8;o[b+42|0]=g>>>16;o[b+43|0]=g>>>24;o[b+44|0]=d;o[b+45|0]=d>>>8;o[b+46|0]=d>>>16;o[b+47|0]=d>>>24;d=r[c+36|0]|r[c+37|0]<<8|(r[c+38|0]<<16|r[c+39|0]<<24);g=r[c+32|0]|r[c+33|0]<<8|(r[c+34|0]<<16|r[c+35|0]<<24);o[b+32|0]=g;o[b+33|0]=g>>>8;o[b+34|0]=g>>>16;o[b+35|0]=g>>>24;o[b+36|0]=d;o[b+37|0]=d>>>8;o[b+38|0]=d>>>16;o[b+39|0]=d>>>24;d=r[c+28|0]|r[c+29|0]<<8|(r[c+30|0]<<16|r[c+31|0]<<24);g=r[c+24|0]|r[c+25|0]<<8|(r[c+26|0]<<16|r[c+27|0]<<24);o[b+24|0]=g;o[b+25|0]=g>>>8;o[b+26|0]=g>>>16;o[b+27|0]=g>>>24;o[b+28|0]=d;o[b+29|0]=d>>>8;o[b+30|0]=d>>>16;o[b+31|0]=d>>>24;d=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);g=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);o[b+16|0]=g;o[b+17|0]=g>>>8;o[b+18|0]=g>>>16;o[b+19|0]=g>>>24;o[b+20|0]=d;o[b+21|0]=d>>>8;o[b+22|0]=d>>>16;o[b+23|0]=d>>>24;d=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[b+8|0]=c;o[b+9|0]=c>>>8;o[b+10|0]=c>>>16;o[b+11|0]=c>>>24;o[b+12|0]=d;o[b+13|0]=d>>>8;o[b+14|0]=d>>>16;o[b+15|0]=d>>>24;b=h<<4;d=b+q[a+200>>2]|0;g=q[d+4>>2];c=q[a+32>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[d>>2];q[c+4>>2]=g;g=q[d+12>>2];q[c+8>>2]=q[d+8>>2];q[c+12>>2]=g;d=b+q[a+212>>2]|0;g=q[d+4>>2];c=q[a+44>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[d>>2];q[c+4>>2]=g;g=q[d+12>>2];q[c+8>>2]=q[d+8>>2];q[c+12>>2]=g;d=b+q[a+224>>2]|0;g=q[d+4>>2];c=q[a+56>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[d>>2];q[c+4>>2]=g;g=q[d+12>>2];q[c+8>>2]=q[d+8>>2];q[c+12>>2]=g;d=b+q[a+236>>2]|0;g=q[d+4>>2];c=q[a+68>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[d>>2];q[c+4>>2]=g;g=q[d+12>>2];q[c+8>>2]=q[d+8>>2];q[c+12>>2]=g;d=b+q[a+248>>2]|0;g=q[d+4>>2];c=q[a+80>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[d>>2];q[c+4>>2]=g;g=q[d+12>>2];q[c+8>>2]=q[d+8>>2];q[c+12>>2]=g;b=b+q[a+260>>2]|0;d=q[b+4>>2];c=q[a+92>>2]+(q[(e+q[a+8>>2]|0)+4>>2]<<4)|0;q[c>>2]=q[b>>2];q[c+4>>2]=d;d=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=d;c=q[(e+q[a+8>>2]|0)+4>>2]<<2;b=h<<2;q[c+q[a+104>>2]>>2]=q[b+q[a+272>>2]>>2];q[c+q[a+116>>2]>>2]=q[b+q[a+284>>2]>>2];q[c+q[a+128>>2]>>2]=q[b+q[a+296>>2]>>2];c=c+q[a+140>>2]|0;d=b+q[a+308>>2]|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[c|0]=d;o[c+1|0]=d>>>8;o[c+2|0]=d>>>16;o[c+3|0]=d>>>24;d=q[a+8>>2];q[q[a+152>>2]+(q[(e+d|0)+4>>2]<<2)>>2]=q[b+q[a+320>>2]>>2];h=h+1|0;b=q[a+12>>2];if(h>>>0>3>>>0){continue}break}e=d}r:{if(q[a+356>>2]<1){break r}if((b|0)==(e|0)){b=e;break r}e=0;while(1){b=q[a+164>>2]+(q[((e<<3)+d|0)+4>>2]<<4)|0;c=q[a+332>>2]+(e<<4)|0;d=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=d;d=q[c+12>>2];q[b+8>>2]=q[c+8>>2];q[b+12>>2]=d;e=e+1|0;b=q[a+12>>2];d=q[a+8>>2];if(e>>>0>3>>>0){continue}break}e=d}if(!((b|0)==(e|0)|q[a+360>>2]<1)){e=0;while(1){b=q[a+176>>2]+(q[((e<<3)+d|0)+4>>2]<<4)|0;c=q[a+344>>2]+(e<<4)|0;d=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=d;d=q[c+12>>2];q[b+8>>2]=q[c+8>>2];q[b+12>>2]=d;e=e+1|0;d=q[a+8>>2];if(e>>>0>2]-d>>3>>>0){continue}break}}Dx(k,q[a+20>>2],q[a+24>>2]);Ex(a+200|0,q[a+32>>2],q[a+36>>2]);Ex(a+212|0,q[a+44>>2],q[a+48>>2]);Ex(a+224|0,q[a+56>>2],q[a+60>>2]);Ex(a+236|0,q[a+68>>2],q[a+72>>2]);Ex(a+248|0,q[a+80>>2],q[a+84>>2]);Ex(a+260|0,q[a+92>>2],q[a+96>>2]);Zr(a+272|0,q[a+104>>2],q[a+108>>2]);Zr(a+284|0,q[a+116>>2],q[a+120>>2]);Zr(a+296|0,q[a+128>>2],q[a+132>>2]);Zr(a+308|0,q[a+140>>2],q[a+144>>2]);Zr(a+320|0,q[a+152>>2],q[a+156>>2]);Ex(a+332|0,q[a+164>>2],q[a+168>>2]);Ex(a+344|0,q[a+176>>2],q[a+180>>2])}ue=i+32|0}function Fr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=x(0),r=0,s=0,t=0,v=0,w=0,z=0,A=0,B=0,C=0,D=0,E=x(0),G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=x(0),la=0,ma=x(0),na=0,oa=0;d=ue-1984|0;ue=d;q[d+1844>>2]=0;q[d+1840>>2]=5300;la=Sp(d+280|0,0,x(1),2);a:{f=q[c+4>>2];b:{if(f>>>0>3){m=4896;g=377;break b}c:{switch(f-1|0){default:h=q[c+60>>2];g=q[c+52>>2];f=q[c+56>>2];e=_S(12);q[e+8>>2]=h;q[e>>2]=g;q[e+4>>2]=f;m=6496;g=378;break b;case 0:r=q[c+56>>2];e=q[c+52>>2];m=6608;g=379;break b;case 1:h=q[c+60>>2];g=q[c+52>>2];f=q[c+56>>2];e=_S(12);q[e+8>>2]=h;q[e>>2]=g;q[e+4>>2]=f;m=6720;g=380;break b;case 2:break c}}r=lV(d+176|0,0,100);e=q[c+56>>2];q[d+144>>2]=q[c+52>>2];q[d+148>>2]=e;e=q[c+64>>2];q[d+152>>2]=q[c+60>>2];q[d+156>>2]=e;e=q[c+72>>2];q[d+160>>2]=q[c+68>>2];q[d+164>>2]=e;e=q[c+80>>2];q[d+168>>2]=q[c+76>>2];q[d+172>>2]=e;Kr(d+144|0);e=q[d+172>>2];h=d+32|0;f=h;q[f>>2]=q[d+168>>2];q[f+4>>2]=e;e=q[d+164>>2];g=d+24|0;f=g;q[f>>2]=q[d+160>>2];q[f+4>>2]=e;e=q[d+156>>2];j=d+16|0;f=j;q[f>>2]=q[d+152>>2];q[f+4>>2]=e;e=q[d+148>>2];q[d+8>>2]=q[d+144>>2];q[d+12>>2]=e;s=Lr(d+40|0,r);q[d+132>>2]=0;q[d+124>>2]=0;q[d+128>>2]=0;f=q[d+260>>2];k=q[d+264>>2]-f|0;d:{if(!k){break d}e=k>>2;if(e>>>0>=1073741824){break a}l=_S(k);q[d+124>>2]=l;q[d+128>>2]=l;q[d+132>>2]=l+(e<<2);if((k|0)<1){break d}na=d,oa=kV(l,f,k)+k|0,q[na+128>>2]=oa}t=q[d+272>>2];q[d+136>>2]=t;e=q[h+4>>2];v=d+1872|0;f=v;q[f>>2]=q[h>>2];q[f+4>>2]=e;e=q[g+4>>2];h=d+1864|0;f=h;q[f>>2]=q[g>>2];q[f+4>>2]=e;e=q[j+4>>2];g=d+1856|0;f=g;q[f>>2]=q[j>>2];q[f+4>>2]=e;e=q[d+12>>2];q[d+1848>>2]=q[d+8>>2];q[d+1852>>2]=e;G=q[s>>2];H=d+1888|0;f=d+48|0;I=q[f>>2];q[H>>2]=I;e=d+44|0;J=q[e>>2];q[d+1884>>2]=J;q[e>>2]=0;q[f>>2]=0;q[d+1880>>2]=G;q[s>>2]=0;w=d+1892|0;f=d+52|0;K=q[f>>2];q[w>>2]=K;L=q[d+56>>2];q[d+1896>>2]=L;e=d+60|0;M=q[e>>2];q[e>>2]=0;N=d+1900|0;q[N>>2]=M;q[f>>2]=0;q[f+4>>2]=0;z=d+1904|0;e=d- -64|0;O=q[e>>2];q[z>>2]=O;P=q[d+68>>2];q[e>>2]=0;q[e+4>>2]=0;q[d+1908>>2]=P;Q=q[d+76>>2];e=d+72|0;R=q[e>>2];q[e>>2]=0;q[e+4>>2]=0;S=d+1912|0;q[S>>2]=R;A=d+1916|0;q[A>>2]=Q;e=d+80|0;T=q[e>>2];q[d+1920>>2]=T;q[e>>2]=0;e=d+84|0;U=q[e>>2];q[e>>2]=0;V=d+1924|0;q[V>>2]=U;B=d+1928|0;f=d+88|0;W=q[f>>2];q[B>>2]=W;e=d+92|0;X=q[e>>2];q[d+1932>>2]=X;q[f>>2]=0;q[e>>2]=0;e=d+96|0;Y=q[e>>2];q[e>>2]=0;Z=d+1936|0;q[Z>>2]=Y;C=d+1940|0;f=d+100|0;_=q[f>>2];q[C>>2]=_;e=d+104|0;$=q[e>>2];q[d+1944>>2]=$;q[f>>2]=0;q[e>>2]=0;e=d+108|0;aa=q[e>>2];q[e>>2]=0;ba=d+1948|0;q[ba>>2]=aa;D=d+1952|0;f=d+112|0;ca=q[f>>2];q[D>>2]=ca;e=d+116|0;da=q[e>>2];q[d+1956>>2]=da;q[f>>2]=0;q[e>>2]=0;e=d+120|0;ea=q[e>>2];q[e>>2]=0;fa=d+1960|0;q[fa>>2]=ea;ga=q[d+124>>2];q[d+1964>>2]=ga;ha=q[d+128>>2];q[d+1968>>2]=ha;ia=d+1972|0;ja=q[d+132>>2];q[ia>>2]=ja;q[d+124>>2]=0;q[d+128>>2]=0;q[d+132>>2]=0;q[d+1976>>2]=t;e=_S(132);i=q[g>>2];m=q[g+4>>2];k=q[h>>2];l=q[h+4>>2];j=q[v>>2];h=q[v+4>>2];g=q[d+1848>>2];f=q[d+1852>>2];q[e+40>>2]=I;q[e+36>>2]=J;q[e+32>>2]=G;q[e+24>>2]=j;q[e+28>>2]=h;q[e+16>>2]=k;q[e+20>>2]=l;q[e+8>>2]=i;q[e+12>>2]=m;q[e>>2]=g;q[e+4>>2]=f;q[H>>2]=0;q[d+1880>>2]=0;q[d+1884>>2]=0;q[e+48>>2]=L;q[e+44>>2]=K;q[e+52>>2]=M;q[N>>2]=0;q[w>>2]=0;q[w+4>>2]=0;q[e+60>>2]=P;q[e+56>>2]=O;q[e+64>>2]=R;q[S>>2]=0;q[z>>2]=0;q[z+4>>2]=0;q[e+72>>2]=T;q[e+68>>2]=Q;q[e+76>>2]=U;q[V>>2]=0;q[A>>2]=0;q[A+4>>2]=0;q[e+84>>2]=X;q[e+80>>2]=W;q[e+88>>2]=Y;q[Z>>2]=0;q[B>>2]=0;q[B+4>>2]=0;q[e+96>>2]=$;q[e+92>>2]=_;q[e+100>>2]=aa;q[ba>>2]=0;q[C>>2]=0;q[C+4>>2]=0;q[e+108>>2]=da;q[e+112>>2]=ea;q[e+104>>2]=ca;q[fa>>2]=0;q[D>>2]=0;q[D+4>>2]=0;q[e+120>>2]=ha;q[e+116>>2]=ga;q[e+124>>2]=ja;q[ia>>2]=0;q[d+1964>>2]=0;q[d+1968>>2]=0;q[e+128>>2]=t;Mr(d+1880|0);f=q[d+124>>2];if(f){q[d+128>>2]=f;_U(f)}Mr(s);f=q[d+260>>2];if(f){q[d+264>>2]=f;_U(f)}Mr(r);m=6832;g=381}k=kV(_S(288),c,284);q[k+284>>2]=la;f=q[c>>2];e:{if(f>>>0<=1){if(f-1){ka=u[c+16>>2];p=u[c+12>>2];l=d+1872|0;f=l;q[f>>2]=0;q[f+4>>2]=0;j=4896;q[d+1892>>2]=4896;q[d+1888>>2]=382;f=d+1880|0;q[f>>2]=0;q[f+4>>2]=0;f=d+1856|0;q[f>>2]=0;q[f+4>>2]=0;q[d+1876>>2]=4896;q[l>>2]=377;q[d+1864>>2]=0;q[d+1868>>2]=0;q[d+1848>>2]=0;q[d+1852>>2]=0;ma=fV(x(y(x(p-ka))),x(360));f=q[m>>2];f:{if(!f){h=e;f=0;break f}h=n[f](e)|0;j=q[d+1876>>2];f=q[d+1864>>2]}E=x(p/x(180));p=x(ka/x(180));q[l>>2]=g;q[d+1868>>2]=r;q[d+1876>>2]=m;q[d+1864>>2]=h;g=q[j+4>>2];if(g){n[g](f)}E=x(E*x(3.1415927410125732));p=x(p*x(3.1415927410125732));j=ma>2]=383;f=q[d+1892>>2];q[d+1892>>2]=6944;g=q[d+1880>>2];q[d+1880>>2]=h;f=q[f+4>>2];if(f){n[f](g)}u[d+1852>>2]=p;u[d+1848>>2]=E;f=q[c+28>>2];o[d+1860|0]=j;q[d+1856>>2]=f;Pr(d+144|0,d+1848|0,q[c+20>>2],q[c+24>>2]);Qr(d+144|0);Rr(d+144|0,c+196|0,c+200|0,c+204|0,c+208|0,c+212|0,c+216|0,c+220|0,c+224|0,c+228|0,c+180|0,c+188|0);Sr(d+144|0,c);Tr(d+144|0,q[c+8>>2]);i=q[d+144>>2];g=q[d+148>>2];if((i|0)!=(g|0)){while(1){u[i+48>>2]=x(u[i+48>>2]*u[c+276>>2])+u[c+268>>2];f=i+52|0;u[f>>2]=x(u[f>>2]*u[c+280>>2])+u[c+272>>2];i=i+80|0;if((g|0)!=(i|0)){continue}break}}n[q[q[b>>2]+28>>2]](d+8|0,b,d+144|0);q[a>>2]=q[d+8>>2];b=q[d+156>>2];g:{if(!b){break g}q[d+160>>2]=b;a=q[d+164>>2];xt(d+8|0);n[q[d+16>>2]](d+8|0,b,a-b|0);a=q[q[d+20>>2]+4>>2];if(!a){break g}n[a](q[d+8>>2])}b=q[d+144>>2];h:{if(!b){break h}q[d+148>>2]=b;a=q[d+152>>2];zt(d+8|0);n[q[d+16>>2]](d+8|0,b,a-b|0);a=q[q[d+20>>2]+4>>2];if(!a){break h}n[a](q[d+8>>2])}a=q[q[d+1892>>2]+4>>2];if(a){n[a](q[d+1880>>2])}a=q[q[d+1876>>2]+4>>2];if(!a){break e}n[a](q[d+1864>>2]);break e}h=0;lV(d+1848|0,0,72);i=4896;q[d+1912>>2]=4896;q[d+1908>>2]=382;q[d+1896>>2]=4896;l=d+1892|0;q[l>>2]=377;j=e;f=q[m>>2];if(f){j=n[f](e)|0;i=q[d+1896>>2];h=q[d+1884>>2]}q[l>>2]=g;q[d+1888>>2]=r;q[d+1896>>2]=m;q[d+1884>>2]=j;f=q[i+4>>2];if(f){n[f](h)}h=kV(_S(288),k,288);q[d+1908>>2]=383;f=q[d+1912>>2];q[d+1912>>2]=6944;g=q[d+1900>>2];q[d+1900>>2]=h;f=q[f+4>>2];if(f){n[f](g)}q[d+1916>>2]=q[c+12>>2];q[d+1852>>2]=q[c+20>>2];q[d+1848>>2]=q[c+16>>2];q[d+1856>>2]=q[c+48>>2];f=q[c+28>>2];q[d+1876>>2]=q[c+24>>2];q[d+1880>>2]=f;f=q[c+36>>2];q[d+1868>>2]=q[c+32>>2];q[d+1872>>2]=f;f=q[c+44>>2];q[d+1860>>2]=q[c+40>>2];q[d+1864>>2]=f;Ur(d+144|0,d+1848|0,d+1840|0);Qr(d+144|0);Rr(d+144|0,c+196|0,c+200|0,c+204|0,c+208|0,c+212|0,c+216|0,c+220|0,c+224|0,c+228|0,c+180|0,c+188|0);Sr(d+144|0,c);Tr(d+144|0,q[c+8>>2]);i=q[d+144>>2];g=q[d+148>>2];if((i|0)!=(g|0)){while(1){u[i+48>>2]=x(u[i+48>>2]*u[c+276>>2])+u[c+268>>2];f=i+52|0;u[f>>2]=x(u[f>>2]*u[c+280>>2])+u[c+272>>2];i=i+80|0;if((g|0)!=(i|0)){continue}break}}n[q[q[b>>2]+28>>2]](d+8|0,b,d+144|0);q[a>>2]=q[d+8>>2];b=q[d+156>>2];i:{if(!b){break i}q[d+160>>2]=b;a=q[d+164>>2];xt(d+8|0);n[q[d+16>>2]](d+8|0,b,a-b|0);a=q[q[d+20>>2]+4>>2];if(!a){break i}n[a](q[d+8>>2])}b=q[d+144>>2];j:{if(!b){break j}q[d+148>>2]=b;a=q[d+152>>2];zt(d+8|0);n[q[d+16>>2]](d+8|0,b,a-b|0);a=q[q[d+20>>2]+4>>2];if(!a){break j}n[a](q[d+8>>2])}a=q[q[d+1912>>2]+4>>2];if(a){n[a](q[d+1900>>2])}a=q[q[d+1896>>2]+4>>2];if(!a){break e}n[a](q[d+1884>>2]);break e}q[a>>2]=0}_U(k);a=q[m+4>>2];if(a){n[a](e)}ue=d+1984|0;return}kU();F()}function Vg(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,t=0;d=ue-1088|0;ue=d;c=n[q[q[a>>2]+28>>2]](a)|0;b=q[c>>2];m=0;a:{if(!b){break a}n[q[q[b>>2]>>2]](b)|0;m=q[c>>2]}b:{c:{if(r[a+328|0]){if(!q[a+332>>2]){b=lV(_S(84),0,84);q[b+16>>2]=0;q[b+20>>2]=0;q[b>>2]=b+4;q[b+28>>2]=0;q[b+32>>2]=0;q[b+12>>2]=b+16;q[b+40>>2]=0;q[b+44>>2]=0;q[b+24>>2]=b+28;q[b+52>>2]=0;q[b+56>>2]=0;q[b+36>>2]=b+40;q[b+64>>2]=0;q[b+68>>2]=0;q[b+48>>2]=b+52;q[b+76>>2]=0;q[b+80>>2]=0;q[b+60>>2]=b- -64;q[b+72>>2]=b+76;q[a+332>>2]=b}b=a+232|0;c=b;d:{if(o[a+243|0]>-1){break d}c=q[b>>2]}l=c;c=q[a+40>>2];b=q[a+44>>2];if((c|0)==(b|0)){break c}while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+28>>2]>>2];b=0;c=0;f=0;e:{if(!l){break e}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break e}h=s[h+ -2>>1];f=g;if((h|0)==47){break e}f=g;if((h|0)==92){break e}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;c=q[a+332>>2];q[d+56>>2]=0;b=q[k>>2];f:{if(!b){break f}n[q[q[b>>2]>>2]](b)|0;b=q[d+56>>2];if(!b){break f}n[q[q[b>>2]+8>>2]](b)|0;q[d+56>>2]=0}q[d+56>>2]=q[k>>2];Wg(c,d- -64|0,d+56|0);b=q[d+56>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+56>>2]=0}c=q[a+40>>2];b=q[a+44>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}break c}Rf(a);b=q[a+20>>2];if(!b){break b}n[q[q[b>>2]+36>>2]](b,a);break b}c=q[a+64>>2];b=q[a+68>>2];if((c|0)!=(b|0)){i=0;while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+52>>2]>>2];b=0;c=0;f=0;g:{if(!l){break g}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break g}h=s[h+ -2>>1];f=g;if((h|0)==47){break g}f=g;if((h|0)==92){break g}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+48>>2]=0;c=b+12|0;b=q[k>>2];h:{if(!b){break h}n[q[q[b>>2]>>2]](b)|0;b=q[d+48>>2];if(!b){break h}n[q[q[b>>2]+8>>2]](b)|0;q[d+48>>2]=0}q[d+48>>2]=q[k>>2];Wg(c,d- -64|0,d+48|0);b=q[d+48>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+48>>2]=0}c=q[a+64>>2];b=q[a+68>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}c=q[a+92>>2];j=q[a+88>>2];if((c|0)!=(j|0)){i=0;while(1){h=i<<2;k=q[h+q[a+76>>2]>>2];if(k){c=0;b=0;f=0;i:{if(!l){break i}while(1){g=b;b=b+1|0;e=g<<1;t=e+l|0;if(s[t>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break i}t=s[t+ -2>>1];f=g;if((t|0)==47){break i}f=g;if((t|0)==92){break i}p[e+(d- -64|0)>>1]=47;f=b}e=f;while(1){b=c;c=b+1|0;g=b<<1;if(s[g+k>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,k,g);c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+40>>2]=0;c=b+24|0;e=j+h|0;b=q[e>>2];j:{if(!b){break j}n[q[q[b>>2]>>2]](b)|0;b=q[d+40>>2];if(!b){break j}n[q[q[b>>2]+8>>2]](b)|0;q[d+40>>2]=0}q[d+40>>2]=q[e>>2];Wg(c,d- -64|0,d+40|0);b=q[d+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+40>>2]=0}j=q[a+88>>2];c=q[a+92>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}c=q[a+112>>2];b=q[a+116>>2];if((c|0)!=(b|0)){i=0;while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+100>>2]>>2];b=0;c=0;f=0;k:{if(!l){break k}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break k}h=s[h+ -2>>1];f=g;if((h|0)==47){break k}f=g;if((h|0)==92){break k}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+32>>2]=0;c=b+36|0;b=q[k>>2];l:{if(!b){break l}n[q[q[b>>2]>>2]](b)|0;b=q[d+32>>2];if(!b){break l}n[q[q[b>>2]+8>>2]](b)|0;q[d+32>>2]=0}q[d+32>>2]=q[k>>2];Wg(c,d- -64|0,d+32|0);b=q[d+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+32>>2]=0}c=q[a+112>>2];b=q[a+116>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}c=q[a+136>>2];b=q[a+140>>2];if((c|0)!=(b|0)){i=0;while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+124>>2]>>2];b=0;c=0;f=0;m:{if(!l){break m}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break m}h=s[h+ -2>>1];f=g;if((h|0)==47){break m}f=g;if((h|0)==92){break m}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+24>>2]=0;c=b+48|0;b=q[k>>2];n:{if(!b){break n}n[q[q[b>>2]>>2]](b)|0;b=q[d+24>>2];if(!b){break n}n[q[q[b>>2]+8>>2]](b)|0;q[d+24>>2]=0}q[d+24>>2]=q[k>>2];Wg(c,d- -64|0,d+24|0);b=q[d+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+24>>2]=0}c=q[a+136>>2];b=q[a+140>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}c=q[a+184>>2];b=q[a+188>>2];if((c|0)!=(b|0)){i=0;while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+172>>2]>>2];b=0;c=0;f=0;o:{if(!l){break o}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break o}h=s[h+ -2>>1];f=g;if((h|0)==47){break o}f=g;if((h|0)==92){break o}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+16>>2]=0;c=b+60|0;b=q[k>>2];p:{if(!b){break p}n[q[q[b>>2]>>2]](b)|0;b=q[d+16>>2];if(!b){break p}n[q[q[b>>2]+8>>2]](b)|0;q[d+16>>2]=0}q[d+16>>2]=q[k>>2];Wg(c,d- -64|0,d+16|0);b=q[d+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+16>>2]=0}c=q[a+184>>2];b=q[a+188>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}c=q[a+208>>2];b=q[a+212>>2];if((c|0)==(b|0)){break b}i=0;while(1){e=i<<2;k=e+c|0;if(q[k>>2]){j=q[e+q[a+196>>2]>>2];b=0;c=0;f=0;q:{if(!l){break q}while(1){g=c;c=c+1|0;e=g<<1;h=e+l|0;if(s[h>>1]){continue}break}kV(d- -64|0,l,e);f=0;if(!g){break q}h=s[h+ -2>>1];f=g;if((h|0)==47){break q}f=g;if((h|0)==92){break q}p[e+(d- -64|0)>>1]=47;f=c}e=f;if(j){while(1){c=b;b=b+1|0;g=c<<1;if(s[g+j>>1]){continue}break}kV((d- -64|0)+(e<<1)|0,j,g);b=c}c=0;b=b+e|0;if((b|0)>=1){while(1){e=(d- -64|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(d- -64|0)+(b<<1)>>1]=0;b=q[a+332>>2];q[d+8>>2]=0;c=b+72|0;b=q[k>>2];r:{if(!b){break r}n[q[q[b>>2]>>2]](b)|0;b=q[d+8>>2];if(!b){break r}n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0}q[d+8>>2]=q[k>>2];Wg(c,d- -64|0,d+8|0);b=q[d+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0}c=q[a+208>>2];b=q[a+212>>2]}i=i+1|0;if(i>>>0>2>>>0){continue}break}}if(m){n[q[q[m>>2]+8>>2]](m)|0}ue=d+1088|0}function Qr(a){var b=0,c=0,d=0,f=x(0),g=0,h=x(0),i=x(0),j=0,l=x(0),m=0,o=x(0),p=0,r=0,s=x(0),t=x(0),v=x(0),y=x(0),z=0,A=x(0),B=x(0),C=0,D=0,F=x(0);b=ue-160|0;ue=b;q[b+104>>2]=0;q[b+96>>2]=0;q[b+100>>2]=0;q[b+88>>2]=0;q[b+80>>2]=0;q[b+84>>2]=0;d=q[a+16>>2]-q[a+12>>2]|0;if(d){Wr(b+96|0,(d|0)/12|0);g=q[b+80>>2];j=q[b+84>>2];c=(q[a+16>>2]-q[a+12>>2]|0)/12|0}d=j-g>>4;a:{if(c>>>0>d>>>0){Wr(b+80|0,c-d|0);break a}if(c>>>0>=d>>>0){break a}q[b+84>>2]=(c<<4)+g}g=q[b+96>>2];if((g|0)!=q[b+100>>2]){c=0;while(1){j=c<<4;d=j+g|0;q[d+8>>2]=0;q[d+12>>2]=1065353216;q[d>>2]=0;q[d+4>>2]=0;d=j+q[b+80>>2]|0;q[d+8>>2]=0;q[d+12>>2]=1065353216;q[d>>2]=0;q[d+4>>2]=0;c=c+1|0;g=q[b+96>>2];if(c>>>0>2]-g>>4>>>0){continue}break}}c=q[a+12>>2];j=q[a+16>>2];b:{if((c|0)==(j|0)){d=j;break b}d=c;while(1){z=q[a>>2];p=w(m,12)+d|0;g=z+w(q[p>>2],80)|0;f=u[g>>2];r=z+w(q[p+4>>2],80)|0;l=u[r>>2];h=x(f-l);o=x(h*h);h=u[g+4>>2];s=u[r+4>>2];i=x(h-s);o=x(o+x(i*i));i=u[g+8>>2];t=u[r+8>>2];v=x(i-t);c:{if(x(E(x(o+x(v*v))))>2],80)|0;v=u[p>>2];y=x(l-v);o=x(y*y);y=u[p+4>>2];A=x(s-y);B=x(o+x(A*A));A=u[p+8>>2];o=x(t-A);if(x(E(x(B+x(o*o))))>2]|0;o=u[g+12>>2];o=x(x(u[r+12>>2]-o)*x(u[p+12>>2]-o));s=x(s-h);v=x(v-f);f=x(l-f);l=x(y-h);h=x(x(s*v)-x(f*l));t=x(t-i);y=x(t*l);l=x(A-i);i=x(y-x(s*l));l=x(x(f*l)-x(t*v));f=x(x(1)/x(E(x(x(h*h)+x(x(i*i)+x(l*l))))));u[c+12>>2]=x(o-o)*f;u[c+8>>2]=h*f;u[c+4>>2]=l*f;u[c>>2]=i*f;f=x(0);s=x(0);t=x(0);v=x(0);l=u[r+48>>2];i=u[r+52>>2];h=x(u[p+52>>2]-i);i=x(i-u[g+52>>2]);l=x(x(x(l-u[g+48>>2])*h)-x(i*x(u[p+48>>2]-l)));if(l!=x(0)){f=u[r+8>>2];s=x(x(-x(x(i*x(u[p+8>>2]-f))-x(h*x(f-u[g+8>>2]))))/l);f=u[r>>2];t=x(x(-x(x(i*x(u[p>>2]-f))-x(x(f-u[g>>2])*h)))/l);f=u[r+4>>2];h=x(x(-x(x(i*x(u[p+4>>2]-f))-x(h*x(f-u[g+4>>2]))))/l);f=x(x(1)/x(E(x(x(s*s)+x(x(t*t)+x(h*h))))));v=x(t*f);t=x(h*f);s=x(s*f)}c=d+q[b+80>>2]|0;u[c+12>>2]=f;u[c+8>>2]=s;u[c+4>>2]=t;u[c>>2]=v;j=q[a+16>>2];c=q[a+12>>2];d=c}m=m+1|0;if(m>>>0<(j-d|0)/12>>>0){continue}break}}m=b- -64|0;q[m>>2]=0;q[m+4>>2]=0;q[b+56>>2]=0;q[b+60>>2]=0;q[b+72>>2]=1065353216;q[b+40>>2]=0;q[b+44>>2]=0;q[b+32>>2]=0;q[b+36>>2]=0;q[b+48>>2]=1065353216;q[b+16>>2]=0;q[b+20>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;q[b+24>>2]=1065353216;if((d|0)!=(j|0)){j=0;while(1){p=0;while(1){c=q[a>>2]+w(q[(w(j,12)+c|0)+(p<<2)>>2],80)|0;i=u[c>>2];h=u[c+4>>2];f=u[c+8>>2];q[b+124>>2]=1065353216;f=x(L(x(x(f*x(1024)))));u[b+120>>2]=f;h=x(L(x(x(h*x(1024)))));u[b+116>>2]=h;i=x(L(x(x(i*x(1024)))));u[b+112>>2]=i;r=q[b+60>>2];d:{e:{if(!r){break e}g=q[b+56>>2];d=((h==x(0)?0:(k(h),e(0)))+(i==x(0)?0:(k(i),e(0)))|0)+(f==x(0)?0:(k(f),e(0)))|0;z=yW(r)>>>0>1;m=d&r+ -1;f:{if(!z){break f}c=d;m=c;if(c>>>0>>0){break f}m=(d>>>0)%(r>>>0)|0}c=q[g+(m<<2)>>2];if(!c){break e}c=q[c>>2];if(!c){break e}C=r+ -1|0;while(1){g=q[c+4>>2];g:{if((d|0)!=(g|0)){h:{if(!z){g=g&C;break h}if(g>>>0>>0){break h}g=(g>>>0)%(r>>>0)|0}if((g|0)==(m|0)){break g}break e}if(((u[c+20>>2]==h)<<1|u[c+16>>2]==i|(u[c+24>>2]==f)<<2)==7){break d}}c=q[c>>2];if(c){continue}break}}q[b+144>>2]=b+112;Xr(b+152|0,b+56|0,b+112|0,b+144|0);c=q[b+152>>2];q[c+40>>2]=0;q[c+44>>2]=1065353216;q[c+32>>2]=0;q[c+36>>2]=0;q[b+144>>2]=b+112;Xr(b+152|0,b+32|0,b+112|0,b+144|0);c=q[b+152>>2];q[c+40>>2]=0;q[c+44>>2]=1065353216;q[c+32>>2]=0;q[c+36>>2]=0;q[b+144>>2]=b+112;Yr(b+152|0,b+8|0,b+112|0,b+144|0);q[q[b+152>>2]+32>>2]=0}m=j<<4;c=m+q[b+96>>2]|0;if(((u[c+4>>2]==x(0))<<1|u[c>>2]==x(0)|(u[c+8>>2]==x(0))<<2)!=7){q[b+144>>2]=b+112;Xr(b+152|0,b+56|0,b+112|0,b+144|0);d=q[b+152>>2];g=d+32|0;u[g>>2]=u[c>>2]+u[g>>2];g=d+36|0;u[g>>2]=u[c+4>>2]+u[g>>2];g=d+40|0;u[g>>2]=u[c+8>>2]+u[g>>2];d=d+44|0;u[d>>2]=u[c+12>>2]+u[d>>2];d=q[b+80>>2];q[b+144>>2]=b+112;Xr(b+152|0,b+32|0,b+112|0,b+144|0);c=q[b+152>>2];g=c+32|0;d=d+m|0;u[g>>2]=u[d>>2]+u[g>>2];m=c+36|0;u[m>>2]=u[d+4>>2]+u[m>>2];m=c+40|0;u[m>>2]=u[d+8>>2]+u[m>>2];c=c+44|0;u[c>>2]=u[d+12>>2]+u[c>>2];q[b+144>>2]=b+112;Yr(b+152|0,b+8|0,b+112|0,b+144|0);c=q[b+152>>2]+32|0;q[c>>2]=q[c>>2]+1}p=p+1|0;if((p|0)!=3){c=q[a+12>>2];continue}break}j=j+1|0;c=q[a+12>>2];if(j>>>0<(q[a+16>>2]-c|0)/12>>>0){continue}break}}g=q[a>>2];if((g|0)!=q[a+4>>2]){m=0;while(1){c=w(m,80);d=c+g|0;f=u[d>>2];h=u[d+4>>2];i=u[d+8>>2];q[b+124>>2]=1065353216;D=b,F=x(L(x(x(i*x(1024))))),u[D+120>>2]=F;D=b,F=x(L(x(x(h*x(1024))))),u[D+116>>2]=F;D=b,F=x(L(x(x(f*x(1024))))),u[D+112>>2]=F;q[b+144>>2]=b+112;Xr(b+152|0,b+56|0,b+112|0,b+144|0);d=q[b+152>>2];q[b+144>>2]=b+112;Yr(b+152|0,b+8|0,b+112|0,b+144|0);h=u[d+32>>2];i=u[d+36>>2];l=u[d+40>>2];j=c+q[a>>2]|0;f=x(q[q[b+152>>2]+32>>2]);u[j+28>>2]=u[d+44>>2]/f;u[j+24>>2]=l/f;u[j+20>>2]=i/f;u[j+16>>2]=h/f;q[b+144>>2]=b+112;Xr(b+152|0,b+32|0,b+112|0,b+144|0);d=q[b+152>>2];q[b+144>>2]=b+112;Yr(b+152|0,b+8|0,b+112|0,b+144|0);h=u[d+32>>2];i=u[d+36>>2];l=u[d+40>>2];j=c+q[a>>2]|0;f=x(q[q[b+152>>2]+32>>2]);u[j+44>>2]=u[d+44>>2]/f;u[j+40>>2]=l/f;u[j+36>>2]=i/f;u[j+32>>2]=h/f;d=c+q[a>>2]|0;j=d+28|0;p=j;o=u[j>>2];h=u[d+16>>2];j=d+20|0;i=u[j>>2];g=d+24|0;l=u[g>>2];f=x(x(1)/x(E(x(x(x(h*h)+x(i*i))+x(l*l)))));u[p>>2]=o*f;u[g>>2]=l*f;u[j>>2]=i*f;u[d+16>>2]=h*f;c=c+q[a>>2]|0;d=c+44|0;p=d;o=u[d>>2];h=u[c+32>>2];d=c+36|0;i=u[d>>2];j=c+40|0;l=u[j>>2];f=x(x(1)/x(E(x(x(x(h*h)+x(i*i))+x(l*l)))));u[p>>2]=o*f;u[j>>2]=l*f;u[d>>2]=i*f;u[c+32>>2]=h*f;m=m+1|0;g=q[a>>2];if(m>>>0<(q[a+4>>2]-g|0)/80>>>0){continue}break}}c=q[b+16>>2];if(c){while(1){a=q[c>>2];zt(b+112|0);n[q[b+120>>2]](b+112|0,c,48);c=q[q[b+124>>2]+4>>2];if(c){n[c](q[b+112>>2])}c=a;if(c){continue}break}}a=q[b+8>>2];q[b+8>>2]=0;i:{if(!a){break i}c=q[b+12>>2];zt(b+112|0);n[q[b+120>>2]](b+112|0,a,c<<2);a=q[q[b+124>>2]+4>>2];if(!a){break i}n[a](q[b+112>>2])}c=q[b+40>>2];if(c){while(1){a=q[c>>2];zt(b+8|0);n[q[b+16>>2]](b+8|0,c,48);c=q[q[b+20>>2]+4>>2];if(c){n[c](q[b+8>>2])}c=a;if(c){continue}break}}a=q[b+32>>2];q[b+32>>2]=0;j:{if(!a){break j}c=q[b+36>>2];zt(b+8|0);n[q[b+16>>2]](b+8|0,a,c<<2);a=q[q[b+20>>2]+4>>2];if(!a){break j}n[a](q[b+8>>2])}c=q[b+64>>2];if(c){while(1){a=q[c>>2];zt(b+32|0);n[q[b+40>>2]](b+32|0,c,48);c=q[q[b+44>>2]+4>>2];if(c){n[c](q[b+32>>2])}c=a;if(c){continue}break}}a=q[b+56>>2];q[b+56>>2]=0;k:{if(!a){break k}c=q[b+60>>2];zt(b+32|0);n[q[b+40>>2]](b+32|0,a,c<<2);a=q[q[b+44>>2]+4>>2];if(!a){break k}n[a](q[b+32>>2])}a=q[b+80>>2];l:{if(!a){break l}q[b+84>>2]=a;c=q[b+88>>2];zt(b+56|0);n[q[b+64>>2]](b+56|0,a,c-a|0);a=q[q[b+68>>2]+4>>2];if(!a){break l}n[a](q[b+56>>2])}a=q[b+96>>2];m:{if(!a){break m}q[b+100>>2]=a;c=q[b+104>>2];zt(b+56|0);n[q[b+64>>2]](b+56|0,a,c-a|0);a=q[q[b+68>>2]+4>>2];if(!a){break m}n[a](q[b+56>>2])}ue=b+160|0}function Hf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=ue-1040|0;ue=g;a=sp(q[n[q[q[b>>2]+28>>2]](b)>>2]);k=q[a>>2];if(k){n[q[q[k>>2]>>2]](k)|0;k=q[a>>2]}if((n[q[q[b>>2]+48>>2]](b)|0)>=1){while(1){j=n[q[q[b>>2]+52>>2]](b,i)|0;d=0;a=0;a:{if(!e){break a}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break a}f=s[f+ -2>>1];a=c;if((f|0)==47){break a}a=c;if((f|0)==92){break a}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Co(g+8|0,k,g+16|0,0);c=q[g+8>>2];b:{if(!c){a=q[b+40>>2];break b}n[q[q[c>>2]>>2]](c)|0;a=q[b+40>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+48>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+60>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+64>>2]](b,i)|0;d=0;a=0;c:{if(!e){break c}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break c}f=s[f+ -2>>1];a=c;if((f|0)==47){break c}a=c;if((f|0)==92){break c}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Co(g+8|0,k,g+16|0,1);c=q[g+8>>2];d:{if(!c){a=q[b+64>>2];break d}n[q[q[c>>2]>>2]](c)|0;a=q[b+64>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+60>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+72>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+76>>2]](b,i)|0;d=0;a=0;e:{if(!e){break e}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break e}f=s[f+ -2>>1];a=c;if((f|0)==47){break e}a=c;if((f|0)==92){break e}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Co(g+8|0,k,g+16|0,2);c=q[g+8>>2];f:{if(!c){a=q[b+88>>2];break f}n[q[q[c>>2]>>2]](c)|0;a=q[b+88>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+72>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+84>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+88>>2]](b,i)|0;d=0;a=0;g:{if(!e){break g}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break g}f=s[f+ -2>>1];a=c;if((f|0)==47){break g}a=c;if((f|0)==92){break g}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;No(g+8|0,k,g+16|0);c=q[g+8>>2];h:{if(!c){a=q[b+112>>2];break h}n[q[q[c>>2]>>2]](c)|0;a=q[b+112>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+84>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+96>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+100>>2]](b,i)|0;d=0;a=0;i:{if(!e){break i}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break i}f=s[f+ -2>>1];a=c;if((f|0)==47){break i}a=c;if((f|0)==92){break i}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Ko(g+8|0,k,g+16|0);c=q[g+8>>2];j:{if(!c){a=q[b+136>>2];break j}n[q[q[c>>2]>>2]](c)|0;a=q[b+136>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+96>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+108>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+112>>2]](b,i)|0;d=0;a=0;k:{if(!e){break k}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break k}f=s[f+ -2>>1];a=c;if((f|0)==47){break k}a=c;if((f|0)==92){break k}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Po(g+8|0,k,g+16|0);c=q[g+8>>2];l:{if(!c){a=q[b+184>>2];break l}n[q[q[c>>2]>>2]](c)|0;a=q[b+184>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+108>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+120>>2]](b)|0)>=1){i=0;while(1){j=n[q[q[b>>2]+124>>2]](b,i)|0;d=0;a=0;m:{if(!e){break m}while(1){c=d;d=c+1|0;h=c<<1;f=h+e|0;if(s[f>>1]){continue}break}kV(g+16|0,e,h);a=0;if(!c){break m}f=s[f+ -2>>1];a=c;if((f|0)==47){break m}a=c;if((f|0)==92){break m}p[h+(g+16|0)>>1]=47;a=d}h=a;d=0;c=0;a=0;if(j){while(1){a=c;c=c+1|0;f=a<<1;if(s[f+j>>1]){continue}break}kV((g+16|0)+(h<<1)|0,j,f)}a=a+h|0;if((a|0)>=1){while(1){c=(g+16|0)+(d<<1)|0;if(s[c>>1]==92){p[c>>1]=47}d=d+1|0;if((a|0)!=(d|0)){continue}break}}p[(g+16|0)+(a<<1)>>1]=0;Ro(g+8|0,k,g+16|0);c=q[g+8>>2];n:{if(!c){a=q[b+208>>2];break n}n[q[q[c>>2]>>2]](c)|0;a=q[b+208>>2];n[q[q[c>>2]>>2]](c)|0}a=(i<<2)+a|0;d=q[a>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}q[a>>2]=c;if(c){n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}i=i+1|0;if((i|0)<(n[q[q[b>>2]+120>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+132>>2]](b)|0)>=1){d=0;while(1){a=n[q[q[b>>2]+136>>2]](b,d)|0;o:{if(!a){break o}To(g+16|0,k,a);c=q[g+16>>2];p:{if(!c){a=q[b+148>>2];break p}n[q[q[c>>2]>>2]](c)|0;a=q[b+148>>2];n[q[q[c>>2]>>2]](c)|0}a=(d<<2)+a|0;e=q[a>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a>>2]=0}q[a>>2]=c;if(!c){break o}n[q[q[c>>2]+8>>2]](c)|0;n[q[q[c>>2]+8>>2]](c)|0}d=d+1|0;if((d|0)<(n[q[q[b>>2]+132>>2]](b)|0)){continue}break}}if(k){n[q[q[k>>2]+8>>2]](k)|0}ue=g+1040|0}function pn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=x(0),m=0,p=0,s=x(0),t=x(0),v=0,w=0,y=0,z=0,A=x(0),B=0,C=0,D=0,F=x(0),G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=x(0),O=x(0),P=x(0),Q=0,R=0,S=0,T=0,U=0,V=0;c=ue-192|0;ue=c;b=q[a+464>>2];D=a+468|0;if((b|0)!=(D|0)){while(1){d=b;tl(a,b- -64|0);e=q[b+4>>2];a:{if(!e){b=q[d+8>>2];if((d|0)==q[b>>2]){break a}e=d+8|0;while(1){d=q[e>>2];e=d+8|0;b=q[d+8>>2];if((d|0)!=q[b>>2]){continue}break}break a}while(1){b=e;e=q[b>>2];if(e){continue}break}}if((b|0)!=(D|0)){continue}break}}nl(a);xl(a);ol(a,0);b=q[a+504>>2];d=q[a+500>>2];if((b|0)!=(d|0)){while(1){e=q[q[b+ -248>>2]+4>>2];if(e){n[e](q[b+ -260>>2])}b=b+ -288|0;e=q[b>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[b>>2]=0}if((b|0)!=(d|0)){continue}break}}q[a+504>>2]=d;I=a+524|0;b=a+528|0;sl(I,q[b>>2]);q[a+524>>2]=b;q[b>>2]=0;q[b+4>>2]=0;b=q[a+464>>2];if((D|0)!=(b|0)){R=a+500|0;v=c+32|0;w=c+16|0;m=c+160|0;p=c+144|0;y=c+96|0;z=c+80|0;J=c+88|0;K=c+56|0;L=c+48|0;while(1){d=b;if(q[b+68>>2]){M=d+32|0;if(r[d+84|0]){e=q[d+64>>2];yp(c+112|0);b=q[d+316>>2];q[J>>2]=q[d+312>>2];q[J+4>>2]=b;b=q[d+332>>2];q[c+104>>2]=q[d+328>>2];q[c+108>>2]=b;b=q[d+324>>2];q[y>>2]=q[d+320>>2];q[y+4>>2]=b;b=q[d+308>>2];q[z>>2]=q[d+304>>2];q[z+4>>2]=b;b=q[d+300>>2];q[c+72>>2]=q[d+296>>2];q[c+76>>2]=b;b=q[d+292>>2];q[c+64>>2]=q[d+288>>2];q[c+68>>2]=b;q[c+112>>2]=q[c+76>>2];q[c+116>>2]=q[c+92>>2];q[c+120>>2]=q[c+108>>2];if(q[e+296>>2]==1){F=u[e+312>>2];Vs(c+128|0,c- -64|0);N=u[c+136>>2];O=u[c+128>>2];P=u[c+132>>2];nt(c,e+300|0);l=u[c+8>>2];t=u[c+4>>2];A=u[c>>2];s=x(x(u[c+104>>2]*l)+x(x(u[c+100>>2]*t)+x(u[c+108>>2]+x(u[c+96>>2]*A))));k=x(x(u[c+88>>2]*l)+x(x(u[c+84>>2]*t)+x(u[c+92>>2]+x(u[c+80>>2]*A))));l=x(x(u[c+72>>2]*l)+x(x(u[c+68>>2]*t)+x(u[c+76>>2]+x(u[c+64>>2]*A))));t=x(F*x(E(x(x(x(O*O)+x(P*P))+x(N*N)))));b:{if(!r[M+53|0]){A=k;F=s;break b}Vs(c+128|0,d+176|0);F=x(x(s*u[d+216>>2])+x(x(k*u[d+212>>2])+x(x(l*u[d+208>>2])+u[d+220>>2])));A=x(x(s*u[d+200>>2])+x(x(k*u[d+196>>2])+x(x(l*u[d+192>>2])+u[d+204>>2])));l=x(x(s*u[d+184>>2])+x(x(k*u[d+180>>2])+x(x(l*u[d+176>>2])+u[d+188>>2])));k=u[c+128>>2];s=x(k*k);k=u[c+132>>2];s=x(s+x(k*k));k=u[c+136>>2];t=x(t*x(E(x(s+x(k*k)))))}yp(c+128|0);u[c+132>>2]=A;u[c+128>>2]=l;u[c+136>>2]=F;b=q[c+132>>2];q[d+264>>2]=q[c+128>>2];q[d+268>>2]=b;q[d+272>>2]=q[c+136>>2];u[d+276>>2]=t}b=q[c+76>>2];q[c+136>>2]=q[c+72>>2];q[c+140>>2]=b;b=q[c+68>>2];q[c+128>>2]=q[c+64>>2];q[c+132>>2]=b;b=q[z+12>>2];q[p+8>>2]=q[z+8>>2];q[p+12>>2]=b;b=q[z+4>>2];q[p>>2]=q[z>>2];q[p+4>>2]=b;b=q[y+12>>2];q[m+8>>2]=q[y+8>>2];q[m+12>>2]=b;b=q[y+4>>2];q[m>>2]=q[y>>2];q[m+4>>2]=b;e=q[c+132>>2];j=q[d+72>>2];b=j;q[b+80>>2]=q[c+128>>2];q[b+84>>2]=e;b=q[m+4>>2];q[j+112>>2]=q[m>>2];q[j+116>>2]=b;G=q[p>>2];H=q[p+4>>2];B=c+152|0;b=B;i=q[b>>2];f=q[b+4>>2];C=c+168|0;b=C;g=q[b>>2];h=q[b+4>>2];e=q[c+136>>2];b=q[c+140>>2];q[j+128>>2]=0;q[j+132>>2]=0;q[j+136>>2]=0;q[j+140>>2]=1065353216;q[j+120>>2]=g;q[j+124>>2]=h;q[j+104>>2]=i;q[j+108>>2]=f;q[j+96>>2]=G;q[j+100>>2]=H;q[j+88>>2]=e;q[j+92>>2]=b;if(r[d+85|0]){b=q[d+180>>2];q[c>>2]=q[d+176>>2];q[c+4>>2]=b;h=q[d+184>>2];e=q[d+188>>2];b=q[d+196>>2];q[w>>2]=q[d+192>>2];q[w+4>>2]=b;q[c+8>>2]=h;q[c+12>>2]=e;b=q[d+204>>2];q[w+8>>2]=q[d+200>>2];q[w+12>>2]=b;b=q[d+212>>2];q[v>>2]=q[d+208>>2];q[v+4>>2]=b;b=q[d+220>>2];q[v+8>>2]=q[d+216>>2];q[v+12>>2]=b;q[c+48>>2]=0;q[c+52>>2]=0;q[c+56>>2]=0;q[c+60>>2]=1065353216;e=q[d+72>>2];qn(c+128|0,e+80|0,c);b=q[c+188>>2];q[e+136>>2]=q[c+184>>2];q[e+140>>2]=b;b=q[c+180>>2];q[e+128>>2]=q[c+176>>2];q[e+132>>2]=b;b=q[C+4>>2];q[e+120>>2]=q[C>>2];q[e+124>>2]=b;b=q[m+4>>2];q[e+112>>2]=q[m>>2];q[e+116>>2]=b;b=q[B+4>>2];q[e+104>>2]=q[B>>2];q[e+108>>2]=b;b=q[p+4>>2];q[e+96>>2]=q[p>>2];q[e+100>>2]=b;b=q[c+140>>2];q[e+88>>2]=q[c+136>>2];q[e+92>>2]=b;b=q[c+132>>2];q[e+80>>2]=q[c+128>>2];q[e+84>>2]=b}Q=oo(c+128|0);S=q[c+64>>2];T=q[c+80>>2];j=q[c+96>>2];B=q[c+68>>2];C=q[c+84>>2];G=q[c+100>>2];H=q[c+72>>2];i=q[c+88>>2];f=q[c+104>>2];g=q[c+76>>2];h=q[c+92>>2];e=q[c+108>>2];b=oo(c);q[c+60>>2]=1065353216;q[c+56>>2]=e;q[c+52>>2]=h;q[c+48>>2]=g;q[c+44>>2]=0;q[c+40>>2]=f;q[c+36>>2]=i;q[c+32>>2]=H;q[c+28>>2]=0;q[c+24>>2]=G;q[c+20>>2]=C;q[c+16>>2]=B;q[c+12>>2]=0;q[c+8>>2]=j;q[c+4>>2]=T;q[c>>2]=S;to(Q,b);ht(c,Q);e=q[c+4>>2];h=q[d+72>>2];b=h;q[b+144>>2]=q[c>>2];q[b+148>>2]=e;b=q[K+4>>2];q[h+200>>2]=q[K>>2];q[h+204>>2]=b;b=q[L+4>>2];q[h+192>>2]=q[L>>2];q[h+196>>2]=b;b=q[c+44>>2];q[h+184>>2]=q[c+40>>2];q[h+188>>2]=b;b=q[v+4>>2];q[h+176>>2]=q[v>>2];q[h+180>>2]=b;b=q[c+28>>2];q[h+168>>2]=q[c+24>>2];q[h+172>>2]=b;b=q[w+4>>2];q[h+160>>2]=q[w>>2];q[h+164>>2]=b;b=q[c+12>>2];q[h+152>>2]=q[c+8>>2];q[h+156>>2]=b;o[d+84|0]=0}f=d+68|0;e=d- -64|0;g=q[a+504>>2];c:{if((g|0)!=q[a+508>>2]){q[g>>2]=0;b=q[e>>2];d:{if(!b){break d}n[q[q[b>>2]>>2]](b)|0;b=q[g>>2];if(!b){break d}n[q[q[b>>2]+8>>2]](b)|0;q[g>>2]=0}q[g>>2]=q[d+64>>2];b=q[f+4>>2];q[g+4>>2]=q[f>>2];q[g+8>>2]=b;b=q[f+12>>2];q[g+12>>2]=q[f+8>>2];q[g+16>>2]=b;h=r[f+17|0]|r[f+18|0]<<8|(r[f+19|0]<<16|r[f+20|0]<<24);b=r[f+13|0]|r[f+14|0]<<8|(r[f+15|0]<<16|r[f+16|0]<<24);o[g+17|0]=b;o[g+18|0]=b>>>8;o[g+19|0]=b>>>16;o[g+20|0]=b>>>24;o[g+21|0]=h;o[g+22|0]=h>>>8;o[g+23|0]=h>>>16;o[g+24|0]=h>>>24;b=q[d+96>>2];q[g+28>>2]=q[d+92>>2];q[g+32>>2]=b;q[g+36>>2]=q[d+100>>2];b=q[d+104>>2];q[g+40>>2]=b;b=q[b>>2];if(b){U=g,V=n[b](q[d+92>>2])|0,q[U+28>>2]=V}kV(g+44|0,d+108|0,228);q[a+504>>2]=q[a+504>>2]+288;break c}zl(R,e)}i=kl(I,M);b=q[e>>2];if(b){n[q[q[b>>2]>>2]](b)|0}b=q[i>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[i>>2]=0}q[i>>2]=q[d+64>>2];e=r[f+17|0]|r[f+18|0]<<8|(r[f+19|0]<<16|r[f+20|0]<<24);b=r[f+13|0]|r[f+14|0]<<8|(r[f+15|0]<<16|r[f+16|0]<<24);o[i+17|0]=b;o[i+18|0]=b>>>8;o[i+19|0]=b>>>16;o[i+20|0]=b>>>24;o[i+21|0]=e;o[i+22|0]=e>>>8;o[i+23|0]=e>>>16;o[i+24|0]=e>>>24;b=q[f+12>>2];q[i+12>>2]=q[f+8>>2];q[i+16>>2]=b;b=q[f+4>>2];q[i+4>>2]=q[f>>2];q[i+8>>2]=b;h=q[d+100>>2];f=q[d+96>>2];b=q[d+92>>2];g=q[d+104>>2];e=q[g>>2];if(e){b=n[e](b)|0}q[i+36>>2]=h;h=q[i+28>>2];q[i+28>>2]=b;q[i+32>>2]=f;e=i+40|0;b=q[e>>2];q[e>>2]=g;b=q[b+4>>2];if(b){n[b](h)}kV(i+44|0,d+108|0,228)}e=q[d+4>>2];e:{if(!e){b=q[d+8>>2];if((d|0)==q[b>>2]){break e}e=d+8|0;while(1){d=q[e>>2];e=d+8|0;b=q[d+8>>2];if((d|0)!=q[b>>2]){continue}break}break e}while(1){b=e;e=q[b>>2];if(e){continue}break}}if((b|0)!=(D|0)){continue}break}}ue=c+192|0}function $w(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=ue-240|0;ue=b;q[a+512>>2]=0;q[a+516>>2]=0;q[a+504>>2]=0;q[a+508>>2]=0;q[a+496>>2]=0;q[a+500>>2]=0;c=b+56|0;q[c>>2]=0;q[b+68>>2]=0;q[b+72>>2]=0;q[b+76>>2]=0;o[c|0]=0;o[b+59|0]=8;q[b+44>>2]=0;q[b+32>>2]=2;c=r[190858]|r[190859]<<8|(r[190860]<<16|r[190861]<<24);q[b+36>>2]=r[190854]|r[190855]<<8|(r[190856]<<16|r[190857]<<24);q[b+40>>2]=c;q[b+48>>2]=1230196560;q[b+52>>2]=1313818964;q[b+60>>2]=0;q[b+64>>2]=2;o[b+45|0]=0;o[b+44|0]=r[190862];o[b+47|0]=9;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+72>>2]=12;q[b+76>>2]=-2147483632;q[b+68>>2]=c;o[c+12|0]=0;d=r[190872]|r[190873]<<8|(r[190874]<<16|r[190875]<<24);o[c+8|0]=d;o[c+9|0]=d>>>8;o[c+10|0]=d>>>16;o[c+11|0]=d>>>24;d=r[190868]|r[190869]<<8|(r[190870]<<16|r[190871]<<24);e=r[190864]|r[190865]<<8|(r[190866]<<16|r[190867]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+88>>2]=0;q[b+92>>2]=1;c=b+80|0;q[c>>2]=0;q[c+4>>2]=0;q[b+100>>2]=0;q[b+104>>2]=0;q[b+108>>2]=0;o[b+91|0]=6;q[c>>2]=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);p[b+84>>1]=r[190881]|r[190882]<<8;o[b+86|0]=0;q[b+96>>2]=2;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+104>>2]=14;q[b+108>>2]=-2147483632;q[b+100>>2]=c;o[c+14|0]=0;d=r[190894]|r[190895]<<8|(r[190896]<<16|r[190897]<<24);e=r[190890]|r[190891]<<8|(r[190892]<<16|r[190893]<<24);o[c+6|0]=e;o[c+7|0]=e>>>8;o[c+8|0]=e>>>16;o[c+9|0]=e>>>24;o[c+10|0]=d;o[c+11|0]=d>>>8;o[c+12|0]=d>>>16;o[c+13|0]=d>>>24;d=r[190888]|r[190889]<<8|(r[190890]<<16|r[190891]<<24);e=r[190884]|r[190885]<<8|(r[190886]<<16|r[190887]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+120>>2]=0;q[b+124>>2]=1;c=b+112|0;q[c>>2]=0;q[c+4>>2]=0;q[b+132>>2]=0;q[b+136>>2]=0;q[b+140>>2]=0;o[b+123|0]=6;f=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);q[c>>2]=f;g=r[190881]|r[190882]<<8;p[b+116>>1]=g;o[b+118|0]=0;q[b+128>>2]=2;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+136>>2]=13;q[b+140>>2]=-2147483632;q[b+132>>2]=c;o[c+13|0]=0;d=r[190908]|r[190909]<<8|(r[190910]<<16|r[190911]<<24);e=r[190904]|r[190905]<<8|(r[190906]<<16|r[190907]<<24);o[c+5|0]=e;o[c+6|0]=e>>>8;o[c+7|0]=e>>>16;o[c+8|0]=e>>>24;o[c+9|0]=d;o[c+10|0]=d>>>8;o[c+11|0]=d>>>16;o[c+12|0]=d>>>24;d=r[190903]|r[190904]<<8|(r[190905]<<16|r[190906]<<24);e=r[190899]|r[190900]<<8|(r[190901]<<16|r[190902]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+152>>2]=0;q[b+156>>2]=2;c=b+144|0;q[c>>2]=0;q[c+4>>2]=0;d=b+172|0;q[d>>2]=0;e=b+184|0;q[e>>2]=0;q[b+164>>2]=1970302537;q[b+168>>2]=1448435572;q[b+188>>2]=0;q[b+192>>2]=4;q[b+176>>2]=1129858388;q[b+180>>2]=1146244943;o[b+155|0]=6;q[c>>2]=f;p[b+148>>1]=g;o[b+150|0]=0;o[d|0]=0;o[b+175|0]=8;o[b+187|0]=8;o[e|0]=0;q[b+196>>2]=0;q[b+200>>2]=0;q[b+204>>2]=0;q[b+160>>2]=1;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+200>>2]=11;q[b+204>>2]=-2147483632;q[b+196>>2]=c;o[c+11|0]=0;d=r[190920]|r[190921]<<8|(r[190922]<<16|r[190923]<<24);o[c+7|0]=d;o[c+8|0]=d>>>8;o[c+9|0]=d>>>16;o[c+10|0]=d>>>24;d=r[190917]|r[190918]<<8|(r[190919]<<16|r[190920]<<24);e=r[190913]|r[190914]<<8|(r[190915]<<16|r[190916]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+216>>2]=0;q[b+220>>2]=3;c=b+208|0;q[c>>2]=0;q[c+4>>2]=0;o[b+219|0]=6;q[c>>2]=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);p[b+212>>1]=r[190881]|r[190882]<<8;o[b+214|0]=0;c=q[a+544>>2];n[q[q[c>>2]+40>>2]](b+224|0,c,b+32|0,6);c=0;d=q[b+224>>2];a:{if(!d){break a}n[q[q[d>>2]>>2]](d)|0;c=d+ -4|0;d=q[b+224>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[b+224>>2]=0}d=q[a+520>>2];n[q[q[d>>2]+20>>2]](d,2240);d=q[a+524>>2];n[q[q[d>>2]+20>>2]](d,2240);d=q[a+528>>2];n[q[q[d>>2]+20>>2]](d,2240);d=q[a+520>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+524>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+528>>2];n[q[q[d>>2]+24>>2]](d,128);d=q[a+532>>2];n[q[q[d>>2]+20>>2]](d,1088);d=q[a+536>>2];n[q[q[d>>2]+20>>2]](d,1088);d=q[a+540>>2];n[q[q[d>>2]+20>>2]](d,1088);d=q[a+532>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+536>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+540>>2];n[q[q[d>>2]+24>>2]](d,128);f=q[a+532>>2];g=q[a+520>>2];q[b+24>>2]=0;d=c+4|0;b:{if(!c){break b}n[q[q[d>>2]>>2]](d)|0;e=q[b+24>>2];if(!e){break b}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=c;vB(g,b+24|0);e=q[b+24>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=0;c:{if(!c){break c}n[q[q[d>>2]>>2]](d)|0;e=q[b+24>>2];if(!e){break c}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=c;vB(f,b+24|0);e=q[b+24>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}f=q[a+536>>2];g=q[a+524>>2];q[b+16>>2]=0;d:{if(!c){break d}n[q[q[d>>2]>>2]](d)|0;e=q[b+16>>2];if(!e){break d}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=c;vB(g,b+16|0);e=q[b+16>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=0;e:{if(!c){break e}n[q[q[d>>2]>>2]](d)|0;e=q[b+16>>2];if(!e){break e}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=c;vB(f,b+16|0);e=q[b+16>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}e=q[a+540>>2];f=q[a+528>>2];q[b+8>>2]=0;f:{if(!c){break f}n[q[q[d>>2]>>2]](d)|0;a=q[b+8>>2];if(!a){break f}n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=c;vB(f,b+8|0);a=q[b+8>>2];if(a){n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=0;g:{if(!c){break g}n[q[q[d>>2]>>2]](d)|0;a=q[b+8>>2];if(!a){break g}n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=c;vB(e,b+8|0);a=q[b+8>>2];if(a){n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}if(c){n[q[q[d>>2]+8>>2]](d)|0}a=b+224|0;while(1){h:{if(o[a+ -5|0]>-1){break h}c=q[a+ -8>>2];d=q[a+ -16>>2];xt(b+224|0);n[q[b+232>>2]](b+224|0,d,c&2147483647);c=q[q[b+236>>2]+4>>2];if(!c){break h}n[c](q[b+224>>2])}c=a+ -32|0;i:{if(o[a+ -17|0]>-1){break i}d=q[a+ -20>>2];a=q[a+ -28>>2];xt(b+224|0);n[q[b+232>>2]](b+224|0,a,d&2147483647);a=q[q[b+236>>2]+4>>2];if(!a){break i}n[a](q[b+224>>2])}a=c;if((c|0)!=(b+32|0)){continue}break}ue=b+240|0}function ax(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=ue-240|0;ue=b;q[a+512>>2]=0;q[a+516>>2]=0;q[a+504>>2]=0;q[a+508>>2]=0;q[a+496>>2]=0;q[a+500>>2]=0;c=b+56|0;q[c>>2]=0;q[b+68>>2]=0;q[b+72>>2]=0;q[b+76>>2]=0;o[c|0]=0;o[b+59|0]=8;q[b+44>>2]=0;q[b+32>>2]=2;c=r[190858]|r[190859]<<8|(r[190860]<<16|r[190861]<<24);q[b+36>>2]=r[190854]|r[190855]<<8|(r[190856]<<16|r[190857]<<24);q[b+40>>2]=c;q[b+48>>2]=1230196560;q[b+52>>2]=1313818964;q[b+60>>2]=0;q[b+64>>2]=2;o[b+45|0]=0;o[b+44|0]=r[190862];o[b+47|0]=9;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+72>>2]=12;q[b+76>>2]=-2147483632;q[b+68>>2]=c;o[c+12|0]=0;d=r[190872]|r[190873]<<8|(r[190874]<<16|r[190875]<<24);o[c+8|0]=d;o[c+9|0]=d>>>8;o[c+10|0]=d>>>16;o[c+11|0]=d>>>24;d=r[190868]|r[190869]<<8|(r[190870]<<16|r[190871]<<24);e=r[190864]|r[190865]<<8|(r[190866]<<16|r[190867]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+88>>2]=0;q[b+92>>2]=1;c=b+80|0;q[c>>2]=0;q[c+4>>2]=0;q[b+100>>2]=0;q[b+104>>2]=0;q[b+108>>2]=0;o[b+91|0]=6;q[c>>2]=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);p[b+84>>1]=r[190881]|r[190882]<<8;o[b+86|0]=0;q[b+96>>2]=2;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+104>>2]=14;q[b+108>>2]=-2147483632;q[b+100>>2]=c;o[c+14|0]=0;d=r[190894]|r[190895]<<8|(r[190896]<<16|r[190897]<<24);e=r[190890]|r[190891]<<8|(r[190892]<<16|r[190893]<<24);o[c+6|0]=e;o[c+7|0]=e>>>8;o[c+8|0]=e>>>16;o[c+9|0]=e>>>24;o[c+10|0]=d;o[c+11|0]=d>>>8;o[c+12|0]=d>>>16;o[c+13|0]=d>>>24;d=r[190888]|r[190889]<<8|(r[190890]<<16|r[190891]<<24);e=r[190884]|r[190885]<<8|(r[190886]<<16|r[190887]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+120>>2]=0;q[b+124>>2]=1;c=b+112|0;q[c>>2]=0;q[c+4>>2]=0;q[b+132>>2]=0;q[b+136>>2]=0;q[b+140>>2]=0;o[b+123|0]=6;f=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);q[c>>2]=f;g=r[190881]|r[190882]<<8;p[b+116>>1]=g;o[b+118|0]=0;q[b+128>>2]=2;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+136>>2]=13;q[b+140>>2]=-2147483632;q[b+132>>2]=c;o[c+13|0]=0;d=r[190908]|r[190909]<<8|(r[190910]<<16|r[190911]<<24);e=r[190904]|r[190905]<<8|(r[190906]<<16|r[190907]<<24);o[c+5|0]=e;o[c+6|0]=e>>>8;o[c+7|0]=e>>>16;o[c+8|0]=e>>>24;o[c+9|0]=d;o[c+10|0]=d>>>8;o[c+11|0]=d>>>16;o[c+12|0]=d>>>24;d=r[190903]|r[190904]<<8|(r[190905]<<16|r[190906]<<24);e=r[190899]|r[190900]<<8|(r[190901]<<16|r[190902]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+152>>2]=0;q[b+156>>2]=2;c=b+144|0;q[c>>2]=0;q[c+4>>2]=0;d=b+172|0;q[d>>2]=0;e=b+184|0;q[e>>2]=0;q[b+164>>2]=1970302537;q[b+168>>2]=1448435572;q[b+188>>2]=0;q[b+192>>2]=4;q[b+176>>2]=1129858388;q[b+180>>2]=1146244943;o[b+155|0]=6;q[c>>2]=f;p[b+148>>1]=g;o[b+150|0]=0;o[d|0]=0;o[b+175|0]=8;o[b+187|0]=8;o[e|0]=0;q[b+196>>2]=0;q[b+200>>2]=0;q[b+204>>2]=0;q[b+160>>2]=1;wt(b+224|0);c=n[q[b+232>>2]](b+224|0,16)|0;d=q[q[b+236>>2]+4>>2];if(d){n[d](q[b+224>>2])}q[b+200>>2]=11;q[b+204>>2]=-2147483632;q[b+196>>2]=c;o[c+11|0]=0;d=r[190920]|r[190921]<<8|(r[190922]<<16|r[190923]<<24);o[c+7|0]=d;o[c+8|0]=d>>>8;o[c+9|0]=d>>>16;o[c+10|0]=d>>>24;d=r[190917]|r[190918]<<8|(r[190919]<<16|r[190920]<<24);e=r[190913]|r[190914]<<8|(r[190915]<<16|r[190916]<<24);o[c|0]=e;o[c+1|0]=e>>>8;o[c+2|0]=e>>>16;o[c+3|0]=e>>>24;o[c+4|0]=d;o[c+5|0]=d>>>8;o[c+6|0]=d>>>16;o[c+7|0]=d>>>24;q[b+216>>2]=0;q[b+220>>2]=3;c=b+208|0;q[c>>2]=0;q[c+4>>2]=0;o[b+219|0]=6;q[c>>2]=r[190877]|r[190878]<<8|(r[190879]<<16|r[190880]<<24);p[b+212>>1]=r[190881]|r[190882]<<8;o[b+214|0]=0;c=q[a+544>>2];n[q[q[c>>2]+40>>2]](b+224|0,c,b+32|0,6);c=0;d=q[b+224>>2];a:{if(!d){break a}n[q[q[d>>2]>>2]](d)|0;c=d+ -4|0;d=q[b+224>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[b+224>>2]=0}d=q[a+520>>2];n[q[q[d>>2]+20>>2]](d,368);d=q[a+524>>2];n[q[q[d>>2]+20>>2]](d,368);d=q[a+528>>2];n[q[q[d>>2]+20>>2]](d,368);d=q[a+520>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+524>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+528>>2];n[q[q[d>>2]+24>>2]](d,128);d=q[a+532>>2];n[q[q[d>>2]+20>>2]](d,224);d=q[a+536>>2];n[q[q[d>>2]+20>>2]](d,224);d=q[a+540>>2];n[q[q[d>>2]+20>>2]](d,224);d=q[a+532>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+536>>2];n[q[q[d>>2]+24>>2]](d,288);d=q[a+540>>2];n[q[q[d>>2]+24>>2]](d,128);f=q[a+532>>2];g=q[a+520>>2];q[b+24>>2]=0;d=c+4|0;b:{if(!c){break b}n[q[q[d>>2]>>2]](d)|0;e=q[b+24>>2];if(!e){break b}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=c;vB(g,b+24|0);e=q[b+24>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=0;c:{if(!c){break c}n[q[q[d>>2]>>2]](d)|0;e=q[b+24>>2];if(!e){break c}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}q[b+24>>2]=c;vB(f,b+24|0);e=q[b+24>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+24>>2]=0}f=q[a+536>>2];g=q[a+524>>2];q[b+16>>2]=0;d:{if(!c){break d}n[q[q[d>>2]>>2]](d)|0;e=q[b+16>>2];if(!e){break d}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=c;vB(g,b+16|0);e=q[b+16>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=0;e:{if(!c){break e}n[q[q[d>>2]>>2]](d)|0;e=q[b+16>>2];if(!e){break e}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}q[b+16>>2]=c;vB(f,b+16|0);e=q[b+16>>2];if(e){n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[b+16>>2]=0}e=q[a+540>>2];f=q[a+528>>2];q[b+8>>2]=0;f:{if(!c){break f}n[q[q[d>>2]>>2]](d)|0;a=q[b+8>>2];if(!a){break f}n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=c;vB(f,b+8|0);a=q[b+8>>2];if(a){n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=0;g:{if(!c){break g}n[q[q[d>>2]>>2]](d)|0;a=q[b+8>>2];if(!a){break g}n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}q[b+8>>2]=c;vB(e,b+8|0);a=q[b+8>>2];if(a){n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[b+8>>2]=0}if(c){n[q[q[d>>2]+8>>2]](d)|0}a=b+224|0;while(1){h:{if(o[a+ -5|0]>-1){break h}c=q[a+ -8>>2];d=q[a+ -16>>2];xt(b+224|0);n[q[b+232>>2]](b+224|0,d,c&2147483647);c=q[q[b+236>>2]+4>>2];if(!c){break h}n[c](q[b+224>>2])}c=a+ -32|0;i:{if(o[a+ -17|0]>-1){break i}d=q[a+ -20>>2];a=q[a+ -28>>2];xt(b+224|0);n[q[b+232>>2]](b+224|0,a,d&2147483647);a=q[q[b+236>>2]+4>>2];if(!a){break i}n[a](q[b+224>>2])}a=c;if((c|0)!=(b+32|0)){continue}break}ue=b+240|0}function Rg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=ue-1040|0;ue=f;n[q[q[a>>2]+176>>2]](a);a:{if(d){break a}d=a+232|0;if(o[a+243|0]>-1){break a}d=q[d>>2]}h=n[q[q[a>>2]+28>>2]](a)|0;e=q[h>>2];l=0;b:{if(!e){break b}n[q[q[e>>2]>>2]](e)|0;l=q[h>>2]}c:{d:{if(r[a+328|0]){if(q[a+44>>2]==q[a+40>>2]){break d}while(1){k=i<<2;j=q[k+q[a+28>>2]>>2];c=0;b=0;e:{if(!d){break e}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break e}g=s[g+ -2>>1];b=e;if((g|0)==47){break e}b=e;if((g|0)==92){break e}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=e+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2],f+16|0,f+8|0)){b=k+q[a+40>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+40>>2]>>2>>>0){continue}break}break d}e=q[a+20>>2];n[q[q[e>>2]+32>>2]](e,a,b,c,d);break c}if(q[a+68>>2]!=q[a+64>>2]){i=0;while(1){k=i<<2;j=q[k+q[a+52>>2]>>2];c=0;b=0;f:{if(!d){break f}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break f}g=s[g+ -2>>1];b=e;if((g|0)==47){break f}b=e;if((g|0)==92){break f}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=e+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+12|0,f+16|0,f+8|0)){b=k+q[a+64>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+64>>2]>>2>>>0){continue}break}}if(q[a+92>>2]!=q[a+88>>2]){i=0;while(1){k=i<<2;j=q[k+q[a+76>>2]>>2];c=0;b=0;g:{if(!d){break g}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break g}g=s[g+ -2>>1];b=e;if((g|0)==47){break g}b=e;if((g|0)==92){break g}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=e+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+24|0,f+16|0,f+8|0)){b=k+q[a+88>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+88>>2]>>2>>>0){continue}break}}if(q[a+116>>2]!=q[a+112>>2]){i=0;while(1){k=i<<2;j=q[k+q[a+100>>2]>>2];c=0;b=0;h:{if(!d){break h}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break h}g=s[g+ -2>>1];b=e;if((g|0)==47){break h}b=e;if((g|0)==92){break h}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=b+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+36|0,f+16|0,f+8|0)){b=k+q[a+112>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+112>>2]>>2>>>0){continue}break}}if(q[a+140>>2]!=q[a+136>>2]){i=0;while(1){k=i<<2;j=q[k+q[a+124>>2]>>2];c=0;b=0;i:{if(!d){break i}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break i}g=s[g+ -2>>1];b=e;if((g|0)==47){break i}b=e;if((g|0)==92){break i}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=b+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+48|0,f+16|0,f+8|0)){b=k+q[a+136>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+136>>2]>>2>>>0){continue}break}}if(q[a+188>>2]!=q[a+184>>2]){i=0;while(1){k=i<<2;j=q[k+q[a+172>>2]>>2];c=0;b=0;j:{if(!d){break j}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break j}g=s[g+ -2>>1];b=e;if((g|0)==47){break j}b=e;if((g|0)==92){break j}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=b+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+60|0,f+16|0,f+8|0)){b=k+q[a+184>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+184>>2]>>2>>>0){continue}break}}if(q[a+212>>2]==q[a+208>>2]){break c}i=0;while(1){k=i<<2;j=q[k+q[a+196>>2]>>2];c=0;b=0;k:{if(!d){break k}while(1){e=c;c=c+1|0;h=e<<1;g=h+d|0;if(s[g>>1]){continue}break}kV(f+16|0,d,h);b=0;if(!e){break k}g=s[g+ -2>>1];b=e;if((g|0)==47){break k}b=e;if((g|0)==92){break k}p[h+(f+16|0)>>1]=47;b=c}h=b;c=0;b=0;e=0;if(j){while(1){e=b;b=b+1|0;g=e<<1;if(s[g+j>>1]){continue}break}kV((f+16|0)+(h<<1)|0,j,g)}b=e+h|0;if((b|0)>=1){while(1){e=(f+16|0)+(c<<1)|0;if(s[e>>1]==92){p[e>>1]=47}c=c+1|0;if((b|0)!=(c|0)){continue}break}}p[(f+16|0)+(b<<1)>>1]=0;q[f+8>>2]=0;if(Sg(q[a+332>>2]+72|0,f+16|0,f+8|0)){b=k+q[a+208>>2]|0;c=q[f+8>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}q[b>>2]=q[f+8>>2]}b=q[f+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}i=i+1|0;if(i>>>0>2]-q[a+208>>2]>>2>>>0){continue}break}}if(l){n[q[q[l>>2]+8>>2]](l)|0}ue=f+1040|0}function Et(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),p=0,s=0,t=0;e=ue-176|0;ue=e;q[e+88>>2]=7912;q[e+24>>2]=7892;q[e+32>>2]=7752;q[e+28>>2]=0;s=e+88|0;p=e+36|0;CI(s,p);q[e+160>>2]=0;q[e+164>>2]=-1;q[e+88>>2]=7772;q[e+24>>2]=7732;q[e+32>>2]=7752;t=dH(p);q[e+68>>2]=0;q[e+72>>2]=0;q[e+76>>2]=0;q[e+80>>2]=0;q[e+84>>2]=24;q[e+36>>2]=8052;h=e+32|0;b=Ft(Ft(Ft(h,7496,9),b,sV(b)),7506,4);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(h,7511,11);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(nI(Ft(h,7523,15),q[c>>2]),7539,1);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(nI(Ft(h,7541,15),q[c+4>>2]),7539,1);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(h,7557,16);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(h,7574,16);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=Ft(h,7591,21);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=0;while(1){d=q[c>>2];a:{if(!d){j=x(0);i=x(1);k=x(1);l=x(1);m=x(1);break a}if(d>>>0<=b>>>0){d=w(d,20)+c|0;j=x(u[d+ -12>>2]+x(b>>>0));i=u[d+4>>2];k=u[d+ -4>>2];l=u[d+ -8>>2];m=u[d>>2];break a}d=w(b,20)+c|0;i=u[d+24>>2];k=u[d+16>>2];l=u[d+12>>2];j=u[d+8>>2];m=u[d+20>>2]}b=b+1|0;d=Ft(nI(Ft(h,7613,3),b),7617,5);ST(e+8|0,x(i*l));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7613,3),b),7623,5);ST(e+8|0,x(i*k));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7613,3),b),7629,5);ST(e+8|0,x(i*m));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7613,3),b),7635,5);ST(e+8|0,j);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}if((b|0)!=8){continue}break}b=0;while(1){d=q[c+4>>2];b:{if(!d){i=x(0);j=x(1);break b}if(d>>>0<=b>>>0){d=(d<<3)+c|0;i=x(x(b>>>0)+u[d+160>>2]);j=u[d+164>>2];break b}d=(b<<3)+c|0;j=u[d+172>>2];i=u[d+168>>2]}b=b+1|0;d=Ft(nI(Ft(h,7641,3),b),7617,5);ST(e+8|0,j);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7641,3),b),7623,5);ST(e+8|0,i);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}if((b|0)!=8){continue}break}b=Ft(h,7645,5);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);d=pL(e+8|0,370576);d=n[q[q[d>>2]+28>>2]](d,10)|0;kL(e+8|0);pI(b,d);DH(b);b=0;while(1){d=q[c>>2];c:{if(!d){j=x(0);i=x(1);k=x(1);l=x(1);m=x(1);break c}if(d>>>0<=b>>>0){d=w(d,20)+c|0;j=x(u[d+ -12>>2]+x(b>>>0));i=u[d+4>>2];k=u[d+ -4>>2];l=u[d+ -8>>2];m=u[d>>2];break c}d=w(b,20)+c|0;i=u[d+24>>2];k=u[d+16>>2];l=u[d+12>>2];j=u[d+8>>2];m=u[d+20>>2]}d=Ft(nI(Ft(h,7651,9),b),7661,6);ST(e+8|0,x(i*l));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7651,9),b),7668,6);ST(e+8|0,x(i*k));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7651,9),b),7675,6);ST(e+8|0,x(i*m));g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7651,9),b),7682,6);ST(e+8|0,j);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}b=b+1|0;if((b|0)!=8){continue}break}b=0;while(1){d=q[c+4>>2];d:{if(!d){i=x(0);j=x(1);break d}if(d>>>0<=b>>>0){d=(d<<3)+c|0;i=x(x(b>>>0)+u[d+160>>2]);j=u[d+164>>2];break d}d=(b<<3)+c|0;j=u[d+172>>2];i=u[d+168>>2]}d=Ft(nI(Ft(h,7689,9),b),7661,6);ST(e+8|0,j);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}d=Ft(nI(Ft(h,7689,9),b),7668,6);ST(e+8|0,i);g=d;d=r[e+19|0];f=d<<24>>24<0;d=Ft(Ft(g,f?q[e+8>>2]:e+8|0,f?q[e+12>>2]:d),7539,1);EH(e+168|0,q[q[d>>2]+ -12>>2]+d|0);f=pL(e+168|0,370576);f=n[q[q[f>>2]+28>>2]](f,10)|0;kL(e+168|0);pI(d,f);DH(d);if(o[e+19|0]<=-1){_U(q[e+8>>2])}b=b+1|0;if((b|0)!=8){continue}break}b=Ft(h,7699,6);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(e+8|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(e+8|0);pI(b,c);DH(b);b=Ft(h,7706,11);EH(e+8|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(e+8|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(e+8|0);pI(b,c);DH(b);Gt(a,p);q[e+88>>2]=7772;q[e+24>>2]=7732;q[e+36>>2]=8052;q[e+32>>2]=7752;if(o[e+79|0]<=-1){_U(q[e+68>>2])}bH(t);ZG(s);ue=e+176|0}function kh(a,b){var c=0;c=ue-16|0;ue=c;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=b;q[a>>2]=2480;q[a+32>>2]=-1;q[a+36>>2]=-1;o[a+28|0]=1;p[a+128>>1]=0;p[a+130>>1]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+40>>2]=-1;q[a+44>>2]=-1;q[a+48>>2]=-1;q[a+52>>2]=-1;q[a+56>>2]=-1;q[a+104>>2]=0;q[a+108>>2]=0;q[a+96>>2]=1065353216;q[a+100>>2]=1065353216;q[a+92>>2]=1;q[a+84>>2]=0;q[a+88>>2]=1;q[a+76>>2]=1;q[a+80>>2]=0;q[a+68>>2]=2;q[a+72>>2]=2;q[a+60>>2]=1;q[a+64>>2]=2;p[a+132>>1]=0;q[a+180>>2]=2147483646;q[a+184>>2]=-1;q[a+144>>2]=0;q[a+148>>2]=1;q[a+136>>2]=15;q[a+140>>2]=0;yp(a+188|0);q[a+216>>2]=-1;q[a+220>>2]=-1;q[a+208>>2]=-1;q[a+212>>2]=-1;q[a+200>>2]=-1;q[a+204>>2]=-1;q[a+308>>2]=-1;q[a+312>>2]=-1;q[a+300>>2]=14;q[a+304>>2]=1600;q[a+316>>2]=-1;q[a+320>>2]=-1;q[a+324>>2]=-1;q[a+328>>2]=-1;p[a+440>>1]=0;q[a+424>>2]=0;q[a+404>>2]=0;q[a+456>>2]=0;q[a+296>>2]=7164;yp(a+496|0);q[a+644>>2]=0;q[a+648>>2]=0;p[a+640>>1]=0;q[a+652>>2]=0;q[a+656>>2]=0;q[a+660>>2]=0;q[a+664>>2]=0;q[a+668>>2]=0;q[a+672>>2]=0;q[a+676>>2]=0;q[a+680>>2]=0;o[a+681|0]=0;o[a+682|0]=0;o[a+683|0]=0;o[a+684|0]=0;o[a+685|0]=0;o[a+686|0]=0;o[a+687|0]=0;o[a+688|0]=0;yp(a+704|0);q[a+852>>2]=0;q[a+856>>2]=0;p[a+848>>1]=0;q[a+860>>2]=0;q[a+864>>2]=0;q[a+868>>2]=0;q[a+872>>2]=0;q[a+876>>2]=0;q[a+880>>2]=0;q[a+884>>2]=0;q[a+888>>2]=0;o[a+889|0]=0;o[a+890|0]=0;o[a+891|0]=0;o[a+892|0]=0;o[a+893|0]=0;o[a+894|0]=0;o[a+895|0]=0;o[a+896|0]=0;yp(a+912|0);b=a+1060|0;q[b>>2]=0;q[b+4>>2]=0;p[a+1056>>1]=0;b=a+1068|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1076|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1084|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1092|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1097|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;o[b+4|0]=0;o[b+5|0]=0;o[b+6|0]=0;o[b+7|0]=0;yp(a+1120|0);b=a+1268|0;q[b>>2]=0;q[b+4>>2]=0;p[a+1264>>1]=0;b=a+1276|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1284|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1292|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1300|0;q[b>>2]=0;q[b+4>>2]=0;b=a+1305|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;o[b+4|0]=0;o[b+5|0]=0;o[b+6|0]=0;o[b+7|0]=0;q[a+1344>>2]=2147483646;q[a+1348>>2]=-1;p[a+1328>>1]=0;yp(a+1352|0);b=a+1380|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1372|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1364|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1472|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1464|0;q[b>>2]=14;q[b+4>>2]=1600;b=a+1480|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1488|0;q[b>>2]=-1;q[b+4>>2]=-1;p[a+1604>>1]=0;q[a+1588>>2]=0;q[a+1568>>2]=0;b=a+1708|0;q[b>>2]=-1;q[b+4>>2]=-1;q[a+1620>>2]=0;q[a+1460>>2]=7164;b=a+1716|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1724|0;q[b>>2]=-1;q[b+4>>2]=-1;p[a+1784>>1]=0;q[a+1776>>2]=0;q[a+1756>>2]=0;q[a+1792>>2]=2147483646;q[a+1796>>2]=-1;b=a+1700|0;q[b>>2]=1608;q[b+4>>2]=1608;q[a+1696>>2]=7064;yp(a+1800|0);b=a+1828|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1820|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1812|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1920|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1912|0;q[b>>2]=14;q[b+4>>2]=1600;b=a+1928|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+1936|0;q[b>>2]=-1;q[b+4>>2]=-1;p[a+2052>>1]=0;q[a+2036>>2]=0;q[a+2016>>2]=0;b=a+2104|0;q[b>>2]=-1;q[b+4>>2]=-1;q[a+1908>>2]=7164;b=a+2112|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2120|0;q[b>>2]=-1;q[b+4>>2]=-1;p[a+2180>>1]=0;q[a+2172>>2]=0;q[a+2152>>2]=0;b=a+2300|0;q[b>>2]=1065353216;q[b+4>>2]=2139095039;q[a+2296>>2]=0;p[a+2292>>1]=0;b=a+2284|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2188|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2096|0;q[b>>2]=1608;q[b+4>>2]=1608;q[a+2092>>2]=7064;q[a+2308>>2]=0;b=a+2276|0;q[b>>2]=0;q[b+4>>2]=0;p[a+2272>>1]=0;q[a+2268>>2]=0;b=a+2312|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2320|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2328|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2336|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2344|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2352|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2360|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2368|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2376|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2600|0;q[b>>2]=1;q[b+4>>2]=1;b=a+2592|0;q[b>>2]=0;q[b+4>>2]=0;o[a+2588|0]=0;q[a+2520>>2]=1;b=a+2512|0;q[b>>2]=0;q[b+4>>2]=0;q[a+2476>>2]=0;b=a+2468|0;q[b>>2]=0;q[b+4>>2]=0;o[a+2466|0]=0;p[a+2464>>1]=0;b=a+2456|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+2448|0;q[b>>2]=1065353216;q[b+4>>2]=-1;b=a+2608|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2616|0;q[b>>2]=0;q[b+4>>2]=0;o[a+2652|0]=0;q[a+2648>>2]=1065353216;b=a+2624|0;q[b>>2]=1065353216;q[b+4>>2]=-1;q[a+2664>>2]=0;b=a+2656|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2632|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+2640|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2504|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2496|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2488|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2480|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+2580|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2572|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2564|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2556|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2548|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2540|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2532|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2524|0;q[b>>2]=0;q[b+4>>2]=0;q[a+3064>>2]=0;q[a+3012>>2]=0;q[a+2960>>2]=0;q[a+2908>>2]=0;q[a+2856>>2]=0;q[a+2804>>2]=0;q[a+2716>>2]=0;q[a+2668>>2]=0;q[a+2784>>2]=0;q[a+2764>>2]=0;b=a+2440|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2432|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2424|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2416|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2408|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2400|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2392|0;q[b>>2]=0;q[b+4>>2]=0;b=a+2384|0;q[b>>2]=0;q[b+4>>2]=0;q[a+3124>>2]=0;q[a+3116>>2]=0;q[a+3120>>2]=-1;b=a+3204|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+3196|0;q[b>>2]=-1;q[b+4>>2]=-1;b=a+3188|0;q[b>>2]=-1;q[b+4>>2]=-1;p[a+3264>>1]=0;q[a+3256>>2]=0;q[a+3236>>2]=0;b=a+3272|0;q[b>>2]=0;q[b+4>>2]=0;b=a+3180|0;q[b>>2]=1600;q[b+4>>2]=1600;q[a+3176>>2]=7064;Ne(a+3280|0,0,0,0,0);q[a+3292>>2]=0;o[a+3288|0]=0;q[a+3284>>2]=0;Ne(c+12|0,255,255,255,255);q[a+3296>>2]=q[c+12>>2];Ne(c+8|0,255,255,255,255);q[a+3300>>2]=q[c+8>>2];b=a+3428|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3420|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3412|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3404|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3396|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3388|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3380|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;b=a+3372|0;q[b>>2]=1065353216;q[b+4>>2]=1065353216;q[a+3364>>2]=1065353216;q[a+3368>>2]=1065353216;q[a+3356>>2]=0;q[a+3360>>2]=-1;b=a+3304|0;q[b>>2]=1065353216;q[b+4>>2]=0;ue=c+16|0;return a}function qs(a,b,c){var d=0,e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=0,m=x(0),n=0,o=x(0),p=x(0),r=0,s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=0,A=x(0),B=0,C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0);d=ue-208|0;ue=d;e=u[b+1548>>2];t=x(e*u[c>>2]);u[c>>2]=t;v=x(e*u[c+4>>2]);u[c+4>>2]=v;w=x(e*u[c+8>>2]);u[c+8>>2]=w;y=x(e*u[c+12>>2]);u[c+12>>2]=y;k=x(1);z=q[b+1552>>2];o=x(y+x(1));u[d+204>>2]=o;j=x(w+x(0));u[d+200>>2]=j;s=x(v+x(0));u[d+196>>2]=s;p=x(t+x(.0009765625));u[d+192>>2]=p;B=b+516|0;C=x(.5);D=x(.5);if(z){g=o;f=j;e=s;h=p;while(1){c=q[d+204>>2];q[d+184>>2]=q[d+200>>2];q[d+188>>2]=c;c=q[d+196>>2];q[d+176>>2]=q[d+192>>2];q[d+180>>2]=c;m=rs(B,d+176|0);g=x(g+g);u[d+204>>2]=g;f=x(f+f);u[d+200>>2]=f;e=x(e+e);u[d+196>>2]=e;h=x(h+h);u[d+192>>2]=h;i=x(i+x(k*m));k=x(k*x(.5));n=n+1|0;if((z|0)!=(n|0)){continue}break}r=q[b+1552>>2];D=x(x(i*x(.5))+x(.5))}u[d+204>>2]=o;u[d+200>>2]=j;u[d+196>>2]=s;u[d+192>>2]=p;z=b+1032|0;if(r){h=x(0);k=x(1);g=o;f=j;e=s;while(1){c=q[d+204>>2];q[d+168>>2]=q[d+200>>2];q[d+172>>2]=c;c=q[d+196>>2];q[d+160>>2]=q[d+192>>2];q[d+164>>2]=c;i=rs(z,d+160|0);g=x(g+g);u[d+204>>2]=g;f=x(f+f);u[d+200>>2]=f;e=x(e+e);u[d+196>>2]=e;p=x(p+p);u[d+192>>2]=p;h=x(h+x(k*i));k=x(k*x(.5));l=l+1|0;if((r|0)!=(l|0)){continue}break}r=q[b+1552>>2];C=x(x(h*x(.5))+x(.5))}p=x(y+x(-1));u[d+204>>2]=p;u[d+200>>2]=w;u[d+196>>2]=v;k=x(t+x(-.0009765625));u[d+192>>2]=k;E=x(.5);n=0;l=0;F=x(.5);if(r){m=x(0);g=x(1);f=p;e=w;h=v;i=k;while(1){c=q[d+204>>2];q[d+152>>2]=q[d+200>>2];q[d+156>>2]=c;c=q[d+196>>2];q[d+144>>2]=q[d+192>>2];q[d+148>>2]=c;y=rs(B,d+144|0);f=x(f+f);u[d+204>>2]=f;e=x(e+e);u[d+200>>2]=e;h=x(h+h);u[d+196>>2]=h;i=x(i+i);u[d+192>>2]=i;m=x(m+x(g*y));g=x(g*x(.5));l=l+1|0;if((r|0)!=(l|0)){continue}break}l=q[b+1552>>2];F=x(x(m*x(.5))+x(.5))}u[d+204>>2]=p;u[d+200>>2]=w;u[d+196>>2]=v;u[d+192>>2]=k;if(l){i=x(0);g=x(1);f=p;e=w;h=v;while(1){c=q[d+204>>2];q[d+136>>2]=q[d+200>>2];q[d+140>>2]=c;c=q[d+196>>2];q[d+128>>2]=q[d+192>>2];q[d+132>>2]=c;m=rs(z,d+128|0);f=x(f+f);u[d+204>>2]=f;e=x(e+e);u[d+200>>2]=e;h=x(h+h);u[d+196>>2]=h;k=x(k+k);u[d+192>>2]=k;i=x(i+x(g*m));g=x(g*x(.5));n=n+1|0;if((n|0)!=(l|0)){continue}break}l=q[b+1552>>2];E=x(x(i*x(.5))+x(.5))}u[d+204>>2]=o;u[d+200>>2]=j;g=x(v+x(.0009765625));u[d+196>>2]=g;k=x(t+x(0));u[d+192>>2]=k;G=x(.5);n=0;r=0;H=x(.5);if(l){f=x(1);e=o;h=j;i=g;m=k;while(1){c=q[d+204>>2];q[d+120>>2]=q[d+200>>2];q[d+124>>2]=c;c=q[d+196>>2];q[d+112>>2]=q[d+192>>2];q[d+116>>2]=c;y=rs(b,d+112|0);e=x(e+e);u[d+204>>2]=e;h=x(h+h);u[d+200>>2]=h;i=x(i+i);u[d+196>>2]=i;m=x(m+m);u[d+192>>2]=m;A=x(A+x(f*y));f=x(f*x(.5));r=r+1|0;if((r|0)!=(l|0)){continue}break}r=q[b+1552>>2];H=x(x(A*x(.5))+x(.5))}u[d+204>>2]=o;u[d+200>>2]=j;u[d+196>>2]=g;u[d+192>>2]=k;if(r){i=x(0);f=x(1);e=o;h=k;while(1){c=q[d+204>>2];q[d+104>>2]=q[d+200>>2];q[d+108>>2]=c;c=q[d+196>>2];q[d+96>>2]=q[d+192>>2];q[d+100>>2]=c;m=rs(z,d+96|0);e=x(e+e);u[d+204>>2]=e;j=x(j+j);u[d+200>>2]=j;g=x(g+g);u[d+196>>2]=g;h=x(h+h);u[d+192>>2]=h;i=x(i+x(f*m));f=x(f*x(.5));n=n+1|0;if((n|0)!=(r|0)){continue}break}r=q[b+1552>>2];G=x(x(i*x(.5))+x(.5))}u[d+204>>2]=p;u[d+200>>2]=w;j=x(v+x(-.0009765625));u[d+196>>2]=j;u[d+192>>2]=t;I=x(.5);n=0;l=0;J=x(.5);if(r){m=x(0);g=x(1);f=p;e=w;h=j;i=t;while(1){c=q[d+204>>2];q[d+88>>2]=q[d+200>>2];q[d+92>>2]=c;c=q[d+196>>2];q[d+80>>2]=q[d+192>>2];q[d+84>>2]=c;y=rs(b,d+80|0);f=x(f+f);u[d+204>>2]=f;e=x(e+e);u[d+200>>2]=e;h=x(h+h);u[d+196>>2]=h;i=x(i+i);u[d+192>>2]=i;m=x(m+x(g*y));g=x(g*x(.5));l=l+1|0;if((r|0)!=(l|0)){continue}break}l=q[b+1552>>2];J=x(x(m*x(.5))+x(.5))}u[d+204>>2]=p;u[d+200>>2]=w;u[d+196>>2]=j;u[d+192>>2]=t;if(l){i=x(0);g=x(1);f=p;e=w;h=t;while(1){c=q[d+204>>2];q[d+72>>2]=q[d+200>>2];q[d+76>>2]=c;c=q[d+196>>2];q[d+64>>2]=q[d+192>>2];q[d+68>>2]=c;m=rs(z,d- -64|0);f=x(f+f);u[d+204>>2]=f;e=x(e+e);u[d+200>>2]=e;j=x(j+j);u[d+196>>2]=j;h=x(h+h);u[d+192>>2]=h;i=x(i+x(g*m));g=x(g*x(.5));n=n+1|0;if((n|0)!=(l|0)){continue}break}l=q[b+1552>>2];I=x(x(i*x(.5))+x(.5))}u[d+204>>2]=o;j=x(w+x(.0009765625));u[d+200>>2]=j;u[d+196>>2]=s;u[d+192>>2]=k;A=x(.5);r=0;n=0;i=x(.5);if(l){m=x(0);g=x(1);f=o;e=j;h=s;i=k;while(1){c=q[d+204>>2];q[d+56>>2]=q[d+200>>2];q[d+60>>2]=c;c=q[d+196>>2];q[d+48>>2]=q[d+192>>2];q[d+52>>2]=c;y=rs(b,d+48|0);f=x(f+f);u[d+204>>2]=f;e=x(e+e);u[d+200>>2]=e;h=x(h+h);u[d+196>>2]=h;i=x(i+i);u[d+192>>2]=i;m=x(m+x(g*y));g=x(g*x(.5));n=n+1|0;if((n|0)!=(l|0)){continue}break}n=q[b+1552>>2];i=x(x(m*x(.5))+x(.5))}u[d+204>>2]=o;u[d+200>>2]=j;u[d+196>>2]=s;u[d+192>>2]=k;if(n){f=x(0);g=x(1);while(1){c=q[d+204>>2];q[d+40>>2]=q[d+200>>2];q[d+44>>2]=c;c=q[d+196>>2];q[d+32>>2]=q[d+192>>2];q[d+36>>2]=c;e=rs(B,d+32|0);o=x(o+o);u[d+204>>2]=o;j=x(j+j);u[d+200>>2]=j;s=x(s+s);u[d+196>>2]=s;k=x(k+k);u[d+192>>2]=k;f=x(f+x(g*e));g=x(g*x(.5));r=r+1|0;if((n|0)!=(r|0)){continue}break}n=q[b+1552>>2];A=x(x(f*x(.5))+x(.5))}u[d+204>>2]=p;o=x(w+x(-.0009765625));u[d+200>>2]=o;u[d+196>>2]=v;u[d+192>>2]=t;m=x(.5);r=0;l=0;g=x(.5);if(n){e=x(0);j=x(1);s=p;k=o;g=v;f=t;while(1){c=q[d+204>>2];q[d+24>>2]=q[d+200>>2];q[d+28>>2]=c;c=q[d+196>>2];q[d+16>>2]=q[d+192>>2];q[d+20>>2]=c;h=rs(b,d+16|0);s=x(s+s);u[d+204>>2]=s;k=x(k+k);u[d+200>>2]=k;g=x(g+g);u[d+196>>2]=g;f=x(f+f);u[d+192>>2]=f;e=x(e+x(j*h));j=x(j*x(.5));l=l+1|0;if((n|0)!=(l|0)){continue}break}l=q[b+1552>>2];g=x(x(e*x(.5))+x(.5))}w=x(C-E);k=x(D-F);f=x(G-I);h=x(H-J);u[d+204>>2]=p;u[d+200>>2]=o;u[d+196>>2]=v;u[d+192>>2]=t;if(l){s=x(0);j=x(1);while(1){b=q[d+204>>2];q[d+8>>2]=q[d+200>>2];q[d+12>>2]=b;b=q[d+196>>2];q[d>>2]=q[d+192>>2];q[d+4>>2]=b;e=rs(B,d);p=x(p+p);u[d+204>>2]=p;o=x(o+o);u[d+200>>2]=o;v=x(v+v);u[d+196>>2]=v;t=x(t+t);u[d+192>>2]=t;s=x(s+x(j*e));j=x(j*x(.5));r=r+1|0;if((r|0)!=(l|0)){continue}break}m=x(x(s*x(.5))+x(.5))}q[a+12>>2]=1140850688;u[a+8>>2]=x(k-h)*x(512);u[a+4>>2]=x(x(i-g)-w)*x(512);u[a>>2]=x(f-x(A-m))*x(512);ue=d+208|0}function Tp(a,b,c){var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,p=0,s=x(0),t=0,v=x(0),w=0,y=0,z=x(0),A=x(0),B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;m=ue-208|0;ue=m;i=q[b>>2];g=r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24);o[a+192|0]=1;a:{if((c|0)<1600){s=x(1);e=4;break a}s=(f(0,r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24)),j());q[a>>2]=r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24);q[a+4>>2]=r[i+12|0]|r[i+13|0]<<8|(r[i+14|0]<<16|r[i+15|0]<<24);q[a+8>>2]=r[i+16|0]|r[i+17|0]<<8|(r[i+18|0]<<16|r[i+19|0]<<24);d=yp(m+192|0);e=r[i+20|0]|r[i+21|0]<<8|(r[i+22|0]<<16|r[i+23|0]<<24);q[d>>2]=e;h=r[i+24|0]|r[i+25|0]<<8|(r[i+26|0]<<16|r[i+27|0]<<24);q[d+4>>2]=h;k=d;d=r[i+28|0]|r[i+29|0]<<8|(r[i+30|0]<<16|r[i+31|0]<<24);q[k+8>>2]=d;v=(f(0,d),j());z=(f(0,e),j());A=(f(0,h),j());b:{c:{if(!(A==x(0)?z==x(0):0)){o[a+144|0]=1;break c}o[a+144|0]=v!=x(0);if(v==x(0)){break b}}lt(m+128|0,v,z,A);d=m;k=q[d+188>>2];e=a+72|0;q[e>>2]=q[d+184>>2];q[e+4>>2]=k;l=q[d+180>>2];h=a- -64|0;q[h>>2]=q[d+176>>2];q[h+4>>2]=l;n=q[d+172>>2];k=a+56|0;q[k>>2]=q[d+168>>2];q[k+4>>2]=n;t=q[d+164>>2];l=a+48|0;q[l>>2]=q[d+160>>2];q[l+4>>2]=t;p=q[d+156>>2];n=a+40|0;q[n>>2]=q[d+152>>2];q[n+4>>2]=p;w=q[d+148>>2];t=a+32|0;p=t;q[p>>2]=q[d+144>>2];q[p+4>>2]=w;y=q[d+140>>2];p=a+24|0;q[p>>2]=q[d+136>>2];q[p+4>>2]=y;w=q[d+132>>2];q[a+16>>2]=q[d+128>>2];q[a+20>>2]=w;w=oo(d+128|0);y=q[a+36>>2];B=q[a+52>>2];C=q[a+68>>2];n=q[n>>2];k=q[k>>2];D=q[e>>2];E=q[a+44>>2];F=q[a+60>>2];G=q[a+76>>2];t=q[t>>2];l=q[l>>2];h=q[h>>2];H=q[a+20>>2];p=q[p>>2];I=q[a+28>>2];J=q[a+16>>2];e=oo(d);q[e+48>>2]=I;q[e+32>>2]=p;q[e+16>>2]=H;q[e+12>>2]=h;q[e+8>>2]=l;q[e+4>>2]=t;q[e>>2]=J;q[e+60>>2]=G;q[e+56>>2]=F;q[e+52>>2]=E;q[e+44>>2]=D;q[e+40>>2]=k;q[e+36>>2]=n;q[e+28>>2]=C;q[e+24>>2]=B;q[e+20>>2]=y;ht(d- -64|0,to(w,e));e=q[d+124>>2];q[a+136>>2]=q[d+120>>2];q[a+140>>2]=e;e=q[d+116>>2];q[a+128>>2]=q[d+112>>2];q[a+132>>2]=e;e=q[d+108>>2];q[a+120>>2]=q[d+104>>2];q[a+124>>2]=e;e=q[d+100>>2];q[a+112>>2]=q[d+96>>2];q[a+116>>2]=e;e=q[d+92>>2];q[a+104>>2]=q[d+88>>2];q[a+108>>2]=e;e=q[d+84>>2];q[a+96>>2]=q[d+80>>2];q[a+100>>2]=e;e=q[d+76>>2];q[a+88>>2]=q[d+72>>2];q[a+92>>2]=e;e=q[d+68>>2];q[a+80>>2]=q[d+64>>2];q[a+84>>2]=e}e=32}d:{e:{g=g+ -1|0;if(g>>>0>8){break e}f:{switch(g-1|0){case 0:d=e+i|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=_S(8);q[d>>2]=0;q[d+4>>2]=0;o[d+4|0]=(g|0)>0;u[d>>2]=s/x(60);h=q[a+148>>2];q[a+148>>2]=d;g=0;d=e+4|0;if(d>>>0<4){g=1}e=d;if(!h){break d}_U(h);break d;case 1:h=_S(4);u[h>>2]=s/x(60);g=q[a+152>>2];q[a+152>>2]=h;if(!g){break d}_U(g);break d;case 2:g:{if((c|0)<=1600){s=x(s/x(5));g=1;break g}d=e+i|0;g=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=e+4|0;e>>>0<4}h=_S(8);q[h>>2]=g;u[h+4>>2]=s/x(12);g=q[a+156>>2];q[a+156>>2]=h;if(!g){break d}_U(g);break d;default:k=1;if((c|0)<1601){g=0}else{d=e+i|0;k=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=0;d=e+4|0;if(d>>>0<4){g=1}e=d}d=g;h=e;e=e+8|0;if(e>>>0<8){d=d+1|0}l=h+i|0;n=r[l|0]|r[l+1|0]<<8|(r[l+2|0]<<16|r[l+3|0]<<24);v=(f(0,r[l+4|0]|r[l+5|0]<<8|(r[l+6|0]<<16|r[l+7|0]<<24)),j());if((c|0)<=1600){d=e+i|0;s=x((f(0,r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24)),j())*x(10));d=g;e=h+12|0;if(e>>>0<12){d=d+1|0}}g=e+i|0;g=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);l=_S(12);Rp(l,k,n,x(x(1)/v),x(s/x(10)),g);h=q[a+160>>2];q[a+160>>2]=l;g=d;d=e+4|0;if(d>>>0<4){g=g+1|0}e=d;if(!h){break d}g=q[h+8>>2];q[h+8>>2]=0;if(g){_U(g)}g=q[h+4>>2];q[h+4>>2]=0;if(g){_U(g)}_U(h);break d;case 5:h=_S(4);u[h>>2]=s/x(60);g=q[a+164>>2];q[a+164>>2]=h;if(!g){break d}_U(g);break d;case 6:d=e+i|0;q[m+72>>2]=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);g=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[m+64>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[m+68>>2]=g;nt(m+128|0,m- -64|0);k=_S(16);q[k>>2]=0;q[k+4>>2]=0;q[k+8>>2]=0;q[k+12>>2]=0;g=q[a+168>>2];q[a+168>>2]=k;e=e+12|0;e>>>0<12;if(g){_U(g);k=q[a+168>>2]}g=q[m+132>>2];q[k>>2]=q[m+128>>2];q[k+4>>2]=g;g=q[m+140>>2];q[k+8>>2]=q[m+136>>2];q[k+12>>2]=g;o[a+145|0]=1;break d;case 3:case 4:break e;case 7:break f}}k=_S(16);d=k;q[d>>2]=0;q[d+4>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;g=q[a+172>>2];q[a+172>>2]=d;if(g){_U(g);k=q[a+172>>2]}u[k>>2]=s;d=e+i|0;q[k+4>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[q[a+172>>2]+8>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=e|8;d=e+i|0;q[q[a+172>>2]+12>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+145|0]=1;e=e+4|0;break d}o[a+192|0]=0}h:{if((c|0)>=1600){c=e+4|0;h=e+i|0;n=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);if(!n){break h}g=_S(12);q[g>>2]=0;q[g+4>>2]=0;q[g+8>>2]=0;l=q[a+176>>2];q[a+176>>2]=g;if(l){_U(l);g=q[a+176>>2]}c=c+i|0;q[g>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[q[a+176>>2]+8>>2]=r[h+8|0]|r[h+9|0]<<8|(r[h+10|0]<<16|r[h+11|0]<<24);q[q[a+176>>2]+4>>2]=r[h+12|0]|r[h+13|0]<<8|(r[h+14|0]<<16|r[h+15|0]<<24);c=e+16|0;g=n+ -1|0;if(g>>>0>2){break h}i:{switch(g-1|0){default:e=_S(1);d=q[a+180>>2];q[a+180>>2]=e;if(!d){break h}_U(d);break h;case 0:g=_S(12);q[g>>2]=0;q[g+4>>2]=0;q[g+8>>2]=0;k=q[a+184>>2];q[a+184>>2]=g;if(k){_U(k);g=q[a+184>>2]}c=c+i|0;q[g>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[q[a+184>>2]+8>>2]=r[h+20|0]|r[h+21|0]<<8|(r[h+22|0]<<16|r[h+23|0]<<24);q[q[a+184>>2]+4>>2]=r[h+24|0]|r[h+25|0]<<8|(r[h+26|0]<<16|r[h+27|0]<<24);a=e+28|0;c=a;break h;case 1:break i}}g=_S(12);q[g>>2]=0;q[g+4>>2]=0;q[g+8>>2]=0;k=q[a+188>>2];q[a+188>>2]=g;if(k){_U(k);g=q[a+188>>2]}c=c+i|0;q[g>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[q[a+188>>2]+8>>2]=r[h+20|0]|r[h+21|0]<<8|(r[h+22|0]<<16|r[h+23|0]<<24);q[q[a+188>>2]+4>>2]=r[h+24|0]|r[h+25|0]<<8|(r[h+26|0]<<16|r[h+27|0]<<24);a=e+28|0;c=a;break h}o[a+144|0]=0;c=e}q[b>>2]=c+q[b>>2];ue=m+208|0}function eK(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=x(0),G=0;h=ue-304|0;ue=h;e=r[b|0];a:{if(!e){break a}k=a+4|0;b:{while(1){c:{d:{if(FJ(e&255)){while(1){e=b;b=b+1|0;if(FJ(r[e+1|0])){continue}break}GJ(a,0,0);while(1){b=q[a+4>>2];e:{if(b>>>0>2]){q[k>>2]=b+1;b=r[b|0];break e}b=HJ(a)}if(FJ(b)){continue}break}f:{if(!q[a+104>>2]){b=q[k>>2];break f}b=q[k>>2]+ -1|0;q[k>>2]=b}b=b-q[a+8>>2]|0;d=b;j=d>>31;b=i+q[a+124>>2]|0;i=n+q[a+120>>2]|0;if(i>>>0>>0){b=b+1|0}n=i;i=i+d|0;d=b+j|0;d=i>>>0>>0?d+1|0:d;n=i;i=d;break d}g:{h:{i:{d=r[b|0];if((d|0)==37){e=r[b+1|0];if((e|0)==42){break i}if((e|0)!=37){break h}}GJ(a,0,0);e=((d|0)==37)+b|0;b=q[a+4>>2];j:{if(b>>>0>2]){q[k>>2]=b+1;b=r[b|0];break j}b=HJ(a)}if((b|0)!=r[e|0]){if(q[a+104>>2]){q[k>>2]=q[k>>2]+ -1}z=0;if((b|0)>=0){break a}break c}b=n+1|0;if(b>>>0<1){i=i+1|0}n=b;break d}j=0;e=b+2|0;break g}if(!(!IJ(e)|r[b+2|0]!=36)){j=fK(c,r[b+1|0]+ -48|0);e=b+3|0;break g}j=q[c>>2];c=c+4|0;e=b+1|0}z=0;b=0;if(IJ(r[e|0])){while(1){b=(r[e|0]+w(b,10)|0)+ -48|0;d=r[e+1|0];e=e+1|0;if(IJ(d)){continue}break}}d=e;g=r[d|0];k:{if((g|0)!=109){break k}l=0;z=(j|0)!=0;g=r[e+1|0];s=0;d=e+1|0}f=(g&255)+ -65|0;if(f>>>0>57){break c}e=d+1|0;g=3;l:{m:{switch(f-1|0){case 38:f=d+2|0;d=r[d+1|0]==104;e=d?f:e;g=d?-2:-1;break l;case 42:f=d+2|0;d=r[d+1|0]==108;e=d?f:e;g=d?3:1;break l;case 50:case 56:g=1;break l;case 10:g=2;break l;case 40:break l;case 0:case 2:case 6:case 7:case 8:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:case 21:case 23:case 24:case 26:case 27:case 28:case 29:case 30:case 32:case 41:case 43:case 47:case 48:case 52:case 53:case 55:break c;default:break m}}g=0;e=d}d=r[e|0];f=(d&47)==3;A=f?1:g;y=f?d|32:d;n:{if((y|0)==91){break n}o:{if((y|0)!=110){if((y|0)!=99){break o}b=(b|0)>1?b:1;break n}gK(j,A,n,i);break d}GJ(a,0,0);while(1){d=q[a+4>>2];p:{if(d>>>0>2]){q[k>>2]=d+1;d=r[d|0];break p}d=HJ(a)}if(FJ(d)){continue}break}q:{if(!q[a+104>>2]){d=q[k>>2];break q}d=q[k>>2]+ -1|0;q[k>>2]=d}d=d-q[a+8>>2]|0;f=d;m=d>>31;i=i+q[a+124>>2]|0;d=n+q[a+120>>2]|0;if(d>>>0>>0){i=i+1|0}n=d;d=d+f|0;i=i+m|0;i=d>>>0>>0?i+1|0:i;n=d}d=b>>31;C=d;D=b;GJ(a,b,d);f=q[a+4>>2];d=q[a+104>>2];r:{if(f>>>0>>0){q[k>>2]=f+1;break r}if((HJ(a)|0)<0){break c}d=q[a+104>>2]}if(d){q[k>>2]=q[k>>2]+ -1}s:{t:{d=y+ -88|0;if(d>>>0>32){b=y+ -65|0;if(b>>>0>6|!(1<>2]-q[a+8>>2]|0;if(q[a+120>>2]==(0-f|0)&q[a+124>>2]==(0-((f>>31)+(0>>0)|0)|0)){break b}if(!(!j|(y|0)!=112)){q[j>>2]=b;break s}gK(j,A,b,d);break s}x:{if((y&239)==99){lV(h+32|0,-1,257);o[h+32|0]=0;if((y|0)!=115){break x}o[h+65|0]=0;o[h+46|0]=0;p[h+42>>1]=0;p[h+44>>1]=0;break x}f=r[e+1|0];m=(f|0)==94;lV(h+32|0,m,257);o[h+32|0]=0;d=m?e+2|0:e+1|0;y:{z:{A:{e=r[(m?2:1)+e|0];if((e|0)!=45){if((e|0)==93){break A}g=(f|0)!=94;break y}g=(f|0)!=94;o[h+78|0]=g;break z}g=(f|0)!=94;o[h+126|0]=g}d=d+1|0}e=d;while(1){d=r[e|0];B:{if((d|0)!=45){if(!d){break c}if((d|0)!=93){break B}break x}d=45;f=r[e+1|0];if(!f|(f|0)==93){break B}m=e+1|0;e=r[e+ -1|0];C:{if(e>>>0>=f>>>0){d=f;break C}while(1){e=e+1|0;o[e+(h+32|0)|0]=g;d=r[m|0];if(e>>>0>>0){continue}break}}e=m}o[(d+h|0)+33|0]=g;e=e+1|0;continue}}m=(y|0)==99;g=m?b+1|0:31;D:{E:{y=(A|0)!=1;F:{if(!y){d=j;if(z){d=ZU(g<<2);if(!d){break D}}q[h+296>>2]=0;q[h+300>>2]=0;b=0;while(1){s=d;G:{while(1){d=q[a+4>>2];H:{if(d>>>0>2]){q[k>>2]=d+1;d=r[d|0];break H}d=HJ(a)}if(!r[(d+h|0)+33|0]){break G}o[h+27|0]=d;d=LJ(h+28|0,h+27|0,1,h+296|0);if((d|0)==-2){continue}if((d|0)==-1){break E}if(s){q[(b<<2)+s>>2]=q[h+28>>2];b=b+1|0}if(!z|(b|0)!=(g|0)){continue}break}g=g<<1|1;d=$U(s,g<<2);if(d){continue}break E}break}l=h+296|0;d=1;I:{if(!l){break I}d=!q[l>>2]}if(!d){break E}l=0;break F}if(z){b=0;d=ZU(g);if(!d){break D}while(1){l=d;while(1){d=q[a+4>>2];J:{if(d>>>0>2]){q[k>>2]=d+1;d=r[d|0];break J}d=HJ(a)}if(!r[(d+h|0)+33|0]){s=0;break F}o[b+l|0]=d;b=b+1|0;if((g|0)!=(b|0)){continue}break}s=0;g=g<<1|1;d=$U(l,g);if(d){continue}break}break c}b=0;if(j){while(1){d=q[a+4>>2];K:{if(d>>>0>2]){q[k>>2]=d+1;d=r[d|0];break K}d=HJ(a)}if(r[(d+h|0)+33|0]){o[b+j|0]=d;b=b+1|0;continue}else{s=0;l=j;break F}}}while(1){b=q[a+4>>2];L:{if(b>>>0>2]){q[k>>2]=b+1;b=r[b|0];break L}b=HJ(a)}if(r[(b+h|0)+33|0]){continue}break}l=0;s=0;b=0}M:{if(!q[a+104>>2]){d=q[k>>2];break M}d=q[k>>2]+ -1|0;q[k>>2]=d}d=d-q[a+8>>2]|0;g=d;f=d+q[a+120>>2]|0;d=q[a+124>>2]+(d>>31)|0;d=f>>>0>>0?d+1|0:d;if(!(d|f)|(m?(f|0)!=(D|0)|(d|0)!=(C|0):0)){break b}N:{if(!z){break N}if(!y){q[j>>2]=s;break N}q[j>>2]=l}if(m){break s}if(s){q[(b<<2)+s>>2]=0}if(!l){l=0;break s}o[b+l|0]=0;break s}l=0;break c}l=0;s=0;break c}$J(h,a,A,0);b=q[a+4>>2]-q[a+8>>2]|0;d=b;if(q[a+120>>2]==(0-d|0)&q[a+124>>2]==(0-((d>>31)+(0>>0)|0)|0)){break b}if(!j|A>>>0>2){break s}b=q[h+8>>2];d=q[h+12>>2];f=q[h>>2];m=q[h+4>>2];O:{switch(A-1|0){default:E=j,F=dK(f,m,b,d),u[E>>2]=F;break s;case 0:E=j,G=_J(f,m,b,d),v[E>>3]=G;break s;case 1:break O}}q[j>>2]=f;q[j+4>>2]=m;q[j+8>>2]=b;q[j+12>>2]=d}b=q[a+4>>2]-q[a+8>>2]|0;d=b;f=d>>31;g=d;i=i+q[a+124>>2]|0;b=n+q[a+120>>2]|0;if(b>>>0>>0){i=i+1|0}d=b;b=g+d|0;i=i+f|0;i=b>>>0>>0?i+1|0:i;n=b;B=((j|0)!=0)+B|0}b=e+1|0;e=r[e+1|0];if(e){continue}break a}break}B=B?B:-1}if(!z){break a}_U(l);_U(s)}ue=h+304|0;return B}function ny(a){var b=0,c=0,d=0,e=0;e=ue-16|0;ue=e;c=q[a+4>>2];a:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=24;q[c+8>>2]=-2147483616;c=r[336859]|r[336860]<<8|(r[336861]<<16|r[336862]<<24);d=r[336855]|r[336856]<<8|(r[336857]<<16|r[336858]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336851]|r[336852]<<8|(r[336853]<<16|r[336854]<<24);d=r[336847]|r[336848]<<8|(r[336849]<<16|r[336850]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336843]|r[336844]<<8|(r[336845]<<16|r[336846]<<24);d=r[336839]|r[336840]<<8|(r[336841]<<16|r[336842]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+24|0]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;break a}Gw(a,336839);c=q[a+4>>2]}b:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=31;q[c+8>>2]=-2147483616;c=r[336891]|r[336892]<<8|(r[336893]<<16|r[336894]<<24);d=r[336887]|r[336888]<<8|(r[336889]<<16|r[336890]<<24);o[b+23|0]=d;o[b+24|0]=d>>>8;o[b+25|0]=d>>>16;o[b+26|0]=d>>>24;o[b+27|0]=c;o[b+28|0]=c>>>8;o[b+29|0]=c>>>16;o[b+30|0]=c>>>24;c=r[336884]|r[336885]<<8|(r[336886]<<16|r[336887]<<24);d=r[336880]|r[336881]<<8|(r[336882]<<16|r[336883]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336876]|r[336877]<<8|(r[336878]<<16|r[336879]<<24);d=r[336872]|r[336873]<<8|(r[336874]<<16|r[336875]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336868]|r[336869]<<8|(r[336870]<<16|r[336871]<<24);d=r[336864]|r[336865]<<8|(r[336866]<<16|r[336867]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+31|0]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;break b}Gw(a,336864);c=q[a+4>>2]}c:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=24;q[c+8>>2]=-2147483616;c=r[336916]|r[336917]<<8|(r[336918]<<16|r[336919]<<24);d=r[336912]|r[336913]<<8|(r[336914]<<16|r[336915]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336908]|r[336909]<<8|(r[336910]<<16|r[336911]<<24);d=r[336904]|r[336905]<<8|(r[336906]<<16|r[336907]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336900]|r[336901]<<8|(r[336902]<<16|r[336903]<<24);d=r[336896]|r[336897]<<8|(r[336898]<<16|r[336899]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+24|0]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;break c}Gw(a,336896);c=q[a+4>>2]}d:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=29;q[c+8>>2]=-2147483616;c=r[336946]|r[336947]<<8|(r[336948]<<16|r[336949]<<24);d=r[336942]|r[336943]<<8|(r[336944]<<16|r[336945]<<24);o[b+21|0]=d;o[b+22|0]=d>>>8;o[b+23|0]=d>>>16;o[b+24|0]=d>>>24;o[b+25|0]=c;o[b+26|0]=c>>>8;o[b+27|0]=c>>>16;o[b+28|0]=c>>>24;c=r[336941]|r[336942]<<8|(r[336943]<<16|r[336944]<<24);d=r[336937]|r[336938]<<8|(r[336939]<<16|r[336940]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336933]|r[336934]<<8|(r[336935]<<16|r[336936]<<24);d=r[336929]|r[336930]<<8|(r[336931]<<16|r[336932]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336925]|r[336926]<<8|(r[336927]<<16|r[336928]<<24);d=r[336921]|r[336922]<<8|(r[336923]<<16|r[336924]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+29|0]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;break d}Gw(a,336921);c=q[a+4>>2]}e:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,48)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=36;q[c+8>>2]=-2147483600;c=r[336983]|r[336984]<<8|(r[336985]<<16|r[336986]<<24);o[b+32|0]=c;o[b+33|0]=c>>>8;o[b+34|0]=c>>>16;o[b+35|0]=c>>>24;c=r[336979]|r[336980]<<8|(r[336981]<<16|r[336982]<<24);d=r[336975]|r[336976]<<8|(r[336977]<<16|r[336978]<<24);o[b+24|0]=d;o[b+25|0]=d>>>8;o[b+26|0]=d>>>16;o[b+27|0]=d>>>24;o[b+28|0]=c;o[b+29|0]=c>>>8;o[b+30|0]=c>>>16;o[b+31|0]=c>>>24;c=r[336971]|r[336972]<<8|(r[336973]<<16|r[336974]<<24);d=r[336967]|r[336968]<<8|(r[336969]<<16|r[336970]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336963]|r[336964]<<8|(r[336965]<<16|r[336966]<<24);d=r[336959]|r[336960]<<8|(r[336961]<<16|r[336962]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336955]|r[336956]<<8|(r[336957]<<16|r[336958]<<24);d=r[336951]|r[336952]<<8|(r[336953]<<16|r[336954]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+36|0]=0;q[a+4>>2]=q[a+4>>2]+12;break e}Gw(a,336951)}ue=e+16|0}function ph(a,b,c){var d=0,e=0,f=0;d=q[b>>2];q[a>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2];q[b>>2]=d+4;e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+4>>2]=e;d=q[b>>2]+4|0;q[b>>2]=d;a:{if(e>>>0<=4){b:{switch(e-1|0){case 1:q[a+8>>2]=0;d=q[b>>2];if((c|0)>=1602){q[a+8>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2]+4|0;q[b>>2]=d}q[a+12>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+16>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4;return;case 2:e=a+8|0;if((c|0)<=9){c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);f=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=f;o[e+1|0]=f>>>8;o[e+2|0]=f>>>16;o[e+3|0]=f>>>24;o[e+4|0]=c;o[e+5|0]=c>>>8;o[e+6|0]=c>>>16;o[e+7|0]=c>>>24;c=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);f=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[e+24|0]=f;o[e+25|0]=f>>>8;o[e+26|0]=f>>>16;o[e+27|0]=f>>>24;o[e+28|0]=c;o[e+29|0]=c>>>8;o[e+30|0]=c>>>16;o[e+31|0]=c>>>24;c=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);f=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[e+16|0]=f;o[e+17|0]=f>>>8;o[e+18|0]=f>>>16;o[e+19|0]=f>>>24;o[e+20|0]=c;o[e+21|0]=c>>>8;o[e+22|0]=c>>>16;o[e+23|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[e+8|0]=d;o[e+9|0]=d>>>8;o[e+10|0]=d>>>16;o[e+11|0]=d>>>24;o[e+12|0]=c;o[e+13|0]=c>>>8;o[e+14|0]=c>>>16;o[e+15|0]=c>>>24;q[b>>2]=q[b>>2]+32;q[a+44>>2]=0;q[a+48>>2]=0;q[a+40>>2]=2;return}a=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);c=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[e|0]=c;o[e+1|0]=c>>>8;o[e+2|0]=c>>>16;o[e+3|0]=c>>>24;o[e+4|0]=a;o[e+5|0]=a>>>8;o[e+6|0]=a>>>16;o[e+7|0]=a>>>24;a=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[e+40|0]=a;o[e+41|0]=a>>>8;o[e+42|0]=a>>>16;o[e+43|0]=a>>>24;a=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);c=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[e+32|0]=c;o[e+33|0]=c>>>8;o[e+34|0]=c>>>16;o[e+35|0]=c>>>24;o[e+36|0]=a;o[e+37|0]=a>>>8;o[e+38|0]=a>>>16;o[e+39|0]=a>>>24;a=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);c=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[e+24|0]=c;o[e+25|0]=c>>>8;o[e+26|0]=c>>>16;o[e+27|0]=c>>>24;o[e+28|0]=a;o[e+29|0]=a>>>8;o[e+30|0]=a>>>16;o[e+31|0]=a>>>24;a=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);c=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[e+16|0]=c;o[e+17|0]=c>>>8;o[e+18|0]=c>>>16;o[e+19|0]=c>>>24;o[e+20|0]=a;o[e+21|0]=a>>>8;o[e+22|0]=a>>>16;o[e+23|0]=a>>>24;a=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);c=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[e+8|0]=c;o[e+9|0]=c>>>8;o[e+10|0]=c>>>16;o[e+11|0]=c>>>24;o[e+12|0]=a;o[e+13|0]=a>>>8;o[e+14|0]=a>>>16;o[e+15|0]=a>>>24;q[b>>2]=q[b>>2]+44;return;case 3:break b;default:break a}}c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+8|0]=e;o[a+9|0]=e>>>8;o[a+10|0]=e>>>16;o[a+11|0]=e>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;e=r[d+60|0]|r[d+61|0]<<8|(r[d+62|0]<<16|r[d+63|0]<<24);c=a- -64|0;f=r[d+56|0]|r[d+57|0]<<8|(r[d+58|0]<<16|r[d+59|0]<<24);o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;o[c+4|0]=e;o[c+5|0]=e>>>8;o[c+6|0]=e>>>16;o[c+7|0]=e>>>24;c=r[d+52|0]|r[d+53|0]<<8|(r[d+54|0]<<16|r[d+55|0]<<24);e=r[d+48|0]|r[d+49|0]<<8|(r[d+50|0]<<16|r[d+51|0]<<24);o[a+56|0]=e;o[a+57|0]=e>>>8;o[a+58|0]=e>>>16;o[a+59|0]=e>>>24;o[a+60|0]=c;o[a+61|0]=c>>>8;o[a+62|0]=c>>>16;o[a+63|0]=c>>>24;c=r[d+44|0]|r[d+45|0]<<8|(r[d+46|0]<<16|r[d+47|0]<<24);e=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[a+48|0]=e;o[a+49|0]=e>>>8;o[a+50|0]=e>>>16;o[a+51|0]=e>>>24;o[a+52|0]=c;o[a+53|0]=c>>>8;o[a+54|0]=c>>>16;o[a+55|0]=c>>>24;c=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);e=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[a+40|0]=e;o[a+41|0]=e>>>8;o[a+42|0]=e>>>16;o[a+43|0]=e>>>24;o[a+44|0]=c;o[a+45|0]=c>>>8;o[a+46|0]=c>>>16;o[a+47|0]=c>>>24;c=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);e=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[a+32|0]=e;o[a+33|0]=e>>>8;o[a+34|0]=e>>>16;o[a+35|0]=e>>>24;o[a+36|0]=c;o[a+37|0]=c>>>8;o[a+38|0]=c>>>16;o[a+39|0]=c>>>24;c=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);e=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[a+24|0]=e;o[a+25|0]=e>>>8;o[a+26|0]=e>>>16;o[a+27|0]=e>>>24;o[a+28|0]=c;o[a+29|0]=c>>>8;o[a+30|0]=c>>>16;o[a+31|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;q[b>>2]=q[b>>2]- -64}return}c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+8|0]=e;o[a+9|0]=e>>>8;o[a+10|0]=e>>>16;o[a+11|0]=e>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;c=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);e=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[a+24|0]=e;o[a+25|0]=e>>>8;o[a+26|0]=e>>>16;o[a+27|0]=e>>>24;o[a+28|0]=c;o[a+29|0]=c>>>8;o[a+30|0]=c>>>16;o[a+31|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;q[b>>2]=q[b>>2]+24}function EK(a,b,c,d,f,g){a=a|0;b=+b;c=c|0;d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;m=ue-560|0;ue=m;q[m+44>>2]=0;h(+b);i=e(1)|0;a:{if(G=1,H=(J=e(0)>>>0>4294967295?0:1,K=0,L=(i|0)<=-1,L?J:K),I=(i|0)<-1,I?G:H){C=1;b=-b;h(+b);i=e(1)|0;e(0)|0;D=351264;break a}if(f&2048){C=1;D=351267;break a}C=f&1;D=C?351270:351265}b:{if((i&2146435072)==2146435072){p=C+3|0;zK(a,32,c,p,f&-65537);wK(a,D,C);d=g>>>5&1;wK(a,b!=b?d?351291:351295:d?351283:351287,3);break b}x=m+16|0;c:{d:{e:{b=tK(b,m+44|0);b=b+b;if(b!=0){i=q[m+44>>2];q[m+44>>2]=i+ -1;z=g|32;if((z|0)!=97){break e}break c}z=g|32;if((z|0)==97){break c}j=q[m+44>>2];n=(d|0)<0?6:d;break d}j=i+ -29|0;q[m+44>>2]=j;b=b*268435456;n=(d|0)<0?6:d}s=(j|0)<0?m+48|0:m+336|0;l=s;while(1){d=l;if(b<4294967296&b>=0){i=~~b>>>0}else{i=0}q[d>>2]=i;l=l+4|0;b=(b- +(i>>>0))*1e9;if(b!=0){continue}break}f:{if((j|0)<1){i=l;k=s;break f}k=s;while(1){u=(j|0)<29?j:29;i=l+ -4|0;g:{if(i>>>0>>0){break g}d=u;j=0;while(1){p=i;E=j;v=q[i>>2];t=d&31;if(32<=(d&63)>>>0){j=v<>>32-t;v=v<>>0>>0?j+1|0:j;j=xW(t,j,1e9,0);v=p;p=vW(j,we,1e9,0);q[v>>2]=t-p;i=i+ -4|0;if(i>>>0>=k>>>0){continue}break}if(!j){break g}k=k+ -4|0;q[k>>2]=j}while(1){i=l;if(i>>>0>k>>>0){l=i+ -4|0;if(!q[l>>2]){continue}}break}j=q[m+44>>2]-u|0;q[m+44>>2]=j;l=i;if((j|0)>0){continue}break}}if((j|0)<=-1){A=((n+25|0)/9|0)+1|0;u=(z|0)==102;while(1){d=(j|0)<-9?9:0-j|0;h:{if(k>>>0>=i>>>0){k=q[k>>2]?k:k+4|0;break h}p=1e9>>>d|0;t=-1<>2];q[l>>2]=v+(j>>>d|0);j=w(p,j&t);l=l+4|0;if(l>>>0>>0){continue}break}k=q[k>>2]?k:k+4|0;if(!j){break h}q[i>>2]=j;i=i+4|0}j=d+q[m+44>>2]|0;q[m+44>>2]=j;d=u?s:k;i=i-d>>2>(A|0)?d+(A<<2)|0:i;if((j|0)<0){continue}break}}l=0;i:{if(k>>>0>=i>>>0){break i}l=w(s-k>>2,9);j=10;d=q[k>>2];if(d>>>0<10){break i}while(1){l=l+1|0;j=w(j,10);if(d>>>0>=j>>>0){continue}break}}d=(n-((z|0)==102?0:l)|0)-((z|0)==103&(n|0)!=0)|0;if((d|0)<(w(i-s>>2,9)+ -9|0)){d=d+9216|0;u=(d|0)/9|0;p=(s+(u<<2)|0)+ -4092|0;j=10;d=d-w(u,9)|0;if((d|0)<=7){while(1){j=w(j,10);d=d+1|0;if((d|0)!=8){continue}break}}u=q[p>>2];t=(u>>>0)/(j>>>0)|0;A=p+4|0;d=u-w(j,t)|0;j:{if(d?0:(A|0)==(i|0)){break j}v=j>>>1|0;B=d>>>0>>0?.5:(i|0)==(A|0)?(v|0)==(d|0)?1:1.5:1.5;b=t&1?9007199254740994:9007199254740992;if(!(!C|r[D|0]!=45)){B=-B;b=-b}d=u-d|0;q[p>>2]=d;if(b+B==b){break j}d=d+j|0;q[p>>2]=d;if(d>>>0>=1e9){while(1){q[p>>2]=0;p=p+ -4|0;if(p>>>0>>0){k=k+ -4|0;q[k>>2]=0}d=q[p>>2]+1|0;q[p>>2]=d;if(d>>>0>999999999){continue}break}}l=w(s-k>>2,9);j=10;d=q[k>>2];if(d>>>0<10){break j}while(1){l=l+1|0;j=w(j,10);if(d>>>0>=j>>>0){continue}break}}d=p+4|0;i=i>>>0>d>>>0?d:i}k:{while(1){j=i;u=0;if(i>>>0<=k>>>0){break k}i=j+ -4|0;if(!q[i>>2]){continue}break}u=1}l:{if((z|0)!=103){t=f&8;break l}d=n?n:1;i=(d|0)>(l|0)&(l|0)>-5;n=(i?l^-1:-1)+d|0;g=(i?-1:-2)+g|0;t=f&8;if(t){break l}i=9;m:{if(!u){break m}p=q[j+ -4>>2];if(!p){break m}d=10;i=0;if((p>>>0)%10){break m}while(1){i=i+1|0;d=w(d,10);if(!((p>>>0)%(d>>>0))){continue}break}}d=w(j-s>>2,9)+ -9|0;if((g&-33)==70){t=0;d=d-i|0;d=(d|0)>0?d:0;n=(n|0)<(d|0)?n:d;break l}t=0;d=(d+l|0)-i|0;d=(d|0)>0?d:0;n=(n|0)<(d|0)?n:d}z=n|t;v=(z|0)!=0;d=a;E=c;F=g&-33;i=(l|0)>0?l:0;n:{if((F|0)==70){break n}i=l>>31;i=CK(i+l^i,0,x);if((x-i|0)<=1){while(1){i=i+ -1|0;o[i|0]=48;if((x-i|0)<2){continue}break}}A=i+ -2|0;o[A|0]=g;o[i+ -1|0]=(l|0)<0?45:43;i=x-A|0}p=(i+(v+(n+C|0)|0)|0)+1|0;zK(d,32,E,p,f);wK(a,D,C);zK(a,48,c,p,f^65536);o:{p:{q:{if((F|0)==70){d=m+16|8;g=m+16|9;l=k>>>0>s>>>0?s:k;k=l;while(1){i=CK(q[k>>2],0,g);r:{if((k|0)!=(l|0)){if(i>>>0<=m+16>>>0){break r}while(1){i=i+ -1|0;o[i|0]=48;if(i>>>0>m+16>>>0){continue}break}break r}if((g|0)!=(i|0)){break r}o[m+24|0]=48;i=d}wK(a,i,g-i|0);k=k+4|0;if(k>>>0<=s>>>0){continue}break}if(z){wK(a,351299,1)}if((n|0)<1|k>>>0>=j>>>0){break q}while(1){i=CK(q[k>>2],0,g);if(i>>>0>m+16>>>0){while(1){i=i+ -1|0;o[i|0]=48;if(i>>>0>m+16>>>0){continue}break}}wK(a,i,(n|0)<9?n:9);i=n+ -9|0;k=k+4|0;if(k>>>0>=j>>>0){break p}d=(n|0)>9;n=i;if(d){continue}break}break p}s:{if((n|0)<0){break s}s=u?j:k+4|0;d=m+16|8;g=m+16|9;l=k;while(1){i=CK(q[l>>2],0,g);if((g|0)==(i|0)){o[m+24|0]=48;i=d}t:{if((k|0)!=(l|0)){if(i>>>0<=m+16>>>0){break t}while(1){i=i+ -1|0;o[i|0]=48;if(i>>>0>m+16>>>0){continue}break}break t}wK(a,i,1);i=i+1|0;if((n|0)<1?!t:0){break t}wK(a,351299,1)}j=i;i=g-i|0;wK(a,j,(n|0)>(i|0)?i:n);n=n-i|0;l=l+4|0;if(l>>>0>=s>>>0){break s}if((n|0)>-1){continue}break}}zK(a,48,n+18|0,18,0);wK(a,A,x-A|0);break o}i=n}zK(a,48,i+9|0,9,0)}break b}n=g&32;j=n?D+9|0:D;u:{if(d>>>0>11){break u}i=12-d|0;if(!i){break u}B=8;while(1){B=B*16;i=i+ -1|0;if(i){continue}break}if(r[j|0]==45){b=-(B+(-b-B));break u}b=b+B-B}l=q[m+44>>2];i=l>>31;i=CK(i^i+l,0,x);if((x|0)==(i|0)){o[m+15|0]=48;i=m+15|0}l=C|2;k=q[m+44>>2];s=i+ -2|0;o[s|0]=g+15;o[i+ -1|0]=(k|0)<0?45:43;D=f&8;k=m+16|0;while(1){g=k;p=n;if(y(b)<2147483648){i=~~b}else{i=-2147483648}o[k|0]=p|r[i+351248|0];b=(b- +(i|0))*16;k=g+1|0;if(!((k-(m+16|0)|0)!=1|(b==0?!((d|0)>0|D):0))){o[g+1|0]=46;k=g+2|0}if(b!=0){continue}break}g=a;n=c;if(!d|((k-m|0)+ -18|0)>=(d|0)){i=((x-(m+16|0)|0)-s|0)+k|0}else{i=((d+x|0)-s|0)+2|0}d=i;p=d+l|0;zK(g,32,n,p,f);wK(a,j,l);zK(a,48,c,p,f^65536);g=k-(m+16|0)|0;wK(a,m+16|0,g);d=x-s|0;zK(a,48,i-(d+g|0)|0,0,0);wK(a,s,d)}zK(a,32,c,p,f^8192);ue=m+560|0;return((p|0)<(c|0)?c:p)|0}function to(a,b){var c=0,d=0,g=x(0),h=x(0),i=x(0),l=x(0),m=x(0),n=x(0),p=x(0),q=x(0),s=x(0),t=x(0),u=x(0),v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0);m=(f(0,r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24)),j());i=(f(0,r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24)),j());l=(f(0,r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24)),j());w=(f(0,r[b+56|0]|r[b+57|0]<<8|(r[b+58|0]<<16|r[b+59|0]<<24)),j());s=(f(0,r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24)),j());y=(f(0,r[b+48|0]|r[b+49|0]<<8|(r[b+50|0]<<16|r[b+51|0]<<24)),j());G=x(x(l*w)-x(s*y));h=(f(0,r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24)),j());t=(f(0,r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24)),j());z=(f(0,r[b+52|0]|r[b+53|0]<<8|(r[b+54|0]<<16|r[b+55|0]<<24)),j());H=x(x(t*w)-x(s*z));u=(f(0,r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24)),j());I=x(x(l*z)-x(t*y));C=x(x(x(i*G)-x(h*H))-x(u*I));n=(f(0,r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24)),j());v=(f(0,r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24)),j());A=(f(0,r[b+60|0]|r[b+61|0]<<8|(r[b+62|0]<<16|r[b+63|0]<<24)),j());B=(f(0,r[b+44|0]|r[b+45|0]<<8|(r[b+46|0]<<16|r[b+47|0]<<24)),j());J=x(x(t*A)-x(B*z));K=x(x(l*A)-x(B*y));D=x(x(v*I)+x(x(h*J)-x(i*K)));p=(f(0,r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24)),j());L=x(x(s*A)-x(B*w));E=x(x(v*H)+x(x(i*L)-x(u*J)));q=(f(0,r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24)),j());F=x(x(x(u*K)-x(h*L))-x(v*G));g=x(x(m*C)+x(x(n*D)+x(x(p*E)+x(q*F))));if(!(g>=x(-1.1754943508222875e-38)^1|g<=x(1.1754943508222875e-38)^1)){c=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);d=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;c=r[b+60|0]|r[b+61|0]<<8|(r[b+62|0]<<16|r[b+63|0]<<24);d=r[b+56|0]|r[b+57|0]<<8|(r[b+58|0]<<16|r[b+59|0]<<24);o[a+56|0]=d;o[a+57|0]=d>>>8;o[a+58|0]=d>>>16;o[a+59|0]=d>>>24;o[a+60|0]=c;o[a+61|0]=c>>>8;o[a+62|0]=c>>>16;o[a+63|0]=c>>>24;c=r[b+52|0]|r[b+53|0]<<8|(r[b+54|0]<<16|r[b+55|0]<<24);d=r[b+48|0]|r[b+49|0]<<8|(r[b+50|0]<<16|r[b+51|0]<<24);o[a+48|0]=d;o[a+49|0]=d>>>8;o[a+50|0]=d>>>16;o[a+51|0]=d>>>24;o[a+52|0]=c;o[a+53|0]=c>>>8;o[a+54|0]=c>>>16;o[a+55|0]=c>>>24;c=r[b+44|0]|r[b+45|0]<<8|(r[b+46|0]<<16|r[b+47|0]<<24);d=r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24);o[a+40|0]=d;o[a+41|0]=d>>>8;o[a+42|0]=d>>>16;o[a+43|0]=d>>>24;o[a+44|0]=c;o[a+45|0]=c>>>8;o[a+46|0]=c>>>16;o[a+47|0]=c>>>24;c=r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24);d=r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24);o[a+32|0]=d;o[a+33|0]=d>>>8;o[a+34|0]=d>>>16;o[a+35|0]=d>>>24;o[a+36|0]=c;o[a+37|0]=c>>>8;o[a+38|0]=c>>>16;o[a+39|0]=c>>>24;c=r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24);d=r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24);o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;o[a+28|0]=c;o[a+29|0]=c>>>8;o[a+30|0]=c>>>16;o[a+31|0]=c>>>24;c=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);d=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;c=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);b=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);o[a+8|0]=b;o[a+9|0]=b>>>8;o[a+10|0]=b>>>16;o[a+11|0]=b>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;return a}g=x(x(1)/g);b=(k(x(C*g)),e(0));o[a+48|0]=b;o[a+49|0]=b>>>8;o[a+50|0]=b>>>16;o[a+51|0]=b>>>24;b=(k(x(D*g)),e(0));o[a+32|0]=b;o[a+33|0]=b>>>8;o[a+34|0]=b>>>16;o[a+35|0]=b>>>24;b=(k(x(F*g)),e(0));o[a+16|0]=b;o[a+17|0]=b>>>8;o[a+18|0]=b>>>16;o[a+19|0]=b>>>24;b=(k(x(E*g)),e(0));o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;C=x(x(h*t)-x(i*l));D=x(x(i*s)-x(u*t));E=x(x(h*s)-x(u*l));b=(k(x(x(x(n*C)+x(x(p*D)-x(q*E)))*g)),e(0));o[a+60|0]=b;o[a+61|0]=b>>>8;o[a+62|0]=b>>>16;o[a+63|0]=b>>>24;F=x(x(h*w)-x(u*y));M=x(x(i*w)-x(u*z));N=x(x(h*z)-x(i*y));b=(k(x(x(x(x(q*F)-x(p*M))-x(n*N))*g)),e(0));o[a+56|0]=b;o[a+57|0]=b>>>8;o[a+58|0]=b>>>16;o[a+59|0]=b>>>24;b=(k(x(x(x(n*I)+x(x(p*H)-x(q*G)))*g)),e(0));o[a+52|0]=b;o[a+53|0]=b>>>8;o[a+54|0]=b>>>16;o[a+55|0]=b>>>24;l=x(x(h*B)-x(v*l));t=x(x(i*B)-x(v*t));b=(k(x(x(x(x(q*l)-x(p*t))-x(m*C))*g)),e(0));o[a+44|0]=b;o[a+45|0]=b>>>8;o[a+46|0]=b>>>16;o[a+47|0]=b>>>24;i=x(x(i*A)-x(v*z));h=x(x(h*A)-x(v*y));b=(k(x(x(x(m*N)+x(x(p*i)-x(q*h)))*g)),e(0));o[a+40|0]=b;o[a+41|0]=b>>>8;o[a+42|0]=b>>>16;o[a+43|0]=b>>>24;b=(k(x(x(x(x(q*K)-x(p*J))-x(m*I))*g)),e(0));o[a+36|0]=b;o[a+37|0]=b>>>8;o[a+38|0]=b>>>16;o[a+39|0]=b>>>24;s=x(x(u*B)-x(v*s));b=(k(x(x(x(m*E)+x(x(p*s)-x(n*l)))*g)),e(0));o[a+28|0]=b;o[a+29|0]=b>>>8;o[a+30|0]=b>>>16;o[a+31|0]=b>>>24;l=x(n*h);h=x(x(u*A)-x(v*w));b=(k(x(x(x(l-x(p*h))-x(m*F))*g)),e(0));o[a+24|0]=b;o[a+25|0]=b>>>8;o[a+26|0]=b>>>16;o[a+27|0]=b>>>24;b=(k(x(x(x(m*G)+x(x(p*L)-x(n*K)))*g)),e(0));o[a+20|0]=b;o[a+21|0]=b>>>8;o[a+22|0]=b>>>16;o[a+23|0]=b>>>24;b=(k(x(x(x(x(n*t)-x(q*s))-x(m*D))*g)),e(0));o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=(k(x(x(x(m*M)+x(x(q*h)-x(n*i)))*g)),e(0));o[a+8|0]=b;o[a+9|0]=b>>>8;o[a+10|0]=b>>>16;o[a+11|0]=b>>>24;b=(k(x(x(x(x(n*J)-x(q*L))-x(m*H))*g)),e(0));o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;return a}function _f(a){a=a|0;var b=0,c=0,d=0,e=0;e=ue-16|0;ue=e;q[a+4>>2]=2164;q[a>>2]=1960;Rf(a);$f(a);b=q[a+336>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+336>>2]=0}q[a+336>>2]=0;b=q[a+332>>2];q[a+332>>2]=0;if(b){Tf(b+72|0,q[b+76>>2]);Uf(b+60|0,q[b- -64>>2]);Vf(b+48|0,q[b+52>>2]);Wf(b+36|0,q[b+40>>2]);Xf(b+24|0,q[b+28>>2]);Xf(b+12|0,q[b+16>>2]);Xf(b,q[b+4>>2]);_U(b)}b=q[a+260>>2];if(b){d=q[a+264>>2];c=b;a:{if((b|0)==(d|0)){break a}while(1){d=d+ -60|0;n[q[q[d>>2]>>2]](d)|0;if((b|0)!=(d|0)){continue}break}c=q[a+260>>2]}q[a+264>>2]=b;_U(c)}if(o[a+243|0]<=-1){_U(q[a+232>>2])}if(o[a+231|0]<=-1){_U(q[a+220>>2])}b=q[a+208>>2];b:{if(!b){break b}d=q[a+212>>2];c=b;c:{if((b|0)==(d|0)){break c}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+208>>2]}q[a+212>>2]=b;b=q[a+216>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break b}n[b](q[e>>2])}b=q[a+196>>2];d:{if(!b){break d}d=q[a+200>>2];c=b;e:{if((b|0)==(d|0)){break e}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+196>>2]}q[a+200>>2]=b;b=q[a+204>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break d}n[b](q[e>>2])}b=q[a+184>>2];f:{if(!b){break f}d=q[a+188>>2];c=b;g:{if((b|0)==(d|0)){break g}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+184>>2]}q[a+188>>2]=b;b=q[a+192>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break f}n[b](q[e>>2])}b=q[a+172>>2];h:{if(!b){break h}d=q[a+176>>2];c=b;i:{if((b|0)==(d|0)){break i}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+172>>2]}q[a+176>>2]=b;b=q[a+180>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break h}n[b](q[e>>2])}b=q[a+160>>2];j:{if(!b){break j}q[a+164>>2]=b;c=q[a+168>>2];xt(e);n[q[e+8>>2]](e,b,c-b|0);b=q[q[e+12>>2]+4>>2];if(!b){break j}n[b](q[e>>2])}b=q[a+148>>2];k:{if(!b){break k}d=q[a+152>>2];c=b;l:{if((b|0)==(d|0)){break l}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+148>>2]}q[a+152>>2]=b;b=q[a+156>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break k}n[b](q[e>>2])}b=q[a+136>>2];m:{if(!b){break m}d=q[a+140>>2];c=b;n:{if((b|0)==(d|0)){break n}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+136>>2]}q[a+140>>2]=b;b=q[a+144>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break m}n[b](q[e>>2])}b=q[a+124>>2];o:{if(!b){break o}d=q[a+128>>2];c=b;p:{if((b|0)==(d|0)){break p}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+124>>2]}q[a+128>>2]=b;b=q[a+132>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break o}n[b](q[e>>2])}b=q[a+112>>2];q:{if(!b){break q}d=q[a+116>>2];c=b;r:{if((b|0)==(d|0)){break r}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+112>>2]}q[a+116>>2]=b;b=q[a+120>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break q}n[b](q[e>>2])}b=q[a+100>>2];s:{if(!b){break s}d=q[a+104>>2];c=b;t:{if((b|0)==(d|0)){break t}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+100>>2]}q[a+104>>2]=b;b=q[a+108>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break s}n[b](q[e>>2])}b=q[a+88>>2];u:{if(!b){break u}d=q[a+92>>2];c=b;v:{if((b|0)==(d|0)){break v}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+88>>2]}q[a+92>>2]=b;b=q[a+96>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break u}n[b](q[e>>2])}b=q[a+76>>2];w:{if(!b){break w}d=q[a+80>>2];c=b;x:{if((b|0)==(d|0)){break x}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+76>>2]}q[a+80>>2]=b;b=q[a+84>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break w}n[b](q[e>>2])}b=q[a+64>>2];y:{if(!b){break y}d=q[a+68>>2];c=b;z:{if((b|0)==(d|0)){break z}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+64>>2]}q[a+68>>2]=b;b=q[a+72>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break y}n[b](q[e>>2])}b=q[a+52>>2];A:{if(!b){break A}d=q[a+56>>2];c=b;B:{if((b|0)==(d|0)){break B}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+52>>2]}q[a+56>>2]=b;b=q[a+60>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break A}n[b](q[e>>2])}b=q[a+40>>2];C:{if(!b){break C}d=q[a+44>>2];c=b;D:{if((b|0)==(d|0)){break D}while(1){d=d+ -4|0;c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}if((b|0)!=(d|0)){continue}break}c=q[a+40>>2]}q[a+44>>2]=b;b=q[a+48>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break C}n[b](q[e>>2])}b=q[a+28>>2];E:{if(!b){break E}d=q[a+32>>2];c=b;F:{if((b|0)==(d|0)){break F}while(1){d=d+ -4|0;c=q[d>>2];q[d>>2]=0;if(c){_U(c)}if((b|0)!=(d|0)){continue}break}c=q[a+28>>2]}q[a+32>>2]=b;b=q[a+36>>2];xt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break E}n[b](q[e>>2])}b=q[a+20>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+20>>2]=0}b=q[a+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}ue=e+16|0;return a|0}function Jx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=x(0),l=x(0),m=0,p=x(0),s=0,t=0,v=0;f=ue-128|0;ue=f;e=n[q[q[b>>2]+28>>2]](b)|0;d=n[q[q[a>>2]+168>>2]](a)|0;g=n[q[q[a>>2]+176>>2]](a)|0;d=(d|0)==1;h=d?-1082130432:1065353216;q[e+2228>>2]=h;i=d?1065353216:0;q[e+2224>>2]=i;q[f+120>>2]=0;q[f+108>>2]=0;q[f+112>>2]=0;q[f+116>>2]=0;q[f+100>>2]=0;q[f+104>>2]=0;q[f+96>>2]=1065353216;Jv(q[a+4>>2],f+120|0,f+96|0);b=n[q[q[b>>2]+32>>2]](b)|0;q[b+272>>2]=0;q[b+276>>2]=0;q[b+280>>2]=0;q[b+284>>2]=0;u[b+272>>2]=r[q[a+4>>2]+340|0]?x(1):x(0);m=(g|0)==1;if(q[q[c+40>>2]>>2]==7){n[q[q[a>>2]+40>>2]](f+80|0,a);d=nt(f,f+80|0);j=u[d>>2];l=u[d+4>>2];p=u[d+8>>2];k=x(x(1)/x(E(x(x(x(j*j)+x(l*l))+x(p*p)))));u[d+12>>2]=u[d+12>>2]*k;u[d+8>>2]=p*k;u[d+4>>2]=l*k;u[d>>2]=j*k;d=q[f+4>>2];g=q[f>>2];o[e+2176|0]=g;o[e+2177|0]=g>>>8;o[e+2178|0]=g>>>16;o[e+2179|0]=g>>>24;o[e+2180|0]=d;o[e+2181|0]=d>>>8;o[e+2182|0]=d>>>16;o[e+2183|0]=d>>>24;d=e+2184|0;g=q[f+8>>2];o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;q[e+2188>>2]=1065353216;d=q[f+8>>2];o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;d=q[f+4>>2];g=q[f>>2];o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=d;o[b+5|0]=d>>>8;o[b+6|0]=d>>>16;o[b+7|0]=d>>>24;q[b+12>>2]=1065353216}t=m?-1082130432:1065353216;m=m?1065353216:0;d=n[q[q[a>>2]+48>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[e+2204>>2]=x(d>>>24>>>0)/x(255);u[e+2192>>2]=x((d&255)>>>0)/x(255);u[e+2200>>2]=x((d>>>16&255)>>>0)/x(255);u[e+2196>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+48>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[b+28>>2]=x(d>>>24>>>0)/x(255);u[b+16>>2]=x((d&255)>>>0)/x(255);u[b+24>>2]=x((d>>>16&255)>>>0)/x(255);u[b+20>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+56>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[e+2220>>2]=x(d>>>24>>>0)/x(255);u[e+2208>>2]=x((d&255)>>>0)/x(255);u[e+2216>>2]=x((d>>>16&255)>>>0)/x(255);u[e+2212>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+56>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[b+44>>2]=x(d>>>24>>>0)/x(255);u[b+32>>2]=x((d&255)>>>0)/x(255);u[b+40>>2]=x((d>>>16&255)>>>0)/x(255);u[b+36>>2]=x((d>>>8&255)>>>0)/x(255);q[b+160>>2]=q[q[c+40>>2]+160>>2];d=q[c+40>>2];g=q[d+120>>2];u[b+48>>2]=r[d+112|0]?x(1):x(0);u[b+52>>2]=g|0;d=q[c+40>>2];g=q[d+148>>2];d=q[d+156>>2];q[b+76>>2]=h;q[b+72>>2]=i;q[b+68>>2]=d;q[b+64>>2]=g;u[b+80>>2]=q[q[c+40>>2]+152>>2];n[q[q[a>>2]+88>>2]](f,a);if(!r[c+28|0]){Ap(f+80|0,f);q[f+8>>2]=q[f+88>>2];d=q[f+84>>2];q[f>>2]=q[f+80>>2];q[f+4>>2]=d}j=u[f>>2];k=u[f+4>>2];l=u[f+8>>2];q[b+108>>2]=0;u[b+104>>2]=-l;u[b+100>>2]=-k;u[b+96>>2]=-j;d=q[c+52>>2];g=q[c+56>>2];h=r[c+44|0];i=q[c+48>>2];q[b+120>>2]=q[c+60>>2];u[b+116>>2]=i>>>0;u[b+112>>2]=h?x(1):x(0);u[b+156>>2]=x(g>>>24>>>0)/x(255);u[b+144>>2]=x((g&255)>>>0)/x(255);u[b+140>>2]=x(d>>>24>>>0)/x(255);u[b+128>>2]=x((d&255)>>>0)/x(255);u[b+152>>2]=x((g>>>16&255)>>>0)/x(255);u[b+148>>2]=x((g>>>8&255)>>>0)/x(255);u[b+136>>2]=x((d>>>16&255)>>>0)/x(255);u[b+132>>2]=x((d>>>8&255)>>>0)/x(255);d=q[c+40>>2];d=Ne(f+72|0,r[d+168|0],r[d+169|0],r[d+170|0],r[d+171|0]);g=r[d|0];h=r[d+1|0];i=r[d+2|0];d=r[d+3|0];s=q[c+40>>2];v=q[s+164>>2];q[b+196>>2]=q[s+172>>2];q[b+192>>2]=v;u[b+188>>2]=x(d>>>0)/x(255);u[b+184>>2]=x(i>>>0)/x(255);u[b+180>>2]=x(h>>>0)/x(255);u[b+176>>2]=x(g>>>0)/x(255);d=q[c+40>>2];k=u[d+180>>2];l=u[d+188>>2];j=u[c+32>>2];p=u[d+184>>2];d=q[f+104>>2];g=q[f+108>>2];h=q[f+112>>2];i=q[f+116>>2];s=q[f+100>>2];q[b+224>>2]=q[f+96>>2];q[b+228>>2]=s;q[b+260>>2]=t;q[b+256>>2]=m;q[b+248>>2]=h;q[b+252>>2]=i;q[b+240>>2]=d;q[b+244>>2]=g;u[b+212>>2]=p*j;u[b+216>>2]=l*j;u[b+208>>2]=k*j;u[b+220>>2]=k!=x(0)?x(1):p!=x(0)?x(1):l!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](f,a);a=q[f+60>>2];b=q[f+56>>2];o[e+56|0]=b;o[e+57|0]=b>>>8;o[e+58|0]=b>>>16;o[e+59|0]=b>>>24;o[e+60|0]=a;o[e+61|0]=a>>>8;o[e+62|0]=a>>>16;o[e+63|0]=a>>>24;a=q[f+52>>2];b=q[f+48>>2];o[e+48|0]=b;o[e+49|0]=b>>>8;o[e+50|0]=b>>>16;o[e+51|0]=b>>>24;o[e+52|0]=a;o[e+53|0]=a>>>8;o[e+54|0]=a>>>16;o[e+55|0]=a>>>24;a=q[f+44>>2];b=q[f+40>>2];o[e+40|0]=b;o[e+41|0]=b>>>8;o[e+42|0]=b>>>16;o[e+43|0]=b>>>24;o[e+44|0]=a;o[e+45|0]=a>>>8;o[e+46|0]=a>>>16;o[e+47|0]=a>>>24;a=q[f+36>>2];b=q[f+32>>2];o[e+32|0]=b;o[e+33|0]=b>>>8;o[e+34|0]=b>>>16;o[e+35|0]=b>>>24;o[e+36|0]=a;o[e+37|0]=a>>>8;o[e+38|0]=a>>>16;o[e+39|0]=a>>>24;a=q[f+28>>2];b=q[f+24>>2];o[e+24|0]=b;o[e+25|0]=b>>>8;o[e+26|0]=b>>>16;o[e+27|0]=b>>>24;o[e+28|0]=a;o[e+29|0]=a>>>8;o[e+30|0]=a>>>16;o[e+31|0]=a>>>24;a=q[f+20>>2];b=q[f+16>>2];o[e+16|0]=b;o[e+17|0]=b>>>8;o[e+18|0]=b>>>16;o[e+19|0]=b>>>24;o[e+20|0]=a;o[e+21|0]=a>>>8;o[e+22|0]=a>>>16;o[e+23|0]=a>>>24;a=q[f+12>>2];b=q[f+8>>2];o[e+8|0]=b;o[e+9|0]=b>>>8;o[e+10|0]=b>>>16;o[e+11|0]=b>>>24;o[e+12|0]=a;o[e+13|0]=a>>>8;o[e+14|0]=a>>>16;o[e+15|0]=a>>>24;a=q[f+4>>2];b=q[f>>2];o[e|0]=b;o[e+1|0]=b>>>8;o[e+2|0]=b>>>16;o[e+3|0]=b>>>24;o[e+4|0]=a;o[e+5|0]=a>>>8;o[e+6|0]=a>>>16;o[e+7|0]=a>>>24;a=q[c+40>>2];b=q[a+128>>2];c=q[a+124>>2];d=q[a+116>>2];g=q[a+132>>2];m=q[a+136>>2];h=r[a+112|0];i=q[a+144>>2];q[e+1688>>2]=q[a+140>>2];q[e+1692>>2]=i;q[e+1680>>2]=g;q[e+1684>>2]=m;u[e+1664>>2]=h>>>0;u[e+1668>>2]=d|0;u[e+1672>>2]=c|0;u[e+1676>>2]=b|0;a=q[f+120>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+120>>2]=0}ue=f+128|0}function Sx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=x(0),l=x(0),m=0,p=x(0),s=0,t=0,v=0;f=ue-128|0;ue=f;e=n[q[q[b>>2]+28>>2]](b)|0;d=n[q[q[a>>2]+168>>2]](a)|0;g=n[q[q[a>>2]+176>>2]](a)|0;d=(d|0)==1;h=d?-1082130432:1065353216;q[e+356>>2]=h;i=d?1065353216:0;q[e+352>>2]=i;q[f+120>>2]=0;q[f+108>>2]=0;q[f+112>>2]=0;q[f+116>>2]=0;q[f+100>>2]=0;q[f+104>>2]=0;q[f+96>>2]=1065353216;Jv(q[a+4>>2],f+120|0,f+96|0);b=n[q[q[b>>2]+32>>2]](b)|0;q[b+272>>2]=0;q[b+276>>2]=0;q[b+280>>2]=0;q[b+284>>2]=0;u[b+272>>2]=r[q[a+4>>2]+340|0]?x(1):x(0);m=(g|0)==1;if(q[q[c+40>>2]>>2]==7){n[q[q[a>>2]+40>>2]](f+80|0,a);d=nt(f,f+80|0);j=u[d>>2];l=u[d+4>>2];p=u[d+8>>2];k=x(x(1)/x(E(x(x(x(j*j)+x(l*l))+x(p*p)))));u[d+12>>2]=u[d+12>>2]*k;u[d+8>>2]=p*k;u[d+4>>2]=l*k;u[d>>2]=j*k;d=q[f+4>>2];g=q[f>>2];o[e+304|0]=g;o[e+305|0]=g>>>8;o[e+306|0]=g>>>16;o[e+307|0]=g>>>24;o[e+308|0]=d;o[e+309|0]=d>>>8;o[e+310|0]=d>>>16;o[e+311|0]=d>>>24;d=q[f+8>>2];o[e+312|0]=d;o[e+313|0]=d>>>8;o[e+314|0]=d>>>16;o[e+315|0]=d>>>24;q[e+316>>2]=1065353216;d=q[f+8>>2];o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;d=q[f+4>>2];g=q[f>>2];o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;o[b+4|0]=d;o[b+5|0]=d>>>8;o[b+6|0]=d>>>16;o[b+7|0]=d>>>24;q[b+12>>2]=1065353216}t=m?-1082130432:1065353216;m=m?1065353216:0;d=n[q[q[a>>2]+48>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[e+332>>2]=x(d>>>24>>>0)/x(255);u[e+320>>2]=x((d&255)>>>0)/x(255);u[e+328>>2]=x((d>>>16&255)>>>0)/x(255);u[e+324>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+48>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[b+28>>2]=x(d>>>24>>>0)/x(255);u[b+16>>2]=x((d&255)>>>0)/x(255);u[b+24>>2]=x((d>>>16&255)>>>0)/x(255);u[b+20>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+56>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[e+348>>2]=x(d>>>24>>>0)/x(255);u[e+336>>2]=x((d&255)>>>0)/x(255);u[e+344>>2]=x((d>>>16&255)>>>0)/x(255);u[e+340>>2]=x((d>>>8&255)>>>0)/x(255);d=n[q[q[a>>2]+56>>2]](a)|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);u[b+44>>2]=x(d>>>24>>>0)/x(255);u[b+32>>2]=x((d&255)>>>0)/x(255);u[b+40>>2]=x((d>>>16&255)>>>0)/x(255);u[b+36>>2]=x((d>>>8&255)>>>0)/x(255);q[b+160>>2]=q[q[c+40>>2]+160>>2];d=q[c+40>>2];g=q[d+120>>2];u[b+48>>2]=r[d+112|0]?x(1):x(0);u[b+52>>2]=g|0;d=q[c+40>>2];g=q[d+148>>2];d=q[d+156>>2];q[b+76>>2]=h;q[b+72>>2]=i;q[b+68>>2]=d;q[b+64>>2]=g;u[b+80>>2]=q[q[c+40>>2]+152>>2];n[q[q[a>>2]+88>>2]](f,a);if(!r[c+28|0]){Ap(f+80|0,f);q[f+8>>2]=q[f+88>>2];d=q[f+84>>2];q[f>>2]=q[f+80>>2];q[f+4>>2]=d}j=u[f>>2];k=u[f+4>>2];l=u[f+8>>2];q[b+108>>2]=0;u[b+104>>2]=-l;u[b+100>>2]=-k;u[b+96>>2]=-j;d=q[c+52>>2];g=q[c+56>>2];h=r[c+44|0];i=q[c+48>>2];q[b+120>>2]=q[c+60>>2];u[b+116>>2]=i>>>0;u[b+112>>2]=h?x(1):x(0);u[b+156>>2]=x(g>>>24>>>0)/x(255);u[b+144>>2]=x((g&255)>>>0)/x(255);u[b+140>>2]=x(d>>>24>>>0)/x(255);u[b+128>>2]=x((d&255)>>>0)/x(255);u[b+152>>2]=x((g>>>16&255)>>>0)/x(255);u[b+148>>2]=x((g>>>8&255)>>>0)/x(255);u[b+136>>2]=x((d>>>16&255)>>>0)/x(255);u[b+132>>2]=x((d>>>8&255)>>>0)/x(255);d=q[c+40>>2];d=Ne(f+72|0,r[d+168|0],r[d+169|0],r[d+170|0],r[d+171|0]);g=r[d|0];h=r[d+1|0];i=r[d+2|0];d=r[d+3|0];s=q[c+40>>2];v=q[s+164>>2];q[b+196>>2]=q[s+172>>2];q[b+192>>2]=v;u[b+188>>2]=x(d>>>0)/x(255);u[b+184>>2]=x(i>>>0)/x(255);u[b+180>>2]=x(h>>>0)/x(255);u[b+176>>2]=x(g>>>0)/x(255);d=q[c+40>>2];k=u[d+180>>2];l=u[d+188>>2];j=u[c+32>>2];p=u[d+184>>2];d=q[f+104>>2];g=q[f+108>>2];h=q[f+112>>2];i=q[f+116>>2];s=q[f+100>>2];q[b+224>>2]=q[f+96>>2];q[b+228>>2]=s;q[b+260>>2]=t;q[b+256>>2]=m;q[b+248>>2]=h;q[b+252>>2]=i;q[b+240>>2]=d;q[b+244>>2]=g;u[b+212>>2]=p*j;u[b+216>>2]=l*j;u[b+208>>2]=k*j;u[b+220>>2]=k!=x(0)?x(1):p!=x(0)?x(1):l!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](f,a);a=q[f+60>>2];b=q[f+56>>2];o[e+56|0]=b;o[e+57|0]=b>>>8;o[e+58|0]=b>>>16;o[e+59|0]=b>>>24;o[e+60|0]=a;o[e+61|0]=a>>>8;o[e+62|0]=a>>>16;o[e+63|0]=a>>>24;a=q[f+52>>2];b=q[f+48>>2];o[e+48|0]=b;o[e+49|0]=b>>>8;o[e+50|0]=b>>>16;o[e+51|0]=b>>>24;o[e+52|0]=a;o[e+53|0]=a>>>8;o[e+54|0]=a>>>16;o[e+55|0]=a>>>24;a=q[f+44>>2];b=q[f+40>>2];o[e+40|0]=b;o[e+41|0]=b>>>8;o[e+42|0]=b>>>16;o[e+43|0]=b>>>24;o[e+44|0]=a;o[e+45|0]=a>>>8;o[e+46|0]=a>>>16;o[e+47|0]=a>>>24;a=q[f+36>>2];b=q[f+32>>2];o[e+32|0]=b;o[e+33|0]=b>>>8;o[e+34|0]=b>>>16;o[e+35|0]=b>>>24;o[e+36|0]=a;o[e+37|0]=a>>>8;o[e+38|0]=a>>>16;o[e+39|0]=a>>>24;a=q[f+28>>2];b=q[f+24>>2];o[e+24|0]=b;o[e+25|0]=b>>>8;o[e+26|0]=b>>>16;o[e+27|0]=b>>>24;o[e+28|0]=a;o[e+29|0]=a>>>8;o[e+30|0]=a>>>16;o[e+31|0]=a>>>24;a=q[f+20>>2];b=q[f+16>>2];o[e+16|0]=b;o[e+17|0]=b>>>8;o[e+18|0]=b>>>16;o[e+19|0]=b>>>24;o[e+20|0]=a;o[e+21|0]=a>>>8;o[e+22|0]=a>>>16;o[e+23|0]=a>>>24;a=q[f+12>>2];b=q[f+8>>2];o[e+8|0]=b;o[e+9|0]=b>>>8;o[e+10|0]=b>>>16;o[e+11|0]=b>>>24;o[e+12|0]=a;o[e+13|0]=a>>>8;o[e+14|0]=a>>>16;o[e+15|0]=a>>>24;a=q[f+4>>2];b=q[f>>2];o[e|0]=b;o[e+1|0]=b>>>8;o[e+2|0]=b>>>16;o[e+3|0]=b>>>24;o[e+4|0]=a;o[e+5|0]=a>>>8;o[e+6|0]=a>>>16;o[e+7|0]=a>>>24;a=q[c+40>>2];b=q[a+128>>2];c=q[a+124>>2];d=q[a+116>>2];g=q[a+132>>2];m=q[a+136>>2];h=r[a+112|0];i=q[a+144>>2];q[e+248>>2]=q[a+140>>2];q[e+252>>2]=i;q[e+240>>2]=g;q[e+244>>2]=m;u[e+224>>2]=h>>>0;u[e+228>>2]=d|0;u[e+232>>2]=c|0;u[e+236>>2]=b|0;a=q[f+120>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+120>>2]=0}ue=f+128|0}function Lj(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=x(0),m=0,p=0,r=x(0),s=x(0),t=0,v=x(0);f=ue-80|0;ue=f;o[a+1392|0]=0;c=a+168|0;m=q[q[a+148>>2]+4>>2];p=q[q[a+152>>2]+20>>2];g=q[a+148>>2];b=q[a+160>>2];if(b){while(1){Qk(b,c,a);b=q[b+312>>2];if(b){continue}break}}b=q[a+164>>2];a:{if(!b){b=q[1829];c=a+1168|0;q[c>>2]=q[1828];q[c+4>>2]=b;b=q[1825];c=a+1152|0;q[c>>2]=q[1824];q[c+4>>2]=b;c=q[1821];q[a+1136>>2]=q[1820];q[a+1140>>2]=c;b=q[1831];c=a+1176|0;q[c>>2]=q[1830];q[c+4>>2]=b;b=q[1827];c=a+1160|0;q[c>>2]=q[1826];q[c+4>>2]=b;b=q[1823];c=a+1144|0;q[c>>2]=q[1822];q[c+4>>2]=b;c=q[1821];q[a+1344>>2]=q[1820];q[a+1348>>2]=c;b=q[1823];c=a+1352|0;q[c>>2]=q[1822];q[c+4>>2]=b;b=q[1825];c=a+1360|0;q[c>>2]=q[1824];q[c+4>>2]=b;b=q[1827];c=a+1368|0;q[c>>2]=q[1826];q[c+4>>2]=b;b=q[1829];c=a+1376|0;q[c>>2]=q[1828];q[c+4>>2]=b;c=q[1831];a=a+1384|0;q[a>>2]=q[1830];q[a+4>>2]=c;break a}h=u[b+828>>2];e=q[g+92>>2];d=q[g+88>>2];q[f+8>>2]=d;q[f+12>>2]=e;q[f+72>>2]=d;q[f+76>>2]=e;Ls(f+16|0,m,p,b,c,g+36|0,f+8|0);t=a,v=x(n[q[q[a+168>>2]+16>>2]](c,x(q[f+20>>2]),x(q[f+16>>2]))),u[t+824>>2]=v;Mj(q[a+164>>2],x(0));aq(a+192|0);e=q[1831];b=a+1176|0;q[b>>2]=q[1830];q[b+4>>2]=e;e=q[1829];b=a+1168|0;q[b>>2]=q[1828];q[b+4>>2]=e;e=q[1827];b=a+1160|0;q[b>>2]=q[1826];q[b+4>>2]=e;e=q[1825];b=a+1152|0;q[b>>2]=q[1824];q[b+4>>2]=e;e=q[1823];b=a+1144|0;q[b>>2]=q[1822];q[b+4>>2]=e;b=q[1821];q[a+1136>>2]=q[1820];q[a+1140>>2]=b;e=q[g- -64>>2];d=e+ -1|0;i=d>>>0>4;h=h>x(0)?h:x(0);b:{if(x(y(h))>2];if((d|0)==1){break f}e=(e|0)==2&(d|0)==2;d=q[g+72>>2];h:{if((d|0)!=1){if(e&(d|0)==2){break h}break c}if(!e){break f}}if(q[g+72>>2]==2){break e}}e=q[g+4>>2];if((n[q[q[e>>2]+36>>2]](e)|0)>1704){break d}}e=q[a+164>>2];d=e+1232|0;i=q[d+4>>2];q[a+1344>>2]=q[d>>2];q[a+1348>>2]=i;i=e+1240|0;j=q[i+4>>2];d=a+1352|0;q[d>>2]=q[i>>2];q[d+4>>2]=j;i=e+1248|0;j=q[i+4>>2];d=a+1360|0;q[d>>2]=q[i>>2];q[d+4>>2]=j;i=e+1256|0;j=q[i+4>>2];d=a+1368|0;q[d>>2]=q[i>>2];q[d+4>>2]=j;i=e+1264|0;j=q[i+4>>2];d=a+1376|0;q[d>>2]=q[i>>2];q[d+4>>2]=j;e=e+1272|0;i=q[e+4>>2];d=a+1384|0;q[d>>2]=q[e>>2];q[d+4>>2]=i;break c}yj(f+16|0,q[a+164>>2]+1184|0,u[a+176>>2]);d=q[f+60>>2];e=a+1384|0;q[e>>2]=q[f+56>>2];q[e+4>>2]=d;d=q[f+52>>2];e=a+1376|0;q[e>>2]=q[f+48>>2];q[e+4>>2]=d;d=q[f+44>>2];e=a+1368|0;q[e>>2]=q[f+40>>2];q[e+4>>2]=d;d=q[f+36>>2];e=a+1360|0;q[e>>2]=q[f+32>>2];q[e+4>>2]=d;d=q[f+28>>2];e=a+1352|0;q[e>>2]=q[f+24>>2];q[e+4>>2]=d;e=q[f+20>>2];q[a+1344>>2]=q[f+16>>2];q[a+1348>>2]=e}if(q[g+2472>>2]+ -1>>>0<=1){q[a+324>>2]=q[q[a+164>>2]+320>>2]}d=a+1136|0;q[a+128>>2]=0;q[a+132>>2]=0;q[a+136>>2]=0;q[a+140>>2]=1065353216;e=a+128|0;g=q[a+148>>2];if((q[g- -64>>2]&-2)==4){t=a,v=x(n[q[q[a+168>>2]+16>>2]](c,u[g+116>>2],u[g+112>>2])),u[t+328>>2]=v;g=q[a+148>>2];t=a,v=x(x(n[q[q[a+168>>2]+16>>2]](c,u[g+124>>2],u[g+120>>2]))/x(100)),u[t+332>>2]=v;g=q[a+148>>2]}Nj(g+180|0,a+336|0,a+80|0,e,c,m,p,u[a+828>>2],u[a+824>>2],q[a+164>>2],g+3364|0);g=q[a+148>>2];Rs(a+416|0,g+1344|0,c,m,p,q[a+164>>2],g+3364|0);g=q[a+148>>2];Oj(a+480|0,g+1792|0,c,m,p,q[a+164>>2],g+3364|0);g=q[a+148>>2];g=n[q[q[g>>2]+8>>2]](g)|0;h=x(n[q[q[g>>2]+32>>2]](g));g=q[a+148>>2];e=n[q[q[g>>2]+8>>2]](g)|0;j=b;b=q[a+144>>2];Pj(f+16|0,g+2196|0,e,q[a+1396>>2],j,h,n[q[q[b>>2]+36>>2]](b)|0,c);b=q[f+60>>2];q[d+40>>2]=q[f+56>>2];q[d+44>>2]=b;b=q[f+52>>2];q[d+32>>2]=q[f+48>>2];q[d+36>>2]=b;b=q[f+44>>2];q[d+24>>2]=q[f+40>>2];q[d+28>>2]=b;b=q[f+36>>2];q[d+16>>2]=q[f+32>>2];q[d+20>>2]=b;b=q[f+28>>2];q[d+8>>2]=q[f+24>>2];q[d+12>>2]=b;b=q[f+20>>2];q[d>>2]=q[f+16>>2];q[d+4>>2]=b;i=a+848|0;g=c;b=q[a+148>>2];if(q[b+3308>>2]==1){j=a;h=x(n[q[q[a+168>>2]+16>>2]](c,x(q[b+3352>>2]),x(q[b+3348>>2])));i:{if(x(y(h))>2]=b;b=q[a+148>>2]}Qj(i,g,b+2804|0);Qj(a+896|0,c,q[a+148>>2]+2856|0);Qj(a+944|0,c,q[a+148>>2]+2908|0);Qj(a+992|0,c,q[a+148>>2]+2960|0);Qj(a+1040|0,c,q[a+148>>2]+3012|0);Qj(a+1088|0,c,q[a+148>>2]+3064|0);t=a,v=Rj(a+1404|0,c,q[a+148>>2]+3116|0,q[a+164>>2],m,p),u[t+1428>>2]=v;Sj(a+16|0,c,q[a+148>>2]+2668|0);Sj(a+48|0,c,q[a+148>>2]+2716|0);c=q[a+148>>2];j:{if(!q[c+2196>>2]){Xs(f+16|0,d);k=x(u[f+16>>2]+u[a+80>>2]);u[a+80>>2]=k;c=a+84|0;h=x(u[f+20>>2]+u[c>>2]);u[c>>2]=h;c=a+88|0;l=x(u[f+24>>2]+u[c>>2]);u[c>>2]=l;c=a+92|0;u[c>>2]=u[f+28>>2]+u[c>>2];c=q[a+148>>2];break j}b=a+88|0;h=u[b>>2];g=a+84|0;r=u[g>>2];s=u[a+80>>2];u[a+92>>2]=x(h*x(0))+x(x(r*x(0))+x(x(s*x(0))+x(0)));k=x(x(h*u[a+1144>>2])+x(x(r*u[a+1140>>2])+x(u[a+1148>>2]+x(s*u[a+1136>>2]))));u[a+80>>2]=k;l=x(x(h*u[a+1176>>2])+x(x(r*u[a+1172>>2])+x(u[a+1180>>2]+x(s*u[a+1168>>2]))));u[b>>2]=l;h=x(x(h*u[a+1160>>2])+x(x(r*u[a+1156>>2])+x(u[a+1164>>2]+x(s*u[a+1152>>2]))));u[g>>2]=h}u[a+108>>2]=x(l*x(0))+x(x(h*x(0))+x(x(k*x(0))+x(0)));u[a+96>>2]=x(u[a+1352>>2]*l)+x(x(u[a+1348>>2]*h)+x(u[a+1356>>2]+x(u[a+1344>>2]*k)));u[a+104>>2]=x(u[a+1384>>2]*l)+x(x(u[a+1380>>2]*h)+x(u[a+1388>>2]+x(u[a+1376>>2]*k)));u[a+100>>2]=x(u[a+1368>>2]*l)+x(x(u[a+1364>>2]*h)+x(u[a+1372>>2]+x(u[a+1360>>2]*k)));n[q[q[c>>2]+80>>2]](c,a,q[a+156>>2],q[a+144>>2])}ue=f+80|0}function vh(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=0;a:{if(q[a+4>>2]>(d|0)){break a}g=2;e=0;if(c>>>0<8){break a}e=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);q[a+12>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[a+16>>2]=e;e=8;if(c>>>0<16){break a}e=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);q[a+20>>2]=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);q[a+24>>2]=e;g=0;e=16}f=g&2;h=f;b:{c:{if(!f){f=e;i=e+24|0;if(i>>>0<=c>>>0){break c}}h=g|2;break b}g=b+f|0;f=r[g+4|0]|r[g+5|0]<<8|(r[g+6|0]<<16|r[g+7|0]<<24);e=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);o[a+36|0]=e;o[a+37|0]=e>>>8;o[a+38|0]=e>>>16;o[a+39|0]=e>>>24;o[a+40|0]=f;o[a+41|0]=f>>>8;o[a+42|0]=f>>>16;o[a+43|0]=f>>>24;f=r[g+20|0]|r[g+21|0]<<8|(r[g+22|0]<<16|r[g+23|0]<<24);e=r[g+16|0]|r[g+17|0]<<8|(r[g+18|0]<<16|r[g+19|0]<<24);o[a+52|0]=e;o[a+53|0]=e>>>8;o[a+54|0]=e>>>16;o[a+55|0]=e>>>24;o[a+56|0]=f;o[a+57|0]=f>>>8;o[a+58|0]=f>>>16;o[a+59|0]=f>>>24;f=r[g+12|0]|r[g+13|0]<<8|(r[g+14|0]<<16|r[g+15|0]<<24);e=r[g+8|0]|r[g+9|0]<<8|(r[g+10|0]<<16|r[g+11|0]<<24);o[a+44|0]=e;o[a+45|0]=e>>>8;o[a+46|0]=e>>>16;o[a+47|0]=e>>>24;o[a+48|0]=f;o[a+49|0]=f>>>8;o[a+50|0]=f>>>16;o[a+51|0]=f>>>24;e=i|j}f=h&3;h=f;d:{e:{i=0;if(i|(f|0)!=2){f=e;g=e+24|0;if(g>>>0<=c>>>0){break e}}h=2;break d}j=b+f|0;f=r[j+4|0]|r[j+5|0]<<8|(r[j+6|0]<<16|r[j+7|0]<<24);e=r[j|0]|r[j+1|0]<<8|(r[j+2|0]<<16|r[j+3|0]<<24);o[a+60|0]=e;o[a+61|0]=e>>>8;o[a+62|0]=e>>>16;o[a+63|0]=e>>>24;o[a+64|0]=f;o[a+65|0]=f>>>8;o[a+66|0]=f>>>16;o[a+67|0]=f>>>24;f=r[j+20|0]|r[j+21|0]<<8|(r[j+22|0]<<16|r[j+23|0]<<24);e=r[j+16|0]|r[j+17|0]<<8|(r[j+18|0]<<16|r[j+19|0]<<24);o[a+76|0]=e;o[a+77|0]=e>>>8;o[a+78|0]=e>>>16;o[a+79|0]=e>>>24;o[a+80|0]=f;o[a+81|0]=f>>>8;o[a+82|0]=f>>>16;o[a+83|0]=f>>>24;f=r[j+12|0]|r[j+13|0]<<8|(r[j+14|0]<<16|r[j+15|0]<<24);e=r[j+8|0]|r[j+9|0]<<8|(r[j+10|0]<<16|r[j+11|0]<<24);o[a+68|0]=e;o[a+69|0]=e>>>8;o[a+70|0]=e>>>16;o[a+71|0]=e>>>24;o[a+72|0]=f;o[a+73|0]=f>>>8;o[a+74|0]=f>>>16;o[a+75|0]=f>>>24;e=g|i}h=h&3;f=h;i=e;g=e+4|0;h=!0&(f|0)==2|g>>>0>c>>>0;f:{g:{if(q[a+8>>2]<=(d|0)){h:{if(h){o[a+144|0]=0;h=2;break h}d=b+i|0;j=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+144|0]=(j|0)>0;d=g;e=k|d;h=f;if((j|0)<1){break h}h=i+12|0;e=2;i:{if(h>>>0>c>>>0){break i}e=b+g|0;d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[a+28>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a+32>>2]=d;d=h|k;e=f}e=e&3;h=e;j:{g=0;if(g|(e|0)!=2){e=d;f=d+24|0;if(f>>>0<=c>>>0){break j}}e=d;h=2;break h}i=b+e|0;e=r[i+4|0]|r[i+5|0]<<8|(r[i+6|0]<<16|r[i+7|0]<<24);d=r[i|0]|r[i+1|0]<<8|(r[i+2|0]<<16|r[i+3|0]<<24);o[a+84|0]=d;o[a+85|0]=d>>>8;o[a+86|0]=d>>>16;o[a+87|0]=d>>>24;o[a+88|0]=e;o[a+89|0]=e>>>8;o[a+90|0]=e>>>16;o[a+91|0]=e>>>24;e=r[i+20|0]|r[i+21|0]<<8|(r[i+22|0]<<16|r[i+23|0]<<24);d=r[i+16|0]|r[i+17|0]<<8|(r[i+18|0]<<16|r[i+19|0]<<24);o[a+100|0]=d;o[a+101|0]=d>>>8;o[a+102|0]=d>>>16;o[a+103|0]=d>>>24;o[a+104|0]=e;o[a+105|0]=e>>>8;o[a+106|0]=e>>>16;o[a+107|0]=e>>>24;e=r[i+12|0]|r[i+13|0]<<8|(r[i+14|0]<<16|r[i+15|0]<<24);d=r[i+8|0]|r[i+9|0]<<8|(r[i+10|0]<<16|r[i+11|0]<<24);o[a+92|0]=d;o[a+93|0]=d>>>8;o[a+94|0]=d>>>16;o[a+95|0]=d>>>24;o[a+96|0]=e;o[a+97|0]=e>>>8;o[a+98|0]=e>>>16;o[a+99|0]=e>>>24;e=f|g}d=h&3;f=d;k:{l:{g=0;if(g|(d|0)!=2){d=e;h=d+4|0;if(h>>>0<=c>>>0){break l}}d=q[a+108>>2];f=2;break k}d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+108>>2]=d;e=g|h}if(d){break f}d=f&3;f=d;m:{n:{if(0|(d|0)!=2){d=e;h=d+4|0;if(h>>>0<=c>>>0){break n}}f=2;d=e;break m}d=b+d|0;q[a+112>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}e=f&3;f=e;o:{p:{if(0|(e|0)!=2){e=d;h=d+4|0;if(h>>>0<=c>>>0){break p}}f=2;break o}d=b+e|0;q[a+116>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}h=f&3;f=h;e=d;if(0|(f|0)!=2){h=e+4|0;if(h>>>0<=c>>>0){break g}}f=2;break f}if(h){f=2;d=e}else{d=b+i|0;q[a+112>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|k}e=f&3;f=e;q:{r:{g=0;if(g|(e|0)!=2){e=d;h=d+4|0;if(h>>>0<=c>>>0){break r}}f=2;break q}d=b+e|0;q[a+116>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}if(!((f&3)==2|d+4>>>0>c>>>0)){b=b+d|0;q[a+120>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24)}q[a+128>>2]=3;q[a+132>>2]=0;q[a+136>>2]=1;q[a+140>>2]=2;return}d=b+d|0;q[a+120>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=g|h}h=a;d=f&3;f=d;s:{t:{i=0;if(i|(d|0)!=2){d=e;g=d+4|0;if(g>>>0<=c>>>0){break t}}f=2;d=0;break s}e=g|i;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24)}i=d&255;q[h+132>>2]=i;g=d>>>16&255;q[a+140>>2]=g;h=d>>>8&255;q[a+136>>2]=h;d=q[a+128>>2];d=(d|0)>(i|0)?d:i;d=(d|0)>(h|0)?d:h;q[a+128>>2]=((d|0)>(g|0)?d:g)+1;d=f&3;f=d;u:{i=0;if(i|(d|0)!=2){g=e;h=e+4|0;if(h>>>0<=c>>>0){break u}}o[a+145|0]=0;return}d=b+g|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+145|0]=(d|0)>0;v:{if((d|0)<1){break v}e=2;g=g+8|0;d=h;w:{if(g>>>0>c>>>0){break w}d=b+h|0;q[a+148>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=f;d=g|i}e=e&3;f=e;x:{y:{g=0;if(!g&(e|0)==2){break y}e=d;h=d+4|0;if(h>>>0>c>>>0){break y}d=b+e|0;q[a+152>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h;break x}f=2}if((f&3)==2|d+4>>>0>c>>>0){break v}c=a;a=b+d|0;q[c+156>>2]=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24)}}function Xp(a,b,c,d,e,f,g){var h=0,i=x(0),j=x(0),k=x(0),l=0,m=x(0),n=x(0),p=x(0),s=0,t=x(0),v=x(0),z=x(0),A=0,B=x(0),C=0,D=x(0),F=0,G=0,H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=x(0),S=x(0),T=x(0),U=0,V=0;h=ue-192|0;ue=h;t=x(1);if(f!=x(0)){F=h+80|0;while(1){l=w(G,208)+c|0;if(!(!r[l+192|0]|r[l+145|0])){o[h+176|0]=0;nt(h+16|0,l);s=q[h+28>>2];q[F+8>>2]=q[h+24>>2];q[F+12>>2]=s;s=q[h+20>>2];q[F>>2]=q[h+16>>2];q[F+4>>2]=s;i=u[d>>2];j=u[d+4>>2];k=u[d+8>>2];B=x(u[d+12>>2]/e);u[h+44>>2]=B;k=x(k/e);u[h+40>>2]=k;j=x(j/e);u[h+36>>2]=j;m=x(i/e);u[h+32>>2]=m;i=u[b+80>>2];n=u[b+64>>2];p=u[b+84>>2];v=u[b+68>>2];t=u[b+88>>2];z=u[b+72>>2];u[h+76>>2]=x(x(u[b+76>>2]/f)+u[b+92>>2])/e;t=x(x(t+x(z/f))/e);u[h+72>>2]=t;p=x(x(p+x(v/f))/e);u[h+68>>2]=p;n=x(x(i+x(n/f))/e);u[h+64>>2]=n;C=(G<<4)+b|0;z=u[C>>2];v=u[C+4>>2];i=u[C+8>>2];D=u[C+12>>2];u[h+180>>2]=f;u[h+60>>2]=D/e;i=x(i/e);u[h+56>>2]=i;v=x(v/e);u[h+52>>2]=v;z=x(z/e);u[h+48>>2]=z;s=r[l+144|0];o[h+176|0]=s;if(!g){t=x(-t);u[h+72>>2]=t;i=x(-i);u[h+56>>2]=i;k=x(-k);u[h+40>>2]=k}a:{if(!s){p=j;break a}D=u[l+104>>2];H=u[l+100>>2];I=u[l+108>>2];J=u[l+96>>2];k=u[l+120>>2];K=u[l+116>>2];L=u[l+124>>2];M=u[l+112>>2];B=u[l+136>>2];N=u[l+132>>2];O=u[l+140>>2];P=u[l+128>>2];Q=u[l+88>>2];R=u[l+84>>2];S=u[l+92>>2];T=u[l+80>>2];u[h+64>>2]=x(Q*t)+x(x(R*p)+x(S+x(T*n)));u[h+48>>2]=x(Q*i)+x(x(R*v)+x(S+x(T*z)));u[h+76>>2]=x(B*t)+x(x(N*p)+x(O+x(P*n)));u[h+72>>2]=x(k*t)+x(x(K*p)+x(L+x(M*n)));u[h+68>>2]=x(D*t)+x(x(H*p)+x(I+x(J*n)));u[h+60>>2]=x(B*i)+x(x(N*v)+x(O+x(P*z)));u[h+56>>2]=x(k*i)+x(x(K*v)+x(L+x(M*z)));u[h+52>>2]=x(D*i)+x(x(H*v)+x(I+x(J*z)));i=u[h+40>>2];B=x(x(B*i)+x(x(N*j)+x(O+x(P*m))));u[h+44>>2]=B;k=x(x(k*i)+x(x(K*j)+x(L+x(M*m))));u[h+40>>2]=k;p=x(x(D*i)+x(x(H*j)+x(I+x(J*m))));u[h+36>>2]=p;m=x(x(Q*i)+x(x(R*j)+x(S+x(T*m))));u[h+32>>2]=m}s=q[l+148>>2];b:{if(!s){p=x(1);t=x(0);m=x(0);i=x(0);break b}i=u[s>>2];m=x(m-u[h+80>>2]);p=x(p-u[h+84>>2]);k=x(k-u[h+88>>2]);j=x(x(E(x(x(x(m*m)+x(p*p))+x(k*k))))+x(1.0000000116860974e-7));t=x(i*x(x(B-u[h+92>>2])/j));k=x(i*x(k/j));p=x(i*x(p/j));m=x(i*x(m/j));c:{if(r[s+4|0]){i=x(t/j);k=x(k/j);n=x(m/j);j=x(p/j);break c}i=x(t*f);k=x(k*f);n=x(m*f);j=x(p*f)}p=x(i*e);m=x(k*e);t=x(j*e);i=x(n*e)}s=q[l+152>>2];if(s){j=u[s>>2];i=x(x(x(j*x(0))*f)*e);m=i;t=x(x(j*f)*e);p=t}s=q[l+156>>2];if(s){Yp(h+16|0,h+32|0,s);m=x(u[h+24>>2]*e);t=x(u[h+20>>2]*e);p=x(u[h+28>>2]*e);i=x(u[h+16>>2]*e)}s=q[l+160>>2];if(s){Zp(h+16|0,h+32|0,s);m=x(u[h+24>>2]*e);t=x(u[h+20>>2]*e);p=x(u[h+28>>2]*e);i=x(u[h+16>>2]*e)}s=q[l+164>>2];if(s){j=u[s>>2];k=u[h+180>>2];p=x(x(j*k)*e);m=x(x(x(j*x(-u[h+72>>2]))*k)*e);t=x(x(x(j*x(-u[h+68>>2]))*k)*e);i=x(x(x(j*x(-u[h+64>>2]))*k)*e)}V=l+144|0;s=q[l+176>>2];d:{if(!s){j=x(1);break d}A=q[l+188>>2];e:{if(!A){j=x(1);break e}j=x(0);k=x(u[h+32>>2]-u[h+80>>2]);v=x(k*k);k=x(u[h+36>>2]-u[h+84>>2]);n=x(u[h+40>>2]-u[h+88>>2]);z=x(n*n);n=x(E(x(x(v+x(k*k))+z)));if(n>u[s+8>>2]|n>2]){break e}k=x(y(x(x(1.5707963705062866)-FG(k,x(E(x(x(v+x(0))+z)))))));z=u[A+8>>2];if(k>z){break e}v=u[A+4>>2];if(k>2];j=x(x(1)/x(HG(x(x(x(k-v)/x(x(z-v)+x(9.999999974752427e-7)))+x(1)),u[A>>2])*HG(x(n+x(1)),j)))}f:{if(!q[l+180>>2]){k=j;break f}k=x(0);n=x(u[h+32>>2]-u[h+80>>2]);v=x(n*n);n=x(u[h+36>>2]-u[h+84>>2]);v=x(v+x(n*n));n=x(u[h+40>>2]-u[h+88>>2]);n=x(E(x(v+x(n*n))));if(n>u[s+8>>2]){break f}v=u[s+4>>2];if(n>2]);k=j==x(0)?k:x(k/j)}A=q[l+184>>2];if(!A){j=k;break d}j=x(0);n=x(u[h+32>>2]-u[h+80>>2]);v=x(n*n);n=x(u[h+36>>2]-u[h+84>>2]);B=x(v+x(n*n));n=x(u[h+40>>2]-u[h+88>>2]);z=x(n*n);n=x(E(x(B+z)));if(n>u[s+8>>2]|n>2]){break d}v=x(E(x(x(v+x(0))+z)));if(v>u[A+8>>2]){break d}z=u[A+4>>2];if(v>2];j=x(HG(x(n+x(1)),u[s>>2])*HG(x(x(v-z)+x(1)),j));j=j==x(0)?k:x(k/j)}s=C+12|0;A=C+8|0;U=C+4|0;m=x(m*j);t=x(t*j);i=x(i*j);g:{if(!r[V|0]){j=x(p*j);break g}k=x(t*u[l+20>>2]);j=x(x(m*u[l+72>>2])+x(x(t*u[l+68>>2])+x(x(i*u[l- -64>>2])+u[l+76>>2])));p=x(i*u[l+48>>2]);n=x(t*u[l+52>>2]);t=x(x(m*u[l+40>>2])+x(x(t*u[l+36>>2])+x(x(i*u[l+32>>2])+u[l+44>>2])));i=x(x(m*u[l+24>>2])+x(k+x(x(i*u[l+16>>2])+u[l+28>>2])));m=x(x(m*u[l+56>>2])+x(n+x(p+u[l+60>>2])))}u[C>>2]=i+u[C>>2];u[U>>2]=t+u[U>>2];u[A>>2]=(g?m:x(-m))+u[A>>2];u[s>>2]=j+u[s>>2]}G=G+1|0;if((G|0)!=4){continue}break}q[b+88>>2]=0;q[b+92>>2]=1065353216;q[b+80>>2]=0;q[b+84>>2]=0;h:{if(r[c+145|0]){e=x(0);m=x(1);i=x(0);p=x(0);break h}p=x(u[b>>2]+x(0));u[b+80>>2]=p;i=x(u[b+4>>2]+x(0));u[b+84>>2]=i;e=x(u[b+8>>2]+x(0));u[b+88>>2]=e;m=x(u[b+12>>2]+x(1));u[b+92>>2]=m}if(!r[c+353|0]){p=x(u[b+16>>2]+p);u[b+80>>2]=p;i=x(u[b+20>>2]+i);u[b+84>>2]=i;e=x(u[b+24>>2]+e);u[b+88>>2]=e;m=x(u[b+28>>2]+m);u[b+92>>2]=m}if(!r[c+561|0]){p=x(u[b+32>>2]+p);u[b+80>>2]=p;i=x(u[b+36>>2]+i);u[b+84>>2]=i;e=x(u[b+40>>2]+e);u[b+88>>2]=e;m=x(u[b+44>>2]+m);u[b+92>>2]=m}if(!r[c+769|0]){p=x(u[b+48>>2]+p);u[b+80>>2]=p;i=x(u[b+52>>2]+i);u[b+84>>2]=i;e=x(u[b+56>>2]+e);u[b+88>>2]=e;m=x(u[b+60>>2]+m);u[b+92>>2]=m}t=x(m*f);i=x(i*f);m=x(p*f);j=x(e*f)}u[a+12>>2]=t;u[a+8>>2]=j;u[a+4>>2]=i;u[a>>2]=m;ue=h+192|0}function _x(a,b){var c=0,d=0,e=0;e=ue-16|0;ue=e;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;Gw(a,336764);b=b+ -1|0;a:{if(b>>>0>4){break a}b:{c:{switch(b-1|0){default:c=q[a+4>>2];if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=25;q[c+8>>2]=-2147483616;o[b+24|0]=r[336813];c=r[336809]|r[336810]<<8|(r[336811]<<16|r[336812]<<24);d=r[336805]|r[336806]<<8|(r[336807]<<16|r[336808]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336801]|r[336802]<<8|(r[336803]<<16|r[336804]<<24);d=r[336797]|r[336798]<<8|(r[336799]<<16|r[336800]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336793]|r[336794]<<8|(r[336795]<<16|r[336796]<<24);d=r[336789]|r[336790]<<8|(r[336791]<<16|r[336792]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+25|0]=0;q[a+4>>2]=q[a+4>>2]+12;break a}Gw(a,336789);break a;case 0:c=q[a+4>>2];if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=23;q[c+8>>2]=-2147483616;c=r[336834]|r[336835]<<8|(r[336836]<<16|r[336837]<<24);d=r[336830]|r[336831]<<8|(r[336832]<<16|r[336833]<<24);o[b+15|0]=d;o[b+16|0]=d>>>8;o[b+17|0]=d>>>16;o[b+18|0]=d>>>24;o[b+19|0]=c;o[b+20|0]=c>>>8;o[b+21|0]=c>>>16;o[b+22|0]=c>>>24;c=r[336827]|r[336828]<<8|(r[336829]<<16|r[336830]<<24);d=r[336823]|r[336824]<<8|(r[336825]<<16|r[336826]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336819]|r[336820]<<8|(r[336821]<<16|r[336822]<<24);d=r[336815]|r[336816]<<8|(r[336817]<<16|r[336818]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+23|0]=0;q[a+4>>2]=q[a+4>>2]+12;break a}Gw(a,336815);break a;case 2:c=q[a+4>>2];if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=25;q[c+8>>2]=-2147483616;o[b+24|0]=r[336813];c=r[336809]|r[336810]<<8|(r[336811]<<16|r[336812]<<24);d=r[336805]|r[336806]<<8|(r[336807]<<16|r[336808]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[336801]|r[336802]<<8|(r[336803]<<16|r[336804]<<24);d=r[336797]|r[336798]<<8|(r[336799]<<16|r[336800]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336793]|r[336794]<<8|(r[336795]<<16|r[336796]<<24);d=r[336789]|r[336790]<<8|(r[336791]<<16|r[336792]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+25|0]=0;q[a+4>>2]=q[a+4>>2]+12;break b}Gw(a,336789);break b;case 1:break b;case 3:break c}}c=q[a+4>>2];if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=23;q[c+8>>2]=-2147483616;c=r[336834]|r[336835]<<8|(r[336836]<<16|r[336837]<<24);d=r[336830]|r[336831]<<8|(r[336832]<<16|r[336833]<<24);o[b+15|0]=d;o[b+16|0]=d>>>8;o[b+17|0]=d>>>16;o[b+18|0]=d>>>24;o[b+19|0]=c;o[b+20|0]=c>>>8;o[b+21|0]=c>>>16;o[b+22|0]=c>>>24;c=r[336827]|r[336828]<<8|(r[336829]<<16|r[336830]<<24);d=r[336823]|r[336824]<<8|(r[336825]<<16|r[336826]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336819]|r[336820]<<8|(r[336821]<<16|r[336822]<<24);d=r[336815]|r[336816]<<8|(r[336817]<<16|r[336818]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+23|0]=0;q[a+4>>2]=q[a+4>>2]+12;break b}Gw(a,336815)}ny(a)}c=q[a+4>>2];d:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(e);b=n[q[e+8>>2]](e,32)|0;d=q[q[e+12>>2]+4>>2];if(d){n[d](q[e>>2])}q[c>>2]=b;q[c+4>>2]=24;q[c+8>>2]=-2147483616;c=r[337008]|r[337009]<<8|(r[337010]<<16|r[337011]<<24);d=r[337004]|r[337005]<<8|(r[337006]<<16|r[337007]<<24);o[b+16|0]=d;o[b+17|0]=d>>>8;o[b+18|0]=d>>>16;o[b+19|0]=d>>>24;o[b+20|0]=c;o[b+21|0]=c>>>8;o[b+22|0]=c>>>16;o[b+23|0]=c>>>24;c=r[337e3]|r[337001]<<8|(r[337002]<<16|r[337003]<<24);d=r[336996]|r[336997]<<8|(r[336998]<<16|r[336999]<<24);o[b+8|0]=d;o[b+9|0]=d>>>8;o[b+10|0]=d>>>16;o[b+11|0]=d>>>24;o[b+12|0]=c;o[b+13|0]=c>>>8;o[b+14|0]=c>>>16;o[b+15|0]=c>>>24;c=r[336992]|r[336993]<<8|(r[336994]<<16|r[336995]<<24);d=r[336988]|r[336989]<<8|(r[336990]<<16|r[336991]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+24|0]=0;q[a+4>>2]=q[a+4>>2]+12;break d}Gw(a,336988)}ue=e+16|0}function vV(a){if(!kK(a,363592)){return 1154}if(!kK(a,363608)){return 1155}if(!kK(a,363623)){return 1156}if(!kK(a,363644)){return 1157}if(!kK(a,363657)){return 1158}if(!kK(a,363675)){return 1159}if(!kK(a,363694)){return 1160}if(!kK(a,363708)){return 1161}if(!kK(a,363721)){return 1162}if(!kK(a,363737)){return 1163}if(!kK(a,363761)){return 1164}if(!kK(a,363773)){return 1165}if(!kK(a,363793)){return 1166}if(!kK(a,363806)){return 1167}if(!kK(a,363822)){return 1168}if(!kK(a,363847)){return 1169}if(!kK(a,363855)){return 1170}if(!kK(a,363868)){return 1171}if(!kK(a,363882)){return 1172}if(!kK(a,363897)){return 1173}if(!kK(a,363909)){return 1174}if(!kK(a,363925)){return 1175}if(!kK(a,363948)){return 1176}if(!kK(a,363974)){return 1177}if(!kK(a,363991)){return 1178}if(!kK(a,364011)){return 1179}if(!kK(a,364027)){return 1180}if(!kK(a,364042)){return 1181}if(!kK(a,364053)){return 1182}if(!kK(a,364069)){return 1183}if(!kK(a,364090)){return 1184}if(!kK(a,364106)){return 1185}if(!kK(a,364128)){return 1186}if(!kK(a,364143)){return 1187}if(!kK(a,364160)){return 1188}if(!kK(a,364172)){return 1189}if(!kK(a,364184)){return 1190}if(!kK(a,364198)){return 1191}if(!kK(a,364213)){return 1192}if(!kK(a,364223)){return 1193}if(!kK(a,364250)){return 1194}if(!kK(a,364263)){return 1195}if(!kK(a,364278)){return 1196}if(!kK(a,364287)){return 1197}if(!kK(a,364313)){return 1198}if(!kK(a,364322)){return 1199}if(!kK(a,364330)){return 1200}if(!kK(a,364356)){return 1201}if(!kK(a,364379)){return 1202}if(!kK(a,364391)){return 1203}if(!kK(a,364404)){return 1204}if(!kK(a,364421)){return 1205}if(!kK(a,364439)){return 1206}if(!kK(a,364458)){return 1207}if(!kK(a,364472)){return 1208}if(!kK(a,364490)){return 1209}if(!kK(a,364509)){return 1210}if(!kK(a,364530)){return 1211}if(!kK(a,364550)){return 1212}if(!kK(a,364564)){return 1213}if(!kK(a,364587)){return 1214}if(!kK(a,364598)){return 1215}if(!kK(a,364610)){return 1216}if(!kK(a,364648)){return 1217}if(!kK(a,364662)){return 1218}if(!kK(a,364677)){return 1219}if(!kK(a,364697)){return 1220}if(!kK(a,364726)){return 1221}if(!kK(a,364740)){return 1222}if(!kK(a,364759)){return 1223}if(!kK(a,364786)){return 1224}if(!kK(a,364804)){return 1225}if(!kK(a,364816)){return 1226}if(!kK(a,364836)){return 1227}if(!kK(a,364856)){return 1228}if(!kK(a,364871)){return 1229}if(!kK(a,364886)){return 1230}if(!kK(a,364907)){return 1231}if(!kK(a,364927)){return 1232}if(!kK(a,364947)){return 1233}if(!kK(a,364973)){return 1234}if(!kK(a,364980)){return 1235}if(!kK(a,364991)){return 1236}if(!kK(a,365003)){return 1237}if(!kK(a,365019)){return 1238}if(!kK(a,365031)){return 1239}if(!kK(a,365048)){return 1240}if(!kK(a,365059)){return 1241}if(!kK(a,365071)){return 1242}if(!kK(a,365083)){return 1243}if(!kK(a,365097)){return 1244}if(!kK(a,365111)){return 1245}if(!kK(a,365127)){return 1246}if(!kK(a,365140)){return 1247}if(!kK(a,365164)){return 1248}if(!kK(a,365186)){return 1249}if(!kK(a,365203)){return 1250}if(!kK(a,365213)){return 1251}if(!kK(a,365228)){return 1252}if(!kK(a,365243)){return 1253}if(!kK(a,365257)){return 1254}if(!kK(a,365279)){return 1255}if(!kK(a,365293)){return 1256}if(!kK(a,365315)){return 1257}if(!kK(a,365327)){return 1258}if(!kK(a,365347)){return 1259}if(!kK(a,365360)){return 1260}if(!kK(a,365376)){return 1261}if(!kK(a,365393)){return 1262}if(!kK(a,365409)){return 1263}if(!kK(a,365426)){return 1264}if(!kK(a,365442)){return 1265}if(!kK(a,365454)){return 1266}if(!kK(a,365467)){return 1267}if(!kK(a,365479)){return 1268}if(!kK(a,365492)){return 1269}if(!kK(a,365504)){return 1270}if(!kK(a,365517)){return 1271}if(!kK(a,365529)){return 1272}if(!kK(a,365542)){return 1273}if(!kK(a,365554)){return 1274}if(!kK(a,365567)){return 1275}if(!kK(a,365579)){return 1276}if(!kK(a,365592)){return 1277}if(!kK(a,365604)){return 1278}if(!kK(a,365617)){return 1279}if(!kK(a,365629)){return 1280}if(!kK(a,365642)){return 1281}if(!kK(a,365661)){return 1282}if(!kK(a,365680)){return 1283}if(!kK(a,365699)){return 1284}if(!kK(a,365712)){return 1285}if(!kK(a,365730)){return 1286}if(!kK(a,365747)){return 1287}if(!kK(a,365765)){return 1288}if(!kK(a,365782)){return 1289}if(!kK(a,365800)){return 1290}if(!kK(a,365817)){return 1291}if(!kK(a,365835)){return 1292}if(!kK(a,365852)){return 1293}if(!kK(a,365870)){return 1294}if(!kK(a,365892)){return 1295}if(!kK(a,365903)){return 1135}if(!kK(a,365919)){return 1136}if(!kK(a,365938)){return 1137}if(!kK(a,365951)){return 1138}if(!kK(a,365967)){return 1139}if(!kK(a,365981)){return 1140}if(!kK(a,365999)){return 1141}if(!kK(a,366015)){return 1142}if(!kK(a,366037)){return 1143}if(!kK(a,366060)){return 1144}if(!kK(a,366084)){return 1145}if(!kK(a,366109)){return 1146}if(!kK(a,366130)){return 1147}if(!kK(a,366154)){return 1148}if(!kK(a,366175)){return 1149}if(!kK(a,366194)){return 1150}if(!kK(a,366213)){return 1151}if(!kK(a,366240)){return 1152}return kK(a,366269)?0:1153}function yx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),n=0,o=0;a:{b:{c:while(1){g=b+ -8|0;d:while(1){d=a;e:while(1){f:{g:{h:{i:{e=b-d|0;a=e>>3;if(a>>>0<=5){j:{switch(a-2|0){case 0:if(!(u[g>>2]>u[d>>2])){break f}a=q[d>>2];b=q[d+4>>2];break b;case 1:i=u[g>>2];k=u[d+8>>2];if(!(k>u[d>>2])){if(!(i>k)){break f}a=q[d+8>>2];b=q[d+12>>2];c=q[g+4>>2];q[d+8>>2]=q[g>>2];q[d+12>>2]=c;q[g>>2]=a;q[g+4>>2]=b;if(!(u[d+8>>2]>u[d>>2])){break f}a=q[d+8>>2];b=q[d+12>>2];c=q[d+4>>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=c;q[d>>2]=a;q[d+4>>2]=b;return}m=u[d>>2];a=q[d>>2];b=q[d+4>>2];if(!!(i>k)){break b}c=q[d+8>>2];e=q[d+12>>2];q[d+8>>2]=a;q[d+12>>2]=b;q[d>>2]=c;q[d+4>>2]=e;if(!(u[g>>2]>m)){break f}c=q[g+4>>2];q[d+8>>2]=q[g>>2];q[d+12>>2]=c;break a;case 2:break i;case 3:break j;default:break f}}f=d+8|0;c=d+16|0;b=d+24|0;Mx(d,f,c,b);if(!(u[g>>2]>u[d+24>>2])){break f}a=q[b>>2];e=q[b+4>>2];h=q[g+4>>2];q[b>>2]=q[g>>2];q[b+4>>2]=h;q[g>>2]=a;q[g+4>>2]=e;if(!(u[b>>2]>u[c>>2])){break f}g=q[c>>2];h=q[c+4>>2];a=q[b+4>>2];i=u[b>>2];e=q[b>>2];q[c>>2]=e;q[c+4>>2]=a;q[b>>2]=g;q[b+4>>2]=h;if(!(u[f>>2]>2];q[d+16>>2]=q[d+8>>2];q[d+20>>2]=b;q[d+8>>2]=e;q[d+12>>2]=a;if(!(u[d>>2]>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=b;q[d>>2]=e;q[d+4>>2]=a;return}if((e|0)<=247){i=u[d+16>>2];m=u[d+8>>2];k=u[d>>2];k:{if(!(m>k)){if(!(i>m)){break k}m=u[d+16>>2];a=q[d+16>>2];c=q[d+20>>2];e=q[d+12>>2];i=u[d+8>>2];q[d+16>>2]=q[d+8>>2];q[d+20>>2]=e;q[d+8>>2]=a;q[d+12>>2]=c;if(!(k>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=e;q[d>>2]=a;q[d+4>>2]=c;break k}k=u[d>>2];a=q[d>>2];c=q[d+4>>2];if(!!(i>m)){e=q[d+16>>2];f=q[d+20>>2];q[d+16>>2]=a;q[d+20>>2]=c;q[d>>2]=e;q[d+4>>2]=f;i=k;break k}e=q[d+8>>2];f=q[d+12>>2];q[d+8>>2]=a;q[d+12>>2]=c;q[d>>2]=e;q[d+4>>2]=f;if(!(i>k)){break k}e=q[d+16>>2];f=q[d+20>>2];q[d+16>>2]=a;q[d+20>>2]=c;q[d+8>>2]=e;q[d+12>>2]=f;i=k}a=d+24|0;if((b|0)==(a|0)){break f}f=d+16|0;while(1){c=a;k=u[a>>2];if(!!(k>i)){g=q[c+4>>2];e=c;while(1){l:{a=f;f=q[a+4>>2];q[e>>2]=q[a>>2];q[e+4>>2]=f;if((a|0)==(d|0)){a=d;break l}e=a;f=a+ -8|0;if(u[f>>2]>2]=g;u[a>>2]=k}a=c+8|0;if((b|0)==(a|0)){break f}i=u[c>>2];f=c;continue}}h=((a|0)/2<<3)+d|0;m:{if((e|0)>=7993){e=(a|0)/4<<3;a=e+d|0;e=e+h|0;j=Mx(d,a,h,e);if(!(u[g>>2]>u[e>>2])){break m}f=q[e>>2];l=q[e+4>>2];n=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=n;q[g>>2]=f;q[g+4>>2]=l;if(!(u[e>>2]>u[h>>2])){j=j+1|0;break m}f=q[h>>2];l=q[h+4>>2];n=q[e+4>>2];q[h>>2]=q[e>>2];q[h+4>>2]=n;q[e>>2]=f;q[e+4>>2]=l;if(!(u[h>>2]>u[a>>2])){j=j+2|0;break m}e=q[a>>2];f=q[a+4>>2];l=q[h+4>>2];q[a>>2]=q[h>>2];q[a+4>>2]=l;q[h>>2]=e;q[h+4>>2]=f;if(!(u[a>>2]>u[d>>2])){j=j+3|0;break m}e=q[d>>2];f=q[d+4>>2];l=q[a+4>>2];q[d>>2]=q[a>>2];q[d+4>>2]=l;q[a>>2]=e;q[a+4>>2]=f;j=j+4|0;break m}i=u[g>>2];k=u[h>>2];n:{if(!(k>u[d>>2])){j=0;if(!(i>k)){break m}a=q[h>>2];e=q[h+4>>2];f=q[g+4>>2];q[h>>2]=q[g>>2];q[h+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e;j=1;if(!(u[h>>2]>u[d>>2])){break m}a=q[d>>2];e=q[d+4>>2];f=q[h+4>>2];q[d>>2]=q[h>>2];q[d+4>>2]=f;q[h>>2]=a;q[h+4>>2]=e;break n}m=u[d>>2];a=q[d>>2];e=q[d+4>>2];if(!!(i>k)){f=q[g+4>>2];q[d>>2]=q[g>>2];q[d+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e;j=1;break m}f=q[h+4>>2];q[d>>2]=q[h>>2];q[d+4>>2]=f;q[h>>2]=a;q[h+4>>2]=e;j=1;if(!(u[g>>2]>m)){break m}f=q[g+4>>2];q[h>>2]=q[g>>2];q[h+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e}j=2}a=g;i=u[d>>2];k=u[h>>2];if(!(i>k)){while(1){a=a+ -8|0;if((d|0)==(a|0)){e=d+8|0;if(i>u[g>>2]){break g}if((e|0)==(g|0)){break f}while(1){if(!!(i>u[e>>2])){a=q[e>>2];f=q[e+4>>2];h=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=h;q[g>>2]=a;q[g+4>>2]=f;e=e+8|0;break g}e=e+8|0;if((e|0)!=(g|0)){continue}break}break f}if(!(u[a>>2]>k)){continue}break}e=q[d>>2];f=q[d+4>>2];l=q[a+4>>2];q[d>>2]=q[a>>2];q[d+4>>2]=l;q[a>>2]=e;q[a+4>>2]=f;j=j+1|0}e=d+8|0;if(e>>>0>=a>>>0){break h}while(1){i=u[h>>2];while(1){f=e;e=e+8|0;if(u[f>>2]>i){continue}break}while(1){a=a+ -8|0;if(!(u[a>>2]>i)){continue}break}if(f>>>0>a>>>0){e=f;break h}else{l=q[f>>2];n=q[f+4>>2];o=q[a+4>>2];q[f>>2]=q[a>>2];q[f+4>>2]=o;q[a>>2]=l;q[a+4>>2]=n;h=(f|0)==(h|0)?a:h;j=j+1|0;continue}}}Mx(d,d+8|0,d+16|0,g);break f}if(!(u[h>>2]>u[e>>2]^1|(e|0)==(h|0))){a=q[e>>2];f=q[e+4>>2];l=q[h+4>>2];q[e>>2]=q[h>>2];q[e+4>>2]=l;q[h>>2]=a;q[h+4>>2]=f;j=j+1|0}if(!j){f=Nx(d,e);a=e+8|0;if(Nx(a,b)){b=e;a=d;if(!f){continue c}break f}if(f){continue d}}if((e-d|0)<(b-e|0)){yx(d,e,c);a=e+8|0;continue d}yx(e+8|0,b,c);b=e;a=d;continue c}a=g;if((e|0)==(a|0)){break f}while(1){i=u[d>>2];while(1){f=e;e=e+8|0;if(!(i>u[f>>2])){continue}break}while(1){a=a+ -8|0;if(i>u[a>>2]){continue}break}if(f>>>0>=a>>>0){d=f;continue e}else{h=q[f>>2];j=q[f+4>>2];l=q[a+4>>2];q[f>>2]=q[a>>2];q[f+4>>2]=l;q[a>>2]=h;q[a+4>>2]=j;continue}}}break}break}break}return}c=q[g+4>>2];q[d>>2]=q[g>>2];q[d+4>>2]=c}q[g>>2]=a;q[g+4>>2]=b} + + + +function xx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),n=0,o=0;a:{b:{c:while(1){g=b+ -8|0;d:while(1){d=a;e:while(1){f:{g:{h:{i:{e=b-d|0;a=e>>3;if(a>>>0<=5){j:{switch(a-2|0){case 0:if(!(u[g>>2]>2])){break f}a=q[d>>2];b=q[d+4>>2];break b;case 1:i=u[g>>2];k=u[d+8>>2];if(!(k>2])){if(!(i>2];b=q[d+12>>2];c=q[g+4>>2];q[d+8>>2]=q[g>>2];q[d+12>>2]=c;q[g>>2]=a;q[g+4>>2]=b;if(!(u[d+8>>2]>2])){break f}a=q[d+8>>2];b=q[d+12>>2];c=q[d+4>>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=c;q[d>>2]=a;q[d+4>>2]=b;return}m=u[d>>2];a=q[d>>2];b=q[d+4>>2];if(!!(i>2];e=q[d+12>>2];q[d+8>>2]=a;q[d+12>>2]=b;q[d>>2]=c;q[d+4>>2]=e;if(!(u[g>>2]>2];q[d+8>>2]=q[g>>2];q[d+12>>2]=c;break a;case 2:break i;case 3:break j;default:break f}}f=d+8|0;c=d+16|0;b=d+24|0;Kx(d,f,c,b);if(!(u[g>>2]>2])){break f}a=q[b>>2];e=q[b+4>>2];h=q[g+4>>2];q[b>>2]=q[g>>2];q[b+4>>2]=h;q[g>>2]=a;q[g+4>>2]=e;if(!(u[b>>2]>2])){break f}g=q[c>>2];h=q[c+4>>2];a=q[b+4>>2];i=u[b>>2];e=q[b>>2];q[c>>2]=e;q[c+4>>2]=a;q[b>>2]=g;q[b+4>>2]=h;if(!(u[f>>2]>i)){break f}b=q[d+12>>2];q[d+16>>2]=q[d+8>>2];q[d+20>>2]=b;q[d+8>>2]=e;q[d+12>>2]=a;if(!(u[d>>2]>i)){break f}b=q[d+4>>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=b;q[d>>2]=e;q[d+4>>2]=a;return}if((e|0)<=247){i=u[d+16>>2];m=u[d+8>>2];k=u[d>>2];k:{if(!(m>2];a=q[d+16>>2];c=q[d+20>>2];e=q[d+12>>2];i=u[d+8>>2];q[d+16>>2]=q[d+8>>2];q[d+20>>2]=e;q[d+8>>2]=a;q[d+12>>2]=c;if(!(k>m)){break k}e=q[d+4>>2];q[d+8>>2]=q[d>>2];q[d+12>>2]=e;q[d>>2]=a;q[d+4>>2]=c;break k}k=u[d>>2];a=q[d>>2];c=q[d+4>>2];if(!!(i>2];f=q[d+20>>2];q[d+16>>2]=a;q[d+20>>2]=c;q[d>>2]=e;q[d+4>>2]=f;i=k;break k}e=q[d+8>>2];f=q[d+12>>2];q[d+8>>2]=a;q[d+12>>2]=c;q[d>>2]=e;q[d+4>>2]=f;if(!(i>2];f=q[d+20>>2];q[d+16>>2]=a;q[d+20>>2]=c;q[d+8>>2]=e;q[d+12>>2]=f;i=k}a=d+24|0;if((b|0)==(a|0)){break f}f=d+16|0;while(1){c=a;k=u[a>>2];if(!!(k>2];e=c;while(1){l:{a=f;f=q[a+4>>2];q[e>>2]=q[a>>2];q[e+4>>2]=f;if((a|0)==(d|0)){a=d;break l}e=a;f=a+ -8|0;if(u[f>>2]>k){continue}}break}q[a+4>>2]=g;u[a>>2]=k}a=c+8|0;if((b|0)==(a|0)){break f}i=u[c>>2];f=c;continue}}h=((a|0)/2<<3)+d|0;m:{if((e|0)>=7993){e=(a|0)/4<<3;a=e+d|0;e=e+h|0;j=Kx(d,a,h,e);if(!(u[g>>2]>2])){break m}f=q[e>>2];l=q[e+4>>2];n=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=n;q[g>>2]=f;q[g+4>>2]=l;if(!(u[e>>2]>2])){j=j+1|0;break m}f=q[h>>2];l=q[h+4>>2];n=q[e+4>>2];q[h>>2]=q[e>>2];q[h+4>>2]=n;q[e>>2]=f;q[e+4>>2]=l;if(!(u[h>>2]>2])){j=j+2|0;break m}e=q[a>>2];f=q[a+4>>2];l=q[h+4>>2];q[a>>2]=q[h>>2];q[a+4>>2]=l;q[h>>2]=e;q[h+4>>2]=f;if(!(u[a>>2]>2])){j=j+3|0;break m}e=q[d>>2];f=q[d+4>>2];l=q[a+4>>2];q[d>>2]=q[a>>2];q[d+4>>2]=l;q[a>>2]=e;q[a+4>>2]=f;j=j+4|0;break m}i=u[g>>2];k=u[h>>2];n:{if(!(k>2])){j=0;if(!(i>2];e=q[h+4>>2];f=q[g+4>>2];q[h>>2]=q[g>>2];q[h+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e;j=1;if(!(u[h>>2]>2])){break m}a=q[d>>2];e=q[d+4>>2];f=q[h+4>>2];q[d>>2]=q[h>>2];q[d+4>>2]=f;q[h>>2]=a;q[h+4>>2]=e;break n}m=u[d>>2];a=q[d>>2];e=q[d+4>>2];if(!!(i>2];q[d>>2]=q[g>>2];q[d+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e;j=1;break m}f=q[h+4>>2];q[d>>2]=q[h>>2];q[d+4>>2]=f;q[h>>2]=a;q[h+4>>2]=e;j=1;if(!(u[g>>2]>2];q[h>>2]=q[g>>2];q[h+4>>2]=f;q[g>>2]=a;q[g+4>>2]=e}j=2}a=g;i=u[d>>2];k=u[h>>2];if(!(i>2]){break g}if((e|0)==(g|0)){break f}while(1){if(!!(i>2])){a=q[e>>2];f=q[e+4>>2];h=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=h;q[g>>2]=a;q[g+4>>2]=f;e=e+8|0;break g}e=e+8|0;if((e|0)!=(g|0)){continue}break}break f}if(!(u[a>>2]>2];f=q[d+4>>2];l=q[a+4>>2];q[d>>2]=q[a>>2];q[d+4>>2]=l;q[a>>2]=e;q[a+4>>2]=f;j=j+1|0}e=d+8|0;if(e>>>0>=a>>>0){break h}while(1){i=u[h>>2];while(1){f=e;e=e+8|0;if(u[f>>2]>2]>>0>a>>>0){e=f;break h}else{l=q[f>>2];n=q[f+4>>2];o=q[a+4>>2];q[f>>2]=q[a>>2];q[f+4>>2]=o;q[a>>2]=l;q[a+4>>2]=n;h=(f|0)==(h|0)?a:h;j=j+1|0;continue}}}Kx(d,d+8|0,d+16|0,g);break f}if(!(u[h>>2]>2]^1|(e|0)==(h|0))){a=q[e>>2];f=q[e+4>>2];l=q[h+4>>2];q[e>>2]=q[h>>2];q[e+4>>2]=l;q[h>>2]=a;q[h+4>>2]=f;j=j+1|0}if(!j){f=Lx(d,e);a=e+8|0;if(Lx(a,b)){b=e;a=d;if(!f){continue c}break f}if(f){continue d}}if((e-d|0)<(b-e|0)){xx(d,e,c);a=e+8|0;continue d}xx(e+8|0,b,c);b=e;a=d;continue c}a=g;if((e|0)==(a|0)){break f}while(1){i=u[d>>2];while(1){f=e;e=e+8|0;if(!(i>2])){continue}break}while(1){a=a+ -8|0;if(i>2]){continue}break}if(f>>>0>=a>>>0){d=f;continue e}else{h=q[f>>2];j=q[f+4>>2];l=q[a+4>>2];q[f>>2]=q[a>>2];q[f+4>>2]=l;q[a>>2]=h;q[a+4>>2]=j;continue}}}break}break}break}return}c=q[g+4>>2];q[d>>2]=q[g>>2];q[d+4>>2]=c}q[g>>2]=a;q[g+4>>2]=b}function ME(a,b,c,d){var e=0,f=0,g=0;e=ue-144|0;ue=e;q[e+140>>2]=343016;q[e+136>>2]=768;dl(e+128|0);f=q[q[e+140>>2]+4>>2];if(f){n[f](q[e+128>>2])}f=_S(8);q[f>>2]=0;q[f+4>>2]=1;q[f>>2]=343176;g=q[a+152>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+152>>2]=0}q[a+152>>2]=f;f=_S(1188);gl(f,b);q[e+128>>2]=f;f=q[e+128>>2];q[e+128>>2]=0;b=q[a>>2];a:{if(!b){q[a>>2]=f;break a}n[q[q[b>>2]+8>>2]](b)|0;b=q[e+128>>2];q[a>>2]=f;if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}Xx(e+128|0,c,d);c=q[e+128>>2];q[e+128>>2]=0;b=q[a+4>>2];b:{if(!b){q[a+4>>2]=c;break b}n[q[q[b>>2]+8>>2]](b)|0;b=q[e+128>>2];q[a+4>>2]=c;if(!b){break b}n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}ZD(e+128|0);c=q[e+128>>2];q[e+128>>2]=0;b=q[a+8>>2];c:{if(!b){q[a+8>>2]=c;break c}n[q[q[b>>2]+8>>2]](b)|0;b=q[e+128>>2];q[a+8>>2]=c;if(!b){break c}n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[a>>2];c=q[a+4>>2];n[q[q[c>>2]+100>>2]](e+128|0,c);q[e+120>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+48>>2]](b,e+120|0);b=q[e+120>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+120>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[a>>2];c=q[a+4>>2];n[q[q[c>>2]+104>>2]](e+128|0,c);q[e+112>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+56>>2]](b,e+112|0);b=q[e+112>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+112>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[a>>2];c=q[a+4>>2];n[q[q[c>>2]+108>>2]](e+128|0,c);q[e+104>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+64>>2]](b,e+104|0);b=q[e+104>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+104>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[a>>2];c=q[a+4>>2];n[q[q[c>>2]+112>>2]](e+128|0,c);q[e+96>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+72>>2]](b,e+96|0);b=q[e+96>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+96>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[a>>2];c=q[a+4>>2];n[q[q[c>>2]+116>>2]](e+128|0,c);q[e+88>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+80>>2]](b,e+88|0);b=q[e+88>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+88>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}c=q[a>>2];b=q[a+4>>2];n[q[q[b>>2]+224>>2]](e+128|0,b);d=q[e+128>>2];b=_S(12);q[b+8>>2]=d;q[b>>2]=343644;q[b+4>>2]=1;q[e+80>>2]=b;n[q[q[c>>2]+104>>2]](c,e+80|0);b=q[e+80>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+80>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}c=q[a>>2];d=q[a+4>>2];q[e+64>>2]=0;b=q[a+152>>2];d:{if(!b){break d}n[q[q[b>>2]>>2]](b)|0;f=q[e+64>>2];if(!f){break d}n[q[q[f>>2]+8>>2]](f)|0;q[e+64>>2]=0}q[e+64>>2]=b;n[q[q[d>>2]+124>>2]](e+128|0,d,e- -64|0);q[e+72>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[c>>2]+128>>2]](c,e+72|0);b=q[e+72>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+72>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[e+64>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+64>>2]=0}c=q[a>>2];d=_S(12);q[e+128>>2]=0;b=q[a+152>>2];if(b){n[q[q[b>>2]>>2]](b)|0}q[e+128>>2]=b;Qe(d,e+128|0);b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}q[e+56>>2]=d;n[q[q[c>>2]+144>>2]](c,e+56|0);b=q[e+56>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+56>>2]=0}d=q[a>>2];b=q[a+4>>2];n[q[q[b>>2]+224>>2]](e+40|0,b);b=q[e+40>>2];if(b){n[q[q[b>>2]>>2]](b)|0}f=_S(28);q[e+128>>2]=0;if(b){n[q[q[b>>2]>>2]](b)|0}q[e>>2]=0;q[e+128>>2]=b;c=q[a+152>>2];if(c){n[q[q[c>>2]>>2]](c)|0}q[e>>2]=c;Mw(f,e+128|0,e,0);c=q[e>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e>>2]=0}c=q[e+128>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e+128>>2]=0}q[e+48>>2]=f;n[q[q[d>>2]+136>>2]](d,e+48|0);c=q[e+48>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e+48>>2]=0}if(b){n[q[q[b>>2]+8>>2]](b)|0}b=q[e+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+40>>2]=0}b=q[a>>2];c=q[a+8>>2];n[q[q[c>>2]+28>>2]](e+128|0,c);q[e+32>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[b>>2]+112>>2]](b,e+32|0);b=q[e+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+32>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}c=q[a>>2];d=q[a+8>>2];q[e+16>>2]=0;b=q[a+152>>2];e:{if(!b){break e}n[q[q[b>>2]>>2]](b)|0;f=q[e+16>>2];if(!f){break e}n[q[q[f>>2]+8>>2]](f)|0;q[e+16>>2]=0}q[e+16>>2]=b;n[q[q[d>>2]+32>>2]](e+128|0,d,e+16|0);q[e+24>>2]=q[e+128>>2];q[e+128>>2]=0;n[q[q[c>>2]+120>>2]](c,e+24|0);b=q[e+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+24>>2]=0}b=q[e+128>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+128>>2]=0}b=q[e+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+16>>2]=0}b=q[a>>2];n[q[q[b>>2]+40>>2]](b,1);a=q[a+4>>2];n[q[q[a>>2]+224>>2]](e+128|0,a);a=0;c=e;b=q[e+128>>2];if(b){n[q[q[b>>2]>>2]](b)|0;a=q[e+128>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+128>>2]=0}a=b}PT(c,mD(a));b=DT(e,342976);c=b+8|0;q[e+136>>2]=q[c>>2];d=q[b+4>>2];q[e+128>>2]=q[b>>2];q[e+132>>2]=d;q[b>>2]=0;q[b+4>>2]=0;q[c>>2]=0;b=o[e+139|0];if(r[367128]){rV((b|0)<0?q[e+128>>2]:e+128|0)}if((b|0)<=-1){_U(q[e+128>>2])}if(o[e+11|0]<=-1){_U(q[e>>2])}if(a){n[q[q[a>>2]+8>>2]](a)|0}ue=e+144|0;return 1}function QG(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;q[e+12>>2]=a;a:{if(a>>>0<=211){a=q[RG(347920,348112,e+12|0)>>2];break a}if(a>>>0>=4294967292){TG();F()}f=(a>>>0)/210|0;d=w(f,210);q[e+8>>2]=a-d;g=RG(348112,348304,e+8|0)-348112>>2;b:{while(1){a=q[(g<<2)+348112>>2]+d|0;d=5;c:{d:{e:{while(1){if((d|0)==47){break e}b=q[(d<<2)+347920>>2];c=(a>>>0)/(b>>>0)|0;h=c>>>0>>0;i=h?a:i;d=d+1|0;b=h?1:(w(b,c)|0)==(a|0)?7:0;if(!b){continue}break}d=b+ -4|0;if(d>>>0>3){break b}switch(d-1|0){case 0:case 1:break b;case 2:break d;default:break e}}d=211;while(1){b=(a>>>0)/(d>>>0)|0;if(b>>>0>>0){break c}if((w(b,d)|0)==(a|0)){break d}b=d+10|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+12|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+16|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+18|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+22|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+28|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+30|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+36|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+40|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+42|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+46|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+52|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+58|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+60|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+66|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+70|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+72|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+78|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+82|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+88|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+96|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+100|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+102|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+106|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+108|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+112|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+120|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+126|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+130|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+136|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+138|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+142|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+148|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+150|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+156|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+162|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+166|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+168|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+172|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+178|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+180|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+186|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+190|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+192|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+196|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+198|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}if((w(b,c)|0)==(a|0)){break d}b=d+208|0;c=(a>>>0)/(b>>>0)|0;if(c>>>0>>0){break c}d=d+210|0;if((w(b,c)|0)!=(a|0)){continue}break}}d=g+1|0;a=(d|0)==48;g=a?0:d;f=a+f|0;d=w(f,210);continue}break}q[e+12>>2]=a;break a}q[e+12>>2]=a;a=i}ue=e+16|0;return a}function QJ(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;n=ue-96|0;ue=n;p=c;k=g;u=(k&131071)<<15|f>>>17;j=i&65535;w=j;s=h;k=h;B=k<<15|g>>>17;o=(e^i)&-2147483648;k=e&65535;m=k;r=d;E=k;k=j;C=(k&131071)<<15|h>>>17;F=i>>>16&32767;N=e>>>16&32767;a:{b:{if(N+ -1>>>0<=32765){v=0;if(F+ -1>>>0<32766){break b}}x=e&2147483647;j=x;k=d;if(!(!d&(j|0)==2147418112?!(b|c):(j|0)==2147418112&d>>>0<0|j>>>0<2147418112)){y=d;o=e|32768;break a}x=i&2147483647;e=x;d=h;if(!(!d&(e|0)==2147418112?!(f|g):(e|0)==2147418112&d>>>0<0|e>>>0<2147418112)){y=h;o=i|32768;b=f;c=g;break a}if(!(b|k|(j^2147418112|c))){if(!(d|f|(e|g))){o=2147450880;b=0;c=0;break a}o=o|2147418112;b=0;c=0;break a}if(!(d|f|(e^2147418112|g))){d=b|k;e=c|j;b=0;c=0;if(!(d|e)){o=2147450880;break a}o=o|2147418112;break a}if(!(b|k|(c|j))){b=0;c=0;break a}if(!(d|f|(e|g))){b=0;c=0;break a}if((j|0)==65535&k>>>0<=4294967295|j>>>0<65535){j=b;k=c;h=!(m|r);i=h<<6;l=z(h?b:r)+32|0;b=z(h?c:m);b=i+((b|0)==32?l:b)|0;MJ(n+80|0,j,k,r,m,b+ -15|0);r=q[n+88>>2];p=q[n+84>>2];E=q[n+92>>2];l=16-b|0;b=q[n+80>>2]}v=l;if((e|0)==65535&d>>>0>4294967295|e>>>0>65535){break b}c=!(s|w);d=c<<6;e=z(c?f:s)+32|0;c=z(c?g:w);c=d+((c|0)==32?e:c)|0;h=c;MJ(n- -64|0,f,g,s,w,c+ -15|0);f=q[n+76>>2];c=f;i=q[n+68>>2];g=i;e=q[n+72>>2];d=e;B=d<<15|g>>>17;d=g;f=q[n+64>>2];u=(d&131071)<<15|f>>>17;C=(c&131071)<<15|e>>>17;v=(l-h|0)+16|0}d=u;s=0;i=vW(d,0,b,s);c=we;D=c;A=f<<15&-32768;f=vW(A,0,p,0);e=f+i|0;l=we+c|0;l=e>>>0>>0?l+1|0:l;c=e;f=0;g=vW(A,G,b,s);e=f+g|0;j=we+c|0;j=e>>>0>>0?j+1|0:j;u=e;g=j;X=(c|0)==(j|0)&e>>>0>>0|j>>>0>>0;Q=vW(d,O,p,P);J=we;x=r;f=vW(A,G,r,0);e=f+Q|0;m=we+J|0;m=e>>>0>>0?m+1|0:m;R=e;h=vW(B,0,b,s);e=e+h|0;f=we+m|0;K=e;f=e>>>0>>0?f+1|0:f;w=f;h=f;f=(l|0)==(D|0)&c>>>0>>0|l>>>0>>0;e=l;c=e+K|0;j=f+h|0;D=c;j=c>>>0>>0?j+1|0:j;e=j;h=c;T=vW(d,O,r,S);L=we;c=A;H=E|65536;A=t;f=vW(c,G,H,t);c=f+T|0;j=we+L|0;j=c>>>0>>0?j+1|0:j;U=c;k=vW(p,P,B,V);c=c+k|0;t=j;f=j+we|0;f=c>>>0>>0?f+1|0:f;M=c;I=C&2147483647|-2147483648;c=vW(I,0,b,s);b=M+c|0;s=f;k=f+we|0;G=b;c=b>>>0>>0?k+1|0:k;j=e+b|0;f=0;b=f+h|0;if(b>>>0>>0){j=j+1|0}E=b;C=j;f=j;h=b+X|0;if(h>>>0>>0){f=f+1|0}i=f;r=(v+(F+N|0)|0)+ -16383|0;f=vW(x,S,B,V);b=we;l=0;k=vW(d,O,H,A);d=k+f|0;j=we+b|0;j=d>>>0>>0?j+1|0:j;v=d;k=d;d=j;j=(b|0)==(d|0)&k>>>0>>0|d>>>0>>0;f=vW(I,W,p,P);b=f+k|0;k=we+d|0;k=b>>>0>>0?k+1|0:k;p=b;f=b;b=k;d=(d|0)==(b|0)&f>>>0>>0|b>>>0>>0;f=j+d|0;if(f>>>0>>0){l=1}k=f;d=b;f=l;F=k;j=0;k=(m|0)==(w|0)&K>>>0>>0|w>>>0>>0;m=k+((m|0)==(J|0)&R>>>0>>0|m>>>0>>0)|0;if(m>>>0>>0){j=1}l=m;m=m+p|0;k=d+j|0;v=m;j=m;k=j>>>0>>0?k+1|0:k;d=k;b=(b|0)==(d|0)&j>>>0

>>0|d>>>0>>0;k=F+b|0;if(k>>>0>>0){f=f+1|0}b=k;k=vW(I,W,H,A);b=b+k|0;j=we+f|0;j=b>>>0>>0?j+1|0:j;l=b;m=vW(I,W,x,S);f=we;p=vW(B,V,H,A);b=p+m|0;k=we+f|0;k=b>>>0

>>0?k+1|0:k;p=b;b=k;k=(f|0)==(b|0)&p>>>0>>0|b>>>0>>0;f=b+l|0;l=j+k|0;k=f>>>0>>0?l+1|0:l;x=f;j=d+p|0;l=0;b=l+v|0;if(b>>>0>>0){j=j+1|0}m=b;f=b;b=j;d=(d|0)==(b|0)&f>>>0>>0|b>>>0>>0;f=x+d|0;if(f>>>0>>0){k=k+1|0}p=f;l=b;j=0;f=(t|0)==(s|0)&M>>>0>>0|s>>>0>>0;t=f+((t|0)==(L|0)&U>>>0>>0|t>>>0>>0)|0;if(t>>>0>>0){j=1}f=t+((c|0)==(s|0)&G>>>0>>0|c>>>0>>0)|0;d=c;c=d+m|0;l=f+l|0;l=c>>>0>>0?l+1|0:l;t=c;d=c;c=l;b=(b|0)==(c|0)&d>>>0>>0|c>>>0>>0;d=b+p|0;if(d>>>0>>0){k=k+1|0}b=c;j=k;k=d;f=0;d=(e|0)==(C|0)&E>>>0>>0|C>>>0>>0;e=d+((e|0)==(w|0)&D>>>0>>0|e>>>0>>0)|0;if(e>>>0>>0){f=1}d=e+t|0;l=b+f|0;l=d>>>0>>0?l+1|0:l;b=d;e=l;b=(c|0)==(e|0)&b>>>0>>0|e>>>0>>0;c=k+b|0;if(c>>>0>>0){j=j+1|0}b=c;c=j;c:{if(c&65536){r=r+1|0;break c}m=g>>>31|0;j=c<<1|b>>>31;b=b<<1|e>>>31;c=j;j=e<<1|d>>>31;d=d<<1|i>>>31;e=j;k=u;j=g<<1|k>>>31;u=k<<1;g=j;k=i<<1|h>>>31;h=h<<1|m;i=k}if((r|0)>=32767){o=o|2147418112;b=0;c=0;break a}d:{if((r|0)<=0){f=1-r|0;if(f>>>0<=127){k=r+127|0;MJ(n+48|0,u,g,h,i,k);MJ(n+32|0,d,e,b,c,k);PJ(n+16|0,u,g,h,i,f);PJ(n,d,e,b,c,f);u=(q[n+48>>2]|q[n+56>>2])!=0|(q[n+52>>2]|q[n+60>>2])!=0|(q[n+32>>2]|q[n+16>>2]);g=q[n+36>>2]|q[n+20>>2];h=q[n+40>>2]|q[n+24>>2];i=q[n+44>>2]|q[n+28>>2];d=q[n>>2];e=q[n+4>>2];c=q[n+12>>2];b=q[n+8>>2];break d}b=0;c=0;break a}c=c&65535|r<<16}y=b|y;o=c|o;if(!(!h&(i|0)==-2147483648?!(g|u):(i|0)>-1?1:(i|0)>=-1?h>>>0<=4294967295?0:1:0)){l=o;m=e;b=d+1|0;if(b>>>0<1){m=m+1|0}c=m;d=(e|0)==(c|0)&b>>>0>>0|c>>>0>>0;e=d+y|0;if(e>>>0>>0){l=l+1|0}y=e;o=l;break a}if(h|u|(i^-2147483648|g)){b=d;c=e;break a}m=o;j=e;b=d&1;c=b+d|0;if(c>>>0>>0){j=j+1|0}b=c;c=j;d=(e|0)==(c|0)&b>>>0>>0|c>>>0>>0;e=d+y|0;if(e>>>0>>0){m=m+1|0}y=e;o=m}q[a>>2]=b;q[a+4>>2]=c;q[a+8>>2]=y;q[a+12>>2]=o;ue=n+96|0}function vK(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0;f=ue-80|0;ue=f;q[f+76>>2]=b;A=f+55|0;x=f+56|0;b=0;a:{b:{c:while(1){d:{if((s|0)<0){break d}if((b|0)>(2147483647-s|0)){q[91802]=61;s=-1;break d}s=b+s|0}e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{j=q[f+76>>2];b=j;i=r[b|0];if(i){while(1){r:{s:{g=i&255;t:{if(!g){i=b;break t}if((g|0)!=37){break s}i=b;while(1){if(r[b+1|0]!=37){break t}g=b+2|0;q[f+76>>2]=g;i=i+1|0;h=r[b+2|0];b=g;if((h|0)==37){continue}break}}b=i-j|0;if(a){wK(a,j,b)}if(b){continue c}t=-1;i=1;g=f;k=!IJ(o[q[f+76>>2]+1|0]);b=q[f+76>>2];if(!(k|r[b+2|0]!=36)){t=o[b+1|0]+ -48|0;y=1;i=3}b=i+b|0;q[g+76>>2]=b;i=0;u=o[b|0];h=u+ -32|0;u:{if(h>>>0>31){g=b;break u}g=b;h=1<>2]=g;i=h|i;u=o[b+1|0];h=u+ -32|0;if(h>>>0>31){break u}b=g;h=1<>2];if(r[b+2|0]!=36){break x}q[((o[b+1|0]<<2)+e|0)+ -192>>2]=10;m=q[((o[b+1|0]<<3)+d|0)+ -384>>2];y=1;b=b+3|0;break w}if(y){break b}y=0;m=0;if(a){b=q[c>>2];q[c>>2]=b+4;m=q[b>>2]}b=q[f+76>>2]+1|0}q[k+76>>2]=b;if((m|0)>-1){break v}m=0-m|0;i=i|8192;break v}m=xK(f+76|0);if((m|0)<0){break b}b=q[f+76>>2]}h=-1;y:{if(r[b|0]!=46){break y}if(r[b+1|0]==42){z:{if(!IJ(o[b+2|0])){break z}b=q[f+76>>2];if(r[b+3|0]!=36){break z}q[((o[b+2|0]<<2)+e|0)+ -192>>2]=10;h=q[((o[b+2|0]<<3)+d|0)+ -384>>2];b=b+4|0;q[f+76>>2]=b;break y}if(y){break b}if(a){b=q[c>>2];q[c>>2]=b+4;h=q[b>>2]}else{h=0}b=q[f+76>>2]+2|0;q[f+76>>2]=b;break y}q[f+76>>2]=b+1;h=xK(f+76|0);b=q[f+76>>2]}g=0;while(1){z=g;l=-1;if(o[b|0]+ -65>>>0>57){break a}u=b+1|0;q[f+76>>2]=u;g=o[b|0];b=u;g=r[(g+w(z,58)|0)+350719|0];if(g+ -1>>>0<8){continue}break}if(!g){break a}A:{B:{C:{if((g|0)==19){if((t|0)<=-1){break C}break a}if((t|0)<0){break B}q[(t<<2)+e>>2]=g;b=(t<<3)+d|0;g=q[b+4>>2];q[f+64>>2]=q[b>>2];q[f+68>>2]=g}b=0;if(!a){continue c}break A}if(!a){break e}yK(f- -64|0,g,c);u=q[f+76>>2]}k=i&-65537;i=i&8192?k:i;l=0;t=350761;g=x;b=o[u+ -1|0];b=z?(b&15)==3?b&-33:b:b;u=b+ -88|0;if(u>>>0<=32){break r}D:{E:{F:{G:{k=b+ -65|0;if(k>>>0>6){if((b|0)!=83){break f}if(!h){break G}g=q[f+64>>2];break E}switch(k-1|0){case 1:break F;case 0:case 2:break f;default:break q}}b=0;zK(a,32,m,0,i);break D}q[f+12>>2]=0;q[f+8>>2]=q[f+64>>2];q[f+64>>2]=f+8;h=-1;g=f+8|0}b=0;H:{while(1){j=q[g>>2];if(!j){break H}j=sK(f+4|0,j);k=(j|0)<0;if(!(k|j>>>0>h-b>>>0)){g=g+4|0;b=b+j|0;if(h>>>0>b>>>0){continue}break H}break}l=-1;if(k){break a}}zK(a,32,m,b,i);if(!b){b=0;break D}h=0;g=q[f+64>>2];while(1){j=q[g>>2];if(!j){break D}j=sK(f+4|0,j);h=j+h|0;if((h|0)>(b|0)){break D}wK(a,f+4|0,j);g=g+4|0;if(h>>>0>>0){continue}break}}zK(a,32,m,b,i^8192);b=(m|0)>(b|0)?m:b;continue c}g=b+1|0;q[f+76>>2]=g;i=r[b+1|0];b=g;continue}break}switch(u-1|0){case 28:break i;case 21:break j;case 23:break l;case 22:break m;case 11:case 16:break n;case 10:break o;case 26:break p;case 8:case 12:case 13:case 14:break q;case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 9:case 15:case 17:case 18:case 19:case 20:case 24:case 25:case 27:case 29:case 30:break f;default:break k}}l=s;if(a){break a}if(!y){break e}b=1;while(1){a=q[(b<<2)+e>>2];if(a){yK((b<<3)+d|0,a,c);l=1;b=b+1|0;if((b|0)!=10){continue}break a}break}l=1;if(b>>>0>9){break a}while(1){a=b;b=b+1|0;if(q[(b<<2)+e>>2]?0:(b|0)!=10){continue}break}l=a>>>0<9?-1:1;break a}b=n[854](a,v[f+64>>3],m,h,i,b)|0;continue}b=q[f+64>>2];j=b?b:350771;b=tG(j,0,h);g=b?b:h+j|0;i=k;h=b?b-j|0:h;break f}o[f+55|0]=q[f+64>>2];h=1;j=A;i=k;break f}k=q[f+68>>2];b=k;j=q[f+64>>2];if((b|0)<-1?1:(b|0)<=-1?j>>>0>4294967295?0:1:0){b=0-(b+(0>>0)|0)|0;j=0-j|0;q[f+64>>2]=j;q[f+68>>2]=b;l=1;t=350761;break h}if(i&2048){l=1;t=350762;break h}l=i&1;t=l?350763:350761;break h}j=AK(q[f+64>>2],q[f+68>>2],x);if(!(i&8)){break g}b=x-j|0;h=(h|0)>(b|0)?h:b+1|0;break g}h=h>>>0>8?h:8;i=i|8;b=120}j=BK(q[f+64>>2],q[f+68>>2],x,b&32);if(!(i&8)|!(q[f+64>>2]|q[f+68>>2])){break g}t=(b>>>4|0)+350761|0;l=2;break g}b=0;g=z&255;if(g>>>0>7){continue}I:{switch(g-1|0){default:q[q[f+64>>2]>>2]=s;continue;case 0:q[q[f+64>>2]>>2]=s;continue;case 1:g=q[f+64>>2];q[g>>2]=s;q[g+4>>2]=s>>31;continue;case 2:p[q[f+64>>2]>>1]=s;continue;case 3:o[q[f+64>>2]]=s;continue;case 5:q[q[f+64>>2]>>2]=s;continue;case 4:continue;case 6:break I}}g=q[f+64>>2];q[g>>2]=s;q[g+4>>2]=s>>31;continue}j=q[f+64>>2];b=q[f+68>>2];t=350761}j=CK(j,b,x)}i=(h|0)>-1?i&-65537:i;b=q[f+64>>2];k=q[f+68>>2];J:{if(!(!!(b|k)|h)){j=x;h=0;break J}b=!(b|k)+(x-j|0)|0;h=(h|0)>(b|0)?h:b}}k=g-j|0;h=(h|0)<(k|0)?k:h;g=h+l|0;b=(m|0)<(g|0)?g:m;zK(a,32,b,g,i);wK(a,t,l);zK(a,48,b,g,i^65536);zK(a,48,h,k,0);wK(a,j,k);zK(a,32,b,g,i^8192);continue}break}l=0;break a}l=-1}ue=f+80|0;return l}function _p(a,b,c,d,e,f,g){var h=0,i=x(0),j=0,k=x(0),l=x(0),m=x(0),n=x(0),p=x(0),s=0,t=x(0),v=x(0),z=0,A=x(0),B=x(0),C=0,D=x(0),F=x(0),G=x(0),H=0,I=0,J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=x(0),S=x(0),T=x(0),U=0,V=0;h=ue-192|0;ue=h;if(f!=x(0)){H=h+80|0;while(1){j=w(I,208)+b|0;if(!(!r[j+192|0]|!r[j+145|0])){o[h+176|0]=0;nt(h+16|0,j);s=q[h+28>>2];q[H+8>>2]=q[h+24>>2];q[H+12>>2]=s;s=q[h+20>>2];q[H>>2]=q[h+16>>2];q[H+4>>2]=s;n=u[c>>2];l=u[c+4>>2];i=u[c+8>>2];u[h+44>>2]=u[c+12>>2]/d;v=x(i/d);u[h+40>>2]=v;l=x(l/d);u[h+36>>2]=l;n=x(n/d);u[h+32>>2]=n;m=u[a+96>>2];p=u[a+100>>2];i=u[a+104>>2];u[h+76>>2]=u[a+108>>2]/d;i=x(i/d);u[h+72>>2]=i;p=x(p/d);u[h+68>>2]=p;A=x(m/d);u[h+64>>2]=A;C=(I<<4)+a|0;t=u[C>>2];k=u[C+4>>2];m=u[C+8>>2];u[h+60>>2]=u[C+12>>2]/d;m=x(m/d);u[h+56>>2]=m;k=x(k/d);u[h+52>>2]=k;t=x(t/d);u[h+48>>2]=t;D=u[e>>2];F=u[e+4>>2];B=u[e+8>>2];G=u[e+12>>2];u[h+180>>2]=f;u[h+108>>2]=G/d;B=x(B/d);u[h+104>>2]=B;u[h+100>>2]=F/d;u[h+96>>2]=D/d;s=r[j+144|0];o[h+176|0]=s;if(!g){u[h+104>>2]=-B;i=x(-i);u[h+72>>2]=i;m=x(-m);u[h+56>>2]=m;u[h+40>>2]=-v}if(s){v=u[j+104>>2];D=u[j+100>>2];F=u[j+108>>2];B=u[j+96>>2];G=u[j+120>>2];J=u[j+116>>2];K=u[j+124>>2];L=u[j+112>>2];M=u[j+136>>2];N=u[j+132>>2];O=u[j+140>>2];P=u[j+128>>2];Q=u[j+88>>2];R=u[j+84>>2];S=u[j+92>>2];T=u[j+80>>2];u[h+64>>2]=x(Q*i)+x(x(R*p)+x(S+x(T*A)));u[h+48>>2]=x(Q*m)+x(x(R*k)+x(S+x(T*t)));u[h+76>>2]=x(M*i)+x(x(N*p)+x(O+x(P*A)));u[h+72>>2]=x(G*i)+x(x(J*p)+x(K+x(L*A)));u[h+68>>2]=x(v*i)+x(x(D*p)+x(F+x(B*A)));u[h+60>>2]=x(M*m)+x(x(N*k)+x(O+x(P*t)));u[h+56>>2]=x(G*m)+x(x(J*k)+x(K+x(L*t)));u[h+52>>2]=x(v*m)+x(x(D*k)+x(F+x(B*t)));i=u[h+40>>2];u[h+44>>2]=x(M*i)+x(x(N*l)+x(O+x(P*n)));u[h+40>>2]=x(G*i)+x(x(J*l)+x(K+x(L*n)));u[h+36>>2]=x(v*i)+x(x(D*l)+x(F+x(B*n)));u[h+32>>2]=x(Q*i)+x(x(R*l)+x(S+x(T*n)));l=u[h+104>>2];n=u[h+100>>2];i=u[h+96>>2];u[h+108>>2]=x(M*l)+x(x(N*n)+x(O+x(P*i)));u[h+104>>2]=x(G*l)+x(x(J*n)+x(K+x(L*i)));u[h+100>>2]=x(v*l)+x(x(D*n)+x(F+x(B*i)));u[h+96>>2]=x(Q*l)+x(x(R*n)+x(S+x(T*i)))}s=q[j+168>>2];a:{if(!s){A=x(1);p=x(0);m=x(0);i=x(0);break a}A=x(x(u[s+12>>2]*f)*d);m=x(x(u[s+4>>2]*f)*d);p=x(x(u[s>>2]*f)*d);i=x(x(u[s+8>>2]*f)*d)}s=q[j+172>>2];if(s){$p(h+16|0,h+32|0,s);A=x(u[h+28>>2]*d);m=x(u[h+20>>2]*d);p=x(u[h+16>>2]*d);i=x(u[h+24>>2]*d)}V=j+144|0;s=q[j+176>>2];b:{if(!s){l=x(1);break b}z=q[j+188>>2];c:{if(!z){l=x(1);break c}l=x(0);n=x(u[h+32>>2]-u[h+80>>2]);t=x(n*n);n=x(u[h+36>>2]-u[h+84>>2]);k=x(u[h+40>>2]-u[h+88>>2]);v=x(k*k);k=x(E(x(x(t+x(n*n))+v)));if(k>u[s+8>>2]|k>2]){break c}n=x(y(x(x(1.5707963705062866)-FG(n,x(E(x(x(t+x(0))+v)))))));v=u[z+8>>2];if(n>v){break c}t=u[z+4>>2];if(n>2];l=x(x(1)/x(HG(x(x(x(n-t)/x(x(v-t)+x(9.999999974752427e-7)))+x(1)),u[z>>2])*HG(x(k+x(1)),l)))}d:{if(!q[j+180>>2]){n=l;break d}n=x(0);k=x(u[h+32>>2]-u[h+80>>2]);t=x(k*k);k=x(u[h+36>>2]-u[h+84>>2]);t=x(t+x(k*k));k=x(u[h+40>>2]-u[h+88>>2]);k=x(E(x(t+x(k*k))));if(k>u[s+8>>2]){break d}t=u[s+4>>2];if(k>2]);n=l==x(0)?n:x(n/l)}z=q[j+184>>2];if(!z){l=n;break b}l=x(0);k=x(u[h+32>>2]-u[h+80>>2]);t=x(k*k);k=x(u[h+36>>2]-u[h+84>>2]);B=x(t+x(k*k));k=x(u[h+40>>2]-u[h+88>>2]);v=x(k*k);k=x(E(x(B+v)));if(k>u[s+8>>2]|k>2]){break b}t=x(E(x(x(t+x(0))+v)));if(t>u[z+8>>2]){break b}v=u[z+4>>2];if(t>2];l=x(HG(x(k+x(1)),u[s>>2])*HG(x(x(t-v)+x(1)),l));l=l==x(0)?n:x(n/l)}s=C+12|0;z=C+8|0;U=C+4|0;i=x(i*l);m=x(m*l);p=x(p*l);e:{if(!r[V|0]){l=x(A*l);break e}n=x(m*u[j+20>>2]);l=x(x(i*u[j+72>>2])+x(x(m*u[j+68>>2])+x(x(p*u[j- -64>>2])+u[j+76>>2])));A=x(p*u[j+48>>2]);k=x(m*u[j+52>>2]);m=x(x(i*u[j+40>>2])+x(x(m*u[j+36>>2])+x(x(p*u[j+32>>2])+u[j+44>>2])));p=x(x(i*u[j+24>>2])+x(n+x(x(p*u[j+16>>2])+u[j+28>>2])));i=x(x(i*u[j+56>>2])+x(k+x(A+u[j+60>>2])))}u[C>>2]=p+u[C>>2];u[U>>2]=m+u[U>>2];u[z>>2]=(g?i:x(-i))+u[z>>2];u[s>>2]=l+u[s>>2]}I=I+1|0;if((I|0)!=4){continue}break}q[a+104>>2]=0;q[a+108>>2]=1065353216;q[a+96>>2]=0;q[a+100>>2]=0;f:{if(!r[b+145|0]){d=x(0);i=x(1);m=x(0);p=x(0);break f}p=x(u[a>>2]+x(0));u[a+96>>2]=p;m=x(u[a+4>>2]+x(0));u[a+100>>2]=m;d=x(u[a+8>>2]+x(0));u[a+104>>2]=d;i=x(u[a+12>>2]+x(1));u[a+108>>2]=i}if(r[b+353|0]){p=x(u[a+16>>2]+p);u[a+96>>2]=p;m=x(u[a+20>>2]+m);u[a+100>>2]=m;d=x(u[a+24>>2]+d);u[a+104>>2]=d;i=x(u[a+28>>2]+i);u[a+108>>2]=i}if(r[b+561|0]){p=x(u[a+32>>2]+p);u[a+96>>2]=p;m=x(u[a+36>>2]+m);u[a+100>>2]=m;d=x(u[a+40>>2]+d);u[a+104>>2]=d;i=x(u[a+44>>2]+i);u[a+108>>2]=i}if(r[b+769|0]){p=x(u[a+48>>2]+p);u[a+96>>2]=p;m=x(u[a+52>>2]+m);u[a+100>>2]=m;d=x(u[a+56>>2]+d);u[a+104>>2]=d;i=x(u[a+60>>2]+i);u[a+108>>2]=i}u[a+112>>2]=x(p*f)+u[a+112>>2];b=a+116|0;u[b>>2]=x(m*f)+u[b>>2];b=a+120|0;u[b>>2]=x(d*f)+u[b>>2];a=a+124|0;u[a>>2]=x(i*f)+u[a>>2]}ue=h+192|0}function Mi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=x(0),g=0,h=0,i=0,j=0,k=0;d=ue-48|0;ue=d;c=q[b>>2];q[b>>2]=c+4;q[a+3356>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);k=q[a+4>>2];q[b>>2]=q[b>>2]+4;c=q[a+4>>2];a:{if((n[q[q[c>>2]+36>>2]](c)|0)>=3){q[a+3480>>2]=q[a+2380>>2];c=q[b>>2];break a}c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3480>>2]=e;c=q[b>>2]+4|0;q[b>>2]=c;q[a+2520>>2]=e;q[a+2380>>2]=e}q[a+3484>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];ai(a+3488|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3532>>2]=e;c=q[b>>2]+4|0;q[b>>2]=c;if((e|0)==1){h=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=a+3536|0;i=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[e|0]=i;o[e+1|0]=i>>>8;o[e+2|0]=i>>>16;o[e+3|0]=i>>>24;o[e+4|0]=h;o[e+5|0]=h>>>8;o[e+6|0]=h>>>16;o[e+7|0]=h>>>24;h=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);e=a+3544|0;c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[e|0]=c;o[e+1|0]=c>>>8;o[e+2|0]=c>>>16;o[e+3|0]=c>>>24;o[e+4|0]=h;o[e+5|0]=h>>>8;o[e+6|0]=h>>>16;o[e+7|0]=h>>>24;c=q[b>>2]+16|0;q[b>>2]=c}c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3552>>2]=c;q[b>>2]=q[b>>2]+4;b:{if(c>>>0>1){break b}if(c-1){c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=8){e=xp(d+16|0);h=xp(d+24|0);i=xp(d+32|0);j=xp(d+40|0);c=q[b>>2];g=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[d+16>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[d+20>>2]=g;g=r[c+28|0]|r[c+29|0]<<8|(r[c+30|0]<<16|r[c+31|0]<<24);q[d+40>>2]=r[c+24|0]|r[c+25|0]<<8|(r[c+26|0]<<16|r[c+27|0]<<24);q[d+44>>2]=g;g=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);q[d+32>>2]=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);q[d+36>>2]=g;g=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);q[d+24>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);q[d+28>>2]=g;mt(d,e);e=q[d+12>>2];c=a+3576|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3568|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,h);e=q[d+12>>2];c=a+3592|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3584|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,i);e=q[d+12>>2];c=a+3608|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3600|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,j);e=q[d+12>>2];c=a+3624|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3616|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;q[b>>2]=q[b>>2]+32;q[a+3552>>2]=1;break b}q[a+3552>>2]=1;c=a+3624|0;q[c>>2]=0;q[c+4>>2]=1065353216;c=a+3616|0;q[c>>2]=1056964608;q[c+4>>2]=1056964608;c=a+3608|0;q[c>>2]=0;q[c+4>>2]=1065353216;c=a+3600|0;q[c>>2]=-1090519040;q[c+4>>2]=1056964608;c=a+3592|0;q[c>>2]=0;q[c+4>>2]=1065353216;c=a+3584|0;q[c>>2]=1056964608;q[c+4>>2]=-1090519040;c=a+3576|0;q[c>>2]=0;q[c+4>>2]=1065353216;c=a+3568|0;q[c>>2]=-1090519040;q[c+4>>2]=-1090519040;break b}e=xp(d+16|0);h=xp(d+24|0);i=xp(d+32|0);j=xp(d+40|0);c=q[b>>2];g=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[d+16>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[d+20>>2]=g;g=r[c+28|0]|r[c+29|0]<<8|(r[c+30|0]<<16|r[c+31|0]<<24);q[d+40>>2]=r[c+24|0]|r[c+25|0]<<8|(r[c+26|0]<<16|r[c+27|0]<<24);q[d+44>>2]=g;g=r[c+20|0]|r[c+21|0]<<8|(r[c+22|0]<<16|r[c+23|0]<<24);q[d+32>>2]=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);q[d+36>>2]=g;g=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);q[d+24>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);q[d+28>>2]=g;mt(d,e);e=q[d+12>>2];c=a+3576|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3568|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,h);e=q[d+12>>2];c=a+3592|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3584|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,i);e=q[d+12>>2];c=a+3608|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3600|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;mt(d,j);e=q[d+12>>2];c=a+3624|0;q[c>>2]=q[d+8>>2];q[c+4>>2]=e;e=q[d+4>>2];c=a+3616|0;q[c>>2]=q[d>>2];q[c+4>>2]=e;q[b>>2]=q[b>>2]+32}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<=2){c=q[b>>2];e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;q[a+2480>>2]=e;q[a+2312>>2]=e}if(!(!fg(k)|q[a+3552>>2]!=1)){b=a+3568|0;c=q[a+4>>2];f=x(n[q[q[c>>2]+32>>2]](c));u[b>>2]=f*u[b>>2];b=a+3572|0;u[b>>2]=f*u[b>>2];b=a+3576|0;u[b>>2]=f*u[b>>2];b=a+3580|0;u[b>>2]=f*u[b>>2];b=a+3584|0;c=q[a+4>>2];f=x(n[q[q[c>>2]+32>>2]](c));u[b>>2]=f*u[b>>2];b=a+3588|0;u[b>>2]=f*u[b>>2];b=a+3592|0;u[b>>2]=f*u[b>>2];b=a+3596|0;u[b>>2]=f*u[b>>2];b=a+3600|0;c=q[a+4>>2];f=x(n[q[q[c>>2]+32>>2]](c));u[b>>2]=f*u[b>>2];b=a+3604|0;u[b>>2]=f*u[b>>2];b=a+3608|0;u[b>>2]=f*u[b>>2];b=a+3612|0;u[b>>2]=f*u[b>>2];b=a+3616|0;c=q[a+4>>2];f=x(n[q[q[c>>2]+32>>2]](c));u[b>>2]=f*u[b>>2];b=a+3620|0;u[b>>2]=f*u[b>>2];b=a+3624|0;u[b>>2]=f*u[b>>2];a=a+3628|0;u[a>>2]=f*u[a>>2]}ue=d+48|0}function dq(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=ue-144|0;ue=e;d=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);o[e+140|0]=0;q[e+136>>2]=d;q[e+128>>2]=0;q[e+120>>2]=0;q[e+124>>2]=0;o[e+131|0]=4;o[e+124|0]=0;q[e+120>>2]=1111706981;q[e+112>>2]=0;q[e+104>>2]=0;q[e+108>>2]=0;d=sV(e+136|0);a:{b:{if(d>>>0<4294967280){c:{d:{if(d>>>0>=11){g=d+16&-16;f=_S(g);q[e+112>>2]=g|-2147483648;q[e+104>>2]=f;q[e+108>>2]=d;i=e+104|0;break d}o[e+115|0]=d;i=e+104|0;f=i;if(!d){break c}}kV(f,e+136|0,d)}o[d+f|0]=0;g=1;f=r[e+131|0];k=f<<24>>24;j=(k|0)<0;i=r[i+11|0];l=i<<24>>24;d=(l|0)<0;h=d?q[e+108>>2]:i;i=j?q[e+124>>2]:f;if((h|0)!=(i|0)){break a}d=d?q[e+104>>2]:e+104|0;h=q[e+120>>2];if(j){break b}if(!i){g=0;break a}if(r[d|0]!=(h&255)){break a}i=e+120|0;while(1){f=f+ -1|0;if(!f){g=0;break a}j=r[d+1|0];d=d+1|0;i=i+1|0;if((j|0)==r[i|0]){continue}break}break a}kT();F()}if(!i){g=0;break a}g=(sG(j?h:e+120|0,d,i)|0)!=0}if((l|0)<=-1){_U(q[e+104>>2])}if((k|0)<=-1){_U(q[e+120>>2])}f=0;e:{if((r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24))!=1612|g){break e}d=(r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24))<<2;g=d+24|0;d=b+d|0;d=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);f=q[a+12>>2];i=q[a+16>>2]-f|0;f:{if(d>>>0>i>>>0){f=a+12|0;Se(f,d-i|0);f=q[f>>2];break f}if(d>>>0>=i>>>0){break f}q[a+16>>2]=d+f}kV(f,b+g|0,d);f=1;d=d+g|0;if((d|0)<0|(d|0)>=(c|0)){break e}i=a+4|0;while(1){f=b+d|0;k=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);j=_S(108);q[j+4>>2]=5772;q[j>>2]=5728;q[j+8>>2]=1;m=lV(j+12|0,0,96);q[e+128>>2]=0;q[e+120>>2]=0;q[e+124>>2]=0;q[e+112>>2]=0;q[e+104>>2]=0;q[e+108>>2]=0;q[e+96>>2]=0;q[e+88>>2]=0;q[e+92>>2]=0;q[e+80>>2]=0;q[e+72>>2]=0;q[e+76>>2]=0;q[e+64>>2]=0;q[e+56>>2]=0;q[e+60>>2]=0;q[e+48>>2]=0;q[e+40>>2]=0;q[e+44>>2]=0;q[e+32>>2]=0;q[e+24>>2]=0;q[e+28>>2]=0;q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;g=d+12|0;d=r[f+8|0]|r[f+9|0]<<8|(r[f+10|0]<<16|r[f+11|0]<<24);if(d){Se(e+120|0,d);f=q[e+120>>2]}else{f=0}kV(f,b+g|0,d);d=d+g|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+104>>2];h=q[e+108>>2]-g|0;g:{if(d>>>0>h>>>0){Se(e+104|0,d-h|0);g=q[e+104>>2];break g}if(d>>>0>=h>>>0){break g}q[e+108>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+88>>2];h=q[e+92>>2]-g|0;h:{if(d>>>0>h>>>0){Se(e+88|0,d-h|0);g=q[e+88>>2];break h}if(d>>>0>=h>>>0){break h}q[e+92>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+72>>2];h=q[e+76>>2]-g|0;i:{if(d>>>0>h>>>0){Se(e+72|0,d-h|0);g=q[e+72>>2];break i}if(d>>>0>=h>>>0){break i}q[e+76>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+56>>2];h=q[e+60>>2]-g|0;j:{if(d>>>0>h>>>0){Se(e+56|0,d-h|0);g=q[e+56>>2];break j}if(d>>>0>=h>>>0){break j}q[e+60>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+40>>2];h=q[e+44>>2]-g|0;k:{if(d>>>0>h>>>0){Se(e+40|0,d-h|0);g=q[e+40>>2];break k}if(d>>>0>=h>>>0){break k}q[e+44>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;f=d+4|0;d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);g=q[e+24>>2];h=q[e+28>>2]-g|0;l:{if(d>>>0>h>>>0){Se(e+24|0,d-h|0);g=q[e+24>>2];break l}if(d>>>0>=h>>>0){break l}q[e+28>>2]=d+g}kV(g,b+f|0,d);d=d+f|0;l=d+4|0;d=b+d|0;h=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[e+8>>2];f=q[e+12>>2]-d|0;m:{if(h>>>0>f>>>0){Se(e+8|0,h-f|0);d=q[e+8>>2];break m}if(h>>>0>=f>>>0){break m}q[e+12>>2]=d+h}kV(d,b+l|0,h);eq(m,q[e+120>>2],q[e+124>>2]);eq(j+60|0,q[e+104>>2],q[e+108>>2]);eq(j+24|0,q[e+88>>2],q[e+92>>2]);eq(j+72|0,q[e+72>>2],q[e+76>>2]);eq(j+36|0,q[e+56>>2],q[e+60>>2]);eq(j+84|0,q[e+40>>2],q[e+44>>2]);eq(j+48|0,q[e+24>>2],q[e+28>>2]);eq(j+96|0,q[e+8>>2],q[e+12>>2]);n:{f=i;d=q[f>>2];if(!d){d=i;f=d;break n}while(1){g=q[d+16>>2];o:{if((k|0)<(g|0)){g=q[d>>2];if(g){break o}f=d;break n}if((g|0)>=(k|0)){break n}f=d+4|0;g=q[d+4>>2];if(!g){break n}d=f}f=d;d=g;continue}}g=q[f>>2];if(!g){g=_S(24);q[g+20>>2]=0;q[g+16>>2]=k;q[g+8>>2]=d;q[g>>2]=0;q[g+4>>2]=0;q[f>>2]=g;k=q[q[a>>2]>>2];d=g;p:{if(!k){break p}q[a>>2]=k;d=q[f>>2]}ih(q[a+4>>2],d);q[a+8>>2]=q[a+8>>2]+1}f=g+20|0;d=q[f>>2];q[f>>2]=j;if(d){n[q[q[d>>2]+8>>2]](d)|0}d=q[e+8>>2];if(d){q[e+12>>2]=d;_U(d)}d=q[e+24>>2];if(d){q[e+28>>2]=d;_U(d)}d=q[e+40>>2];if(d){q[e+44>>2]=d;_U(d)}d=q[e+56>>2];if(d){q[e+60>>2]=d;_U(d)}d=q[e+72>>2];if(d){q[e+76>>2]=d;_U(d)}d=q[e+88>>2];if(d){q[e+92>>2]=d;_U(d)}d=q[e+104>>2];if(d){q[e+108>>2]=d;_U(d)}d=h+l|0;f=q[e+120>>2];if(f){q[e+124>>2]=f;_U(f)}f=1;if((d|0)<0){break e}if((d|0)<(c|0)){continue}break}}ue=e+144|0;return f}function fo(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),n=0,o=x(0),p=x(0),r=0,s=0,t=0,v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0),R=x(0),S=x(0),T=x(0);f=ue-96|0;ue=f;l=b+264|0;j=l;i=q[j+4>>2];k=f+72|0;e=k;q[e>>2]=q[j>>2];q[e+4>>2]=i;n=b+256|0;i=n;g=q[i+4>>2];j=f- -64|0;e=j;q[e>>2]=q[i>>2];q[e+4>>2]=g;s=b+248|0;g=s;t=q[g+4>>2];i=f+56|0;e=i;q[e>>2]=q[g>>2];q[e+4>>2]=t;t=b+240|0;r=t;h=q[r+4>>2];g=f+48|0;e=g;q[e>>2]=q[r>>2];q[e+4>>2]=h;r=b+232|0;e=r;h=q[e+4>>2];q[f+40>>2]=q[e>>2];q[f+44>>2]=h;e=q[b+228>>2];q[f+32>>2]=q[b+224>>2];q[f+36>>2]=e;Xs(f+80|0,f+32|0);e=nt(f+16|0,q[d>>2]+72|0);v=u[e+8>>2];w=u[e>>2];y=u[e+4>>2];z=u[f+88>>2];A=u[f+80>>2];B=u[f+84>>2];e=nt(f,q[d>>2]+84|0);C=u[e+8>>2];D=u[e>>2];E=u[e+4>>2];e=a;h=q[e+268>>2];q[k>>2]=q[e+264>>2];q[k+4>>2]=h;h=q[e+260>>2];q[j>>2]=q[e+256>>2];q[j+4>>2]=h;h=q[e+252>>2];q[i>>2]=q[e+248>>2];q[i+4>>2]=h;h=q[e+244>>2];q[g>>2]=q[e+240>>2];q[g+4>>2]=h;h=q[e+236>>2];q[f+40>>2]=q[e+232>>2];q[f+44>>2]=h;h=q[e+228>>2];q[f+32>>2]=q[e+224>>2];q[f+36>>2]=h;Xs(f+80|0,f+32|0);e=nt(f+16|0,q[d>>2]+72|0);F=u[e+8>>2];G=u[e>>2];K=u[e+4>>2];L=u[f+88>>2];M=u[f+80>>2];N=u[f+84>>2];e=nt(f,q[d>>2]+84|0);O=u[e+8>>2];P=u[e>>2];Q=u[e+4>>2];e=c;h=q[e+268>>2];q[k>>2]=q[e+264>>2];q[k+4>>2]=h;h=q[e+260>>2];q[j>>2]=q[e+256>>2];q[j+4>>2]=h;h=q[e+252>>2];q[i>>2]=q[e+248>>2];q[i+4>>2]=h;h=q[e+244>>2];q[g>>2]=q[e+240>>2];q[g+4>>2]=h;h=q[e+236>>2];q[f+40>>2]=q[e+232>>2];q[f+44>>2]=h;h=q[e+228>>2];q[f+32>>2]=q[e+224>>2];q[f+36>>2]=h;Xs(f+80|0,f+32|0);e=nt(f+16|0,q[d>>2]+72|0);o=u[e+8>>2];m=u[e>>2];p=u[e+4>>2];H=u[f+88>>2];I=u[f+80>>2];J=u[f+84>>2];e=nt(f,q[d>>2]+84|0);R=u[e+8>>2];S=u[e>>2];T=u[e+4>>2];e=q[l+4>>2];q[k>>2]=q[l>>2];q[k+4>>2]=e;e=q[n+4>>2];q[j>>2]=q[n>>2];q[j+4>>2]=e;e=q[s+4>>2];q[i>>2]=q[s>>2];q[i+4>>2]=e;e=q[t+4>>2];q[g>>2]=q[t>>2];q[g+4>>2]=e;e=q[r+4>>2];q[f+40>>2]=q[r>>2];q[f+44>>2]=e;e=q[b+228>>2];q[f+32>>2]=q[b+224>>2];q[f+36>>2]=e;o=x(x(x(S*x(I-m))+x(T*x(J-p)))+x(R*x(H-o)));Xs(f+80|0,f+32|0);e=nt(f+16|0,q[d>>2]+72|0);m=u[e+8>>2];p=u[e+4>>2];H=u[f+84>>2];I=u[f+88>>2];J=x(u[f+80>>2]-u[e>>2]);e=nt(f,q[d>>2]+84|0);m=x(x(x(J*u[e>>2])+x(x(H-p)*u[e+4>>2]))+x(x(I-m)*u[e+8>>2]));e=b+224|0;a:{b:{if(!(x(x(x(D*x(A-w))+x(E*x(B-y)))+x(C*x(z-v)))>x(x(x(P*x(M-G))+x(Q*x(N-K)))+x(O*x(L-F))))){k=0;if(!(o>m)){break a}bo(b,c);j=q[e+44>>2];k=f+72|0;c=k;q[c>>2]=q[e+40>>2];q[c+4>>2]=j;i=q[e+36>>2];j=f- -64|0;c=j;q[c>>2]=q[e+32>>2];q[c+4>>2]=i;g=q[e+28>>2];i=f+56|0;c=i;q[c>>2]=q[e+24>>2];q[c+4>>2]=g;l=q[e+20>>2];g=f+48|0;c=g;q[c>>2]=q[e+16>>2];q[c+4>>2]=l;c=q[e+12>>2];q[f+40>>2]=q[e+8>>2];q[f+44>>2]=c;c=q[e+4>>2];q[f+32>>2]=q[e>>2];q[f+36>>2]=c;Xs(f+80|0,f+32|0);c=nt(f+16|0,q[d>>2]+72|0);o=u[c+8>>2];m=u[c>>2];v=u[c+4>>2];w=u[f+88>>2];y=u[f+80>>2];z=u[f+84>>2];c=nt(f,q[d>>2]+84|0);A=u[c+8>>2];B=u[c>>2];C=u[c+4>>2];c=a+224|0;e=q[c+44>>2];q[k>>2]=q[c+40>>2];q[k+4>>2]=e;e=q[c+36>>2];q[j>>2]=q[c+32>>2];q[j+4>>2]=e;e=q[c+28>>2];q[i>>2]=q[c+24>>2];q[i+4>>2]=e;e=q[c+20>>2];q[g>>2]=q[c+16>>2];q[g+4>>2]=e;e=q[c+12>>2];q[f+40>>2]=q[c+8>>2];q[f+44>>2]=e;e=q[c+4>>2];q[f+32>>2]=q[c>>2];q[f+36>>2]=e;Xs(f+80|0,f+32|0);c=nt(f+16|0,q[d>>2]+72|0);D=u[c+8>>2];E=u[c+4>>2];F=u[f+84>>2];G=u[f+88>>2];k=1;p=x(u[f+80>>2]-u[c>>2]);c=nt(f,q[d>>2]+84|0);if(!(x(x(x(B*x(y-m))+x(C*x(z-v)))+x(A*x(w-o)))>x(x(x(p*u[c>>2])+x(x(F-E)*u[c+4>>2]))+x(x(G-D)*u[c+8>>2])))){break a}bo(a,b);break b}k=1;if(!!(o>m)){bo(a,c);break a}bo(a,b);a=c+224|0;g=q[a+44>>2];j=f+72|0;i=j;q[i>>2]=q[a+40>>2];q[i+4>>2]=g;l=q[a+36>>2];i=f- -64|0;g=i;q[g>>2]=q[a+32>>2];q[g+4>>2]=l;n=q[a+28>>2];g=f+56|0;q[g>>2]=q[a+24>>2];q[g+4>>2]=n;s=q[a+20>>2];l=f+48|0;q[l>>2]=q[a+16>>2];q[l+4>>2]=s;n=q[a+12>>2];q[f+40>>2]=q[a+8>>2];q[f+44>>2]=n;n=q[a+4>>2];q[f+32>>2]=q[a>>2];q[f+36>>2]=n;Xs(f+80|0,f+32|0);a=nt(f+16|0,q[d>>2]+72|0);o=u[a+8>>2];m=u[a>>2];v=u[a+4>>2];w=u[f+88>>2];y=u[f+80>>2];z=u[f+84>>2];a=nt(f,q[d>>2]+84|0);A=u[a+8>>2];B=u[a>>2];C=u[a+4>>2];a=q[e+44>>2];q[j>>2]=q[e+40>>2];q[j+4>>2]=a;a=q[e+36>>2];q[i>>2]=q[e+32>>2];q[i+4>>2]=a;a=q[e+28>>2];q[g>>2]=q[e+24>>2];q[g+4>>2]=a;a=q[e+20>>2];q[l>>2]=q[e+16>>2];q[l+4>>2]=a;a=q[e+12>>2];q[f+40>>2]=q[e+8>>2];q[f+44>>2]=a;a=q[e+4>>2];q[f+32>>2]=q[e>>2];q[f+36>>2]=a;Xs(f+80|0,f+32|0);a=nt(f+16|0,q[d>>2]+72|0);D=u[a+8>>2];E=u[a+4>>2];F=u[f+84>>2];G=u[f+88>>2];p=x(u[f+80>>2]-u[a>>2]);a=nt(f,q[d>>2]+84|0);if(!(x(x(x(B*x(y-m))+x(C*x(z-v)))+x(A*x(w-o)))>x(x(x(p*u[a>>2])+x(x(F-E)*u[a+4>>2]))+x(x(G-D)*u[a+8>>2])))){break a}bo(b,c)}k=2}ue=f+96|0;return k}function bo(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;c=ue-256|0;ue=c;k=q[a>>2];q[a>>2]=0;d=r[a+21|0]|r[a+22|0]<<8|(r[a+23|0]<<16|r[a+24|0]<<24);f=r[a+17|0]|r[a+18|0]<<8|(r[a+19|0]<<16|r[a+20|0]<<24);o[c+245|0]=f;o[c+246|0]=f>>>8;o[c+247|0]=f>>>16;o[c+248|0]=f>>>24;o[c+249|0]=d;o[c+250|0]=d>>>8;o[c+251|0]=d>>>16;o[c+252|0]=d>>>24;f=q[a+16>>2];q[c+240>>2]=q[a+12>>2];q[c+244>>2]=f;f=q[a+8>>2];q[c+232>>2]=q[a+4>>2];q[c+236>>2]=f;l=q[a+36>>2];m=q[a+32>>2];p=q[a+28>>2];j=q[a+40>>2];h=j;if(q[h+4>>2]){q[a+36>>2]=191;q[a+40>>2]=4896;h=4896}f=a+4|0;g=a+44|0;kV(c+4|0,g,228);d=q[b>>2];q[b>>2]=0;e=q[a>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a>>2]=0;h=q[a+40>>2]}q[a>>2]=d;e=r[b+21|0]|r[b+22|0]<<8|(r[b+23|0]<<16|r[b+24|0]<<24);d=r[b+17|0]|r[b+18|0]<<8|(r[b+19|0]<<16|r[b+20|0]<<24);o[f+13|0]=d;o[f+14|0]=d>>>8;o[f+15|0]=d>>>16;o[f+16|0]=d>>>24;o[f+17|0]=e;o[f+18|0]=e>>>8;o[f+19|0]=e>>>16;o[f+20|0]=e>>>24;d=q[b+16>>2];q[f+8>>2]=q[b+12>>2];q[f+12>>2]=d;d=q[b+8>>2];q[f>>2]=q[b+4>>2];q[f+4>>2]=d;q[a+36>>2]=191;q[a+40>>2]=4896;f=q[h+4>>2];if(f){n[f](q[a+28>>2])}f=b+4|0;d=b;e=q[d+32>>2];q[a+28>>2]=q[d+28>>2];q[a+32>>2]=e;h=d+36|0;q[a+36>>2]=q[h>>2];e=d+40|0;q[a+40>>2]=q[e>>2];q[h>>2]=191;q[e>>2]=4896;q[g+56>>2]=q[d+100>>2];e=q[d+96>>2];q[g+48>>2]=q[d+92>>2];q[g+52>>2]=e;e=q[d+88>>2];q[g+40>>2]=q[d+84>>2];q[g+44>>2]=e;e=q[d+80>>2];q[g+32>>2]=q[d+76>>2];q[g+36>>2]=e;e=q[d+72>>2];q[g+24>>2]=q[d+68>>2];q[g+28>>2]=e;e=q[d+64>>2];q[g+16>>2]=q[d+60>>2];q[g+20>>2]=e;e=q[d+56>>2];q[g+8>>2]=q[d+52>>2];q[g+12>>2]=e;e=q[d+48>>2];q[g>>2]=q[d+44>>2];q[g+4>>2]=e;e=q[d+156>>2];q[a+152>>2]=q[d+152>>2];q[a+156>>2]=e;e=q[d+148>>2];q[a+144>>2]=q[d+144>>2];q[a+148>>2]=e;e=q[d+140>>2];q[a+136>>2]=q[d+136>>2];q[a+140>>2]=e;e=q[d+132>>2];q[a+128>>2]=q[d+128>>2];q[a+132>>2]=e;e=q[d+124>>2];q[a+120>>2]=q[d+120>>2];q[a+124>>2]=e;e=q[d+116>>2];q[a+112>>2]=q[d+112>>2];q[a+116>>2]=e;e=q[d+212>>2];q[a+208>>2]=q[d+208>>2];q[a+212>>2]=e;e=q[d+204>>2];q[a+200>>2]=q[d+200>>2];q[a+204>>2]=e;e=q[d+196>>2];q[a+192>>2]=q[d+192>>2];q[a+196>>2]=e;e=q[d+188>>2];q[a+184>>2]=q[d+184>>2];q[a+188>>2]=e;e=q[d+180>>2];q[a+176>>2]=q[d+176>>2];q[a+180>>2]=e;e=q[d+172>>2];q[a+168>>2]=q[d+168>>2];q[a+172>>2]=e;e=q[d+164>>2];q[a+160>>2]=q[d+160>>2];q[a+164>>2]=e;e=q[d+260>>2];q[a+256>>2]=q[d+256>>2];q[a+260>>2]=e;e=q[d+228>>2];q[a+224>>2]=q[d+224>>2];q[a+228>>2]=e;e=q[d+268>>2];q[a+264>>2]=q[d+264>>2];q[a+268>>2]=e;e=q[d+252>>2];q[a+248>>2]=q[d+248>>2];q[a+252>>2]=e;e=q[d+244>>2];q[a+240>>2]=q[d+240>>2];q[a+244>>2]=e;e=q[d+236>>2];q[a+232>>2]=q[d+232>>2];q[a+236>>2]=e;a=q[d>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}h=b+224|0;g=b+160|0;e=b+112|0;i=b+44|0;q[b>>2]=k;d=r[c+249|0]|r[c+250|0]<<8|(r[c+251|0]<<16|r[c+252|0]<<24);a=r[c+245|0]|r[c+246|0]<<8|(r[c+247|0]<<16|r[c+248|0]<<24);o[f+13|0]=a;o[f+14|0]=a>>>8;o[f+15|0]=a>>>16;o[f+16|0]=a>>>24;o[f+17|0]=d;o[f+18|0]=d>>>8;o[f+19|0]=d>>>16;o[f+20|0]=d>>>24;a=q[c+244>>2];q[f+8>>2]=q[c+240>>2];q[f+12>>2]=a;a=q[c+236>>2];q[f>>2]=q[c+232>>2];q[f+4>>2]=a;q[b+36>>2]=191;a=q[b+40>>2];q[b+40>>2]=4896;a=q[a+4>>2];if(a){n[a](q[b+28>>2])}q[b+40>>2]=j;q[b+36>>2]=l;q[b+28>>2]=p;q[b+32>>2]=m;q[i+56>>2]=q[c+60>>2];a=q[c+56>>2];q[i+48>>2]=q[c+52>>2];q[i+52>>2]=a;a=q[c+48>>2];q[i+40>>2]=q[c+44>>2];q[i+44>>2]=a;a=q[c+40>>2];q[i+32>>2]=q[c+36>>2];q[i+36>>2]=a;a=q[c+32>>2];q[i+24>>2]=q[c+28>>2];q[i+28>>2]=a;a=q[c+24>>2];q[i+16>>2]=q[c+20>>2];q[i+20>>2]=a;a=q[c+16>>2];q[i+8>>2]=q[c+12>>2];q[i+12>>2]=a;a=q[c+8>>2];q[i>>2]=q[c+4>>2];q[i+4>>2]=a;a=q[c+116>>2];q[e+40>>2]=q[c+112>>2];q[e+44>>2]=a;a=q[c+108>>2];q[e+32>>2]=q[c+104>>2];q[e+36>>2]=a;a=q[c+100>>2];q[e+24>>2]=q[c+96>>2];q[e+28>>2]=a;a=q[c+92>>2];q[e+16>>2]=q[c+88>>2];q[e+20>>2]=a;a=q[c+84>>2];q[e+8>>2]=q[c+80>>2];q[e+12>>2]=a;a=q[c+76>>2];q[e>>2]=q[c+72>>2];q[e+4>>2]=a;a=q[c+172>>2];q[g+48>>2]=q[c+168>>2];q[g+52>>2]=a;a=q[c+164>>2];q[g+40>>2]=q[c+160>>2];q[g+44>>2]=a;a=q[c+156>>2];q[g+32>>2]=q[c+152>>2];q[g+36>>2]=a;a=q[c+148>>2];q[g+24>>2]=q[c+144>>2];q[g+28>>2]=a;a=q[c+140>>2];q[g+16>>2]=q[c+136>>2];q[g+20>>2]=a;a=q[c+132>>2];q[g+8>>2]=q[c+128>>2];q[g+12>>2]=a;a=q[c+124>>2];q[g>>2]=q[c+120>>2];q[g+4>>2]=a;a=q[c+228>>2];q[h+40>>2]=q[c+224>>2];q[h+44>>2]=a;a=q[c+220>>2];q[h+32>>2]=q[c+216>>2];q[h+36>>2]=a;a=q[c+212>>2];q[h+24>>2]=q[c+208>>2];q[h+28>>2]=a;a=q[c+204>>2];q[h+16>>2]=q[c+200>>2];q[h+20>>2]=a;a=q[c+196>>2];q[h+8>>2]=q[c+192>>2];q[h+12>>2]=a;a=q[c+188>>2];q[h>>2]=q[c+184>>2];q[h+4>>2]=a;ue=c+256|0}function aK(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=ue-432|0;ue=g;h=q[b+4>>2];a:{if(h>>>0>2]){q[b+4>>2]=h+1;i=r[h|0];break a}i=HJ(b)}b:{c:{while(1){d:{if((i|0)!=48){if((i|0)!=46){break b}h=q[b+4>>2];if(h>>>0>=t[b+104>>2]){break d}q[b+4>>2]=h+1;i=r[h|0];break c}h=q[b+4>>2];if(h>>>0>2]){z=1;q[b+4>>2]=h+1;i=r[h|0]}else{z=1;i=HJ(b)}continue}break}i=HJ(b)}y=1;if((i|0)!=48){break b}while(1){j=j+ -1|0;h=v+ -1|0;if(h>>>0<4294967295){j=j+1|0}v=h;h=q[b+4>>2];e:{if(h>>>0>2]){q[b+4>>2]=h+1;i=r[h|0];break e}i=HJ(b)}if((i|0)==48){continue}break}z=1}h=1073676288;while(1){f:{A=i|32;g:{h:{B=i+ -48|0;if(B>>>0<10){break h}if(A+ -97>>>0>5?(i|0)!=46:0){break f}if((i|0)!=46){break h}if(y){break f}y=1;v=o;j=k;break g}i=(i|0)>57?A+ -87|0:B;i:{if((k|0)<0?1:(k|0)<=0?o>>>0>7?0:1:0){p=i+(p<<4)|0;break i}if((k|0)<0?1:(k|0)<=0?o>>>0>28?0:1:0){OJ(g+48|0,i);QJ(g+32|0,w,x,l,h,0,0,0,1073414144);w=q[g+32>>2];x=q[g+36>>2];l=q[g+40>>2];h=q[g+44>>2];QJ(g+16|0,w,x,l,h,q[g+48>>2],q[g+52>>2],q[g+56>>2],q[g+60>>2]);RJ(g,m,n,s,u,q[g+16>>2],q[g+20>>2],q[g+24>>2],q[g+28>>2]);s=q[g+8>>2];u=q[g+12>>2];m=q[g>>2];n=q[g+4>>2];break i}if(!i|E){break i}QJ(g+80|0,w,x,l,h,0,0,0,1073610752);RJ(g- -64|0,m,n,s,u,q[g+80>>2],q[g+84>>2],q[g+88>>2],q[g+92>>2]);s=q[g+72>>2];u=q[g+76>>2];E=1;m=q[g+64>>2];n=q[g+68>>2]}o=o+1|0;if(o>>>0<1){k=k+1|0}z=1}i=q[b+4>>2];if(i>>>0>2]){q[b+4>>2]=i+1;i=r[i|0]}else{i=HJ(b)}continue}break}j:{k:{l:{if(!z){if(!q[b+104>>2]){if(f){break k}break l}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(!f){break l}q[b+4>>2]=c+ -2;if(!y){break k}q[b+4>>2]=c+ -3;break k}if((k|0)<0?1:(k|0)<=0?o>>>0>7?0:1:0){l=o;h=k;while(1){p=p<<4;l=l+1|0;if(l>>>0<1){h=h+1|0}if((l|0)!=8|h){continue}break}}m:{if((i&-33)==80){l=cK(b,f);i=we;h=i;if(l|(h|0)!=-2147483648){break m}if(f){l=0;h=0;if(!q[b+104>>2]){break m}q[b+4>>2]=q[b+4>>2]+ -1;break m}m=0;n=0;GJ(b,0,0);c=0;b=0;break j}l=0;h=0;if(!q[b+104>>2]){break m}q[b+4>>2]=q[b+4>>2]+ -1}if(!p){SJ(g+112|0,+(e|0)*0);m=q[g+112>>2];n=q[g+116>>2];c=q[g+120>>2];b=q[g+124>>2];break j}f=y?v:o;j=(y?j:k)<<2|f>>>30;b=l+(f<<2)|0;f=h+j|0;f=b>>>0>>0?f+1|0:f;b=b+ -32|0;h=f+ -1|0;h=b>>>0<4294967264?h+1|0:h;o=b;b=0-d|0;f=o>>>0<=b>>>0?0:1;k=h;b=b>>31;if((h|0)>(b|0)?1:(h|0)>=(b|0)?f:0){q[91802]=68;OJ(g+160|0,e);QJ(g+144|0,q[g+160>>2],q[g+164>>2],q[g+168>>2],q[g+172>>2],-1,-1,-1,2147418111);QJ(g+128|0,q[g+144>>2],q[g+148>>2],q[g+152>>2],q[g+156>>2],-1,-1,-1,2147418111);m=q[g+128>>2];n=q[g+132>>2];c=q[g+136>>2];b=q[g+140>>2];break j}b=d+ -226|0;f=o>>>0>>0?0:1;b=b>>31;if((k|0)>(b|0)?1:(k|0)>=(b|0)?f:0){if((p|0)>-1){while(1){RJ(g+416|0,m,n,s,u,0,0,0,-1073807360);h=UJ(m,n,s,u);f=(h|0)<0;b=f;RJ(g+400|0,m,n,s,u,b?m:q[g+416>>2],b?n:q[g+420>>2],b?s:q[g+424>>2],b?u:q[g+428>>2]);k=k+ -1|0;b=o+ -1|0;if(b>>>0<4294967295){k=k+1|0}o=b;s=q[g+408>>2];u=q[g+412>>2];m=q[g+400>>2];n=q[g+404>>2];p=p<<1|(h|0)>-1;if((p|0)>-1){continue}break}}b=d;l=(o-b|0)+32|0;j=k-((b>>31)+(o>>>0>>0)|0)|0;b=l;d=(b|0)>0?b:0;h=c;j=b>>>0<32?j+1|0:j;b=h>>31;c=((j|0)<(b|0)?1:(j|0)<=(b|0)?l>>>0>=h>>>0?0:1:0)?d:h;n:{if((c|0)>=113){OJ(g+384|0,e);v=q[g+392>>2];j=q[g+396>>2];w=q[g+384>>2];x=q[g+388>>2];d=0;b=0;break n}SJ(g+352|0,iV(1,144-c|0));OJ(g+336|0,e);w=q[g+336>>2];x=q[g+340>>2];v=q[g+344>>2];j=q[g+348>>2];VJ(g+368|0,q[g+352>>2],q[g+356>>2],q[g+360>>2],q[g+364>>2],w,x,v,j);C=q[g+376>>2];D=q[g+380>>2];d=q[g+372>>2];b=q[g+368>>2]}c=!(p&1)&((TJ(m,n,s,u,0,0,0,0)|0)!=0&(c|0)<32);WJ(g+320|0,c+p|0);QJ(g+304|0,w,x,v,j,q[g+320>>2],q[g+324>>2],q[g+328>>2],q[g+332>>2]);RJ(g+272|0,q[g+304>>2],q[g+308>>2],q[g+312>>2],q[g+316>>2],b,d,C,D);QJ(g+288|0,c?0:m,c?0:n,c?0:s,c?0:u,w,x,v,j);RJ(g+256|0,q[g+288>>2],q[g+292>>2],q[g+296>>2],q[g+300>>2],q[g+272>>2],q[g+276>>2],q[g+280>>2],q[g+284>>2]);XJ(g+240|0,q[g+256>>2],q[g+260>>2],q[g+264>>2],q[g+268>>2],b,d,C,D);e=q[g+240>>2];d=q[g+244>>2];c=q[g+248>>2];b=q[g+252>>2];if(!TJ(e,d,c,b,0,0,0,0)){q[91802]=68}YJ(g+224|0,e,d,c,b,o);m=q[g+224>>2];n=q[g+228>>2];c=q[g+232>>2];b=q[g+236>>2];break j}q[91802]=68;OJ(g+208|0,e);QJ(g+192|0,q[g+208>>2],q[g+212>>2],q[g+216>>2],q[g+220>>2],0,0,0,65536);QJ(g+176|0,q[g+192>>2],q[g+196>>2],q[g+200>>2],q[g+204>>2],0,0,0,65536);m=q[g+176>>2];n=q[g+180>>2];c=q[g+184>>2];b=q[g+188>>2];break j}GJ(b,0,0)}SJ(g+96|0,+(e|0)*0);m=q[g+96>>2];n=q[g+100>>2];c=q[g+104>>2];b=q[g+108>>2]}q[a>>2]=m;q[a+4>>2]=n;q[a+8>>2]=c;q[a+12>>2]=b;ue=g+432|0}function eo(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=0;g=ue-96|0;ue=g;n=co(a,b,c,d,f);h=e;i=q[h+268>>2];l=g+72|0;j=l;q[j>>2]=q[h+264>>2];q[j+4>>2]=i;m=q[h+260>>2];j=g- -64|0;i=j;q[i>>2]=q[h+256>>2];q[i+4>>2]=m;k=q[h+252>>2];i=g+56|0;q[i>>2]=q[h+248>>2];q[i+4>>2]=k;F=q[h+244>>2];m=g+48|0;k=m;q[k>>2]=q[h+240>>2];q[k+4>>2]=F;k=q[h+236>>2];q[g+40>>2]=q[h+232>>2];q[g+44>>2]=k;k=q[h+228>>2];q[g+32>>2]=q[h+224>>2];q[g+36>>2]=k;Xs(g+80|0,g+32|0);h=nt(g+16|0,q[f>>2]+72|0);o=u[h+8>>2];p=u[h>>2];r=u[h+4>>2];s=u[g+88>>2];t=u[g+80>>2];v=u[g+84>>2];h=nt(g,q[f>>2]+84|0);w=u[h+8>>2];y=u[h>>2];z=u[h+4>>2];h=d;k=q[h+268>>2];q[l>>2]=q[h+264>>2];q[l+4>>2]=k;k=q[h+260>>2];q[j>>2]=q[h+256>>2];q[j+4>>2]=k;k=q[h+252>>2];q[i>>2]=q[h+248>>2];q[i+4>>2]=k;k=q[h+244>>2];q[m>>2]=q[h+240>>2];q[m+4>>2]=k;k=q[h+236>>2];q[g+40>>2]=q[h+232>>2];q[g+44>>2]=k;k=q[h+228>>2];q[g+32>>2]=q[h+224>>2];q[g+36>>2]=k;Xs(g+80|0,g+32|0);h=nt(g+16|0,q[f>>2]+72|0);A=u[h+8>>2];B=u[h+4>>2];C=u[g+84>>2];D=u[g+88>>2];E=x(u[g+80>>2]-u[h>>2]);h=nt(g,q[f>>2]+84|0);a:{if(!(x(x(x(y*x(t-p))+x(z*x(v-r)))+x(w*x(s-o)))>x(x(x(E*u[h>>2])+x(x(C-B)*u[h+4>>2]))+x(x(D-A)*u[h+8>>2])))){break a}bo(d,e);e=d+224|0;h=q[e+44>>2];q[l>>2]=q[e+40>>2];q[l+4>>2]=h;h=q[e+36>>2];q[j>>2]=q[e+32>>2];q[j+4>>2]=h;h=q[e+28>>2];q[i>>2]=q[e+24>>2];q[i+4>>2]=h;h=q[e+20>>2];q[m>>2]=q[e+16>>2];q[m+4>>2]=h;h=q[e+12>>2];q[g+40>>2]=q[e+8>>2];q[g+44>>2]=h;h=q[e+4>>2];q[g+32>>2]=q[e>>2];q[g+36>>2]=h;Xs(g+80|0,g+32|0);e=nt(g+16|0,q[f>>2]+72|0);o=u[e+8>>2];p=u[e>>2];r=u[e+4>>2];s=u[g+88>>2];t=u[g+80>>2];v=u[g+84>>2];e=nt(g,q[f>>2]+84|0);w=u[e+8>>2];y=u[e>>2];z=u[e+4>>2];e=c;h=q[e+268>>2];q[l>>2]=q[e+264>>2];q[l+4>>2]=h;h=q[e+260>>2];q[j>>2]=q[e+256>>2];q[j+4>>2]=h;h=q[e+252>>2];q[i>>2]=q[e+248>>2];q[i+4>>2]=h;h=q[e+244>>2];q[m>>2]=q[e+240>>2];q[m+4>>2]=h;h=q[e+236>>2];q[g+40>>2]=q[e+232>>2];q[g+44>>2]=h;h=q[e+228>>2];q[g+32>>2]=q[e+224>>2];q[g+36>>2]=h;Xs(g+80|0,g+32|0);e=nt(g+16|0,q[f>>2]+72|0);A=u[e+8>>2];B=u[e+4>>2];C=u[g+84>>2];D=u[g+88>>2];E=x(u[g+80>>2]-u[e>>2]);e=nt(g,q[f>>2]+84|0);if(!(x(x(x(y*x(t-p))+x(z*x(v-r)))+x(w*x(s-o)))>x(x(x(E*u[e>>2])+x(x(C-B)*u[e+4>>2]))+x(x(D-A)*u[e+8>>2])))){n=n+1|0;break a}bo(c,d);d=c+224|0;l=q[d+44>>2];e=g+72|0;h=e;q[h>>2]=q[d+40>>2];q[h+4>>2]=l;j=q[d+36>>2];h=g- -64|0;q[h>>2]=q[d+32>>2];q[h+4>>2]=j;i=q[d+28>>2];l=g+56|0;j=l;q[j>>2]=q[d+24>>2];q[j+4>>2]=i;m=q[d+20>>2];j=g+48|0;i=j;q[i>>2]=q[d+16>>2];q[i+4>>2]=m;i=q[d+12>>2];q[g+40>>2]=q[d+8>>2];q[g+44>>2]=i;i=q[d+4>>2];q[g+32>>2]=q[d>>2];q[g+36>>2]=i;Xs(g+80|0,g+32|0);d=nt(g+16|0,q[f>>2]+72|0);o=u[d+8>>2];p=u[d>>2];r=u[d+4>>2];s=u[g+88>>2];t=u[g+80>>2];v=u[g+84>>2];d=nt(g,q[f>>2]+84|0);w=u[d+8>>2];y=u[d>>2];z=u[d+4>>2];d=b;i=q[d+268>>2];q[e>>2]=q[d+264>>2];q[e+4>>2]=i;i=q[d+260>>2];q[h>>2]=q[d+256>>2];q[h+4>>2]=i;i=q[d+252>>2];q[l>>2]=q[d+248>>2];q[l+4>>2]=i;i=q[d+244>>2];q[j>>2]=q[d+240>>2];q[j+4>>2]=i;i=q[d+236>>2];q[g+40>>2]=q[d+232>>2];q[g+44>>2]=i;i=q[d+228>>2];q[g+32>>2]=q[d+224>>2];q[g+36>>2]=i;Xs(g+80|0,g+32|0);d=nt(g+16|0,q[f>>2]+72|0);A=u[d+8>>2];B=u[d+4>>2];C=u[g+84>>2];D=u[g+88>>2];E=x(u[g+80>>2]-u[d>>2]);d=nt(g,q[f>>2]+84|0);if(!(x(x(x(y*x(t-p))+x(z*x(v-r)))+x(w*x(s-o)))>x(x(x(E*u[d>>2])+x(x(C-B)*u[d+4>>2]))+x(x(D-A)*u[d+8>>2])))){n=n+2|0;break a}bo(b,c);c=b+224|0;d=q[c+44>>2];q[e>>2]=q[c+40>>2];q[e+4>>2]=d;d=q[c+36>>2];q[h>>2]=q[c+32>>2];q[h+4>>2]=d;d=q[c+28>>2];q[l>>2]=q[c+24>>2];q[l+4>>2]=d;d=q[c+20>>2];q[j>>2]=q[c+16>>2];q[j+4>>2]=d;d=q[c+12>>2];q[g+40>>2]=q[c+8>>2];q[g+44>>2]=d;d=q[c+4>>2];q[g+32>>2]=q[c>>2];q[g+36>>2]=d;Xs(g+80|0,g+32|0);c=nt(g+16|0,q[f>>2]+72|0);o=u[c+8>>2];p=u[c>>2];r=u[c+4>>2];s=u[g+88>>2];t=u[g+80>>2];v=u[g+84>>2];c=nt(g,q[f>>2]+84|0);w=u[c+8>>2];y=u[c>>2];z=u[c+4>>2];c=a;d=q[c+268>>2];q[e>>2]=q[c+264>>2];q[e+4>>2]=d;d=q[c+260>>2];q[h>>2]=q[c+256>>2];q[h+4>>2]=d;d=q[c+252>>2];q[l>>2]=q[c+248>>2];q[l+4>>2]=d;d=q[c+244>>2];q[j>>2]=q[c+240>>2];q[j+4>>2]=d;d=q[c+236>>2];q[g+40>>2]=q[c+232>>2];q[g+44>>2]=d;d=q[c+228>>2];q[g+32>>2]=q[c+224>>2];q[g+36>>2]=d;Xs(g+80|0,g+32|0);c=nt(g+16|0,q[f>>2]+72|0);A=u[c+8>>2];B=u[c+4>>2];C=u[g+84>>2];D=u[g+88>>2];E=x(u[g+80>>2]-u[c>>2]);c=nt(g,q[f>>2]+84|0);if(!(x(x(x(y*x(t-p))+x(z*x(v-r)))+x(w*x(s-o)))>x(x(x(E*u[c>>2])+x(x(C-B)*u[c+4>>2]))+x(x(D-A)*u[c+8>>2])))){n=n+3|0;break a}bo(a,b);n=n+4|0}ue=g+96|0;return n}function Vv(a){var b=0,c=0,d=0,e=0;d=ue-32|0;ue=d;if(!r[367092]){q[91772]=2;e=M(7939)|0;a:{if(!a){break a}a=N(27740)|0;q[91774]=a;b:{if(a){break b}a=_S(32);q[d>>2]=a;q[d+4>>2]=20;q[d+8>>2]=-2147483616;o[a+20|0]=0;b=r[27756]|r[27757]<<8|(r[27758]<<16|r[27759]<<24);o[a+16|0]=b;o[a+17|0]=b>>>8;o[a+18|0]=b>>>16;o[a+19|0]=b>>>24;b=r[27752]|r[27753]<<8|(r[27754]<<16|r[27755]<<24);c=r[27748]|r[27749]<<8|(r[27750]<<16|r[27751]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[27744]|r[27745]<<8|(r[27746]<<16|r[27747]<<24);c=r[27740]|r[27741]<<8|(r[27742]<<16|r[27743]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;a=DT(d,27761);b=a+8|0;q[d+24>>2]=q[b>>2];c=q[a+4>>2];q[d+16>>2]=q[a>>2];q[d+20>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(1,d+16|0);if(o[d+27|0]<=-1){_U(q[d+16>>2])}if(o[d+11|0]>-1){break b}_U(q[d>>2])}a=N(27783)|0;q[91775]=a;c:{if(a){break c}a=_S(32);q[d>>2]=a;q[d+4>>2]=23;q[d+8>>2]=-2147483616;o[a+23|0]=0;b=r[27802]|r[27803]<<8|(r[27804]<<16|r[27805]<<24);c=r[27798]|r[27799]<<8|(r[27800]<<16|r[27801]<<24);o[a+15|0]=c;o[a+16|0]=c>>>8;o[a+17|0]=c>>>16;o[a+18|0]=c>>>24;o[a+19|0]=b;o[a+20|0]=b>>>8;o[a+21|0]=b>>>16;o[a+22|0]=b>>>24;b=r[27795]|r[27796]<<8|(r[27797]<<16|r[27798]<<24);c=r[27791]|r[27792]<<8|(r[27793]<<16|r[27794]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[27787]|r[27788]<<8|(r[27789]<<16|r[27790]<<24);c=r[27783]|r[27784]<<8|(r[27785]<<16|r[27786]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;a=DT(d,27761);b=a+8|0;q[d+24>>2]=q[b>>2];c=q[a+4>>2];q[d+16>>2]=q[a>>2];q[d+20>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(1,d+16|0);if(o[d+27|0]<=-1){_U(q[d+16>>2])}if(o[d+11|0]>-1){break c}_U(q[d>>2])}a=N(27807)|0;q[91776]=a;d:{if(a){break d}a=_S(32);q[d>>2]=a;q[d+4>>2]=20;q[d+8>>2]=-2147483616;o[a+20|0]=0;b=r[27823]|r[27824]<<8|(r[27825]<<16|r[27826]<<24);o[a+16|0]=b;o[a+17|0]=b>>>8;o[a+18|0]=b>>>16;o[a+19|0]=b>>>24;b=r[27819]|r[27820]<<8|(r[27821]<<16|r[27822]<<24);c=r[27815]|r[27816]<<8|(r[27817]<<16|r[27818]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[27811]|r[27812]<<8|(r[27813]<<16|r[27814]<<24);c=r[27807]|r[27808]<<8|(r[27809]<<16|r[27810]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;a=DT(d,27761);b=a+8|0;q[d+24>>2]=q[b>>2];c=q[a+4>>2];q[d+16>>2]=q[a>>2];q[d+20>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(1,d+16|0);if(o[d+27|0]<=-1){_U(q[d+16>>2])}if(o[d+11|0]>-1){break d}_U(q[d>>2])}a=N(27828)|0;q[91777]=a;if(a){break a}a=_S(32);q[d>>2]=a;q[d+4>>2]=28;q[d+8>>2]=-2147483616;o[a+28|0]=0;b=r[27852]|r[27853]<<8|(r[27854]<<16|r[27855]<<24);o[a+24|0]=b;o[a+25|0]=b>>>8;o[a+26|0]=b>>>16;o[a+27|0]=b>>>24;b=r[27848]|r[27849]<<8|(r[27850]<<16|r[27851]<<24);c=r[27844]|r[27845]<<8|(r[27846]<<16|r[27847]<<24);o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;o[a+20|0]=b;o[a+21|0]=b>>>8;o[a+22|0]=b>>>16;o[a+23|0]=b>>>24;b=r[27840]|r[27841]<<8|(r[27842]<<16|r[27843]<<24);c=r[27836]|r[27837]<<8|(r[27838]<<16|r[27839]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[27832]|r[27833]<<8|(r[27834]<<16|r[27835]<<24);c=r[27828]|r[27829]<<8|(r[27830]<<16|r[27831]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;a=DT(d,27761);b=a+8|0;q[d+24>>2]=q[b>>2];c=q[a+4>>2];q[d+16>>2]=q[a>>2];q[d+20>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(1,d+16|0);if(o[d+27|0]<=-1){_U(q[d+16>>2])}if(o[d+11|0]>-1){break a}_U(q[d>>2])}a=0;e:{if(!e){break e}a=0;if(!q[91774]){break e}a=0;if(!q[91775]){break e}a=0;if(!q[91776]){break e}a=(nG(e,27857)|0)!=0}o[367092]=1;o[367112]=a}ue=d+32|0;return 1}function Ss(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,p=x(0),r=x(0),s=0,t=x(0);l=ue-512|0;ue=l;m=q[c>>2];a:{b:{if(m>>>0>6){h=x(0);g=x(0);break b}c:{d:{switch(m-1|0){default:if(q[c+4>>2]>=0){Gs(l+320|0,e,f,i,d,c+4|0,nt(l+256|0,c+8|0),j+24|0,j+36|0);d=q[l+332>>2];q[b+8>>2]=q[l+328>>2];q[b+12>>2]=d;d=q[l+324>>2];q[b>>2]=q[l+320>>2];q[b+4>>2]=d}p=u[b+8>>2];g=u[b+4>>2];h=u[b>>2];break c;case 1:zs(l+320|0,c+116|0,b,x(B(x(A(x(g/h),x(1))),x(0))));p=u[l+328>>2];g=u[l+324>>2];h=u[l+320>>2];break c;case 2:u[b>>2]=x(u[b+32>>2]+x(u[b+36>>2]*g))+x(x(x(g*g)*x(.5))*u[b+40>>2]);break c;case 3:s=b,t=us(c+352|0,b+32|0,x(B(x(A(x(g/h),x(1))),x(0)))),u[s>>2]=t;break c;case 4:sj(l+320|0,q[c+276>>2],g,h);p=x(u[l+328>>2]+u[b+8>>2]);g=x(u[l+324>>2]+u[b+4>>2]);h=x(u[l+320>>2]+u[b>>2]);break c;case 5:b=xj(Fj(i));c=q[b+44>>2];q[l+504>>2]=q[b+40>>2];q[l+508>>2]=c;c=q[b+36>>2];q[l+496>>2]=q[b+32>>2];q[l+500>>2]=c;c=q[b+28>>2];q[l+488>>2]=q[b+24>>2];q[l+492>>2]=c;c=q[b+20>>2];q[l+480>>2]=q[b+16>>2];q[l+484>>2]=c;c=q[b+4>>2];q[l+464>>2]=q[b>>2];q[l+468>>2]=c;c=q[b+12>>2];q[l+472>>2]=q[b+8>>2];q[l+476>>2]=c;Ys(l+464|0,l+448|0,l+400|0,l+384|0);b=q[l+428>>2];q[l+344>>2]=q[l+424>>2];q[l+348>>2]=b;b=q[l+444>>2];q[l+360>>2]=q[l+440>>2];q[l+364>>2]=b;q[l+376>>2]=0;q[l+380>>2]=1065353216;b=q[l+412>>2];q[l+328>>2]=q[l+408>>2];q[l+332>>2]=b;b=q[l+404>>2];q[l+320>>2]=q[l+400>>2];q[l+324>>2]=b;b=q[l+420>>2];q[l+336>>2]=q[l+416>>2];q[l+340>>2]=b;b=q[l+436>>2];q[l+352>>2]=q[l+432>>2];q[l+356>>2]=b;q[l+368>>2]=0;q[l+372>>2]=0;it(l+256|0,l+320|0);b=oo(l+192|0);e:{if(q[q[n[q[q[e>>2]+28>>2]](e)>>2]+8>>2]==1){c=yp(l+128|0);q[l+136>>2]=q[l+392>>2];d=q[l+388>>2];q[l+128>>2]=q[l+384>>2];q[l+132>>2]=d;po(b,k,c,zp(l- -64|0,x(0),x(1),x(0)));break e}c=yp(l+128|0);q[l+136>>2]=q[l+392>>2];d=q[l+388>>2];q[l+128>>2]=q[l+384>>2];q[l+132>>2]=d;qo(b,c,k,zp(l- -64|0,x(0),x(1),x(0)))}o[b+48|0]=0;o[b+49|0]=0;o[b+50|0]=0;o[b+51|0]=0;o[b+52|0]=0;o[b+53|0]=0;o[b+54|0]=0;o[b+55|0]=0;o[b+56|0]=0;o[b+57|0]=0;o[b+58|0]=0;o[b+59|0]=0;it(l- -64|0,ht(l,b));qn(l+128|0,l+256|0,l- -64|0);b=q[l+132>>2];q[a>>2]=q[l+128>>2];q[a+4>>2]=b;b=q[l+140>>2];q[a+8>>2]=q[l+136>>2];q[a+12>>2]=b;b=q[l+148>>2];q[a+16>>2]=q[l+144>>2];q[a+20>>2]=b;b=q[l+156>>2];q[a+24>>2]=q[l+152>>2];q[a+28>>2]=b;b=q[l+164>>2];q[a+32>>2]=q[l+160>>2];q[a+36>>2]=b;b=q[l+172>>2];q[a+40>>2]=q[l+168>>2];q[a+44>>2]=b;break a;case 0:break d}}r=x(x(g*g)*x(.5));h=x(x(x(u[b+16>>2]*g)+u[b>>2])+x(r*u[b+32>>2]));p=x(x(x(u[b+24>>2]*g)+u[b+8>>2])+x(r*u[b+40>>2]));g=x(x(x(u[b+20>>2]*g)+u[b+4>>2])+x(r*u[b+36>>2]))}m=q[c>>2]}f:{if(m>>>0<=5){if(1<>2];q[l+360>>2]=q[l+296>>2];q[l+364>>2]=b;b=q[l+292>>2];q[l+352>>2]=q[l+288>>2];q[l+356>>2]=b;b=q[l+284>>2];q[l+344>>2]=q[l+280>>2];q[l+348>>2]=b;b=q[l+276>>2];q[l+336>>2]=q[l+272>>2];q[l+340>>2]=b;b=q[l+268>>2];q[l+328>>2]=q[l+264>>2];q[l+332>>2]=b;b=q[l+260>>2];q[l+320>>2]=q[l+256>>2];q[l+324>>2]=b;break f}c=q[b+20>>2];q[l+192>>2]=q[b+16>>2];q[l+196>>2]=c;c=q[b+28>>2];q[l+200>>2]=q[b+24>>2];q[l+204>>2]=c;et(l+256|0,l+192|0,u[b>>2]);b=q[l+300>>2];q[l+360>>2]=q[l+296>>2];q[l+364>>2]=b;b=q[l+292>>2];q[l+352>>2]=q[l+288>>2];q[l+356>>2]=b;b=q[l+284>>2];q[l+344>>2]=q[l+280>>2];q[l+348>>2]=b;b=q[l+276>>2];q[l+336>>2]=q[l+272>>2];q[l+340>>2]=b;b=q[l+268>>2];q[l+328>>2]=q[l+264>>2];q[l+332>>2]=b;b=q[l+260>>2];q[l+320>>2]=q[l+256>>2];q[l+324>>2]=b;break f}b=q[1831];q[l+360>>2]=q[1830];q[l+364>>2]=b;b=q[1829];q[l+352>>2]=q[1828];q[l+356>>2]=b;b=q[1827];q[l+344>>2]=q[1826];q[l+348>>2]=b;b=q[1825];q[l+336>>2]=q[1824];q[l+340>>2]=b;b=q[1823];q[l+328>>2]=q[1822];q[l+332>>2]=b;b=q[1821];q[l+320>>2]=q[1820];q[l+324>>2]=b}b=q[l+324>>2];q[a>>2]=q[l+320>>2];q[a+4>>2]=b;b=q[l+332>>2];q[a+8>>2]=q[l+328>>2];q[a+12>>2]=b;b=q[l+364>>2];q[a+40>>2]=q[l+360>>2];q[a+44>>2]=b;b=q[l+356>>2];q[a+32>>2]=q[l+352>>2];q[a+36>>2]=b;b=q[l+348>>2];q[a+24>>2]=q[l+344>>2];q[a+28>>2]=b;b=q[l+340>>2];q[a+16>>2]=q[l+336>>2];q[a+20>>2]=b}ue=l+512|0}function ss(a,b,c,d){var e=0,f=0,g=x(0),h=0,i=x(0),j=x(0),k=0,l=x(0),m=0,n=x(0),p=x(0),s=x(0),t=x(0),v=x(0),z=x(0),A=0,B=0;e=ue-1632|0;ue=e;u[a+2048>>2]=c;lV(e+1096|0,0,512);q[e+1608>>2]=b;while(1){o[(e+1096|0)+f|0]=f;f=f+1|0;if((f|0)!=256){continue}break}while(1){f=w(q[e+1608>>2],1103515245)+12345&2147483647;q[e+1608>>2]=f;m=(e+1096|0)+h|0;k=r[m|0];c=x(x(x(x((f>>>0)%32767>>>0)/x(32766))*x(255))+x(0));a:{if(c=x(0)){f=~~c>>>0;break a}f=0}f=f+(e+1096|0)|0;o[m|0]=r[f|0];o[f|0]=k;h=h+1|0;if((h|0)!=256){continue}break}f=0;while(1){h=(e+1096|0)+f|0;o[h+256|0]=r[h|0];f=f+1|0;if((f|0)!=256){continue}break}h=0;lV(e+576|0,0,512);q[e+1088>>2]=w(((b|0)%1949|0)+5|0,b);f=0;while(1){o[(e+576|0)+f|0]=f;f=f+1|0;if((f|0)!=256){continue}break}while(1){f=w(q[e+1088>>2],1103515245)+12345&2147483647;q[e+1088>>2]=f;m=(e+576|0)+h|0;k=r[m|0];c=x(x(x(x((f>>>0)%32767>>>0)/x(32766))*x(255))+x(0));b:{if(c=x(0)){f=~~c>>>0;break b}f=0}f=f+(e+576|0)|0;o[m|0]=r[f|0];o[f|0]=k;h=h+1|0;if((h|0)!=256){continue}break}f=0;while(1){h=(e+576|0)+f|0;o[h+256|0]=r[h|0];f=f+1|0;if((f|0)!=256){continue}break}h=0;lV(e+56|0,0,512);q[e+568>>2]=w(((b|0)%3541|0)+10|0,b);f=0;while(1){o[(e+56|0)+f|0]=f;f=f+1|0;if((f|0)!=256){continue}break}while(1){b=w(q[e+568>>2],1103515245)+12345&2147483647;q[e+568>>2]=b;f=(e+56|0)+h|0;m=r[f|0];c=x(x(x(x((b>>>0)%32767>>>0)/x(32766))*x(255))+x(0));c:{if(c=x(0)){b=~~c>>>0;break c}b=0}b=b+(e+56|0)|0;o[f|0]=r[b|0];o[b|0]=m;h=h+1|0;if((h|0)!=256){continue}break}f=0;while(1){b=(e+56|0)+f|0;o[b+256|0]=r[b|0];f=f+1|0;if((f|0)!=256){continue}break}q[e+52>>2]=0;q[e+48>>2]=5300;m=0;while(1){s=x(x(m|0)*x(.125));b=0;while(1){t=x(x(b|0)*x(.125));h=0;while(1){q[e+1628>>2]=1040187392;u[e+1624>>2]=s;u[e+1620>>2]=t;j=x(.125);c=x(x(h|0)*x(.125));u[e+1616>>2]=c;v=x(.5);z=x(.5);if(d){p=x(0);i=x(1);g=s;l=t;n=c;f=0;while(1){k=q[e+1628>>2];q[e+40>>2]=q[e+1624>>2];q[e+44>>2]=k;k=q[e+1620>>2];q[e+32>>2]=q[e+1616>>2];q[e+36>>2]=k;z=rs(e+1096|0,e+32|0);j=x(j+j);u[e+1628>>2]=j;g=x(g+g);u[e+1624>>2]=g;l=x(l+l);u[e+1620>>2]=l;n=x(n+n);u[e+1616>>2]=n;p=x(p+x(i*z));i=x(i*x(.5));f=f+1|0;if((f|0)!=(d|0)){continue}break}z=x(x(p*x(.5))+x(.5))}q[e+1628>>2]=1040187392;u[e+1624>>2]=s;u[e+1620>>2]=t;u[e+1616>>2]=c;if(d){p=x(0);j=x(1);f=0;i=x(.125);g=s;l=t;n=c;while(1){k=q[e+1628>>2];q[e+24>>2]=q[e+1624>>2];q[e+28>>2]=k;k=q[e+1620>>2];q[e+16>>2]=q[e+1616>>2];q[e+20>>2]=k;v=rs(e+576|0,e+16|0);i=x(i+i);u[e+1628>>2]=i;g=x(g+g);u[e+1624>>2]=g;l=x(l+l);u[e+1620>>2]=l;n=x(n+n);u[e+1616>>2]=n;p=x(p+x(j*v));j=x(j*x(.5));f=f+1|0;if((f|0)!=(d|0)){continue}break}v=x(x(p*x(.5))+x(.5))}q[e+1628>>2]=1040187392;u[e+1624>>2]=s;u[e+1620>>2]=t;u[e+1616>>2]=c;d:{if(d){n=x(0);j=x(1);f=0;i=x(.125);g=s;l=t;while(1){k=q[e+1628>>2];q[e+8>>2]=q[e+1624>>2];q[e+12>>2]=k;k=q[e+1620>>2];q[e>>2]=q[e+1616>>2];q[e+4>>2]=k;p=rs(e+56|0,e);i=x(i+i);u[e+1628>>2]=i;g=x(g+g);u[e+1624>>2]=g;l=x(l+l);u[e+1620>>2]=l;c=x(c+c);u[e+1616>>2]=c;n=x(n+x(j*p));j=x(j*x(.5));f=f+1|0;if((f|0)!=(d|0)){continue}break}g=x(x(n*x(.5))+x(.5));break d}g=x(.5)}c=x(z+x(-.5));c=x(c+c);l=x(v+x(-.5));j=x(l+l);g=x(g+x(-.5));i=x(g+g);g=x(E(x(x(x(c*c)+x(j*j))+x(i*i))));if(!!(g0?f:0)<<16;c=x(x(x(c+x(1))*x(.5))*x(255));f:{if(x(y(c))0?f:0;c=x(x(x(j+x(1))*x(.5))*x(255));g:{if(x(y(c))>2]=A|(B|((f|0)>0?f:0)<<8);h=h+1|0;if((h|0)!=8){continue}break}b=b+1|0;if((b|0)!=8){continue}break}m=m+1|0;if((m|0)!=8){continue}break}ue=e+1632|0}function gD(a,b,c){var d=0,e=0,f=0,g=0;e=ue-48|0;ue=e;a:{b:{f=q[b+16>>2];c:{if(f){while(1){if((d|0)==4){break b}g=q[(d<<2)+b>>2];if(!g){PT(e+16|0,d);a=DT(e+16|0,340500);b=a+8|0;q[e+40>>2]=q[b>>2];c=q[a+4>>2];q[e+32>>2]=q[a>>2];q[e+36>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;a=zT(e+32|0,340523);b=a+8|0;q[e+8>>2]=q[b>>2];c=q[a+4>>2];q[e>>2]=q[a>>2];q[e+4>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(2,e);if(o[e+11|0]<=-1){_U(q[e>>2])}if(o[e+43|0]<=-1){_U(q[e+32>>2])}if(o[e+27|0]<=-1){_U(q[e+16>>2])}d=0;break c}if(!(o[g+8|0]&1)){PT(e+16|0,d);a=DT(e+16|0,340500);b=a+8|0;q[e+40>>2]=q[b>>2];c=q[a+4>>2];q[e+32>>2]=q[a>>2];q[e+36>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;a=zT(e+32|0,340542);b=a+8|0;q[e+8>>2]=q[b>>2];c=q[a+4>>2];q[e>>2]=q[a>>2];q[e+4>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(2,e);if(o[e+11|0]<=-1){_U(q[e>>2])}if(o[e+43|0]<=-1){_U(q[e+32>>2])}if(o[e+27|0]<=-1){_U(q[e+16>>2])}d=0;break c}d=d+1|0;if((f|0)!=(d|0)){continue}break}}d=q[c>>2];if(!(!d|q[d+12>>2]+ -16>>>0<3)){a=_S(48);q[e>>2]=a;q[e+4>>2]=40;q[e+8>>2]=-2147483600;d=0;o[a+40|0]=0;b=r[340595]|r[340596]<<8|(r[340597]<<16|r[340598]<<24);c=r[340591]|r[340592]<<8|(r[340593]<<16|r[340594]<<24);o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;o[a+36|0]=b;o[a+37|0]=b>>>8;o[a+38|0]=b>>>16;o[a+39|0]=b>>>24;b=r[340587]|r[340588]<<8|(r[340589]<<16|r[340590]<<24);c=r[340583]|r[340584]<<8|(r[340585]<<16|r[340586]<<24);o[a+24|0]=c;o[a+25|0]=c>>>8;o[a+26|0]=c>>>16;o[a+27|0]=c>>>24;o[a+28|0]=b;o[a+29|0]=b>>>8;o[a+30|0]=b>>>16;o[a+31|0]=b>>>24;b=r[340579]|r[340580]<<8|(r[340581]<<16|r[340582]<<24);c=r[340575]|r[340576]<<8|(r[340577]<<16|r[340578]<<24);o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;o[a+20|0]=b;o[a+21|0]=b>>>8;o[a+22|0]=b>>>16;o[a+23|0]=b>>>24;b=r[340571]|r[340572]<<8|(r[340573]<<16|r[340574]<<24);c=r[340567]|r[340568]<<8|(r[340569]<<16|r[340570]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[340563]|r[340564]<<8|(r[340565]<<16|r[340566]<<24);c=r[340559]|r[340560]<<8|(r[340561]<<16|r[340562]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;el(2,e);if(o[e+11|0]>-1){break c}_U(q[e>>2]);break c}d=q[b>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+20>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+20>>2]=0}q[a+20>>2]=q[b>>2];d=q[b+4>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+24>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+24>>2]=0}q[a+24>>2]=q[b+4>>2];d=q[b+8>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+28>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+28>>2]=0}q[a+28>>2]=q[b+8>>2];d=q[b+12>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+32>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+32>>2]=0}q[a+32>>2]=q[b+12>>2];q[a+36>>2]=q[b+16>>2];d=q[c>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+40>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+40>>2]=0}q[a+40>>2]=q[c>>2];d=a+12|0;kw(d);if(!q[a+12>>2]){d=0;break c}ta(36006,e+32|0);lw(q[d>>2]);if(q[b+16>>2]){d=0;while(1){if((d|0)==4){break a}f=q[(d<<2)+b>>2];nw(d+36064|0,q[(f?f+ -4|0:0)+44>>2]);d=d+1|0;if(d>>>0>2]){continue}break}}d=q[c>>2];if(d){nw(36096,q[d+40>>2])}d=q[b>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+20>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+20>>2]=0}q[a+20>>2]=q[b>>2];d=q[b+4>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+24>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+24>>2]=0}q[a+24>>2]=q[b+4>>2];d=q[b+8>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+28>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+28>>2]=0}q[a+28>>2]=q[b+8>>2];d=q[b+12>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+32>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+32>>2]=0}q[a+32>>2]=q[b+12>>2];q[a+36>>2]=q[b+16>>2];d=q[c>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+40>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+40>>2]=0}q[a+40>>2]=q[c>>2];a=q[85155];q[e+8>>2]=q[85154];q[e+12>>2]=a;a=q[85153];q[e>>2]=q[85152];q[e+4>>2]=a;lw(q[e+32>>2]);d=1}ue=e+48|0;return d}kq(341519);F()}kq(341519);F()}function uh(a,b,c){var d=0,e=0,f=0,g=0;f=ue-16|0;ue=f;d=q[c>>2];d=(r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24))+1|0;a:{if(d>>>0>7){break a}b:{switch(d-1|0){default:q[f+12>>2]=0;cV(f+12|0,16,3440);d=q[f+12>>2];g=kh(d,a);q[d>>2]=2924;break a;case 0:q[f+12>>2]=0;cV(f+12|0,16,3440);g=kh(q[f+12>>2],a);break a;case 2:q[f+12>>2]=0;cV(f+12|0,16,3632);d=q[f+12>>2];g=kh(d,a);q[d+3476>>2]=0;q[d+3456>>2]=1065353216;q[d>>2]=3484;q[d+3464>>2]=0;q[d+3468>>2]=0;o[d+3472|0]=0;q[d+3528>>2]=0;q[d+3488>>2]=0;break a;case 3:q[f+12>>2]=0;cV(f+12|0,16,3840);d=q[f+12>>2];g=kh(d,a);q[d+3472>>2]=0;q[d+3448>>2]=1065353216;q[d>>2]=3204;q[d+3456>>2]=0;q[d+3460>>2]=0;e=d+3461|0;o[e|0]=0;o[e+1|0]=0;o[e+2|0]=0;o[e+3|0]=0;o[e+4|0]=0;o[e+5|0]=0;o[e+6|0]=0;o[e+7|0]=0;Ao(d+3588|0);Ao(d+3604|0);Ao(d+3620|0);Ao(d+3636|0);Ao(d+3652|0);Ao(d+3668|0);q[d+3804>>2]=0;q[d+3808>>2]=0;q[d+3800>>2]=1;q[d+3732>>2]=0;q[d+3772>>2]=0;e=d+3812|0;q[e>>2]=0;q[e+4>>2]=0;e=d+3820|0;q[e>>2]=0;q[e+4>>2]=0;q[d+3828>>2]=0;break a;case 4:q[f+12>>2]=0;cV(f+12|0,16,4272);d=q[f+12>>2];g=kh(d,a);q[d+3484>>2]=-1;q[d+3488>>2]=-1;q[d+3456>>2]=0;q[d+3448>>2]=0;q[d+3452>>2]=0;q[d>>2]=3344;e=d+3492|0;q[e>>2]=-1;q[e+4>>2]=-1;e=d+3500|0;q[e>>2]=-1;q[e+4>>2]=-1;p[d+3560>>1]=0;q[d+3552>>2]=0;q[d+3532>>2]=0;q[d+3592>>2]=-1;q[d+3596>>2]=-1;q[d+3476>>2]=1608;q[d+3480>>2]=1608;q[d+3472>>2]=7064;e=d+3600|0;q[e>>2]=-1;q[e+4>>2]=-1;e=d+3608|0;q[e>>2]=-1;q[e+4>>2]=-1;p[d+3668>>1]=0;q[d+3660>>2]=0;q[d+3640>>2]=0;q[d+3580>>2]=7064;q[d+3584>>2]=1608;q[d+3588>>2]=1608;e=d+3820|0;q[e>>2]=-1;q[e+4>>2]=-1;e=d+3812|0;q[e>>2]=-1;q[e+4>>2]=-1;q[d+3804>>2]=-1;q[d+3808>>2]=-1;q[d+3852>>2]=0;q[d+3872>>2]=0;p[d+3880>>1]=0;q[d+3792>>2]=7064;q[d+3928>>2]=0;q[d+3932>>2]=0;q[d+3796>>2]=1608;q[d+3800>>2]=1608;q[d+3888>>2]=0;q[d+3972>>2]=0;q[d+3976>>2]=0;q[d+4016>>2]=0;q[d+4100>>2]=0;q[d+4104>>2]=0;q[d+4044>>2]=1065353216;q[d+4064>>2]=0;e=d+4056|0;q[e>>2]=0;q[e+4>>2]=0;q[d+4048>>2]=0;q[d+4052>>2]=0;q[d+4108>>2]=1;q[d+4180>>2]=0;q[d+4184>>2]=0;q[d+4188>>2]=1;q[d+4192>>2]=1;o[d+4176|0]=0;e=d+4204|0;q[e>>2]=0;q[e+4>>2]=0;q[d+4196>>2]=0;q[d+4200>>2]=0;o[d+4240|0]=0;q[d+4236>>2]=1065353216;q[d+4212>>2]=1065353216;q[d+4216>>2]=-1;q[d+4252>>2]=0;q[d+4244>>2]=0;q[d+4248>>2]=0;q[d+4220>>2]=1065353216;q[d+4224>>2]=1065353216;q[d+4228>>2]=0;q[d+4232>>2]=0;e=d+4092|0;q[e>>2]=-1;q[e+4>>2]=-1;e=d+4084|0;q[e>>2]=-1;q[e+4>>2]=-1;e=d+4076|0;q[e>>2]=-1;q[e+4>>2]=-1;q[d+4068>>2]=-1;q[d+4072>>2]=-1;e=d+4168|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4160|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4152|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4144|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4136|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4128|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4120|0;q[e>>2]=0;q[e+4>>2]=0;q[d+4112>>2]=0;q[d+4116>>2]=0;q[d+4260>>2]=0;o[d+4256|0]=0;break a;case 5:q[f+12>>2]=0;cV(f+12|0,16,3584);d=q[f+12>>2];g=kh(d,a);q[d+3484>>2]=0;q[d+3476>>2]=0;q[d+3468>>2]=1065353216;q[d+3472>>2]=0;q[d>>2]=3064;Ne(f+12|0,255,255,255,255);q[d+3488>>2]=q[f+12>>2];Ne(f+12|0,255,255,255,255);q[d+3492>>2]=q[f+12>>2];q[d+3504>>2]=0;p[d+3500>>1]=0;q[d+3496>>2]=1065353216;q[d+3564>>2]=0;q[d+3568>>2]=0;q[d+3524>>2]=0;break a;case 1:break a;case 6:break b}}q[f+12>>2]=0;cV(f+12|0,16,4176);d=q[f+12>>2];g=kh(d,a);q[d+3484>>2]=0;q[d+3488>>2]=0;q[d+3456>>2]=1065353216;q[d>>2]=3624;q[d+3460>>2]=0;q[d+3464>>2]=0;e=d+3468|0;q[e>>2]=0;q[e+4>>2]=0;e=d+3473|0;o[e|0]=0;o[e+1|0]=0;o[e+2|0]=0;o[e+3|0]=0;o[e+4|0]=0;o[e+5|0]=0;o[e+6|0]=0;o[e+7|0]=0;Ao(d+3604|0);Ao(d+3620|0);Ao(d+3636|0);Ao(d+3652|0);Ao(d+3668|0);Ao(d+3684|0);q[d+3852>>2]=0;q[d+3892>>2]=0;q[d+3896>>2]=0;q[d+3936>>2]=0;q[d+3940>>2]=0;q[d+3980>>2]=0;q[d+3984>>2]=0;q[d+4112>>2]=0;q[d+4024>>2]=0;q[d+4028>>2]=0;q[d+4144>>2]=0;q[d+4148>>2]=0;q[d+4140>>2]=1;q[d+4068>>2]=0;q[d+4072>>2]=0;e=d+4152|0;q[e>>2]=0;q[e+4>>2]=0;e=d+4160|0;q[e>>2]=0;q[e+4>>2]=0;d=d+4168|0;q[d>>2]=0;q[d+4>>2]=0}lh(g,c,b,n[q[q[a>>2]+28>>2]](a)|0);ue=f+16|0;return g}function Hx(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=0,m=0,p=0,s=0,t=0;f=ue-112|0;ue=f;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;g=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;q[d+1076>>2]=e?-1082130432:1065353216;q[d+1072>>2]=e?1065353216:0;q[f+104>>2]=0;q[f+92>>2]=0;q[f+96>>2]=0;q[f+100>>2]=0;q[f+84>>2]=0;q[f+88>>2]=0;q[f+80>>2]=1065353216;Jv(q[a+4>>2],f+104|0,f+80|0);e=n[q[q[b>>2]+32>>2]](b)|0;b=e;q[b+272>>2]=0;q[b+276>>2]=0;q[b+280>>2]=0;q[b+284>>2]=0;u[b+272>>2]=r[q[a+4>>2]+340|0]?x(1):x(0);b=(g|0)==1;l=b?-1082130432:1065353216;m=b?1065353216:0;if(q[q[c+40>>2]>>2]==7){n[q[q[a>>2]+40>>2]](f- -64|0,a);b=nt(f,f- -64|0);h=u[b>>2];j=u[b+4>>2];k=u[b+8>>2];i=x(x(1)/x(E(x(x(x(h*h)+x(j*j))+x(k*k)))));u[b+12>>2]=u[b+12>>2]*i;u[b+8>>2]=k*i;u[b+4>>2]=j*i;u[b>>2]=h*i;b=q[f+4>>2];g=q[f>>2];o[d+1024|0]=g;o[d+1025|0]=g>>>8;o[d+1026|0]=g>>>16;o[d+1027|0]=g>>>24;o[d+1028|0]=b;o[d+1029|0]=b>>>8;o[d+1030|0]=b>>>16;o[d+1031|0]=b>>>24;b=d+1032|0;g=q[f+8>>2];o[b|0]=g;o[b+1|0]=g>>>8;o[b+2|0]=g>>>16;o[b+3|0]=g>>>24;q[d+1036>>2]=1065353216;b=q[f+8>>2];o[e+8|0]=b;o[e+9|0]=b>>>8;o[e+10|0]=b>>>16;o[e+11|0]=b>>>24;b=q[f+4>>2];g=q[f>>2];o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=b;o[e+5|0]=b>>>8;o[e+6|0]=b>>>16;o[e+7|0]=b>>>24;q[e+12>>2]=1065353216}b=n[q[q[a>>2]+48>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[d+1052>>2]=x(b>>>24>>>0)/x(255);u[d+1040>>2]=x((b&255)>>>0)/x(255);u[d+1048>>2]=x((b>>>16&255)>>>0)/x(255);u[d+1044>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+48>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[e+28>>2]=x(b>>>24>>>0)/x(255);u[e+16>>2]=x((b&255)>>>0)/x(255);u[e+24>>2]=x((b>>>16&255)>>>0)/x(255);u[e+20>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+56>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[d+1068>>2]=x(b>>>24>>>0)/x(255);u[d+1056>>2]=x((b&255)>>>0)/x(255);u[d+1064>>2]=x((b>>>16&255)>>>0)/x(255);u[d+1060>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+56>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[e+44>>2]=x(b>>>24>>>0)/x(255);u[e+32>>2]=x((b&255)>>>0)/x(255);u[e+40>>2]=x((b>>>16&255)>>>0)/x(255);u[e+36>>2]=x((b>>>8&255)>>>0)/x(255);q[e+160>>2]=q[q[c+40>>2]+160>>2];b=q[c+40>>2];i=u[b+180>>2];j=u[b+188>>2];h=u[c+32>>2];k=u[b+184>>2];b=f;c=q[b+88>>2];g=q[b+92>>2];p=q[b+96>>2];s=q[b+100>>2];t=q[b+84>>2];q[e+224>>2]=q[b+80>>2];q[e+228>>2]=t;q[e+260>>2]=l;q[e+256>>2]=m;q[e+248>>2]=p;q[e+252>>2]=s;q[e+240>>2]=c;q[e+244>>2]=g;u[e+212>>2]=k*h;u[e+216>>2]=j*h;u[e+208>>2]=i*h;u[e+220>>2]=i!=x(0)?x(1):k!=x(0)?x(1):j!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](b,a);a=q[b+60>>2];c=q[b+56>>2];o[d+56|0]=c;o[d+57|0]=c>>>8;o[d+58|0]=c>>>16;o[d+59|0]=c>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[b+52>>2];c=q[b+48>>2];o[d+48|0]=c;o[d+49|0]=c>>>8;o[d+50|0]=c>>>16;o[d+51|0]=c>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[b+44>>2];c=q[b+40>>2];o[d+40|0]=c;o[d+41|0]=c>>>8;o[d+42|0]=c>>>16;o[d+43|0]=c>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[b+36>>2];c=q[b+32>>2];o[d+32|0]=c;o[d+33|0]=c>>>8;o[d+34|0]=c>>>16;o[d+35|0]=c>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[b+28>>2];c=q[b+24>>2];o[d+24|0]=c;o[d+25|0]=c>>>8;o[d+26|0]=c>>>16;o[d+27|0]=c>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[b+20>>2];c=q[b+16>>2];o[d+16|0]=c;o[d+17|0]=c>>>8;o[d+18|0]=c>>>16;o[d+19|0]=c>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[b+12>>2];c=q[b+8>>2];o[d+8|0]=c;o[d+9|0]=c>>>8;o[d+10|0]=c>>>16;o[d+11|0]=c>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[b+4>>2];c=q[b>>2];o[d|0]=c;o[d+1|0]=c>>>8;o[d+2|0]=c>>>16;o[d+3|0]=c>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[b+104>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+104>>2]=0}ue=f+112|0}function Qx(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=0,m=0,p=0,s=0,t=0;f=ue-112|0;ue=f;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;g=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;q[d+212>>2]=e?-1082130432:1065353216;q[d+208>>2]=e?1065353216:0;q[f+104>>2]=0;q[f+92>>2]=0;q[f+96>>2]=0;q[f+100>>2]=0;q[f+84>>2]=0;q[f+88>>2]=0;q[f+80>>2]=1065353216;Jv(q[a+4>>2],f+104|0,f+80|0);e=n[q[q[b>>2]+32>>2]](b)|0;b=e;q[b+272>>2]=0;q[b+276>>2]=0;q[b+280>>2]=0;q[b+284>>2]=0;u[b+272>>2]=r[q[a+4>>2]+340|0]?x(1):x(0);b=(g|0)==1;l=b?-1082130432:1065353216;m=b?1065353216:0;if(q[q[c+40>>2]>>2]==7){n[q[q[a>>2]+40>>2]](f- -64|0,a);b=nt(f,f- -64|0);h=u[b>>2];j=u[b+4>>2];k=u[b+8>>2];i=x(x(1)/x(E(x(x(x(h*h)+x(j*j))+x(k*k)))));u[b+12>>2]=u[b+12>>2]*i;u[b+8>>2]=k*i;u[b+4>>2]=j*i;u[b>>2]=h*i;b=q[f+4>>2];g=q[f>>2];o[d+160|0]=g;o[d+161|0]=g>>>8;o[d+162|0]=g>>>16;o[d+163|0]=g>>>24;o[d+164|0]=b;o[d+165|0]=b>>>8;o[d+166|0]=b>>>16;o[d+167|0]=b>>>24;b=q[f+8>>2];o[d+168|0]=b;o[d+169|0]=b>>>8;o[d+170|0]=b>>>16;o[d+171|0]=b>>>24;q[d+172>>2]=1065353216;b=q[f+8>>2];o[e+8|0]=b;o[e+9|0]=b>>>8;o[e+10|0]=b>>>16;o[e+11|0]=b>>>24;b=q[f+4>>2];g=q[f>>2];o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=b;o[e+5|0]=b>>>8;o[e+6|0]=b>>>16;o[e+7|0]=b>>>24;q[e+12>>2]=1065353216}b=n[q[q[a>>2]+48>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[d+188>>2]=x(b>>>24>>>0)/x(255);u[d+176>>2]=x((b&255)>>>0)/x(255);u[d+184>>2]=x((b>>>16&255)>>>0)/x(255);u[d+180>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+48>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[e+28>>2]=x(b>>>24>>>0)/x(255);u[e+16>>2]=x((b&255)>>>0)/x(255);u[e+24>>2]=x((b>>>16&255)>>>0)/x(255);u[e+20>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+56>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[d+204>>2]=x(b>>>24>>>0)/x(255);u[d+192>>2]=x((b&255)>>>0)/x(255);u[d+200>>2]=x((b>>>16&255)>>>0)/x(255);u[d+196>>2]=x((b>>>8&255)>>>0)/x(255);b=n[q[q[a>>2]+56>>2]](a)|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);u[e+44>>2]=x(b>>>24>>>0)/x(255);u[e+32>>2]=x((b&255)>>>0)/x(255);u[e+40>>2]=x((b>>>16&255)>>>0)/x(255);u[e+36>>2]=x((b>>>8&255)>>>0)/x(255);q[e+160>>2]=q[q[c+40>>2]+160>>2];b=q[c+40>>2];i=u[b+180>>2];j=u[b+188>>2];h=u[c+32>>2];k=u[b+184>>2];b=f;c=q[b+88>>2];g=q[b+92>>2];p=q[b+96>>2];s=q[b+100>>2];t=q[b+84>>2];q[e+224>>2]=q[b+80>>2];q[e+228>>2]=t;q[e+260>>2]=l;q[e+256>>2]=m;q[e+248>>2]=p;q[e+252>>2]=s;q[e+240>>2]=c;q[e+244>>2]=g;u[e+212>>2]=k*h;u[e+216>>2]=j*h;u[e+208>>2]=i*h;u[e+220>>2]=i!=x(0)?x(1):k!=x(0)?x(1):j!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](b,a);a=q[b+60>>2];c=q[b+56>>2];o[d+56|0]=c;o[d+57|0]=c>>>8;o[d+58|0]=c>>>16;o[d+59|0]=c>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[b+52>>2];c=q[b+48>>2];o[d+48|0]=c;o[d+49|0]=c>>>8;o[d+50|0]=c>>>16;o[d+51|0]=c>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[b+44>>2];c=q[b+40>>2];o[d+40|0]=c;o[d+41|0]=c>>>8;o[d+42|0]=c>>>16;o[d+43|0]=c>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[b+36>>2];c=q[b+32>>2];o[d+32|0]=c;o[d+33|0]=c>>>8;o[d+34|0]=c>>>16;o[d+35|0]=c>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[b+28>>2];c=q[b+24>>2];o[d+24|0]=c;o[d+25|0]=c>>>8;o[d+26|0]=c>>>16;o[d+27|0]=c>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[b+20>>2];c=q[b+16>>2];o[d+16|0]=c;o[d+17|0]=c>>>8;o[d+18|0]=c>>>16;o[d+19|0]=c>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[b+12>>2];c=q[b+8>>2];o[d+8|0]=c;o[d+9|0]=c>>>8;o[d+10|0]=c>>>16;o[d+11|0]=c>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[b+4>>2];c=q[b>>2];o[d|0]=c;o[d+1|0]=c>>>8;o[d+2|0]=c>>>16;o[d+3|0]=c>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[b+104>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+104>>2]=0}ue=f+112|0}function Oi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,s=0,t=0,v=x(0);g=ue-448|0;ue=g;n[q[q[e>>2]+44>>2]](g+160|0,e);h=q[g+160>>2];if(h){i=Ao(g+304|0);j=Ao(g+320|0);k=Ao(g+336|0);l=Ao(g+352|0);m=Ao(g+368|0);o=Ao(g+384|0);q[g+208>>2]=q[b+544>>2];c=Gj(b);d=q[c+44>>2];q[g+200>>2]=q[c+40>>2];q[g+204>>2]=d;d=q[c+36>>2];q[g+192>>2]=q[c+32>>2];q[g+196>>2]=d;d=q[c+28>>2];q[g+184>>2]=q[c+24>>2];q[g+188>>2]=d;d=q[c+20>>2];q[g+176>>2]=q[c+16>>2];q[g+180>>2]=d;d=q[c+4>>2];q[g+160>>2]=q[c>>2];q[g+164>>2]=d;d=q[c+12>>2];q[g+168>>2]=q[c+8>>2];q[g+172>>2]=d;a:{if(q[a+2472>>2]+ -1>>>0<=1){c=q[b+548>>2];q[g+156>>2]=c;d=q[b+324>>2];q[g+152>>2]=d;q[g+68>>2]=c;q[g+64>>2]=d;Oe(g+72|0,g+68|0,g- -64|0);e=q[g+72>>2];break a}e=q[b+548>>2]}b:{if(q[a+3532>>2]!=1){c=e;d=c;p=c;break b}q[g+148>>2]=e;c=q[a+3536>>2];q[g+144>>2]=c;q[g+60>>2]=e;q[g+56>>2]=c;Oe(g+72|0,g+60|0,g+56|0);q[g+140>>2]=e;p=q[g+72>>2];c=q[a+3540>>2];q[g+136>>2]=c;q[g+52>>2]=e;q[g+48>>2]=c;Oe(g+72|0,g+52|0,g+48|0);q[g+132>>2]=e;d=q[g+72>>2];c=q[a+3544>>2];q[g+128>>2]=c;q[g+44>>2]=e;q[g+40>>2]=c;Oe(g+72|0,g+44|0,g+40|0);q[g+124>>2]=e;c=q[g+72>>2];s=q[a+3548>>2];q[g+120>>2]=s;q[g+36>>2]=e;q[g+32>>2]=s;Oe(g+72|0,g+36|0,g+32|0);e=q[g+72>>2]}q[g+224>>2]=e;q[g+220>>2]=c;q[g+216>>2]=d;q[g+212>>2]=p;if(r[q[q[b+152>>2]+20>>2]+208|0]){q[g+116>>2]=q[g+212>>2];c=q[q[b+152>>2]+20>>2];c=r[c+209|0]|r[c+210|0]<<8|(r[c+211|0]<<16|r[c+212|0]<<24);q[g+112>>2]=c;q[g+28>>2]=q[g+116>>2];q[g+24>>2]=c;Oe(g+72|0,g+28|0,g+24|0);q[g+212>>2]=q[g+72>>2];q[g+108>>2]=q[g+216>>2];c=q[q[b+152>>2]+20>>2];c=r[c+209|0]|r[c+210|0]<<8|(r[c+211|0]<<16|r[c+212|0]<<24);q[g+104>>2]=c;q[g+20>>2]=q[g+108>>2];q[g+16>>2]=c;Oe(g+72|0,g+20|0,g+16|0);q[g+216>>2]=q[g+72>>2];q[g+100>>2]=q[g+220>>2];c=q[q[b+152>>2]+20>>2];c=r[c+209|0]|r[c+210|0]<<8|(r[c+211|0]<<16|r[c+212|0]<<24);q[g+96>>2]=c;q[g+12>>2]=q[g+100>>2];q[g+8>>2]=c;Oe(g+72|0,g+12|0,g+8|0);q[g+220>>2]=q[g+72>>2];q[g+92>>2]=q[g+224>>2];c=q[q[b+152>>2]+20>>2];c=r[c+209|0]|r[c+210|0]<<8|(r[c+211|0]<<16|r[c+212|0]<<24);q[g+88>>2]=c;q[g+4>>2]=q[g+92>>2];q[g>>2]=c;Oe(g+72|0,g+4|0,g);q[g+224>>2]=q[g+72>>2]}c=q[a+3552>>2];c:{if(c>>>0>1){break c}if(c-1){q[g+296>>2]=0;q[g+300>>2]=1065353216;q[g+288>>2]=1056964608;q[g+292>>2]=1056964608;q[g+280>>2]=0;q[g+284>>2]=1065353216;q[g+272>>2]=-1090519040;q[g+276>>2]=1056964608;q[g+264>>2]=0;q[g+268>>2]=1065353216;q[g+256>>2]=1056964608;q[g+260>>2]=-1090519040;q[g+248>>2]=0;q[g+252>>2]=1065353216;q[g+240>>2]=-1090519040;q[g+244>>2]=-1090519040;break c}c=a+3576|0;d=q[c+4>>2];q[g+248>>2]=q[c>>2];q[g+252>>2]=d;c=a+3568|0;d=q[c+4>>2];q[g+240>>2]=q[c>>2];q[g+244>>2]=d;c=a+3592|0;d=q[c+4>>2];q[g+264>>2]=q[c>>2];q[g+268>>2]=d;c=a+3584|0;d=q[c+4>>2];q[g+256>>2]=q[c>>2];q[g+260>>2]=d;c=a+3608|0;d=q[c+4>>2];q[g+280>>2]=q[c>>2];q[g+284>>2]=d;c=a+3600|0;d=q[c+4>>2];q[g+272>>2]=q[c>>2];q[g+276>>2]=d;c=a+3624|0;d=q[c+4>>2];q[g+296>>2]=q[c>>2];q[g+300>>2]=d;c=a+3616|0;d=q[c+4>>2];q[g+288>>2]=q[c>>2];q[g+292>>2]=d}ck(g+72|0,b,0);c=g+80|0;e=q[c+4>>2];q[i+8>>2]=q[c>>2];q[i+12>>2]=e;d=q[g+76>>2];q[i>>2]=q[g+72>>2];q[i+4>>2]=d;ck(g+72|0,b,1);d=q[c+4>>2];q[j+8>>2]=q[c>>2];q[j+12>>2]=d;d=q[g+76>>2];q[j>>2]=q[g+72>>2];q[j+4>>2]=d;ck(g+72|0,b,2);d=q[c+4>>2];q[k+8>>2]=q[c>>2];q[k+12>>2]=d;d=q[g+76>>2];q[k>>2]=q[g+72>>2];q[k+4>>2]=d;ck(g+72|0,b,3);d=q[c+4>>2];q[l+8>>2]=q[c>>2];q[l+12>>2]=d;d=q[g+76>>2];q[l>>2]=q[g+72>>2];q[l+4>>2]=d;ck(g+72|0,b,4);d=q[c+4>>2];q[m+8>>2]=q[c>>2];q[m+12>>2]=d;d=q[g+76>>2];q[m>>2]=q[g+72>>2];q[m+4>>2]=d;ck(g+72|0,b,5);d=q[c+4>>2];q[o+8>>2]=q[c>>2];q[o+12>>2]=d;c=q[g+76>>2];q[o>>2]=q[g+72>>2];q[o+4>>2]=c;t=g,v=$j(b),u[t+400>>2]=v;q[g+404>>2]=q[b+1428>>2];c=a+3436|0;if(r[a+3472|0]){q[g+408>>2]=q[b+336>>2]}Hh(a,b,g+412|0,g+428|0);n[q[q[h>>2]+24>>2]](h,c,g+160|0,f);n[q[q[h>>2]+8>>2]](h)|0}ue=g+448|0}function Xj(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=x(0),m=0,p=x(0);e=ue-80|0;ue=e;if(r[a+1392|0]){Lj(a)}j=q[a+164>>2];c=0;a:{if(!j){break a}d=t[j+1400>>2]>=t[a+1400>>2];c=q[j+820>>2]>1}f=1;f=b==x(0)?q[q[a+148>>2]+1344>>2]==6:f;b:{c:{if(!r[a+1393|0]){break c}if(!r[a+1394|0]){if(c|(f|j)|d){break c}break b}if((c|f|d)!=1){break b}}o[a+1393|0]=0;o[a+1394|0]=0;d:{if(!r[a+1395|0]){break d}d=q[a+148>>2];e:{if(b>x(0)^1|(n[q[q[d>>2]+12>>2]](d)|0)==-1){break e}d=q[a+148>>2];if(q[d+3308>>2]!=1){break e}i=u[a+828>>2];g=x(q[a+816>>2]);if(i<=g^1|x(i+b)>g^1){break e}Wn(q[a+144>>2],a,d)}if(!r[a+1395|0]){break d}u[a+828>>2]=u[a+828>>2]+b}Mj(a,b);d=q[a+164>>2];if(!(!d|q[q[a+148>>2]+2472>>2]!=2)){q[a+324>>2]=q[d+320>>2]}if(c){Tj(a,b);q[a+164>>2]=0}c=q[a+160>>2];if(c){d=a+1232|0;while(1){Wk(c,d);c=q[c+312>>2];if(c){continue}break}}c=q[q[a+148>>2]+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=1600){m=a,p=Yj(a+168|0,q[a+164>>2],q[a+148>>2]+3116|0,a+1404|0,q[q[a+148>>2]+4>>2],q[q[a+152>>2]+20>>2],u[a+828>>2],u[a+824>>2]),u[m+1428>>2]=p}f:{c=q[a+820>>2];if(c>>>0>1){break f}g:{h:{if(c-1){c=q[a+148>>2];if((n[q[q[c>>2]+12>>2]](c)|0)==-1){break f}c=q[a+148>>2];if(u[a+828>>2]>u[a+824>>2]?q[c+76>>2]:0){break g}i:{if(!q[c+80>>2]){break i}d=q[a+164>>2];if(q[d+820>>2]?0:d){break i}q[a+164>>2]=0;break g}j:{k:{if(q[c+84>>2]){c=q[a+160>>2];if(!c){break k}while(1){if(!Xk(c)){c=q[c+312>>2];if(c){continue}break k}break}c=q[a+148>>2]}if(!r[c+132|0]){break j}if(!Gk(q[q[a+152>>2]+20>>2],r[q[a+148>>2]+133|0])){break j}}c=q[a+148>>2];break g}c=q[a+148>>2];if(!q[c+144>>2]){break f}l:{if(q[c+148>>2]){c=q[q[a+152>>2]+20>>2];i=u[a+104>>2];g=u[a+100>>2];b=u[a+96>>2];h=x(x(u[c+152>>2]*i)+x(x(u[c+148>>2]*g)+x(u[c+156>>2]+x(u[c+144>>2]*b))));k=x(x(u[c+184>>2]*i)+x(x(u[c+180>>2]*g)+x(u[c+188>>2]+x(u[c+176>>2]*b))));b=x(x(u[c+168>>2]*i)+x(x(u[c+164>>2]*g)+x(u[c+172>>2]+x(u[c+160>>2]*b))));break l}f=q[q[a+152>>2]+20>>2];c=q[f+140>>2];q[e+72>>2]=q[f+136>>2];q[e+76>>2]=c;c=q[f+132>>2];d=e- -64|0;q[d>>2]=q[f+128>>2];q[d+4>>2]=c;c=q[f+124>>2];q[e+56>>2]=q[f+120>>2];q[e+60>>2]=c;c=q[f+116>>2];q[e+48>>2]=q[f+112>>2];q[e+52>>2]=c;c=q[f+108>>2];q[e+40>>2]=q[f+104>>2];q[e+44>>2]=c;c=q[f+100>>2];q[e+32>>2]=q[f+96>>2];q[e+36>>2]=c;c=q[f+84>>2];q[e+16>>2]=q[f+80>>2];q[e+20>>2]=c;c=q[f+92>>2];q[e+24>>2]=q[f+88>>2];q[e+28>>2]=c;Xs(e,e+16|0);k=x(u[a+104>>2]-u[e+8>>2]);h=x(u[a+96>>2]-u[e>>2]);b=x(u[a+100>>2]-u[e+4>>2])}d=q[a+148>>2];c=q[d+144>>2]+ -1|0;if(c>>>0>2){break f}m:{switch(c-1|0){default:c=nt(e+16|0,d+152|0);i=u[c+4>>2];g=u[c+8>>2];h=x(y(x(h-u[c>>2])));c=nt(e+16|0,q[a+148>>2]+164|0);if(h<=u[c>>2]^1|x(y(x(b-i)))<=u[c+4>>2]^1|x(y(x(k-g)))<=u[c+8>>2]^1){break h}c=q[a+148>>2];if(q[c+176>>2]>0){break g}break f;case 0:l=h;c=nt(e+16|0,d+152|0);h=u[c>>2];i=u[c+4>>2];g=u[c+8>>2];l=x(x(x(l*h)+x(b*i))+x(k*g));c=q[a+148>>2];b=u[c+164>>2];if(x(l-x(x(x(h*x(h*b))+x(i*x(b*i)))+x(g*x(b*g))))>x(0)){break g}break f;case 1:break m}}f=nt(e+16|0,d+152|0);c=q[a+148>>2];d=q[c+168>>2];g=x(h-u[f>>2]);b=x(b-u[f+4>>2]);h=x(x(g*g)+x(b*b));b=x(k-u[f+8>>2]);h=x(h+x(b*b));b=u[c+164>>2];if(!!(h<=x(b*b))){if((d|0)>0){break g}break f}if(d){break f}break g}b=x(u[a+832>>2]+b);u[a+832>>2]=b;if(!(b>u[q[a+148>>2]+2788>>2])){break f}c=q[a+160>>2];if(c){while(1){o[c+308|0]=0;c=q[c+312>>2];if(c){continue}break}}q[a+820>>2]=2;break b}c=q[a+148>>2];if(q[c+176>>2]){break f}}n:{if((n[q[q[c>>2]+20>>2]](c)|0)<1){break n}c=q[a+164>>2];if(!c|q[q[a+148>>2]+2472>>2]!=2){break n}q[a+324>>2]=q[c+320>>2]}if(q[q[a+148>>2]+2784>>2]==2){q[a+820>>2]=1;break f}if(q[a+820>>2]>1){break b}c=q[a+160>>2];if(c){while(1){o[c+308|0]=0;c=q[c+312>>2];if(c){continue}break}}q[a+820>>2]=2;break b}o[a+1395|0]=1}ue=e+80|0}function $k(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;a:{if(!b|(c|0)<1){break a}f=2;d=0;b:{if(c>>>0<4){break b}q[a+32>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);d=4;if(c>>>0<8){break b}q[a+4>>2]=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);f=0;d=8}g=f&2;e=g;c:{d:{if(!e){g=d;h=d+4|0;if(h>>>0<=c>>>0){break d}}f=f|2;e=0;break c}d=i|h;f=e;e=b+g|0;e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24)}g=f&3;f=g;e:{f:{if(0|(g|0)!=2){g=d;h=d+4|0;if(h>>>0<=c>>>0){break f}}f=2;break e}d=b+g|0;q[a+36>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=i|h}g=f&3;f=g;g:{h:{if(0|(g|0)!=2){g=d;h=d+4|0;if(h>>>0<=c>>>0){break h}}f=2;break g}d=b+g|0;q[a+40>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=i|h}g=f&3;f=g;i:{j:{if(!0&(g|0)==2){break j}g=d;h=d+4|0;if(h>>>0>c>>>0){break j}d=b+g|0;q[a+44>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=i|h;break i}f=2}g=f&3;f=g;k:{l:{if(!0&(g|0)==2){break l}g=d;h=d+4|0;if(h>>>0>c>>>0){break l}d=b+g|0;q[a+48>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=i|h;break k}f=2}g=f&3;f=g;m:{n:{if(!0&(g|0)==2){break n}g=d;h=d+4|0;if(h>>>0>c>>>0){break n}d=b+g|0;q[a+52>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=i|h;break m}f=2}if((e|0)<0){break a}i=q[a+8>>2];g=q[a+12>>2]-i>>2;o:{if(e>>>0>g>>>0){al(a+8|0,e-g|0);break o}if(e>>>0>=g>>>0){break o}q[a+12>>2]=i+(e<<2)}e=q[a+40>>2];if((e|0)<0){break a}g=q[a+12>>2]-q[a+8>>2]>>2;if(!((e|0)==4352|e+ -4608>>>0<5|(e&-4)==4096)){if(g>>>0<=e>>>0){break a}}e=q[a+44>>2];if((e|0)<0){break a}if(!((e|0)==4352|e+ -4608>>>0<5|(e&-4)==4096)){if(g>>>0<=e>>>0){break a}}e=q[a+48>>2];if((e|0)<0){break a}if(!((e|0)==4352|e+ -4608>>>0<5|(e&-4)==4096)){if(g>>>0<=e>>>0){break a}}e=q[a+52>>2];if((e|0)<0){break a}if(!((e|0)==4352|e+ -4608>>>0<5|(e&-4)==4096)){if(g>>>0<=e>>>0){break a}}if((f&3)==2){break a}c=c-d|0;if((c|0)<0){break a}e=q[a+24>>2];f=q[a+20>>2];g=e-f|0;p:{if(c>>>0>g>>>0){Se(a+20|0,c-g|0);f=q[a+20>>2];e=q[a+24>>2];break p}if(c>>>0>=g>>>0){break p}e=c+f|0;q[a+24>>2]=e}if((f|0)!=(e|0)){kV(f,b+d|0,c)}i=q[a+20>>2];g=q[a+24>>2]-i|0;d=0;f=0;m=q[a+36>>2];q:{if((m|0)>=1){while(1){r:{s:{e=0;c=f;if(e|(c|0)!=2){b=d;f=d+4|0;if(f>>>0<=g>>>0){break s}}c=2;b=d;break r}b=b+i|0;n=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=f|e}if(n>>>0<=50){d=n;f=d&31;d=(32<=(d&63)>>>0?262145>>>f|0:((1<>>f)&1}else{d=0}if(!d){break q}t:{u:{f=0;d=c;if(f|(d|0)!=2){c=b;e=b+4|0;if(e>>>0<=g>>>0){break u}}h=0;c=2;break t}b=c+i|0;h=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=f|e;c=d}d=c;v:{w:{if(0|(d|0)!=2){c=b;e=b+4|0;if(e>>>0<=g>>>0){break w}}k=0;c=2;break v}b=c+i|0;k=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=f|e;c=d}f=c;x:{y:{d=0;if(d|(c|0)!=2){c=b;e=b+4|0;if(e>>>0<=g>>>0){break y}}l=0;f=2;break x}b=c+i|0;l=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=d|e}d=b;e=0;if((h|0)>0){while(1){z:{A:{j=0;b=f;if(j|(b|0)!=2){c=d;f=d+4|0;if(f>>>0<=g>>>0){break A}}c=0;b=2;break z}c=c+i|0;c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);if((c|0)<0){break a}d=f|j}f=b;if(!((c|0)==4352|c+ -4608>>>0<5|(c&-4)==4096)){if(q[a+12>>2]-q[a+8>>2]>>2>>>0<=c>>>0){break q}}e=e+1|0;if((h|0)!=(e|0)){continue}break}}c=0;if((k|0)>0){while(1){B:{C:{h=0;b=f;if(h|(b|0)!=2){f=d;j=d+4|0;if(j>>>0<=g>>>0){break C}}e=0;b=2;break B}d=f+i|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);if((e|0)<0){break a}d=h|j}f=b;if((e|0)>=q[a+12>>2]-q[a+8>>2]>>2){break q}c=c+1|0;if((k|0)!=(c|0)){continue}break}}c=0;if((l|0)>0){while(1){h=d;b=0;d=d+4|0;e=d>>>0>g>>>0;d=e?h:b|d;b=!b&(f|0)==2;d=b?h:d;h=2;f=b?h:e?h:f;c=c+1|0;if((l|0)!=(c|0)){continue}break}}p=p+1|0;if((p|0)<(m|0)){continue}break}}if((f|0)==2|(d|0)!=(g|0)){break a}o[a+56|0]=1}}}function RJ(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0;l=ue-112|0;ue=l;m=h;o=i&2147483647;k=c+ -1|0;j=b+ -1|0;if(j>>>0<4294967295){k=k+1|0}n=j;r=(j|0)==-1&(k|0)==-1;p=e&2147483647;j=p;s=d;k=(c|0)==(k|0)&n>>>0>>0|k>>>0>>0;n=d+k|0;if(n>>>0>>0){j=j+1|0}n=n+ -1|0;k=j+ -1|0;j=n;a:{b:{k=j>>>0<4294967295?k+1|0:k;if(!((j|0)==-1&(k|0)==2147418111?r:(k|0)==2147418111&j>>>0>4294967295|k>>>0>2147418111)){k=g+ -1|0;j=f+ -1|0;if(j>>>0<4294967295){k=k+1|0}n=j;r=(j|0)!=-1|(k|0)!=-1;j=o;k=(g|0)==(k|0)&n>>>0>>0|k>>>0>>0;n=k+m|0;if(n>>>0>>0){j=j+1|0}k=n+ -1|0;j=j+ -1|0;j=k>>>0<4294967295?j+1|0:j;if((k|0)==-1&(j|0)==2147418111?r:(j|0)==2147418111&k>>>0<4294967295|j>>>0<2147418111){break b}}if(!(!s&(p|0)==2147418112?!(b|c):(p|0)==2147418112&s>>>0<0|p>>>0<2147418112)){h=d;i=e|32768;f=b;g=c;break a}if(!(!m&(o|0)==2147418112?!(f|g):(o|0)==2147418112&m>>>0<0|o>>>0<2147418112)){i=i|32768;break a}if(!(b|s|(p^2147418112|c))){j=d;d=!(b^f|d^h|(c^g|e^i^-2147483648));h=d?0:j;i=d?2147450880:e;f=d?0:b;g=d?0:c;break a}if(!(f|m|(o^2147418112|g))){break a}if(!(b|s|(c|p))){if(f|m|(g|o)){break a}f=b&f;g=c&g;h=d&h;i=e&i;break a}if(f|m|(g|o)){break b}f=b;g=c;h=d;i=e;break a}k=(m|0)==(s|0)&(o|0)==(p|0)?(c|0)==(g|0)&f>>>0>b>>>0|g>>>0>c>>>0:(o|0)==(p|0)&m>>>0>s>>>0|o>>>0>p>>>0;j=k;p=j?f:b;o=j?g:c;m=j?i:e;s=m;t=j?h:d;n=t;j=m&65535;i=k?e:i;u=i;e=k?d:h;r=i>>>16&32767;m=m>>>16&32767;if(!m){d=!(j|n);h=d<<6;i=z(d?p:n)+32|0;d=z(d?o:j);d=h+((d|0)==32?i:d)|0;MJ(l+96|0,p,o,n,j,d+ -15|0);n=q[l+104>>2];p=q[l+96>>2];o=q[l+100>>2];m=16-d|0;j=q[l+108>>2]}f=k?b:f;g=k?c:g;b=e;c=u&65535;if(r){d=b;b=c}else{i=b;d=!(b|c);h=d<<6;k=z(d?f:b)+32|0;b=z(d?g:c);b=h+((b|0)==32?k:b)|0;MJ(l+80|0,f,g,i,c,b+ -15|0);r=16-b|0;f=q[l+80>>2];g=q[l+84>>2];d=q[l+88>>2];b=q[l+92>>2]}c=d;k=b<<3|c>>>29;h=c<<3|g>>>29;i=k|524288;b=n;d=j<<3|b>>>29;k=b<<3|o>>>29;v=d;t=e^t;n=s^u;b=f;j=g<<3|b>>>29;b=b<<3;c=j;e=m-r|0;d=b;c:{if(!e){break c}if(e>>>0>127){h=0;i=0;j=0;d=1;break c}MJ(l- -64|0,b,c,h,i,128-e|0);PJ(l+48|0,b,c,h,i,e);h=q[l+56>>2];i=q[l+60>>2];j=q[l+52>>2];d=q[l+48>>2]|((q[l+64>>2]|q[l+72>>2])!=0|(q[l+68>>2]|q[l+76>>2])!=0)}g=j;e=k;r=v|524288;b=p;j=o<<3|b>>>29;c=b<<3;d:{if((n|0)<-1?1:(n|0)<=-1?t>>>0>4294967295?0:1:0){o=d;b=c-d|0;p=e-h|0;d=(g|0)==(j|0)&c>>>0>>0|j>>>0>>0;f=p-d|0;c=j-((c>>>0>>0)+g|0)|0;g=(r-((e>>>0>>0)+i|0)|0)-(p>>>0>>0)|0;if(!(b|f|(c|g))){f=0;g=0;h=0;i=0;break a}if((g|0)==524287&f>>>0>4294967295|g>>>0>524287){break d}h=b;d=!(f|g);e=d<<6;i=z(d?b:f)+32|0;b=z(d?c:g);b=e+((b|0)==32?i:b)|0;b=b+ -12|0;MJ(l+32|0,h,c,f,g,b);m=m-b|0;f=q[l+40>>2];g=q[l+44>>2];b=q[l+32>>2];c=q[l+36>>2];break d}k=g+j|0;b=d;c=b+c|0;if(c>>>0>>0){k=k+1|0}b=c;c=k;g=(g|0)==(c|0)&b>>>0>>0|c>>>0>>0;k=i+r|0;d=e+h|0;if(d>>>0>>0){k=k+1|0}f=d;e=g+d|0;d=k;d=e>>>0>>0?d+1|0:d;f=e;g=d;if(!(d&1048576)){break d}b=b&1|((c&1)<<31|b>>>1);c=f<<31|c>>>1;m=m+1|0;f=(g&1)<<31|f>>>1;g=g>>>1|0}h=0;j=s&-2147483648;if((m|0)>=32767){i=j|2147418112;f=0;g=0;break a}e=0;e:{if((m|0)>0){e=m;break e}MJ(l+16|0,b,c,f,g,m+127|0);PJ(l,b,c,f,g,1-m|0);b=q[l>>2]|((q[l+16>>2]|q[l+24>>2])!=0|(q[l+20>>2]|q[l+28>>2])!=0);c=q[l+4>>2];f=q[l+8>>2];g=q[l+12>>2]}h=h|((g&7)<<29|f>>>3);e=j|g>>>3&65535|e<<16;j=f<<29;d=0;f=j;g=(c&7)<<29|b>>>3|d;j=e;d=c>>>3|f;k=d;e=b&7;b=e>>>0>4;c=b+g|0;if(c>>>0>>0){k=k+1|0}b=c;c=k;d=(d|0)==(c|0)&b>>>0>>0|c>>>0>>0;f=d+h|0;if(f>>>0>>0){j=j+1|0}e=(e|0)==4;d=e?b&1:0;i=j;h=f;e=0;j=c+e|0;c=b+d|0;if(c>>>0>>0){j=j+1|0}f=c;b=c;g=j;b=(e|0)==(j|0)&b>>>0>>0|j>>>0>>0;c=h+b|0;if(c>>>0>>0){i=i+1|0}h=c}q[a>>2]=f;q[a+4>>2]=g;q[a+8>>2]=h;q[a+12>>2]=i;ue=l+112|0}function Rf(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;d=ue+ -64|0;ue=d;a:{if(!q[a+332>>2]){break a}c=n[q[q[a>>2]+28>>2]](a)|0;b=q[c>>2];h=0;b:{if(!b){break b}n[q[q[b>>2]>>2]](b)|0;h=q[c>>2]}b=sp(h);g=q[b>>2];if(g){n[q[q[g>>2]>>2]](g)|0;g=q[b>>2]}c=q[a+332>>2];b=q[c>>2];f=c+4|0;if((b|0)!=(f|0)){while(1){e=b;Sf(d+40|0,b+16|0);q[d+32>>2]=0;b=q[d+52>>2];c:{if(!b){break c}n[q[q[b>>2]>>2]](b)|0;b=q[d+32>>2];if(!b){break c}n[q[q[b>>2]+8>>2]](b)|0;q[d+32>>2]=0}q[d+32>>2]=q[d+52>>2];Ho(g,d+32|0);b=q[d+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+32>>2]=0}b=q[d+52>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+52>>2]=0}if(o[d+51|0]<=-1){_U(q[d+40>>2])}c=q[e+4>>2];d:{if(!c){b=q[e+8>>2];if((e|0)==q[b>>2]){break d}c=e+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break d}while(1){b=c;c=q[b>>2];if(c){continue}break}}if((b|0)!=(f|0)){continue}break}c=q[a+332>>2]}b=q[c+12>>2];f=c+16|0;if((b|0)!=(f|0)){while(1){e=b;Sf(d+40|0,b+16|0);q[d+24>>2]=0;b=q[d+52>>2];e:{if(!b){break e}n[q[q[b>>2]>>2]](b)|0;b=q[d+24>>2];if(!b){break e}n[q[q[b>>2]+8>>2]](b)|0;q[d+24>>2]=0}q[d+24>>2]=q[d+52>>2];Ho(g,d+24|0);b=q[d+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+24>>2]=0}b=q[d+52>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+52>>2]=0}if(o[d+51|0]<=-1){_U(q[d+40>>2])}c=q[e+4>>2];f:{if(!c){b=q[e+8>>2];if((e|0)==q[b>>2]){break f}c=e+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break f}while(1){b=c;c=q[b>>2];if(c){continue}break}}if((b|0)!=(f|0)){continue}break}c=q[a+332>>2]}b=q[c+24>>2];f=c+28|0;if((b|0)!=(f|0)){while(1){e=b;Sf(d+40|0,b+16|0);q[d+16>>2]=0;b=q[d+52>>2];g:{if(!b){break g}n[q[q[b>>2]>>2]](b)|0;b=q[d+16>>2];if(!b){break g}n[q[q[b>>2]+8>>2]](b)|0;q[d+16>>2]=0}q[d+16>>2]=q[d+52>>2];Ho(g,d+16|0);b=q[d+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+16>>2]=0}b=q[d+52>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+52>>2]=0}if(o[d+51|0]<=-1){_U(q[d+40>>2])}c=q[e+4>>2];h:{if(!c){b=q[e+8>>2];if((e|0)==q[b>>2]){break h}c=e+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break h}while(1){b=c;c=q[b>>2];if(c){continue}break}}if((b|0)!=(f|0)){continue}break}c=q[a+332>>2]}b=q[c+36>>2];f=c+40|0;if((b|0)!=(f|0)){while(1){e=b;Sf(d+40|0,b+16|0);q[d+8>>2]=0;b=q[d+52>>2];i:{if(!b){break i}n[q[q[b>>2]>>2]](b)|0;b=q[d+8>>2];if(!b){break i}n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0}q[d+8>>2]=q[d+52>>2];Oo(g,d+8|0);b=q[d+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0}b=q[d+52>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+52>>2]=0}if(o[d+51|0]<=-1){_U(q[d+40>>2])}c=q[e+4>>2];j:{if(!c){b=q[e+8>>2];if((e|0)==q[b>>2]){break j}c=e+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break j}while(1){b=c;c=q[b>>2];if(c){continue}break}}if((b|0)!=(f|0)){continue}break}c=q[a+332>>2]}b=q[c+48>>2];f=c+52|0;if((b|0)!=(f|0)){while(1){e=b;Sf(d+40|0,b+16|0);q[d>>2]=0;b=q[d+52>>2];k:{if(!b){break k}n[q[q[b>>2]>>2]](b)|0;b=q[d>>2];if(!b){break k}n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}q[d>>2]=q[d+52>>2];Mo(g,d);b=q[d>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}b=q[d+52>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+52>>2]=0}if(o[d+51|0]<=-1){_U(q[d+40>>2])}c=q[e+4>>2];l:{if(!c){b=q[e+8>>2];if((e|0)==q[b>>2]){break l}c=e+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break l}while(1){b=c;c=q[b>>2];if(c){continue}break}}if((b|0)!=(f|0)){continue}break}c=q[a+332>>2]}q[a+332>>2]=0;if(c){Tf(c+72|0,q[c+76>>2]);Uf(c+60|0,q[c- -64>>2]);Vf(c+48|0,q[c+52>>2]);Wf(c+36|0,q[c+40>>2]);Xf(c+24|0,q[c+28>>2]);Xf(c+12|0,q[c+16>>2]);Xf(c,q[c+4>>2]);_U(c)}if(g){n[q[q[g>>2]+8>>2]](g)|0}if(!h){break a}n[q[q[h>>2]+8>>2]](h)|0}ue=d- -64|0}function HG(a,b){var c=x(0),d=0,g=0,h=0,i=0,l=x(0),m=0,n=x(0),o=x(0),p=x(0),q=0,r=x(0),s=0,t=x(0),v=x(0),w=x(0),z=x(0);l=x(1);a:{b:{m=(k(a),e(0));c:{if((m|0)==1065353216){break c}i=(k(b),e(0));d=i&2147483647;if(!d){break c}h=m&2147483647;if(!(d>>>0<2139095041?h>>>0<=2139095040:0)){return x(a+b)}q=0;d:{if((m|0)>-1){break d}q=2;if(d>>>0>1266679807){break d}q=0;if(d>>>0<1065353216){break d}g=150-(d>>>23|0)|0;s=d>>>g|0;q=0;if((d|0)!=s<>>0>=1065353217){return(i|0)>-1?b:x(0)}return(i|0)>-1?x(0):x(-b)}return(i|0)>-1?a:x(x(1)/a)}if((i|0)==1073741824){return x(a*a)}if(!((i|0)!=1056964608|(m|0)<0)){return x(E(a))}c=x(y(a));if(!(h?(m&1073741823)!=1065353216:0)){l=(i|0)<0?x(x(1)/c):c;if((m|0)>-1){break c}if(!(g|h+ -1065353216)){a=x(l-l);return x(a/a)}return(g|0)==1?x(-l):l}if(!((m|0)>-1|g>>>0>1)){if(g-1){a=x(a-a);return x(a/a)}l=x(-1)}f:{if(d>>>0>=1291845633){if(h>>>0<=1065353207){return(i|0)<0?x(x(l*x(1.0000000150474662e+30))*x(1.0000000150474662e+30)):x(x(l*x(1.0000000031710769e-30))*x(1.0000000031710769e-30))}if(h>>>0>=1065353224){return(i|0)>0?x(x(l*x(1.0000000150474662e+30))*x(1.0000000150474662e+30)):x(x(l*x(1.0000000031710769e-30))*x(1.0000000031710769e-30))}a=x(c+x(-1));c=x(a*x(1.44268798828125));n=x(x(a*x(7052607543300837e-21))+x(x(x(a*a)*x(x(.5)-x(a*x(x(a*x(-.25))+x(.3333333432674408)))))*x(-1.4426950216293335)));a=(f(0,(k(x(c+n)),e(0))&-4096),j());r=x(a-c);break f}d=h>>>0<8388608;h=d?(k(x(c*x(16777216))),e(0)):h;m=h&8388607;g=m|1065353216;h=(h>>23)+(d?-151:-127)|0;d=0;g:{if(m>>>0<1885298){break g}if(m>>>0<6140887){d=1;break g}g=g+ -8388608|0;h=h+1|0}m=d<<2;r=u[m+347712>>2];n=(f(0,g),j());o=u[m+347696>>2];p=x(n-o);t=x(x(1)/x(o+n));c=x(p*t);a=(f(0,(k(c),e(0))&-4096),j());v=x(a*a);w=a;z=p;p=(f(0,((g>>1&-536875008|536870912)+(d<<21)|0)+4194304|0),j());n=x(t*x(x(z-x(a*p))-x(a*x(n-x(p-o)))));p=x(x(c+a)*n);a=x(c*c);o=x(p+x(x(a*a)*x(x(a*x(x(a*x(x(a*x(x(a*x(x(a*x(.20697501301765442))+x(.23066075146198273)))+x(.2727281153202057)))+x(.3333333432674408)))+x(.4285714328289032)))+x(.6000000238418579))));a=(f(0,(k(x(x(v+x(3))+o)),e(0))&-4096),j());p=x(w*a);c=x(x(n*a)+x(c*x(o-x(x(a+x(-3))-v))));a=(f(0,(k(x(p+c)),e(0))&-4096),j());o=x(a*x(.9619140625));n=x(u[m+347704>>2]+x(x(x(c-x(a-p))*x(.9617967009544373))+x(a*x(-.00011736857413779944))));c=x(h|0);a=(f(0,(k(x(x(r+x(o+n))+c)),e(0))&-4096),j());r=x(x(x(a-c)-r)-o)}o=(f(0,i&-4096),j());c=x(a*o);a=x(x(x(n-r)*b)+x(x(b-o)*a));b=x(c+a);g=(k(b),e(0));if((g|0)>=1124073473){break b}d=1124073472;h:{i:{if((g|0)==1124073472){if(!(x(a+x(4.299566569443414e-8))>x(b-c))){break i}break b}d=g&2147483647;if(!(a<=x(b-c)^1|(g|0)!=-1021968384)|d>>>0>=1125515265){break a}i=0;if(d>>>0<1056964609){break h}}d=(8388608>>>(d>>>23|0)+ -126|0)+g|0;h=d>>>23&255;i=(d&8388607|8388608)>>>150-h|0;i=(g|0)<0?0-i|0:i;c=x(c-(f(0,d&-8388608>>h+ -127),j()));g=(k(x(a+c)),e(0))}b=(f(0,g&-32768),j());n=x(b*x(.693145751953125));c=x(x(b*x(14286065379565116e-22))+x(x(a-x(b-c))*x(.6931471824645996)));a=x(n+c);b=x(a*a);b=x(a-x(b*x(x(b*x(x(b*x(x(b*x(x(b*x(4.138136944220605e-8))+x(-16533901998627698e-22)))+x(661375597701408e-19)))+x(-.0027777778450399637)))+x(.1666666716337204))));p=x(x(a*b)/x(b+x(-2)));b=x(c-x(a-n));a=x(x(a-x(p-x(b+x(a*b))))+x(1));g=(k(a),e(0))+(i<<23)|0;j:{if((g|0)<=8388607){a=GG(a,i);break j}a=(f(0,g),j())}l=x(l*a)}return l}return x(x(l*x(1.0000000150474662e+30))*x(1.0000000150474662e+30))}return x(x(l*x(1.0000000031710769e-30))*x(1.0000000031710769e-30))}function Fn(a,b,c,d,e){var f=0,g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),y=x(0),z=x(0),A=x(0);f=ue-576|0;ue=f;a:{if(c==d){a=lV(a,0,96);yp(a);yp(a+16|0);yp(a+32|0);yp(a+48|0);yp(a- -64|0);yp(a+80|0);break a}q[f+572>>2]=1065353216;u[f+568>>2]=d;q[f+564>>2]=1065353216;q[f+556>>2]=1065353216;q[f+560>>2]=1065353216;u[f+552>>2]=d;q[f+548>>2]=1065353216;q[f+540>>2]=1065353216;q[f+544>>2]=-1082130432;u[f+536>>2]=d;q[f+532>>2]=-1082130432;q[f+524>>2]=1065353216;q[f+528>>2]=1065353216;u[f+520>>2]=d;q[f+516>>2]=-1082130432;q[f+508>>2]=1065353216;q[f+512>>2]=-1082130432;u[f+504>>2]=c;q[f+500>>2]=1065353216;q[f+492>>2]=1065353216;q[f+496>>2]=1065353216;u[f+488>>2]=c;q[f+484>>2]=1065353216;q[f+476>>2]=1065353216;q[f+480>>2]=-1082130432;u[f+472>>2]=c;q[f+468>>2]=-1082130432;q[f+460>>2]=1065353216;q[f+464>>2]=1065353216;u[f+456>>2]=c;q[f+448>>2]=-1082130432;q[f+452>>2]=-1082130432;g=oo(f+384|0);to(g,b);n=f+576|0;b=ht(f+320|0,g);j=u[b+4>>2];k=u[b>>2];g=f+448|0;while(1){l=u[b+12>>2];o=u[b+8>>2];p=u[b+28>>2];r=u[b+24>>2];s=u[b+16>>2];t=u[b+20>>2];v=u[b+44>>2];y=u[b+40>>2];z=u[b+32>>2];A=u[b+36>>2];d=u[g+12>>2];m=u[g+8>>2];h=u[g>>2];i=u[g+4>>2];c=x(x(u[b+60>>2]*d)+x(x(u[b+56>>2]*m)+x(x(u[b+48>>2]*h)+x(u[b+52>>2]*i))));u[g+12>>2]=c/c;u[g+8>>2]=x(x(v*d)+x(x(y*m)+x(x(z*h)+x(A*i))))/c;u[g+4>>2]=x(x(p*d)+x(x(r*m)+x(x(s*h)+x(t*i))))/c;u[g>>2]=x(x(l*d)+x(x(o*m)+x(x(k*h)+x(j*i))))/c;g=g+16|0;if((n|0)!=(g|0)){continue}break}q[f+220>>2]=1065353216;q[f+216>>2]=q[f+472>>2];q[f+236>>2]=1065353216;q[f+232>>2]=q[f+488>>2];q[f+204>>2]=1065353216;q[f+200>>2]=q[f+456>>2];b=q[f+452>>2];q[f+192>>2]=q[f+448>>2];q[f+196>>2]=b;b=q[f+468>>2];q[f+208>>2]=q[f+464>>2];q[f+212>>2]=b;b=q[f+484>>2];q[f+224>>2]=q[f+480>>2];q[f+228>>2]=b;b=q[f+500>>2];g=q[f+496>>2];n=q[f+504>>2];q[f+252>>2]=1065353216;q[f+248>>2]=n;q[f+268>>2]=1065353216;q[f+284>>2]=1065353216;q[f+300>>2]=1065353216;q[f+264>>2]=q[f+520>>2];q[f+280>>2]=q[f+536>>2];q[f+296>>2]=q[f+552>>2];q[f+240>>2]=g;q[f+244>>2]=b;b=q[f+516>>2];q[f+256>>2]=q[f+512>>2];q[f+260>>2]=b;b=q[f+532>>2];q[f+272>>2]=q[f+528>>2];q[f+276>>2]=b;b=q[f+548>>2];q[f+288>>2]=q[f+544>>2];q[f+292>>2]=b;q[f+316>>2]=1065353216;q[f+312>>2]=q[f+568>>2];b=q[f+564>>2];q[f+304>>2]=q[f+560>>2];q[f+308>>2]=b;q[f+184>>2]=3;q[f+188>>2]=1;q[f+176>>2]=6;q[f+180>>2]=7;q[f+160>>2]=6;q[f+164>>2]=7;q[f+152>>2]=2;q[f+156>>2]=4;q[f+136>>2]=3;q[f+140>>2]=7;q[f+168>>2]=0;q[f+172>>2]=2;q[f+144>>2]=1;q[f+148>>2]=3;q[f+128>>2]=0;q[f+132>>2]=2;q[f+120>>2]=5;q[f+124>>2]=1;if(!e){q[f+188>>2]=7;q[f+176>>2]=0;q[f+180>>2]=1;q[f+164>>2]=4;q[f+168>>2]=6;q[f+152>>2]=1;q[f+156>>2]=7;q[f+140>>2]=2;q[f+144>>2]=2;q[f+128>>2]=5;q[f+132>>2]=7;q[f+120>>2]=0}yp(f+24|0);yp(f+40|0);yp(f+56|0);yp(f+72|0);yp(f+88|0);yp(f+104|0);b=0;while(1){e=(f+120|0)+w(b,12)|0;g=(f+192|0)+(q[e>>2]<<4)|0;c=u[g+8>>2];n=(f+192|0)+(q[e+8>>2]<<4)|0;h=u[n+8>>2];d=u[g>>2];e=(f+192|0)+(q[e+4>>2]<<4)|0;i=u[e>>2];j=u[n>>2];k=u[e+8>>2];m=u[g+4>>2];l=u[n+4>>2];o=u[e+4>>2];yp(f+8|0);o=x(o-m);p=x(h-c);k=x(k-c);l=x(l-m);h=x(x(o*p)-x(k*l));s=h;r=x(i-d);j=x(j-d);i=x(x(r*l)-x(o*j));l=x(h*h);h=x(x(k*j)-x(r*p));j=x(x(1)/x(E(x(x(i*i)+x(l+x(h*h))))));k=x(s*j);u[f+8>>2]=k;h=x(h*j);u[f+12>>2]=h;g=q[f+12>>2];e=(f+24|0)+(b<<4)|0;q[e>>2]=q[f+8>>2];q[e+4>>2]=g;i=x(i*j);u[f+16>>2]=i;q[e+8>>2]=q[f+16>>2];u[e+12>>2]=x(c*i)+x(x(d*k)+x(m*h));b=b+1|0;if((b|0)!=6){continue}break}kV(a,f+24|0,96)}ue=f+576|0}function Ah(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=q[b>>2];f=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a>>2]=f;e=q[b>>2]+4|0;q[b>>2]=e;f=f+ -1|0;if(f>>>0<=3){a:{switch(f-1|0){default:c=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);d=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[a+4|0]=d;o[a+5|0]=d>>>8;o[a+6|0]=d>>>16;o[a+7|0]=d>>>24;o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);d=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;q[b>>2]=q[b>>2]+16;return;case 0:f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);g=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[a+4|0]=g;o[a+5|0]=g>>>8;o[a+6|0]=g>>>16;o[a+7|0]=g>>>24;o[a+8|0]=f;o[a+9|0]=f>>>8;o[a+10|0]=f>>>16;o[a+11|0]=f>>>24;f=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);e=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[a+12|0]=e;o[a+13|0]=e>>>8;o[a+14|0]=e>>>16;o[a+15|0]=e>>>24;o[a+16|0]=f;o[a+17|0]=f>>>8;o[a+18|0]=f>>>16;o[a+19|0]=f>>>24;e=q[b>>2];q[b>>2]=e+16;q[a+20>>2]=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+24>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+28>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;q[a+32>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=q[b>>2];q[b>>2]=e+4;f=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);q[a+36>>2]=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[a+40>>2]=f;e=q[b>>2]+8|0;q[b>>2]=e;if(!(d|(c|0)<1600)){q[a+44>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[b>>2]=q[b>>2]+4;return}q[a+44>>2]=0;return;case 1:c=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);d=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[a+4|0]=d;o[a+5|0]=d>>>8;o[a+6|0]=d>>>16;o[a+7|0]=d>>>24;o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=r[e+44|0]|r[e+45|0]<<8|(r[e+46|0]<<16|r[e+47|0]<<24);d=r[e+40|0]|r[e+41|0]<<8|(r[e+42|0]<<16|r[e+43|0]<<24);o[a+44|0]=d;o[a+45|0]=d>>>8;o[a+46|0]=d>>>16;o[a+47|0]=d>>>24;o[a+48|0]=c;o[a+49|0]=c>>>8;o[a+50|0]=c>>>16;o[a+51|0]=c>>>24;c=r[e+36|0]|r[e+37|0]<<8|(r[e+38|0]<<16|r[e+39|0]<<24);d=r[e+32|0]|r[e+33|0]<<8|(r[e+34|0]<<16|r[e+35|0]<<24);o[a+36|0]=d;o[a+37|0]=d>>>8;o[a+38|0]=d>>>16;o[a+39|0]=d>>>24;o[a+40|0]=c;o[a+41|0]=c>>>8;o[a+42|0]=c>>>16;o[a+43|0]=c>>>24;c=r[e+28|0]|r[e+29|0]<<8|(r[e+30|0]<<16|r[e+31|0]<<24);d=r[e+24|0]|r[e+25|0]<<8|(r[e+26|0]<<16|r[e+27|0]<<24);o[a+28|0]=d;o[a+29|0]=d>>>8;o[a+30|0]=d>>>16;o[a+31|0]=d>>>24;o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;c=r[e+20|0]|r[e+21|0]<<8|(r[e+22|0]<<16|r[e+23|0]<<24);d=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);o[a+20|0]=d;o[a+21|0]=d>>>8;o[a+22|0]=d>>>16;o[a+23|0]=d>>>24;o[a+24|0]=c;o[a+25|0]=c>>>8;o[a+26|0]=c>>>16;o[a+27|0]=c>>>24;c=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);d=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;q[b>>2]=q[b>>2]+48;return;case 2:break a}}d=lV(_S(92),0,92);gj(d+4|0,x(0));gj(d+48|0,x(0));q[a+4>>2]=d;d=lV(_S(92),0,92);gj(d+4|0,x(0));gj(d+48|0,x(0));e=a+8|0;q[e>>2]=d;a=oj(q[a+4>>2],q[b>>2],c)+q[b>>2]|0;q[b>>2]=a;h=b,i=oj(q[e>>2],a,c)+q[b>>2]|0,q[h>>2]=i}}function gl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,r=0;f=ue-48|0;ue=f;q[a+32>>2]=b;q[a+28>>2]=0;o[a+24|0]=1;q[a+4>>2]=4776;q[a>>2]=4340;c=a+468|0;q[c>>2]=0;q[c+4>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=1;q[a+12>>2]=0;e=lV(a+36|0,0,348);d=a+480|0;q[d>>2]=0;q[d+4>>2]=0;q[a+464>>2]=c;c=a+492|0;q[c>>2]=0;q[c+4>>2]=0;q[a+476>>2]=d;d=a+528|0;q[d>>2]=0;q[d+4>>2]=0;q[a+488>>2]=c;q[a+500>>2]=0;q[a+504>>2]=0;q[a+508>>2]=0;q[a+512>>2]=0;q[a+516>>2]=0;q[a+520>>2]=0;q[a+524>>2]=d;c=YS();if(c){TG();F()}q[a+580>>2]=0;q[a+584>>2]=0;q[a+568>>2]=0;o[a+564|0]=0;q[a+588>>2]=0;q[a+592>>2]=0;q[a+596>>2]=0;q[a+600>>2]=0;q[a+604>>2]=0;q[a+620>>2]=4896;q[a+616>>2]=188;c=a+1136|0;d=a+624|0;g=a+500|0;while(1){zp(d,x(0),x(0),x(0));q[d+12>>2]=0;d=d+16|0;if((c|0)!=(d|0)){continue}break}q[a+1136>>2]=0;q[a+1140>>2]=0;q[a+1184>>2]=0;c=a+1176|0;q[c>>2]=0;q[c+4>>2]=0;c=a+1168|0;q[c>>2]=0;q[c+4>>2]=0;c=a+1160|0;q[c>>2]=0;q[c+4>>2]=0;c=a+1152|0;q[c>>2]=0;q[c+4>>2]=0;c=a+1144|0;q[c>>2]=0;q[c+4>>2]=0;c=_S(32);bp(c);q[f+40>>2]=c;d=q[f+40>>2];q[f+40>>2]=0;c=q[a+568>>2];a:{if(!c){q[a+568>>2]=d;break a}n[q[q[c>>2]+8>>2]](c)|0;c=q[f+40>>2];q[a+568>>2]=d;if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[f+40>>2]=0}q[f+36>>2]=4984;q[f+32>>2]=189;q[f+24>>2]=190;n[q[q[a>>2]+32>>2]](a,f+24|0);c=q[q[f+36>>2]+4>>2];if(c){n[c](q[f+24>>2])}El(g);i=(q[a+32>>2]+15|0)/16|0;c=q[a+40>>2];g=q[a+36>>2];d=(c-g|0)/23072|0;b:{if(i>>>0>d>>>0){Fl(e,i-d|0);c=q[a+40>>2];break b}if(i>>>0>=d>>>0){break b}d=g+w(i,23072)|0;if((d|0)!=(c|0)){while(1){c=c+ -23072|0;if((d|0)!=(c|0)){continue}break}}q[a+40>>2]=d;c=d}e=q[e>>2];if((c|0)!=(e|0)){j=a+72|0;d=q[a+92>>2];k=q[a+88>>2];while(1){g=d+k|0;h=q[a+76>>2];l=q[a+80>>2]-h|0;if((g|0)==((l?(l<<8)+ -1|0:0)|0)){ql(j);h=q[a+76>>2];d=q[a+92>>2];k=q[a+88>>2];g=d+k|0}q[q[(g>>>8&16777212)+h>>2]+((g&1023)<<2)>>2]=e;d=d+1|0;q[a+92>>2]=d;e=e+23072|0;if((c|0)!=(e|0)){continue}break}}k=a+60|0;j=a+48|0;g=i<<2;l=a+384|0;d=a+144|0;m=i>>>0<1073741824;c:{while(1){c=q[d>>2];d:{if(q[d+8>>2]-c>>2>>>0>=i>>>0){break d}if(!m){break c}h=q[d+4>>2];e=_S(g);p=e+g|0;h=h-c|0;r=h+e|0;if((h|0)>=1){kV(e,c,h)}q[d+8>>2]=p;q[d+4>>2]=r;q[d>>2]=e;if(!c){break d}_U(c)}d=d+12|0;if((l|0)!=(d|0)){continue}break}lV(a+384|0,0,80);c=w(b,320);e=q[a+48>>2];d=q[a+52>>2]-e|0;e:{if(c>>>0>d>>>0){Gl(j,c-d|0);break e}if(c>>>0>=d>>>0){break e}q[a+52>>2]=c+e}if((b|0)>=1){i=a+96|0;d=q[a+116>>2];c=q[a+112>>2];e=0;while(1){j=q[a+48>>2]+w(e,320)|0;g=c+d|0;h=q[a+100>>2];l=q[a+104>>2]-h|0;if((g|0)==((l?(l<<8)+ -1|0:0)|0)){ql(i);h=q[a+100>>2];d=q[a+116>>2];c=q[a+112>>2];g=d+c|0}q[q[(g>>>8&16777212)+h>>2]+((g&1023)<<2)>>2]=j;d=d+1|0;q[a+116>>2]=d;e=e+1|0;if((e|0)!=(b|0)){continue}break}}c=w(b,44);e=q[a+60>>2];d=q[a+64>>2]-e|0;f:{if(c>>>0>d>>>0){Gl(k,c-d|0);break f}if(c>>>0>=d>>>0){break f}q[a+64>>2]=c+e}if((b|0)>=1){i=a+120|0;d=q[a+140>>2];c=q[a+136>>2];e=0;while(1){k=q[a+60>>2]+w(e,44)|0;g=c+d|0;h=q[a+124>>2];j=q[a+128>>2]-h|0;if((g|0)==((j?(j<<8)+ -1|0:0)|0)){ql(i);h=q[a+124>>2];d=q[a+140>>2];c=q[a+136>>2];g=d+c|0}q[q[(g>>>8&16777212)+h>>2]+((g&1023)<<2)>>2]=k;d=d+1|0;q[a+140>>2]=d;e=e+1|0;if((e|0)!=(b|0)){continue}break}}a=q[a+568>>2];q[f+8>>2]=0;Zf(f+40|0,f+8|0);q[f+16>>2]=q[f+40>>2];q[f+40>>2]=0;gp(a,f+16|0);a=q[f+16>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+16>>2]=0}a=q[f+40>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+40>>2]=0}a=q[f+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+8>>2]=0}ue=f+48|0;return}Ue(4913);F()}function Hl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;e=ue-16|0;ue=e;q[a+4>>2]=4776;q[a>>2]=4340;c=a;d=q[a+12>>2];if((d|0)!=q[a+16>>2]){Qp(d);d=q[a>>2]}else{d=4340}n[q[d+152>>2]](c);xl(a);ol(a,1);ol(a,1);ol(a,1);ol(a,1);ol(a,1);d=a+1136|0;Il(d);c=q[a+1140>>2];b=q[a+1144>>2];a:{if((c|0)==(b|0)){break a}while(1){_U(q[c>>2]);c=c+4|0;if((b|0)!=(c|0)){continue}break}b=q[a+1144>>2];c=q[a+1140>>2];if((b|0)==(c|0)){break a}q[a+1144>>2]=b+(((b-c|0)+ -4>>>2^-1)<<2)}b=q[d>>2];if(b){_U(b)}b=q[q[a+620>>2]+4>>2];if(b){n[b](q[a+608>>2])}b=q[a+604>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+604>>2]=0}b=q[a+600>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+600>>2]=0}b=q[a+596>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+596>>2]=0}b=q[a+592>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+592>>2]=0}b=q[a+588>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+588>>2]=0}b=q[a+584>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+584>>2]=0}b=q[a+568>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+568>>2]=0}sl(a+524|0,q[a+528>>2]);d=q[a+512>>2];b:{if(!d){break b}c=d;b=q[a+516>>2];f=c;c:{if((c|0)==(b|0)){break c}while(1){c=b+ -288|0;f=q[q[b+ -248>>2]+4>>2];if(f){n[f](q[b+ -260>>2])}b=q[c>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c>>2]=0}b=c;if((b|0)!=(d|0)){continue}break}f=q[a+512>>2]}c=f;q[a+516>>2]=d;b=q[a+520>>2];zt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break b}n[b](q[e>>2])}d=q[a+500>>2];d:{if(!d){break d}c=d;b=q[a+504>>2];f=c;e:{if((c|0)==(b|0)){break e}while(1){c=b+ -288|0;f=q[q[b+ -248>>2]+4>>2];if(f){n[f](q[b+ -260>>2])}b=q[c>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c>>2]=0}b=c;if((b|0)!=(d|0)){continue}break}f=q[a+500>>2]}c=f;q[a+504>>2]=d;b=q[a+508>>2];zt(e);n[q[e+8>>2]](e,c,b-c|0);b=q[q[e+12>>2]+4>>2];if(!b){break d}n[b](q[e>>2])}sl(a+488|0,q[a+492>>2]);sl(a+476|0,q[a+480>>2]);sl(a+464|0,q[a+468>>2]);b=a+384|0;f=a+144|0;while(1){d=b+ -12|0;c=q[d>>2];if(c){q[b+ -8>>2]=c;_U(c)}b=d;if((b|0)!=(f|0)){continue}break}d=a+120|0;Jl(d);c=q[a+124>>2];b=q[a+128>>2];f:{if((c|0)==(b|0)){break f}while(1){_U(q[c>>2]);c=c+4|0;if((b|0)!=(c|0)){continue}break}b=q[a+128>>2];c=q[a+124>>2];if((b|0)==(c|0)){break f}q[a+128>>2]=b+(((b-c|0)+ -4>>>2^-1)<<2)}b=q[d>>2];if(b){_U(b)}d=a+96|0;Jl(d);c=q[a+100>>2];b=q[a+104>>2];g:{if((c|0)==(b|0)){break g}while(1){_U(q[c>>2]);c=c+4|0;if((b|0)!=(c|0)){continue}break}b=q[a+104>>2];c=q[a+100>>2];if((b|0)==(c|0)){break g}q[a+104>>2]=b+(((b-c|0)+ -4>>>2^-1)<<2)}b=q[d>>2];if(b){_U(b)}d=a+72|0;Jl(d);c=q[a+76>>2];b=q[a+80>>2];h:{if((c|0)==(b|0)){break h}while(1){_U(q[c>>2]);c=c+4|0;if((b|0)!=(c|0)){continue}break}b=q[a+80>>2];c=q[a+76>>2];if((b|0)==(c|0)){break h}q[a+80>>2]=b+(((b-c|0)+ -4>>>2^-1)<<2)}b=q[d>>2];if(b){_U(b)}b=q[a+60>>2];i:{if(!b){break i}q[a- -64>>2]=b;d=q[a+68>>2];zt(e);n[q[e+8>>2]](e,b,d-b|0);b=q[q[e+12>>2]+4>>2];if(!b){break i}n[b](q[e>>2])}b=q[a+48>>2];j:{if(!b){break j}q[a+52>>2]=b;d=q[a+56>>2];zt(e);n[q[e+8>>2]](e,b,d-b|0);b=q[q[e+12>>2]+4>>2];if(!b){break j}n[b](q[e>>2])}b=q[a+36>>2];k:{if(!b){break k}d=b;c=q[a+40>>2];if((b|0)!=(c|0)){while(1){c=c+ -23072|0;if((b|0)!=(c|0)){continue}break}d=q[a+36>>2]}q[a+40>>2]=b;b=q[a+44>>2];zt(e);n[q[e+8>>2]](e,d,b-d|0);b=q[q[e+12>>2]+4>>2];if(!b){break k}n[b](q[e>>2])}b=q[a+12>>2];l:{if(!b){break l}c=q[a+16>>2];d=b;m:{if((b|0)==(c|0)){break m}while(1){c=Mp(c+ -148|0);if((b|0)!=(c|0)){continue}break}d=q[a+12>>2]}q[a+16>>2]=b;b=q[a+20>>2];xt(e);n[q[e+8>>2]](e,d,b-d|0);b=q[q[e+12>>2]+4>>2];if(!b){break l}n[b](q[e>>2])}ue=e+16|0;return a|0}function qu(a,b){var c=x(0),d=0,f=0,g=x(0),h=x(0),i=x(0),j=0,l=0,m=0,n=0,o=0,p=x(0),r=0,s=0;f=q[b>>2];u[a>>2]=f|0;s=q[b+4>>2];q[a+8>>2]=0;q[a+12>>2]=0;u[a+4>>2]=s|0;l=w(f,20)+b|0;c=x(1);i=x(1);h=x(1);g=x(1);p=x(1);if(f){i=u[b+24>>2];p=u[b+12>>2];d=q[b+8>>2];h=u[b+20>>2];g=u[b+16>>2]}m=l+4|0;n=l+ -4|0;o=l+ -8|0;r=l+ -12|0;q[a+28>>2]=d;u[a+24>>2]=i*h;u[a+20>>2]=i*g;u[a+16>>2]=i*p;i=x(1);h=x(1);g=x(1);a:{if(!f){break a}if((f|0)==1){j=(k(x(u[r>>2]+x(1))),e(0));c=u[m>>2];i=u[l>>2];h=u[n>>2];g=u[o>>2];break a}c=u[b+44>>2];i=u[b+40>>2];j=q[b+28>>2];h=u[b+36>>2];g=u[b+32>>2]}q[a+44>>2]=j;u[a+40>>2]=c*i;u[a+36>>2]=c*h;u[a+32>>2]=c*g;d=0;i=x(1);h=x(1);g=x(1);p=x(1);j=0;c=x(1);b:{if(!f){break b}if(f>>>0<=2){j=(k(x(u[r>>2]+x(2))),e(0));h=u[l>>2];g=u[n>>2];p=u[o>>2];c=u[m>>2];break b}h=u[b+60>>2];g=u[b+56>>2];p=u[b+52>>2];j=q[b+48>>2];c=u[b- -64>>2]}q[a+60>>2]=j;u[a+56>>2]=c*h;u[a+52>>2]=c*g;u[a+48>>2]=c*p;h=x(1);g=x(1);c=x(1);c:{if(!f){break c}if(f>>>0<=3){d=(k(x(u[r>>2]+x(3))),e(0));i=u[m>>2];h=u[n>>2];g=u[o>>2];c=u[l>>2];break c}i=u[b+84>>2];h=u[b+76>>2];g=u[b+72>>2];d=q[b+68>>2];c=u[b+80>>2]}q[a+76>>2]=d;u[a+72>>2]=i*c;u[a+68>>2]=i*h;u[a+64>>2]=i*g;d=0;i=x(1);h=x(1);g=x(1);p=x(1);j=0;c=x(1);d:{if(!f){break d}if(f>>>0<=4){j=(k(x(u[r>>2]+x(4))),e(0));h=u[l>>2];g=u[n>>2];p=u[o>>2];c=u[m>>2];break d}h=u[b+100>>2];g=u[b+96>>2];p=u[b+92>>2];j=q[b+88>>2];c=u[b+104>>2]}q[a+92>>2]=j;u[a+88>>2]=c*h;u[a+84>>2]=c*g;u[a+80>>2]=c*p;h=x(1);g=x(1);c=x(1);e:{if(!f){break e}if(f>>>0<=5){d=(k(x(u[r>>2]+x(5))),e(0));i=u[m>>2];h=u[n>>2];g=u[o>>2];c=u[l>>2];break e}i=u[b+124>>2];h=u[b+116>>2];g=u[b+112>>2];d=q[b+108>>2];c=u[b+120>>2]}q[a+108>>2]=d;u[a+104>>2]=i*c;u[a+100>>2]=i*h;u[a+96>>2]=i*g;d=0;i=x(1);h=x(1);g=x(1);p=x(1);j=0;c=x(1);f:{if(!f){break f}if(f>>>0<=6){j=(k(x(u[r>>2]+x(6))),e(0));h=u[l>>2];g=u[n>>2];p=u[o>>2];c=u[m>>2];break f}h=u[b+140>>2];g=u[b+136>>2];p=u[b+132>>2];j=q[b+128>>2];c=u[b+144>>2]}q[a+124>>2]=j;u[a+120>>2]=c*h;u[a+116>>2]=c*g;u[a+112>>2]=c*p;h=x(1);g=x(1);c=x(1);g:{if(!f){break g}if(f>>>0<=7){d=(k(x(u[r>>2]+x(7))),e(0));i=u[m>>2];h=u[n>>2];g=u[o>>2];c=u[l>>2];break g}i=u[b+164>>2];h=u[b+156>>2];g=u[b+152>>2];d=q[b+148>>2];c=u[b+160>>2]}q[a+140>>2]=d;u[a+136>>2]=i*c;u[a+132>>2]=i*h;u[a+128>>2]=i*g;d=(s<<3)+b|0;l=d+164|0;m=d+160|0;n=1065353216;o=0;f=0;r=1065353216;j=1065353216;d=0;h:{if(!s){break h}r=q[b+172>>2];f=q[b+168>>2];if((s|0)==1){j=q[l>>2];d=(k(x(u[m>>2]+x(1))),e(0));break h}j=q[b+180>>2];d=q[b+176>>2]}q[a+144>>2]=r;q[a+156>>2]=d;q[a+152>>2]=j;q[a+148>>2]=f;f=0;d=1065353216;i:{if(!s){break i}j:{k:{if(s>>>0<=2){o=(k(x(u[m>>2]+x(2))),e(0));n=q[l>>2];break k}n=q[b+188>>2];o=q[b+184>>2];if((s|0)!=3){break j}}f=(k(x(u[m>>2]+x(3))),e(0));d=q[l>>2];break i}f=q[b+192>>2];d=q[b+196>>2]}q[a+160>>2]=n;q[a+172>>2]=f;q[a+168>>2]=d;q[a+164>>2]=o;o=1065353216;n=0;d=0;j=1065353216;r=1065353216;f=0;l:{if(!s){break l}m:{n:{if(s>>>0<=4){d=(k(x(u[m>>2]+x(4))),e(0));j=q[l>>2];break n}j=q[b+204>>2];d=q[b+200>>2];if((s|0)!=5){break m}}r=q[l>>2];f=(k(x(u[m>>2]+x(5))),e(0));break l}r=q[b+212>>2];f=q[b+208>>2]}q[a+176>>2]=j;q[a+188>>2]=f;q[a+184>>2]=r;q[a+180>>2]=d;f=0;d=1065353216;o:{if(!s){break o}p:{q:{if(s>>>0<=6){n=(k(x(u[m>>2]+x(6))),e(0));o=q[l>>2];break q}o=q[b+220>>2];n=q[b+216>>2];if((s|0)!=7){break p}}f=(k(x(u[m>>2]+x(7))),e(0));d=q[l>>2];break o}f=q[b+224>>2];d=q[b+228>>2]}q[a+192>>2]=o;q[a+204>>2]=f;q[a+200>>2]=d;q[a+196>>2]=n}function co(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=x(0),o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),E=0;f=ue-96|0;ue=f;m=fo(a,b,c,e);g=d;h=q[g+268>>2];k=f+72|0;j=k;q[j>>2]=q[g+264>>2];q[j+4>>2]=h;l=q[g+260>>2];j=f- -64|0;h=j;q[h>>2]=q[g+256>>2];q[h+4>>2]=l;i=q[g+252>>2];h=f+56|0;q[h>>2]=q[g+248>>2];q[h+4>>2]=i;E=q[g+244>>2];l=f+48|0;i=l;q[i>>2]=q[g+240>>2];q[i+4>>2]=E;i=q[g+236>>2];q[f+40>>2]=q[g+232>>2];q[f+44>>2]=i;i=q[g+228>>2];q[f+32>>2]=q[g+224>>2];q[f+36>>2]=i;Xs(f+80|0,f+32|0);g=nt(f+16|0,q[e>>2]+72|0);n=u[g+8>>2];o=u[g>>2];p=u[g+4>>2];r=u[f+88>>2];s=u[f+80>>2];t=u[f+84>>2];g=nt(f,q[e>>2]+84|0);v=u[g+8>>2];w=u[g>>2];y=u[g+4>>2];g=c;i=q[g+268>>2];q[k>>2]=q[g+264>>2];q[k+4>>2]=i;i=q[g+260>>2];q[j>>2]=q[g+256>>2];q[j+4>>2]=i;i=q[g+252>>2];q[h>>2]=q[g+248>>2];q[h+4>>2]=i;i=q[g+244>>2];q[l>>2]=q[g+240>>2];q[l+4>>2]=i;i=q[g+236>>2];q[f+40>>2]=q[g+232>>2];q[f+44>>2]=i;i=q[g+228>>2];q[f+32>>2]=q[g+224>>2];q[f+36>>2]=i;Xs(f+80|0,f+32|0);g=nt(f+16|0,q[e>>2]+72|0);z=u[g+8>>2];A=u[g+4>>2];B=u[f+84>>2];C=u[f+88>>2];D=x(u[f+80>>2]-u[g>>2]);g=nt(f,q[e>>2]+84|0);a:{if(!(x(x(x(w*x(s-o))+x(y*x(t-p)))+x(v*x(r-n)))>x(x(x(D*u[g>>2])+x(x(B-A)*u[g+4>>2]))+x(x(C-z)*u[g+8>>2])))){break a}bo(c,d);d=c+224|0;g=q[d+44>>2];q[k>>2]=q[d+40>>2];q[k+4>>2]=g;g=q[d+36>>2];q[j>>2]=q[d+32>>2];q[j+4>>2]=g;g=q[d+28>>2];q[h>>2]=q[d+24>>2];q[h+4>>2]=g;g=q[d+20>>2];q[l>>2]=q[d+16>>2];q[l+4>>2]=g;g=q[d+12>>2];q[f+40>>2]=q[d+8>>2];q[f+44>>2]=g;g=q[d+4>>2];q[f+32>>2]=q[d>>2];q[f+36>>2]=g;Xs(f+80|0,f+32|0);d=nt(f+16|0,q[e>>2]+72|0);n=u[d+8>>2];o=u[d>>2];p=u[d+4>>2];r=u[f+88>>2];s=u[f+80>>2];t=u[f+84>>2];d=nt(f,q[e>>2]+84|0);v=u[d+8>>2];w=u[d>>2];y=u[d+4>>2];d=b;g=q[d+268>>2];q[k>>2]=q[d+264>>2];q[k+4>>2]=g;g=q[d+260>>2];q[j>>2]=q[d+256>>2];q[j+4>>2]=g;g=q[d+252>>2];q[h>>2]=q[d+248>>2];q[h+4>>2]=g;g=q[d+244>>2];q[l>>2]=q[d+240>>2];q[l+4>>2]=g;g=q[d+236>>2];q[f+40>>2]=q[d+232>>2];q[f+44>>2]=g;g=q[d+228>>2];q[f+32>>2]=q[d+224>>2];q[f+36>>2]=g;Xs(f+80|0,f+32|0);d=nt(f+16|0,q[e>>2]+72|0);z=u[d+8>>2];A=u[d+4>>2];B=u[f+84>>2];C=u[f+88>>2];D=x(u[f+80>>2]-u[d>>2]);d=nt(f,q[e>>2]+84|0);if(!(x(x(x(w*x(s-o))+x(y*x(t-p)))+x(v*x(r-n)))>x(x(x(D*u[d>>2])+x(x(B-A)*u[d+4>>2]))+x(x(C-z)*u[d+8>>2])))){m=m+1|0;break a}bo(b,c);c=b+224|0;k=q[c+44>>2];d=f+72|0;g=d;q[g>>2]=q[c+40>>2];q[g+4>>2]=k;j=q[c+36>>2];g=f- -64|0;q[g>>2]=q[c+32>>2];q[g+4>>2]=j;h=q[c+28>>2];k=f+56|0;j=k;q[j>>2]=q[c+24>>2];q[j+4>>2]=h;l=q[c+20>>2];j=f+48|0;h=j;q[h>>2]=q[c+16>>2];q[h+4>>2]=l;h=q[c+12>>2];q[f+40>>2]=q[c+8>>2];q[f+44>>2]=h;h=q[c+4>>2];q[f+32>>2]=q[c>>2];q[f+36>>2]=h;Xs(f+80|0,f+32|0);c=nt(f+16|0,q[e>>2]+72|0);n=u[c+8>>2];o=u[c>>2];p=u[c+4>>2];r=u[f+88>>2];s=u[f+80>>2];t=u[f+84>>2];c=nt(f,q[e>>2]+84|0);v=u[c+8>>2];w=u[c>>2];y=u[c+4>>2];c=a;h=q[c+268>>2];q[d>>2]=q[c+264>>2];q[d+4>>2]=h;d=q[c+260>>2];q[g>>2]=q[c+256>>2];q[g+4>>2]=d;d=q[c+252>>2];q[k>>2]=q[c+248>>2];q[k+4>>2]=d;d=q[c+244>>2];q[j>>2]=q[c+240>>2];q[j+4>>2]=d;d=q[c+236>>2];q[f+40>>2]=q[c+232>>2];q[f+44>>2]=d;d=q[c+228>>2];q[f+32>>2]=q[c+224>>2];q[f+36>>2]=d;Xs(f+80|0,f+32|0);c=nt(f+16|0,q[e>>2]+72|0);z=u[c+8>>2];A=u[c+4>>2];B=u[f+84>>2];C=u[f+88>>2];D=x(u[f+80>>2]-u[c>>2]);c=nt(f,q[e>>2]+84|0);if(!(x(x(x(w*x(s-o))+x(y*x(t-p)))+x(v*x(r-n)))>x(x(x(D*u[c>>2])+x(x(B-A)*u[c+4>>2]))+x(x(C-z)*u[c+8>>2])))){m=m+2|0;break a}bo(a,b);m=m+3|0}ue=f+96|0;return m}function ol(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;p=a+488|0;d=q[p>>2];k=a+492|0;if((d|0)!=(k|0)){l=a+120|0;g=a+384|0;i=a+144|0;while(1){if(q[d+248>>2]<=1){j=d- -64|0;c=i;while(1){e=q[c>>2];h=q[c+4>>2];a:{if((e|0)==(h|0)){break a}while(1){lk(q[e>>2],q[d+72>>2]);e=e+4|0;if((h|0)!=(e|0)){continue}break}e=q[c>>2];h=q[c+4>>2];if((e|0)==(h|0)){break a}while(1){mk(q[e>>2],q[d+72>>2]);e=e+4|0;if((h|0)!=(e|0)){continue}break}}c=c+12|0;if((g|0)!=(c|0)){continue}break}pl(a,j);q[d+248>>2]=q[d+248>>2]+1}c=q[d+68>>2];if(c){qk(c,1);f=q[d+68>>2];n[q[q[f>>2]>>2]](f)|0;j=q[a+140>>2];e=j+q[a+136>>2]|0;c=q[a+124>>2];h=q[a+128>>2]-c|0;if((e|0)==((h?(h<<8)+ -1|0:0)|0)){ql(l);j=q[a+140>>2];e=j+q[a+136>>2]|0;c=q[a+124>>2]}q[q[c+(e>>>8&16777212)>>2]+((e&1023)<<2)>>2]=f;q[a+140>>2]=j+1}c=q[d+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d+64>>2]=0}q[d+64>>2]=0;c=q[d+72>>2];if(c){n[q[q[c>>2]+4>>2]](c);q[d+72>>2]=0}d=rl(p,d);if((k|0)!=(d|0)){continue}break}}sl(p,q[a+492>>2]);q[a+488>>2]=k;q[a+492>>2]=0;q[a+496>>2]=0;k=a+476|0;d=q[a+476>>2];f=a+480|0;if((d|0)!=(f|0)){l=a+384|0;i=a+144|0;while(1){g=d+32|0;if(q[d+248>>2]<=0){j=d- -64|0;c=i;while(1){e=q[c>>2];h=q[c+4>>2];b:{if((e|0)==(h|0)){break b}while(1){lk(q[e>>2],q[d+72>>2]);e=e+4|0;if((h|0)!=(e|0)){continue}break}e=q[c>>2];h=q[c+4>>2];if((e|0)==(h|0)){break b}while(1){mk(q[e>>2],q[d+72>>2]);e=e+4|0;if((h|0)!=(e|0)){continue}break}}c=c+12|0;if((l|0)!=(c|0)){continue}break}pl(a,j);q[d+248>>2]=q[d+248>>2]+1}g=kl(p,g);c=q[d+64>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[g>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[g>>2]=0}q[g>>2]=q[d+64>>2];e=r[d+85|0]|r[d+86|0]<<8|(r[d+87|0]<<16|r[d+88|0]<<24);c=r[d+81|0]|r[d+82|0]<<8|(r[d+83|0]<<16|r[d+84|0]<<24);o[g+17|0]=c;o[g+18|0]=c>>>8;o[g+19|0]=c>>>16;o[g+20|0]=c>>>24;o[g+21|0]=e;o[g+22|0]=e>>>8;o[g+23|0]=e>>>16;o[g+24|0]=e>>>24;c=q[d+80>>2];q[g+12>>2]=q[d+76>>2];q[g+16>>2]=c;c=q[d+72>>2];q[g+4>>2]=q[d+68>>2];q[g+8>>2]=c;h=q[d+100>>2];e=q[d+96>>2];m=q[d+92>>2];j=q[d+104>>2];c=q[j>>2];if(c){m=n[c](m)|0}q[g+36>>2]=h;h=q[g+28>>2];q[g+28>>2]=m;q[g+32>>2]=e;e=g+40|0;c=q[e>>2];q[e>>2]=j;c=q[c+4>>2];if(c){n[c](h)}kV(g+44|0,d+108|0,228);d=rl(k,d);if((f|0)!=(d|0)){continue}break}}sl(k,q[a+480>>2]);q[a+476>>2]=f;q[a+480>>2]=0;q[a+484>>2]=0;d=q[a+464>>2];l=a+468|0;if((d|0)!=(l|0)){g=a+464|0;while(1){c=d;c:{if(r[c+83|0]){d=c+32|0;if(!r[q[c+104>>2]+8|0]){n[q[c+100>>2]](c+92|0,a,q[c+32>>2],b)}f=kl(k,d);d=q[c+64>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[f>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[f>>2]=0}q[f>>2]=q[c+64>>2];i=r[c+85|0]|r[c+86|0]<<8|(r[c+87|0]<<16|r[c+88|0]<<24);d=r[c+81|0]|r[c+82|0]<<8|(r[c+83|0]<<16|r[c+84|0]<<24);o[f+17|0]=d;o[f+18|0]=d>>>8;o[f+19|0]=d>>>16;o[f+20|0]=d>>>24;o[f+21|0]=i;o[f+22|0]=i>>>8;o[f+23|0]=i>>>16;o[f+24|0]=i>>>24;d=q[c+80>>2];q[f+12>>2]=q[c+76>>2];q[f+16>>2]=d;d=q[c+72>>2];q[f+4>>2]=q[c+68>>2];q[f+8>>2]=d;e=q[c+100>>2];j=q[c+96>>2];d=q[c+92>>2];h=q[c+104>>2];i=q[h>>2];if(i){d=n[i](d)|0}q[f+36>>2]=e;e=q[f+28>>2];q[f+28>>2]=d;q[f+32>>2]=j;i=f+40|0;d=q[i>>2];q[i>>2]=h;d=q[d+4>>2];if(d){n[d](e)}kV(f+44|0,c+108|0,228);d=rl(g,c);break c}e=q[c+4>>2];if(!e){d=q[c+8>>2];if((c|0)==q[d>>2]){break c}m=c+8|0;while(1){c=q[m>>2];m=c+8|0;d=q[c+8>>2];if((c|0)!=q[d>>2]){continue}break}break c}while(1){d=e;e=q[d>>2];if(e){continue}break}}if((d|0)!=(l|0)){continue}break}}}function If(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;a=ue-80|0;ue=a;d=sp(q[n[q[q[b>>2]+28>>2]](b)>>2]);f=q[d>>2];if(f){n[q[q[f>>2]>>2]](f)|0;f=q[d>>2]}if((n[q[q[b>>2]+48>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+44>>2]](a- -64|0,b,d);q[a+72>>2]=q[a+64>>2];q[a+64>>2]=0;Ho(f,a+72|0);c=q[a+72>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+72>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+40>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+48>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+60>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+56>>2]](a- -64|0,b,d);q[a+56>>2]=q[a+64>>2];q[a+64>>2]=0;Ho(f,a+56|0);c=q[a+56>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+56>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+64>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+60>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+72>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+68>>2]](a- -64|0,b,d);q[a+48>>2]=q[a+64>>2];q[a+64>>2]=0;Ho(f,a+48|0);c=q[a+48>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+48>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+88>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+72>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+84>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+80>>2]](a- -64|0,b,d);q[a+40>>2]=q[a+64>>2];q[a+64>>2]=0;Oo(f,a+40|0);c=q[a+40>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+40>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+112>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+84>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+96>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+92>>2]](a- -64|0,b,d);q[a+32>>2]=q[a+64>>2];q[a+64>>2]=0;Mo(f,a+32|0);c=q[a+32>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+32>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+136>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+96>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+108>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+104>>2]](a- -64|0,b,d);q[a+24>>2]=q[a+64>>2];q[a+64>>2]=0;Qo(f,a+24|0);c=q[a+24>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+24>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+184>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+108>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+120>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+116>>2]](a- -64|0,b,d);q[a+16>>2]=q[a+64>>2];q[a+64>>2]=0;So(f,a+16|0);c=q[a+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+16>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+208>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+120>>2]](b)|0)){continue}break}}if((n[q[q[b>>2]+132>>2]](b)|0)>=1){d=0;while(1){n[q[q[b>>2]+128>>2]](a- -64|0,b,d);q[a+8>>2]=q[a+64>>2];q[a+64>>2]=0;Xo(f,a+8|0);c=q[a+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}c=q[b+148>>2]+(d<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;d=d+1|0;if((d|0)<(n[q[q[b>>2]+132>>2]](b)|0)){continue}break}}if(f){n[q[q[f>>2]+8>>2]](f)|0}ue=a+80|0}function PO(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,w=0,x=0;l=ue-560|0;ue=l;q[l+548>>2]=k;q[l+552>>2]=b;q[l+104>>2]=858;s=rL(l+136|0,l+144|0,l+104|0);b=q[s>>2];q[l+132>>2]=b;q[l+128>>2]=b+400;u=CL(l+104|0);p=CL(l+88|0);m=CL(l+72|0);n=CL(l+56|0);t=CL(l+40|0);QO(c,d,l+120|0,l+119|0,l+118|0,u,p,m,n,l+36|0);q[j>>2]=q[i>>2];v=e&512;b=0;e=0;while(1){k=e;a:{b:{c:{d:{if((b|0)==4){break d}if(!GH(a,l+552|0)){break d}c=o[(l+120|0)+b|0];if(c>>>0>4){break b}e=0;e:{f:{g:{h:{i:{switch(c-1|0){case 0:if((b|0)==3){break b}if(IH(h,8192,HH(a))){RO(l+24|0,a);AT(t,o[l+24|0]);break h}q[f>>2]=q[f>>2]|4;a=0;break c;case 3:break e;case 1:break f;case 2:break g;default:break i}}if((b|0)==3){break b}}while(1){if(!GH(a,l+552|0)){break b}if(!IH(h,8192,HH(a))){break b}RO(l+24|0,a);AT(t,o[l+24|0]);continue}}if((uL(m)|0)==(0-uL(n)|0)){break b}j:{if(uL(m)){if(uL(n)){break j}}d=uL(m);c=HH(a);if(d){if(r[vL(m,0)|0]==(c&255)){JH(a);e=uL(m)>>>0>1?m:k;break a}o[g|0]=1;break b}if(r[vL(n,0)|0]!=(c&255)){break b}JH(a);o[g|0]=1;e=uL(n)>>>0>1?n:k;break a}if((HH(a)&255)==r[vL(m,0)|0]){JH(a);e=uL(m)>>>0>1?m:k;break a}if((HH(a)&255)==r[vL(n,0)|0]){JH(a);o[g|0]=1;e=uL(n)>>>0>1?n:k;break a}q[f>>2]=q[f>>2]|4;a=0;break c}if(!(v|(k|b>>>0<2))){e=0;if(!((b|0)==2&r[l+123|0]!=0)){break a}}w=l,x=VM(p),q[w+16>>2]=x;c=SO(l+24|0,l+16|0);k:{if(!b|r[(b+l|0)+119|0]>1){break k}while(1){l:{w=l,x=WM(p),q[w+16>>2]=x;if(!XM(c,l+16|0)){break l}if(!IH(h,8192,o[q[c>>2]])){break l}YM(c);continue}break}w=l,x=VM(p),q[w+16>>2]=x;c=q[c>>2]-q[l+16>>2]|0;if(c>>>0<=uL(t)>>>0){w=l,x=WM(t),q[w+16>>2]=x;if(eP(fP(l+16|0,0-c|0),WM(t),VM(p))){break k}}w=l,x=VM(p),q[w+8>>2]=x;SO(l+16|0,l+8|0);q[l+24>>2]=q[l+16>>2]}q[l+16>>2]=q[l+24>>2];while(1){m:{w=l,x=WM(p),q[w+8>>2]=x;if(!XM(l+16|0,l+8|0)){break m}if(!GH(a,l+552|0)){break m}if((HH(a)&255)!=r[q[l+16>>2]]){break m}JH(a);YM(l+16|0);continue}break}if(!v){break b}w=l,x=WM(p),q[w+8>>2]=x;if(!XM(l+16|0,l+8|0)){break b}q[f>>2]=q[f>>2]|4;a=0;break c}while(1){n:{if(!GH(a,l+552|0)){break n}c=HH(a);o:{if(IH(h,2048,c)){d=q[j>>2];if((d|0)==q[l+548>>2]){TO(i,j,l+548|0);d=q[j>>2]}q[j>>2]=d+1;o[d|0]=c;e=e+1|0;break o}if(!e|!uL(u)|r[l+118|0]!=(c&255)){break n}c=q[l+132>>2];if((c|0)==q[l+128>>2]){UO(s,l+132|0,l+128|0);c=q[l+132>>2]}q[l+132>>2]=c+4;q[c>>2]=e;e=0}JH(a);continue}break}d=q[s>>2];p:{if(!e){break p}c=q[l+132>>2];if((d|0)==(c|0)){break p}if(q[l+128>>2]==(c|0)){UO(s,l+132|0,l+128|0);c=q[l+132>>2]}q[l+132>>2]=c+4;q[c>>2]=e}q:{if(q[l+36>>2]<1){break q}r:{if(!KH(a,l+552|0)){if((HH(a)&255)==r[l+119|0]){break r}}q[f>>2]=q[f>>2]|4;a=0;break c}while(1){JH(a);if(q[l+36>>2]<1){break q}s:{if(!KH(a,l+552|0)){if(IH(h,2048,HH(a))){break s}}q[f>>2]=q[f>>2]|4;a=0;break c}if(q[j>>2]==q[l+548>>2]){TO(i,j,l+548|0)}c=HH(a);d=q[j>>2];q[j>>2]=d+1;o[d|0]=c;q[l+36>>2]=q[l+36>>2]+ -1;continue}}e=k;if(q[i>>2]!=q[j>>2]){break a}q[f>>2]=q[f>>2]|4;a=0;break c}t:{if(!k){break t}e=1;while(1){if(e>>>0>=uL(k)>>>0){break t}u:{if(!KH(a,l+552|0)){if((HH(a)&255)==r[vL(k,e)|0]){break u}}q[f>>2]=q[f>>2]|4;a=0;break c}JH(a);e=e+1|0;continue}}a=1;if(q[s>>2]==q[l+132>>2]){break c}a=0;q[l+24>>2]=0;HL(u,q[s>>2],q[l+132>>2],l+24|0);if(q[l+24>>2]){q[f>>2]=q[f>>2]|4;break c}a=1}oT(t);oT(n);oT(m);oT(p);oT(u);wL(s);ue=l+560|0;return a}e=k}b=b+1|0;continue}}function KJ(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,u=0,v=0;m=ue-16|0;ue=m;a:{b:{c:{d:{e:{f:{if(b>>>0<=36){while(1){f=q[a+4>>2];g:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break g}f=HJ(a)}if(FJ(f)){continue}break}j=f+ -43|0;h:{if(j>>>0>2|!(j-1)){break h}n=(f|0)==45?-1:0;f=q[a+4>>2];if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break h}f=HJ(a)}i:{if(!(b&-17|(f|0)!=48)){f=q[a+4>>2];j:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break j}f=HJ(a)}if((f&-33)==88){b=16;f=q[a+4>>2];k:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break k}f=HJ(a)}if(r[f+349969|0]<16){break e}if(!q[a+104>>2]){d=0;e=0;if(c){break a}break b}b=q[a+4>>2];q[a+4>>2]=b+ -1;if(!c){break b}q[a+4>>2]=b+ -2;d=0;e=0;break a}if(b){break i}b=8;break e}b=b?b:10;if(b>>>0>r[f+349969|0]){break i}if(q[a+104>>2]){q[a+4>>2]=q[a+4>>2]+ -1}d=0;e=0;GJ(a,0,0);q[91802]=28;break a}if((b|0)!=10){break e}c=f+ -48|0;if(c>>>0<=9){b=0;while(1){b=w(b,10)+c|0;c=q[a+4>>2];l:{if(c>>>0>2]){q[a+4>>2]=c+1;f=r[c|0];break l}f=HJ(a)}c=f+ -48|0;if(b>>>0<429496729?c>>>0<=9:0){continue}break}g=b}if(c>>>0>9){break f}i=vW(g,0,10,0);b=we;while(1){h=b;b=c+i|0;if(b>>>0>>0){h=h+1|0}g=b;j=(h|0)==429496729&b>>>0>=2576980378|h>>>0>429496729;b=q[a+4>>2];m:{if(b>>>0>2]){q[a+4>>2]=b+1;f=r[b|0];break m}f=HJ(a)}c=f+ -48|0;if(j|c>>>0>9){break f}i=vW(g,h,10,0);b=we;if((b|0)==-1&i>>>0<=(c^-1)>>>0|b>>>0<4294967295){continue}break}b=10;break d}q[91802]=28;d=0;e=0;break a}b=10;if(c>>>0<=9){break d}break c}if(b+ -1&b){c=r[f+349969|0];if(b>>>0>c>>>0){while(1){g=w(b,g)+c|0;i=g>>>0<=119304646;j=b;f=q[a+4>>2];n:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break n}f=HJ(a)}c=r[f+349969|0];if(j>>>0>c>>>0?i:0){continue}break}}if(b>>>0<=c>>>0){break d}k=b;while(1){l=vW(g,h,k,0);j=we;i=j;c=c&255;if((i|0)==-1&l>>>0>(c^-1)>>>0|i>>>0>4294967295){break d}h=j;f=c+l|0;if(f>>>0>>0){h=h+1|0}g=f;j=b;f=q[a+4>>2];o:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break o}f=HJ(a)}c=r[f+349969|0];if(j>>>0<=c>>>0){break d}JJ(m,k,0,g,h);if(!(q[m+8>>2]|q[m+12>>2])){continue}break}break d}l=o[(w(b,23)>>>5&7)+350225|0];j=l;c=j;i=c&31;if(32<=(c&63)>>>0){p=-1>>>i|0}else{k=-1>>>i|0;p=(1<>>i}i=p;s=k;c=r[f+349969|0];if(b>>>0>c>>>0){while(1){g=g<>>0<=134217727;v=b;f=q[a+4>>2];p:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break p}f=HJ(a)}c=r[f+349969|0];if(v>>>0>c>>>0?u:0){continue}break}}if(!s&i>>>0>>0|s>>>0<0|b>>>0<=c>>>0){break d}while(1){i=c&255;f=g;c=j;g=c&31;if(32<=(c&63)>>>0){h=f<>>32-g|h<>2];q:{if(c>>>0>2]){q[a+4>>2]=c+1;f=r[c|0];break q}f=HJ(a)}if((h|0)==(k|0)&g>>>0>p>>>0|h>>>0>k>>>0){break d}c=r[f+349969|0];if(b>>>0>c>>>0){continue}break}}if(b>>>0<=r[f+349969|0]){break c}while(1){c=b;f=q[a+4>>2];r:{if(f>>>0>2]){q[a+4>>2]=f+1;f=r[f|0];break r}f=HJ(a)}if(c>>>0>r[f+349969|0]){continue}break}q[91802]=68;n=d&1?0:n;g=d;h=e}if(q[a+104>>2]){q[a+4>>2]=q[a+4>>2]+ -1}s:{if((e|0)==(h|0)&g>>>0>>0|h>>>0>>0){break s}if(!(n|d&1)){q[91802]=68;e=e+ -1|0;a=d+ -1|0;if(a>>>0<4294967295){e=e+1|0}d=a;break a}if((e|0)==(h|0)&g>>>0<=d>>>0|h>>>0>>0){break s}q[91802]=68;break a}a=n;c=a^g;d=c-a|0;b=a>>31;e=(b^h)-(b+(c>>>0>>0)|0)|0;break a}d=0;e=0;GJ(a,0,0)}ue=m+16|0;we=e;return d}function Rs(a,b,c,d,e,f,g){var h=0,i=x(0),j=x(0),k=x(0),l=0,m=0,o=x(0),p=0,r=0,s=x(0);h=ue-160|0;ue=h;l=q[b>>2];a:{if(l>>>0>5){break a}b:{switch(l-1|0){default:m=b+8|0;nt(h+128|0,m);p=q[h+140>>2];l=a+8|0;q[l>>2]=q[h+136>>2];q[l+4>>2]=p;p=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=p;if(q[b+4>>2]<0){break a}Gs(h+128|0,d,e,f,c,b+4|0,nt(h+96|0,m),g+24|0,g+36|0);b=q[h+140>>2];q[l>>2]=q[h+136>>2];q[l+4>>2]=b;b=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=b;break a;case 0:l=q[b+56>>2];q[h+56>>2]=q[b+52>>2];q[h+60>>2]=l;l=q[b+64>>2];m=h- -64|0;q[m>>2]=q[b+60>>2];q[m+4>>2]=l;l=q[b+48>>2];q[h+48>>2]=q[b+44>>2];q[h+52>>2]=l;l=g+24|0;g=g+36|0;Js(h+128|0,d,e,f,c,b+20|0,h+48|0,l,g);m=q[b+80>>2];q[h+32>>2]=q[b+76>>2];q[h+36>>2]=m;m=q[b+88>>2];q[h+40>>2]=q[b+84>>2];q[h+44>>2]=m;m=q[b+72>>2];q[h+24>>2]=q[b+68>>2];q[h+28>>2]=m;Js(h+96|0,d,e,f,c,b+28|0,h+24|0,l,g);m=q[b+104>>2];q[h+8>>2]=q[b+100>>2];q[h+12>>2]=m;m=q[b+112>>2];q[h+16>>2]=q[b+108>>2];q[h+20>>2]=m;m=q[b+96>>2];q[h>>2]=q[b+92>>2];q[h+4>>2]=m;Js(h+72|0,d,e,f,c,b+36|0,h,l,g);i=x(n[q[q[c>>2]+16>>2]](c,u[h+140>>2],u[h+128>>2]));j=x(n[q[q[c>>2]+16>>2]](c,u[h+144>>2],u[h+132>>2]));k=x(n[q[q[c>>2]+16>>2]](c,u[h+148>>2],u[h+136>>2]));q[a+12>>2]=1065353216;u[a+8>>2]=k;u[a+4>>2]=j;u[a>>2]=i;i=x(n[q[q[c>>2]+16>>2]](c,u[h+108>>2],u[h+96>>2]));j=x(n[q[q[c>>2]+16>>2]](c,u[h+112>>2],u[h+100>>2]));k=x(n[q[q[c>>2]+16>>2]](c,u[h+116>>2],u[h+104>>2]));q[a+28>>2]=1065353216;u[a+24>>2]=k;u[a+20>>2]=j;u[a+16>>2]=i;i=x(n[q[q[c>>2]+16>>2]](c,u[h+84>>2],u[h+72>>2]));j=x(n[q[q[c>>2]+16>>2]](c,u[h+88>>2],u[h+76>>2]));k=x(n[q[q[c>>2]+16>>2]](c,u[h+92>>2],u[h+80>>2]));q[a+44>>2]=1065353216;u[a+40>>2]=k;u[a+36>>2]=j;u[a+32>>2]=i;break a;case 1:Cs(b+116|0,a,d,e,f,c,g+24|0,g+36|0);break a;case 2:r=a,s=x(n[q[q[c>>2]+16>>2]](c,u[b+308>>2],u[b+304>>2])),u[r+32>>2]=s;r=a,s=x(n[q[q[c>>2]+16>>2]](c,u[b+316>>2],u[b+312>>2])),u[r+36>>2]=s;r=a,s=x(n[q[q[c>>2]+16>>2]](c,u[b+324>>2],u[b+320>>2])),u[r+40>>2]=s;q[a>>2]=q[a+32>>2];i=x(n[q[q[c>>2]+16>>2]](c,u[b+292>>2],u[b+280>>2]));j=x(n[q[q[c>>2]+16>>2]](c,u[b+296>>2],u[b+284>>2]));k=x(n[q[q[c>>2]+16>>2]](c,u[b+300>>2],u[b+288>>2]));q[a+28>>2]=1065353216;u[a+24>>2]=k;u[a+20>>2]=j;u[a+16>>2]=i;if(!!(x(E(x(x(x(i*i)+x(j*j))+x(k*k))))>2]=0;q[a+28>>2]=1065353216;q[a+16>>2]=0;q[a+20>>2]=1065353216;j=x(1);k=x(0);i=x(0)}o=x(x(1)/x(E(x(x(x(i*i)+x(j*j))+x(k*k)))));u[a+28>>2]=o;u[a+24>>2]=k*o;u[a+20>>2]=j*o;u[a+16>>2]=i*o;break a;case 3:r=a,s=x(n[q[q[c>>2]+16>>2]](c,u[b+392>>2],u[b+388>>2])),u[r+32>>2]=s;r=a,s=x(n[q[q[c>>2]+16>>2]](c,u[b+400>>2],u[b+396>>2])),u[r+40>>2]=s;q[a>>2]=q[a+32>>2];i=x(n[q[q[c>>2]+16>>2]](c,u[b+340>>2],u[b+328>>2]));j=x(n[q[q[c>>2]+16>>2]](c,u[b+344>>2],u[b+332>>2]));k=x(n[q[q[c>>2]+16>>2]](c,u[b+348>>2],u[b+336>>2]));q[a+28>>2]=1065353216;u[a+24>>2]=k;u[a+20>>2]=j;u[a+16>>2]=i;if(!!(x(E(x(x(x(i*i)+x(j*j))+x(k*k))))>2]=0;q[a+28>>2]=1065353216;q[a+16>>2]=0;q[a+20>>2]=1065353216;j=x(1);k=x(0);i=x(0)}o=x(x(1)/x(E(x(x(x(i*i)+x(j*j))+x(k*k)))));u[a+28>>2]=o;u[a+24>>2]=k*o;u[a+20>>2]=j*o;u[a+16>>2]=i*o;break a;case 4:break b}}tj(h+128|0,q[b+276>>2],c);b=q[h+140>>2];q[a+8>>2]=q[h+136>>2];q[a+12>>2]=b;b=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=b}ue=h+160|0}function Nj(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,o=0,p=0,r=x(0),s=x(0),t=x(0),v=x(0),w=0,y=x(0);l=ue-160|0;ue=l;q[d+8>>2]=0;q[d+12>>2]=1065353216;q[d>>2]=0;q[d+4>>2]=0;m=q[a>>2];a:{if(m>>>0>5){break a}b:{c:{switch(m-1|0){default:m=a+8|0;nt(l+128|0,m);p=q[l+140>>2];d=b+8|0;q[d>>2]=q[l+136>>2];q[d+4>>2]=p;o=q[l+132>>2];q[b>>2]=q[l+128>>2];q[b+4>>2]=o;if(q[a+4>>2]>=0){Gs(l+128|0,f,g,j,e,a+4|0,nt(l+96|0,m),k,k+12|0);a=q[l+140>>2];q[d>>2]=q[l+136>>2];q[d+4>>2]=a;a=q[l+132>>2];q[b>>2]=q[l+128>>2];q[b+4>>2]=a}a=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=a;a=q[d+4>>2];q[c+8>>2]=q[d>>2];q[c+12>>2]=a;break a;case 0:m=q[a+56>>2];q[l+56>>2]=q[a+52>>2];q[l+60>>2]=m;o=q[a+64>>2];m=l- -64|0;q[m>>2]=q[a+60>>2];q[m+4>>2]=o;m=q[a+48>>2];q[l+48>>2]=q[a+44>>2];q[l+52>>2]=m;m=k+12|0;Js(l+128|0,f,g,j,e,a+20|0,l+48|0,k,m);h=x(n[q[q[e>>2]+16>>2]](e,u[l+140>>2],u[l+128>>2]));i=x(n[q[q[e>>2]+16>>2]](e,u[l+144>>2],u[l+132>>2]));r=x(n[q[q[e>>2]+16>>2]](e,u[l+148>>2],u[l+136>>2]));q[b+12>>2]=1065353216;u[b+8>>2]=r;u[b+4>>2]=i;u[b>>2]=h;o=q[a+80>>2];q[l+32>>2]=q[a+76>>2];q[l+36>>2]=o;o=q[a+88>>2];q[l+40>>2]=q[a+84>>2];q[l+44>>2]=o;o=q[a+72>>2];q[l+24>>2]=q[a+68>>2];q[l+28>>2]=o;Js(l+96|0,f,g,j,e,a+28|0,l+24|0,k,m);h=x(n[q[q[e>>2]+16>>2]](e,u[l+108>>2],u[l+96>>2]));i=x(n[q[q[e>>2]+16>>2]](e,u[l+112>>2],u[l+100>>2]));r=x(n[q[q[e>>2]+16>>2]](e,u[l+116>>2],u[l+104>>2]));q[b+28>>2]=1065353216;o=b+24|0;u[o>>2]=r;u[b+20>>2]=i;u[b+16>>2]=h;p=q[a+104>>2];q[l+8>>2]=q[a+100>>2];q[l+12>>2]=p;p=q[a+112>>2];q[l+16>>2]=q[a+108>>2];q[l+20>>2]=p;p=q[a+96>>2];q[l>>2]=q[a+92>>2];q[l+4>>2]=p;Js(l+72|0,f,g,j,e,a+36|0,l,k,m);h=x(n[q[q[e>>2]+16>>2]](e,u[l+84>>2],u[l+72>>2]));i=x(n[q[q[e>>2]+16>>2]](e,u[l+88>>2],u[l+76>>2]));r=x(n[q[q[e>>2]+16>>2]](e,u[l+92>>2],u[l+80>>2]));q[b+44>>2]=1065353216;u[b+40>>2]=r;u[b+36>>2]=i;u[b+32>>2]=h;a=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=a;a=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=a;a=q[b+20>>2];q[d>>2]=q[b+16>>2];q[d+4>>2]=a;a=q[o+4>>2];q[d+8>>2]=q[o>>2];q[d+12>>2]=a;break a;case 1:Cs(a+116|0,b,f,g,j,e,k,k+12|0);a=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=a;a=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=a;break a;case 2:d=q[q[n[q[q[f>>2]+28>>2]](f)>>2]+8>>2];tj(l+128|0,q[a+276>>2],e);g=q[l+140>>2];e=b+8|0;q[e>>2]=q[l+136>>2];q[e+4>>2]=g;f=q[l+132>>2];q[b>>2]=q[l+128>>2];q[b+4>>2]=f;sj(l+128|0,q[a+276>>2],h,i);h=u[e>>2];i=u[b>>2];r=u[b+4>>2];s=u[l+128>>2];t=u[l+132>>2];v=u[l+136>>2];u[c+12>>2]=u[b+12>>2]+u[l+140>>2];h=x(h+v);u[c+8>>2]=h;u[c+4>>2]=r+t;u[c>>2]=i+s;if(d){break a}u[c+8>>2]=-h;break a;case 3:n[q[q[f>>2]+116>>2]](l+128|0,f,q[a+280>>2]);d=q[l+128>>2];if(!d){break b}i=u[a+284>>2];h=x(u[a+288>>2]*x(x(x(1)/x(u[d+68>>2]*i))*h));d:{if(q[a+292>>2]!=1){h=fV(h,x(1));break d}if(!(h>x(1))){break d}h=x(1)}Wj(l+96|0,d,h,x(i*x(n[q[q[f>>2]+32>>2]](f))));nt(l+128|0,l+96|0);a=q[l+140>>2];q[c+8>>2]=q[l+136>>2];q[c+12>>2]=a;a=q[l+132>>2];q[c>>2]=q[l+128>>2];q[c+4>>2]=a;n[q[q[d>>2]+8>>2]](d)|0;break a;case 4:break c}}w=b,y=x(n[q[q[e>>2]+16>>2]](e,u[a+300>>2],u[a+296>>2])),u[w>>2]=y;q[c+8>>2]=0;q[c+12>>2]=1065353216;q[c>>2]=0;q[c+4>>2]=0;break a}q[c+8>>2]=0;q[c+12>>2]=1065353216;q[c>>2]=0;q[c+4>>2]=0}a=q[c+4>>2];q[b+64>>2]=q[c>>2];q[b+68>>2]=a;a=q[c+12>>2];q[b+72>>2]=q[c+8>>2];q[b+76>>2]=a;ue=l+160|0}function jP(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,w=0,x=0;l=ue-560|0;ue=l;q[l+548>>2]=k;q[l+552>>2]=b;q[l+96>>2]=858;s=rL(l+136|0,l+144|0,l+96|0);b=q[s>>2];q[l+132>>2]=b;q[l+128>>2]=b+400;u=CL(l+96|0);p=CL(l+80|0);m=CL(l- -64|0);n=CL(l+48|0);t=CL(l+32|0);kP(c,d,l+120|0,l+116|0,l+112|0,u,p,m,n,l+28|0);q[j>>2]=q[i>>2];v=e&512;b=0;e=0;while(1){k=e;a:{b:{c:{d:{if((b|0)==4){break d}if(!XH(a,l+552|0)){break d}c=o[(l+120|0)+b|0];if(c>>>0>4){break b}e=0;e:{f:{g:{h:{i:{switch(c-1|0){case 0:if((b|0)==3){break b}if(ZH(h,8192,YH(a))){lP(l+16|0,a);MT(t,q[l+16>>2]);break h}q[f>>2]=q[f>>2]|4;a=0;break c;case 3:break e;case 1:break f;case 2:break g;default:break i}}if((b|0)==3){break b}}while(1){if(!XH(a,l+552|0)){break b}if(!ZH(h,8192,YH(a))){break b}lP(l+16|0,a);MT(t,q[l+16>>2]);continue}}if((uL(m)|0)==(0-uL(n)|0)){break b}j:{if(uL(m)){if(uL(n)){break j}}d=uL(m);c=YH(a);if(d){if((c|0)==q[kM(m)>>2]){_H(a);e=uL(m)>>>0>1?m:k;break a}o[g|0]=1;break b}if((c|0)!=q[kM(n)>>2]){break b}_H(a);o[g|0]=1;e=uL(n)>>>0>1?n:k;break a}if((YH(a)|0)==q[kM(m)>>2]){_H(a);e=uL(m)>>>0>1?m:k;break a}if((YH(a)|0)==q[kM(n)>>2]){_H(a);o[g|0]=1;e=uL(n)>>>0>1?n:k;break a}q[f>>2]=q[f>>2]|4;a=0;break c}if(!(v|(k|b>>>0<2))){e=0;if(!((b|0)==2&r[l+123|0]!=0)){break a}}w=l,x=VM(p),q[w+8>>2]=x;c=SO(l+16|0,l+8|0);k:{if(!b|r[(b+l|0)+119|0]>1){break k}while(1){l:{w=l,x=pN(p),q[w+8>>2]=x;if(!XM(c,l+8|0)){break l}if(!ZH(h,8192,q[q[c>>2]>>2])){break l}qN(c);continue}break}w=l,x=VM(p),q[w+8>>2]=x;c=q[c>>2]-q[l+8>>2]>>2;if(c>>>0<=uL(t)>>>0){w=l,x=pN(t),q[w+8>>2]=x;if(sP(tP(l+8|0,0-c|0),pN(t),VM(p))){break k}}w=l,x=VM(p),q[w>>2]=x;SO(l+8|0,l);q[l+16>>2]=q[l+8>>2]}q[l+8>>2]=q[l+16>>2];while(1){m:{w=l,x=pN(p),q[w>>2]=x;if(!XM(l+8|0,l)){break m}if(!XH(a,l+552|0)){break m}if((YH(a)|0)!=q[q[l+8>>2]>>2]){break m}_H(a);qN(l+8|0);continue}break}if(!v){break b}w=l,x=pN(p),q[w>>2]=x;if(!XM(l+8|0,l)){break b}q[f>>2]=q[f>>2]|4;a=0;break c}while(1){n:{if(!XH(a,l+552|0)){break n}c=YH(a);o:{if(ZH(h,2048,c)){d=q[j>>2];if((d|0)==q[l+548>>2]){UO(i,j,l+548|0);d=q[j>>2]}q[j>>2]=d+4;q[d>>2]=c;e=e+1|0;break o}if(!e|!uL(u)|(c|0)!=q[l+112>>2]){break n}c=q[l+132>>2];if((c|0)==q[l+128>>2]){UO(s,l+132|0,l+128|0);c=q[l+132>>2]}q[l+132>>2]=c+4;q[c>>2]=e;e=0}_H(a);continue}break}d=q[s>>2];p:{if(!e){break p}c=q[l+132>>2];if((d|0)==(c|0)){break p}if(q[l+128>>2]==(c|0)){UO(s,l+132|0,l+128|0);c=q[l+132>>2]}q[l+132>>2]=c+4;q[c>>2]=e}q:{if(q[l+28>>2]<1){break q}r:{if(!$H(a,l+552|0)){if((YH(a)|0)==q[l+116>>2]){break r}}q[f>>2]=q[f>>2]|4;a=0;break c}while(1){_H(a);if(q[l+28>>2]<1){break q}s:{if(!$H(a,l+552|0)){if(ZH(h,2048,YH(a))){break s}}q[f>>2]=q[f>>2]|4;a=0;break c}if(q[j>>2]==q[l+548>>2]){UO(i,j,l+548|0)}c=YH(a);d=q[j>>2];q[j>>2]=d+4;q[d>>2]=c;q[l+28>>2]=q[l+28>>2]+ -1;continue}}e=k;if(q[i>>2]!=q[j>>2]){break a}q[f>>2]=q[f>>2]|4;a=0;break c}t:{if(!k){break t}e=1;while(1){if(e>>>0>=uL(k)>>>0){break t}u:{if(!$H(a,l+552|0)){if((YH(a)|0)==q[rM(k,e)>>2]){break u}}q[f>>2]=q[f>>2]|4;a=0;break c}_H(a);e=e+1|0;continue}}a=1;if(q[s>>2]==q[l+132>>2]){break c}a=0;q[l+16>>2]=0;HL(u,q[s>>2],q[l+132>>2],l+16|0);if(q[l+16>>2]){q[f>>2]=q[f>>2]|4;break c}a=1}oT(t);oT(n);oT(m);oT(p);oT(u);wL(s);ue=l+560|0;return a}e=k}b=b+1|0;continue}}function bl(a,b,c,d,e,f){var g=0,h=x(0),i=x(0),j=0,k=0,l=0,m=0,o=0,p=0,s=0,t=0,v=x(0),w=0,y=0,z=0,A=0,B=0,C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=0,J=x(0);l=ue-32|0;ue=l;q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;a:{if(!r[b+56|0]){break a}if(q[b+36>>2]>0){while(1){m=q[b+20>>2];g=m+j|0;k=r[g+4|0]|r[g+5|0]<<8|(r[g+6|0]<<16|r[g+7|0]<<24);if(k>>>0>8){break a}j=j+16|0;o=j+(k<<2)|0;s=r[g+8|0]|r[g+9|0]<<8|(r[g+10|0]<<16|r[g+11|0]<<24);t=s<<2;z=r[g+12|0]|r[g+13|0]<<8|(r[g+14|0]<<16|r[g+15|0]<<24);w=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);if(k){A=(k|0)>1?k:1;p=q[b+8>>2];B=q[b+12>>2]-p>>2;h=u[d>>2];k=0;while(1){g=j+m|0;g=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);b:{if(B>>>0>g>>>0){i=u[(g<<2)+p>>2];break b}i=u[((g<<2)+c|0)+ -16384>>2];if((g&-4)==4096){break b}i=h;if((g|0)==4352){break b}g=g+ -4608|0;i=x(0);if(g>>>0>4){break b}i=u[(g<<2)+e>>2]}j=j+4|0;u[(k<<2)+l>>2]=i;k=k+1|0;if((A|0)!=(k|0)){continue}break}}k=o+t|0;t=z<<2;c:{if((s|0)<1){break c}h=u[l+4>>2];i=u[l>>2];C=h>=i?x(1):x(0);D=x(i+h);E=x(i-h);F=x(i*h);G=x(i/h);H=x(-i);j=0;h=fV(i,h);while(1){d:{if(w>>>0>50){break d}g=m+o|0;g=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);e:{switch(w-1|0){case 0:u[q[b+8>>2]+(g<<2)>>2]=D;break d;case 1:u[q[b+8>>2]+(g<<2)>>2]=E;break d;case 2:u[q[b+8>>2]+(g<<2)>>2]=F;break d;case 3:u[q[b+8>>2]+(g<<2)>>2]=G;break d;case 4:u[q[b+8>>2]+(g<<2)>>2]=h;break d;case 20:I=q[b+8>>2]+(g<<2)|0,J=AG(u[(j<<2)+l>>2]),u[I>>2]=J;break d;case 21:I=q[b+8>>2]+(g<<2)|0,J=zG(u[(j<<2)+l>>2]),u[I>>2]=J;break d;case 10:u[q[b+8>>2]+(g<<2)>>2]=i;break d;case 11:u[q[b+8>>2]+(g<<2)>>2]=H;break d;case 30:v=x(n[192](f));u[q[b+8>>2]+(g<<2)>>2]=v;break d;case 31:v=x(n[193](f,u[(j<<2)+l>>2]));u[q[b+8>>2]+(g<<2)>>2]=v;break d;case 49:u[q[b+8>>2]+(g<<2)>>2]=C;break d;case 5:case 6:case 7:case 8:case 9:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:break d;default:break e}}p=q[b+8>>2]+(g<<2)|0;g=k+m|0;q[p>>2]=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24)}j=j+1|0;if((s|0)==(j|0)){break c}o=o+4|0;m=q[b+20>>2];continue}}j=k+t|0;y=y+1|0;if((y|0)>2]){continue}break}}i=u[d>>2];d=a;g=q[b+8>>2];j=q[b+12>>2]-g>>2;f=q[b+40>>2];f:{if(j>>>0>f>>>0){h=u[g+(f<<2)>>2];break f}h=u[((f<<2)+c|0)+ -16384>>2];if((f&-4)==4096){break f}h=i;if((f|0)==4352){break f}f=f+ -4608|0;h=x(0);if(f>>>0>4){break f}h=u[(f<<2)+e>>2]}u[d>>2]=h;d=a;f=q[b+44>>2];g:{if(j>>>0<=f>>>0){if((f&-4)!=4096){h=i;if((f|0)==4352){break g}f=f+ -4608|0;h=x(0);if(f>>>0>4){break g}h=u[(f<<2)+e>>2];break g}h=u[((f<<2)+c|0)+ -16384>>2];break g}h=u[g+(f<<2)>>2]}u[d+4>>2]=h;d=a;f=q[b+48>>2];h:{if(j>>>0<=f>>>0){if((f&-4)!=4096){h=i;if((f|0)==4352){break h}f=f+ -4608|0;h=x(0);if(f>>>0>4){break h}h=u[(f<<2)+e>>2];break h}h=u[((f<<2)+c|0)+ -16384>>2];break h}h=u[g+(f<<2)>>2]}u[d+8>>2]=h;b=q[b+52>>2];i:{if(j>>>0<=b>>>0){if((b&-4)!=4096){if((b|0)==4352){break i}i=x(0);b=b+ -4608|0;if(b>>>0>4){break i}i=u[(b<<2)+e>>2];break i}i=u[((b<<2)+c|0)+ -16384>>2];break i}i=u[g+(b<<2)>>2]}u[a+12>>2]=i}ue=l+32|0}function _U(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{if(!a){break a}d=a+ -8|0;c=q[a+ -4>>2];a=c&-8;f=d+a|0;b:{if(c&1){break b}if(!(c&3)){break a}c=q[d>>2];d=d-c|0;if(d>>>0>>0<=255){e=q[d+8>>2];c=c>>>3|0;b=q[d+12>>2];if((b|0)==(e|0)){i=372440,j=q[93110]&zW(-2,c),q[i>>2]=j;break b}q[e+12>>2]=b;q[b+8>>2]=e;break b}h=q[d+24>>2];c=q[d+12>>2];c:{if((c|0)!=(d|0)){b=q[d+8>>2];q[b+12>>2]=c;q[c+8>>2]=b;break c}d:{e=d+20|0;b=q[e>>2];if(b){break d}e=d+16|0;b=q[e>>2];if(b){break d}c=0;break c}while(1){g=e;c=b;e=c+20|0;b=q[e>>2];if(b){continue}e=c+16|0;b=q[c+16>>2];if(b){continue}break}q[g>>2]=0}if(!h){break b}e=q[d+28>>2];b=(e<<2)+372744|0;e:{if(q[b>>2]==(d|0)){q[b>>2]=c;if(c){break e}i=372444,j=q[93111]&zW(-2,e),q[i>>2]=j;break b}q[h+(q[h+16>>2]==(d|0)?16:20)>>2]=c;if(!c){break b}}q[c+24>>2]=h;b=q[d+16>>2];if(b){q[c+16>>2]=b;q[b+24>>2]=c}b=q[d+20>>2];if(!b){break b}q[c+20>>2]=b;q[b+24>>2]=c;break b}c=q[f+4>>2];if((c&3)!=3){break b}q[93112]=a;q[f+4>>2]=c&-2;q[d+4>>2]=a|1;q[a+d>>2]=a;return}if(f>>>0<=d>>>0){break a}c=q[f+4>>2];if(!(c&1)){break a}f:{if(!(c&2)){if((f|0)==q[93116]){q[93116]=d;a=q[93113]+a|0;q[93113]=a;q[d+4>>2]=a|1;if(q[93115]!=(d|0)){break a}q[93112]=0;q[93115]=0;return}if((f|0)==q[93115]){q[93115]=d;a=q[93112]+a|0;q[93112]=a;q[d+4>>2]=a|1;q[a+d>>2]=a;return}a=(c&-8)+a|0;g:{if(c>>>0<=255){b=q[f+8>>2];c=c>>>3|0;e=q[f+12>>2];if((b|0)==(e|0)){i=372440,j=q[93110]&zW(-2,c),q[i>>2]=j;break g}q[b+12>>2]=e;q[e+8>>2]=b;break g}h=q[f+24>>2];c=q[f+12>>2];h:{if((f|0)!=(c|0)){b=q[f+8>>2];q[b+12>>2]=c;q[c+8>>2]=b;break h}i:{e=f+20|0;b=q[e>>2];if(b){break i}e=f+16|0;b=q[e>>2];if(b){break i}c=0;break h}while(1){g=e;c=b;e=c+20|0;b=q[e>>2];if(b){continue}e=c+16|0;b=q[c+16>>2];if(b){continue}break}q[g>>2]=0}if(!h){break g}e=q[f+28>>2];b=(e<<2)+372744|0;j:{if((f|0)==q[b>>2]){q[b>>2]=c;if(c){break j}i=372444,j=q[93111]&zW(-2,e),q[i>>2]=j;break g}q[h+((f|0)==q[h+16>>2]?16:20)>>2]=c;if(!c){break g}}q[c+24>>2]=h;b=q[f+16>>2];if(b){q[c+16>>2]=b;q[b+24>>2]=c}b=q[f+20>>2];if(!b){break g}q[c+20>>2]=b;q[b+24>>2]=c}q[d+4>>2]=a|1;q[a+d>>2]=a;if(q[93115]!=(d|0)){break f}q[93112]=a;return}q[f+4>>2]=c&-2;q[d+4>>2]=a|1;q[a+d>>2]=a}if(a>>>0<=255){a=a>>>3|0;c=(a<<3)+372480|0;b=q[93110];a=1<>2]}q[c+8>>2]=d;q[a+12>>2]=d;q[d+12>>2]=c;q[d+8>>2]=a;return}q[d+16>>2]=0;q[d+20>>2]=0;f=d;e=a>>>8|0;b=0;l:{if(!e){break l}b=31;if(a>>>0>16777215){break l}c=e;e=e+1048320>>>16&8;b=c<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(g|(e|h))|0;b=(b<<1|a>>>b+21&1)+28|0}q[f+28>>2]=b;g=(b<<2)+372744|0;m:{n:{e=q[93111];c=1<>2]=d;q[d+24>>2]=g;break o}e=a<<((b|0)==31?0:25-(b>>>1|0)|0);c=q[g>>2];while(1){b=c;if((q[c+4>>2]&-8)==(a|0)){break n}c=e>>>29|0;e=e<<1;g=(b+(c&4)|0)+16|0;c=q[g>>2];if(c){continue}break}q[g>>2]=d;q[d+24>>2]=b}q[d+12>>2]=d;q[d+8>>2]=d;break m}a=q[b+8>>2];q[a+12>>2]=d;q[b+8>>2]=d;q[d+24>>2]=0;q[d+12>>2]=b;q[d+8>>2]=a}a=q[93118]+ -1|0;q[93118]=a;if(a){break a}d=372896;while(1){a=q[d>>2];d=a+8|0;if(a){continue}break}q[93118]=-1}}function jB(a,b,c){var d=0,e=0,f=0,g=x(0),h=x(0),i=x(0),j=x(0),k=0,l=0,m=x(0),n=0,o=0,p=0,r=x(0),s=x(0),t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;a:{p=q[b+32>>2];e=q[p>>2];if(e>>>0>1){break a}if(e-1){e=q[c+8>>2];q[c+4>>2]=e;k=q[a+28>>2];f=q[a+24>>2];if((k-f|0)==240){break a}l=q[c>>2];p=l<<3;v=w(l,7);y=w(l,6);z=w(l,3);A=l<<1;B=w(l,5);C=l<<2;d=q[b+12>>2];while(1){if((d|0)>=1){k=w(n,240)+f|0;i=u[k+112>>2];r=u[k+104>>2];h=u[k+100>>2];j=u[k+108>>2];m=x(h+j);j=x(h+x(j*x(.5)));D=k+4|0;f=0;while(1){t=q[D>>2];o=q[k>>2];u[e+16>>2]=h;t=w(d,t)+f|0;s=x(w(o+ -1|0,d)|0);g=x(r+x(i*x(x(t|0)/s)));u[e+20>>2]=g;d=e+l|0;u[d+20>>2]=g;u[d+16>>2]=j;d=e+C|0;u[d+20>>2]=g;u[d+16>>2]=j;d=e+B|0;u[d+20>>2]=g;u[d+16>>2]=m;d=e+A|0;g=x(r+x(i*x(x(t+1|0)/s)));u[d+20>>2]=g;u[d+16>>2]=h;d=e+z|0;u[d+20>>2]=g;u[d+16>>2]=j;d=e+y|0;u[d+20>>2]=g;u[d+16>>2]=j;d=e+v|0;u[d+20>>2]=g;u[d+16>>2]=m;e=e+p|0;q[c+4>>2]=e;f=f+1|0;d=q[b+12>>2];if((f|0)<(d|0)){continue}break}k=q[a+28>>2];f=q[a+24>>2]}n=n+1|0;if(n>>>0<((k-f|0)/240|0)+ -1>>>0){continue}break}break a}e=q[c+8>>2];q[c+4>>2]=e;d=q[a+24>>2];if((q[a+28>>2]-d|0)==240){break a}l=q[c>>2];y=l<<3;z=w(l,7);A=w(l,6);B=w(l,3);C=l<<1;D=w(l,5);t=l<<2;while(1){n=w(v,240)+d|0;j=u[n+100>>2];i=u[n+112>>2];h=u[n+104>>2];g=u[n+108>>2];k=q[p+12>>2];b:{if(v>>>0>>0){d=q[b+12>>2];if((d|0)<1){break b}r=x(j+g);g=x(j+x(g*x(.5)));n=n+4|0;m=x(x(h+x(i*u[p+16>>2]))-h);f=0;while(1){o=q[n>>2];u[e+16>>2]=j;o=w(d,o)+f|0;s=x(w(d,k)|0);i=x(h+x(m*x(x(o|0)/s)));u[e+20>>2]=i;d=e+l|0;u[d+20>>2]=i;u[d+16>>2]=g;d=e+t|0;u[d+20>>2]=i;u[d+16>>2]=g;d=e+D|0;u[d+20>>2]=i;u[d+16>>2]=r;d=e+C|0;i=x(h+x(m*x(x(o+1|0)/s)));u[d+20>>2]=i;u[d+16>>2]=j;d=e+B|0;u[d+20>>2]=i;u[d+16>>2]=g;d=e+A|0;u[d+20>>2]=i;u[d+16>>2]=g;d=e+z|0;u[d+20>>2]=i;u[d+16>>2]=r;e=e+y|0;q[c+4>>2]=e;f=f+1|0;d=q[b+12>>2];if((f|0)>=(d|0)){break b}k=q[p+12>>2];continue}}o=q[n>>2];d=q[p+8>>2];if(v>>>0>=o+(d^-1)>>>0){f=q[b+12>>2];if((f|0)<1){break b}r=x(j+g);m=x(h+i);i=x(h+x(i*u[p+20>>2]));m=x(m-i);h=x(j+x(g*x(.5)));E=n+4|0;k=0;while(1){F=q[E>>2];u[e+16>>2]=j;o=w(((F-o|0)+d|0)+1|0,f)+k|0;s=x(w(d,f)|0);g=x(i+x(m*x(x(o|0)/s)));u[e+20>>2]=g;d=e+l|0;u[d+20>>2]=g;u[d+16>>2]=h;d=e+t|0;u[d+20>>2]=g;u[d+16>>2]=h;d=e+D|0;u[d+20>>2]=g;u[d+16>>2]=r;d=e+C|0;g=x(i+x(m*x(x(o+1|0)/s)));u[d+20>>2]=g;u[d+16>>2]=j;d=e+B|0;u[d+20>>2]=g;u[d+16>>2]=h;d=e+A|0;u[d+20>>2]=g;u[d+16>>2]=h;d=e+z|0;u[d+20>>2]=g;u[d+16>>2]=r;e=e+y|0;q[c+4>>2]=e;k=k+1|0;f=q[b+12>>2];if((k|0)>=(f|0)){break b}d=q[p+8>>2];o=q[n>>2];continue}}f=q[b+12>>2];if((f|0)<1){break b}r=x(j+g);g=x(x(j+j)+x(g*x(.5)));m=x(h+x(i*u[p+20>>2]));i=x(h+x(i*u[p+16>>2]));m=x(m-i);d=0;while(1){u[e+16>>2]=j;s=x(f|0);h=x(i+x(m*x(x(d|0)/s)));u[e+20>>2]=h;f=e+l|0;u[f+20>>2]=h;u[f+16>>2]=g;f=e+t|0;u[f+20>>2]=h;u[f+16>>2]=g;f=e+D|0;u[f+20>>2]=h;u[f+16>>2]=r;f=e+C|0;d=d+1|0;h=x(i+x(m*x(x(d|0)/s)));u[f+20>>2]=h;u[f+16>>2]=j;f=e+B|0;u[f+20>>2]=h;u[f+16>>2]=g;f=e+A|0;u[f+20>>2]=h;u[f+16>>2]=g;f=e+z|0;u[f+20>>2]=h;u[f+16>>2]=r;e=e+y|0;q[c+4>>2]=e;f=q[b+12>>2];if((d|0)<(f|0)){continue}break}}v=v+1|0;d=q[a+24>>2];if(v>>>0<((q[a+28>>2]-d|0)/240|0)+ -1>>>0){continue}break}}}function bB(a,b,c){var d=0,e=0,f=0,g=x(0),h=x(0),i=x(0),j=x(0),k=0,l=0,m=x(0),n=0,o=0,p=0,r=x(0),s=x(0),t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;a:{p=q[b+32>>2];e=q[p>>2];if(e>>>0>1){break a}if(e-1){e=q[c+8>>2];q[c+4>>2]=e;k=q[a+28>>2];f=q[a+24>>2];if((k-f|0)==240){break a}l=q[c>>2];p=l<<3;v=w(l,7);y=w(l,6);z=w(l,3);A=l<<1;B=w(l,5);C=l<<2;d=q[b+12>>2];while(1){if((d|0)>=1){k=w(n,240)+f|0;i=u[k+112>>2];r=u[k+104>>2];h=u[k+100>>2];j=u[k+108>>2];m=x(h+j);j=x(h+x(j*x(.5)));D=k+4|0;f=0;while(1){t=q[D>>2];o=q[k>>2];u[e+24>>2]=h;t=w(d,t)+f|0;s=x(w(o+ -1|0,d)|0);g=x(r+x(i*x(x(t|0)/s)));u[e+28>>2]=g;d=e+l|0;u[d+28>>2]=g;u[d+24>>2]=j;d=e+C|0;u[d+28>>2]=g;u[d+24>>2]=j;d=e+B|0;u[d+28>>2]=g;u[d+24>>2]=m;d=e+A|0;g=x(r+x(i*x(x(t+1|0)/s)));u[d+28>>2]=g;u[d+24>>2]=h;d=e+z|0;u[d+28>>2]=g;u[d+24>>2]=j;d=e+y|0;u[d+28>>2]=g;u[d+24>>2]=j;d=e+v|0;u[d+28>>2]=g;u[d+24>>2]=m;e=e+p|0;q[c+4>>2]=e;f=f+1|0;d=q[b+12>>2];if((f|0)<(d|0)){continue}break}k=q[a+28>>2];f=q[a+24>>2]}n=n+1|0;if(n>>>0<((k-f|0)/240|0)+ -1>>>0){continue}break}break a}e=q[c+8>>2];q[c+4>>2]=e;d=q[a+24>>2];if((q[a+28>>2]-d|0)==240){break a}l=q[c>>2];y=l<<3;z=w(l,7);A=w(l,6);B=w(l,3);C=l<<1;D=w(l,5);t=l<<2;while(1){n=w(v,240)+d|0;j=u[n+100>>2];i=u[n+112>>2];h=u[n+104>>2];g=u[n+108>>2];k=q[p+12>>2];b:{if(v>>>0>>0){d=q[b+12>>2];if((d|0)<1){break b}r=x(j+g);g=x(j+x(g*x(.5)));n=n+4|0;m=x(x(h+x(i*u[p+16>>2]))-h);f=0;while(1){o=q[n>>2];u[e+24>>2]=j;o=w(d,o)+f|0;s=x(w(d,k)|0);i=x(h+x(m*x(x(o|0)/s)));u[e+28>>2]=i;d=e+l|0;u[d+28>>2]=i;u[d+24>>2]=g;d=e+t|0;u[d+28>>2]=i;u[d+24>>2]=g;d=e+D|0;u[d+28>>2]=i;u[d+24>>2]=r;d=e+C|0;i=x(h+x(m*x(x(o+1|0)/s)));u[d+28>>2]=i;u[d+24>>2]=j;d=e+B|0;u[d+28>>2]=i;u[d+24>>2]=g;d=e+A|0;u[d+28>>2]=i;u[d+24>>2]=g;d=e+z|0;u[d+28>>2]=i;u[d+24>>2]=r;e=e+y|0;q[c+4>>2]=e;f=f+1|0;d=q[b+12>>2];if((f|0)>=(d|0)){break b}k=q[p+12>>2];continue}}o=q[n>>2];d=q[p+8>>2];if(v>>>0>=o+(d^-1)>>>0){f=q[b+12>>2];if((f|0)<1){break b}r=x(j+g);m=x(h+i);i=x(h+x(i*u[p+20>>2]));m=x(m-i);h=x(j+x(g*x(.5)));E=n+4|0;k=0;while(1){F=q[E>>2];u[e+24>>2]=j;o=w(((F-o|0)+d|0)+1|0,f)+k|0;s=x(w(d,f)|0);g=x(i+x(m*x(x(o|0)/s)));u[e+28>>2]=g;d=e+l|0;u[d+28>>2]=g;u[d+24>>2]=h;d=e+t|0;u[d+28>>2]=g;u[d+24>>2]=h;d=e+D|0;u[d+28>>2]=g;u[d+24>>2]=r;d=e+C|0;g=x(i+x(m*x(x(o+1|0)/s)));u[d+28>>2]=g;u[d+24>>2]=j;d=e+B|0;u[d+28>>2]=g;u[d+24>>2]=h;d=e+A|0;u[d+28>>2]=g;u[d+24>>2]=h;d=e+z|0;u[d+28>>2]=g;u[d+24>>2]=r;e=e+y|0;q[c+4>>2]=e;k=k+1|0;f=q[b+12>>2];if((k|0)>=(f|0)){break b}d=q[p+8>>2];o=q[n>>2];continue}}f=q[b+12>>2];if((f|0)<1){break b}r=x(j+g);g=x(x(j+j)+x(g*x(.5)));m=x(h+x(i*u[p+20>>2]));i=x(h+x(i*u[p+16>>2]));m=x(m-i);d=0;while(1){u[e+24>>2]=j;s=x(f|0);h=x(i+x(m*x(x(d|0)/s)));u[e+28>>2]=h;f=e+l|0;u[f+28>>2]=h;u[f+24>>2]=g;f=e+t|0;u[f+28>>2]=h;u[f+24>>2]=g;f=e+D|0;u[f+28>>2]=h;u[f+24>>2]=r;f=e+C|0;d=d+1|0;h=x(i+x(m*x(x(d|0)/s)));u[f+28>>2]=h;u[f+24>>2]=j;f=e+B|0;u[f+28>>2]=h;u[f+24>>2]=g;f=e+A|0;u[f+28>>2]=h;u[f+24>>2]=g;f=e+z|0;u[f+28>>2]=h;u[f+24>>2]=r;e=e+y|0;q[c+4>>2]=e;f=q[b+12>>2];if((d|0)<(f|0)){continue}break}}v=v+1|0;d=q[a+24>>2];if(v>>>0<((q[a+28>>2]-d|0)/240|0)+ -1>>>0){continue}break}}}function Fx(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=x(0),m=0,o=x(0),p=0,s=x(0),t=x(0),v=0,w=0,y=x(0),z=0;j=ue-416|0;ue=j;q[h>>2]=0;q[i>>2]=0;p=q[e+32>>2];m=q[e+28>>2];k=n[q[q[b>>2]+168>>2]](b)|0;v=n[q[q[b>>2]+176>>2]](b)|0;k=(k|0)==1;q[j+404>>2]=k?-1082130432:1065353216;q[j+400>>2]=k?1065353216:0;k=(v|0)==1;q[j+412>>2]=k?-1082130432:1065353216;q[j+408>>2]=k?1065353216:0;n[q[q[b>>2]+92>>2]](j+144|0,b);nt(j+368|0,j+144|0);q[j+396>>2]=1065353216;k=q[j+372>>2];q[j+384>>2]=q[j+368>>2];q[j+388>>2]=k;q[j+392>>2]=q[j+376>>2];w=j,y=x(n[q[q[b>>2]+184>>2]](b)),u[w+352>>2]=y;q[j+356>>2]=q[f+24>>2];u[j+360>>2]=r[q[b+4>>2]+340|0]?x(1):x(0);q[j+364>>2]=q[f>>2];Uy(b,j+400|0,16,1024);Uy(b,j+352|0,16,1040);Uy(b,j+384|0,16,1056);m=p-m>>3;if(q[a+356>>2]<1){h=1072}else{w=h,z=(n[q[q[c>>2]+28>>2]](c)|0)+1072|0,q[w>>2]=z;h=1232}p=m>>>0<2;if(q[a+360>>2]>=1){w=i,z=(n[q[q[c>>2]+28>>2]](c)|0)+h|0,q[w>>2]=z;h=h+160|0}i=p?m:2;a=q[e+16>>2];if((a|0)!=q[e+20>>2]){c=0;while(1){Uy(b,(c<<4)+a|0,16,h);h=h+16|0;c=c+1|0;a=q[e+16>>2];if(c>>>0>2]-a>>4>>>0){continue}break}}if(i){c=0;while(1){qu(j+144|0,q[q[e+28>>2]+(c<<3)>>2]);Uy(b,j+144|0,208,h);h=h+208|0;c=c+1|0;if((i|0)!=(c|0)){continue}break}}Vy(b,j+400|0,16,0);Vy(b,j+352|0,16,16);Vy(b,j+384|0,16,32);q[j+136>>2]=0;q[j+124>>2]=0;q[j+128>>2]=0;q[j+132>>2]=0;q[j+116>>2]=0;q[j+120>>2]=0;q[j+112>>2]=1065353216;Jv(q[b+4>>2],j+136|0,j+112|0);l=u[f+32>>2];a=q[j+132>>2];q[j+104>>2]=q[j+128>>2];q[j+108>>2]=a;a=q[j+124>>2];q[j+96>>2]=q[j+120>>2];q[j+100>>2]=a;a=q[j+116>>2];q[j+80>>2]=q[j+112>>2];q[j+84>>2]=a;q[j+76>>2]=0;l=x(l*x(0));u[j+72>>2]=l;u[j+68>>2]=l;u[j+64>>2]=l;Vy(b,j+80|0,16,48);Vy(b,j+96|0,16,64);a=q[f+4>>2];n[q[q[a>>2]+104>>2]](j+144|0,a,q[e>>2]);c=q[j+144>>2];q[j+144>>2]=0;a=q[d>>2];a:{if(!a){q[d>>2]=c;break a}n[q[q[a>>2]+8>>2]](a)|0;a=q[j+144>>2];q[d>>2]=c;if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[j+144>>2]=0}n[q[q[b>>2]+40>>2]](j+144|0,b);a=nt(j,j+144|0);l=u[a>>2];s=u[a+4>>2];t=u[a+8>>2];o=x(x(1)/x(E(x(x(x(l*l)+x(s*s))+x(t*t)))));u[a+12>>2]=u[a+12>>2]*o;u[a+8>>2]=t*o;u[a+4>>2]=s*o;u[a>>2]=l*o;q[j+60>>2]=1065353216;a=q[j+4>>2];q[j+48>>2]=q[j>>2];q[j+52>>2]=a;q[j+56>>2]=q[j+8>>2];a=n[q[q[b>>2]+48>>2]](b)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[j+44>>2]=x(a>>>24>>>0)/x(255);u[j+32>>2]=x((a&255)>>>0)/x(255);u[j+40>>2]=x((a>>>16&255)>>>0)/x(255);u[j+36>>2]=x((a>>>8&255)>>>0)/x(255);a=n[q[q[b>>2]+56>>2]](b)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[j+28>>2]=x(a>>>24>>>0)/x(255);u[j+16>>2]=x((a&255)>>>0)/x(255);u[j+24>>2]=x((a>>>16&255)>>>0)/x(255);u[j+20>>2]=x((a>>>8&255)>>>0)/x(255);Vy(b,j+48|0,16,80);Vy(b,j+32|0,16,96);Vy(b,j+16|0,16,112);h=128;if(!(!q[q[d>>2]+80>>2]|g)){n[q[q[b>>2]+76>>2]](j+144|0,b);Vy(b,j+144|0,64,128);h=192}a=q[e+16>>2];if((a|0)!=q[e+20>>2]){c=0;while(1){Vy(b,(c<<4)+a|0,16,h);h=h+16|0;c=c+1|0;a=q[e+16>>2];if(c>>>0>2]-a>>4>>>0){continue}break}}if((i|0)>=1){c=0;while(1){qu(j+144|0,q[q[e+28>>2]+(c<<3)>>2]);Vy(b,j+144|0,208,h);h=h+208|0;c=c+1|0;if((i|0)!=(c|0)){continue}break}}a=q[j+136>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[j+136>>2]=0}ue=j+416|0}function Ox(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=x(0),m=0,o=x(0),p=0,s=x(0),t=x(0),v=0,w=0,y=x(0),z=0;j=ue-416|0;ue=j;q[h>>2]=0;q[i>>2]=0;p=q[e+32>>2];m=q[e+28>>2];k=n[q[q[b>>2]+168>>2]](b)|0;v=n[q[q[b>>2]+176>>2]](b)|0;k=(k|0)==1;q[j+404>>2]=k?-1082130432:1065353216;q[j+400>>2]=k?1065353216:0;k=(v|0)==1;q[j+412>>2]=k?-1082130432:1065353216;q[j+408>>2]=k?1065353216:0;n[q[q[b>>2]+92>>2]](j+144|0,b);nt(j+368|0,j+144|0);q[j+396>>2]=1065353216;k=q[j+372>>2];q[j+384>>2]=q[j+368>>2];q[j+388>>2]=k;q[j+392>>2]=q[j+376>>2];w=j,y=x(n[q[q[b>>2]+184>>2]](b)),u[w+352>>2]=y;q[j+356>>2]=q[f+24>>2];u[j+360>>2]=r[q[b+4>>2]+340|0]?x(1):x(0);q[j+364>>2]=q[f>>2];Uy(b,j+400|0,16,160);Uy(b,j+352|0,16,176);Uy(b,j+384|0,16,192);m=p-m>>3;if(q[a+356>>2]<1){h=208}else{w=h,z=(n[q[q[c>>2]+28>>2]](c)|0)+208|0,q[w>>2]=z;h=224}p=m>>>0<2;if(q[a+360>>2]>=1){w=i,z=(n[q[q[c>>2]+28>>2]](c)|0)+h|0,q[w>>2]=z;h=h+16|0}i=p?m:2;a=q[e+16>>2];if((a|0)!=q[e+20>>2]){c=0;while(1){Uy(b,(c<<4)+a|0,16,h);h=h+16|0;c=c+1|0;a=q[e+16>>2];if(c>>>0>2]-a>>4>>>0){continue}break}}if(i){c=0;while(1){qu(j+144|0,q[q[e+28>>2]+(c<<3)>>2]);Uy(b,j+144|0,208,h);h=h+208|0;c=c+1|0;if((i|0)!=(c|0)){continue}break}}Vy(b,j+400|0,16,0);Vy(b,j+352|0,16,16);Vy(b,j+384|0,16,32);q[j+136>>2]=0;q[j+124>>2]=0;q[j+128>>2]=0;q[j+132>>2]=0;q[j+116>>2]=0;q[j+120>>2]=0;q[j+112>>2]=1065353216;Jv(q[b+4>>2],j+136|0,j+112|0);l=u[f+32>>2];a=q[j+132>>2];q[j+104>>2]=q[j+128>>2];q[j+108>>2]=a;a=q[j+124>>2];q[j+96>>2]=q[j+120>>2];q[j+100>>2]=a;a=q[j+116>>2];q[j+80>>2]=q[j+112>>2];q[j+84>>2]=a;q[j+76>>2]=0;l=x(l*x(0));u[j+72>>2]=l;u[j+68>>2]=l;u[j+64>>2]=l;Vy(b,j+80|0,16,48);Vy(b,j+96|0,16,64);a=q[f+4>>2];n[q[q[a>>2]+104>>2]](j+144|0,a,q[e>>2]);c=q[j+144>>2];q[j+144>>2]=0;a=q[d>>2];a:{if(!a){q[d>>2]=c;break a}n[q[q[a>>2]+8>>2]](a)|0;a=q[j+144>>2];q[d>>2]=c;if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[j+144>>2]=0}n[q[q[b>>2]+40>>2]](j+144|0,b);a=nt(j,j+144|0);l=u[a>>2];s=u[a+4>>2];t=u[a+8>>2];o=x(x(1)/x(E(x(x(x(l*l)+x(s*s))+x(t*t)))));u[a+12>>2]=u[a+12>>2]*o;u[a+8>>2]=t*o;u[a+4>>2]=s*o;u[a>>2]=l*o;q[j+60>>2]=1065353216;a=q[j+4>>2];q[j+48>>2]=q[j>>2];q[j+52>>2]=a;q[j+56>>2]=q[j+8>>2];a=n[q[q[b>>2]+48>>2]](b)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[j+44>>2]=x(a>>>24>>>0)/x(255);u[j+32>>2]=x((a&255)>>>0)/x(255);u[j+40>>2]=x((a>>>16&255)>>>0)/x(255);u[j+36>>2]=x((a>>>8&255)>>>0)/x(255);a=n[q[q[b>>2]+56>>2]](b)|0;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);u[j+28>>2]=x(a>>>24>>>0)/x(255);u[j+16>>2]=x((a&255)>>>0)/x(255);u[j+24>>2]=x((a>>>16&255)>>>0)/x(255);u[j+20>>2]=x((a>>>8&255)>>>0)/x(255);Vy(b,j+48|0,16,80);Vy(b,j+32|0,16,96);Vy(b,j+16|0,16,112);h=128;if(!(!q[q[d>>2]+80>>2]|g)){n[q[q[b>>2]+76>>2]](j+144|0,b);Vy(b,j+144|0,64,128);h=192}a=q[e+16>>2];if((a|0)!=q[e+20>>2]){c=0;while(1){Vy(b,(c<<4)+a|0,16,h);h=h+16|0;c=c+1|0;a=q[e+16>>2];if(c>>>0>2]-a>>4>>>0){continue}break}}if((i|0)>=1){c=0;while(1){qu(j+144|0,q[q[e+28>>2]+(c<<3)>>2]);Vy(b,j+144|0,208,h);h=h+208|0;c=c+1|0;if((i|0)!=(c|0)){continue}break}}a=q[j+136>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[j+136>>2]=0}ue=j+416|0}function Bh(a,b,c){var d=0,e=0,f=0;e=q[b>>2];e=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a>>2]=e;d=q[b>>2]+4|0;q[b>>2]=d;e=e+ -20|0;a:{if(e>>>0>33){break a}f=b;b:{c:{switch(e-1|0){default:c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);q[a+4>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+8>>2]=c;a=8;break b;case 0:c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+4|0]=e;o[a+5|0]=e>>>8;o[a+6|0]=e>>>16;o[a+7|0]=e>>>24;o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;a=16;break b;case 1:c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+4|0]=e;o[a+5|0]=e>>>8;o[a+6|0]=e>>>16;o[a+7|0]=e>>>24;o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=r[d+40|0]|r[d+41|0]<<8|(r[d+42|0]<<16|r[d+43|0]<<24);o[a+44|0]=c;o[a+45|0]=c>>>8;o[a+46|0]=c>>>16;o[a+47|0]=c>>>24;c=r[d+36|0]|r[d+37|0]<<8|(r[d+38|0]<<16|r[d+39|0]<<24);e=r[d+32|0]|r[d+33|0]<<8|(r[d+34|0]<<16|r[d+35|0]<<24);o[a+36|0]=e;o[a+37|0]=e>>>8;o[a+38|0]=e>>>16;o[a+39|0]=e>>>24;o[a+40|0]=c;o[a+41|0]=c>>>8;o[a+42|0]=c>>>16;o[a+43|0]=c>>>24;c=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);e=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);o[a+28|0]=e;o[a+29|0]=e>>>8;o[a+30|0]=e>>>16;o[a+31|0]=e>>>24;o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;c=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);e=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);o[a+20|0]=e;o[a+21|0]=e>>>8;o[a+22|0]=e>>>16;o[a+23|0]=e>>>24;o[a+24|0]=c;o[a+25|0]=c>>>8;o[a+26|0]=c>>>16;o[a+27|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;a=44;break b;case 2:d=lV(_S(92),0,92);gj(d+4|0,x(0));gj(d+48|0,x(0));q[a+4>>2]=d;a=oj(d,q[b>>2],c);break b;case 19:c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+4|0]=e;o[a+5|0]=e>>>8;o[a+6|0]=e>>>16;o[a+7|0]=e>>>24;o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);d=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;a=16;break b;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:break a;case 32:break c}}d=lV(_S(180),0,180);gj(d+4|0,x(255));gj(d+48|0,x(255));gj(d+92|0,x(255));gj(d+136|0,x(255));q[a+4>>2]=d;a=uj(d,q[b>>2],c)}q[f>>2]=a+q[b>>2]}}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=ue-80|0;ue=c;a:{if(!q[b>>2]|!q[b+4>>2]){break a}e=q[b+8>>2];if(!e){break a}d=q[e+52>>2];h=d?d+ -4|0:0;if(!q[h+44>>2]){break a}e=e+ -4|0;q[c+76>>2]=0;if(r[367112]){ta(34229,c+76|0);iw(q[q[e+80>>2]>>2])}d=q[b>>2];Yv(34962,q[(d?d+ -4|0:0)+12>>2]);d=q[b+4>>2];Yv(34963,q[(d?d+ -4|0:0)+20>>2]);ha(q[h+16>>2]);d=q[b+20>>2];f=q[h+44>>2];f=(q[f+12>>2]-q[f+8>>2]|0)/12|0;k=(d|0)<(f|0)?d:f;if((k|0)>=1){d=0;while(1){f=d<<2;g=q[f+q[h+48>>2]>>2];b:{if((g|0)<0){break b}bw(g,d);g=b+f|0;i=q[g+24>>2];if(!i){break b}W(d+33984|0);i=i?i+ -4|0:0;Ca(q[i+52>>2],q[i+44>>2]);j=9728;f=9728;if(!q[g+88>>2]){f=9729;j=q[i+36>>2]==1?9729:9987}g=q[g+56>>2]?10497:33071;i=q[a+20>>2]+ -1|0;if(!(i>>>0>2|!(i-1))){break b}ya(3553,10240,f|0);ya(3553,10241,j|0);ya(3553,10242,g|0);ya(3553,10243,g|0)}d=d+1|0;if((k|0)!=(d|0)){continue}break}}a=q[e+56>>2];if(a){n[q[q[a>>2]>>2]](a)|0}h=a?a+ -4|0:0;q[c+8>>2]=h;d=q[b+12>>2];if(d){n[q[q[d>>2]>>2]](d)|0}g=d?d+ -4|0:0;q[c+48>>2]=g;f=q[b+16>>2];if(f){n[q[q[f>>2]>>2]](f)|0}i=f?f+ -4|0:0;q[c+72>>2]=i;mC(c+8|0,c+48|0,c+72|0,0);if(f){n[q[q[i+4>>2]+8>>2]](i+4|0)|0;q[c+72>>2]=0}if(d){n[q[q[g+4>>2]+8>>2]](g+4|0)|0;q[c+48>>2]=0}if(a){n[q[q[h+4>>2]+8>>2]](h+4|0)|0;q[c+8>>2]=0}c:{d:{a=q[e+60>>2];if(a){n[q[q[a>>2]>>2]](a)|0;f=q[e+60>>2];if(f){break d}}f=0;q[c+8>>2]=0;kC(c+8|0,e+68|0);a=1;break c}n[q[q[f>>2]>>2]](f)|0;q[c+8>>2]=f+ -4;kC(c+8|0,e+68|0);n[q[q[f>>2]+8>>2]](f)|0;q[c+8>>2]=0;a=0}q[c+72>>2]=0;ta(2886,c+72|0);d=q[e+16>>2];e:{if(q[c+72>>2]==2304){if(!d){ua(2884);xa(1029);break e}d=d+ -1|0;if(d>>>0>1){break e}if(d-1){ua(2884);xa(1028);break e}va(2884);xa(1032);break e}if(!d){ua(2884);xa(1028);break e}d=d+ -1|0;if(d>>>0>1){break e}if(d-1){ua(2884);xa(1029);break e}va(2884);xa(1032)}f:{if(!(r[e+49|0]?0:!r[e+48|0])){ua(2929);break f}va(2929)}g:{if(r[e+48|0]){q[c+8>>2]=512;q[c+12>>2]=513;q[c+24>>2]=516;q[c+28>>2]=517;q[c+16>>2]=514;q[c+20>>2]=515;q[c+32>>2]=518;q[c+36>>2]=519;Ba(q[(c+8|0)+(q[e+52>>2]<<2)>>2]);break g}Ba(519)}wa(r[e+49|0]);h:{if(r[e+20|0]){ua(3042);q[c+64>>2]=32776;q[c+56>>2]=32779;q[c+60>>2]=32775;q[c+48>>2]=32774;q[c+52>>2]=32778;q[c+40>>2]=774;q[c+44>>2]=775;q[c+24>>2]=770;q[c+28>>2]=771;q[c+16>>2]=768;q[c+20>>2]=769;q[c+8>>2]=0;q[c+12>>2]=1;q[c+32>>2]=772;q[c+36>>2]=773;$v(q[(c+48|0)+(q[e+40>>2]<<2)>>2],q[(c+48|0)+(q[e+44>>2]<<2)>>2]);aw(q[(c+8|0)+(q[e+24>>2]<<2)>>2],q[(c+8|0)+(q[e+28>>2]<<2)>>2],q[(c+8|0)+(q[e+32>>2]<<2)>>2],q[(c+8|0)+(q[e+36>>2]<<2)>>2]);break h}va(3042)}i:{j:{g=q[e+12>>2];if(g>>>0<=1){h=3;d=4;if(g-1){break i}break j}h=(g|0)==2;d=0;break i}h=2;d=1}g=q[q[b+4>>2]+8>>2];i=(g|0)==1;j=i?5125:g?0:5123;g=w(q[b+128>>2],i?4:!g<<1);h=w(h,q[b+120>>2]);b=q[b+124>>2];k:{if((b|0)>=2){jw(d,h,j,g,b);break k}Da(d|0,h|0,j|0,g|0)}b=q[e+68>>2];h=q[e+72>>2];if((b|0)!=(h|0)){d=0;while(1){g=q[(d<<2)+b>>2];if((g|0)>=0){ja(g|0);h=q[e+72>>2];b=q[e+68>>2]}d=d+1|0;if(d>>>0>2>>>0){continue}break}}if(r[367112]){iw(q[c+76>>2])}if(a){break a}n[q[q[f>>2]+8>>2]](f)|0}ue=c+80|0}function oB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+192>>2];D=u[a+184>>2];g=u[a+180>>2];j=u[a+188>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+56>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+60>>2]=f;e=b+d|0;u[e+60>>2]=f;u[e+56>>2]=j;e=d+F|0;u[e+60>>2]=f;u[e+56>>2]=j;e=d+C|0;u[e+60>>2]=f;u[e+56>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+60>>2]=f;u[e+56>>2]=g;m=d+A|0;u[m+60>>2]=f;u[m+56>>2]=j;m=d+z|0;u[m+60>>2]=f;u[m+56>>2]=j;m=d+y|0;u[m+60>>2]=f;u[m+56>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+180>>2];h=u[a+192>>2];g=u[a+184>>2];f=u[a+188>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+56>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+60>>2]=h;i=d+k|0;u[i+60>>2]=h;u[i+56>>2]=f;i=d+C|0;u[i+60>>2]=h;u[i+56>>2]=f;i=d+B|0;u[i+60>>2]=h;u[i+56>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+60>>2]=h;u[i+56>>2]=j;l=d+z|0;u[l+60>>2]=h;u[l+56>>2]=f;l=d+y|0;u[l+60>>2]=h;u[l+56>>2]=f;l=d+v|0;u[l+60>>2]=h;u[l+56>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+56>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+60>>2]=f;i=d+k|0;u[i+60>>2]=f;u[i+56>>2]=g;i=d+C|0;u[i+60>>2]=f;u[i+56>>2]=g;i=d+B|0;u[i+60>>2]=f;u[i+56>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+60>>2]=f;u[i+56>>2]=j;e=d+z|0;u[e+60>>2]=f;u[e+56>>2]=g;e=d+y|0;u[e+60>>2]=f;u[e+56>>2]=g;e=d+v|0;u[e+60>>2]=f;u[e+56>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+56>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+60>>2]=g;e=d+k|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+C|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+B|0;u[e+60>>2]=g;u[e+56>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+60>>2]=g;u[e+56>>2]=j;e=d+z|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+y|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+v|0;u[e+60>>2]=g;u[e+56>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function nB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+176>>2];D=u[a+168>>2];g=u[a+164>>2];j=u[a+172>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+48>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+52>>2]=f;e=b+d|0;u[e+52>>2]=f;u[e+48>>2]=j;e=d+F|0;u[e+52>>2]=f;u[e+48>>2]=j;e=d+C|0;u[e+52>>2]=f;u[e+48>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+52>>2]=f;u[e+48>>2]=g;m=d+A|0;u[m+52>>2]=f;u[m+48>>2]=j;m=d+z|0;u[m+52>>2]=f;u[m+48>>2]=j;m=d+y|0;u[m+52>>2]=f;u[m+48>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+164>>2];h=u[a+176>>2];g=u[a+168>>2];f=u[a+172>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+48>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+52>>2]=h;i=d+k|0;u[i+52>>2]=h;u[i+48>>2]=f;i=d+C|0;u[i+52>>2]=h;u[i+48>>2]=f;i=d+B|0;u[i+52>>2]=h;u[i+48>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+52>>2]=h;u[i+48>>2]=j;l=d+z|0;u[l+52>>2]=h;u[l+48>>2]=f;l=d+y|0;u[l+52>>2]=h;u[l+48>>2]=f;l=d+v|0;u[l+52>>2]=h;u[l+48>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+48>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+52>>2]=f;i=d+k|0;u[i+52>>2]=f;u[i+48>>2]=g;i=d+C|0;u[i+52>>2]=f;u[i+48>>2]=g;i=d+B|0;u[i+52>>2]=f;u[i+48>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+52>>2]=f;u[i+48>>2]=j;e=d+z|0;u[e+52>>2]=f;u[e+48>>2]=g;e=d+y|0;u[e+52>>2]=f;u[e+48>>2]=g;e=d+v|0;u[e+52>>2]=f;u[e+48>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+48>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+52>>2]=g;e=d+k|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+C|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+B|0;u[e+52>>2]=g;u[e+48>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+52>>2]=g;u[e+48>>2]=j;e=d+z|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+y|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+v|0;u[e+52>>2]=g;u[e+48>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function mB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+160>>2];D=u[a+152>>2];g=u[a+148>>2];j=u[a+156>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+40>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+44>>2]=f;e=b+d|0;u[e+44>>2]=f;u[e+40>>2]=j;e=d+F|0;u[e+44>>2]=f;u[e+40>>2]=j;e=d+C|0;u[e+44>>2]=f;u[e+40>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+44>>2]=f;u[e+40>>2]=g;m=d+A|0;u[m+44>>2]=f;u[m+40>>2]=j;m=d+z|0;u[m+44>>2]=f;u[m+40>>2]=j;m=d+y|0;u[m+44>>2]=f;u[m+40>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+148>>2];h=u[a+160>>2];g=u[a+152>>2];f=u[a+156>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+40>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+44>>2]=h;i=d+k|0;u[i+44>>2]=h;u[i+40>>2]=f;i=d+C|0;u[i+44>>2]=h;u[i+40>>2]=f;i=d+B|0;u[i+44>>2]=h;u[i+40>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+44>>2]=h;u[i+40>>2]=j;l=d+z|0;u[l+44>>2]=h;u[l+40>>2]=f;l=d+y|0;u[l+44>>2]=h;u[l+40>>2]=f;l=d+v|0;u[l+44>>2]=h;u[l+40>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+40>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+44>>2]=f;i=d+k|0;u[i+44>>2]=f;u[i+40>>2]=g;i=d+C|0;u[i+44>>2]=f;u[i+40>>2]=g;i=d+B|0;u[i+44>>2]=f;u[i+40>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+44>>2]=f;u[i+40>>2]=j;e=d+z|0;u[e+44>>2]=f;u[e+40>>2]=g;e=d+y|0;u[e+44>>2]=f;u[e+40>>2]=g;e=d+v|0;u[e+44>>2]=f;u[e+40>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+40>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+44>>2]=g;e=d+k|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+C|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+B|0;u[e+44>>2]=g;u[e+40>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+44>>2]=g;u[e+40>>2]=j;e=d+z|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+y|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+v|0;u[e+44>>2]=g;u[e+40>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function lB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+144>>2];D=u[a+136>>2];g=u[a+132>>2];j=u[a+140>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+32>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+36>>2]=f;e=b+d|0;u[e+36>>2]=f;u[e+32>>2]=j;e=d+F|0;u[e+36>>2]=f;u[e+32>>2]=j;e=d+C|0;u[e+36>>2]=f;u[e+32>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+36>>2]=f;u[e+32>>2]=g;m=d+A|0;u[m+36>>2]=f;u[m+32>>2]=j;m=d+z|0;u[m+36>>2]=f;u[m+32>>2]=j;m=d+y|0;u[m+36>>2]=f;u[m+32>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+132>>2];h=u[a+144>>2];g=u[a+136>>2];f=u[a+140>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+32>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+36>>2]=h;i=d+k|0;u[i+36>>2]=h;u[i+32>>2]=f;i=d+C|0;u[i+36>>2]=h;u[i+32>>2]=f;i=d+B|0;u[i+36>>2]=h;u[i+32>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+36>>2]=h;u[i+32>>2]=j;l=d+z|0;u[l+36>>2]=h;u[l+32>>2]=f;l=d+y|0;u[l+36>>2]=h;u[l+32>>2]=f;l=d+v|0;u[l+36>>2]=h;u[l+32>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+32>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+36>>2]=f;i=d+k|0;u[i+36>>2]=f;u[i+32>>2]=g;i=d+C|0;u[i+36>>2]=f;u[i+32>>2]=g;i=d+B|0;u[i+36>>2]=f;u[i+32>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+36>>2]=f;u[i+32>>2]=j;e=d+z|0;u[e+36>>2]=f;u[e+32>>2]=g;e=d+y|0;u[e+36>>2]=f;u[e+32>>2]=g;e=d+v|0;u[e+36>>2]=f;u[e+32>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+32>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+36>>2]=g;e=d+k|0;u[e+36>>2]=g;u[e+32>>2]=f;e=d+C|0;u[e+36>>2]=g;u[e+32>>2]=f;e=d+B|0;u[e+36>>2]=g;u[e+32>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+36>>2]=g;u[e+32>>2]=j;e=d+z|0;u[e+36>>2]=g;u[e+32>>2]=f;e=d+y|0;u[e+36>>2]=g;u[e+32>>2]=f;e=d+v|0;u[e+36>>2]=g;u[e+32>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function kB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+128>>2];D=u[a+120>>2];g=u[a+116>>2];j=u[a+124>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+24>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+28>>2]=f;e=b+d|0;u[e+28>>2]=f;u[e+24>>2]=j;e=d+F|0;u[e+28>>2]=f;u[e+24>>2]=j;e=d+C|0;u[e+28>>2]=f;u[e+24>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+28>>2]=f;u[e+24>>2]=g;m=d+A|0;u[m+28>>2]=f;u[m+24>>2]=j;m=d+z|0;u[m+28>>2]=f;u[m+24>>2]=j;m=d+y|0;u[m+28>>2]=f;u[m+24>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+116>>2];h=u[a+128>>2];g=u[a+120>>2];f=u[a+124>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+24>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+28>>2]=h;i=d+k|0;u[i+28>>2]=h;u[i+24>>2]=f;i=d+C|0;u[i+28>>2]=h;u[i+24>>2]=f;i=d+B|0;u[i+28>>2]=h;u[i+24>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+28>>2]=h;u[i+24>>2]=j;l=d+z|0;u[l+28>>2]=h;u[l+24>>2]=f;l=d+y|0;u[l+28>>2]=h;u[l+24>>2]=f;l=d+v|0;u[l+28>>2]=h;u[l+24>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+24>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+28>>2]=f;i=d+k|0;u[i+28>>2]=f;u[i+24>>2]=g;i=d+C|0;u[i+28>>2]=f;u[i+24>>2]=g;i=d+B|0;u[i+28>>2]=f;u[i+24>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+28>>2]=f;u[i+24>>2]=j;e=d+z|0;u[e+28>>2]=f;u[e+24>>2]=g;e=d+y|0;u[e+28>>2]=f;u[e+24>>2]=g;e=d+v|0;u[e+28>>2]=f;u[e+24>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+24>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+28>>2]=g;e=d+k|0;u[e+28>>2]=g;u[e+24>>2]=f;e=d+C|0;u[e+28>>2]=g;u[e+24>>2]=f;e=d+B|0;u[e+28>>2]=g;u[e+24>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+28>>2]=g;u[e+24>>2]=j;e=d+z|0;u[e+28>>2]=g;u[e+24>>2]=f;e=d+y|0;u[e+28>>2]=g;u[e+24>>2]=f;e=d+v|0;u[e+28>>2]=g;u[e+24>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function iB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+192>>2];D=u[a+184>>2];g=u[a+180>>2];j=u[a+188>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+72>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+76>>2]=f;e=b+d|0;u[e+76>>2]=f;u[e+72>>2]=j;e=d+F|0;u[e+76>>2]=f;u[e+72>>2]=j;e=d+C|0;u[e+76>>2]=f;u[e+72>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+76>>2]=f;u[e+72>>2]=g;m=d+A|0;u[m+76>>2]=f;u[m+72>>2]=j;m=d+z|0;u[m+76>>2]=f;u[m+72>>2]=j;m=d+y|0;u[m+76>>2]=f;u[m+72>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+180>>2];h=u[a+192>>2];g=u[a+184>>2];f=u[a+188>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+72>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+76>>2]=h;i=d+k|0;u[i+76>>2]=h;u[i+72>>2]=f;i=d+C|0;u[i+76>>2]=h;u[i+72>>2]=f;i=d+B|0;u[i+76>>2]=h;u[i+72>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+76>>2]=h;u[i+72>>2]=j;l=d+z|0;u[l+76>>2]=h;u[l+72>>2]=f;l=d+y|0;u[l+76>>2]=h;u[l+72>>2]=f;l=d+v|0;u[l+76>>2]=h;u[l+72>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+72>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+76>>2]=f;i=d+k|0;u[i+76>>2]=f;u[i+72>>2]=g;i=d+C|0;u[i+76>>2]=f;u[i+72>>2]=g;i=d+B|0;u[i+76>>2]=f;u[i+72>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+76>>2]=f;u[i+72>>2]=j;e=d+z|0;u[e+76>>2]=f;u[e+72>>2]=g;e=d+y|0;u[e+76>>2]=f;u[e+72>>2]=g;e=d+v|0;u[e+76>>2]=f;u[e+72>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+72>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+76>>2]=g;e=d+k|0;u[e+76>>2]=g;u[e+72>>2]=f;e=d+C|0;u[e+76>>2]=g;u[e+72>>2]=f;e=d+B|0;u[e+76>>2]=g;u[e+72>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+76>>2]=g;u[e+72>>2]=j;e=d+z|0;u[e+76>>2]=g;u[e+72>>2]=f;e=d+y|0;u[e+76>>2]=g;u[e+72>>2]=f;e=d+v|0;u[e+76>>2]=g;u[e+72>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function hB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+176>>2];D=u[a+168>>2];g=u[a+164>>2];j=u[a+172>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+64>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+68>>2]=f;e=b+d|0;u[e+68>>2]=f;u[e+64>>2]=j;e=d+F|0;u[e+68>>2]=f;u[e+64>>2]=j;e=d+C|0;u[e+68>>2]=f;u[e+64>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+68>>2]=f;u[e+64>>2]=g;m=d+A|0;u[m+68>>2]=f;u[m+64>>2]=j;m=d+z|0;u[m+68>>2]=f;u[m+64>>2]=j;m=d+y|0;u[m+68>>2]=f;u[m+64>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+164>>2];h=u[a+176>>2];g=u[a+168>>2];f=u[a+172>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+64>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+68>>2]=h;i=d+k|0;u[i+68>>2]=h;u[i+64>>2]=f;i=d+C|0;u[i+68>>2]=h;u[i+64>>2]=f;i=d+B|0;u[i+68>>2]=h;u[i+64>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+68>>2]=h;u[i+64>>2]=j;l=d+z|0;u[l+68>>2]=h;u[l+64>>2]=f;l=d+y|0;u[l+68>>2]=h;u[l+64>>2]=f;l=d+v|0;u[l+68>>2]=h;u[l+64>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+64>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+68>>2]=f;i=d+k|0;u[i+68>>2]=f;u[i+64>>2]=g;i=d+C|0;u[i+68>>2]=f;u[i+64>>2]=g;i=d+B|0;u[i+68>>2]=f;u[i+64>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+68>>2]=f;u[i+64>>2]=j;e=d+z|0;u[e+68>>2]=f;u[e+64>>2]=g;e=d+y|0;u[e+68>>2]=f;u[e+64>>2]=g;e=d+v|0;u[e+68>>2]=f;u[e+64>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+64>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+68>>2]=g;e=d+k|0;u[e+68>>2]=g;u[e+64>>2]=f;e=d+C|0;u[e+68>>2]=g;u[e+64>>2]=f;e=d+B|0;u[e+68>>2]=g;u[e+64>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+68>>2]=g;u[e+64>>2]=j;e=d+z|0;u[e+68>>2]=g;u[e+64>>2]=f;e=d+y|0;u[e+68>>2]=g;u[e+64>>2]=f;e=d+v|0;u[e+68>>2]=g;u[e+64>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function gB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+160>>2];D=u[a+152>>2];g=u[a+148>>2];j=u[a+156>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+56>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+60>>2]=f;e=b+d|0;u[e+60>>2]=f;u[e+56>>2]=j;e=d+F|0;u[e+60>>2]=f;u[e+56>>2]=j;e=d+C|0;u[e+60>>2]=f;u[e+56>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+60>>2]=f;u[e+56>>2]=g;m=d+A|0;u[m+60>>2]=f;u[m+56>>2]=j;m=d+z|0;u[m+60>>2]=f;u[m+56>>2]=j;m=d+y|0;u[m+60>>2]=f;u[m+56>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+148>>2];h=u[a+160>>2];g=u[a+152>>2];f=u[a+156>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+56>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+60>>2]=h;i=d+k|0;u[i+60>>2]=h;u[i+56>>2]=f;i=d+C|0;u[i+60>>2]=h;u[i+56>>2]=f;i=d+B|0;u[i+60>>2]=h;u[i+56>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+60>>2]=h;u[i+56>>2]=j;l=d+z|0;u[l+60>>2]=h;u[l+56>>2]=f;l=d+y|0;u[l+60>>2]=h;u[l+56>>2]=f;l=d+v|0;u[l+60>>2]=h;u[l+56>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+56>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+60>>2]=f;i=d+k|0;u[i+60>>2]=f;u[i+56>>2]=g;i=d+C|0;u[i+60>>2]=f;u[i+56>>2]=g;i=d+B|0;u[i+60>>2]=f;u[i+56>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+60>>2]=f;u[i+56>>2]=j;e=d+z|0;u[e+60>>2]=f;u[e+56>>2]=g;e=d+y|0;u[e+60>>2]=f;u[e+56>>2]=g;e=d+v|0;u[e+60>>2]=f;u[e+56>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+56>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+60>>2]=g;e=d+k|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+C|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+B|0;u[e+60>>2]=g;u[e+56>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+60>>2]=g;u[e+56>>2]=j;e=d+z|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+y|0;u[e+60>>2]=g;u[e+56>>2]=f;e=d+v|0;u[e+60>>2]=g;u[e+56>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function fB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+144>>2];D=u[a+136>>2];g=u[a+132>>2];j=u[a+140>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+48>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+52>>2]=f;e=b+d|0;u[e+52>>2]=f;u[e+48>>2]=j;e=d+F|0;u[e+52>>2]=f;u[e+48>>2]=j;e=d+C|0;u[e+52>>2]=f;u[e+48>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+52>>2]=f;u[e+48>>2]=g;m=d+A|0;u[m+52>>2]=f;u[m+48>>2]=j;m=d+z|0;u[m+52>>2]=f;u[m+48>>2]=j;m=d+y|0;u[m+52>>2]=f;u[m+48>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+132>>2];h=u[a+144>>2];g=u[a+136>>2];f=u[a+140>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+48>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+52>>2]=h;i=d+k|0;u[i+52>>2]=h;u[i+48>>2]=f;i=d+C|0;u[i+52>>2]=h;u[i+48>>2]=f;i=d+B|0;u[i+52>>2]=h;u[i+48>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+52>>2]=h;u[i+48>>2]=j;l=d+z|0;u[l+52>>2]=h;u[l+48>>2]=f;l=d+y|0;u[l+52>>2]=h;u[l+48>>2]=f;l=d+v|0;u[l+52>>2]=h;u[l+48>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+48>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+52>>2]=f;i=d+k|0;u[i+52>>2]=f;u[i+48>>2]=g;i=d+C|0;u[i+52>>2]=f;u[i+48>>2]=g;i=d+B|0;u[i+52>>2]=f;u[i+48>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+52>>2]=f;u[i+48>>2]=j;e=d+z|0;u[e+52>>2]=f;u[e+48>>2]=g;e=d+y|0;u[e+52>>2]=f;u[e+48>>2]=g;e=d+v|0;u[e+52>>2]=f;u[e+48>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+48>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+52>>2]=g;e=d+k|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+C|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+B|0;u[e+52>>2]=g;u[e+48>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+52>>2]=g;u[e+48>>2]=j;e=d+z|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+y|0;u[e+52>>2]=g;u[e+48>>2]=f;e=d+v|0;u[e+52>>2]=g;u[e+48>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function eB(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=0,n=x(0),o=x(0),p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=x(0),E=x(0),F=0,G=0,H=x(0);a:{p=q[b+32>>2];d=q[p>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;p=q[a+24>>2];a=q[a+28>>2]-p|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;k=q[b+12>>2];t=(k|0)>1?k:1;b=q[c>>2];v=b<<3;y=w(b,7);z=w(b,6);A=w(b,3);B=b<<1;C=w(b,5);F=b<<2;while(1){if((k|0)>=1){a=p+w(r,240)|0;h=u[a+128>>2];D=u[a+120>>2];g=u[a+116>>2];j=u[a+124>>2];E=x(g+j);j=x(g+x(j*x(.5)));G=w(k,q[a+4>>2]);o=x(w(k,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+40>>2]=g;m=a+G|0;f=x(D+x(h*x(x(m|0)/o)));u[d+44>>2]=f;e=b+d|0;u[e+44>>2]=f;u[e+40>>2]=j;e=d+F|0;u[e+44>>2]=f;u[e+40>>2]=j;e=d+C|0;u[e+44>>2]=f;u[e+40>>2]=E;e=d+B|0;f=x(D+x(h*x(x(m+1|0)/o)));u[e+44>>2]=f;u[e+40>>2]=g;m=d+A|0;u[m+44>>2]=f;u[m+40>>2]=j;m=d+z|0;u[m+44>>2]=f;u[m+40>>2]=j;m=d+y|0;u[m+44>>2]=f;u[m+40>>2]=E;d=d+v|0;a=a+1|0;if((t|0)!=(a|0)){continue}break}q[c+4>>2]=d}r=r+1|0;if((s|0)!=(r|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;F=q[a+24>>2];a=q[a+28>>2]-F|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;G=a>>>0>1?a:1;b=q[b+12>>2];s=(b|0)>1?b:1;k=q[c>>2];t=k<<3;v=w(k,7);y=w(k,6);z=w(k,3);A=k<<1;B=w(k,5);C=k<<2;m=q[p+12>>2];D=x(w(b,m)|0);E=x(b|0);while(1){a=F+w(r,240)|0;j=u[a+116>>2];h=u[a+128>>2];g=u[a+120>>2];f=u[a+124>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}o=x(j+f);f=x(j+x(f*x(.5)));e=w(b,q[a+4>>2]);n=x(x(g+x(h*u[p+16>>2]))-g);a=0;while(1){u[d+40>>2]=j;l=a+e|0;h=x(g+x(n*x(x(l|0)/D)));u[d+44>>2]=h;i=d+k|0;u[i+44>>2]=h;u[i+40>>2]=f;i=d+C|0;u[i+44>>2]=h;u[i+40>>2]=f;i=d+B|0;u[i+44>>2]=h;u[i+40>>2]=o;i=d+A|0;h=x(g+x(n*x(x(l+1|0)/D)));u[i+44>>2]=h;u[i+40>>2]=j;l=d+z|0;u[l+44>>2]=h;u[l+40>>2]=f;l=d+y|0;u[l+44>>2]=h;u[l+40>>2]=f;l=d+v|0;u[l+44>>2]=h;u[l+40>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}e=q[p+8>>2];l=q[a>>2]+(e^-1)|0;if(r>>>0>=l>>>0){if((b|0)<1){break b}o=x(j+f);n=x(g+h);h=x(g+x(h*u[p+20>>2]));n=x(n-h);g=x(j+x(f*x(.5)));l=w(b,q[a+4>>2]-l|0);H=x(w(b,e)|0);a=0;while(1){u[d+40>>2]=j;e=a+l|0;f=x(h+x(n*x(x(e|0)/H)));u[d+44>>2]=f;i=d+k|0;u[i+44>>2]=f;u[i+40>>2]=g;i=d+C|0;u[i+44>>2]=f;u[i+40>>2]=g;i=d+B|0;u[i+44>>2]=f;u[i+40>>2]=o;i=d+A|0;f=x(h+x(n*x(x(e+1|0)/H)));u[i+44>>2]=f;u[i+40>>2]=j;e=d+z|0;u[e+44>>2]=f;u[e+40>>2]=g;e=d+y|0;u[e+44>>2]=f;u[e+40>>2]=g;e=d+v|0;u[e+44>>2]=f;u[e+40>>2]=o;d=d+t|0;a=a+1|0;if((s|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}o=x(j+f);f=x(x(j+j)+x(f*x(.5)));n=x(g+x(h*u[p+20>>2]));h=x(g+x(h*u[p+16>>2]));n=x(n-h);a=0;while(1){u[d+40>>2]=j;g=x(h+x(n*x(x(a|0)/E)));u[d+44>>2]=g;e=d+k|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+C|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+B|0;u[e+44>>2]=g;u[e+40>>2]=o;e=d+A|0;a=a+1|0;g=x(h+x(n*x(x(a|0)/E)));u[e+44>>2]=g;u[e+40>>2]=j;e=d+z|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+y|0;u[e+44>>2]=g;u[e+40>>2]=f;e=d+v|0;u[e+44>>2]=g;u[e+40>>2]=o;d=d+t|0;if((a|0)!=(s|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((G|0)!=(r|0)){continue}break}}}function cB(a,b,c){var d=0,e=0,f=x(0),g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=0,t=0,v=0,y=0,z=0,A=x(0),B=x(0),C=0,D=x(0),E=x(0);a:{k=q[b+32>>2];d=q[k>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;k=q[a+24>>2];a=q[a+28>>2]-k|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;n=a>>>0>1?a:1;h=q[b+12>>2];o=(h|0)>1?h:1;b=q[c>>2];p=b<<3;r=w(b,7);s=w(b,6);t=w(b,3);v=b<<1;y=w(b,5);z=b<<2;while(1){if((h|0)>=1){a=k+w(l,240)|0;C=w(h,q[a+4>>2]);A=x(w(h,q[a>>2]+ -1|0)|0);a=0;while(1){q[d+32>>2]=0;j=a+C|0;f=x(x(x(j|0)/A)+x(0));u[d+36>>2]=f;e=b+d|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+z|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+y|0;u[e+36>>2]=f;q[e+32>>2]=1065353216;e=d+v|0;f=x(x(x(j+1|0)/A)+x(0));u[e+36>>2]=f;q[e+32>>2]=0;j=d+t|0;u[j+36>>2]=f;q[j+32>>2]=1056964608;j=d+s|0;u[j+36>>2]=f;q[j+32>>2]=1056964608;j=d+r|0;u[j+36>>2]=f;q[j+32>>2]=1065353216;d=d+p|0;a=a+1|0;if((o|0)!=(a|0)){continue}break}q[c+4>>2]=d}l=l+1|0;if((n|0)!=(l|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;C=a>>>0>1?a:1;b=q[b+12>>2];n=(b|0)>1?b:1;h=q[c>>2];o=h<<3;p=w(h,7);r=w(h,6);s=w(h,3);t=h<<1;v=w(h,5);y=h<<2;j=q[k+12>>2];A=x(w(b,j)|0);D=x(b|0);while(1){b:{c:{if(l>>>0>>0){if((b|0)<1){break b}m=x(u[k+16>>2]+x(0));e=w(b,q[(w(l,240)+z|0)+4>>2]);a=0;while(1){q[d+32>>2]=0;i=a+e|0;f=x(x(m*x(x(i|0)/A))+x(0));u[d+36>>2]=f;g=d+h|0;u[g+36>>2]=f;q[g+32>>2]=1056964608;g=d+y|0;u[g+36>>2]=f;q[g+32>>2]=1056964608;g=d+v|0;u[g+36>>2]=f;q[g+32>>2]=1065353216;g=d+t|0;f=x(x(m*x(x(i+1|0)/A))+x(0));u[g+36>>2]=f;q[g+32>>2]=0;i=d+s|0;u[i+36>>2]=f;q[i+32>>2]=1056964608;i=d+r|0;u[i+36>>2]=f;q[i+32>>2]=1056964608;i=d+p|0;u[i+36>>2]=f;q[i+32>>2]=1065353216;d=d+o|0;a=a+1|0;if((n|0)!=(a|0)){continue}break}break c}a=w(l,240)+z|0;e=q[k+8>>2];i=q[a>>2]+(e^-1)|0;if(l>>>0>=i>>>0){if((b|0)<1){break b}m=x(u[k+20>>2]+x(0));B=x(x(1)-m);i=w(b,q[a+4>>2]-i|0);E=x(w(b,e)|0);a=0;while(1){q[d+32>>2]=0;e=a+i|0;f=x(m+x(B*x(x(e|0)/E)));u[d+36>>2]=f;g=d+h|0;u[g+36>>2]=f;q[g+32>>2]=1056964608;g=d+y|0;u[g+36>>2]=f;q[g+32>>2]=1056964608;g=d+v|0;u[g+36>>2]=f;q[g+32>>2]=1065353216;g=d+t|0;f=x(m+x(B*x(x(e+1|0)/E)));u[g+36>>2]=f;q[g+32>>2]=0;e=d+s|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+r|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+p|0;u[e+36>>2]=f;q[e+32>>2]=1065353216;d=d+o|0;a=a+1|0;if((n|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}m=x(u[k+16>>2]+x(0));B=x(x(u[k+20>>2]+x(0))-m);a=0;while(1){q[d+32>>2]=0;f=x(m+x(B*x(x(a|0)/D)));u[d+36>>2]=f;e=d+h|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+y|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+v|0;u[e+36>>2]=f;q[e+32>>2]=1065353216;e=d+t|0;a=a+1|0;f=x(m+x(B*x(x(a|0)/D)));u[e+36>>2]=f;q[e+32>>2]=0;e=d+s|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+r|0;u[e+36>>2]=f;q[e+32>>2]=1056964608;e=d+p|0;u[e+36>>2]=f;q[e+32>>2]=1065353216;d=d+o|0;if((a|0)!=(n|0)){continue}break}}q[c+4>>2]=d}l=l+1|0;if((C|0)!=(l|0)){continue}break}}}function xG(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,x=0,z=0;g=ue-560|0;ue=g;e=c;c=(c+ -3|0)/24|0;p=(c|0)>0?c:0;j=e+w(p,-24)|0;k=q[86196];if((k|0)>=0){e=k+1|0;c=p;while(1){v[(g+320|0)+(f<<3)>>3]=(c|0)<0?0:+q[(c<<2)+344800>>2];c=c+1|0;f=f+1|0;if((e|0)!=(f|0)){continue}break}}l=j+ -24|0;e=0;r=(k|0)>0?k:0;while(1){f=e;c=0;d=0;while(1){d=d+v[(c<<3)+a>>3]*v[(g+320|0)+(f-c<<3)>>3];c=c+1|0;if((c|0)!=1){continue}break}v[(e<<3)+g>>3]=d;c=(e|0)==(r|0);e=e+1|0;if(!c){continue}break}z=47-j|0;s=48-j|0;t=j+ -25|0;e=k;a:{while(1){d=v[(e<<3)+g>>3];c=0;f=e;n=(e|0)<1;if(!n){while(1){i=(g+480|0)+(c<<2)|0;m=d;d=d*5.960464477539063e-8;b:{if(y(d)<2147483648){h=~~d;break b}h=-2147483648}d=+(h|0);m=m+d*-16777216;c:{if(y(m)<2147483648){h=~~m;break c}h=-2147483648}q[i>>2]=h;f=f+ -1|0;d=v[(f<<3)+g>>3]+d;c=c+1|0;if((e|0)!=(c|0)){continue}break}}d=iV(d,l);d=d+C(d*.125)*-8;d:{if(y(d)<2147483648){h=~~d;break d}h=-2147483648}d=d- +(h|0);e:{f:{g:{u=(l|0)<1;h:{if(!u){f=((e<<2)+g|0)+476|0;i=q[f>>2];c=i>>s;o=f;f=i-(c<>2]=f;h=c+h|0;i=f>>z;break h}if(l){break g}i=q[((e<<2)+g|0)+476>>2]>>23}if((i|0)<1){break e}break f}i=2;if(!!(d>=.5)){break f}i=0;break e}c=0;f=0;if(!n){while(1){o=(g+480|0)+(c<<2)|0;n=q[o>>2];x=16777215;i:{j:{if(f){break j}x=16777216;if(n){break j}f=0;break i}q[o>>2]=x-n;f=1}c=c+1|0;if((e|0)!=(c|0)){continue}break}}k:{if(t>>>0>1|u){break k}if(t-1){c=((e<<2)+g|0)+476|0;q[c>>2]=q[c>>2]&8388607;break k}c=((e<<2)+g|0)+476|0;q[c>>2]=q[c>>2]&4194303}h=h+1|0;if((i|0)!=2){break e}d=1-d;i=2;if(!f){break e}d=d-iV(1,l)}if(d==0){f=0;l:{c=e;if((c|0)<=(k|0)){break l}while(1){c=c+ -1|0;f=q[(g+480|0)+(c<<2)>>2]|f;if((c|0)>(k|0)){continue}break}if(!f){break l}j=l;while(1){j=j+ -24|0;e=e+ -1|0;if(!q[(g+480|0)+(e<<2)>>2]){continue}break}break a}c=1;while(1){f=c;c=c+1|0;if(!q[(g+480|0)+(k-f<<2)>>2]){continue}break}f=e+f|0;while(1){h=e+1|0;e=e+1|0;v[(g+320|0)+(h<<3)>>3]=q[(p+e<<2)+344800>>2];c=0;d=0;while(1){d=d+v[(c<<3)+a>>3]*v[(g+320|0)+(h-c<<3)>>3];c=c+1|0;if((c|0)!=1){continue}break}v[(e<<3)+g>>3]=d;if((e|0)<(f|0)){continue}break}e=f;continue}break}d=iV(d,0-l|0);m:{if(!!(d>=16777216)){f=(g+480|0)+(e<<2)|0;m=d;d=d*5.960464477539063e-8;n:{if(y(d)<2147483648){c=~~d;break n}c=-2147483648}d=m+ +(c|0)*-16777216;o:{if(y(d)<2147483648){a=~~d;break o}a=-2147483648}q[f>>2]=a;e=e+1|0;break m}if(y(d)<2147483648){c=~~d}else{c=-2147483648}j=l}q[(g+480|0)+(e<<2)>>2]=c}d=iV(1,j);if((e|0)>=0){c=e;while(1){v[(c<<3)+g>>3]=d*+q[(g+480|0)+(c<<2)>>2];d=d*5.960464477539063e-8;a=0;f=(c|0)>0;c=c+ -1|0;if(f){continue}break}f=e;while(1){j=r>>>0>>0?r:a;l=e-f|0;c=0;d=0;while(1){d=d+v[(c<<3)+347568>>3]*v[(c+f<<3)+g>>3];k=(c|0)!=(j|0);c=c+1|0;if(k){continue}break}v[(g+160|0)+(l<<3)>>3]=d;f=f+ -1|0;c=(a|0)!=(e|0);a=a+1|0;if(c){continue}break}}d=0;if((e|0)>=0){while(1){d=d+v[(g+160|0)+(e<<3)>>3];a=(e|0)>0;e=e+ -1|0;if(a){continue}break}}v[b>>3]=i?-d:d;ue=g+560|0;return h&7}function _C(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=ue-16|0;ue=h;e=q[d>>2];if(e){n[q[q[e>>2]>>2]](e)|0}e=q[a+44>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+44>>2]=0}q[a+44>>2]=q[d>>2];e=q[b+4>>2]-q[b>>2]>>3;a:{if(!(q[c+4>>2]-q[c>>2]>>3>>>0<17?e>>>0<=16:0)){a=_S(32);q[h>>2]=a;q[h+4>>2]=28;q[h+8>>2]=-2147483616;d=0;o[a+28|0]=0;b=r[340440]|r[340441]<<8|(r[340442]<<16|r[340443]<<24);o[a+24|0]=b;o[a+25|0]=b>>>8;o[a+26|0]=b>>>16;o[a+27|0]=b>>>24;b=r[340436]|r[340437]<<8|(r[340438]<<16|r[340439]<<24);c=r[340432]|r[340433]<<8|(r[340434]<<16|r[340435]<<24);o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;o[a+20|0]=b;o[a+21|0]=b>>>8;o[a+22|0]=b>>>16;o[a+23|0]=b>>>24;b=r[340428]|r[340429]<<8|(r[340430]<<16|r[340431]<<24);c=r[340424]|r[340425]<<8|(r[340426]<<16|r[340427]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;o[a+12|0]=b;o[a+13|0]=b>>>8;o[a+14|0]=b>>>16;o[a+15|0]=b>>>24;b=r[340420]|r[340421]<<8|(r[340422]<<16|r[340423]<<24);c=r[340416]|r[340417]<<8|(r[340418]<<16|r[340419]<<24);o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=b>>>16;o[a+7|0]=b>>>24;el(2,h);if(o[h+11|0]>-1){break a}_U(q[h>>2]);break a}f=a+20|0;d=q[a+24>>2];i=q[a+20>>2];g=(d-i|0)/12|0;b:{if(e>>>0>g>>>0){Ew(f,e-g|0);e=q[a+24>>2];break b}if(e>>>0>=g>>>0){e=d;break b}e=i+w(e,12)|0;if((e|0)!=(d|0)){while(1){g=d+ -12|0;c:{if(o[d+ -1|0]>-1){break c}d=q[d+ -4>>2];i=q[g>>2];xt(h);n[q[h+8>>2]](h,i,d&2147483647);d=q[q[h+12>>2]+4>>2];if(!d){break c}n[d](q[h>>2])}d=g;if((e|0)!=(d|0)){continue}break}}q[a+24>>2]=e}d=q[f>>2];if((e|0)!=(d|0)){g=0;while(1){j=q[q[b>>2]+(g<<3)>>2];f=sV(j);d:{e:{f:{e=w(g,12)+d|0;d=o[e+11|0];g:{if((d|0)<=-1){i=(q[e+8>>2]&2147483647)+ -1|0;d=q[e>>2];if(i>>>0>=f>>>0){break e}d=q[e+4>>2];break g}if(f>>>0<=10){break f}i=10;d=d&255}Fw(e,i,f-i|0,d,d,f,j);break d}d=e}if(f){mV(d,j,f)}o[d+f|0]=0;if(o[e+11|0]<=-1){q[e+4>>2]=f;break d}o[e+11|0]=f}g=g+1|0;d=q[a+20>>2];if(g>>>0<(q[a+24>>2]-d|0)/12>>>0){continue}break}}g=a+32|0;b=q[c+4>>2]-q[c>>2]>>3;d=q[a+36>>2];f=q[a+32>>2];e=(d-f|0)/12|0;h:{if(b>>>0>e>>>0){Ew(g,b-e|0);e=q[a+36>>2];break h}if(b>>>0>=e>>>0){e=d;break h}e=f+w(b,12)|0;if((e|0)!=(d|0)){while(1){b=d+ -12|0;i:{if(o[d+ -1|0]>-1){break i}d=q[d+ -4>>2];f=q[b>>2];xt(h);n[q[h+8>>2]](h,f,d&2147483647);d=q[q[h+12>>2]+4>>2];if(!d){break i}n[d](q[h>>2])}d=b;if((e|0)!=(d|0)){continue}break}}q[a+36>>2]=e}d=q[g>>2];if((e|0)!=(d|0)){g=0;while(1){f=q[q[c>>2]+(g<<3)>>2];e=sV(f);j:{k:{l:{d=w(g,12)+d|0;b=o[d+11|0];m:{if((b|0)<=-1){b=(q[d+8>>2]&2147483647)+ -1|0;i=q[d>>2];if(b>>>0>=e>>>0){break k}i=q[d+4>>2];break m}if(e>>>0<=10){break l}i=b&255;b=10}Fw(d,b,e-b|0,i,i,e,f);break j}i=d}b=i;if(e){mV(b,f,e)}o[b+e|0]=0;if(o[d+11|0]<=-1){q[d+4>>2]=e;break j}o[d+11|0]=e}g=g+1|0;d=q[a+32>>2];if(g>>>0<(q[a+36>>2]-d|0)/12>>>0){continue}break}}b=q[a+16>>2];if(b){ba(b|0)}q[a+52>>2]=q[a+48>>2];q[a- -64>>2]=q[a+60>>2];d=ZC(a)}ue=h+16|0;return d}function er(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=ue-16|0;ue=k;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=1;q[a+20>>2]=0;q[a+24>>2]=0;q[a>>2]=6180;q[a+16>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;p[a+36>>1]=0;g=a+24|0;a:{if(!b){br(g,1);break a}m=a+20|0;a=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[m>>2]=a;if((a|0)>=6){br(g,1);break a}e=b+4|0;e=(a|0)==2?e:(a|0)>4?e:b;b=e+8|0;b:{if((a|0)!=5){i=1;br(g,1);break b}i=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);if(!i){break a}br(g,i);if((i|0)<1){break a}b=e+12|0}while(1){h=w(l,36);a=h+q[g>>2]|0;f=q[a>>2];e=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);c=(q[a+4>>2]-f|0)/60|0;c:{if(e>>>0>c>>>0){fr(a,e-c|0);break c}if(e>>>0>=c>>>0){break c}q[a+4>>2]=f+w(e,60)}b=b+4|0;d:{if(q[m>>2]<=0){f=0;if((e|0)<=0){break d}while(1){c=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);j=w(f,60);a=j+q[q[g>>2]+h>>2]|0;d=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);o[a|0]=d;o[a+1|0]=d>>>8;o[a+2|0]=d>>>16;o[a+3|0]=d>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;c=r[b+52|0]|r[b+53|0]<<8|(r[b+54|0]<<16|r[b+55|0]<<24);d=r[b+48|0]|r[b+49|0]<<8|(r[b+50|0]<<16|r[b+51|0]<<24);o[a+48|0]=d;o[a+49|0]=d>>>8;o[a+50|0]=d>>>16;o[a+51|0]=d>>>24;o[a+52|0]=c;o[a+53|0]=c>>>8;o[a+54|0]=c>>>16;o[a+55|0]=c>>>24;c=r[b+44|0]|r[b+45|0]<<8|(r[b+46|0]<<16|r[b+47|0]<<24);d=r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24);o[a+40|0]=d;o[a+41|0]=d>>>8;o[a+42|0]=d>>>16;o[a+43|0]=d>>>24;o[a+44|0]=c;o[a+45|0]=c>>>8;o[a+46|0]=c>>>16;o[a+47|0]=c>>>24;c=r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24);d=r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24);o[a+32|0]=d;o[a+33|0]=d>>>8;o[a+34|0]=d>>>16;o[a+35|0]=d>>>24;o[a+36|0]=c;o[a+37|0]=c>>>8;o[a+38|0]=c>>>16;o[a+39|0]=c>>>24;c=r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24);d=r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24);o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;o[a+28|0]=c;o[a+29|0]=c>>>8;o[a+30|0]=c>>>16;o[a+31|0]=c>>>24;c=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);d=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;c=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);d=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;Ne(k+12|0,255,255,255,255);q[(j+q[q[g>>2]+h>>2]|0)+56>>2]=q[k+12>>2];b=b+56|0;f=f+1|0;if((e|0)!=(f|0)){continue}break}break d}a=w(e,60);kV(q[q[g>>2]+h>>2],b,a);b=a+b|0}e=b+4|0;a=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);f=q[g>>2];b=h+f|0;d=b+16|0;j=q[b+12>>2];c=(q[d>>2]-j|0)/12|0;e:{if(a>>>0>c>>>0){gr(b+12|0,a-c|0);f=q[g>>2];break e}if(a>>>0>=c>>>0){break e}q[d>>2]=w(a,12)+j}a=w(a,12);kV(q[(f+h|0)+12>>2],e,a);b=a+e|0;l=l+1|0;if((l|0)!=(i|0)){continue}break}}ue=k+16|0}function wh(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=0;a:{if(q[a+4>>2]>(d|0)){break a}h=2;e=0;if(c>>>0<8){break a}e=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);q[a+12>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[a+16>>2]=e;e=8;if(c>>>0<16){break a}e=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);q[a+20>>2]=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);q[a+24>>2]=e;h=0;e=16}f=h&2;g=f;b:{c:{if(!f){f=e;i=e+8|0;if(i>>>0<=c>>>0){break c}}g=h|2;break b}f=b+f|0;e=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);q[a+36>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[a+40>>2]=e;e=i|j}f=g&3;g=f;d:{e:{i=0;if(i|(f|0)!=2){f=e;h=e+8|0;if(h>>>0<=c>>>0){break e}}g=2;break d}f=b+f|0;e=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);q[a+44>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[a+48>>2]=e;e=h|i}g=g&3;f=g;i=e;h=e+4|0;g=!0&(f|0)==2|h>>>0>c>>>0;f:{g:{if(q[a+8>>2]<=(d|0)){h:{if(g){o[a+88|0]=0;g=2;break h}d=b+i|0;j=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+88|0]=(j|0)>0;d=h;e=k|d;g=f;if((j|0)<1){break h}g=i+12|0;e=2;i:{if(g>>>0>c>>>0){break i}e=b+h|0;d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[a+28>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a+32>>2]=d;d=g|k;e=f}e=e&3;g=e;j:{h=0;if(h|(e|0)!=2){e=d;f=d+8|0;if(f>>>0<=c>>>0){break j}}e=d;g=2;break h}e=b+e|0;d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[a+52>>2]=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[a+56>>2]=d;e=f|h}d=g&3;f=d;k:{l:{h=0;if(h|(d|0)!=2){d=e;g=d+4|0;if(g>>>0<=c>>>0){break l}}d=q[a+60>>2];f=2;break k}d=b+d|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+60>>2]=d;e=g|h}if(d){break f}d=f&3;f=d;m:{n:{if(0|(d|0)!=2){d=e;g=d+4|0;if(g>>>0<=c>>>0){break n}}f=2;d=e;break m}d=b+d|0;q[a+64>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}e=f&3;f=e;o:{p:{if(0|(e|0)!=2){e=d;g=d+4|0;if(g>>>0<=c>>>0){break p}}f=2;break o}d=b+e|0;q[a+68>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}g=f&3;f=g;e=d;if(0|(f|0)!=2){g=e+4|0;if(g>>>0<=c>>>0){break g}}f=2;break f}if(g){f=2;d=e}else{d=b+i|0;q[a+64>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=h|k}e=f&3;f=e;q:{r:{h=0;if(h|(e|0)!=2){e=d;g=d+4|0;if(g>>>0<=c>>>0){break r}}f=2;break q}d=b+e|0;q[a+68>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g|h}if(!((f&3)==2|d+4>>>0>c>>>0)){b=b+d|0;q[a+72>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24)}q[a+80>>2]=1;q[a+84>>2]=0;return}d=b+d|0;q[a+72>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);e=g|h}g=a;d=f&3;f=d;s:{t:{i=0;if(i|(d|0)!=2){d=e;h=d+4|0;if(h>>>0<=c>>>0){break t}}f=2;d=0;break s}e=h|i;d=r[b+d|0]}q[g+84>>2]=d;g=q[a+80>>2];q[a+80>>2]=((g|0)>(d|0)?g:d)+1;u:{if((f&3)!=2){f=e+4|0;if(f>>>0<=c>>>0){break u}}o[a+89|0]=0;return}d=b+e|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+89|0]=(d|0)>0;if(!((d|0)<1|e+8>>>0>c>>>0)){c=a;a=b+f|0;q[c+92>>2]=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24)}}function ai(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=q[b>>2];e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=e;f=q[b>>2];d=f+4|0;q[b>>2]=d;a:{if(e>>>0<=4){b:{switch(e-1|0){default:q[a+4>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);break a;case 0:e=0;if((c|0)>=4){e=r[f+4|0];q[b>>2]=f+6}q[a+4>>2]=e;c=q[b>>2];c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+8|0]=c;o[a+9|0]=c>>>8;o[a+10|0]=c>>>16;o[a+11|0]=c>>>24;c=q[b>>2];q[b>>2]=c+4;c=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;break a;case 1:e=0;d=0;c=(c|0)<4;if(!c){d=r[f+4|0];q[b>>2]=f+6}q[a+4>>2]=d;d=q[b>>2];d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;d=q[b>>2];q[b>>2]=d+4;d=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);o[a+12|0]=d;o[a+13|0]=d>>>8;o[a+14|0]=d>>>16;o[a+15|0]=d>>>24;d=q[b>>2];q[b>>2]=d+4;if(!c){e=r[d+4|0];q[b>>2]=d+6}q[a+16>>2]=e;c=q[b>>2];c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;c=q[b>>2];q[b>>2]=c+4;c=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);o[a+24|0]=c;o[a+25|0]=c>>>8;o[a+26|0]=c>>>16;o[a+27|0]=c>>>24;c=q[b>>2];q[b>>2]=c+4;q[a+28>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+32>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+36>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);break a;case 2:d=lV(_S(180),0,180);gj(d+4|0,x(255));gj(d+48|0,x(255));gj(d+92|0,x(255));gj(d+136|0,x(255));q[a+4>>2]=d;g=b,h=uj(d,q[b>>2],c)+q[b>>2]|0,q[g>>2]=h;return;case 3:break b}}c=_S(232);q[c+24>>2]=1065353216;q[c+16>>2]=1065353216;q[c+20>>2]=1065353216;q[c>>2]=0;q[c+4>>2]=0;q[c+44>>2]=1065353216;q[c+36>>2]=1065353216;q[c+40>>2]=1065353216;q[c+8>>2]=0;q[c+12>>2]=1065353216;q[c+64>>2]=1065353216;q[c+68>>2]=0;q[c+56>>2]=1065353216;q[c+60>>2]=1065353216;q[c+28>>2]=0;q[c+32>>2]=1065353216;q[c+80>>2]=1065353216;q[c+84>>2]=1065353216;q[c+72>>2]=1065353216;q[c+76>>2]=1065353216;q[c+48>>2]=0;q[c+52>>2]=1065353216;q[c+92>>2]=1065353216;q[c+96>>2]=1065353216;q[c+100>>2]=1065353216;q[c+104>>2]=1065353216;q[c+112>>2]=1065353216;q[c+116>>2]=1065353216;q[c+120>>2]=1065353216;q[c+124>>2]=1065353216;q[c+88>>2]=0;q[c+140>>2]=1065353216;q[c+144>>2]=1065353216;q[c+132>>2]=1065353216;q[c+136>>2]=1065353216;q[c+108>>2]=0;q[c+152>>2]=1065353216;q[c+156>>2]=1065353216;q[c+160>>2]=1065353216;q[c+164>>2]=1065353216;q[c+128>>2]=0;q[c+168>>2]=0;q[c+172>>2]=1065353216;q[c+148>>2]=0;q[c+176>>2]=0;q[c+180>>2]=1065353216;q[c+184>>2]=0;q[c+188>>2]=1065353216;q[c+192>>2]=0;q[c+196>>2]=1065353216;q[c+200>>2]=0;q[c+204>>2]=1065353216;q[c+208>>2]=0;q[c+212>>2]=1065353216;q[c+216>>2]=0;q[c+220>>2]=1065353216;q[c+224>>2]=0;q[c+228>>2]=1065353216;d=q[a+40>>2];q[a+40>>2]=c;if(d){_U(d);c=q[a+40>>2]}Ds(c,b)}return}q[b>>2]=q[b>>2]+4}function dV(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=a+b|0;a:{b:{c=q[a+4>>2];if(c&1){break b}if(!(c&3)){break a}c=q[a>>2];b=c+b|0;a=a-c|0;if((a|0)!=q[93115]){if(c>>>0<=255){e=c>>>3|0;c=q[a+8>>2];d=q[a+12>>2];if((d|0)==(c|0)){i=372440,j=q[93110]&zW(-2,e),q[i>>2]=j;break b}q[c+12>>2]=d;q[d+8>>2]=c;break b}h=q[a+24>>2];c=q[a+12>>2];c:{if((c|0)!=(a|0)){d=q[a+8>>2];q[d+12>>2]=c;q[c+8>>2]=d;break c}d:{d=a+20|0;e=q[d>>2];if(e){break d}d=a+16|0;e=q[d>>2];if(e){break d}c=0;break c}while(1){g=d;c=e;d=c+20|0;e=q[d>>2];if(e){continue}d=c+16|0;e=q[c+16>>2];if(e){continue}break}q[g>>2]=0}if(!h){break b}d=q[a+28>>2];e=(d<<2)+372744|0;e:{if(q[e>>2]==(a|0)){q[e>>2]=c;if(c){break e}i=372444,j=q[93111]&zW(-2,d),q[i>>2]=j;break b}q[h+(q[h+16>>2]==(a|0)?16:20)>>2]=c;if(!c){break b}}q[c+24>>2]=h;d=q[a+16>>2];if(d){q[c+16>>2]=d;q[d+24>>2]=c}d=q[a+20>>2];if(!d){break b}q[c+20>>2]=d;q[d+24>>2]=c;break b}c=q[f+4>>2];if((c&3)!=3){break b}q[93112]=b;q[f+4>>2]=c&-2;q[a+4>>2]=b|1;q[f>>2]=b;return}c=q[f+4>>2];f:{if(!(c&2)){if((f|0)==q[93116]){q[93116]=a;b=q[93113]+b|0;q[93113]=b;q[a+4>>2]=b|1;if(q[93115]!=(a|0)){break a}q[93112]=0;q[93115]=0;return}if((f|0)==q[93115]){q[93115]=a;b=q[93112]+b|0;q[93112]=b;q[a+4>>2]=b|1;q[a+b>>2]=b;return}b=(c&-8)+b|0;g:{if(c>>>0<=255){e=c>>>3|0;c=q[f+8>>2];d=q[f+12>>2];if((c|0)==(d|0)){i=372440,j=q[93110]&zW(-2,e),q[i>>2]=j;break g}q[c+12>>2]=d;q[d+8>>2]=c;break g}h=q[f+24>>2];c=q[f+12>>2];h:{if((f|0)!=(c|0)){d=q[f+8>>2];q[d+12>>2]=c;q[c+8>>2]=d;break h}i:{d=f+20|0;e=q[d>>2];if(e){break i}d=f+16|0;e=q[d>>2];if(e){break i}c=0;break h}while(1){g=d;c=e;d=c+20|0;e=q[d>>2];if(e){continue}d=c+16|0;e=q[c+16>>2];if(e){continue}break}q[g>>2]=0}if(!h){break g}d=q[f+28>>2];e=(d<<2)+372744|0;j:{if((f|0)==q[e>>2]){q[e>>2]=c;if(c){break j}i=372444,j=q[93111]&zW(-2,d),q[i>>2]=j;break g}q[h+((f|0)==q[h+16>>2]?16:20)>>2]=c;if(!c){break g}}q[c+24>>2]=h;d=q[f+16>>2];if(d){q[c+16>>2]=d;q[d+24>>2]=c}d=q[f+20>>2];if(!d){break g}q[c+20>>2]=d;q[d+24>>2]=c}q[a+4>>2]=b|1;q[a+b>>2]=b;if(q[93115]!=(a|0)){break f}q[93112]=b;return}q[f+4>>2]=c&-2;q[a+4>>2]=b|1;q[a+b>>2]=b}if(b>>>0<=255){c=b>>>3|0;b=(c<<3)+372480|0;d=q[93110];c=1<>2]}q[b+8>>2]=a;q[c+12>>2]=a;q[a+12>>2]=b;q[a+8>>2]=c;return}q[a+16>>2]=0;q[a+20>>2]=0;d=a;e=b>>>8|0;c=0;l:{if(!e){break l}c=31;if(b>>>0>16777215){break l}g=e+1048320>>>16&8;e=e<>>16&4;f=e<>>16&2;c=(f<>>15|0)-(e|(c|g))|0;c=(c<<1|b>>>c+21&1)+28|0}q[d+28>>2]=c;e=(c<<2)+372744|0;m:{d=q[93111];g=1<>2]=a;break n}d=b<<((c|0)==31?0:25-(c>>>1|0)|0);c=q[e>>2];while(1){e=c;if((q[c+4>>2]&-8)==(b|0)){break m}c=d>>>29|0;d=d<<1;g=(e+(c&4)|0)+16|0;c=q[g>>2];if(c){continue}break}q[g>>2]=a}q[a+24>>2]=e;q[a+12>>2]=a;q[a+8>>2]=a;return}b=q[e+8>>2];q[b+12>>2]=a;q[e+8>>2]=a;q[a+24>>2]=0;q[a+12>>2]=e;q[a+8>>2]=b}}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0,t=0,w=0,y=0,z=0,A=0,B=0,C=x(0);k=ue-48|0;ue=k;b=_S(72);q[b+8>>2]=0;q[b+12>>2]=0;q[b+4>>2]=1;q[b+48>>2]=0;q[b+40>>2]=0;q[b+44>>2]=0;q[b+32>>2]=0;q[b+24>>2]=0;q[b+28>>2]=0;q[b>>2]=1256;q[b+16>>2]=0;q[a>>2]=b;a=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b+20>>2]=a;a:{if((a|0)<1){h=8;break a}w=b+24|0;h=8;a=0;b:{while(1){c:{d=c+h|0;j=r[d+24|0]|r[d+25|0]<<8|(r[d+26|0]<<16|r[d+27|0]<<24);m=r[d+28|0]|r[d+29|0]<<8|(r[d+30|0]<<16|r[d+31|0]<<24);l=r[d+16|0]|r[d+17|0]<<8|(r[d+18|0]<<16|r[d+19|0]<<24);g=r[d+20|0]|r[d+21|0]<<8|(r[d+22|0]<<16|r[d+23|0]<<24);o=r[d+8|0]|r[d+9|0]<<8|(r[d+10|0]<<16|r[d+11|0]<<24);p=r[d+12|0]|r[d+13|0]<<8|(r[d+14|0]<<16|r[d+15|0]<<24);n=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);s=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d:{if((a|0)!=(f|0)){q[a+24>>2]=j;q[a+28>>2]=m;q[a+16>>2]=l;q[a+20>>2]=g;q[a+8>>2]=o;q[a+12>>2]=p;q[a>>2]=n;q[a+4>>2]=s;q[b+28>>2]=q[b+28>>2]+32;break d}a=f;f=q[w>>2];i=a-f|0;d=i>>5;e=d+1|0;if(e>>>0>=134217728){break c}a=i>>4;e=d>>>0<67108863?a>>>0>>0?e:a:134217727;a=0;e:{if(!e){break e}if(e>>>0>=134217728){break b}a=_S(e<<5)}d=a+(d<<5)|0;q[d+24>>2]=j;q[d+28>>2]=m;q[d+16>>2]=l;q[d+20>>2]=g;q[d+8>>2]=o;q[d+12>>2]=p;q[d>>2]=n;q[d+4>>2]=s;e=a+(e<<5)|0;d=d+32|0;if((i|0)>=1){kV(a,f,i)}q[b+32>>2]=e;q[b+28>>2]=d;q[b+24>>2]=a;if(!f){break d}_U(f)}a=h+32|0;h=a;t=t+1|0;a=q[b+20>>2];if((t|0)>=(a|0)){break a}f=q[b+32>>2];a=q[b+28>>2];continue}break}kU();F()}Ue(1180);F()}d=c+h|0;i=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b+36>>2]=i;d=h+4|0;h=d;if((i|0)>=1){o=b+40|0;d=0;f:{g:{while(1){h:{a=c+h|0;j=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);m=r[a+4|0]|r[a+5|0]<<8|(r[a+6|0]<<16|r[a+7|0]<<24);a=q[b+44>>2];g=q[b+48>>2];i:{if((a|0)!=(g|0)){q[a>>2]=j;q[a+4>>2]=m;q[b+44>>2]=a+8;break i}f=q[o>>2];l=a-f|0;a=l>>3;e=a+1|0;if(e>>>0>=536870912){break h}p=a<<3;g=g-f|0;n=g>>2;e=g>>3>>>0<268435455?n>>>0>>0?e:n:536870911;a=0;j:{if(!e){break j}if(e>>>0>=536870912){break g}a=_S(e<<3)}g=p+a|0;q[g>>2]=j;q[g+4>>2]=m;e=a+(e<<3)|0;j=g+8|0;if((l|0)>=1){kV(a,f,l)}q[b+48>>2]=e;q[b+44>>2]=j;q[b+40>>2]=a;if(!f){break i}_U(f);i=q[b+36>>2]}a=h+8|0;h=a;d=d+1|0;if((d|0)<(i|0)){continue}break f}break}kU();F()}Ue(1180);F()}a=q[b+20>>2]}c=c+h|0;q[b+52>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b+56>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b+60>>2]=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);c=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);q[b+68>>2]=0;q[b+64>>2]=c;if((a|0)>=2){d=1;while(1){a=q[b+24>>2]+(d<<5)|0;c=a+ -32|0;y=v[c+16>>3];z=v[c+8>>3];A=v[c>>3];Cp(k+32|0,zp(k+16|0,x(v[a>>3]),x(v[a+8>>3]),x(v[a+16>>3])),zp(k,x(A),x(z),x(y)));B=b,C=x(Hp(k+32|0)+u[b+68>>2]),u[B+68>>2]=C;d=d+1|0;if((d|0)>2]){continue}break}}ue=k+48|0}function As(a,b,c){var d=x(0);a:{if(b>>>0>62){break a}b:{switch(b-1|0){default:return x(x(u[a+120>>2]*c)+x(x(x(x(u[a+112>>2]*c)*c)*c)+x(x(u[a+116>>2]*c)*c)));case 0:return c;case 9:return x(c*c);case 10:c=x(x(1)-c);return x(x(1)-x(c*c));case 11:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*c)*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*c)*x(-.5))+x(1));case 19:return x(x(c*c)*c);case 20:c=x(x(1)-c);return x(x(1)-x(c*x(c*c)));case 21:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*c))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*c))*x(-.5))+x(1));case 29:return x(x(x(c*c)*c)*c);case 30:c=x(x(1)-c);return x(x(1)-x(c*x(c*x(c*c))));case 31:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*x(c*c)))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*x(c*c)))*x(-.5))+x(1));case 39:return x(x(x(x(c*c)*c)*c)*c);case 40:c=x(x(1)-c);return x(x(1)-x(c*x(c*x(c*x(c*c)))));case 41:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*x(c*x(c*c))))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*x(c*x(c*c))))*x(-.5))+x(1));case 49:return x(x(x(x(c*x(2.799999952316284))*c)*c)+x(x(c*x(-1.7999999523162842))*c));case 50:c=x(x(1)-c);return x(x(x(c*x(c*x(1.7999999523162842)))+x(c*x(c*x(c*x(-2.799999952316284)))))+x(1));case 51:if(!!(c<=x(.5))){c=x(c+c);return x(x(x(c*x(c*x(c*x(2.799999952316284))))+x(c*x(c*x(-1.7999999523162842))))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(x(c*x(c*x(c*x(2.799999952316284))))+x(c*x(c*x(-1.7999999523162842))))*x(-.5))+x(1));case 59:c=x(x(1)-c);c:{if(!!(c>>0>62){break a}b:{switch(b-1|0){default:return x(x(u[a+72>>2]*c)+x(x(x(x(u[a+64>>2]*c)*c)*c)+x(x(u[a+68>>2]*c)*c)));case 0:return c;case 9:return x(c*c);case 10:c=x(x(1)-c);return x(x(1)-x(c*c));case 11:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*c)*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*c)*x(-.5))+x(1));case 19:return x(x(c*c)*c);case 20:c=x(x(1)-c);return x(x(1)-x(c*x(c*c)));case 21:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*c))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*c))*x(-.5))+x(1));case 29:return x(x(x(c*c)*c)*c);case 30:c=x(x(1)-c);return x(x(1)-x(c*x(c*x(c*c))));case 31:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*x(c*c)))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*x(c*c)))*x(-.5))+x(1));case 39:return x(x(x(x(c*c)*c)*c)*c);case 40:c=x(x(1)-c);return x(x(1)-x(c*x(c*x(c*x(c*c)))));case 41:if(!!(c<=x(.5))){c=x(c+c);return x(x(c*x(c*x(c*x(c*c))))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(c*x(c*x(c*x(c*c))))*x(-.5))+x(1));case 49:return x(x(x(x(c*x(2.799999952316284))*c)*c)+x(x(c*x(-1.7999999523162842))*c));case 50:c=x(x(1)-c);return x(x(x(c*x(c*x(1.7999999523162842)))+x(c*x(c*x(c*x(-2.799999952316284)))))+x(1));case 51:if(!!(c<=x(.5))){c=x(c+c);return x(x(x(c*x(c*x(c*x(2.799999952316284))))+x(c*x(c*x(-1.7999999523162842))))*x(.5))}c=x(x(1)-c);c=x(c+c);return x(x(x(x(c*x(c*x(c*x(2.799999952316284))))+x(c*x(c*x(-1.7999999523162842))))*x(-.5))+x(1));case 59:c=x(x(1)-c);c:{if(!!(c>2],u[b+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);B=wW(d,j,-1e3,-1);a:{if(!r[b+100|0]){e=q[a+500>>2];if((e|0)==q[a+504>>2]){break a}o=b+84|0;p=b+72|0;while(1){d=w(i,288)+e|0;b:{if(!q[d+4>>2]|!r[d+17|0]|!(q[b+96>>2]>>>q[q[d+8>>2]+64>>2]&1)){break b}if(!(q[q[d>>2]+296>>2]!=1|u[b+64>>2]==u[b+68>>2])){yp(c+112|0);q[c+120>>2]=q[d+208>>2];j=q[d+204>>2];q[c+112>>2]=q[d+200>>2];q[c+116>>2]=j;q[c+124>>2]=q[d+212>>2];if(!Bl(c,c+112|0)){break b}}if(!r[d+18|0]){break b}m=q[d>>2];if(q[m+276>>2]<1){break b}k=d+8|0;j=d+224|0;e=0;while(1){l=e<<2;h=q[l+q[q[k>>2]+472>>2]>>2];c:{if(!(u[q[h+16>>2]+2304>>2]>x(3.4028234663852886e+37))){d=j;f=q[d+44>>2];q[c+152>>2]=q[d+40>>2];q[c+156>>2]=f;f=q[d+36>>2];q[c+144>>2]=q[d+32>>2];q[c+148>>2]=f;f=q[d+28>>2];q[c+136>>2]=q[d+24>>2];q[c+140>>2]=f;f=q[d+20>>2];q[c+128>>2]=q[d+16>>2];q[c+132>>2]=f;f=q[d+12>>2];q[c+120>>2]=q[d+8>>2];q[c+124>>2]=f;f=q[d+4>>2];q[c+112>>2]=q[d>>2];q[c+116>>2]=f;Xs(c+160|0,c+112|0);nt(c+112|0,p);s=u[c+120>>2];t=u[c+168>>2];v=u[c+112>>2];y=u[c+160>>2];z=u[c+116>>2];A=u[c+164>>2];nt(c+96|0,o);if(u[q[h+16>>2]+2304>>2]>2])+x(x(A-z)*u[c+100>>2]))+x(x(t-s)*u[c+104>>2]))){break c}h=q[l+q[q[k>>2]+472>>2]>>2]}zk(h,0)}e=e+1|0;if((e|0)>2]){continue}break}}i=i+1|0;e=q[a+500>>2];if(i>>>0<(q[a+504>>2]-e|0)/288>>>0){continue}break}break a}yl(a,b);e=q[a+512>>2];k=q[a+516>>2];if((e|0)==(k|0)){break a}o=b+84|0;p=b+72|0;m=c+120|0;while(1){d:{if(!(q[b+96>>2]>>>q[q[e+8>>2]+64>>2]&1)|(!q[e+4>>2]|!r[e+17|0])){break d}if(!(q[q[e>>2]+296>>2]!=1|u[b+64>>2]==u[b+68>>2])){yp(c+112|0);q[m>>2]=q[e+208>>2];d=q[e+204>>2];q[c+112>>2]=q[e+200>>2];q[c+116>>2]=d;q[c+124>>2]=q[e+212>>2];if(!Bl(c,c+112|0)){break d}}if(!r[e+18|0]){break d}l=q[e>>2];if(q[l+276>>2]<1){break d}j=e+224|0;i=0;while(1){f=i<<2;h=q[f+q[q[e+8>>2]+472>>2]>>2];e:{if(!(u[q[h+16>>2]+2304>>2]>x(3.4028234663852886e+37))){d=j;g=q[d+44>>2];q[c+152>>2]=q[d+40>>2];q[c+156>>2]=g;g=q[d+36>>2];q[c+144>>2]=q[d+32>>2];q[c+148>>2]=g;g=q[d+28>>2];q[c+136>>2]=q[d+24>>2];q[c+140>>2]=g;g=q[d+20>>2];q[c+128>>2]=q[d+16>>2];q[c+132>>2]=g;g=q[d+12>>2];q[c+120>>2]=q[d+8>>2];q[c+124>>2]=g;g=q[d+4>>2];q[c+112>>2]=q[d>>2];q[c+116>>2]=g;Xs(c+160|0,c+112|0);nt(c+112|0,p);s=u[c+120>>2];t=u[c+168>>2];v=u[c+112>>2];y=u[c+160>>2];z=u[c+116>>2];A=u[c+164>>2];nt(c+96|0,o);if(u[q[h+16>>2]+2304>>2]>2])+x(x(A-z)*u[c+100>>2]))+x(x(t-s)*u[c+104>>2]))){break e}h=q[f+q[q[e+8>>2]+472>>2]>>2]}zk(h,0)}i=i+1|0;if((i|0)>2]){continue}break}}e=e+288|0;if((k|0)!=(e|0)){continue}break}}C=a,D=wW(JG(),we,1e3,0)+B|0,q[C+576>>2]=D;ue=c+176|0}function Ci(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,s=0,t=0,v=x(0);c=ue-368|0;ue=c;n[q[q[e>>2]+60>>2]](c- -64|0,e);i=q[c+64>>2];if(i){a:{if(q[a+2472>>2]+ -1>>>0<=1){d=q[b+744>>2];q[c+364>>2]=d;e=q[b+324>>2];q[c+360>>2]=e;q[c+44>>2]=d;q[c+40>>2]=e;Oe(c- -64|0,c+44|0,c+40|0);d=q[c+64>>2];e=q[b+768>>2];q[c+356>>2]=e;g=q[b+324>>2];q[c+352>>2]=g;q[c+36>>2]=e;q[c+32>>2]=g;Oe(c- -64|0,c+36|0,c+32|0);j=q[c+64>>2];e=q[b+792>>2];q[c+348>>2]=e;g=q[b+324>>2];q[c+344>>2]=g;q[c+28>>2]=e;q[c+24>>2]=g;Oe(c- -64|0,c+28|0,c+24|0);e=q[c+64>>2];break a}j=q[b+768>>2];d=q[b+744>>2];e=q[b+792>>2]}if(r[q[q[b+152>>2]+20>>2]+208|0]){q[c+340>>2]=d;d=q[q[b+152>>2]+20>>2];d=r[d+209|0]|r[d+210|0]<<8|(r[d+211|0]<<16|r[d+212|0]<<24);q[c+336>>2]=d;q[c+20>>2]=q[c+340>>2];q[c+16>>2]=d;Oe(c- -64|0,c+20|0,c+16|0);q[c+332>>2]=j;d=q[c+64>>2];g=q[q[b+152>>2]+20>>2];g=r[g+209|0]|r[g+210|0]<<8|(r[g+211|0]<<16|r[g+212|0]<<24);q[c+328>>2]=g;q[c+12>>2]=q[c+332>>2];q[c+8>>2]=g;Oe(c- -64|0,c+12|0,c+8|0);q[c+324>>2]=e;j=q[c+64>>2];e=q[q[b+152>>2]+20>>2];e=r[e+209|0]|r[e+210|0]<<8|(r[e+211|0]<<16|r[e+212|0]<<24);q[c+320>>2]=e;q[c+4>>2]=q[c+324>>2];q[c>>2]=e;Oe(c- -64|0,c+4|0,c);e=q[c+64>>2]}k=Ao(c+168|0);l=Ao(c+184|0);m=Ao(c+200|0);o=Ao(c+216|0);p=Ao(c+232|0);s=Ao(c+248|0);g=Gj(b);h=q[g+44>>2];q[c+104>>2]=q[g+40>>2];q[c+108>>2]=h;h=q[g+36>>2];q[c+96>>2]=q[g+32>>2];q[c+100>>2]=h;h=q[g+28>>2];q[c+88>>2]=q[g+24>>2];q[c+92>>2]=h;h=q[g+20>>2];q[c+80>>2]=q[g+16>>2];q[c+84>>2]=h;h=q[g+4>>2];q[c+64>>2]=q[g>>2];q[c+68>>2]=h;h=q[g+12>>2];q[c+72>>2]=q[g+8>>2];q[c+76>>2]=h;q[c+144>>2]=q[b+544>>2];q[c+148>>2]=q[b+564>>2];g=q[b+604>>2];q[c+120>>2]=q[b+600>>2];q[c+124>>2]=g;g=q[b+596>>2];q[c+112>>2]=q[b+592>>2];q[c+116>>2]=g;g=q[b+668>>2];q[c+136>>2]=q[b+664>>2];q[c+140>>2]=g;g=q[b+660>>2];q[c+128>>2]=q[b+656>>2];q[c+132>>2]=g;q[c+152>>2]=q[b+720>>2];q[c+156>>2]=d;q[c+160>>2]=j;q[c+164>>2]=e;ck(c+48|0,b,0);d=c+56|0;e=d;g=q[e+4>>2];q[k+8>>2]=q[e>>2];q[k+12>>2]=g;e=q[c+52>>2];q[k>>2]=q[c+48>>2];q[k+4>>2]=e;ck(c+48|0,b,1);e=q[d+4>>2];q[l+8>>2]=q[d>>2];q[l+12>>2]=e;e=q[c+52>>2];q[l>>2]=q[c+48>>2];q[l+4>>2]=e;ck(c+48|0,b,2);e=q[d+4>>2];q[m+8>>2]=q[d>>2];q[m+12>>2]=e;e=q[c+52>>2];q[m>>2]=q[c+48>>2];q[m+4>>2]=e;ck(c+48|0,b,3);e=q[d+4>>2];q[o+8>>2]=q[d>>2];q[o+12>>2]=e;e=q[c+52>>2];q[o>>2]=q[c+48>>2];q[o+4>>2]=e;ck(c+48|0,b,4);e=q[d+4>>2];q[p+8>>2]=q[d>>2];q[p+12>>2]=e;e=q[c+52>>2];q[p>>2]=q[c+48>>2];q[p+4>>2]=e;ck(c+48|0,b,5);e=q[d+4>>2];q[s+8>>2]=q[d>>2];q[s+12>>2]=e;d=q[c+52>>2];q[s>>2]=q[c+48>>2];q[s+4>>2]=d;t=c,v=$j(b),u[t+264>>2]=v;q[c+268>>2]=q[b+1428>>2];if(q[q[b+148>>2]+180>>2]==5){q[c+272>>2]=q[b+336>>2]}Hh(a,b,c+276|0,c+292|0);n[q[q[i>>2]+24>>2]](i,a+4020|0,c- -64|0,f);n[q[q[i>>2]+8>>2]](i)|0}ue=c+368|0}function uz(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0;f=ue-960|0;ue=f;g=q[a+32>>2];h=q[a+36>>2]-g|0;a:{if(!h){break a}g=g+w(((h|0)/948|0)+ -1|0,948)|0;if(r[g+945|0]?0:!r[g+944|0]){break a}hx(a)}h=q[b+800>>2];b:{if(h>>>0<=6){g=40;c:{switch(h-1|0){case 5:g=(q[b+796>>2]+q[b+792>>2]<<2)+40|0;break b;default:g=24;break b;case 3:case 4:g=88;break b;case 0:case 1:break b;case 2:break c}}g=72;break b}g=0}q[d>>2]=g;h=q[a+4>>2];j=n[q[q[h>>2]+64>>2]](h)|0;d:{e:{h=w(c,g);if(h){i=q[a+20>>2];if((h|0)<=(i|0)){break e}}q[e>>2]=0;break d}k=j<<2>=(c|0);g=g<<2;j=g+ -1|0;c=j+q[a+24>>2]|0;if(!((c+(h-((c|0)%(g|0)|0)|0)|0)<=(i|0)?k:0)){hx(a)}f:{if(q[a+36>>2]!=q[a+32>>2]){c=q[a+24>>2];break f}c=q[a+4>>2];c=q[q[q[c+20>>2]+(q[q[c+4>>2]+324>>2]<<3)>>2]>>2];i=c?c+8|0:0;c=q[i+24>>2];q[a+28>>2]=i;q[a+24>>2]=c;if(!r[i+28|0]){q[a+24>>2]=0;c=0}i=c+j|0;if(((h-((i|0)%(g|0)|0)|0)+i|0)<=q[a+20>>2]){break f}c=0;q[a+24>>2]=0}c=c+j|0;j=c-((c|0)%(g|0)|0)|0;i=j+h|0;q[a+24>>2]=i;c=q[a+8>>2];k=q[a+12>>2]-c|0;if(i>>>0>k>>>0){c=a+8|0;Se(c,i-k|0);c=q[c>>2]}q[e>>2]=c+j;g:{c=q[a+36>>2];if((c|0)==q[a+32>>2]){break g}if(vz(c+ -948|0,b)){break g}c=q[a+4>>2];if(((q[q[a+36>>2]+ -12>>2]+h|0)/(g|0)|0)>(n[q[q[c>>2]+64>>2]](c)|0)){break g}a=q[a+36>>2]+ -12|0;q[a>>2]=q[a>>2]+h;break d}lV(f+816|0,0,107);q[f+924>>2]=-1;q[f+928>>2]=-1;q[f+932>>2]=0;q[f+936>>2]=0;kV(f+8|0,b,800);c=q[b+804>>2];q[f+808>>2]=q[b+800>>2];q[f+812>>2]=c;c=q[b+808>>2];if(c){n[q[q[c>>2]>>2]](c)|0}i=a+32|0;c=q[b+812>>2];q[f+816>>2]=q[b+808>>2];q[f+820>>2]=c;c=0;while(1){g=c<<2;e=(g+f|0)+824|0;k=(b+g|0)+816|0;g=q[k>>2];if(g){n[q[q[g>>2]>>2]](g)|0}g=q[e>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[e>>2]=0}q[e>>2]=q[k>>2];c=c+1|0;if((c|0)!=8){continue}break}kV(f+856|0,b+848|0,76);c=q[b+924>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[f+932>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[f+932>>2]=0}q[f+932>>2]=q[b+924>>2];q[f+936>>2]=q[b+928>>2];q[f+940>>2]=j;q[f+944>>2]=h;q[f+948>>2]=q[d>>2];o[f+952|0]=(h|0)>q[a+20>>2];c=f;if(r[b+913|0]){b=q[a+4>>2];b=(n[q[q[b>>2]+136>>2]](b)|0)!=0}else{b=0}o[c+953|0]=b;b=q[a+36>>2];h:{if(b>>>0>2]){wz(b,f+8|0);q[a+36>>2]=q[a+36>>2]+948;break h}xz(i,f+8|0)}a=q[f+932>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+932>>2]=0}a=q[f+852>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+852>>2]=0}a=q[f+848>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+848>>2]=0}a=q[f+844>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+844>>2]=0}a=q[f+840>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+840>>2]=0}a=q[f+836>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+836>>2]=0}a=q[f+832>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+832>>2]=0}a=q[f+828>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+828>>2]=0}a=q[f+824>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+824>>2]=0}a=q[f+816>>2];if(!a){break d}n[q[q[a>>2]+8>>2]](a)|0;q[f+816>>2]=0}ue=f+960|0}function ls(a){var b=0,c=0,d=0,e=0,f=0,g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=0,m=x(0),n=x(0),o=x(0),p=x(0),r=x(0),s=x(0),t=0,v=x(0),w=x(0);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;f=q[a+12>>2];e=q[a+16>>2]-f>>4;a:{if(b>>>0>e>>>0){Wr(a+12|0,b-e|0);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;break a}if(b>>>0>=e>>>0){break a}q[a+16>>2]=f+(b<<4)}j=a+24|0;f=q[a+24>>2];e=q[a+28>>2]-f>>4;b:{if(b>>>0>e>>>0){Wr(j,b-e|0);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;break b}if(b>>>0>=e>>>0){break b}q[a+28>>2]=f+(b<<4)}f=q[a+36>>2];e=q[a+40>>2]-f>>4;c:{if(b>>>0>e>>>0){Wr(a+36|0,b-e|0);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;break c}if(b>>>0>=e>>>0){break c}q[a+40>>2]=f+(b<<4)}l=a+48|0;f=q[a+48>>2];e=q[a+52>>2]-f>>4;d:{if(b>>>0>e>>>0){Wr(l,b-e|0);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;break d}if(b>>>0>=e>>>0){break d}q[a+52>>2]=f+(b<<4)}e:{if(b+ -1>>>0<2){break e}e=1;while(1){f=e<<4;e=e+1|0;d=(e<<4)+c|0;k=u[d>>2];b=c+f|0;c=b+ -16|0;m=u[c>>2];g=u[b>>2];n=u[d+4>>2];p=u[c+4>>2];h=u[b+4>>2];r=u[d+8>>2];s=u[c+8>>2];i=u[b+8>>2];f=f+q[a+24>>2]|0;o=u[b+12>>2];u[f+12>>2]=x(x(u[c+12>>2]-x(o+o))+u[d+12>>2])*x(3);u[f+8>>2]=x(r+x(s-x(i+i)))*x(3);u[f+4>>2]=x(n+x(p-x(h+h)))*x(3);u[f>>2]=x(k+x(m-x(g+g)))*x(3);d=q[a+4>>2];c=q[a>>2];b=d-c>>4;f=b+ -1|0;if(e>>>0>>0){continue}break}if(f>>>0<2){break e}e=1;while(1){f=e<<4;d=f+ -16|0;c=d+q[a+48>>2]|0;g=u[c+12>>2];h=u[c+8>>2];i=u[c+4>>2];t=q[a+24>>2];b=f+t|0;d=d+t|0;k=x(x(4)-u[c>>2]);u[b>>2]=x(u[b>>2]-u[d>>2])/k;i=x(x(4)-i);u[b+4>>2]=x(u[b+4>>2]-u[d+4>>2])/i;h=x(x(4)-h);u[b+8>>2]=x(u[b+8>>2]-u[d+8>>2])/h;g=x(x(1)-g);u[b+12>>2]=x(u[b+12>>2]-u[d+12>>2])/g;b=f+q[a+48>>2]|0;u[b+8>>2]=x(1)/h;u[b+4>>2]=x(1)/i;u[b>>2]=x(1)/k;u[b+12>>2]=x(1)/g;e=e+1|0;d=q[a+4>>2];c=q[a>>2];b=d-c>>4;if(e>>>0>>0){continue}break}}b=b+ -2|0;if(b){while(1){c=b<<4;e=c+q[l>>2]|0;g=u[e>>2];h=u[e+4>>2];i=u[e+8>>2];c=c+q[j>>2]|0;u[c+12>>2]=u[c+12>>2]-x(u[c+28>>2]*u[e+12>>2]);u[c+8>>2]=u[c+8>>2]-x(i*u[c+24>>2]);u[c+4>>2]=u[c+4>>2]-x(h*u[c+20>>2]);u[c>>2]=u[c>>2]-x(g*u[c+16>>2]);b=b+ -1|0;if(b){continue}break}d=q[a+4>>2];c=q[a>>2]}if((d-c|0)!=16){e=0;while(1){d=q[a+24>>2];b=e<<4;c=d+b|0;g=u[c>>2];e=e+1|0;j=e<<4;d=j+d|0;h=u[d>>2];i=u[c+4>>2];k=u[d+4>>2];m=u[c+8>>2];n=u[d+8>>2];f=b+q[a+36>>2]|0;u[f+12>>2]=x(u[d+12>>2]-u[c+12>>2])/x(3);u[f+8>>2]=x(n-m)/x(3);u[f+4>>2]=x(k-i)/x(3);u[f>>2]=x(h-g)/x(3);c=b+q[a+36>>2]|0;g=u[c>>2];d=b+q[a+24>>2]|0;h=u[d>>2];l=q[a>>2];f=l+b|0;i=u[f>>2];j=j+l|0;k=u[j>>2];m=u[c+4>>2];n=u[d+4>>2];p=u[f+4>>2];r=u[j+4>>2];s=u[c+8>>2];o=u[d+8>>2];v=u[f+8>>2];w=u[j+8>>2];b=b+q[a+12>>2]|0;u[b+12>>2]=x(x(u[j+12>>2]-u[f+12>>2])-u[d+12>>2])-u[c+12>>2];u[b+8>>2]=x(x(w-v)-o)-s;u[b+4>>2]=x(x(r-p)-n)-m;u[b>>2]=x(x(k-i)-h)-g;if(e>>>0<(q[a+4>>2]-q[a>>2]>>4)+ -1>>>0){continue}break}}}function Th(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),o=0,p=0,r=0,s=0,t=0,v=0,w=0,z=x(0),A=0;p=ue-32|0;ue=p;q[a+24>>2]=2147483647;q[a+28>>2]=2147483647;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=2147483647;q[a+12>>2]=2147483647;q[a>>2]=0;q[a+4>>2]=0;g=q[b+76>>2]<1;f=g?2147483647:q[b+88>>2];l=(f|0)>0?f:0;f=l;g=g?2147483647:q[b+92>>2];h=(g|0)>0?g:0;i=(h|0)>1073741822;m=u[b+104>>2];a:{if(x(y(m))0?d:0;j=(r|0)>1073741822?2147483647:f+r|0;e=h;g=1073741823;f=1073741823;j=(l|0)>1073741822?2147483647:j;m=u[b+108>>2];b:{if(x(y(m))0?k:0;o=(s|0)>1073741822?2147483647:i?2147483647:e+s|0;c:{d:{e=q[b+60>>2];if((e|0)>1073741823){break d}m=x(e+ -1|0);z=x(u[b+96>>2]*m);e:{if(x(y(z))>2]*m);f:{if(x(y(m))=1){break d}e=0;break c}e=f}i=(h|0)>1073741822?2147483647:(e|0)>1073741822?2147483647:e+h|0;h=(g|0)>0?g:0;e=(l|0)>1073741822?2147483647:(h|0)>1073741822?2147483647:h+l|0;l=q[c+20>>2];t=q[c+16>>2];v=q[c+4>>2];w=q[c>>2];g:{if(q[b+80>>2]<1){break g}h=q[c+28>>2]-l|0;A=q[c+12>>2]-v|0;j=(j-d|0)>(A|0)?d+A|0:j;d=q[c+8>>2]-w|0;o=(o-k|0)>(d|0)?d+k|0:o;c=q[c+24>>2]-t|0;d=(i|0)>1073741823;i=d?c:(i-f|0)>(c|0)?c+f|0:i;f=d?c:f;if(e>>>0>1073741823){g=h;e=g;break g}e=(e-g|0)>(h|0)?g+h|0:e}c=(l|0)>0?l:0;k=(c|0)>1073741822;d=(e|0)>0?e:0;e=k?2147483647:(d|0)>1073741822?2147483647:c+d|0;q[a+28>>2]=e;h=(t|0)>0?t:0;l=(h|0)>1073741822;d=(i|0)>0?i:0;d=l?2147483647:(d|0)>1073741822?2147483647:h+d|0;q[a+24>>2]=d;i=c;c=(g|0)>0?g:0;q[a+20>>2]=k?2147483647:(c|0)>1073741822?2147483647:i+c|0;c=(f|0)>0?f:0;q[a+16>>2]=l?2147483647:(c|0)>1073741822?2147483647:c+h|0;c=(v|0)>0?v:0;g=(c|0)>1073741822;f=(j|0)>0?j:0;j=g?2147483647:(f|0)>1073741822?2147483647:c+f|0;q[a+12>>2]=j;f=(w|0)>0?w:0;k=(f|0)>1073741822;h=(o|0)>0?o:0;o=k?2147483647:(h|0)>1073741822?2147483647:f+h|0;q[a+8>>2]=o;q[a+4>>2]=(r|0)>1073741822?2147483647:g?2147483647:c+r|0;q[a>>2]=(s|0)>1073741822?2147483647:k?2147483647:f+s|0;if(q[b+84>>2]>=1){h:{if((n[q[q[b>>2]+20>>2]](b)|0)<1){c=0;f=0;g=0;i=0;break h}e=0;i=0;g=0;f=0;c=0;while(1){d=n[q[q[b>>2]+24>>2]](b,e)|0;n[q[q[d>>2]+40>>2]](p,d,a);d=q[p+28>>2];i=(d|0)>(i|0)?d:i;d=q[p+24>>2];g=(d|0)>(g|0)?d:g;d=q[p+12>>2];f=(d|0)>(f|0)?d:f;d=q[p+8>>2];c=(d|0)>(c|0)?d:c;e=e+1|0;if((e|0)<(n[q[q[b>>2]+20>>2]](b)|0)){continue}break}e=q[a+28>>2];d=q[a+24>>2];j=q[a+12>>2];o=q[a+8>>2]}q[a+28>>2]=(e|0)<(i|0)?e:i;q[a+24>>2]=(d|0)<(g|0)?d:g;q[a+12>>2]=(j|0)<(f|0)?j:f;q[a+8>>2]=(o|0)<(c|0)?o:c}ue=p+32|0}function Bs(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),p=0,s=x(0),t=x(0),v=x(0),w=x(0),z=x(0),D=x(0),E=x(0),F=x(0),G=0,H=0,I=x(0),J=x(0),K=x(0),L=x(0),M=x(0);d=ue-208|0;ue=d;f=u[b+48>>2];a:{if(!!(f>2];q[d+160>>2]=q[b>>2];q[d+164>>2]=e;e=q[b+12>>2];q[d+168>>2]=q[b+8>>2];q[d+172>>2]=e;g=q[b+28>>2];e=d+184|0;q[e>>2]=q[b+24>>2];q[e+4>>2]=g;i=q[b+20>>2];q[d+176>>2]=q[b+16>>2];q[d+180>>2]=i;p=q[b+44>>2];i=d+200|0;g=i;q[g>>2]=q[b+40>>2];q[g+4>>2]=p;g=q[b+36>>2];q[d+192>>2]=q[b+32>>2];q[d+196>>2]=g;b=d+104|0;q[b>>2]=0;q[b+4>>2]=0;g=d+180|0;c=u[g>>2];s=u[d+164>>2];f=u[d+176>>2];t=u[d+160>>2];h=u[e>>2];j=u[d+168>>2];o[d+8|0]=((c==s)<<1|f==t|(h==j)<<2)==7;q[d+72>>2]=0;q[d+76>>2]=0;q[d+96>>2]=0;q[d+100>>2]=0;q[d+64>>2]=0;q[d+68>>2]=0;p=d+196|0;v=u[p>>2];z=u[d+192>>2];D=u[i>>2];o[d+9|0]=((c==v)<<1|f==z|(h==D)<<2)==7;G=d+204|0;F=u[G>>2];H=d+188|0;n=u[H>>2];k=u[d+64>>2];l=u[d+76>>2];w=u[d+172>>2];m=u[d+68>>2];h=x(x(D+x(j-x(h+h)))*x(3));j=u[d+72>>2];h=x(x(h-j)*x(.25));u[d+88>>2]=h;c=x(x(x(x(v+x(s-x(c+c)))*x(3))-m)*x(.25));u[d+84>>2]=c;n=x(x(x(x(F+x(w-x(n+n)))*x(3))-l)*x(.25));u[d+92>>2]=n;f=x(x(x(x(z+x(t-x(f+f)))*x(3))-k)*x(.25));u[d+80>>2]=f;q[d+56>>2]=0;q[d+60>>2]=0;q[d+48>>2]=0;q[d+52>>2]=0;q[d+152>>2]=0;q[d+156>>2]=0;q[d+144>>2]=0;q[d+148>>2]=0;z=u[d+160>>2];D=u[d+164>>2];F=u[d+168>>2];I=x(x(f-k)/x(3));u[d+16>>2]=I;J=x(x(c-m)/x(3));u[d+20>>2]=J;K=x(x(h-j)/x(3));u[d+24>>2]=K;L=x(x(n-l)/x(3));u[d+28>>2]=L;s=u[g>>2];t=u[e>>2];v=u[d+176>>2];M=u[H>>2];u[d+124>>2]=x(x(M-w)-l)-L;u[d+120>>2]=x(x(t-F)-j)-K;u[d+116>>2]=x(x(s-D)-m)-J;u[d+112>>2]=x(x(v-z)-k)-I;k=u[d+100>>2];l=u[b>>2];m=u[d+96>>2];w=x(x(u[d+108>>2]-n)/x(3));u[d+44>>2]=w;l=x(x(l-h)/x(3));u[d+40>>2]=l;k=x(x(k-c)/x(3));u[d+36>>2]=k;m=x(x(m-f)/x(3));u[d+32>>2]=m;j=u[p>>2];z=u[i>>2];D=u[d+192>>2];u[d+140>>2]=x(x(u[G>>2]-M)-n)-w;u[d+136>>2]=x(x(z-t)-h)-l;u[d+132>>2]=x(x(j-s)-c)-k;u[d+128>>2]=x(x(D-v)-f)-m;c=x(B(x(A(E,x(2))),x(0)));f=x(C(c));b:{if(x(y(f))0?b:0;p=(b|0)<2?b:2;e=p<<4;b=e+(d+160|0)|0;c:{if(r[p+(d+8|0)|0]){e=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=e;e=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=e;break c}i=e+(d+112|0)|0;f=u[i>>2];g=e+(d- -64|0)|0;h=u[g>>2];e=e+(d+16|0)|0;k=u[e>>2];l=u[b+4>>2];m=u[i+4>>2];n=u[g+4>>2];E=u[e+4>>2];w=u[b+8>>2];j=u[i+8>>2];s=u[g+8>>2];t=u[e+8>>2];v=u[b>>2];c=x(c-x(p|0));u[a+12>>2]=x(c*x(x(c*x(x(c*u[e+12>>2])+u[g+12>>2]))+u[i+12>>2]))+u[b+12>>2];u[a+8>>2]=w+x(c*x(j+x(c*x(s+x(c*t)))));u[a+4>>2]=l+x(c*x(m+x(c*x(n+x(c*E)))));u[a>>2]=v+x(c*x(f+x(c*x(h+x(c*k)))))}ue=d+208|0}function tq(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c=ue-288|0;ue=c;e=q[a+4>>2];h=q[e>>2];d=h+q[q[a>>2]>>2]|0;j=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[e>>2]=h+4;a:{b:{if((j|0)>=1){h=c+52|0;k=c+56|0;while(1){q[k>>2]=0;q[k+4>>2]=0;q[c+48>>2]=0;q[c+52>>2]=0;q[c+40>>2]=0;q[c+44>>2]=0;q[c+72>>2]=1065353216;q[c+76>>2]=1065353216;q[c+64>>2]=1065353216;q[c+68>>2]=1065353216;q[c+96>>2]=1065353216;q[c+88>>2]=1065353216;q[c+92>>2]=1065353216;q[c+108>>2]=1065353216;q[c+112>>2]=1065353216;q[c+80>>2]=0;q[c+84>>2]=1065353216;q[c+132>>2]=1065353216;q[c+136>>2]=1065353216;q[c+124>>2]=1065353216;q[c+128>>2]=1065353216;q[c+100>>2]=0;q[c+104>>2]=1065353216;q[c+116>>2]=1065353216;q[c+120>>2]=0;q[c+152>>2]=1065353216;q[c+156>>2]=1065353216;q[c+144>>2]=1065353216;q[c+148>>2]=1065353216;q[c+164>>2]=1065353216;q[c+168>>2]=1065353216;q[c+172>>2]=1065353216;q[c+176>>2]=1065353216;q[c+140>>2]=0;q[c+192>>2]=1065353216;q[c+196>>2]=1065353216;q[c+184>>2]=1065353216;q[c+188>>2]=1065353216;q[c+160>>2]=0;q[c+204>>2]=1065353216;q[c+208>>2]=1065353216;q[c+212>>2]=1065353216;q[c+216>>2]=1065353216;q[c+180>>2]=0;q[c+220>>2]=0;q[c+224>>2]=1065353216;q[c+200>>2]=0;q[c+228>>2]=0;q[c+232>>2]=1065353216;q[c+236>>2]=0;q[c+240>>2]=1065353216;q[c+244>>2]=0;q[c+248>>2]=1065353216;q[c+252>>2]=0;q[c+256>>2]=1065353216;q[c+260>>2]=0;q[c+264>>2]=1065353216;q[c+268>>2]=0;q[c+272>>2]=1065353216;q[c+276>>2]=0;q[c+280>>2]=1065353216;e=q[q[a>>2]>>2];f=q[a+4>>2];g=q[f>>2];d=e+g|0;i=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=g+4|0;q[f>>2]=d;q[c+32>>2]=0;q[c+24>>2]=0;q[c+28>>2]=0;f=d+e|0;e=sV(f);if(e>>>0>=4294967280){break b}c:{d:{if(e>>>0>=11){g=e+16&-16;d=_S(g);q[c+32>>2]=g|-2147483648;q[c+24>>2]=d;q[c+28>>2]=e;break d}o[c+35|0]=e;d=c+24|0;if(!e){break c}}kV(d,f,e)}o[d+e|0]=0;f=q[a+4>>2];d=i+q[f>>2]|0;q[f>>2]=d;g=q[q[a>>2]>>2];e=g+d|0;i=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);d=d+4|0;q[f>>2]=d;q[c+16>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;f=d+g|0;e=sV(f);if(e>>>0>=4294967280){break a}e:{f:{if(e>>>0>=11){g=e+16&-16;d=_S(g);q[c+16>>2]=g|-2147483648;q[c+8>>2]=d;q[c+12>>2]=e;break f}o[c+19|0]=e;d=c+8|0;if(!e){break e}}kV(d,f,e)}o[d+e|0]=0;d=q[a+4>>2];q[d>>2]=i+q[d>>2];pT(c+40|0,c+8|0);e=q[a+4>>2];d=q[e>>2]+8|0;q[e>>2]=d;q[c+4>>2]=d+q[q[a>>2]>>2];Ds(h,c+4|0);e=q[a+4>>2];d=q[e>>2];q[e>>2]=d+q[c+4>>2]-(d+q[q[a>>2]>>2]);d=q[b+4>>2];g:{if(d>>>0>2]){mT(d,c+40|0);kV(d+12|0,h,232);q[b+4>>2]=q[b+4>>2]+244;break g}uq(b,c+40|0)}if(o[c+19|0]<=-1){_U(q[c+8>>2])}if(o[c+35|0]<=-1){_U(q[c+24>>2])}if(o[c+51|0]<=-1){_U(q[c+40>>2])}l=l+1|0;if((l|0)!=(j|0)){continue}break}}ue=c+288|0;return}kT();F()}kT();F()}function tz(a,b,c,d){var e=0,f=0,g=0,h=0;f=ue-208|0;ue=f;q[a+12>>2]=q[d+44>>2];n[q[q[b>>2]+228>>2]](f,b);g=q[f>>2];e=q[f+4>>2];a:{if(!e){break a}h=q[e+4>>2];q[e+4>>2]=h+ -1;if(h){break a}n[q[q[e>>2]+8>>2]](e);WS(e)}b:{if(g){n[q[q[b>>2]+228>>2]](f,b);q[a+12>>2]=q[q[f>>2]+8>>2];e=q[f+4>>2];if(!e){break b}g=q[e+4>>2];q[e+4>>2]=g+ -1;if(g){break b}n[q[q[e>>2]+8>>2]](e);WS(e);break b}if((n[q[q[b>>2]+160>>2]](b)|0)!=1){break b}q[a+12>>2]=0}q[f+56>>2]=0;q[f+60>>2]=0;q[f+48>>2]=0;q[f+52>>2]=0;q[f+40>>2]=0;q[f+44>>2]=0;q[f+32>>2]=0;q[f+36>>2]=0;q[f+24>>2]=0;q[f+28>>2]=0;q[f+16>>2]=0;q[f+20>>2]=0;q[f+8>>2]=0;q[f+12>>2]=0;q[f>>2]=0;q[f+4>>2]=0;q[a+800>>2]=0;q[a+804>>2]=0;e=q[a+808>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+808>>2]=0}q[a+808>>2]=0;q[a+812>>2]=0;e=q[a+816>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+816>>2]=0}q[a+816>>2]=0;e=q[a+820>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+820>>2]=0}q[a+820>>2]=0;e=q[a+824>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+824>>2]=0}q[a+824>>2]=0;e=q[a+828>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+828>>2]=0}q[a+828>>2]=0;e=q[a+832>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+832>>2]=0}q[a+832>>2]=0;e=q[a+836>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+836>>2]=0}q[a+836>>2]=0;e=q[a+840>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+840>>2]=0}g=a+800|0;q[a+840>>2]=0;e=q[a+844>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a+844>>2]=0}q[a+844>>2]=0;e=q[f+4>>2];q[a+848>>2]=q[f>>2];q[a+852>>2]=e;e=q[f+12>>2];q[a+856>>2]=q[f+8>>2];q[a+860>>2]=e;e=q[f+20>>2];q[a+864>>2]=q[f+16>>2];q[a+868>>2]=e;e=q[f+28>>2];q[a+872>>2]=q[f+24>>2];q[a+876>>2]=e;e=q[f+36>>2];q[a+880>>2]=q[f+32>>2];q[a+884>>2]=e;e=q[f+44>>2];q[a+888>>2]=q[f+40>>2];q[a+892>>2]=e;e=q[f+52>>2];q[a+896>>2]=q[f+48>>2];q[a+900>>2]=e;e=q[f+60>>2];q[a+904>>2]=q[f+56>>2];q[a+908>>2]=e;q[a+916>>2]=-1;q[a+920>>2]=-1;q[a+912>>2]=0;ix(g,b,c,d,0,r[q[b+4>>2]+313|0]);q[a+88>>2]=q[d+180>>2];q[a+92>>2]=q[d+184>>2];q[a+96>>2]=q[d+188>>2];c:{d:{d=q[a+804>>2];if(!d){break d}b=q[a+808>>2];if(!b){break d}q[a+792>>2]=q[b+28>>2];q[a+796>>2]=q[b+32>>2];b=q[d+20>>2]-q[d+16>>2]>>4;b=b>>>0<16?b:16;q[a+112>>2]=b;if(b){b=0;while(1){c=b<<4;e=c+a|0;c=c+q[d+16>>2]|0;d=q[c+4>>2];q[e+116>>2]=q[c>>2];q[e+120>>2]=d;d=q[c+12>>2];q[e+124>>2]=q[c+8>>2];q[e+128>>2]=d;d=q[a+804>>2];b=b+1|0;if(b>>>0>2]){continue}break}}b=q[d+32>>2]-q[d+28>>2]>>3;b=b>>>0<2?b:2;q[a+372>>2]=b;if(!b){break c}qu(f,q[q[d+28>>2]>>2]);kV(a+376|0,f,208);b=1;if(t[a+372>>2]<=1){break c}while(1){qu(f,q[q[q[a+804>>2]+28>>2]+(b<<3)>>2]);kV((w(b,208)+a|0)+376|0,f,208);b=b+1|0;if(b>>>0>2]){continue}break}break c}q[a+792>>2]=0;q[a+796>>2]=0;o[a+8|0]=0}ue=f+208|0}function Ix(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=x(0),p=x(0),s=x(0);j=ue-96|0;ue=j;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;f=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;g=e?-1082130432:1065353216;q[d+2228>>2]=g;h=e?1065353216:0;q[d+2224>>2]=h;q[j+88>>2]=0;e=j;q[e+76>>2]=0;q[e+80>>2]=0;q[e+84>>2]=0;q[e+68>>2]=0;q[e+72>>2]=0;q[e+64>>2]=1065353216;Jv(q[a+4>>2],e+88|0,e- -64|0);b=n[q[q[b>>2]+32>>2]](b)|0;i=q[c+40>>2];k=q[i+36>>2];f=(f|0)==1;q[b+20>>2]=f?-1082130432:1065353216;q[b+16>>2]=f?1065353216:0;q[b>>2]=k;u[b+32>>2]=r[i+112|0]?x(1):x(0);u[b+36>>2]=q[q[c+40>>2]+120>>2];q[b+48>>2]=q[q[c+40>>2]+148>>2];f=q[q[c+40>>2]+156>>2];q[b+60>>2]=g;q[b+56>>2]=h;q[b+52>>2]=f;u[b+64>>2]=q[q[c+40>>2]+152>>2];f=q[c+40>>2];m=u[f+180>>2];p=u[f+188>>2];l=u[c+32>>2];s=u[f+184>>2];f=q[e+64>>2];g=q[e+68>>2];h=q[e+72>>2];i=q[e+76>>2];k=q[e+84>>2];q[b+120>>2]=q[e+80>>2];q[b+124>>2]=k;q[b+112>>2]=h;q[b+116>>2]=i;q[b+96>>2]=f;q[b+100>>2]=g;u[b+84>>2]=s*l;u[b+88>>2]=p*l;u[b+80>>2]=m*l;u[b+92>>2]=m!=x(0)?x(1):s!=x(0)?x(1):p!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](e,a);a=q[e+60>>2];b=q[e+56>>2];o[d+56|0]=b;o[d+57|0]=b>>>8;o[d+58|0]=b>>>16;o[d+59|0]=b>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[e+52>>2];b=q[e+48>>2];o[d+48|0]=b;o[d+49|0]=b>>>8;o[d+50|0]=b>>>16;o[d+51|0]=b>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[e+44>>2];b=q[e+40>>2];o[d+40|0]=b;o[d+41|0]=b>>>8;o[d+42|0]=b>>>16;o[d+43|0]=b>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[e+36>>2];b=q[e+32>>2];o[d+32|0]=b;o[d+33|0]=b>>>8;o[d+34|0]=b>>>16;o[d+35|0]=b>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[e+28>>2];b=q[e+24>>2];o[d+24|0]=b;o[d+25|0]=b>>>8;o[d+26|0]=b>>>16;o[d+27|0]=b>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[e+20>>2];b=q[e+16>>2];o[d+16|0]=b;o[d+17|0]=b>>>8;o[d+18|0]=b>>>16;o[d+19|0]=b>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[e+12>>2];b=q[e+8>>2];o[d+8|0]=b;o[d+9|0]=b>>>8;o[d+10|0]=b>>>16;o[d+11|0]=b>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[e+4>>2];b=q[e>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[c+40>>2];b=q[a+128>>2];c=q[a+124>>2];f=q[a+116>>2];g=q[a+132>>2];h=q[a+136>>2];i=r[a+112|0];k=q[a+144>>2];q[d+1688>>2]=q[a+140>>2];q[d+1692>>2]=k;q[d+1680>>2]=g;q[d+1684>>2]=h;u[d+1664>>2]=i>>>0;u[d+1668>>2]=f|0;u[d+1672>>2]=c|0;u[d+1676>>2]=b|0;a=q[e+88>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[j+88>>2]=0}ue=j+96|0}function ts(a,b,c){var d=x(0),g=x(0),h=x(0),i=0,l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=0,s=0,t=x(0),v=0,w=x(0),z=x(0),A=x(0),B=x(0),C=0,D=0,E=0,F=0,G=0;d=u[b+2048>>2];w=x(d*u[c>>2]);u[c>>2]=w;l=x(d*u[c+4>>2]);u[c+4>>2]=l;z=x(x(d*u[c+8>>2])*x(8));a:{if(x(y(z))>31&1065353216),j()));h=x(x(1)-g);o=x(x(-h)-g);A=x(l*x(8));b:{if(x(y(A))>31&1065353216),j()));p=x(x(1)-m);l=x(p*o);d=x(m*o);o=x(w*x(8));c:{if(x(y(o))>31&1065353216),j()));B=x(x(1)-t);w=x(B*l);l=x(x(t*l)+w);d=x(A-m);d:{if(x(y(d))>2];s=i;i=((c&7)<<8)+b|0;G=s+i|0;s=q[C+G>>2];b=(r+1&7)<<5;c=b+v|0;F=q[c+C>>2];b=b+i|0;v=q[C+b>>2];i=n;n=(D+1&7)<<2;i=q[i+n>>2];r=q[n+G>>2];c=q[c+n>>2];b=q[b+n>>2];u[a+12>>2]=l;u[a>>2]=x(B*x(x(p*x(x(x(x(x(s&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(E&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(x(x(x(v&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(F&255)*x(.007843137718737125))+x(-1)))))))+x(t*x(x(p*x(x(x(x(x(r&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(i&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(h*x(x(x(b&255)*x(.007843137718737125))+x(-1)))+x(g*x(x(x(c&255)*x(.007843137718737125))+x(-1)))))));u[a+8>>2]=x(B*x(x(p*x(x(x(x(x(s>>>16&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(E>>>16&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(h*x(x(x(v>>>16&255)*x(.007843137718737125))+x(-1)))+x(g*x(x(x(F>>>16&255)*x(.007843137718737125))+x(-1)))))))+x(t*x(x(p*x(x(x(x(x(r>>>16&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(i>>>16&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(h*x(x(x(b>>>16&255)*x(.007843137718737125))+x(-1)))+x(g*x(x(x(c>>>16&255)*x(.007843137718737125))+x(-1)))))));u[a+4>>2]=x(B*x(x(p*x(x(x(x(x(s>>>8&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(E>>>8&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(h*x(x(x(v>>>8&255)*x(.007843137718737125))+x(-1)))+x(g*x(x(x(F>>>8&255)*x(.007843137718737125))+x(-1)))))))+x(t*x(x(p*x(x(x(x(x(r>>>8&255)*x(.007843137718737125))+x(-1))*h)+x(g*x(x(x(i>>>8&255)*x(.007843137718737125))+x(-1)))))+x(m*x(x(h*x(x(x(b>>>8&255)*x(.007843137718737125))+x(-1)))+x(g*x(x(x(c>>>8&255)*x(.007843137718737125))+x(-1)))))))}function Rx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=x(0),p=x(0),s=x(0);j=ue-96|0;ue=j;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;f=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;g=e?-1082130432:1065353216;q[d+356>>2]=g;h=e?1065353216:0;q[d+352>>2]=h;q[j+88>>2]=0;e=j;q[e+76>>2]=0;q[e+80>>2]=0;q[e+84>>2]=0;q[e+68>>2]=0;q[e+72>>2]=0;q[e+64>>2]=1065353216;Jv(q[a+4>>2],e+88|0,e- -64|0);b=n[q[q[b>>2]+32>>2]](b)|0;i=q[c+40>>2];k=q[i+36>>2];f=(f|0)==1;q[b+20>>2]=f?-1082130432:1065353216;q[b+16>>2]=f?1065353216:0;q[b>>2]=k;u[b+32>>2]=r[i+112|0]?x(1):x(0);u[b+36>>2]=q[q[c+40>>2]+120>>2];q[b+48>>2]=q[q[c+40>>2]+148>>2];f=q[q[c+40>>2]+156>>2];q[b+60>>2]=g;q[b+56>>2]=h;q[b+52>>2]=f;u[b+64>>2]=q[q[c+40>>2]+152>>2];f=q[c+40>>2];m=u[f+180>>2];p=u[f+188>>2];l=u[c+32>>2];s=u[f+184>>2];f=q[e+64>>2];g=q[e+68>>2];h=q[e+72>>2];i=q[e+76>>2];k=q[e+84>>2];q[b+120>>2]=q[e+80>>2];q[b+124>>2]=k;q[b+112>>2]=h;q[b+116>>2]=i;q[b+96>>2]=f;q[b+100>>2]=g;u[b+84>>2]=s*l;u[b+88>>2]=p*l;u[b+80>>2]=m*l;u[b+92>>2]=m!=x(0)?x(1):s!=x(0)?x(1):p!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](e,a);a=q[e+60>>2];b=q[e+56>>2];o[d+56|0]=b;o[d+57|0]=b>>>8;o[d+58|0]=b>>>16;o[d+59|0]=b>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[e+52>>2];b=q[e+48>>2];o[d+48|0]=b;o[d+49|0]=b>>>8;o[d+50|0]=b>>>16;o[d+51|0]=b>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[e+44>>2];b=q[e+40>>2];o[d+40|0]=b;o[d+41|0]=b>>>8;o[d+42|0]=b>>>16;o[d+43|0]=b>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[e+36>>2];b=q[e+32>>2];o[d+32|0]=b;o[d+33|0]=b>>>8;o[d+34|0]=b>>>16;o[d+35|0]=b>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[e+28>>2];b=q[e+24>>2];o[d+24|0]=b;o[d+25|0]=b>>>8;o[d+26|0]=b>>>16;o[d+27|0]=b>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[e+20>>2];b=q[e+16>>2];o[d+16|0]=b;o[d+17|0]=b>>>8;o[d+18|0]=b>>>16;o[d+19|0]=b>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[e+12>>2];b=q[e+8>>2];o[d+8|0]=b;o[d+9|0]=b>>>8;o[d+10|0]=b>>>16;o[d+11|0]=b>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[e+4>>2];b=q[e>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[c+40>>2];b=q[a+128>>2];c=q[a+124>>2];f=q[a+116>>2];g=q[a+132>>2];h=q[a+136>>2];i=r[a+112|0];k=q[a+144>>2];q[d+248>>2]=q[a+140>>2];q[d+252>>2]=k;q[d+240>>2]=g;q[d+244>>2]=h;u[d+224>>2]=i>>>0;u[d+228>>2]=f|0;u[d+232>>2]=c|0;u[d+236>>2]=b|0;a=q[e+88>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[j+88>>2]=0}ue=j+96|0}function gx(a,b,c){var d=0,e=0,f=0;e=ue+ -64|0;ue=e;q[a+12>>2]=q[a+8>>2];q[a+192>>2]=q[a+188>>2];q[a+204>>2]=q[a+200>>2];q[a+216>>2]=q[a+212>>2];q[a+228>>2]=q[a+224>>2];q[a+240>>2]=q[a+236>>2];q[a+252>>2]=q[a+248>>2];q[a+264>>2]=q[a+260>>2];q[a+276>>2]=q[a+272>>2];q[a+288>>2]=q[a+284>>2];q[a+300>>2]=q[a+296>>2];q[a+312>>2]=q[a+308>>2];q[a+324>>2]=q[a+320>>2];q[a+336>>2]=q[a+332>>2];q[a+348>>2]=q[a+344>>2];q[a+24>>2]=q[a+20>>2];q[a+36>>2]=q[a+32>>2];q[a+48>>2]=q[a+44>>2];q[a+60>>2]=q[a+56>>2];q[a+72>>2]=q[a+68>>2];q[a+84>>2]=q[a+80>>2];q[a+96>>2]=q[a+92>>2];q[a+108>>2]=q[a+104>>2];q[a+120>>2]=q[a+116>>2];q[a+132>>2]=q[a+128>>2];q[a+144>>2]=q[a+140>>2];q[a+156>>2]=q[a+152>>2];q[a+168>>2]=q[a+164>>2];q[a+180>>2]=q[a+176>>2];a:{b:{d=q[c+40>>2];if(q[d>>2]!=128){break b}d=q[d+40>>2];if(!d){break b}d=q[d>>2];if((d|0)<0){break b}f=q[c+4>>2];n[q[q[f>>2]+104>>2]](e,f,d);d=q[e>>2];if(!d){break b}n[q[q[d>>2]+8>>2]](d)|0;d=q[c+4>>2];n[q[q[d>>2]+104>>2]](e,d,q[q[q[c+40>>2]+40>>2]>>2]);d=q[e>>2];q[a+356>>2]=q[d+28>>2];q[a+360>>2]=q[d+32>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;break a}q[a+356>>2]=0;q[a+360>>2]=0}hx(q[b+72>>2]);d=e;q[d+56>>2]=0;q[d+60>>2]=0;q[d+48>>2]=0;q[d+52>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;q[d+24>>2]=0;q[d+28>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;q[d>>2]=0;q[d+4>>2]=0;q[a+364>>2]=0;q[a+368>>2]=0;d=q[a+372>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+372>>2]=0}q[a+372>>2]=0;q[a+376>>2]=0;d=q[a+380>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+380>>2]=0}q[a+380>>2]=0;d=q[a+384>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+384>>2]=0}q[a+384>>2]=0;d=q[a+388>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+388>>2]=0}q[a+388>>2]=0;d=q[a+392>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+392>>2]=0}q[a+392>>2]=0;d=q[a+396>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+396>>2]=0}q[a+396>>2]=0;d=q[a+400>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+400>>2]=0}q[a+400>>2]=0;d=q[a+404>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+404>>2]=0}f=a+364|0;q[a+404>>2]=0;d=q[a+408>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+408>>2]=0}q[a+408>>2]=0;d=q[e+4>>2];q[a+412>>2]=q[e>>2];q[a+416>>2]=d;d=q[e+12>>2];q[a+420>>2]=q[e+8>>2];q[a+424>>2]=d;d=q[e+20>>2];q[a+428>>2]=q[e+16>>2];q[a+432>>2]=d;d=q[e+28>>2];q[a+436>>2]=q[e+24>>2];q[a+440>>2]=d;d=q[e+36>>2];q[a+444>>2]=q[e+32>>2];q[a+448>>2]=d;d=q[e+44>>2];q[a+452>>2]=q[e+40>>2];q[a+456>>2]=d;d=q[e+52>>2];q[a+460>>2]=q[e+48>>2];q[a+464>>2]=d;d=q[e+60>>2];q[a+468>>2]=q[e+56>>2];q[a+472>>2]=d;q[a+480>>2]=-1;q[a+484>>2]=-1;q[a+476>>2]=0;ix(f,b,q[c+4>>2],q[c+40>>2],r[c+44|0],r[q[b+4>>2]+313|0]);ue=e- -64|0}function ru(a,b,c,d,e,f,g){var h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=0,w=x(0),z=x(0);n=ue-80|0;ue=n;v=q[g+4>>2];q[n+64>>2]=q[g>>2];q[n+68>>2]=v;v=q[g+12>>2];q[n+72>>2]=q[g+8>>2];q[n+76>>2]=v;if(!((a|0)==2|a>>>0>3)){Ys(f,c,n+16|0,n);a:{if(a>>>0>3){break a}b:{switch(a-1|0){default:a=q[n+68>>2];q[e>>2]=q[n+64>>2];q[e+4>>2]=a;c=q[n+76>>2];a=e+8|0;q[a>>2]=q[n+72>>2];q[a+4>>2]=c;j=u[e+12>>2];o=x(j-j);j=x(u[e+4>>2]*x(0));m=u[e>>2];h=x(j-m);k=u[a>>2];m=x(x(m*x(0))-x(k*x(0)));k=x(k-j);j=x(x(1)/x(E(x(x(h*h)+x(x(m*m)+x(k*k))))));u[d+12>>2]=o*j;h=x(h*j);u[d+8>>2]=h;m=x(m*j);u[d+4>>2]=m;j=x(k*j);u[d>>2]=j;i=u[e>>2];l=u[e+4>>2];k=x(x(i*m)-x(l*j));o=k;w=x(k*k);k=u[a>>2];l=x(x(l*h)-x(k*m));j=x(x(k*j)-x(i*h));h=x(x(1)/x(E(x(w+x(x(l*l)+x(j*j))))));m=x(o*h);k=x(j*h);j=x(l*h);break a;case 2:a=q[n+68>>2];q[e>>2]=q[n+64>>2];q[e+4>>2]=a;c=q[n+76>>2];a=e+8|0;q[a>>2]=q[n+72>>2];q[a+4>>2]=c;h=x(1);m=u[e+12>>2];o=x(m-m);l=x(u[e+4>>2]*x(0));k=u[e>>2];m=x(l-k);i=u[a>>2];k=x(x(k*x(0))-x(i*x(0)));i=x(i-l);l=x(x(1)/x(E(x(x(m*m)+x(x(k*k)+x(i*i))))));p=x(o*l);u[d+12>>2]=p;m=x(m*l);u[d+8>>2]=m;k=x(k*l);u[d+4>>2]=k;l=x(i*l);u[d>>2]=l;i=x(p*u[e+12>>2]);o=x(i-i);i=u[e>>2];r=u[e+4>>2];s=x(x(i*k)-x(r*l));t=u[a>>2];r=x(x(r*m)-x(t*k));t=x(x(t*l)-x(i*m));i=x(x(1)/x(E(x(x(s*s)+x(x(r*r)+x(t*t))))));o=x(o*i);s=x(s*i);t=x(t*i);i=x(r*i);a=d;w=o;r=u[n+32>>2];z=u[n+36>>2];o=u[n+40>>2];o=x(o*o);o=x(x(x(x(r*r)+x(z*z))+o)-o);o=x(E(o>x(0)?o:x(0)));if(!!(x(y(o))>x(.0010000000474974513))){h=x(z/o);j=x(r/o)}u[a+12>>2]=x(w*j)+x(p*h);u[d+8>>2]=x(s*j)+x(m*h);u[d+4>>2]=x(t*j)+x(k*h);u[d>>2]=x(i*j)+x(l*h);m=x(x(s*h)-x(m*j));k=x(x(t*h)-x(k*j));j=x(x(i*h)-x(l*j));break a;case 1:break a;case 0:break b}}k=u[n+36>>2];m=u[n+52>>2];j=u[n+20>>2];a=q[n+68>>2];q[e>>2]=q[n+64>>2];q[e+4>>2]=a;c=q[n+76>>2];a=e+8|0;q[a>>2]=q[n+72>>2];q[a+4>>2]=c;h=u[e+12>>2];o=x(h-h);h=u[e+4>>2];i=u[e>>2];l=x(x(j*h)-x(k*i));p=u[a>>2];i=x(x(m*i)-x(j*p));p=x(x(k*p)-x(m*h));h=x(x(1)/x(E(x(x(l*l)+x(x(i*i)+x(p*p))))));s=x(o*h);u[d+12>>2]=s;l=x(l*h);u[d+8>>2]=l;i=x(i*h);u[d+4>>2]=i;h=x(p*h);u[d>>2]=h;p=x(x(k*h)-x(j*i));i=x(x(m*i)-x(k*l));l=x(x(j*l)-x(m*h));h=x(x(1)/x(E(x(x(p*p)+x(x(i*i)+x(l*l))))));u[e+12>>2]=x(s-s)*h;u[a>>2]=p*h;u[e+4>>2]=l*h;u[e>>2]=i*h}a=q[d>>2];c=q[e>>2];q[b+12>>2]=q[n>>2];q[b+8>>2]=c;u[b+4>>2]=j;q[b>>2]=a;a=q[d+4>>2];c=q[e+4>>2];q[b+28>>2]=q[n+4>>2];q[b+24>>2]=c;u[b+20>>2]=k;q[b+16>>2]=a;a=q[d+8>>2];c=q[e+8>>2];q[b+44>>2]=q[n+8>>2];q[b+40>>2]=c;u[b+36>>2]=m;q[b+32>>2]=a}ue=n+80|0}function Tj(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=ue-144|0;ue=c;if(!r[a+1394|0]){Mj(q[a+164>>2],b);Xs(c+48|0,q[a+164>>2]+1232|0);d=q[c+60>>2];q[a+120>>2]=q[c+56>>2];q[a+124>>2]=d;d=q[c+52>>2];q[a+112>>2]=q[c+48>>2];q[a+116>>2]=d;d=q[a+148>>2];a:{if((n[q[q[d>>2]+12>>2]](d)|0)==-1){break a}d=q[a+148>>2];q[c+140>>2]=q[d- -64>>2];f=q[d+72>>2];d=q[d+68>>2];q[c+48>>2]=1;e=jh(c+140|0,c+48|0);if((f|0)==1?!(!(e|q[c+140>>2]==5)|(d|0)!=1):0){break a}q[c+48>>2]=2;if(!(!jh(c+140|0,c+48|0)|(d|0)!=2|(f|0)!=2)){d=q[a+156>>2];e=q[d+52>>2];q[a+1344>>2]=q[d+48>>2];q[a+1348>>2]=e;g=q[d+60>>2];e=a+1352|0;q[e>>2]=q[d+56>>2];q[e+4>>2]=g;f=d- -64|0;g=q[f+4>>2];e=a+1360|0;q[e>>2]=q[f>>2];q[e+4>>2]=g;e=q[d+76>>2];f=a+1368|0;q[f>>2]=q[d+72>>2];q[f+4>>2]=e;e=q[d+84>>2];f=a+1376|0;q[f>>2]=q[d+80>>2];q[f+4>>2]=e;e=q[d+92>>2];f=a+1384|0;q[f>>2]=q[d+88>>2];q[f+4>>2]=e;break a}q[c+48>>2]=1;b:{if(!(h=!jh(c+140|0,c+48|0),i=0,j=q[c+140>>2]!=5,j?h:i)){Xs(c+48|0,a+1344|0);e=q[c+60>>2];q[c+104>>2]=q[c+56>>2];q[c+108>>2]=e;e=q[c+52>>2];q[c+96>>2]=q[c+48>>2];q[c+100>>2]=e;break b}e=q[a+156>>2];g=q[e+148>>2];q[c+96>>2]=q[e+144>>2];q[c+100>>2]=g;g=q[e+156>>2];q[c+104>>2]=q[e+152>>2];q[c+108>>2]=g}c:{if((d|0)==1){Ws(c,a+1344|0);d=q[c+44>>2];q[c+88>>2]=q[c+40>>2];q[c+92>>2]=d;d=q[c+36>>2];q[c+80>>2]=q[c+32>>2];q[c+84>>2]=d;d=q[c+28>>2];q[c+72>>2]=q[c+24>>2];q[c+76>>2]=d;e=q[c+20>>2];d=c- -64|0;q[d>>2]=q[c+16>>2];q[d+4>>2]=e;d=q[c+12>>2];q[c+56>>2]=q[c+8>>2];q[c+60>>2]=d;d=q[c+4>>2];q[c+48>>2]=q[c>>2];q[c+52>>2]=d;break c}d=q[a+156>>2];e=q[d+140>>2];q[c+88>>2]=q[d+136>>2];q[c+92>>2]=e;e=q[d+132>>2];q[c+80>>2]=q[d+128>>2];q[c+84>>2]=e;e=q[d+124>>2];q[c+72>>2]=q[d+120>>2];q[c+76>>2]=e;g=q[d+116>>2];e=c- -64|0;q[e>>2]=q[d+112>>2];q[e+4>>2]=g;e=q[d+100>>2];q[c+48>>2]=q[d+96>>2];q[c+52>>2]=e;e=q[d+108>>2];q[c+56>>2]=q[d+104>>2];q[c+60>>2]=e}d:{if((f|0)==1){Vs(c,a+1344|0);d=q[c+12>>2];q[c+120>>2]=q[c+8>>2];q[c+124>>2]=d;d=q[c+4>>2];q[c+112>>2]=q[c>>2];q[c+116>>2]=d;break d}d=q[a+156>>2];f=q[d+164>>2];q[c+112>>2]=q[d+160>>2];q[c+116>>2]=f;f=q[d+172>>2];q[c+120>>2]=q[d+168>>2];q[c+124>>2]=f}_s(c,c+112|0,c+48|0,c+96|0);f=q[c+44>>2];d=a+1384|0;q[d>>2]=q[c+40>>2];q[d+4>>2]=f;f=q[c+36>>2];d=a+1376|0;q[d>>2]=q[c+32>>2];q[d+4>>2]=f;f=q[c+28>>2];d=a+1368|0;q[d>>2]=q[c+24>>2];q[d+4>>2]=f;f=q[c+20>>2];d=a+1360|0;q[d>>2]=q[c+16>>2];q[d+4>>2]=f;f=q[c+12>>2];d=a+1352|0;q[d>>2]=q[c+8>>2];q[d+4>>2]=f;d=q[c+4>>2];q[a+1344>>2]=q[c>>2];q[a+1348>>2]=d}o[a+1394|0]=1}ue=c+144|0}function mh(a,b,c){var d=0,e=0,f=0,g=0;d=q[b>>2];d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=d;e=q[b>>2];f=e+4|0;q[b>>2]=f;if(d>>>0<=5){a:{b:{switch(d-1|0){default:f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[b>>2]=e+8;if((n[q[q[c>>2]+36>>2]](c)|0)>=14){e=q[b>>2];d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);c=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;d=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);c=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[a+12|0]=c;o[a+13|0]=c>>>8;o[a+14|0]=c>>>16;o[a+15|0]=c>>>24;o[a+16|0]=d;o[a+17|0]=d>>>8;o[a+18|0]=d>>>16;o[a+19|0]=d>>>24;break a}g=q[b>>2];d=r[g+4|0]|r[g+5|0]<<8|(r[g+6|0]<<16|r[g+7|0]<<24);e=a+8|0;c=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);o[e|0]=c;o[e+1|0]=c>>>8;o[e+2|0]=c>>>16;o[e+3|0]=c>>>24;o[e+4|0]=d;o[e+5|0]=d>>>8;o[e+6|0]=d>>>16;o[e+7|0]=d>>>24;c=r[g+8|0]|r[g+9|0]<<8|(r[g+10|0]<<16|r[g+11|0]<<24);o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;if(u[e>>2]!=x(0)|u[a+12>>2]!=x(0)|u[a+16>>2]!=x(0)){break a}q[a>>2]=2147483646;break a;case 0:c=n[q[q[c>>2]+36>>2]](c)|0;d=q[b>>2];f=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=d+4|0;q[b>>2]=d;if((c|0)>=14){kV(a+20|0,d,f);break a}kV(a+44|0,d,f);break a;case 1:f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);d=e+8|0;q[b>>2]=d;vh(a+116|0,d,f,n[q[q[c>>2]+36>>2]](c)|0);break a;case 2:q[b>>2]=e+8;d=_S(136);e=lV(d,0,136);gj(e+4|0,x(0));gj(e+48|0,x(0));gj(e+92|0,x(0));f=q[a+276>>2];q[a+276>>2]=e;if(f){d=q[f+112>>2];if(d){q[f+116>>2]=d;_U(d)}d=q[f+68>>2];if(d){q[f+72>>2]=d;_U(d)}d=q[f+24>>2];if(d){q[f+28>>2]=d;_U(d)}_U(f);d=q[a+276>>2]}f=rj(d,q[b>>2],n[q[q[c>>2]+36>>2]](c)|0);break a;case 3:d=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);c=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);o[a+280|0]=c;o[a+281|0]=c>>>8;o[a+282|0]=c>>>16;o[a+283|0]=c>>>24;o[a+284|0]=d;o[a+285|0]=d>>>8;o[a+286|0]=d>>>16;o[a+287|0]=d>>>24;d=r[f+12|0]|r[f+13|0]<<8|(r[f+14|0]<<16|r[f+15|0]<<24);c=r[f+8|0]|r[f+9|0]<<8|(r[f+10|0]<<16|r[f+11|0]<<24);o[a+288|0]=c;o[a+289|0]=c>>>8;o[a+290|0]=c>>>16;o[a+291|0]=c>>>24;o[a+292|0]=d;o[a+293|0]=d>>>8;o[a+294|0]=d>>>16;o[a+295|0]=d>>>24;f=16;break a;case 4:break b}}c=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);q[a+296>>2]=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[a+300>>2]=c;f=8}q[b>>2]=q[b>>2]+f}}function uy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=ue-32|0;ue=d;q[d+28>>2]=0;q[d+24>>2]=0;ta(34964,d+28|0);ta(34965,d+24|0);q[a+40>>2]=b;b=q[a+32>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+32>>2]=0}b=q[a+24>>2];e=q[a+20>>2];if((b|0)!=(e|0)){while(1){c=b;b=b+ -8|0;c=q[c+ -4>>2];a:{if(!c){break a}g=q[c+4>>2];q[c+4>>2]=g+ -1;if(g){break a}n[q[q[c>>2]+8>>2]](c);WS(c)}if((b|0)!=(e|0)){continue}break}}q[a+24>>2]=e;q[q[a+4>>2]+324>>2]=0;q[q[a+4>>2]+328>>2]=1;f=q[a+40>>2];e=_S(24);q[e+4>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e+16>>2]=0;q[e>>2]=337216;q[e+20>>2]=0;i=e+12|0;b=a;c=b;g=b+16|0;b=g;h=w(f,352);f=6;b:{if(!h){break b}Gl(i,h);f=w((w(q[a+40>>2],352)>>>0)/24>>>2|0,6)+6|0}b=sw(b,f,q[a+200>>2]);q[c+32>>2]=b;c:{if(!b){break c}b=sw(g,((w(q[a+40>>2],352)>>>0)/24<<1&536870904)+8|0,q[a+200>>2]);q[a+36>>2]=b;if(!b){break c}b=q[a+200>>2]+ -2|0;d:{if(b>>>0>2){break d}e:{switch(b-1|0){default:ly(a);break d;case 0:break d;case 1:break e}}my(a)}f:{if(q[q[a+4>>2]+328>>2]>=1){k=a+20|0;while(1){b=_S(20);q[b+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;q[b+16>>2]=0;q[b>>2]=337356;q[d+20>>2]=b;q[d+16>>2]=b+12;q[d+12>>2]=e;q[d+8>>2]=i;q[e+4>>2]=q[e+4>>2]+1;c=ZB(g,h,d+8|0);f=q[d+16>>2];b=q[f>>2];q[f>>2]=c;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[d+12>>2];g:{if(!b){break g}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(c){break g}n[q[q[b>>2]+8>>2]](b);WS(b)}b=q[d+16>>2];if(!q[b>>2]){break f}c=_S(48);q[c>>2]=0;q[c+4>>2]=0;q[c+40>>2]=0;q[c+44>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;q[c+24>>2]=0;q[c+28>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;f=q[b+4>>2];q[b+4>>2]=c;if(f){_U(vy(f));b=q[d+16>>2]}c=q[b+4>>2];q[d>>2]=0;b=q[g>>2];h:{if(!b){break h}n[q[q[b>>2]>>2]](b)|0;b=q[d>>2];if(!b){break h}n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}q[d>>2]=q[a+16>>2];ey(c,d,q[q[d+16>>2]>>2],q[a+32>>2],q[a+36>>2],q[a+44>>2],q[a+48>>2],q[a+52>>2],q[a+56>>2],q[a+60>>2],q[a+64>>2]);b=q[d>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}b=q[a+24>>2];i:{if(b>>>0>2]){q[b>>2]=q[d+16>>2];f=q[d+20>>2];q[b+4>>2]=f;c=a;if(f){q[f+4>>2]=q[f+4>>2]+1;b=q[a+24>>2]}q[c+24>>2]=b+8;break i}wy(k,d+16|0)}b=q[d+20>>2];j:{if(!b){break j}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(c){break j}n[q[q[b>>2]+8>>2]](b);WS(b)}j=j+1|0;if((j|0)>2]+328>>2]){continue}break}}Yv(34962,q[d+28>>2]);Yv(34963,q[d+24>>2]);break c}a=q[d+20>>2];if(!a){break c}b=q[a+4>>2];q[a+4>>2]=b+ -1;if(b){break c}n[q[q[a>>2]+8>>2]](a);WS(a)}a=q[e+4>>2];q[e+4>>2]=a+ -1;if(!a){n[q[q[e>>2]+8>>2]](e);WS(e)}ue=d+32|0}function hD(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;g=ue-16|0;ue=g;q[a>>2]=340632;q[a+4>>2]=1;q[a+56>>2]=0;q[a+20>>2]=2;o[a+72|0]=1;c=a+12|0;q[c>>2]=0;q[c+4>>2]=0;e=a- -64|0;d=e;q[d>>2]=0;q[d+4>>2]=0;q[a+8>>2]=c;q[a+60>>2]=d;if(!Vv(b)){o[a+72|0]=0}ta(36348,g+12|0);h=q[g+12>>2];c=q[e>>2];a:{if(c){d=e;while(1){b=q[c+16>>2];b:{if((b|0)>=1){b=q[c>>2];if(b){break b}d=c;break a}if((b|0)>-1){break a}d=c+4|0;b=q[c+4>>2];if(!b){break a}c=d}d=c;c=b;continue}}c=e;d=c}b=q[d>>2];if(!b){b=_S(24);q[b+16>>2]=0;q[b+20>>2]=0;q[b+8>>2]=c;q[b>>2]=0;q[b+4>>2]=0;q[d>>2]=b;c=q[q[a+60>>2]>>2];f=b;c:{if(!c){break c}q[a+60>>2]=c;f=q[d>>2]}c=f;ih(q[a+64>>2],c);q[a+68>>2]=q[a+68>>2]+1}q[b+20>>2]=h;ta(36347,g+12|0);h=q[g+12>>2];c=q[e>>2];d:{if(c){b=e;while(1){d=q[c+16>>2];e:{if((d|0)>=2){d=q[c>>2];if(d){break e}b=c;break d}if((d|0)==1){break d}b=c+4|0;d=q[c+4>>2];if(!d){break d}c=b}b=c;c=d;continue}}c=e;b=c}d=q[b>>2];if(!d){d=_S(24);q[d+16>>2]=1;q[d+20>>2]=0;q[d+8>>2]=c;q[d>>2]=0;q[d+4>>2]=0;q[b>>2]=d;c=q[q[a+60>>2]>>2];f=d;f:{if(!c){break f}q[a+60>>2]=c;f=q[b>>2]}c=f;ih(q[a+64>>2],c);q[a+68>>2]=q[a+68>>2]+1}q[d+20>>2]=h;ta(36349,g+12|0);h=q[g+12>>2];c=q[e>>2];g:{if(c){b=e;while(1){d=q[c+16>>2];h:{if((d|0)>=3){d=q[c>>2];if(d){break h}b=c;break g}if((d|0)==2){break g}b=c+4|0;d=q[c+4>>2];if(!d){break g}c=b}b=c;c=d;continue}}c=e;b=c}d=q[b>>2];if(!d){d=_S(24);q[d+16>>2]=2;q[d+20>>2]=0;q[d+8>>2]=c;q[d>>2]=0;q[d+4>>2]=0;q[b>>2]=d;c=q[q[a+60>>2]>>2];f=d;i:{if(!c){break i}q[a+60>>2]=c;f=q[b>>2]}c=f;ih(q[a+64>>2],c);q[a+68>>2]=q[a+68>>2]+1}q[d+20>>2]=h;ta(35660,g+12|0);h=q[g+12>>2];c=q[e>>2];j:{if(c){b=e;while(1){d=q[c+16>>2];k:{if((d|0)>=4){d=q[c>>2];if(d){break k}b=c;break j}if((d|0)==3){break j}b=c+4|0;d=q[c+4>>2];if(!d){break j}c=b}b=c;c=d;continue}}c=e;b=c}d=q[b>>2];if(!d){d=_S(24);q[d+16>>2]=3;q[d+20>>2]=0;q[d+8>>2]=c;q[d>>2]=0;q[d+4>>2]=0;q[b>>2]=d;c=q[q[a+60>>2]>>2];f=d;l:{if(!c){break l}q[a+60>>2]=c;f=q[b>>2]}c=f;ih(q[a+64>>2],c);q[a+68>>2]=q[a+68>>2]+1}q[d+20>>2]=h;ta(34930,g+12|0);d=q[g+12>>2];c=q[e>>2];m:{if(c){while(1){b=q[c+16>>2];n:{if((b|0)>=5){b=q[c>>2];if(b){break n}e=c;break m}if((b|0)==4){break m}e=c+4|0;b=q[c+4>>2];if(!b){break m}c=e}e=c;c=b;continue}}c=e}h=a+56|0;b=q[e>>2];if(!b){b=_S(24);q[b+16>>2]=4;q[b+20>>2]=0;q[b+8>>2]=c;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=b;c=q[q[a+60>>2]>>2];f=b;o:{if(!c){break o}q[a+60>>2]=c;f=q[e>>2]}c=f;ih(q[a+64>>2],c);q[a+68>>2]=q[a+68>>2]+1}q[b+20>>2]=d;kw(h);ue=g+16|0;return a}function $f(a){var b=0,c=0,d=0;n[q[q[a>>2]+176>>2]](a);b=q[a+32>>2];c=q[a+28>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+32>>2]=c;b=q[a+44>>2];c=q[a+40>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+44>>2]=c;b=q[a+56>>2];c=q[a+52>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+56>>2]=c;b=q[a+68>>2];c=q[a+64>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+68>>2]=c;b=q[a+80>>2];c=q[a+76>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+80>>2]=c;b=q[a+92>>2];c=q[a+88>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+92>>2]=c;b=q[a+104>>2];c=q[a+100>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+104>>2]=c;b=q[a+116>>2];c=q[a+112>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+116>>2]=c;b=q[a+128>>2];c=q[a+124>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+128>>2]=c;b=q[a+140>>2];c=q[a+136>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+140>>2]=c;b=q[a+176>>2];c=q[a+172>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+176>>2]=c;b=q[a+188>>2];c=q[a+184>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+188>>2]=c;b=q[a+200>>2];c=q[a+196>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(c|0)){continue}break}}q[a+200>>2]=c;b=q[a+212>>2];c=q[a+208>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+212>>2]=c;b=q[a+152>>2];c=q[a+148>>2];if((b|0)!=(c|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+152>>2]=c;q[a+164>>2]=q[a+160>>2];b=q[a+292>>2];if(b){n[q[q[b>>2]+4>>2]](b);q[a+292>>2]=0}}function jA(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=x(0),k=0,l=x(0),m=0,n=0,o=x(0),p=0,r=x(0),s=0,t=0,v=0,y=0,z=0,A=0;a:{m=q[b+28>>2];e=q[m>>2];if(e>>>0>1){break a}if(e-1){e=q[c+8>>2];q[c+4>>2]=e;h=q[a+28>>2];f=q[a+24>>2];if((h-f|0)==240){break a}d=q[b+16>>2];while(1){if((d|0)>=1){h=w(k,240)+f|0;o=u[h+112>>2];i=u[h+104>>2];m=q[c>>2];v=m<<2;n=w(m,3);p=m<<1;y=h+4|0;j=u[h+100>>2];l=x(j+u[h+108>>2]);f=0;while(1){s=q[y>>2];t=q[h>>2];u[e+16>>2]=j;s=w(d,s)+f|0;g=x(w(t+ -1|0,d)|0);r=x(i+x(o*x(x(s|0)/g)));u[e+20>>2]=r;d=e+m|0;u[d+20>>2]=r;u[d+16>>2]=l;d=e+p|0;g=x(i+x(o*x(x(s+1|0)/g)));u[d+20>>2]=g;u[d+16>>2]=j;d=e+n|0;u[d+20>>2]=g;u[d+16>>2]=l;e=e+v|0;f=f+1|0;d=q[b+16>>2];if((f|0)<(d|0)){continue}break}q[c+4>>2]=e;h=q[a+28>>2];f=q[a+24>>2]}k=k+1|0;if(k>>>0<((h-f|0)/240|0)+ -1>>>0){continue}break}break a}e=q[c+8>>2];q[c+4>>2]=e;d=q[a+24>>2];if((q[a+28>>2]-d|0)==240){break a}while(1){k=w(v,240)+d|0;o=u[k+100>>2];j=u[k+112>>2];i=u[k+104>>2];l=u[k+108>>2];h=q[m+12>>2];b:{c:{if(v>>>0>>0){d=q[b+16>>2];if((d|0)<1){break b}l=x(o+l);n=q[c>>2];p=n<<2;y=w(n,3);s=n<<1;k=k+4|0;j=x(x(i+x(j*u[m+16>>2]))-i);f=0;while(1){t=q[k>>2];u[e+16>>2]=o;t=w(d,t)+f|0;g=x(w(d,h)|0);r=x(i+x(j*x(x(t|0)/g)));u[e+20>>2]=r;d=e+n|0;u[d+20>>2]=r;u[d+16>>2]=l;d=e+s|0;g=x(i+x(j*x(x(t+1|0)/g)));u[d+20>>2]=g;u[d+16>>2]=o;d=e+y|0;u[d+20>>2]=g;u[d+16>>2]=l;e=e+p|0;f=f+1|0;d=q[b+16>>2];if((f|0)>=(d|0)){break c}h=q[m+12>>2];continue}}p=q[k>>2];d=q[m+8>>2];if(v>>>0>=p+(d^-1)>>>0){f=q[b+16>>2];if((f|0)<1){break b}l=x(o+l);n=q[c>>2];y=n<<2;s=w(n,3);t=n<<1;g=x(i+j);i=x(i+x(j*u[m+20>>2]));j=x(g-i);z=k+4|0;h=0;while(1){A=q[z>>2];u[e+16>>2]=o;p=w(((A-p|0)+d|0)+1|0,f)+h|0;g=x(w(d,f)|0);r=x(i+x(j*x(x(p|0)/g)));u[e+20>>2]=r;d=e+n|0;u[d+20>>2]=r;u[d+16>>2]=l;d=e+t|0;g=x(i+x(j*x(x(p+1|0)/g)));u[d+20>>2]=g;u[d+16>>2]=o;d=e+s|0;u[d+20>>2]=g;u[d+16>>2]=l;e=e+y|0;h=h+1|0;f=q[b+16>>2];if((h|0)>=(f|0)){break c}d=q[m+8>>2];p=q[k>>2];continue}}f=q[b+16>>2];if((f|0)<1){break b}l=x(o+l);h=q[c>>2];k=h<<2;n=w(h,3);p=h<<1;g=x(i+x(j*u[m+20>>2]));i=x(i+x(j*u[m+16>>2]));j=x(g-i);d=0;while(1){u[e+16>>2]=o;g=x(f|0);r=x(i+x(j*x(x(d|0)/g)));u[e+20>>2]=r;f=e+h|0;u[f+20>>2]=r;u[f+16>>2]=l;f=e+p|0;d=d+1|0;g=x(i+x(j*x(x(d|0)/g)));u[f+20>>2]=g;u[f+16>>2]=o;f=e+n|0;u[f+20>>2]=g;u[f+16>>2]=l;e=e+k|0;f=q[b+16>>2];if((d|0)<(f|0)){continue}break}}q[c+4>>2]=e}v=v+1|0;d=q[a+24>>2];if(v>>>0<((q[a+28>>2]-d|0)/240|0)+ -1>>>0){continue}break}}}function bA(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=x(0),k=0,l=x(0),m=0,n=0,o=x(0),p=0,r=x(0),s=0,t=0,v=0,y=0,z=0,A=0;a:{m=q[b+28>>2];e=q[m>>2];if(e>>>0>1){break a}if(e-1){e=q[c+8>>2];q[c+4>>2]=e;h=q[a+28>>2];f=q[a+24>>2];if((h-f|0)==240){break a}d=q[b+16>>2];while(1){if((d|0)>=1){h=w(k,240)+f|0;o=u[h+112>>2];i=u[h+104>>2];m=q[c>>2];v=m<<2;n=w(m,3);p=m<<1;y=h+4|0;j=u[h+100>>2];l=x(j+u[h+108>>2]);f=0;while(1){s=q[y>>2];t=q[h>>2];u[e+24>>2]=j;s=w(d,s)+f|0;g=x(w(t+ -1|0,d)|0);r=x(i+x(o*x(x(s|0)/g)));u[e+28>>2]=r;d=e+m|0;u[d+28>>2]=r;u[d+24>>2]=l;d=e+p|0;g=x(i+x(o*x(x(s+1|0)/g)));u[d+28>>2]=g;u[d+24>>2]=j;d=e+n|0;u[d+28>>2]=g;u[d+24>>2]=l;e=e+v|0;f=f+1|0;d=q[b+16>>2];if((f|0)<(d|0)){continue}break}q[c+4>>2]=e;h=q[a+28>>2];f=q[a+24>>2]}k=k+1|0;if(k>>>0<((h-f|0)/240|0)+ -1>>>0){continue}break}break a}e=q[c+8>>2];q[c+4>>2]=e;d=q[a+24>>2];if((q[a+28>>2]-d|0)==240){break a}while(1){k=w(v,240)+d|0;o=u[k+100>>2];j=u[k+112>>2];i=u[k+104>>2];l=u[k+108>>2];h=q[m+12>>2];b:{c:{if(v>>>0>>0){d=q[b+16>>2];if((d|0)<1){break b}l=x(o+l);n=q[c>>2];p=n<<2;y=w(n,3);s=n<<1;k=k+4|0;j=x(x(i+x(j*u[m+16>>2]))-i);f=0;while(1){t=q[k>>2];u[e+24>>2]=o;t=w(d,t)+f|0;g=x(w(d,h)|0);r=x(i+x(j*x(x(t|0)/g)));u[e+28>>2]=r;d=e+n|0;u[d+28>>2]=r;u[d+24>>2]=l;d=e+s|0;g=x(i+x(j*x(x(t+1|0)/g)));u[d+28>>2]=g;u[d+24>>2]=o;d=e+y|0;u[d+28>>2]=g;u[d+24>>2]=l;e=e+p|0;f=f+1|0;d=q[b+16>>2];if((f|0)>=(d|0)){break c}h=q[m+12>>2];continue}}p=q[k>>2];d=q[m+8>>2];if(v>>>0>=p+(d^-1)>>>0){f=q[b+16>>2];if((f|0)<1){break b}l=x(o+l);n=q[c>>2];y=n<<2;s=w(n,3);t=n<<1;g=x(i+j);i=x(i+x(j*u[m+20>>2]));j=x(g-i);z=k+4|0;h=0;while(1){A=q[z>>2];u[e+24>>2]=o;p=w(((A-p|0)+d|0)+1|0,f)+h|0;g=x(w(d,f)|0);r=x(i+x(j*x(x(p|0)/g)));u[e+28>>2]=r;d=e+n|0;u[d+28>>2]=r;u[d+24>>2]=l;d=e+t|0;g=x(i+x(j*x(x(p+1|0)/g)));u[d+28>>2]=g;u[d+24>>2]=o;d=e+s|0;u[d+28>>2]=g;u[d+24>>2]=l;e=e+y|0;h=h+1|0;f=q[b+16>>2];if((h|0)>=(f|0)){break c}d=q[m+8>>2];p=q[k>>2];continue}}f=q[b+16>>2];if((f|0)<1){break b}l=x(o+l);h=q[c>>2];k=h<<2;n=w(h,3);p=h<<1;g=x(i+x(j*u[m+20>>2]));i=x(i+x(j*u[m+16>>2]));j=x(g-i);d=0;while(1){u[e+24>>2]=o;g=x(f|0);r=x(i+x(j*x(x(d|0)/g)));u[e+28>>2]=r;f=e+h|0;u[f+28>>2]=r;u[f+24>>2]=l;f=e+p|0;d=d+1|0;g=x(i+x(j*x(x(d|0)/g)));u[f+28>>2]=g;u[f+24>>2]=o;f=e+n|0;u[f+28>>2]=g;u[f+24>>2]=l;e=e+k|0;f=q[b+16>>2];if((d|0)<(f|0)){continue}break}}q[c+4>>2]=e}v=v+1|0;d=q[a+24>>2];if(v>>>0<((q[a+28>>2]-d|0)/240|0)+ -1>>>0){continue}break}}}function mO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;h=ue+ -64|0;ue=h;q[h+56>>2]=b;q[e>>2]=0;EH(h,d);i=WH(h);kL(h);a:{b:{c:{j=g+ -65|0;if(j>>>0>56){if((g|0)!=37){break c}nO(h+56|0,c,e,i);break b}d:{switch(j-1|0){default:gO(a,f+24|0,h+56|0,c,e,i);break b;case 0:case 32:case 38:iO(a,f+16|0,h+56|0,c,e,i);break b;case 33:b=n[q[q[a+8>>2]+12>>2]](a+8|0)|0;k=h,l=bO(a,q[h+56>>2],c,d,e,f,kM(b),kM(b)+(uL(b)<<2)|0),q[k+56>>2]=l;break b;case 34:case 35:oO(f+12|0,h+56|0,c,e,i);break b;case 2:g=q[88859];q[h+24>>2]=q[88858];q[h+28>>2]=g;g=q[88857];q[h+16>>2]=q[88856];q[h+20>>2]=g;g=q[88855];q[h+8>>2]=q[88854];q[h+12>>2]=g;g=q[88853];q[h>>2]=q[88852];q[h+4>>2]=g;k=h,l=bO(a,b,c,d,e,f,h,h+32|0),q[k+56>>2]=l;break b;case 4:g=q[88867];q[h+24>>2]=q[88866];q[h+28>>2]=g;g=q[88865];q[h+16>>2]=q[88864];q[h+20>>2]=g;g=q[88863];q[h+8>>2]=q[88862];q[h+12>>2]=g;g=q[88861];q[h>>2]=q[88860];q[h+4>>2]=g;k=h,l=bO(a,b,c,d,e,f,h,h+32|0),q[k+56>>2]=l;break b;case 6:pO(f+8|0,h+56|0,c,e,i);break b;case 7:qO(f+8|0,h+56|0,c,e,i);break b;case 40:rO(f+28|0,h+56|0,c,e,i);break b;case 43:sO(f+16|0,h+56|0,c,e,i);break b;case 11:tO(f+4|0,h+56|0,c,e,i);break b;case 44:case 50:uO(h+56|0,c,e,i);break b;case 46:vO(a,f+8|0,h+56|0,c,e,i);break b;case 48:g=kV(h,355472,44);k=g,l=bO(a,b,c,d,e,f,g,g+44|0),q[k+56>>2]=l;break b;case 16:q[h+16>>2]=q[88884];g=q[88883];q[h+8>>2]=q[88882];q[h+12>>2]=g;g=q[88881];q[h>>2]=q[88880];q[h+4>>2]=g;k=h,l=bO(a,b,c,d,e,f,h,h+20|0),q[k+56>>2]=l;break b;case 17:wO(f,h+56|0,c,e,i);break b;case 18:g=q[88895];q[h+24>>2]=q[88894];q[h+28>>2]=g;g=q[88893];q[h+16>>2]=q[88892];q[h+20>>2]=g;g=q[88891];q[h+8>>2]=q[88890];q[h+12>>2]=g;g=q[88889];q[h>>2]=q[88888];q[h+4>>2]=g;k=h,l=bO(a,b,c,d,e,f,h,h+32|0),q[k+56>>2]=l;break b;case 53:xO(f+24|0,h+56|0,c,e,i);break b;case 54:a=n[q[q[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 22:b=n[q[q[a+8>>2]+24>>2]](a+8|0)|0;k=h,l=bO(a,q[h+56>>2],c,d,e,f,kM(b),kM(b)+(uL(b)<<2)|0),q[k+56>>2]=l;break b;case 55:kO(f+20|0,h+56|0,c,e,i);break b;case 1:case 3:case 5:case 8:case 9:case 10:case 12:case 13:case 14:case 15:case 19:case 20:case 21:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 36:case 37:case 39:case 41:case 42:case 45:case 47:case 49:case 51:case 52:break c;case 23:break d}}yO(f+20|0,h+56|0,c,e,i);break b}q[e>>2]=q[e>>2]|4}a=q[h+56>>2]}ue=h- -64|0;return a|0}function Pr(a,b,c,d){var g=0,h=0,i=0,l=0,m=0,o=x(0),p=x(0),s=x(0),t=0,v=0,z=0,C=x(0),D=0,E=0,F=0,G=x(0),H=0,I=0,J=0,K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0),Q=x(0);m=ue-32|0;ue=m;q[a>>2]=0;q[a+4>>2]=0;i=a+16|0;g=i;q[g>>2]=0;q[g+4>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;g=w(c,d);D=0;a:{if(!g){break a}Vr(a,g);h=q[i>>2];D=q[a+12>>2]}g=D;H=a+12|0;E=c+ -1|0;I=d+ -1|0;i=w(E,I)<<1;h=(h-g|0)/12|0;b:{if(i>>>0>h>>>0){gr(H,i-h|0);break b}if(i>>>0>=h>>>0){break b}q[a+16>>2]=g+w(i,12)}c:{if((d|0)<1){break c}J=b+16|0;O=x(I|0);P=x(E|0);F=(c|0)<1;while(1){if(!F){l=w(c,t);o=x(x(t|0)/O);Q=x(x(1)-o);L=x(B(x(A(o,x(1))),x(0)));g=0;while(1){s=u[b+8>>2];C=u[b>>2];o=u[b+4>>2];n[q[b+24>>2]](m+16|0,J,L);M=u[m+16>>2];i=q[m+20>>2];h=w(g+l|0,80);v=h+q[a>>2]|0;q[v+12>>2]=1065353216;q[v+4>>2]=i;N=x(x(g|0)/P);G=x(C+x(N*x(o-C)));o=x(s*x(3.1415927410125732));s=x(G+x(L*x(o+o)));o=x(x(s*x(.15915493667125702))+(f(0,(k(s),e(0))&-2147483648|1056964608),j()));d:{if(x(y(o))>2]=M*x(x(x(x(x(x(K*x(-.5))+x(1))+x(G/x(24)))+x(C/x(-720)))+x(s/x(40320)))+x(o/x(-3628800)));u[v>>2]=M*x(p*x(x(x(x(x(x(K/x(-6))+x(1))+x(G/x(120)))+x(C/x(-5040)))+x(s/x(362880)))+x(o/x(-39916800))));h=h+q[a>>2]|0;u[h+48>>2]=N;q[h+56>>2]=0;q[h+60>>2]=1065353216;u[h+52>>2]=Q;g=g+1|0;if((g|0)!=(c|0)){continue}break}}t=t+1|0;if((t|0)!=(d|0)){continue}break}if(r[b+12|0]){g=0;while(1){h=q[a>>2];l=w(c,g);F=h+w(l+E|0,80)|0;i=F;l=h+w(l,80)|0;h=q[l+4>>2];q[i>>2]=q[l>>2];q[i+4>>2]=h;h=q[l+12>>2];q[i+8>>2]=q[l+8>>2];q[i+12>>2]=h;g=g+1|0;if((g|0)!=(d|0)){continue}break}}if((d|0)<2){break c}J=(c|0)>1;while(1){e:{if(!J){z=z+1|0;break e}F=w(z,E);t=w(c,z);z=z+1|0;v=w(z,c);g=0;while(1){l=g+F|0;h=q[H>>2]+w(l,24)|0;d=g+1|0;q[h+8>>2]=d+t;i=d+v|0;q[h+4>>2]=i;D=h;h=g+t|0;q[D>>2]=h;l=q[H>>2]+w(l<<1|1,12)|0;q[l+8>>2]=i;q[l+4>>2]=g+v;q[l>>2]=h;g=d;if((g|0)!=(E|0)){continue}break}}if((z|0)!=(I|0)){continue}break}}c=q[a>>2];if((c|0)!=q[a+4>>2]){h=b+32|0;g=0;while(1){d=w(g,80);i=d+c|0;c=q[i+4>>2];q[m+16>>2]=q[i>>2];q[m+20>>2]=c;c=q[i+12>>2];q[m+24>>2]=q[i+8>>2];q[m+28>>2]=c;n[q[b+40>>2]](m,h,m+16|0);c=q[m+4>>2];d=d+q[a>>2]|0;q[d>>2]=q[m>>2];q[d+4>>2]=c;c=q[m+12>>2];q[d+8>>2]=q[m+8>>2];q[d+12>>2]=c;g=g+1|0;c=q[a>>2];if(g>>>0<(q[a+4>>2]-c|0)/80>>>0){continue}break}}ue=m+32|0}function Nx(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=x(0),i=0,j=0,k=0,l=x(0),m=x(0);j=1;a:{b:{c=b-a>>3;c:{if(c>>>0<=5){d:{switch(c-2|0){case 0:b=b+ -8|0;if(!(u[b>>2]>u[a>>2])){break c}j=q[a>>2];d=q[a+4>>2];c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;q[b>>2]=j;q[b+4>>2]=d;break a;case 1:f=b+ -8|0;l=u[f>>2];g=u[a+8>>2];if(!(g>u[a>>2])){if(!(l>g)){break c}d=q[a+8>>2];c=q[a+12>>2];b=q[f+4>>2];q[a+8>>2]=q[f>>2];q[a+12>>2]=b;q[f>>2]=d;q[f+4>>2]=c;if(!(u[a+8>>2]>u[a>>2])){break c}d=q[a+8>>2];c=q[a+12>>2];b=q[a+4>>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=b;q[a>>2]=d;q[a+4>>2]=c;break a}h=u[a>>2];e=q[a>>2];d=q[a+4>>2];if(!!(l>g)){b=q[f+4>>2];q[a>>2]=q[f>>2];q[a+4>>2]=b;break b}c=q[a+8>>2];b=q[a+12>>2];q[a+8>>2]=e;q[a+12>>2]=d;q[a>>2]=c;q[a+4>>2]=b;if(!(u[f>>2]>h)){break c}b=q[f+4>>2];q[a+8>>2]=q[f>>2];q[a+12>>2]=b;break b;case 2:Mx(a,a+8|0,a+16|0,b+ -8|0);break a;case 3:break d;default:break c}}f=a+8|0;i=a+16|0;k=a+24|0;Mx(a,f,i,k);b=b+ -8|0;if(!(u[b>>2]>u[a+24>>2])){break c}e=q[k>>2];d=q[k+4>>2];c=q[b+4>>2];q[k>>2]=q[b>>2];q[k+4>>2]=c;q[b>>2]=e;q[b+4>>2]=d;if(!(u[k>>2]>u[i>>2])){break c}d=q[i>>2];c=q[i+4>>2];b=q[k+4>>2];h=u[k>>2];e=q[k>>2];q[i>>2]=e;q[i+4>>2]=b;q[k>>2]=d;q[k+4>>2]=c;if(!(u[f>>2]>2];q[a+16>>2]=q[a+8>>2];q[a+20>>2]=c;q[a+8>>2]=e;q[a+12>>2]=b;if(!(u[a>>2]>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=c;q[a>>2]=e;q[a+4>>2]=b;break a}h=u[a+16>>2];m=u[a+8>>2];l=u[a>>2];e:{if(!(m>l)){if(!(h>m)){break e}g=u[a+16>>2];e=q[a+16>>2];d=q[a+20>>2];c=q[a+12>>2];h=u[a+8>>2];q[a+16>>2]=q[a+8>>2];q[a+20>>2]=c;q[a+8>>2]=e;q[a+12>>2]=d;if(!(l>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=c;q[a>>2]=e;q[a+4>>2]=d;break e}g=u[a>>2];i=q[a>>2];e=q[a+4>>2];if(!!(h>m)){d=q[a+16>>2];c=q[a+20>>2];q[a+16>>2]=i;q[a+20>>2]=e;q[a>>2]=d;q[a+4>>2]=c;h=g;break e}d=q[a+8>>2];c=q[a+12>>2];q[a+8>>2]=i;q[a+12>>2]=e;q[a>>2]=d;q[a+4>>2]=c;if(!(h>g)){break e}d=q[a+16>>2];c=q[a+20>>2];q[a+16>>2]=i;q[a+20>>2]=e;q[a+8>>2]=d;q[a+12>>2]=c;h=g}c=a+24|0;if((c|0)==(b|0)){break c}j=a+16|0;while(1){f:{d=c;g=u[c>>2];if(!!(g>h)){i=q[d+4>>2];e=d;while(1){g:{c=j;j=q[c+4>>2];q[e>>2]=q[c>>2];q[e+4>>2]=j;if((a|0)==(c|0)){c=a;break g}e=c;j=c+ -8|0;if(u[j>>2]>2]=i;u[c>>2]=g;f=f+1|0;if((f|0)==8){break f}}c=d+8|0;if((c|0)==(b|0)){break a}h=u[d>>2];j=d;continue}break}j=(d+8|0)==(b|0)}return j}q[f>>2]=e;q[f+4>>2]=d}return 1}function Lx(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=x(0),i=0,j=0,k=0,l=x(0),m=x(0);j=1;a:{b:{c=b-a>>3;c:{if(c>>>0<=5){d:{switch(c-2|0){case 0:b=b+ -8|0;if(!(u[b>>2]>2])){break c}j=q[a>>2];d=q[a+4>>2];c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;q[b>>2]=j;q[b+4>>2]=d;break a;case 1:f=b+ -8|0;l=u[f>>2];g=u[a+8>>2];if(!(g>2])){if(!(l>2];c=q[a+12>>2];b=q[f+4>>2];q[a+8>>2]=q[f>>2];q[a+12>>2]=b;q[f>>2]=d;q[f+4>>2]=c;if(!(u[a+8>>2]>2])){break c}d=q[a+8>>2];c=q[a+12>>2];b=q[a+4>>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=b;q[a>>2]=d;q[a+4>>2]=c;break a}h=u[a>>2];e=q[a>>2];d=q[a+4>>2];if(!!(l>2];q[a>>2]=q[f>>2];q[a+4>>2]=b;break b}c=q[a+8>>2];b=q[a+12>>2];q[a+8>>2]=e;q[a+12>>2]=d;q[a>>2]=c;q[a+4>>2]=b;if(!(u[f>>2]>2];q[a+8>>2]=q[f>>2];q[a+12>>2]=b;break b;case 2:Kx(a,a+8|0,a+16|0,b+ -8|0);break a;case 3:break d;default:break c}}f=a+8|0;i=a+16|0;k=a+24|0;Kx(a,f,i,k);b=b+ -8|0;if(!(u[b>>2]>2])){break c}e=q[k>>2];d=q[k+4>>2];c=q[b+4>>2];q[k>>2]=q[b>>2];q[k+4>>2]=c;q[b>>2]=e;q[b+4>>2]=d;if(!(u[k>>2]>2])){break c}d=q[i>>2];c=q[i+4>>2];b=q[k+4>>2];h=u[k>>2];e=q[k>>2];q[i>>2]=e;q[i+4>>2]=b;q[k>>2]=d;q[k+4>>2]=c;if(!(u[f>>2]>h)){break c}c=q[a+12>>2];q[a+16>>2]=q[a+8>>2];q[a+20>>2]=c;q[a+8>>2]=e;q[a+12>>2]=b;if(!(u[a>>2]>h)){break c}c=q[a+4>>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=c;q[a>>2]=e;q[a+4>>2]=b;break a}h=u[a+16>>2];m=u[a+8>>2];l=u[a>>2];e:{if(!(m>2];e=q[a+16>>2];d=q[a+20>>2];c=q[a+12>>2];h=u[a+8>>2];q[a+16>>2]=q[a+8>>2];q[a+20>>2]=c;q[a+8>>2]=e;q[a+12>>2]=d;if(!(l>g)){break e}c=q[a+4>>2];q[a+8>>2]=q[a>>2];q[a+12>>2]=c;q[a>>2]=e;q[a+4>>2]=d;break e}g=u[a>>2];i=q[a>>2];e=q[a+4>>2];if(!!(h>2];c=q[a+20>>2];q[a+16>>2]=i;q[a+20>>2]=e;q[a>>2]=d;q[a+4>>2]=c;h=g;break e}d=q[a+8>>2];c=q[a+12>>2];q[a+8>>2]=i;q[a+12>>2]=e;q[a>>2]=d;q[a+4>>2]=c;if(!(h>2];c=q[a+20>>2];q[a+16>>2]=i;q[a+20>>2]=e;q[a+8>>2]=d;q[a+12>>2]=c;h=g}c=a+24|0;if((c|0)==(b|0)){break c}j=a+16|0;while(1){f:{d=c;g=u[c>>2];if(!!(g>2];e=d;while(1){g:{c=j;j=q[c+4>>2];q[e>>2]=q[c>>2];q[e+4>>2]=j;if((a|0)==(c|0)){c=a;break g}e=c;j=c+ -8|0;if(u[j>>2]>g){continue}}break}q[c+4>>2]=i;u[c>>2]=g;f=f+1|0;if((f|0)==8){break f}}c=d+8|0;if((c|0)==(b|0)){break a}h=u[d>>2];j=d;continue}break}j=(d+8|0)==(b|0)}return j}q[f>>2]=e;q[f+4>>2]=d}return 1}function sA(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0,t=0;f=ue-944|0;ue=f;q[a+32>>2]=0;j=q[d+16>>2];h=n[q[q[b>>2]+64>>2]](b)|0;g=q[a+8>>2];q[a+12>>2]=g;h=(h|0)/(j<<1)|0;h=(h|0)<(c|0)?h:c;q[a+36>>2]=h;a:{b:{if(!q[q[d+36>>2]+8>>2]|(q[a+16>>2]-g|0)/272>>>0>=h>>>0){break b}if(h>>>0>=15790321){break a}i=w(h,272);c=_S(i);q[a+12>>2]=c;q[a+8>>2]=c;q[a+16>>2]=c+i;if(!g){break b}_U(g)}q[f+112>>2]=0;q[f+104>>2]=0;q[f+108>>2]=1065353216;q[f+96>>2]=0;q[f+100>>2]=0;o[f+92|0]=0;lV(f+808|0,0,115);q[f+924>>2]=-1;q[f+928>>2]=-1;q[f+932>>2]=0;q[f+936>>2]=0;q[f+800>>2]=0;q[f+804>>2]=0;q[f+380>>2]=0;q[f+116>>2]=0;q[f+120>>2]=0;q[f+88>>2]=1065353216;q[f+80>>2]=0;q[f+84>>2]=0;o[f+16|0]=0;q[f+12>>2]=1065353216;o[f+10|0]=0;q[f+20>>2]=1;q[f+24>>2]=2;o[f+8|0]=r[d+8|0];o[f+9|0]=r[d+9|0];c=q[d+40>>2];g=q[c+116>>2];i=q[c+120>>2];k=q[c+124>>2];l=q[c+128>>2];m=q[c+132>>2];p=q[c+136>>2];s=r[c+112|0];t=q[c+144>>2];q[f+56>>2]=q[c+140>>2];q[f+60>>2]=t;q[f+48>>2]=m;q[f+52>>2]=p;q[f+40>>2]=k;q[f+44>>2]=l;q[f+32>>2]=g;q[f+36>>2]=i;q[f+28>>2]=s;q[f+64>>2]=q[c+148>>2];q[f+68>>2]=q[c+152>>2];q[f+72>>2]=q[c+156>>2];q[f+76>>2]=q[c+160>>2];q[f+80>>2]=q[c+164>>2];o[f+84|0]=r[c+168|0];o[f+85|0]=r[c+169|0];o[f+86|0]=r[c+170|0];o[f+87|0]=r[c+171|0];q[f+88>>2]=q[c+172>>2];o[f+92|0]=r[c+176|0];q[f+108>>2]=q[d+24>>2];g=q[c>>2];o[f+10|0]=(g|0)==6;c=q[c+36>>2];q[f+116>>2]=g;q[f+12>>2]=c;c=q[d+240>>2];if(c){n[q[q[c>>2]>>2]](c)|0}g=j<<3;c=q[f+932>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[f+932>>2]=0}c=q[d+240>>2];q[f+936>>2]=e;q[f+932>>2]=c;q[f+112>>2]=q[d>>2];tz(f+8|0,q[a+20>>2],q[d+4>>2],q[d+40>>2]);q[a+124>>2]=q[f+800>>2];q[a+128>>2]=q[f+804>>2];q[a+112>>2]=q[q[d+40>>2]>>2];c=q[b+72>>2];b=w(g,h);uz(c,f+8|0,b,a+120|0,a+28|0);q[a+116>>2]=b;a=q[f+932>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+932>>2]=0}a=q[f+852>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+852>>2]=0}a=q[f+848>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+848>>2]=0}a=q[f+844>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+844>>2]=0}a=q[f+840>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+840>>2]=0}a=q[f+836>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+836>>2]=0}a=q[f+832>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+832>>2]=0}a=q[f+828>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+828>>2]=0}a=q[f+824>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+824>>2]=0}a=q[f+816>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+816>>2]=0}ue=f+944|0;return}Ue(337013);F()}function Gx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=x(0),m=x(0),p=x(0),s=0;g=ue-96|0;ue=g;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;f=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;h=e?-1082130432:1065353216;q[d+1076>>2]=h;i=e?1065353216:0;q[d+1072>>2]=i;q[g+88>>2]=0;e=g;q[e+76>>2]=0;q[e+80>>2]=0;q[e+84>>2]=0;q[e+68>>2]=0;q[e+72>>2]=0;q[e+64>>2]=1065353216;Jv(q[a+4>>2],e+88|0,e- -64|0);b=n[q[q[b>>2]+32>>2]](b)|0;j=q[c+40>>2];s=q[j+36>>2];f=(f|0)==1;q[b+20>>2]=f?-1082130432:1065353216;q[b+16>>2]=f?1065353216:0;q[b>>2]=s;u[b+32>>2]=r[j+112|0]?x(1):x(0);u[b+36>>2]=q[q[c+40>>2]+120>>2];q[b+48>>2]=q[q[c+40>>2]+148>>2];f=q[q[c+40>>2]+156>>2];q[b+60>>2]=h;q[b+56>>2]=i;q[b+52>>2]=f;u[b+64>>2]=q[q[c+40>>2]+152>>2];f=q[c+40>>2];l=u[f+180>>2];m=u[f+188>>2];k=u[c+32>>2];p=u[f+184>>2];c=q[e+64>>2];f=q[e+68>>2];h=q[e+72>>2];i=q[e+76>>2];j=q[e+84>>2];q[b+120>>2]=q[e+80>>2];q[b+124>>2]=j;q[b+112>>2]=h;q[b+116>>2]=i;q[b+96>>2]=c;q[b+100>>2]=f;u[b+84>>2]=p*k;u[b+88>>2]=m*k;u[b+80>>2]=l*k;u[b+92>>2]=l!=x(0)?x(1):p!=x(0)?x(1):m!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](e,a);a=q[e+60>>2];b=q[e+56>>2];o[d+56|0]=b;o[d+57|0]=b>>>8;o[d+58|0]=b>>>16;o[d+59|0]=b>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[e+52>>2];b=q[e+48>>2];o[d+48|0]=b;o[d+49|0]=b>>>8;o[d+50|0]=b>>>16;o[d+51|0]=b>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[e+44>>2];b=q[e+40>>2];o[d+40|0]=b;o[d+41|0]=b>>>8;o[d+42|0]=b>>>16;o[d+43|0]=b>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[e+36>>2];b=q[e+32>>2];o[d+32|0]=b;o[d+33|0]=b>>>8;o[d+34|0]=b>>>16;o[d+35|0]=b>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[e+28>>2];b=q[e+24>>2];o[d+24|0]=b;o[d+25|0]=b>>>8;o[d+26|0]=b>>>16;o[d+27|0]=b>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[e+20>>2];b=q[e+16>>2];o[d+16|0]=b;o[d+17|0]=b>>>8;o[d+18|0]=b>>>16;o[d+19|0]=b>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[e+12>>2];b=q[e+8>>2];o[d+8|0]=b;o[d+9|0]=b>>>8;o[d+10|0]=b>>>16;o[d+11|0]=b>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[e+4>>2];b=q[e>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[e+88>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[g+88>>2]=0}ue=g+96|0}function Px(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=x(0),m=x(0),p=x(0),s=0;g=ue-96|0;ue=g;d=n[q[q[b>>2]+28>>2]](b)|0;e=n[q[q[a>>2]+168>>2]](a)|0;f=n[q[q[a>>2]+176>>2]](a)|0;e=(e|0)==1;h=e?-1082130432:1065353216;q[d+212>>2]=h;i=e?1065353216:0;q[d+208>>2]=i;q[g+88>>2]=0;e=g;q[e+76>>2]=0;q[e+80>>2]=0;q[e+84>>2]=0;q[e+68>>2]=0;q[e+72>>2]=0;q[e+64>>2]=1065353216;Jv(q[a+4>>2],e+88|0,e- -64|0);b=n[q[q[b>>2]+32>>2]](b)|0;j=q[c+40>>2];s=q[j+36>>2];f=(f|0)==1;q[b+20>>2]=f?-1082130432:1065353216;q[b+16>>2]=f?1065353216:0;q[b>>2]=s;u[b+32>>2]=r[j+112|0]?x(1):x(0);u[b+36>>2]=q[q[c+40>>2]+120>>2];q[b+48>>2]=q[q[c+40>>2]+148>>2];f=q[q[c+40>>2]+156>>2];q[b+60>>2]=h;q[b+56>>2]=i;q[b+52>>2]=f;u[b+64>>2]=q[q[c+40>>2]+152>>2];f=q[c+40>>2];l=u[f+180>>2];m=u[f+188>>2];k=u[c+32>>2];p=u[f+184>>2];c=q[e+64>>2];f=q[e+68>>2];h=q[e+72>>2];i=q[e+76>>2];j=q[e+84>>2];q[b+120>>2]=q[e+80>>2];q[b+124>>2]=j;q[b+112>>2]=h;q[b+116>>2]=i;q[b+96>>2]=c;q[b+100>>2]=f;u[b+84>>2]=p*k;u[b+88>>2]=m*k;u[b+80>>2]=l*k;u[b+92>>2]=l!=x(0)?x(1):p!=x(0)?x(1):m!=x(0)?x(1):x(0);n[q[q[a>>2]+84>>2]](e,a);a=q[e+60>>2];b=q[e+56>>2];o[d+56|0]=b;o[d+57|0]=b>>>8;o[d+58|0]=b>>>16;o[d+59|0]=b>>>24;o[d+60|0]=a;o[d+61|0]=a>>>8;o[d+62|0]=a>>>16;o[d+63|0]=a>>>24;a=q[e+52>>2];b=q[e+48>>2];o[d+48|0]=b;o[d+49|0]=b>>>8;o[d+50|0]=b>>>16;o[d+51|0]=b>>>24;o[d+52|0]=a;o[d+53|0]=a>>>8;o[d+54|0]=a>>>16;o[d+55|0]=a>>>24;a=q[e+44>>2];b=q[e+40>>2];o[d+40|0]=b;o[d+41|0]=b>>>8;o[d+42|0]=b>>>16;o[d+43|0]=b>>>24;o[d+44|0]=a;o[d+45|0]=a>>>8;o[d+46|0]=a>>>16;o[d+47|0]=a>>>24;a=q[e+36>>2];b=q[e+32>>2];o[d+32|0]=b;o[d+33|0]=b>>>8;o[d+34|0]=b>>>16;o[d+35|0]=b>>>24;o[d+36|0]=a;o[d+37|0]=a>>>8;o[d+38|0]=a>>>16;o[d+39|0]=a>>>24;a=q[e+28>>2];b=q[e+24>>2];o[d+24|0]=b;o[d+25|0]=b>>>8;o[d+26|0]=b>>>16;o[d+27|0]=b>>>24;o[d+28|0]=a;o[d+29|0]=a>>>8;o[d+30|0]=a>>>16;o[d+31|0]=a>>>24;a=q[e+20>>2];b=q[e+16>>2];o[d+16|0]=b;o[d+17|0]=b>>>8;o[d+18|0]=b>>>16;o[d+19|0]=b>>>24;o[d+20|0]=a;o[d+21|0]=a>>>8;o[d+22|0]=a>>>16;o[d+23|0]=a>>>24;a=q[e+12>>2];b=q[e+8>>2];o[d+8|0]=b;o[d+9|0]=b>>>8;o[d+10|0]=b>>>16;o[d+11|0]=b>>>24;o[d+12|0]=a;o[d+13|0]=a>>>8;o[d+14|0]=a>>>16;o[d+15|0]=a>>>24;a=q[e+4>>2];b=q[e>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;a=q[e+88>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[g+88>>2]=0}ue=g+96|0}function Wk(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-112|0;ue=d;c=q[a+4>>2];q[d+108>>2]=q[c- -64>>2];g=q[c+72>>2];f=q[c+68>>2];c=q[q[q[a+12>>2]+12>>2]+36>>2];q[d+16>>2]=2;a:{if(!(!jh(d+108|0,d+16|0)|(f|0)!=2|(g|0)!=2)){c=q[b+4>>2];q[a+48>>2]=q[b>>2];q[a+52>>2]=c;c=q[b+44>>2];q[a+88>>2]=q[b+40>>2];q[a+92>>2]=c;c=q[b+36>>2];q[a+80>>2]=q[b+32>>2];q[a+84>>2]=c;c=q[b+28>>2];q[a+72>>2]=q[b+24>>2];q[a+76>>2]=c;e=q[b+20>>2];c=a- -64|0;q[c>>2]=q[b+16>>2];q[c+4>>2]=e;c=q[b+12>>2];q[a+56>>2]=q[b+8>>2];q[a+60>>2]=c;break a}q[d+16>>2]=3;if(!(!jh(d+108|0,d+16|0)|(f|0)!=3|(g|0)!=3)){b=q[c+52>>2];q[a+48>>2]=q[c+48>>2];q[a+52>>2]=b;b=q[c+92>>2];q[a+88>>2]=q[c+88>>2];q[a+92>>2]=b;b=q[c+84>>2];q[a+80>>2]=q[c+80>>2];q[a+84>>2]=b;b=q[c+76>>2];q[a+72>>2]=q[c+72>>2];q[a+76>>2]=b;e=c- -64|0;f=q[e+4>>2];b=a- -64|0;q[b>>2]=q[e>>2];q[b+4>>2]=f;b=q[c+60>>2];q[a+56>>2]=q[c+56>>2];q[a+60>>2]=b;break a}q[d+16>>2]=1;e=jh(d+108|0,d+16|0);if((g|0)==1?!(!(e|q[d+108>>2]==5)|(f|0)!=1):0){break a}Ys(b,d+80|0,d+16|0,d- -64|0);q[d+12>>2]=2;b:{if(jh(d+108|0,d+12|0)){b=q[d+68>>2];q[a+144>>2]=q[d+64>>2];q[a+148>>2]=b;b=q[d+76>>2];q[a+152>>2]=q[d+72>>2];q[a+156>>2]=b;break b}q[d+12>>2]=3;if(jh(d+108|0,d+12|0)){b=q[c+148>>2];q[a+144>>2]=q[c+144>>2];q[a+148>>2]=b;b=q[c+156>>2];q[a+152>>2]=q[c+152>>2];q[a+156>>2]=b;break b}q[d+12>>2]=0;if(jh(d+108|0,d+12|0)){q[a+144>>2]=0;q[a+148>>2]=0;q[a+152>>2]=0;q[a+156>>2]=1065353216;break b}if(q[d+108>>2]!=4){break b}q[a+144>>2]=0;q[a+148>>2]=0;q[a+152>>2]=0;q[a+156>>2]=1065353216}e=a;h=a;b=d+16|0;c:{d:{if((f|0)==2){break d}b=c+96|0;if((f|0)==3){break d}if(f){break c}b=7280}f=q[b+4>>2];q[h+96>>2]=q[b>>2];q[e+100>>2]=f;e=q[b+44>>2];q[a+136>>2]=q[b+40>>2];q[a+140>>2]=e;e=q[b+36>>2];q[a+128>>2]=q[b+32>>2];q[a+132>>2]=e;e=q[b+28>>2];q[a+120>>2]=q[b+24>>2];q[a+124>>2]=e;e=q[b+20>>2];q[a+112>>2]=q[b+16>>2];q[a+116>>2]=e;e=q[b+12>>2];q[a+104>>2]=q[b+8>>2];q[a+108>>2]=e}if(g>>>0>3){break a}e:{switch(g-1|0){case 1:b=q[d+84>>2];q[a+160>>2]=q[d+80>>2];q[a+164>>2]=b;b=q[d+92>>2];q[a+168>>2]=q[d+88>>2];q[a+172>>2]=b;break a;case 2:b=q[c+164>>2];q[a+160>>2]=q[c+160>>2];q[a+164>>2]=b;b=q[c+172>>2];q[a+168>>2]=q[c+168>>2];q[a+172>>2]=b;break a;case 0:break a;default:break e}}q[a+160>>2]=1065353216;q[a+164>>2]=1065353216;q[a+168>>2]=1065353216;q[a+172>>2]=1065353216}ue=d+112|0}function oA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+192>>2];e=u[a+184>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+180>>2];i=x(g+u[a+188>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+56>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+60>>2]=s;o=d+l|0;u[o+60>>2]=s;u[o+56>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+60>>2]=s;u[o+56>>2]=g;k=d+C|0;u[k+60>>2]=s;u[k+56>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+180>>2];g=u[a+192>>2];e=u[a+184>>2];i=u[a+188>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+56>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+60>>2]=h;p=d+f|0;u[p+60>>2]=h;u[p+56>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+60>>2]=h;u[p+56>>2]=m;t=d+k|0;u[t+60>>2]=h;u[t+56>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+56>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+60>>2]=y;p=d+f|0;u[p+60>>2]=y;u[p+56>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+60>>2]=y;u[p+56>>2]=m;j=d+n|0;u[j+60>>2]=y;u[j+56>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+56>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+60>>2]=h;n=d+f|0;u[n+60>>2]=h;u[n+56>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+60>>2]=h;u[n+56>>2]=m;n=d+k|0;u[n+60>>2]=h;u[n+56>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function nA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+176>>2];e=u[a+168>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+164>>2];i=x(g+u[a+172>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+48>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+52>>2]=s;o=d+l|0;u[o+52>>2]=s;u[o+48>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+52>>2]=s;u[o+48>>2]=g;k=d+C|0;u[k+52>>2]=s;u[k+48>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+164>>2];g=u[a+176>>2];e=u[a+168>>2];i=u[a+172>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+48>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+52>>2]=h;p=d+f|0;u[p+52>>2]=h;u[p+48>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+52>>2]=h;u[p+48>>2]=m;t=d+k|0;u[t+52>>2]=h;u[t+48>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+48>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+52>>2]=y;p=d+f|0;u[p+52>>2]=y;u[p+48>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+52>>2]=y;u[p+48>>2]=m;j=d+n|0;u[j+52>>2]=y;u[j+48>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+48>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+52>>2]=h;n=d+f|0;u[n+52>>2]=h;u[n+48>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+52>>2]=h;u[n+48>>2]=m;n=d+k|0;u[n+52>>2]=h;u[n+48>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function mA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+160>>2];e=u[a+152>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+148>>2];i=x(g+u[a+156>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+40>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+44>>2]=s;o=d+l|0;u[o+44>>2]=s;u[o+40>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+44>>2]=s;u[o+40>>2]=g;k=d+C|0;u[k+44>>2]=s;u[k+40>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+148>>2];g=u[a+160>>2];e=u[a+152>>2];i=u[a+156>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+40>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+44>>2]=h;p=d+f|0;u[p+44>>2]=h;u[p+40>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+44>>2]=h;u[p+40>>2]=m;t=d+k|0;u[t+44>>2]=h;u[t+40>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+40>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+44>>2]=y;p=d+f|0;u[p+44>>2]=y;u[p+40>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+44>>2]=y;u[p+40>>2]=m;j=d+n|0;u[j+44>>2]=y;u[j+40>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+40>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+44>>2]=h;n=d+f|0;u[n+44>>2]=h;u[n+40>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+44>>2]=h;u[n+40>>2]=m;n=d+k|0;u[n+44>>2]=h;u[n+40>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function lA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+144>>2];e=u[a+136>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+132>>2];i=x(g+u[a+140>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+32>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+36>>2]=s;o=d+l|0;u[o+36>>2]=s;u[o+32>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+36>>2]=s;u[o+32>>2]=g;k=d+C|0;u[k+36>>2]=s;u[k+32>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+132>>2];g=u[a+144>>2];e=u[a+136>>2];i=u[a+140>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+32>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+36>>2]=h;p=d+f|0;u[p+36>>2]=h;u[p+32>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+36>>2]=h;u[p+32>>2]=m;t=d+k|0;u[t+36>>2]=h;u[t+32>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+32>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+36>>2]=y;p=d+f|0;u[p+36>>2]=y;u[p+32>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+36>>2]=y;u[p+32>>2]=m;j=d+n|0;u[j+36>>2]=y;u[j+32>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+32>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+36>>2]=h;n=d+f|0;u[n+36>>2]=h;u[n+32>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+36>>2]=h;u[n+32>>2]=m;n=d+k|0;u[n+36>>2]=h;u[n+32>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function kA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+128>>2];e=u[a+120>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+116>>2];i=x(g+u[a+124>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+24>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+28>>2]=s;o=d+l|0;u[o+28>>2]=s;u[o+24>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+28>>2]=s;u[o+24>>2]=g;k=d+C|0;u[k+28>>2]=s;u[k+24>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+116>>2];g=u[a+128>>2];e=u[a+120>>2];i=u[a+124>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+24>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+28>>2]=h;p=d+f|0;u[p+28>>2]=h;u[p+24>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+28>>2]=h;u[p+24>>2]=m;t=d+k|0;u[t+28>>2]=h;u[t+24>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+24>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+28>>2]=y;p=d+f|0;u[p+28>>2]=y;u[p+24>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+28>>2]=y;u[p+24>>2]=m;j=d+n|0;u[j+28>>2]=y;u[j+24>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+24>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+28>>2]=h;n=d+f|0;u[n+28>>2]=h;u[n+24>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+28>>2]=h;u[n+24>>2]=m;n=d+k|0;u[n+28>>2]=h;u[n+24>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function iA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+192>>2];e=u[a+184>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+180>>2];i=x(g+u[a+188>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+72>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+76>>2]=s;o=d+l|0;u[o+76>>2]=s;u[o+72>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+76>>2]=s;u[o+72>>2]=g;k=d+C|0;u[k+76>>2]=s;u[k+72>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+180>>2];g=u[a+192>>2];e=u[a+184>>2];i=u[a+188>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+72>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+76>>2]=h;p=d+f|0;u[p+76>>2]=h;u[p+72>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+76>>2]=h;u[p+72>>2]=m;t=d+k|0;u[t+76>>2]=h;u[t+72>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+72>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+76>>2]=y;p=d+f|0;u[p+76>>2]=y;u[p+72>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+76>>2]=y;u[p+72>>2]=m;j=d+n|0;u[j+76>>2]=y;u[j+72>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+72>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+76>>2]=h;n=d+f|0;u[n+76>>2]=h;u[n+72>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+76>>2]=h;u[n+72>>2]=m;n=d+k|0;u[n+76>>2]=h;u[n+72>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function hA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+176>>2];e=u[a+168>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+164>>2];i=x(g+u[a+172>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+64>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+68>>2]=s;o=d+l|0;u[o+68>>2]=s;u[o+64>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+68>>2]=s;u[o+64>>2]=g;k=d+C|0;u[k+68>>2]=s;u[k+64>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+164>>2];g=u[a+176>>2];e=u[a+168>>2];i=u[a+172>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+64>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+68>>2]=h;p=d+f|0;u[p+68>>2]=h;u[p+64>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+68>>2]=h;u[p+64>>2]=m;t=d+k|0;u[t+68>>2]=h;u[t+64>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+64>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+68>>2]=y;p=d+f|0;u[p+68>>2]=y;u[p+64>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+68>>2]=y;u[p+64>>2]=m;j=d+n|0;u[j+68>>2]=y;u[j+64>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+64>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+68>>2]=h;n=d+f|0;u[n+68>>2]=h;u[n+64>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+68>>2]=h;u[n+64>>2]=m;n=d+k|0;u[n+68>>2]=h;u[n+64>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function gA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+160>>2];e=u[a+152>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+148>>2];i=x(g+u[a+156>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+56>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+60>>2]=s;o=d+l|0;u[o+60>>2]=s;u[o+56>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+60>>2]=s;u[o+56>>2]=g;k=d+C|0;u[k+60>>2]=s;u[k+56>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+148>>2];g=u[a+160>>2];e=u[a+152>>2];i=u[a+156>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+56>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+60>>2]=h;p=d+f|0;u[p+60>>2]=h;u[p+56>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+60>>2]=h;u[p+56>>2]=m;t=d+k|0;u[t+60>>2]=h;u[t+56>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+56>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+60>>2]=y;p=d+f|0;u[p+60>>2]=y;u[p+56>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+60>>2]=y;u[p+56>>2]=m;j=d+n|0;u[j+60>>2]=y;u[j+56>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+56>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+60>>2]=h;n=d+f|0;u[n+60>>2]=h;u[n+56>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+60>>2]=h;u[n+56>>2]=m;n=d+k|0;u[n+60>>2]=h;u[n+56>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function fA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+144>>2];e=u[a+136>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+132>>2];i=x(g+u[a+140>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+48>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+52>>2]=s;o=d+l|0;u[o+52>>2]=s;u[o+48>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+52>>2]=s;u[o+48>>2]=g;k=d+C|0;u[k+52>>2]=s;u[k+48>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+132>>2];g=u[a+144>>2];e=u[a+136>>2];i=u[a+140>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+48>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+52>>2]=h;p=d+f|0;u[p+52>>2]=h;u[p+48>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+52>>2]=h;u[p+48>>2]=m;t=d+k|0;u[t+52>>2]=h;u[t+48>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+48>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+52>>2]=y;p=d+f|0;u[p+52>>2]=y;u[p+48>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+52>>2]=y;u[p+48>>2]=m;j=d+n|0;u[j+52>>2]=y;u[j+48>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+48>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+52>>2]=h;n=d+f|0;u[n+52>>2]=h;u[n+48>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+52>>2]=h;u[n+48>>2]=m;n=d+k|0;u[n+52>>2]=h;u[n+48>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function eA(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=x(0),n=0,o=0,p=0,r=0,s=x(0),t=0,v=x(0),y=x(0),z=0,A=0,B=0,C=0;a:{l=q[b+28>>2];d=q[l>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;r=q[a+24>>2];a=q[a+28>>2]-r|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){a=r+w(f,240)|0;m=u[a+128>>2];e=u[a+120>>2];l=q[c>>2];B=l<<2;C=w(l,3);A=l<<1;j=w(b,q[a+4>>2]);g=u[a+116>>2];i=x(g+u[a+124>>2]);v=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){u[d+40>>2]=g;k=a+j|0;s=x(e+x(m*x(x(k|0)/v)));u[d+44>>2]=s;o=d+l|0;u[o+44>>2]=s;u[o+40>>2]=i;o=d+A|0;s=x(e+x(m*x(x(k+1|0)/v)));u[o+44>>2]=s;u[o+40>>2]=g;k=d+C|0;u[k+44>>2]=s;u[k+40>>2]=i;d=d+B|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}f=f+1|0;if((z|0)!=(f|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;z=q[a+24>>2];a=q[a+28>>2]-z|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;B=a>>>0>1?a:1;b=q[b+16>>2];C=(b|0)>1?b:1;A=q[l+12>>2];v=x(w(b,A)|0);s=x(b|0);while(1){a=w(r,240)+z|0;m=u[a+116>>2];g=u[a+128>>2];e=u[a+120>>2];i=u[a+124>>2];b:{c:{if(r>>>0>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;n=w(b,q[a+4>>2]);g=x(x(e+x(g*u[l+16>>2]))-e);a=0;while(1){u[d+40>>2]=m;t=a+n|0;h=x(e+x(g*x(x(t|0)/v)));u[d+44>>2]=h;p=d+f|0;u[p+44>>2]=h;u[p+40>>2]=i;p=d+o|0;h=x(e+x(g*x(x(t+1|0)/v)));u[p+44>>2]=h;u[p+40>>2]=m;t=d+k|0;u[t+44>>2]=h;u[t+40>>2]=i;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}j=q[l+8>>2];k=q[a>>2]+(j^-1)|0;if(r>>>0>=k>>>0){if((b|0)<1){break b}i=x(m+i);f=q[c>>2];o=f<<2;n=w(f,3);t=f<<1;h=x(e+g);e=x(e+x(g*u[l+20>>2]));g=x(h-e);k=w(b,q[a+4>>2]-k|0);h=x(w(b,j)|0);a=0;while(1){u[d+40>>2]=m;j=a+k|0;y=x(e+x(g*x(x(j|0)/h)));u[d+44>>2]=y;p=d+f|0;u[p+44>>2]=y;u[p+40>>2]=i;p=d+t|0;y=x(e+x(g*x(x(j+1|0)/h)));u[p+44>>2]=y;u[p+40>>2]=m;j=d+n|0;u[j+44>>2]=y;u[j+40>>2]=i;d=d+o|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}i=x(m+i);f=q[c>>2];j=f<<2;k=w(f,3);o=f<<1;h=x(e+x(g*u[l+20>>2]));e=x(e+x(g*u[l+16>>2]));g=x(h-e);a=0;while(1){u[d+40>>2]=m;h=x(e+x(g*x(x(a|0)/s)));u[d+44>>2]=h;n=d+f|0;u[n+44>>2]=h;u[n+40>>2]=i;n=d+o|0;a=a+1|0;h=x(e+x(g*x(x(a|0)/s)));u[n+44>>2]=h;u[n+40>>2]=m;n=d+k|0;u[n+44>>2]=h;u[n+40>>2]=i;d=d+j|0;if((a|0)!=(C|0)){continue}break}}q[c+4>>2]=d}r=r+1|0;if((B|0)!=(r|0)){continue}break}}}function gh(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;a:{b:{d=b;g=q[b>>2];if(g){c=q[b+4>>2];if(!c){break b}while(1){d=c;c=q[c>>2];if(c){continue}break}}g=q[d+4>>2];if(g){break b}g=0;e=0;break a}q[g+8>>2]=q[d+8>>2];e=1}f=q[d+8>>2];c=q[f>>2];c:{if((c|0)==(d|0)){q[f>>2]=g;if((a|0)==(d|0)){c=0;a=g;break c}c=q[f+4>>2];break c}q[f+4>>2]=g}d:{e:{f:{h=!r[d+12|0];if((b|0)!=(d|0)){f=q[b+8>>2];q[d+8>>2]=f;q[f+((q[q[b+8>>2]>>2]!=(b|0))<<2)>>2]=d;f=q[b>>2];q[d>>2]=f;q[f+8>>2]=d;f=q[b+4>>2];q[d+4>>2]=f;if(f){q[f+8>>2]=d}o[d+12|0]=r[b+12|0];a=(a|0)==(b|0)?d:a}if(!(h|!a)){if(!e){while(1){b=r[c+12|0];g:{e=q[c+8>>2];if(q[e>>2]!=(c|0)){if(!b){o[c+12|0]=1;o[e+12|0]=0;d=q[e+4>>2];b=q[d>>2];q[e+4>>2]=b;if(b){q[b+8>>2]=e}q[d+8>>2]=q[e+8>>2];b=q[e+8>>2];q[(((e|0)!=q[b>>2])<<2)+b>>2]=d;q[d>>2]=e;q[e+8>>2]=d;b=q[c>>2];a=(b|0)==(a|0)?c:a;c=q[b+4>>2]}d=q[c>>2];if(!(r[d+12|0]?0:d)){b=q[c+4>>2];if(r[b+12|0]?0:b){break f}o[c+12|0]=0;c=q[c+8>>2];h:{if((c|0)==(a|0)){c=a;break h}if(r[c+12|0]){break g}}o[c+12|0]=1;return}b=q[c+4>>2];if(b){break f}break e}i:{if(b){b=c;break i}o[c+12|0]=1;o[e+12|0]=0;b=q[c+4>>2];q[e>>2]=b;if(b){q[b+8>>2]=e}q[c+8>>2]=q[e+8>>2];d=q[e+8>>2];j:{if((e|0)==q[d>>2]){q[d>>2]=c;b=q[e>>2];break j}q[d+4>>2]=c}q[c+4>>2]=e;q[e+8>>2]=c;a=(a|0)==(e|0)?c:a}d=q[b>>2];k:{if(!(!d|r[d+12|0])){c=b;break k}c=q[b+4>>2];if(!(r[c+12|0]?0:c)){o[b+12|0]=0;c=q[b+8>>2];if(r[c+12|0]?(c|0)!=(a|0):0){break g}o[c+12|0]=1;return}if(!(r[d+12|0]|!d)){c=b;break k}o[c+12|0]=1;o[b+12|0]=0;a=q[c>>2];q[b+4>>2]=a;if(a){q[a+8>>2]=b}q[c+8>>2]=q[b+8>>2];a=q[b+8>>2];q[((q[a>>2]!=(b|0))<<2)+a>>2]=c;q[c>>2]=b;q[b+8>>2]=c;d=b}a=c;c=q[c+8>>2];o[a+12|0]=r[c+12|0];o[c+12|0]=1;o[d+12|0]=1;b=q[c>>2];a=q[b+4>>2];q[c>>2]=a;if(a){q[a+8>>2]=c}q[b+8>>2]=q[c+8>>2];a=q[c+8>>2];q[(((c|0)!=q[a>>2])<<2)+a>>2]=b;q[b+4>>2]=c;q[c+8>>2]=b;return}b=q[c+8>>2];c=q[((q[b>>2]==(c|0))<<2)+b>>2];continue}}o[g+12|0]=1}return}if(r[b+12|0]){break e}d=c;break d}o[d+12|0]=1;o[c+12|0]=0;a=q[d+4>>2];q[c>>2]=a;if(a){q[a+8>>2]=c}q[d+8>>2]=q[c+8>>2];a=q[c+8>>2];q[((q[a>>2]!=(c|0))<<2)+a>>2]=d;q[d+4>>2]=c;q[c+8>>2]=d;b=c}c=q[d+8>>2];o[d+12|0]=r[c+12|0];o[c+12|0]=1;o[b+12|0]=1;b=q[c+4>>2];a=q[b>>2];q[c+4>>2]=a;if(a){q[a+8>>2]=c}q[b+8>>2]=q[c+8>>2];a=q[c+8>>2];q[(((c|0)!=q[a>>2])<<2)+a>>2]=b;q[b>>2]=c;q[c+8>>2]=b}function Cs(a,b,c,d,e,f,g,h){var i=0,j=x(0),k=0,l=0,m=x(0),o=x(0),p=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=0,A=0,B=x(0);i=ue-160|0;ue=i;l=q[a+48>>2];q[i+56>>2]=q[a+44>>2];q[i+60>>2]=l;z=q[a+56>>2];l=i- -64|0;q[l>>2]=q[a+52>>2];q[l+4>>2]=z;l=q[a+40>>2];q[i+48>>2]=q[a+36>>2];q[i+52>>2]=l;Js(i+120|0,c,d,e,f,a+12|0,i+48|0,g,h);l=q[a+72>>2];q[i+32>>2]=q[a+68>>2];q[i+36>>2]=l;l=q[a+80>>2];q[i+40>>2]=q[a+76>>2];q[i+44>>2]=l;l=q[a+64>>2];q[i+24>>2]=q[a+60>>2];q[i+28>>2]=l;Js(i+96|0,c,d,e,f,a+20|0,i+24|0,g,h);l=q[a+128>>2];if((l|0)>=1){while(1){A=(i+72|0)+(k<<2)|0,B=x(n[q[q[f>>2]+12>>2]](f)),u[A>>2]=B;k=k+1|0;if((l|0)!=(k|0)){continue}break}}m=u[(i+72|0)+(q[a+136>>2]<<2)>>2];s=u[(i+72|0)+(q[a+140>>2]<<2)>>2];t=u[(i+72|0)+(q[a+132>>2]<<2)>>2];j=u[i+136>>2];p=u[i+140>>2];v=u[i+124>>2];w=u[i+128>>2];o=u[i+132>>2];y=u[i+120>>2];q[b+12>>2]=1065353216;u[b>>2]=o+x(t*x(y-o));u[b+8>>2]=p+x(s*x(w-p));u[b+4>>2]=j+x(m*x(v-j));l=q[a+128>>2];if((l|0)>=1){k=0;while(1){A=(i+72|0)+(k<<2)|0,B=x(n[q[q[f>>2]+12>>2]](f)),u[A>>2]=B;k=k+1|0;if((l|0)!=(k|0)){continue}break}}m=u[(i+72|0)+(q[a+132>>2]<<2)>>2];s=u[(i+72|0)+(q[a+136>>2]<<2)>>2];t=u[(i+72|0)+(q[a+140>>2]<<2)>>2];j=u[i+112>>2];p=u[i+116>>2];o=u[i+108>>2];v=u[i+96>>2];w=u[i+100>>2];y=u[i+104>>2];q[b+44>>2]=1065353216;u[b+40>>2]=p+x(t*x(y-p));u[b+36>>2]=j+x(s*x(w-j));u[b+32>>2]=o+x(m*x(v-o));if(r[a+144|0]){k=q[a+96>>2];q[i+8>>2]=q[a+92>>2];q[i+12>>2]=k;k=q[a+104>>2];q[i+16>>2]=q[a+100>>2];q[i+20>>2]=k;k=q[a+88>>2];q[i>>2]=q[a+84>>2];q[i+4>>2]=k;Js(i+72|0,c,d,e,f,a+28|0,i,g,h);c=q[a+128>>2];if((c|0)>=1){k=0;while(1){A=(i+144|0)+(k<<2)|0,B=x(n[q[q[f>>2]+12>>2]](f)),u[A>>2]=B;k=k+1|0;if((c|0)!=(k|0)){continue}break}}m=u[(i+144|0)+(q[a+132>>2]<<2)>>2];s=u[(i+144|0)+(q[a+136>>2]<<2)>>2];t=u[(i+144|0)+(q[a+140>>2]<<2)>>2];j=u[i+88>>2];p=u[i+92>>2];o=u[i+84>>2];v=u[i+72>>2];w=u[i+76>>2];y=u[i+80>>2];q[b+28>>2]=1065353216;p=x(p+x(t*x(y-p)));u[b+24>>2]=p;j=x(j+x(s*x(w-j)));u[b+20>>2]=j;o=x(o+x(m*x(v-o)));u[b+16>>2]=o;m=x(o-u[b>>2]);s=x(m*m);m=x(j-u[b+4>>2]);s=x(s+x(m*m));m=x(p-u[b+8>>2]);m=x(E(x(s+x(m*m))));o=x(u[b+32>>2]-o);j=x(u[b+36>>2]-j);o=x(x(o*o)+x(j*j));j=x(u[b+40>>2]-p);j=x(m+x(E(x(o+x(j*j)))));u[b+48>>2]=j>x(9.999999974752427e-7)?x(m/j):x(0)}ue=i+160|0}function zl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;i=ue-16|0;ue=i;d=q[a>>2];e=(q[a+4>>2]-d|0)/288|0;c=e+1|0;a:{b:{if(c>>>0<14913081){d=(q[a+8>>2]-d|0)/288|0;g=d<<1;d=d>>>0<7456540?g>>>0>>0?c:g:14913080;c:{if(!d){break c}yt(i);h=n[q[i+8>>2]](i,w(d,288),16)|0;c=q[q[i+12>>2]+4>>2];if(!c){break c}n[c](q[i>>2])}c=w(e,288)+h|0;q[c>>2]=0;g=q[b>>2];d:{if(!g){break d}n[q[q[g>>2]>>2]](g)|0;g=q[c>>2];if(!g){break d}n[q[q[g>>2]+8>>2]](g)|0;q[c>>2]=0}f=w(d,288);q[c>>2]=q[b>>2];d=r[b+21|0]|r[b+22|0]<<8|(r[b+23|0]<<16|r[b+24|0]<<24);g=r[b+17|0]|r[b+18|0]<<8|(r[b+19|0]<<16|r[b+20|0]<<24);o[c+17|0]=g;o[c+18|0]=g>>>8;o[c+19|0]=g>>>16;o[c+20|0]=g>>>24;o[c+21|0]=d;o[c+22|0]=d>>>8;o[c+23|0]=d>>>16;o[c+24|0]=d>>>24;d=q[b+16>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=d;d=q[b+8>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=d;d=q[b+32>>2];q[c+28>>2]=q[b+28>>2];q[c+32>>2]=d;q[c+36>>2]=q[b+36>>2];d=q[b+40>>2];q[c+40>>2]=d;d=q[d>>2];if(d){m=c,p=n[d](q[b+28>>2])|0,q[m+28>>2]=p}k=f+h|0;kV((w(e,288)+h|0)+44|0,b+44|0,228);l=c+288|0;b=q[a+4>>2];h=q[a>>2];if((b|0)==(h|0)){break b}while(1){d=c+ -288|0;q[d>>2]=0;g=b+ -288|0;e=q[g>>2];e:{if(!e){break e}n[q[q[e>>2]>>2]](e)|0;e=q[d>>2];if(!e){break e}n[q[q[e>>2]+8>>2]](e)|0;q[d>>2]=0}q[d>>2]=q[g>>2];f=b+ -271|0;j=r[f+4|0]|r[f+5|0]<<8|(r[f+6|0]<<16|r[f+7|0]<<24);e=c+ -271|0;f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);o[e|0]=f;o[e+1|0]=f>>>8;o[e+2|0]=f>>>16;o[e+3|0]=f>>>24;o[e+4|0]=j;o[e+5|0]=j>>>8;o[e+6|0]=j>>>16;o[e+7|0]=j>>>24;f=b+ -276|0;j=q[f+4>>2];e=c+ -276|0;q[e>>2]=q[f>>2];q[e+4>>2]=j;f=b+ -284|0;j=q[f+4>>2];e=c+ -284|0;q[e>>2]=q[f>>2];q[e+4>>2]=j;j=b+ -260|0;f=q[j+4>>2];e=c+ -260|0;q[e>>2]=q[j>>2];q[e+4>>2]=f;q[c+ -252>>2]=q[b+ -252>>2];f=q[b+ -248>>2];q[c+ -248>>2]=f;f=q[f>>2];if(f){m=e,p=n[f](q[j>>2])|0,q[m>>2]=p}kV(c+ -244|0,b+ -244|0,228);c=d;b=g;if((h|0)!=(b|0)){continue}break}h=q[a+4>>2];b=q[a>>2];break a}kU();F()}b=h}q[a+4>>2]=l;q[a>>2]=c;c=q[a+8>>2];q[a+8>>2]=k;if((b|0)!=(h|0)){while(1){a=h+ -288|0;d=q[q[h+ -248>>2]+4>>2];if(d){n[d](q[h+ -260>>2])}h=q[a>>2];if(h){n[q[q[h>>2]+8>>2]](h)|0;q[a>>2]=0}h=a;if((a|0)!=(b|0)){continue}break}}f:{if(!b){break f}zt(i);n[q[i+8>>2]](i,b,c-b|0);a=q[q[i+12>>2]+4>>2];if(!a){break f}n[a](q[i>>2])}ue=i+16|0}function QN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;h=ue-32|0;ue=h;q[h+24>>2]=b;q[e>>2]=0;EH(h+8|0,d);i=FH(h+8|0);kL(h+8|0);a:{b:{c:{j=g+ -65|0;if(j>>>0>56){if((g|0)!=37){break c}RN(h+24|0,c,e,i);break b}d:{switch(j-1|0){default:KN(a,f+24|0,h+24|0,c,e,i);break b;case 0:case 32:case 38:MN(a,f+16|0,h+24|0,c,e,i);break b;case 33:b=n[q[q[a+8>>2]+12>>2]](a+8|0)|0;k=h,l=FN(a,q[h+24>>2],c,d,e,f,kM(b),kM(b)+uL(b)|0),q[k+24>>2]=l;break b;case 34:case 35:SN(f+12|0,h+24|0,c,e,i);break b;case 2:q[h+8>>2]=623865125;q[h+12>>2]=2032480100;k=h,l=FN(a,b,c,d,e,f,h+8|0,h+16|0),q[k+24>>2]=l;break b;case 4:q[h+8>>2]=623728933;q[h+12>>2]=1680158061;k=h,l=FN(a,b,c,d,e,f,h+8|0,h+16|0),q[k+24>>2]=l;break b;case 6:TN(f+8|0,h+24|0,c,e,i);break b;case 7:UN(f+8|0,h+24|0,c,e,i);break b;case 40:VN(f+28|0,h+24|0,c,e,i);break b;case 43:WN(f+16|0,h+24|0,c,e,i);break b;case 11:XN(f+4|0,h+24|0,c,e,i);break b;case 44:case 50:YN(h+24|0,c,e,i);break b;case 46:ZN(a,f+8|0,h+24|0,c,e,i);break b;case 48:g=r[355391]|r[355392]<<8|(r[355393]<<16|r[355394]<<24);o[h+15|0]=g;o[h+16|0]=g>>>8;o[h+17|0]=g>>>16;o[h+18|0]=g>>>24;g=r[355388]|r[355389]<<8|(r[355390]<<16|r[355391]<<24);q[h+8>>2]=r[355384]|r[355385]<<8|(r[355386]<<16|r[355387]<<24);q[h+12>>2]=g;k=h,l=FN(a,b,c,d,e,f,h+8|0,h+19|0),q[k+24>>2]=l;break b;case 16:o[h+12|0]=r[355399];q[h+8>>2]=r[355395]|r[355396]<<8|(r[355397]<<16|r[355398]<<24);k=h,l=FN(a,b,c,d,e,f,h+8|0,h+13|0),q[k+24>>2]=l;break b;case 17:_N(f,h+24|0,c,e,i);break b;case 18:q[h+8>>2]=624576549;q[h+12>>2]=1394948685;k=h,l=FN(a,b,c,d,e,f,h+8|0,h+16|0),q[k+24>>2]=l;break b;case 53:$N(f+24|0,h+24|0,c,e,i);break b;case 54:a=n[q[q[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 22:b=n[q[q[a+8>>2]+24>>2]](a+8|0)|0;k=h,l=FN(a,q[h+24>>2],c,d,e,f,kM(b),kM(b)+uL(b)|0),q[k+24>>2]=l;break b;case 55:ON(f+20|0,h+24|0,c,e,i);break b;case 1:case 3:case 5:case 8:case 9:case 10:case 12:case 13:case 14:case 15:case 19:case 20:case 21:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 36:case 37:case 39:case 41:case 42:case 45:case 47:case 49:case 51:case 52:break c;case 23:break d}}aO(f+20|0,h+24|0,c,e,i);break b}q[e>>2]=q[e>>2]|4}a=q[h+24>>2]}ue=h+32|0;return a|0}function ht(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);c=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);h=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);i=a+8|0;d=i;g=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);o[d|0]=g;o[d+1|0]=g>>>8;o[d+2|0]=g>>>16;o[d+3|0]=g>>>24;o[d+4|0]=h;o[d+5|0]=h>>>8;o[d+6|0]=h>>>16;o[d+7|0]=h>>>24;o[a|0]=f;o[a+1|0]=f>>>8;o[a+2|0]=f>>>16;o[a+3|0]=f>>>24;o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;f=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);c=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);d=r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24);h=a+24|0;e=h;g=r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24);o[e|0]=g;o[e+1|0]=g>>>8;o[e+2|0]=g>>>16;o[e+3|0]=g>>>24;o[e+4|0]=d;o[e+5|0]=d>>>8;o[e+6|0]=d>>>16;o[e+7|0]=d>>>24;o[a+16|0]=f;o[a+17|0]=f>>>8;o[a+18|0]=f>>>16;o[a+19|0]=f>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;f=r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24);c=r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24);d=r[b+44|0]|r[b+45|0]<<8|(r[b+46|0]<<16|r[b+47|0]<<24);g=r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24);o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24;o[a+44|0]=d;o[a+45|0]=d>>>8;o[a+46|0]=d>>>16;o[a+47|0]=d>>>24;o[a+32|0]=f;o[a+33|0]=f>>>8;o[a+34|0]=f>>>16;o[a+35|0]=f>>>24;o[a+36|0]=c;o[a+37|0]=c>>>8;o[a+38|0]=c>>>16;o[a+39|0]=c>>>24;f=r[b+48|0]|r[b+49|0]<<8|(r[b+50|0]<<16|r[b+51|0]<<24);c=r[b+52|0]|r[b+53|0]<<8|(r[b+54|0]<<16|r[b+55|0]<<24);d=r[b+60|0]|r[b+61|0]<<8|(r[b+62|0]<<16|r[b+63|0]<<24);g=a+56|0;e=g;b=r[b+56|0]|r[b+57|0]<<8|(r[b+58|0]<<16|r[b+59|0]<<24);o[e|0]=b;o[e+1|0]=b>>>8;o[e+2|0]=b>>>16;o[e+3|0]=b>>>24;o[e+4|0]=d;o[e+5|0]=d>>>8;o[e+6|0]=d>>>16;o[e+7|0]=d>>>24;o[a+48|0]=f;o[a+49|0]=f>>>8;o[a+50|0]=f>>>16;o[a+51|0]=f>>>24;o[a+52|0]=c;o[a+53|0]=c>>>8;o[a+54|0]=c>>>16;o[a+55|0]=c>>>24;b=q[a+16>>2];q[a+16>>2]=q[a+4>>2];q[a+4>>2]=b;b=q[a+32>>2];q[a+32>>2]=q[i>>2];q[i>>2]=b;b=q[a+48>>2];q[a+48>>2]=q[a+12>>2];q[a+12>>2]=b;c=a+36|0;b=q[c>>2];q[c>>2]=q[h>>2];q[h>>2]=b;c=q[e>>2];b=a+44|0;q[e>>2]=q[b>>2];q[b>>2]=c;b=a+52|0;c=q[b>>2];e=b;b=a+28|0;q[e>>2]=q[b>>2];q[b>>2]=c;return a}function cA(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=0,m=x(0),n=0,o=x(0),p=x(0),r=0,s=0,t=x(0),v=x(0),y=0,z=0,A=0;a:{h=q[b+28>>2];d=q[h>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;n=q[a+24>>2];a=q[a+28>>2]-n|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;s=a>>>0>1?a:1;b=q[b+16>>2];while(1){if((b|0)>=1){h=q[c>>2];z=h<<2;A=w(h,3);y=h<<1;a=n+w(e,240)|0;f=w(b,q[a+4>>2]);t=x(w(b,q[a>>2]+ -1|0)|0);a=0;while(1){q[d+32>>2]=0;g=a+f|0;o=x(x(x(g|0)/t)+x(0));u[d+36>>2]=o;j=d+h|0;u[j+36>>2]=o;q[j+32>>2]=1065353216;j=d+y|0;o=x(x(x(g+1|0)/t)+x(0));u[j+36>>2]=o;q[j+32>>2]=0;g=d+A|0;u[g+36>>2]=o;q[g+32>>2]=1065353216;d=d+z|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}q[c+4>>2]=d}e=e+1|0;if((s|0)!=(e|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;s=q[a+24>>2];a=q[a+28>>2]-s|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;z=a>>>0>1?a:1;b=q[b+16>>2];A=(b|0)>1?b:1;y=q[h+12>>2];t=x(w(b,y)|0);o=x(b|0);while(1){b:{c:{if(n>>>0>>0){if((b|0)<1){break b}m=x(u[h+16>>2]+x(0));e=q[c>>2];f=e<<2;g=w(e,3);j=e<<1;i=w(b,q[(w(n,240)+s|0)+4>>2]);a=0;while(1){q[d+32>>2]=0;r=a+i|0;k=x(x(m*x(x(r|0)/t))+x(0));u[d+36>>2]=k;l=d+e|0;u[l+36>>2]=k;q[l+32>>2]=1065353216;l=d+j|0;k=x(x(m*x(x(r+1|0)/t))+x(0));u[l+36>>2]=k;q[l+32>>2]=0;r=d+g|0;u[r+36>>2]=k;q[r+32>>2]=1065353216;d=d+f|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}a=w(n,240)+s|0;f=q[h+8>>2];g=q[a>>2]+(f^-1)|0;if(n>>>0>=g>>>0){if((b|0)<1){break b}m=x(u[h+20>>2]+x(0));k=x(x(1)-m);e=q[c>>2];j=e<<2;i=w(e,3);r=e<<1;g=w(b,q[a+4>>2]-g|0);p=x(w(b,f)|0);a=0;while(1){q[d+32>>2]=0;f=a+g|0;v=x(m+x(k*x(x(f|0)/p)));u[d+36>>2]=v;l=d+e|0;u[l+36>>2]=v;q[l+32>>2]=1065353216;l=d+r|0;v=x(m+x(k*x(x(f+1|0)/p)));u[l+36>>2]=v;q[l+32>>2]=0;f=d+i|0;u[f+36>>2]=v;q[f+32>>2]=1065353216;d=d+j|0;a=a+1|0;if((b|0)!=(a|0)){continue}break}break c}if((b|0)<1){break b}e=q[c>>2];f=e<<2;g=w(e,3);j=e<<1;m=x(u[h+16>>2]+x(0));k=x(x(u[h+20>>2]+x(0))-m);a=0;while(1){q[d+32>>2]=0;p=x(m+x(k*x(x(a|0)/o)));u[d+36>>2]=p;i=d+e|0;u[i+36>>2]=p;q[i+32>>2]=1065353216;i=d+j|0;a=a+1|0;p=x(m+x(k*x(x(a|0)/o)));u[i+36>>2]=p;q[i+32>>2]=0;i=d+g|0;u[i+36>>2]=p;q[i+32>>2]=1065353216;d=d+f|0;if((a|0)!=(A|0)){continue}break}}q[c+4>>2]=d}n=n+1|0;if((z|0)!=(n|0)){continue}break}}}function Oj(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=x(0),l=x(0),m=x(0),o=0,p=0,r=x(0);h=ue-160|0;ue=h;i=q[b>>2];a:{if(i>>>0>6){break a}b:{switch(i-1|0){default:j=b+8|0;nt(h+128|0,j);o=q[h+140>>2];i=a+8|0;q[i>>2]=q[h+136>>2];q[i+4>>2]=o;o=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=o;if(q[b+4>>2]<0){break a}Gs(h+128|0,d,e,f,c,b+4|0,nt(h+96|0,j),g+48|0,g+60|0);b=q[h+140>>2];q[i>>2]=q[h+136>>2];q[i+4>>2]=b;b=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=b;break a;case 0:i=q[b+56>>2];q[h+56>>2]=q[b+52>>2];q[h+60>>2]=i;i=q[b+64>>2];j=h- -64|0;q[j>>2]=q[b+60>>2];q[j+4>>2]=i;i=q[b+48>>2];q[h+48>>2]=q[b+44>>2];q[h+52>>2]=i;i=g+48|0;g=g+60|0;Js(h+128|0,d,e,f,c,b+20|0,h+48|0,i,g);j=q[b+80>>2];q[h+32>>2]=q[b+76>>2];q[h+36>>2]=j;j=q[b+88>>2];q[h+40>>2]=q[b+84>>2];q[h+44>>2]=j;j=q[b+72>>2];q[h+24>>2]=q[b+68>>2];q[h+28>>2]=j;Js(h+96|0,d,e,f,c,b+28|0,h+24|0,i,g);j=q[b+104>>2];q[h+8>>2]=q[b+100>>2];q[h+12>>2]=j;j=q[b+112>>2];q[h+16>>2]=q[b+108>>2];q[h+20>>2]=j;j=q[b+96>>2];q[h>>2]=q[b+92>>2];q[h+4>>2]=j;Js(h+72|0,d,e,f,c,b+36|0,h,i,g);k=x(n[q[q[c>>2]+16>>2]](c,u[h+140>>2],u[h+128>>2]));l=x(n[q[q[c>>2]+16>>2]](c,u[h+144>>2],u[h+132>>2]));m=x(n[q[q[c>>2]+16>>2]](c,u[h+148>>2],u[h+136>>2]));q[a+12>>2]=1065353216;u[a+8>>2]=m;u[a+4>>2]=l;u[a>>2]=k;k=x(n[q[q[c>>2]+16>>2]](c,u[h+108>>2],u[h+96>>2]));l=x(n[q[q[c>>2]+16>>2]](c,u[h+112>>2],u[h+100>>2]));m=x(n[q[q[c>>2]+16>>2]](c,u[h+116>>2],u[h+104>>2]));q[a+28>>2]=1065353216;u[a+24>>2]=m;u[a+20>>2]=l;u[a+16>>2]=k;k=x(n[q[q[c>>2]+16>>2]](c,u[h+84>>2],u[h+72>>2]));l=x(n[q[q[c>>2]+16>>2]](c,u[h+88>>2],u[h+76>>2]));m=x(n[q[q[c>>2]+16>>2]](c,u[h+92>>2],u[h+80>>2]));q[a+44>>2]=1065353216;u[a+40>>2]=m;u[a+36>>2]=l;u[a+32>>2]=k;break a;case 1:Cs(b+116|0,a,d,e,f,c,g+48|0,g+60|0);break a;case 2:p=a,r=x(n[q[q[c>>2]+16>>2]](c,u[b+280>>2],u[b+276>>2])),u[p>>2]=r;p=a,r=x(n[q[q[c>>2]+16>>2]](c,u[b+288>>2],u[b+284>>2])),u[p+4>>2]=r;p=a,r=x(n[q[q[c>>2]+16>>2]](c,u[b+296>>2],u[b+292>>2])),u[p+8>>2]=r;break a;case 3:ys(b+300|0,a,d,e,f,c);break a;case 4:tj(h+128|0,q[b+396>>2],c);b=q[h+140>>2];q[a+8>>2]=q[h+136>>2];q[a+12>>2]=b;b=q[h+132>>2];q[a>>2]=q[h+128>>2];q[a+4>>2]=b;break a;case 5:break b}}p=a,r=jj(q[b+400>>2]+4|0,c),u[p>>2]=r}ue=h+160|0}function $J(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=ue-48|0;ue=g;a:{if(c>>>0<=2){f=b+4|0;c=c<<2;i=q[c+350524>>2];l=q[c+350512>>2];while(1){c=q[b+4>>2];b:{if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break b}c=HJ(b)}if(FJ(c)){continue}break}e=c+ -43|0;c:{if(e>>>0>2){h=1;break c}h=1;if(!(e-1)){break c}h=(c|0)==45?-1:1;c=q[b+4>>2];if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break c}c=HJ(b)}e=0;d:{e:{while(1){if(o[e+350444|0]==(c|32)){f:{if(e>>>0>6){break f}c=q[b+4>>2];if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break f}c=HJ(b)}e=e+1|0;if((e|0)!=8){continue}break e}break}if((e|0)!=3){if((e|0)==8){break e}if(!d|e>>>0<4){break d}if((e|0)==8){break e}}b=q[b+104>>2];if(b){q[f>>2]=q[f>>2]+ -1}if(!d|e>>>0<4){break e}while(1){if(b){q[f>>2]=q[f>>2]+ -1}e=e+ -1|0;if(e>>>0>3){continue}break}}NJ(g,x(x(h|0)*x(H)));h=q[g+8>>2];i=q[g+12>>2];j=q[g>>2];k=q[g+4>>2];break a}g:{h:{i:{if(e){break i}e=0;while(1){if(o[e+350453|0]!=(c|32)){break i}j:{if(e>>>0>1){break j}c=q[b+4>>2];if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break j}c=HJ(b)}e=e+1|0;if((e|0)!=3){continue}break}break h}k:{l:{if(e>>>0>3){break l}switch(e-1|0){case 2:break h;case 0:case 1:break l;default:break k}}if(q[b+104>>2]){q[f>>2]=q[f>>2]+ -1}break g}m:{if((c|0)!=48){break m}e=q[b+4>>2];n:{if(e>>>0>2]){q[f>>2]=e+1;e=r[e|0];break n}e=HJ(b)}if((e&-33)==88){aK(g+16|0,b,l,i,h,d);h=q[g+24>>2];i=q[g+28>>2];j=q[g+16>>2];k=q[g+20>>2];break a}if(!q[b+104>>2]){break m}q[f>>2]=q[f>>2]+ -1}bK(g+32|0,b,c,l,i,h,d);h=q[g+40>>2];i=q[g+44>>2];j=q[g+32>>2];k=q[g+36>>2];break a}o:{c=q[b+4>>2];p:{if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break p}c=HJ(b)}if((c|0)==40){e=1;break o}h=0;i=2147450880;if(!q[b+104>>2]){break a}q[f>>2]=q[f>>2]+ -1;break a}while(1){q:{c=q[b+4>>2];r:{if(c>>>0>2]){q[f>>2]=c+1;c=r[c|0];break r}c=HJ(b)}if(!(c+ -48>>>0<10|c+ -65>>>0<26|(c|0)==95)){if(c+ -97>>>0>=26){break q}}e=e+1|0;continue}break}h=0;i=2147450880;if((c|0)==41){break a}c=q[b+104>>2];if(c){q[f>>2]=q[f>>2]+ -1}if(d){if(!e){break a}while(1){e=e+ -1|0;if(c){q[f>>2]=q[f>>2]+ -1}if(e){continue}break}break a}}q[91802]=28;GJ(b,0,0)}h=0;i=0}q[a>>2]=j;q[a+4>>2]=k;q[a+8>>2]=h;q[a+12>>2]=i;ue=g+48|0}function dk(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=x(0);f=ue+ -64|0;ue=f;g=q[c>>2];h=Bo(f+48|0,x(0),x(0),x(1),x(1));a:{b:{if(g>>>0>4){break b}c:{switch(g-1|0){default:Bo(a,x(0),x(0),x(1),x(1));break a;case 0:Bo(f+32|0,u[c+4>>2],u[c+8>>2],u[c+12>>2],u[c+16>>2]);b=q[f+44>>2];q[f+56>>2]=q[f+40>>2];q[f+60>>2]=b;b=q[f+36>>2];q[f+48>>2]=q[f+32>>2];q[f+52>>2]=b;break b;case 1:k=q[c+24>>2];e=x(q[b>>2]);b=q[c+20>>2];g=(b|0)>2147483;d=x((g?e:x(e+d))/(g?x(1):x(b|0)));d:{if(x(y(d))>2];i=b;e:{if(j>>>0>2){break e}g=w(k,q[c+28>>2]);f:{switch(j-1|0){default:i=(g|0)>(b|0)?b:g+ -1|0;break e;case 0:i=(b|0)%(g|0)|0;break e;case 1:break f}}i=b;b=(b|0)/(g|0)|0;j=i-w(b,g)|0;i=((b|0)%2|0)==1?g+(j^-1)|0:j}b=i;d=u[c+12>>2];b=(b|0)/(k|0)|0;e=u[c+16>>2];Bo(f+32|0,x(u[c+4>>2]+x(d*x(i-w(b,k)|0))),x(u[c+8>>2]+x(e*x(b|0))),d,e);b=q[f+44>>2];q[f+56>>2]=q[f+40>>2];q[f+60>>2]=b;b=q[f+36>>2];q[f+48>>2]=q[f+32>>2];q[f+52>>2]=b;break b;case 2:e=u[b+36>>2];i=f+32|0;l=u[b+4>>2];m=u[b+32>>2];if(x(y(d))>2]+x(e*d)),u[b+12>>2],u[b+16>>2]);b=q[f+44>>2];q[f+56>>2]=q[f+40>>2];q[f+60>>2]=b;b=q[f+36>>2];q[f+48>>2]=q[f+32>>2];q[f+52>>2]=b;break b;case 3:break c}}pj(f+32|0,q[c+4>>2],d,e);pj(f+16|0,q[c+8>>2],d,e);Bo(f,x(u[b+4>>2]+u[f+32>>2]),x(u[b+8>>2]+u[f+36>>2]),x(u[b+12>>2]+u[f+16>>2]),x(u[b+16>>2]+u[f+20>>2]));b=q[f+12>>2];q[f+56>>2]=q[f+8>>2];q[f+60>>2]=b;b=q[f+4>>2];q[f+48>>2]=q[f>>2];q[f+52>>2]=b}d=u[h>>2];if(!(d>2])>2]=d}if(!(d>x(4)^1|x(d+u[h+8>>2])>x(4)^1)){b=h;e=d;if(x(y(d))>2]=e-x(x(c|0)+x(-4))}d=u[h+4>>2];if(!(d>2])>2]=d}if(!(d>x(4)^1|x(d+u[h+12>>2])>x(4)^1)){e=d;if(x(y(d))>2]=e-x(x(b|0)+x(-4))}b=q[f+52>>2];q[a>>2]=q[f+48>>2];q[a+4>>2]=b;b=q[f+60>>2];q[a+8>>2]=q[f+56>>2];q[a+12>>2]=b}ue=f- -64|0}function gV(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;j=ue-128|0;ue=j;a:{b:{c:{if(!TJ(f,g,h,i,0,0,0,0)){break c}n=jV(f,g,h,i);v=e>>>16|0;m=v&32767;if((m|0)==32767){break c}if(n){break b}}QJ(j+16|0,b,c,d,e,f,g,h,i);b=q[j+16>>2];c=q[j+20>>2];d=q[j+24>>2];e=q[j+28>>2];ZJ(j,b,c,d,e,b,c,d,e);d=q[j+8>>2];e=q[j+12>>2];h=q[j>>2];i=q[j+4>>2];break a}o=e&65535|m<<16;k=o;l=d;p=i>>>16&32767;n=p<<16;i=n|i&65535;if((TJ(b,c,l,k,f,g,h,i)|0)<=0){if(TJ(b,c,l,k,f,g,h,i)){h=b;i=c;break a}QJ(j+112|0,b,c,d,e,0,0,0,0);d=q[j+120>>2];e=q[j+124>>2];h=q[j+112>>2];i=q[j+116>>2];break a}QJ(j+96|0,b,c,l,k,0,0,0,1081540608);QJ(j+80|0,f,g,h,i,0,0,0,1081540608);l=m?l:q[j+104>>2];w=p?h:q[j+88>>2];h=w;o=l-h|0;r=q[j+108>>2];n=(m?k:r)&65535|65536;x=q[j+92>>2];y=(p?i:x)&65535|65536;k=n-(y+(l>>>0>>0)|0)|0;i=m?c:q[j+100>>2];t=p?g:q[j+84>>2];g=t;h=m?b:q[j+96>>2];s=p?f:q[j+80>>2];f=(i|0)==(g|0)&h>>>0>>0|i>>>0>>0;k=k-(o>>>0>>0)|0;o=o-f|0;u=(k|0)>-1?1:(k|0)>=-1?o>>>0<=4294967295?0:1:0;f=h-s|0;g=i-((h>>>0>>0)+g|0)|0;m=m?m:(r>>>16|0)+ -120|0;r=p?p:(x>>>16|0)+ -120|0;if((m|0)>(r|0)){while(1){d:{if(u&1){if(!(f|o|(g|k))){QJ(j+32|0,b,c,d,e,0,0,0,0);d=q[j+40>>2];e=q[j+44>>2];h=q[j+32>>2];i=q[j+36>>2];break a}h=o;i=k<<1|h>>>31;o=h<<1;k=i;i=0;h=g>>>31|0;break d}k=0;o=i>>>31|0;f=h;g=i;h=l;i=n<<1|h>>>31;h=h<<1}l=h|o;h=w;o=l-h|0;n=i|k;k=n-((l>>>0>>0)+y|0)|0;i=g<<1|f>>>31;h=f<<1;f=(i|0)==(t|0)&h>>>0>>0|i>>>0>>0;k=k-(o>>>0>>0)|0;o=o-f|0;u=(k|0)>-1?1:(k|0)>=-1?o>>>0<=4294967295?0:1:0;f=h-s|0;g=i-((h>>>0>>0)+t|0)|0;m=m+ -1|0;if((m|0)>(r|0)){continue}break}m=r}e:{if(!u){break e}h=f;l=o;i=g;n=k;if(h|l|(i|k)){break e}QJ(j+48|0,b,c,d,e,0,0,0,0);d=q[j+56>>2];e=q[j+60>>2];h=q[j+48>>2];i=q[j+52>>2];break a}if((n|0)==65535&l>>>0<=4294967295|n>>>0<65535){while(1){d=i>>>31|0;m=m+ -1|0;k=i<<1|h>>>31;h=h<<1;i=k;n=n<<1|l>>>31;l=l<<1|d;b=n;n=b;if((b|0)==65536&l>>>0<0|b>>>0<65536){continue}break}}b=v&32768;if((m|0)<=0){QJ(j- -64|0,h,i,l,n&65535|(b|m+120)<<16,0,0,0,1065811968);d=q[j+72>>2];e=q[j+76>>2];h=q[j+64>>2];i=q[j+68>>2];break a}d=l;e=n&65535|(b|m)<<16}q[a>>2]=h;q[a+4>>2]=i;q[a+8>>2]=d;q[a+12>>2]=e;ue=j+128|0}function Kr(a){var b=0,c=0,d=0,e=x(0),f=0,g=0,h=0,i=0,j=0,k=x(0);f=ue-16|0;ue=f;c=q[a>>2];b=q[a+4>>2];q[f+8>>2]=0;q[f+12>>2]=1065353216;q[f>>2]=c;q[f+4>>2]=b;c=a+32|0;js(c,f);b=q[a+8>>2];d=q[a+12>>2];q[f+8>>2]=0;q[f+12>>2]=1065353216;q[f>>2]=b;q[f+4>>2]=d;js(c,f);b=q[a+16>>2];d=q[a+20>>2];q[f+8>>2]=0;q[f+12>>2]=1065353216;q[f>>2]=b;q[f+4>>2]=d;js(c,f);b=q[a+24>>2];d=q[a+28>>2];q[f+8>>2]=0;q[f+12>>2]=1065353216;q[f>>2]=b;q[f+4>>2]=d;js(c,f);ls(c);e=x(u[a+8>>2]-u[a>>2]);k=x(e*e);e=x(u[a+12>>2]-u[a+4>>2]);e=x(E(x(k+x(e*e))));j=a+116|0;a:{b:{c:{d:{c=q[a+120>>2];d=q[a+124>>2];e:{if(c>>>0>>0){u[c>>2]=e;b=c+4|0;q[a+120>>2]=b;break e}g=q[j>>2];h=c-g|0;c=h>>2;b=c+1|0;if(b>>>0>=1073741824){break d}i=c<<2;d=d-g|0;c=d>>1;b=d>>2>>>0<536870911?c>>>0>>0?b:c:1073741823;c=0;f:{if(!b){break f}if(b>>>0>=1073741824){break c}c=_S(b<<2)}i=i+c|0;u[i>>2]=e;d=c+(b<<2)|0;b=i+4|0;if((h|0)>=1){kV(c,g,h)}q[a+124>>2]=d;q[a+120>>2]=b;q[a+116>>2]=c;if(!g){break e}_U(g);d=q[a+124>>2];b=q[a+120>>2]}e=x(u[a+16>>2]-u[a+8>>2]);k=x(e*e);e=x(u[a+20>>2]-u[a+12>>2]);e=x(E(x(k+x(e*e))));g:{if(b>>>0>>0){u[b>>2]=e;b=b+4|0;q[a+120>>2]=b;break g}g=q[j>>2];h=b-g|0;c=h>>2;b=c+1|0;if(b>>>0>=1073741824){break d}i=c<<2;d=d-g|0;c=d>>1;b=d>>2>>>0<536870911?c>>>0>>0?b:c:1073741823;c=0;h:{if(!b){break h}if(b>>>0>=1073741824){break b}c=_S(b<<2)}i=i+c|0;u[i>>2]=e;d=c+(b<<2)|0;b=i+4|0;if((h|0)>=1){kV(c,g,h)}q[a+124>>2]=d;q[a+120>>2]=b;q[a+116>>2]=c;if(!g){break g}_U(g);d=q[a+124>>2];b=q[a+120>>2]}e=x(u[a+24>>2]-u[a+16>>2]);k=x(e*e);e=x(u[a+28>>2]-u[a+20>>2]);e=x(E(x(k+x(e*e))));i:{if(b>>>0>>0){u[b>>2]=e;b=b+4|0;q[a+120>>2]=b;break i}g=q[j>>2];j=b-g|0;h=j>>2;b=h+1|0;if(b>>>0>=1073741824){break d}d=d-g|0;i=d>>1;b=d>>2>>>0<536870911?i>>>0>>0?b:i:1073741823;c=0;j:{if(!b){break j}if(b>>>0>=1073741824){break a}c=_S(b<<2)}d=c+(h<<2)|0;u[d>>2]=e;h=c+(b<<2)|0;b=d+4|0;if((j|0)>=1){kV(c,g,j)}q[a+124>>2]=h;q[a+120>>2]=b;q[a+116>>2]=c;if(!g){break i}_U(g);b=q[a+120>>2]}q[a+128>>2]=0;d=q[a+116>>2];if((d|0)!=(b|0)){e=x(0);while(1){e=x(u[d>>2]+e);u[a+128>>2]=e;d=d+4|0;if((d|0)!=(b|0)){continue}break}}ue=f+16|0;return}kU();F()}Ue(6368);F()}Ue(6368);F()}Ue(6368);F()}function Dw(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;g=ue-16|0;ue=g;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;a:{if((n[q[q[b>>2]+80>>2]](b)|0)<1){break a}c=-1;while(1){d=n[q[q[b>>2]+64>>2]](b,f)|0;c=(c|0)>(d|0)?c:d;f=f+1|0;if((f|0)<(n[q[q[b>>2]+80>>2]](b)|0)){continue}break}d=c+1|0;c=q[a+4>>2];f=q[a>>2];e=(c-f|0)/12|0;if(d>>>0>e>>>0){Ew(a,d-e|0);break a}if(d>>>0>=e>>>0){break a}e=f+w(d,12)|0;if((e|0)!=(c|0)){while(1){d=c+ -12|0;b:{if(o[c+ -1|0]>-1){break b}c=q[c+ -4>>2];f=q[d>>2];xt(g);n[q[g+8>>2]](g,f,c&2147483647);c=q[q[g+12>>2]+4>>2];if(!c){break b}n[c](q[g>>2])}c=d;if((e|0)!=(c|0)){continue}break}}q[a+4>>2]=e}if((n[q[q[b>>2]+80>>2]](b)|0)>=1){f=0;while(1){i=n[q[q[b>>2]+72>>2]](b,f)|0;c=n[q[q[b>>2]+64>>2]](b,f)|0;e=sV(i);c:{d:{e:{d=q[a>>2]+w(c,12)|0;c=o[d+11|0];f:{if((c|0)<=-1){c=(q[d+8>>2]&2147483647)+ -1|0;h=q[d>>2];if(c>>>0>=e>>>0){break d}h=q[d+4>>2];break f}if(e>>>0<=10){break e}h=c&255;c=10}Fw(d,c,e-c|0,h,h,e,i);break c}h=d}c=h;if(e){mV(c,i,e)}o[c+e|0]=0;if(o[d+11|0]<=-1){q[d+4>>2]=e;break c}o[d+11|0]=e}f=f+1|0;if((f|0)<(n[q[q[b>>2]+80>>2]](b)|0)){continue}break}}c=q[a+4>>2];g:{if(c>>>0>2]){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;wt(g);b=n[q[g+8>>2]](g,16)|0;d=q[q[g+12>>2]+4>>2];if(d){n[d](q[g>>2])}q[c>>2]=b;q[c+4>>2]=14;q[c+8>>2]=-2147483632;c=r[28298]|r[28299]<<8|(r[28300]<<16|r[28301]<<24);d=r[28294]|r[28295]<<8|(r[28296]<<16|r[28297]<<24);o[b+6|0]=d;o[b+7|0]=d>>>8;o[b+8|0]=d>>>16;o[b+9|0]=d>>>24;o[b+10|0]=c;o[b+11|0]=c>>>8;o[b+12|0]=c>>>16;o[b+13|0]=c>>>24;c=r[28292]|r[28293]<<8|(r[28294]<<16|r[28295]<<24);d=r[28288]|r[28289]<<8|(r[28290]<<16|r[28291]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b+14|0]=0;b=q[a+4>>2]+12|0;q[a+4>>2]=b;break g}Gw(a,28288);b=q[a+4>>2]}h:{if(b>>>0>2]){e=b+8|0;q[e>>2]=0;q[b>>2]=0;q[b+4>>2]=0;o[b+11|0]=9;c=r[28307]|r[28308]<<8|(r[28309]<<16|r[28310]<<24);d=r[28303]|r[28304]<<8|(r[28305]<<16|r[28306]<<24);o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[e|0]=r[28311];o[b+9|0]=0;q[a+4>>2]=q[a+4>>2]+12;break h}Gw(a,28303)}ue=g+16|0}function ti(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;g=ue-144|0;ue=g;n[q[q[e>>2]+52>>2]](g+136|0,e);k=q[g+136>>2];if(k){h=a+3552|0;a:{if(q[a+2472>>2]+ -1>>>0<=1){e=q[b+548>>2];q[g+132>>2]=e;i=q[b+324>>2];q[g+128>>2]=i;q[g+68>>2]=e;q[g+64>>2]=i;Oe(g+136|0,g+68|0,g- -64|0);e=q[g+136>>2];break a}e=q[b+548>>2]}q[h>>2]=e;h=Gj(b);j=q[h+4>>2];i=a+3504|0;q[i>>2]=q[h>>2];q[i+4>>2]=j;j=q[h+44>>2];i=a+3544|0;q[i>>2]=q[h+40>>2];q[i+4>>2]=j;j=q[h+36>>2];i=a+3536|0;q[i>>2]=q[h+32>>2];q[i+4>>2]=j;j=q[h+28>>2];i=a+3528|0;q[i>>2]=q[h+24>>2];q[i+4>>2]=j;j=q[h+20>>2];i=a+3520|0;q[i>>2]=q[h+16>>2];q[i+4>>2]=j;j=q[h+12>>2];i=a+3512|0;q[i>>2]=q[h+8>>2];q[i+4>>2]=j;h=e;b:{if(!c){break b}if(q[a+2472>>2]+ -1>>>0<=1){h=q[c+548>>2];q[g+124>>2]=h;c=q[c+324>>2];q[g+120>>2]=c;q[g+60>>2]=h;q[g+56>>2]=c;Oe(g+136|0,g+60|0,g+56|0);h=q[g+136>>2];break b}h=q[c+548>>2]}c:{if(q[a+3776>>2]!=1){c=e;i=h;break c}q[g+116>>2]=e;i=a+3780|0;c=q[i>>2];q[g+112>>2]=c;q[g+52>>2]=e;q[g+48>>2]=c;Oe(g+136|0,g+52|0,g+48|0);q[g+108>>2]=e;c=q[g+136>>2];j=a+3784|0;l=q[j>>2];q[g+104>>2]=l;q[g+44>>2]=e;q[g+40>>2]=l;Oe(g+136|0,g+44|0,g+40|0);q[g+100>>2]=h;e=q[g+136>>2];i=q[i>>2];q[g+96>>2]=i;q[g+36>>2]=h;q[g+32>>2]=i;Oe(g+136|0,g+36|0,g+32|0);q[g+92>>2]=h;i=q[g+136>>2];j=q[j>>2];q[g+88>>2]=j;q[g+28>>2]=h;q[g+24>>2]=j;Oe(g+136|0,g+28|0,g+24|0);h=q[g+136>>2]}q[a+3568>>2]=h;q[a+3564>>2]=i;q[a+3560>>2]=e;q[a+3556>>2]=c;if(r[q[q[b+152>>2]+20>>2]+208|0]){q[g+84>>2]=q[a+3556>>2];c=q[q[b+152>>2]+20>>2];c=r[c+209|0]|r[c+210|0]<<8|(r[c+211|0]<<16|r[c+212|0]<<24);q[g+80>>2]=c;q[g+20>>2]=q[g+84>>2];q[g+16>>2]=c;Oe(g+136|0,g+20|0,g+16|0);q[a+3556>>2]=q[g+136>>2];q[g+76>>2]=q[a+3560>>2];b=q[q[b+152>>2]+20>>2];b=r[b+209|0]|r[b+210|0]<<8|(r[b+211|0]<<16|r[b+212|0]<<24);q[g+72>>2]=b;q[g+12>>2]=q[g+76>>2];q[g+8>>2]=b;Oe(g+136|0,g+12|0,g+8|0);q[a+3560>>2]=q[g+136>>2]}b=a+3488|0;c=q[a+3788>>2];d:{if(c>>>0>1){break d}if(c-1){c=a+3572|0;q[c>>2]=-1090519040;q[c+4>>2]=1056964608;break d}e=a+3792|0;h=q[e+4>>2];c=a+3572|0;q[c>>2]=q[e>>2];q[c+4>>2]=h}q[a+3492>>2]=d;n[q[q[k>>2]+24>>2]](k,a+3436|0,b,f);n[q[q[k>>2]+8>>2]](k)|0}ue=g+144|0}function Ei(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0);c=ue+ -64|0;ue=c;d=b+168|0;e=q[a+3460>>2];a:{if(e>>>0>2){break a}b:{switch(e-1|0){default:q[b+544>>2]=q[a+3464>>2];break a;case 0:k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3468>>2],u[a+3464>>2])),u[k+544>>2]=l;break a;case 1:break b}}e=b+548|0;k=e,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3512>>2],u[a+3508>>2])),u[k>>2]=l;k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3520>>2],u[a+3516>>2])),u[k+556>>2]=l;q[b+544>>2]=q[e>>2]}e=q[a+3568>>2];c:{if(e>>>0>2){break c}d:{switch(e-1|0){default:q[b+564>>2]=q[a+3572>>2];break c;case 0:k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3576>>2],u[a+3572>>2])),u[k+564>>2]=l;break c;case 1:break d}}e=b+568|0;k=e,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3620>>2],u[a+3616>>2])),u[k>>2]=l;k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3628>>2],u[a+3624>>2])),u[k+576>>2]=l;q[b+564>>2]=q[e>>2]}Fi(a+3676|0,b+592|0,d);Fi(a+3728|0,b+656|0,d);e=q[a+3780>>2];e:{if(e>>>0>2){break e}f:{switch(e-1|0){default:q[b+720>>2]=q[a+3784>>2];break e;case 0:k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3788>>2],u[a+3784>>2])),u[k+720>>2]=l;break e;case 1:break f}}e=b+724|0;k=e,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3832>>2],u[a+3828>>2])),u[k>>2]=l;k=b,l=x(n[q[q[b+168>>2]+16>>2]](d,u[a+3840>>2],u[a+3836>>2])),u[k+732>>2]=l;q[b+720>>2]=q[e>>2]}e=b+748|0;f=a+3888|0;gi(e,d,f);g=b+772|0;h=a+3932|0;gi(g,d,h);i=b+796|0;j=d;d=a+3976|0;gi(i,j,d);hi(c+60|0,e,f,u[b+828>>2],u[b+824>>2]);q[b+744>>2]=q[c+60>>2];hi(c+60|0,g,h,u[b+828>>2],u[b+824>>2]);q[b+768>>2]=q[c+60>>2];hi(c+60|0,i,d,u[b+828>>2],u[b+824>>2]);d=q[c+60>>2];q[b+792>>2]=d;g:{if(q[a+2472>>2]+ -1>>>0<=1){a=q[b+744>>2];q[c+56>>2]=a;d=q[b+324>>2];q[c+52>>2]=d;q[c+32>>2]=a;q[c+28>>2]=d;Oe(c+60|0,c+32|0,c+28|0);q[b+740>>2]=q[c+60>>2];a=q[b+768>>2];q[c+48>>2]=a;d=q[b+324>>2];q[c+44>>2]=d;q[c+24>>2]=a;q[c+20>>2]=d;Oe(c+60|0,c+24|0,c+20|0);q[b+764>>2]=q[c+60>>2];a=q[b+792>>2];q[c+40>>2]=a;d=q[b+324>>2];q[c+36>>2]=d;q[c+16>>2]=a;q[c+12>>2]=d;Oe(c+60|0,c+16|0,c+12|0);q[b+788>>2]=q[c+60>>2];a=q[b+764>>2];break g}q[b+788>>2]=d;q[b+740>>2]=q[b+744>>2];a=q[b+768>>2];q[b+764>>2]=a}q[b+320>>2]=a;ue=c- -64|0} + + + +function SA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;e=ue-944|0;ue=e;q[a+12>>2]=0;f=w(q[b+12>>2],c+ -1|0);a:{if((f|0)<1){break a}q[e+112>>2]=0;q[e+104>>2]=0;q[e+108>>2]=1065353216;q[e+96>>2]=0;q[e+100>>2]=0;o[e+92|0]=0;lV(e+808|0,0,115);q[e+924>>2]=-1;q[e+928>>2]=-1;q[e+52>>2]=0;q[e+56>>2]=0;q[e+60>>2]=0;o[e+16|0]=0;q[e+12>>2]=1065353216;o[e+10|0]=0;q[e+932>>2]=0;q[e+936>>2]=0;q[e+800>>2]=0;q[e+804>>2]=0;q[e+380>>2]=0;q[e+116>>2]=0;q[e+120>>2]=0;q[e+88>>2]=1065353216;q[e+80>>2]=0;q[e+84>>2]=0;c=q[b+28>>2];g=q[c+44>>2];q[e+24>>2]=2;q[e+20>>2]=g;o[e+8|0]=r[b+8|0];o[e+9|0]=r[b+9|0];g=q[c+116>>2];h=q[c+120>>2];i=q[c+124>>2];j=q[c+128>>2];k=q[c+132>>2];l=q[c+136>>2];m=r[c+112|0];p=q[c+144>>2];q[e+56>>2]=q[c+140>>2];q[e+60>>2]=p;q[e+48>>2]=k;q[e+52>>2]=l;q[e+40>>2]=i;q[e+44>>2]=j;q[e+32>>2]=g;q[e+36>>2]=h;q[e+28>>2]=m;q[e+64>>2]=q[c+148>>2];q[e+68>>2]=q[c+152>>2];q[e+72>>2]=q[c+156>>2];q[e+76>>2]=q[c+160>>2];q[e+80>>2]=q[c+164>>2];o[e+84|0]=r[c+168|0];o[e+85|0]=r[c+169|0];o[e+86|0]=r[c+170|0];o[e+87|0]=r[c+171|0];q[e+88>>2]=q[c+172>>2];o[e+92|0]=r[c+176|0];q[e+108>>2]=q[b+20>>2];g=q[c>>2];o[e+10|0]=(g|0)==6;c=q[c+36>>2];q[e+116>>2]=g;q[e+12>>2]=c;c=q[b+52>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=f<<3;f=q[e+932>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+932>>2]=0}f=q[b+52>>2];q[e+936>>2]=d;q[e+932>>2]=f;q[e+112>>2]=q[b>>2];tz(e+8|0,q[a+8>>2],q[b+4>>2],q[b+28>>2]);q[a+152>>2]=q[e+800>>2];q[a+156>>2]=q[e+804>>2];uz(q[q[a+8>>2]+72>>2],e+8|0,c,a+148|0,a+20|0);q[a+144>>2]=c;a=q[e+932>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+932>>2]=0}a=q[e+852>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+852>>2]=0}a=q[e+848>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+848>>2]=0}a=q[e+844>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+844>>2]=0}a=q[e+840>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+840>>2]=0}a=q[e+836>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+836>>2]=0}a=q[e+832>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+832>>2]=0}a=q[e+828>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+828>>2]=0}a=q[e+824>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+824>>2]=0}a=q[e+816>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[e+816>>2]=0}ue=e+944|0}function vz(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;h=1;a:{if(q[a+800>>2]!=q[b+800>>2]|q[a+804>>2]!=q[b+804>>2]|(q[a+808>>2]!=q[b+808>>2]|r[a+913|0]!=r[b+913|0])){break a}if(r[a+914|0]!=r[b+914|0]|q[a+916>>2]!=q[b+916>>2]){break a}c=q[a+812>>2];if((c|0)!=q[b+812>>2]){break a}b:{if((c|0)<=0){break b}while(1){f=d<<2;e=f+a|0;f=b+f|0;if(q[e+816>>2]!=q[f+816>>2]|q[e+848>>2]!=q[f+848>>2]){break a}if(q[e+880>>2]==q[f+880>>2]){d=d+1|0;if((c|0)==(d|0)){break b}continue}break}return 1}if(r[a|0]!=r[b|0]|r[a+1|0]!=r[b+1|0]|(r[a+2|0]!=r[b+2|0]|u[a+4>>2]!=u[b+4>>2])){break a}if(q[a+12>>2]!=q[b+12>>2]|q[a+16>>2]!=q[b+16>>2]|(q[a+20>>2]!=q[b+20>>2]|q[a+24>>2]!=q[b+24>>2])){break a}if(q[a+28>>2]!=q[b+28>>2]|q[a+32>>2]!=q[b+32>>2]|(q[a+36>>2]!=q[b+36>>2]|u[a+40>>2]!=u[b+40>>2])){break a}if(u[a+44>>2]!=u[b+44>>2]|u[a+48>>2]!=u[b+48>>2]|(u[a+52>>2]!=u[b+52>>2]|u[a+56>>2]!=u[b+56>>2])){break a}if(q[a+60>>2]!=q[b+60>>2]|u[a+64>>2]!=u[b+64>>2]|(u[a+68>>2]!=u[b+68>>2]|u[a+72>>2]!=u[b+72>>2])){break a}if(r[a+76|0]!=r[b+76|0]|r[a+77|0]!=r[b+77|0]|(r[a+78|0]!=r[b+78|0]|r[a+79|0]!=r[b+79|0])){break a}if(r[a+84|0]!=r[b+84|0]|u[a+80>>2]!=u[b+80>>2]|(u[a+88>>2]!=u[b+88>>2]|u[a+92>>2]!=u[b+92>>2])){break a}if(u[a+96>>2]!=u[b+96>>2]|u[a+100>>2]!=u[b+100>>2]|(q[a+108>>2]!=q[b+108>>2]|u[a+104>>2]!=u[b+104>>2])){break a}f=q[a+112>>2];if((f|0)!=q[b+112>>2]|r[a+8|0]!=r[b+8|0]){break a}d=0;c:{if((f|0)<=0){break c}while(1){e=d<<4;c=e+a|0;e=b+e|0;if(u[c+116>>2]!=u[e+116>>2]|u[c+120>>2]!=u[e+120>>2]|u[c+124>>2]!=u[e+124>>2]){break a}if(u[c+128>>2]==u[e+128>>2]){d=d+1|0;if((f|0)==(d|0)){break c}continue}break}return 1}e=q[a+372>>2];if((e|0)!=q[b+372>>2]){break a}if((e|0)>=1){while(1){c=w(g,208);d=(c+b|0)+376|0;c=a+c|0;f=c+584|0;c=c+376|0;while(1){if(u[c>>2]!=u[d>>2]|u[c+4>>2]!=u[d+4>>2]|(u[c+8>>2]!=u[d+8>>2]|u[c+12>>2]!=u[d+12>>2])){break a}d=d+16|0;c=c+16|0;if((f|0)!=(c|0)){continue}break}g=g+1|0;if((e|0)!=(g|0)){continue}break}}if(q[a+792>>2]!=q[b+792>>2]){return 1}d=q[b+924>>2];c=q[a+924>>2];d:{if(!c){if(!d){break d}break a}if(!d){return 1}if(!n[q[q[c>>2]+20>>2]](c,d)){break a}}h=q[a+928>>2]!=q[b+928>>2]}return h}function tn(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=x(0),m=x(0),p=0,r=0,s=0,t=0;h=ue-16|0;ue=h;if((c|0)>=1){s=a+384|0;t=a+144|0;j=a+468|0;f=q[a+464>>2];while(1){g=t;if((f|0)!=(j|0)){while(1){k=x(0);e=f;l=u[e+240>>2];m=u[b+4>>2];if(!!(l>=m)){k=m>x(0)?m:l;u[e+240>>2]=l-k}Ek(q[e+72>>2],k);d=q[e+4>>2];a:{if(!d){f=q[e+8>>2];if((e|0)==q[f>>2]){break a}e=e+8|0;while(1){d=q[e>>2];e=d+8|0;f=q[d+8>>2];if((d|0)!=q[f>>2]){continue}break}break a}while(1){f=d;d=q[d>>2];if(d){continue}break}}if((f|0)!=(j|0)){continue}break}}while(1){b:{c:{e=q[a+12>>2];p=(q[a+16>>2]-e|0)/148|0;if(p>>>0<=1){i=q[g+4>>2];d=q[g>>2];break c}f=1;i=q[g+4>>2];d=q[g>>2];if(i-d>>2>>>0<=3){break c}while(1){q[h+12>>2]=5140;q[h+8>>2]=196;d=_S(16);q[d+12>>2]=p;q[d+8>>2]=f;q[d+4>>2]=g;q[d>>2]=a;q[h>>2]=d;Pp(w(f,148)+e|0,h);e=q[q[h+12>>2]+4>>2];if(e){n[e](q[h>>2])}f=f+1|0;i=q[a+16>>2];e=q[a+12>>2];if(f>>>0<(i-e|0)/148>>>0){continue}break}d=0;f=q[g>>2];if((f|0)!=q[g+4>>2]){while(1){jk(q[(d<<2)+f>>2]);d=d+p|0;f=q[g>>2];if(d>>>0>2]-f>>2>>>0){continue}break}i=q[a+16>>2];e=q[a+12>>2]}d=1;if((i-e|0)/148>>>0<=1){break b}while(1){Qp(w(d,148)+e|0);d=d+1|0;e=q[a+12>>2];if(d>>>0<(q[a+16>>2]-e|0)/148>>>0){continue}break}break b}if((d|0)==(i|0)){break b}while(1){jk(q[d>>2]);d=d+4|0;if((i|0)!=(d|0)){continue}break}}d=q[g>>2];e=q[g+4>>2];if((d|0)!=(e|0)){while(1){kk(q[d>>2]);d=d+4|0;if((e|0)!=(d|0)){continue}break}}g=g+12|0;if((s|0)!=(g|0)){continue}break}e=q[a+464>>2];f=j;d:{if((e|0)==(f|0)){break d}while(1){f=e;pl(a,e- -64|0);d=q[e+4>>2];e:{if(!d){e=q[f+8>>2];if((f|0)==q[e>>2]){break e}f=f+8|0;while(1){d=q[f>>2];f=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break e}while(1){e=d;d=q[d>>2];if(d){continue}break}}if((e|0)!=(j|0)){continue}break}f=q[a+464>>2];e=f;if((j|0)==(e|0)){break d}while(1){g=e;o[e+88|0]=1;d=q[e+4>>2];f:{if(!d){e=q[g+8>>2];if((g|0)==q[e>>2]){break f}g=g+8|0;while(1){d=q[g>>2];g=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break f}while(1){e=d;d=q[d>>2];if(d){continue}break}}if((e|0)!=(j|0)){continue}break}}r=r+1|0;if((r|0)!=(c|0)){continue}break}}ue=h+16|0}function oz(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0;f=ue-944|0;ue=f;q[f+112>>2]=0;q[f+104>>2]=0;q[f+108>>2]=1065353216;q[f+96>>2]=0;q[f+100>>2]=0;o[f+92|0]=0;lV(f+808|0,0,115);q[f+924>>2]=-1;q[f+928>>2]=-1;q[f+932>>2]=0;q[f+936>>2]=0;q[f+800>>2]=0;q[f+804>>2]=0;q[f+380>>2]=0;q[f+116>>2]=0;q[f+120>>2]=0;q[f+88>>2]=1065353216;q[f+80>>2]=0;q[f+84>>2]=0;o[f+16|0]=0;q[f+12>>2]=1065353216;o[f+10|0]=0;q[f+20>>2]=1;q[f+24>>2]=2;o[f+8|0]=r[d+8|0];o[f+9|0]=r[d+9|0];g=q[d+32>>2];h=q[g+116>>2];i=q[g+120>>2];j=q[g+124>>2];k=q[g+128>>2];l=q[g+132>>2];m=q[g+136>>2];p=r[g+112|0];s=q[g+144>>2];q[f+56>>2]=q[g+140>>2];q[f+60>>2]=s;q[f+48>>2]=l;q[f+52>>2]=m;q[f+40>>2]=j;q[f+44>>2]=k;q[f+32>>2]=h;q[f+36>>2]=i;q[f+28>>2]=p;q[f+64>>2]=q[g+148>>2];q[f+68>>2]=q[g+152>>2];q[f+72>>2]=q[g+156>>2];q[f+76>>2]=q[g+160>>2];q[f+80>>2]=q[g+164>>2];o[f+84|0]=r[g+168|0];o[f+85|0]=r[g+169|0];o[f+86|0]=r[g+170|0];o[f+87|0]=r[g+171|0];q[f+88>>2]=q[g+172>>2];o[f+92|0]=r[g+176|0];q[f+108>>2]=q[d+20>>2];h=q[g>>2];o[f+10|0]=(h|0)==6;g=q[g+36>>2];q[f+116>>2]=h;q[f+12>>2]=g;g=q[d+40>>2];if(g){n[q[q[g>>2]>>2]](g)|0}g=q[f+932>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[f+932>>2]=0}g=q[d+40>>2];q[f+936>>2]=e;q[f+932>>2]=g;q[f+112>>2]=q[d>>2];tz(f+8|0,q[a+8>>2],q[d+4>>2],q[d+32>>2]);q[a+44>>2]=q[f+800>>2];q[a+48>>2]=q[f+804>>2];d=q[a+8>>2];d=n[q[q[d>>2]+64>>2]](d)|0;c=(d|0)<(c|0)?d:c;q[a+40>>2]=c;c=c<<2;q[a+32>>2]=c;uz(q[b+72>>2],f+8|0,c,a+36|0,a+16|0);q[a+12>>2]=0;q[a+24>>2]=q[a+20>>2];a=q[f+932>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+932>>2]=0}a=q[f+852>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+852>>2]=0}a=q[f+848>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+848>>2]=0}a=q[f+844>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+844>>2]=0}a=q[f+840>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+840>>2]=0}a=q[f+836>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+836>>2]=0}a=q[f+832>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+832>>2]=0}a=q[f+828>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+828>>2]=0}a=q[f+824>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+824>>2]=0}a=q[f+816>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+816>>2]=0}ue=f+944|0}function Vz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;e=ue-944|0;ue=e;q[a+12>>2]=0;f=w(q[b+16>>2],c+ -1|0);a:{if((f|0)<1){break a}q[e+112>>2]=0;q[e+104>>2]=0;q[e+108>>2]=1065353216;q[e+96>>2]=0;q[e+100>>2]=0;o[e+92|0]=0;lV(e+808|0,0,115);q[e+924>>2]=-1;q[e+928>>2]=-1;q[e+932>>2]=0;q[e+936>>2]=0;q[e+800>>2]=0;q[e+804>>2]=0;q[e+380>>2]=0;q[e+116>>2]=0;q[e+120>>2]=0;q[e+88>>2]=1065353216;q[e+80>>2]=0;q[e+84>>2]=0;o[e+16|0]=0;q[e+12>>2]=1065353216;o[e+10|0]=0;q[e+20>>2]=1;q[e+24>>2]=2;o[e+8|0]=r[b+8|0];o[e+9|0]=r[b+9|0];c=q[b+24>>2];g=q[c+116>>2];h=q[c+120>>2];i=q[c+124>>2];j=q[c+128>>2];k=q[c+132>>2];l=q[c+136>>2];m=r[c+112|0];p=q[c+144>>2];q[e+56>>2]=q[c+140>>2];q[e+60>>2]=p;q[e+48>>2]=k;q[e+52>>2]=l;q[e+40>>2]=i;q[e+44>>2]=j;q[e+32>>2]=g;q[e+36>>2]=h;q[e+28>>2]=m;q[e+64>>2]=q[c+148>>2];q[e+68>>2]=q[c+152>>2];q[e+72>>2]=q[c+156>>2];q[e+76>>2]=q[c+160>>2];q[e+80>>2]=q[c+164>>2];o[e+84|0]=r[c+168|0];o[e+85|0]=r[c+169|0];o[e+86|0]=r[c+170|0];o[e+87|0]=r[c+171|0];q[e+88>>2]=q[c+172>>2];o[e+92|0]=r[c+176|0];q[e+108>>2]=q[b+12>>2];g=q[c>>2];o[e+10|0]=(g|0)==6;c=q[c+36>>2];q[e+116>>2]=g;q[e+12>>2]=c;c=q[b+36>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=f<<2;f=q[e+932>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+932>>2]=0}f=q[b+36>>2];q[e+936>>2]=d;q[e+932>>2]=f;q[e+112>>2]=q[b>>2];tz(e+8|0,q[a+8>>2],q[b+4>>2],q[b+24>>2]);q[a+212>>2]=q[e+800>>2];q[a+216>>2]=q[e+804>>2];uz(q[q[a+8>>2]+72>>2],e+8|0,c,a+208|0,a+20|0);q[a+204>>2]=c;a=q[e+932>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+932>>2]=0}a=q[e+852>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+852>>2]=0}a=q[e+848>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+848>>2]=0}a=q[e+844>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+844>>2]=0}a=q[e+840>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+840>>2]=0}a=q[e+836>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+836>>2]=0}a=q[e+832>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+832>>2]=0}a=q[e+828>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+828>>2]=0}a=q[e+824>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e+824>>2]=0}a=q[e+816>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[e+816>>2]=0}ue=e+944|0}function ql(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ue-32|0;ue=e;a:{b:{c:{b=q[a+16>>2];d:{if(b>>>0>=1024){q[a+16>>2]=b+ -1024;b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];e:{if((d|0)!=(b|0)){break e}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break e}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break c}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break e}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}c=q[a+8>>2];d=c-q[a+4>>2]>>2;f=q[a+12>>2];b=f-q[a>>2]|0;if(d>>>0>2>>>0){if((c|0)!=(f|0)){k=e,l=_S(4096),q[k+8>>2]=l;$n(a,e+8|0);break d}k=e,l=_S(4096),q[k+8>>2]=l;ao(a,e+8|0);b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];f:{if((d|0)!=(b|0)){break f}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break f}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break b}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break f}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}q[e+24>>2]=a+12;q[e+20>>2]=0;b=b?b>>1:1;if(b>>>0>=1073741824){break a}c=b<<2;b=_S(c);q[e+8>>2]=b;d=b+(d<<2)|0;q[e+16>>2]=d;q[e+20>>2]=b+c;q[e+12>>2]=d;k=e,l=_S(4096),q[k+4>>2]=l;$n(e+8|0,e+4|0);c=q[a+8>>2];b=q[a+4>>2];if((c|0)!=(b|0)){while(1){c=c+ -4|0;ao(e+8|0,c);b=q[a+4>>2];if((b|0)!=(c|0)){continue}break}c=q[a+8>>2]}d=q[a>>2];q[a>>2]=q[e+8>>2];q[e+8>>2]=d;q[a+4>>2]=q[e+12>>2];q[e+12>>2]=b;q[a+8>>2]=q[e+16>>2];q[e+16>>2]=c;f=q[a+12>>2];q[a+12>>2]=q[e+20>>2];q[e+20>>2]=f;if((b|0)!=(c|0)){q[e+16>>2]=(((c-b|0)+ -4>>>2^-1)<<2)+c}if(!d){break d}_U(d)}ue=e+32|0;return}Ue(4913);F()}Ue(4913);F()}Ue(4913);F()}function Fu(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ue-32|0;ue=e;a:{b:{c:{b=q[a+16>>2];d:{if(b>>>0>=28){q[a+16>>2]=b+ -28;b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];e:{if((d|0)!=(b|0)){break e}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break e}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break c}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break e}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}c=q[a+8>>2];d=c-q[a+4>>2]>>2;f=q[a+12>>2];b=f-q[a>>2]|0;if(d>>>0>2>>>0){if((c|0)!=(f|0)){k=e,l=_S(4032),q[k+8>>2]=l;Iu(a,e+8|0);break d}k=e,l=_S(4032),q[k+8>>2]=l;Ju(a,e+8|0);b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];f:{if((d|0)!=(b|0)){break f}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break f}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break b}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break f}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}q[e+24>>2]=a+12;q[e+20>>2]=0;b=b?b>>1:1;if(b>>>0>=1073741824){break a}c=b<<2;b=_S(c);q[e+8>>2]=b;d=b+(d<<2)|0;q[e+16>>2]=d;q[e+20>>2]=b+c;q[e+12>>2]=d;k=e,l=_S(4032),q[k+4>>2]=l;Iu(e+8|0,e+4|0);c=q[a+8>>2];b=q[a+4>>2];if((c|0)!=(b|0)){while(1){c=c+ -4|0;Ju(e+8|0,c);b=q[a+4>>2];if((b|0)!=(c|0)){continue}break}c=q[a+8>>2]}d=q[a>>2];q[a>>2]=q[e+8>>2];q[e+8>>2]=d;q[a+4>>2]=q[e+12>>2];q[e+12>>2]=b;q[a+8>>2]=q[e+16>>2];q[e+16>>2]=c;f=q[a+12>>2];q[a+12>>2]=q[e+20>>2];q[e+20>>2]=f;if((b|0)!=(c|0)){q[e+16>>2]=(((c-b|0)+ -4>>>2^-1)<<2)+c}if(!d){break d}_U(d)}ue=e+32|0;return}Ue(27048);F()}Ue(27048);F()}Ue(27048);F()}function Xn(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ue-32|0;ue=e;a:{b:{c:{b=q[a+16>>2];d:{if(b>>>0>=93){q[a+16>>2]=b+ -93;b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];e:{if((d|0)!=(b|0)){break e}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break e}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break c}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break e}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}c=q[a+8>>2];d=c-q[a+4>>2]>>2;f=q[a+12>>2];b=f-q[a>>2]|0;if(d>>>0>2>>>0){if((c|0)!=(f|0)){k=e,l=_S(4092),q[k+8>>2]=l;$n(a,e+8|0);break d}k=e,l=_S(4092),q[k+8>>2]=l;ao(a,e+8|0);b=q[a+4>>2];i=q[b>>2];c=b+4|0;q[a+4>>2]=c;d=q[a+8>>2];b=q[a+12>>2];f:{if((d|0)!=(b|0)){break f}g=q[a>>2];if(c>>>0>g>>>0){d=d-c|0;h=d>>2;g=((c-g>>2)+1|0)/-2<<2;f=g+c|0;b=a;if(d){mV(f,c,d);c=q[a+4>>2]}q[b+4>>2]=c+g;d=f+(h<<2)|0;q[a+8>>2]=d;break f}b=b-g|0;b=b?b>>1:1;if(b>>>0>=1073741824){break b}f=b<<2;h=_S(f);j=f+h|0;f=h+(b&-4)|0;b=f;if((c|0)!=(d|0)){b=f;while(1){q[b>>2]=q[c>>2];b=b+4|0;c=c+4|0;if((d|0)!=(c|0)){continue}break}g=q[a>>2]}q[a+12>>2]=j;q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h;if(!g){d=b;break f}_U(g);d=q[a+8>>2]}q[d>>2]=i;q[a+8>>2]=q[a+8>>2]+4;break d}q[e+24>>2]=a+12;q[e+20>>2]=0;b=b?b>>1:1;if(b>>>0>=1073741824){break a}c=b<<2;b=_S(c);q[e+8>>2]=b;d=b+(d<<2)|0;q[e+16>>2]=d;q[e+20>>2]=b+c;q[e+12>>2]=d;k=e,l=_S(4092),q[k+4>>2]=l;$n(e+8|0,e+4|0);c=q[a+8>>2];b=q[a+4>>2];if((c|0)!=(b|0)){while(1){c=c+ -4|0;ao(e+8|0,c);b=q[a+4>>2];if((b|0)!=(c|0)){continue}break}c=q[a+8>>2]}d=q[a>>2];q[a>>2]=q[e+8>>2];q[e+8>>2]=d;q[a+4>>2]=q[e+12>>2];q[e+12>>2]=b;q[a+8>>2]=q[e+16>>2];q[e+16>>2]=c;f=q[a+12>>2];q[a+12>>2]=q[e+20>>2];q[e+20>>2]=f;if((b|0)!=(c|0)){q[e+16>>2]=(((c-b|0)+ -4>>>2^-1)<<2)+c}if(!d){break d}_U(d)}ue=e+32|0;return}Ue(4913);F()}Ue(4913);F()}Ue(4913);F()}function Ps(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;d=q[b>>2];d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=d;e=q[b>>2];q[b>>2]=e+4;a:{b:{if(d>>>0>6){break b}c:{switch(d-1|0){default:g=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);f=e+8|0;q[b>>2]=f;d=a+8|0;kV((c|0)>13?a+4|0:d,f,g);q[b>>2]=g+q[b>>2];if(q[a+4>>2]>-1|u[d>>2]!=x(0)|(u[a+12>>2]!=x(0)|u[a+16>>2]!=x(0))){break b}q[a>>2]=2147483646;return;case 0:f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);d=e+8|0;q[b>>2]=d;kV((c|0)>13?a+20|0:a+44|0,d,f);break a;case 1:f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);d=e+8|0;q[b>>2]=d;vh(a+116|0,d,f,c);break a;case 2:d=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);c=e+8|0;q[b>>2]=c;kV(a+280|0,c,d);q[b>>2]=d+q[b>>2];return;case 3:q[b>>2]=e+8;f=r[e+28|0]|r[e+29|0]<<8|(r[e+30|0]<<16|r[e+31|0]<<24);d=r[e+24|0]|r[e+25|0]<<8|(r[e+26|0]<<16|r[e+27|0]<<24);o[a+344|0]=d;o[a+345|0]=d>>>8;o[a+346|0]=d>>>16;o[a+347|0]=d>>>24;o[a+348|0]=f;o[a+349|0]=f>>>8;o[a+350|0]=f>>>16;o[a+351|0]=f>>>24;f=r[e+20|0]|r[e+21|0]<<8|(r[e+22|0]<<16|r[e+23|0]<<24);d=r[e+16|0]|r[e+17|0]<<8|(r[e+18|0]<<16|r[e+19|0]<<24);o[a+336|0]=d;o[a+337|0]=d>>>8;o[a+338|0]=d>>>16;o[a+339|0]=d>>>24;o[a+340|0]=f;o[a+341|0]=f>>>8;o[a+342|0]=f>>>16;o[a+343|0]=f>>>24;f=r[e+12|0]|r[e+13|0]<<8|(r[e+14|0]<<16|r[e+15|0]<<24);d=r[e+8|0]|r[e+9|0]<<8|(r[e+10|0]<<16|r[e+11|0]<<24);o[a+328|0]=d;o[a+329|0]=d>>>8;o[a+330|0]=d>>>16;o[a+331|0]=d>>>24;o[a+332|0]=f;o[a+333|0]=f>>>8;o[a+334|0]=f>>>16;o[a+335|0]=f>>>24;g=q[b>>2];d=g+24|0;q[b>>2]=d;f=a+352|0;d:{if((c|0)>=1608){a=r[g+24|0]|r[g+25|0]<<8|(r[g+26|0]<<16|r[g+27|0]<<24);d=g+28|0;q[b>>2]=d;wh(f,d,a,c);break d}a=28;wh(f,d,28,c)}q[b>>2]=q[b>>2]+a;return;case 4:q[b>>2]=e+8;f=_S(136);d=lV(f,0,136);gj(d+4|0,x(0));gj(d+48|0,x(0));gj(d+92|0,x(0));g=q[a+276>>2];q[a+276>>2]=d;d=b;if(g){f=q[g+112>>2];if(f){q[g+116>>2]=f;_U(f)}f=q[g+68>>2];if(f){q[g+72>>2]=f;_U(f)}f=q[g+24>>2];if(f){q[g+28>>2]=f;_U(f)}_U(g);f=q[a+276>>2]}h=d,i=rj(f,q[b>>2],c)+q[b>>2]|0,q[h>>2]=i;return;case 5:break c}}q[b>>2]=e+8}return}q[b>>2]=f+q[b>>2]}function Uz(a,b,c,d){var e=0,f=0,g=0,h=0;a:{if(!q[a+20>>2]){break a}h=q[c>>2];if((h|0)<2){break a}e=q[q[q[q[a+8>>2]+72>>2]+36>>2]+ -148>>2]+ -1|0;if(e>>>0<=5){b:{switch(e-1|0){case 4:g=q[c+4>>2];c:{if(g){e=q[a+28>>2];break c}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break c}q[a+28>>2]=f;e=f}f=h+ -1|0;d:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break d}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}Yz(a,b,d);return;case 2:g=q[c+4>>2];e:{if(g){e=q[a+28>>2];break e}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break e}q[a+28>>2]=f;e=f}f=h+ -1|0;f:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break f}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}Zz(a,b,d);return;case 3:g=q[c+4>>2];g:{if(g){e=q[a+28>>2];break g}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break g}q[a+28>>2]=f;e=f}f=h+ -1|0;h:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break h}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}Zz(a,b,d);return;case 1:g=q[c+4>>2];i:{if(g){e=q[a+28>>2];break i}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break i}q[a+28>>2]=f;e=f}f=h+ -1|0;j:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break j}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}_z(a,b,d);return;default:g=q[c+4>>2];k:{if(g){e=q[a+28>>2];break k}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break k}q[a+28>>2]=f;e=f}f=h+ -1|0;l:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break l}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}$z(a,b,d);return;case 0:break b}}g=q[c+4>>2];m:{if(g){e=q[a+28>>2];break m}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break m}q[a+28>>2]=f;e=f}f=h+ -1|0;n:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break n}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}$z(a,b,d);return}g=q[c+4>>2];o:{if(g){e=q[a+28>>2];break o}Wz(a+24|0,h);e=q[a+28>>2];f=q[a+24>>2];if((e|0)==(f|0)){break o}q[a+28>>2]=f;e=f}f=h+ -1|0;p:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break p}Xz(a+24|0,c)}if((f|0)!=(g|0)){break a}aA(a,b,d)}}function Lr(a,b){var c=0,d=0,e=0,f=0;e=ue-16|0;ue=e;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;a:{c=q[b+4>>2]-q[b>>2]|0;b:{if(!c){break b}d=c>>4;if(d>>>0>=268435456){break a}yt(e);c=n[q[e+8>>2]](e,c,16)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+(d<<4);f=q[b>>2];d=q[b+4>>2]-f|0;if((d|0)<1){break b}kV(c,f,d);q[a+4>>2]=d+q[a+4>>2]}q[a+12>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;c=q[b+16>>2]-q[b+12>>2]|0;c:{if(!c){break c}d=c>>4;if(d>>>0>=268435456){break a}yt(e);c=n[q[e+8>>2]](e,c,16)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+12>>2]=c;q[a+16>>2]=c;q[a+20>>2]=c+(d<<4);f=q[b+12>>2];d=q[b+16>>2]-f|0;if((d|0)<1){break c}kV(c,f,d);q[a+16>>2]=d+q[a+16>>2]}q[a+24>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;c=q[b+28>>2]-q[b+24>>2]|0;d:{if(!c){break d}d=c>>4;if(d>>>0>=268435456){break a}yt(e);c=n[q[e+8>>2]](e,c,16)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+24>>2]=c;q[a+28>>2]=c;q[a+32>>2]=c+(d<<4);f=q[b+24>>2];d=q[b+28>>2]-f|0;if((d|0)<1){break d}kV(c,f,d);q[a+28>>2]=d+q[a+28>>2]}q[a+36>>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;c=q[b+40>>2]-q[b+36>>2]|0;e:{if(!c){break e}d=c>>4;if(d>>>0>=268435456){break a}yt(e);c=n[q[e+8>>2]](e,c,16)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+36>>2]=c;q[a+40>>2]=c;q[a+44>>2]=c+(d<<4);f=q[b+36>>2];d=q[b+40>>2]-f|0;if((d|0)<1){break e}kV(c,f,d);q[a+40>>2]=d+q[a+40>>2]}q[a+48>>2]=0;q[a+52>>2]=0;q[a+56>>2]=0;c=q[b+52>>2]-q[b+48>>2]|0;f:{if(!c){break f}d=c>>4;if(d>>>0>=268435456){break a}yt(e);c=n[q[e+8>>2]](e,c,16)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+48>>2]=c;q[a+52>>2]=c;q[a+56>>2]=c+(d<<4);f=q[b+48>>2];d=q[b+52>>2]-f|0;if((d|0)<1){break f}kV(c,f,d);q[a+52>>2]=d+q[a+52>>2]}$r(a+60|0,b+60|0);q[a+80>>2]=0;q[a+72>>2]=0;q[a+76>>2]=0;c=q[b+76>>2]-q[b+72>>2]|0;g:{if(!c){break g}d=c>>2;if(d>>>0>=1073741824){break a}wt(e);c=n[q[e+8>>2]](e,c)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+72>>2]=c;q[a+76>>2]=c;q[a+80>>2]=c+(d<<2);d=q[b+72>>2];b=q[b+76>>2]-d|0;if((b|0)<1){break g}kV(c,d,b);q[a+76>>2]=b+q[a+76>>2]}ue=e+16|0;return a}kU();F()}function Wj(a,b,c,d){var f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,r=0,s=x(0),t=x(0),w=x(0),y=0,z=0;g=ue+ -64|0;ue=g;a:{b:{c:{d:{if(c!=x(0)){break d}i=q[b+24>>2];if((i|0)==q[b+28>>2]){break d}l=+d;zp(a,x(v[i>>3]*l),x(v[i+8>>3]*l),x(v[i+16>>3]*l));break c}y=q[b+52>>2];n=q[b+20>>2];q[g+56>>2]=0;q[g+48>>2]=0;q[g+52>>2]=0;e:{f:{g:{h:{if(n){if(n>>>0>=536870912){break h}i=n<<3;f=_S(i);q[g+48>>2]=f;j=i+f|0;q[g+56>>2]=j;lV(f,0,i);q[g+52>>2]=j}q[g+40>>2]=0;q[g+32>>2]=0;q[g+36>>2]=0;j=q[b+40>>2];f=q[b+44>>2]-j|0;if(!f){l=v[j+ -8>>3]+1;f=0;i=0;break f}m=f>>3;if(m>>>0>=536870912){break g}i=_S(f);q[g+32>>2]=i;q[g+36>>2]=i;o=m<<3;m=o+i|0;q[g+40>>2]=m;i:{if((f|0)<1){f=i;break i}f=kV(i,j,f)+f|0;q[g+36>>2]=f}l=v[(j+o|0)+ -8>>3]+1;if(f>>>0>=m>>>0){break f}v[f>>3]=l;j=f+8|0;q[g+36>>2]=j;break e}kU();F()}kU();F()}o=f-i|0;p=o>>3;j=p+1|0;if(j>>>0>=536870912){break b}m=m-i|0;f=m>>2;j=m>>3>>>0<268435455?f>>>0>>0?j:f:536870911;f=0;j:{if(!j){break j}if(j>>>0>=536870912){break a}f=_S(j<<3)}m=f+(p<<3)|0;v[m>>3]=l;p=f+(j<<3)|0;j=m+8|0;if((o|0)>=1){kV(f,i,o)}q[g+40>>2]=p;q[g+36>>2]=j;q[g+32>>2]=f;if(!i){break e}_U(i);n=q[b+20>>2]}if((n|0)>=1){z=+x(x(v[j+ -8>>3]+ -1)*c);l=0;i=0;while(1){r=v[(q[b+24>>2]+(i<<5)|0)+24>>3]*hk(b,g+32|0,i,y,z);v[q[g+48>>2]+(i<<3)>>3]=r;h(+r);f=e(1)|0;n=e(0)|0;f=f&2147483647;l=(f|0)==2146435072&n>>>0>0|f>>>0>2146435072?l:l+r;i=i+1|0;if((i|0)>2]){continue}break}s=x(l)}n=zp(g+16|0,x(0),x(0),x(0));if(q[b+20>>2]>=1){i=0;while(1){j=yp(g);f=q[b+24>>2]+(i<<5)|0;c=x(v[q[g+48>>2]+(i<<3)>>3]);t=x(x(x(x(v[f>>3])*d)*c)/s);u[g>>2]=t;w=x(x(x(x(v[f+8>>3])*d)*c)/s);u[g+4>>2]=w;c=x(x(x(x(v[f+16>>3])*d)*c)/s);u[g+8>>2]=c;if(!(((k(t),e(0))&2147483647)>>>0>2139095040|((k(w),e(0))&2147483647)>>>0>2139095040|((k(c),e(0))&2147483647)>>>0>2139095040)){Fp(n,j)}i=i+1|0;if((i|0)>2]){continue}break}}b=q[g+20>>2];q[a>>2]=q[g+16>>2];q[a+4>>2]=b;q[a+8>>2]=q[g+24>>2];a=q[g+32>>2];if(a){q[g+36>>2]=a;_U(a)}a=q[g+48>>2];if(!a){break c}q[g+52>>2]=a;_U(a)}ue=g- -64|0;return}kU();F()}Ue(3944);F()}function Rr(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=0,o=x(0),p=0,s=x(0),t=x(0),v=0,w=x(0),y=0,z=x(0),A=0;m=ue-112|0;ue=m;p=q[a>>2];A=q[a+4>>2];if((p|0)!=(A|0)){while(1){w=u[p+48>>2];s=u[k+4>>2];t=x(u[l+4>>2]*x(.5));z=x(s-t);o=u[p+52>>2];a:{if(!!(z>o)){a=b;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);q[m+104>>2]=a;n=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[m+100>>2]=n;q[m+48>>2]=a;q[m+44>>2]=n;o=x(o/z);Pe(m+108|0,m+48|0,m+44|0,o);y=q[m+108>>2];a=c;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);q[m+96>>2]=a;n=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[m+92>>2]=n;q[m+40>>2]=a;q[m+36>>2]=n;Pe(m+108|0,m+40|0,m+36|0,o);a=q[m+108>>2];n=d;n=r[n|0]|r[n+1|0]<<8|(r[n+2|0]<<16|r[n+3|0]<<24);q[m+88>>2]=n;v=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);q[m+84>>2]=v;q[m+32>>2]=n;q[m+28>>2]=v;Pe(m+108|0,m+32|0,m+28|0,o);n=q[m+108>>2];break a}if(!!(x(s+t)>2]=a;n=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);q[m+100>>2]=n;q[m+72>>2]=a;q[m+68>>2]=n;o=x(x(1)-x(x(x(o-s)-t)/z));Pe(m+108|0,m+72|0,m+68|0,o);y=q[m+108>>2];a=i;a=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);q[m+96>>2]=a;n=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[m+92>>2]=n;q[m+64>>2]=a;q[m+60>>2]=n;Pe(m+108|0,m- -64|0,m+60|0,o);a=q[m+108>>2];n=j;n=r[n|0]|r[n+1|0]<<8|(r[n+2|0]<<16|r[n+3|0]<<24);q[m+88>>2]=n;v=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);q[m+84>>2]=v;q[m+56>>2]=n;q[m+52>>2]=v;Pe(m+108|0,m+56|0,m+52|0,o);n=q[m+108>>2];break a}a=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);y=r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24);n=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24)}o=u[k>>2];s=x(u[l>>2]*x(.5));t=x(o-s);b:{if(!!(t>w)){q[m+80>>2]=a;q[m+108>>2]=y;q[m+16>>2]=y;q[m+12>>2]=a;Pe(m+76|0,m+16|0,m+12|0,x(w/t));break b}if(!!(x(o+s)>2]=n;q[m+108>>2]=a;q[m+24>>2]=a;q[m+20>>2]=n;Pe(m+76|0,m+24|0,m+20|0,x(x(x(w-o)-s)/t));break b}q[m+76>>2]=a}q[p+64>>2]=q[m+76>>2];p=p+80|0;if((A|0)!=(p|0)){continue}break}}ue=m+112|0}function $h(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;q[b>>2]=q[b>>2]+4;a:{b:{c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<=1601){q[a+3568>>2]=0;break b}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3568>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if(d>>>0>1){break a}if(d-1){break b}q[a+3512>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;break a}q[a+3508>>2]=q[a+2380>>2];c=q[a+4>>2];c:{if((n[q[q[c>>2]+36>>2]](c)|0)<=6){c=q[b>>2];break c}c=q[b>>2]+4|0;q[b>>2]=c}q[a+3512>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>14){break a}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=c+4;q[a+2484>>2]=d;q[a+2316>>2]=d;q[a+2528>>2]=q[a+2524>>2];q[a+2560>>2]=q[a+2556>>2]}c=q[a+4>>2];d:{if((n[q[q[c>>2]+36>>2]](c)|0)>=12){c=q[b>>2];q[a+3516>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;break d}q[a+3516>>2]=2}c=q[a+4>>2];e:{if((n[q[q[c>>2]+36>>2]](c)|0)>=15){c=q[b>>2];break e}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=c+4|0;q[b>>2]=c;if(r[a+2466|0]|(d|0)<1){break e}q[a+2308>>2]=7;q[a+2476>>2]=7}q[a+3520>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];ai(a+3524|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[a+4>>2];f:{if((n[q[q[c>>2]+36>>2]](c)|0)>1601){break f}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<1600){break f}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=c+4|0;q[b>>2]=c;o[a+3288|0]=(d|0)==1;if((d|0)!=1){break f}d=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);e=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+3292|0]=e;o[a+3293|0]=e>>>8;o[a+3294|0]=e>>>16;o[a+3295|0]=e>>>24;o[a+3296|0]=d;o[a+3297|0]=d>>>8;o[a+3298|0]=d>>>16;o[a+3299|0]=d>>>24;d=a+3300|0;a=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);c=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[d|0]=c;o[d+1|0]=c>>>8;o[d+2|0]=c>>>16;o[d+3|0]=c>>>24;o[d+4|0]=a;o[d+5|0]=a>>>8;o[d+6|0]=a>>>16;o[d+7|0]=a>>>24;q[b>>2]=q[b>>2]+16}}function RK(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;f=q[b>>2];a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(!d){break l}g=q[d>>2];if(!g){break l}if(!a){d=c;break j}q[d>>2]=0;d=c;break k}m:{if(!q[q[91624]>>2]){if(!a){break m}if(!c){break a}g=c;while(1){d=o[f|0];if(d){q[a>>2]=d&57343;a=a+4|0;f=f+1|0;g=g+ -1|0;if(g){continue}break a}break}q[a>>2]=0;q[b>>2]=0;return c-g|0}d=c;if(!a){break i}break g}return sV(f)}e=1;break g}e=0;break h}e=1}while(1){if(!e){e=r[f|0]>>>3|0;if((e+ -16|e+(g>>26))>>>0>7){break f}h=f+1|0;e=h;n:{if(!(g&33554432)){break n}if((r[h|0]&192)!=128){break f}h=f+2|0;e=h;if(!(g&524288)){break n}if((r[h|0]&192)!=128){break f}e=f+3|0}f=e;d=d+ -1|0;e=1;continue}while(1){g=r[f|0];o:{if(f&3|g+ -1>>>0>126){break o}g=q[f>>2];if((g|g+ -16843009)&-2139062144){break o}while(1){d=d+ -4|0;g=q[f+4>>2];e=f+4|0;f=e;if(!((g+ -16843009|g)&-2139062144)){continue}break}f=e}e=g&255;if(e+ -1>>>0<=126){d=d+ -1|0;f=f+1|0;continue}break}e=e+ -194|0;if(e>>>0>50){break e}f=f+1|0;g=q[(e<<2)+350240>>2];e=0;continue}}while(1){if(!e){if(!d){break a}while(1){p:{e=r[f|0];h=e+ -1|0;q:{r:{if(h>>>0>126){g=e;break r}if(f&3|d>>>0<5){break q}s:{while(1){g=q[f>>2];if((g|g+ -16843009)&-2139062144){break s}q[a>>2]=g&255;q[a+4>>2]=r[f+1|0];q[a+8>>2]=r[f+2|0];q[a+12>>2]=r[f+3|0];a=a+16|0;f=f+4|0;d=d+ -4|0;if(d>>>0>4){continue}break}g=r[f|0]}e=g&255;h=e+ -1|0}if(h>>>0>126){break p}}q[a>>2]=e;a=a+4|0;f=f+1|0;d=d+ -1|0;if(d){continue}break a}break}e=e+ -194|0;if(e>>>0>50){break e}f=f+1|0;g=q[(e<<2)+350240>>2];e=1;continue}h=r[f|0];e=h>>>3|0;if((e+ -16|e+(g>>26))>>>0>7){break f}t:{u:{i=f+1|0;e=h+ -128|g<<6;h=i;v:{if((e|0)>-1){break v}h=r[i|0]+ -128|0;if(h>>>0>63){break u}i=f+2|0;e=h|e<<6;h=i;if((e|0)>-1){break v}h=r[i|0]+ -128|0;if(h>>>0>63){break u}e=h|e<<6;h=f+3|0}f=h;q[a>>2]=e;d=d+ -1|0;a=a+4|0;break t}q[91802]=25;f=f+ -1|0;break c}e=0;continue}}f=f+ -1|0;if(g){break d}g=r[f|0]}if(g&255){break d}if(a){q[a>>2]=0;q[b>>2]=0}return c-d|0}q[91802]=25;if(!a){break b}}q[b>>2]=f}return-1}q[b>>2]=f;return c}function Kh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;o[a+48|0]=0;q[a+200>>2]=0;q[a+192>>2]=0;q[a+196>>2]=0;q[a+68>>2]=0;q[a+72>>2]=0;q[a+60>>2]=1;q[a+64>>2]=1;q[a+52>>2]=0;q[a+56>>2]=0;q[a+76>>2]=0;q[a+80>>2]=0;q[a+140>>2]=1065353216;q[a>>2]=q[b+2340>>2];q[a+4>>2]=q[b+2312>>2];q[a+8>>2]=q[b+2320>>2];q[a+12>>2]=q[b+2424>>2];q[a+16>>2]=q[b+2324>>2];q[a+20>>2]=q[b+2428>>2];q[a+24>>2]=q[b+2328>>2];q[a+28>>2]=q[b+2432>>2];q[a+32>>2]=q[b+2332>>2];q[a+36>>2]=q[b+2436>>2];q[a+40>>2]=q[b+2336>>2];q[a+44>>2]=q[b+2440>>2];a:{if(q[b+2804>>2]!=2){break a}f=q[b+2848>>2];if(!f){break a}c=b+2828|0;g=q[c>>2];c=q[c+4>>2];d=b+2816|0;h=q[d>>2];d=q[d+4>>2];e=b+2808|0;i=q[e+4>>2];e=q[e>>2];q[a+52>>2]=q[b+2836>>2];q[a+56>>2]=f;q[a+76>>2]=e;q[a+80>>2]=i;q[a+68>>2]=h;q[a+72>>2]=d;q[a+60>>2]=g;q[a+64>>2]=c;o[a+48|0]=1}q[a+84>>2]=q[b+2308>>2];q[a+88>>2]=q[b+2448>>2];q[a+92>>2]=q[b+2452>>2];q[a+96>>2]=q[b+2456>>2];b:{if((n[q[q[b>>2]+12>>2]](b)|0)==5){o[a+100|0]=r[b+3288|0];q[a+104>>2]=q[b+3292>>2];u[a+108>>2]=x(r[b+3296|0])/x(255);u[a+112>>2]=x(r[b+3297|0])/x(255);u[a+116>>2]=x(r[b+3298|0])/x(255);u[a+120>>2]=x(r[b+3299|0])/x(255);u[a+124>>2]=x(r[b+3300|0])/x(255);u[a+128>>2]=x(r[b+3301|0])/x(255);u[a+132>>2]=x(r[b+3302|0])/x(255);u[a+136>>2]=x(r[b+3303|0])/x(255);q[a+140>>2]=q[b+3304>>2];break b}q[a+140>>2]=1065353216;o[a+100|0]=0;q[a+132>>2]=1065353216;q[a+136>>2]=1065353216;q[a+124>>2]=1065353216;q[a+128>>2]=1065353216;q[a+116>>2]=1065353216;q[a+120>>2]=1065353216;q[a+108>>2]=1065353216;q[a+112>>2]=1065353216}q[a+144>>2]=q[b+2460>>2];u[a+148>>2]=x(r[b+3280|0])/x(255);u[a+152>>2]=x(r[b+3281|0])/x(255);u[a+156>>2]=x(r[b+3282|0])/x(255);u[a+160>>2]=x(r[b+3283|0])/x(255);q[a+164>>2]=q[b+3276>>2];q[a+168>>2]=q[b+3284>>2];q[a+172>>2]=q[b+2380>>2];o[a+186|0]=r[b+2466|0];q[a+188>>2]=q[b+2468>>2];q[a+176>>2]=q[b+2384>>2];q[a+180>>2]=q[b+2416>>2];o[a+185|0]=r[b+2465|0];o[a+184|0]=r[b+2464|0];q[a+192>>2]=q[b+2656>>2];q[a+196>>2]=q[b+2660>>2];q[a+200>>2]=q[b+2664>>2]}function qr(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=x(0),m=0,o=0,p=0;g=ue-160|0;ue=g;u[g+156>>2]=f;h=q[b+24>>2];i=(d|0)%((q[b+28>>2]-h|0)/36|0)|0;d=w(i,36);h=d+h|0;j=q[h+16>>2]-q[h+12>>2]|0;a:{if(!j){rr(a,b,c,i,e,f);break a}f=x(n[q[q[c>>2]+12>>2]](c));h=d+q[b+24>>2]|0;b=q[h+12>>2];i=(q[h+16>>2]-b|0)/12|0;k=b;f=x(f*x(((j|0)/12|0)+ -1|0));b:{if(x(y(f))(d|0)?d:i+ -1|0;b=k+w((b|0)>0?b:0,12)|0;k=q[b+8>>2];j=q[b+4>>2];i=q[b>>2];b=q[h>>2];f=x(n[q[q[c>>2]+12>>2]](c));u[g+152>>2]=f;l=x(n[q[q[c>>2]+12>>2]](c));u[g+148>>2]=l;if(!!(x(l+f)>x(1))){l=x(x(1)-l);u[g+148>>2]=l;f=x(x(1)-f);u[g+152>>2]=f}u[g+144>>2]=x(x(1)-f)-l;yp(g+96|0);c=yp(g+108|0);m=g+120|0;d=yp(m);h=yp(g+132|0);i=b+w(i,60)|0;Dp(g+32|0,i,g+144|0);j=b+w(j,60)|0;Dp(g+16|0,j,g+152|0);Bp(g+48|0,g+32|0,g+16|0);b=b+w(k,60)|0;Dp(g,b,g+148|0);Bp(g- -64|0,g+48|0,g);Dp(g+80|0,g- -64|0,g+156|0);o=g+104|0;k=g+88|0;q[o>>2]=q[k>>2];p=q[g+84>>2];q[g+96>>2]=q[g+80>>2];q[g+100>>2]=p;Dp(g+48|0,i+12|0,g+144|0);Dp(g+32|0,j+12|0,g+152|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+12|0,g+148|0);Bp(g+80|0,g- -64|0,g+16|0);q[c+8>>2]=q[k>>2];p=q[g+84>>2];q[c>>2]=q[g+80>>2];q[c+4>>2]=p;Dp(g+48|0,i+24|0,g+144|0);Dp(g+32|0,j+24|0,g+152|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+24|0,g+148|0);Bp(g+80|0,g- -64|0,g+16|0);q[d+8>>2]=q[k>>2];c=q[g+84>>2];q[d>>2]=q[g+80>>2];q[d+4>>2]=c;Dp(g+48|0,i+36|0,g+144|0);Dp(g+32|0,j+36|0,g+152|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+36|0,g+148|0);Bp(g+80|0,g- -64|0,g+16|0);q[h+8>>2]=q[k>>2];b=q[g+84>>2];q[h>>2]=q[g+80>>2];q[h+4>>2]=b;if(!e){b=g+116|0;u[b>>2]=-u[b>>2];b=g+128|0;u[b>>2]=-u[b>>2];b=g+140|0;u[b>>2]=-u[b>>2];u[g+104>>2]=-u[g+104>>2]}b=q[g+100>>2];q[a>>2]=q[g+96>>2];q[a+4>>2]=b;b=q[g+140>>2];q[a+40>>2]=q[g+136>>2];q[a+44>>2]=b;b=q[g+132>>2];q[a+32>>2]=q[g+128>>2];q[a+36>>2]=b;b=q[m+4>>2];q[a+24>>2]=q[m>>2];q[a+28>>2]=b;b=q[g+116>>2];q[a+16>>2]=q[g+112>>2];q[a+20>>2]=b;b=q[o+4>>2];q[a+8>>2]=q[o>>2];q[a+12>>2]=b}ue=g+160|0}function Wx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;g=a+176|0;h=a+32|0;c=r[a+176|0];a:{if(b?0:!((c^r[a+32|0])&1)){break a}if(c&1){ua(2929);break a}va(2929)}c=r[g|0];if(!(b?0:!((c^r[h|0])&2))){wa(c>>>1&1)}c=q[a+184>>2];b:{if(b?0:(c|0)==q[a+40>>2]){break b}if(r[a+324|0]){if(!c){ua(2884);xa(1028);break b}c=c+ -1|0;if(c>>>0>1){break b}if(c-1){ua(2884);xa(1029);break b}va(2884);xa(1032);break b}if(!c){ua(2884);xa(1029);break b}c=c+ -1|0;if(c>>>0>1){break b}if(c-1){ua(2884);xa(1028);break b}va(2884);xa(1032)}c:{if(b?0:q[a+36>>2]==q[a+180>>2]){break c}ua(3042);d:{c=q[a+180>>2];if(c>>>0>3){break d}e:{switch(c-1|0){default:$v(32774,32776);aw(1,0,1,1);break c;case 0:case 1:break d;case 2:break e}}$v(32779,32774);aw(770,1,0,1);break c}$v(32774,32774);c=q[a+180>>2]+ -1|0;if(c>>>0>3){break c}f:{switch(c-1|0){default:aw(770,771,1,1);break c;case 0:aw(770,1,1,1);break c;case 1:break c;case 2:break f}}aw(0,768,0,1)}g:{h:{c=q[a+320>>2];if((n[q[q[c>>2]+244>>2]](c)|0)==1){break h}c=q[a+320>>2];if((n[q[q[c>>2]+244>>2]](c)|0)==3){break h}c=q[a+320>>2];if((q[c+188>>2]-q[c+184>>2]|0)<=0){break g}while(1){b=d<<2;e=b+q[c+184>>2]|0;if(q[e>>2]){c=d+33984|0;W(c|0);b=a+b|0;f=q[b+188>>2]<<2;ya(3553,10240,q[f+191024>>2]);ya(3553,10241,q[f+(q[q[e>>2]+32>>2]==1?191024:191016)>>2]);W(c|0);b=q[(q[b+220>>2]<<2)+191032>>2];ya(3553,10242,b|0);ya(3553,10243,b|0);c=q[a+320>>2]}d=d+1|0;if((d|0)>2]-q[c+184>>2]>>2){continue}break}break g}d=q[a+320>>2];if((q[d+188>>2]-q[d+184>>2]|0)<1){break g}c=0;while(1){e=q[d+184>>2];d=c<<2;i:{if(!q[e+d>>2]){break i}d=a+d|0;f=d+188|0;j:{if(!(b|q[d+44>>2]!=q[f>>2])){e=(c<<3)+a|0;if(q[e+112>>2]==q[e+256>>2]&q[e+116>>2]==q[e+260>>2]){break j}}W(c+33984|0)}if(!(b|q[d+76>>2]!=q[d+220>>2])){e=(c<<3)+a|0;if(q[e+112>>2]==q[e+256>>2]&q[e+116>>2]==q[e+260>>2]){break i}}W(c+33984|0)}c=c+1|0;d=q[a+320>>2];if((c|0)>2]-q[d+184>>2]>>2){continue}break}}W(33984);kV(h,g,144)}function Lw(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ue-112|0;ue=e;f=e;h=q[a>>2];g=q[h+20>>2];a:{if(g>>>0<=3){g=q[(g<<2)+339820>>2];break a}g=0}q[f+56>>2]=g;j=e,k=sV(g),q[j+60>>2]=k;f=q[b>>2];b=q[b+4>>2];q[e+80>>2]=0;q[e+72>>2]=0;q[e+76>>2]=0;q[e+64>>2]=f;q[e+68>>2]=b;wt(e+96|0);b=n[q[e+104>>2]](e+96|0,16)|0;f=q[q[e+108>>2]+4>>2];if(f){n[f](q[e+96>>2])}q[e+72>>2]=b;f=b+16|0;q[e+80>>2]=f;g=e- -64|0;i=q[g+4>>2];q[b+8>>2]=q[g>>2];q[b+12>>2]=i;g=q[e+60>>2];q[b>>2]=q[e+56>>2];q[b+4>>2]=g;q[e+76>>2]=f;b=e;f=q[q[a>>2]+20>>2];b:{if(f>>>0<=3){f=q[(f<<2)+339836>>2];break b}f=0}q[b+24>>2]=f;j=e,k=sV(f),q[j+28>>2]=k;b=q[c>>2];c=q[c+4>>2];q[e+48>>2]=0;q[e+40>>2]=0;q[e+44>>2]=0;q[e+32>>2]=b;q[e+36>>2]=c;wt(e+96|0);b=n[q[e+104>>2]](e+96|0,16)|0;c=q[q[e+108>>2]+4>>2];if(c){n[c](q[e+96>>2])}q[e+40>>2]=b;c=b+16|0;q[e+48>>2]=c;f=q[e+36>>2];q[b+8>>2]=q[e+32>>2];q[b+12>>2]=f;f=q[e+28>>2];q[b>>2]=q[e+24>>2];q[b+4>>2]=f;q[e+44>>2]=c;b=0;q[e+16>>2]=0;c=q[d>>2];c:{if(!c){break c}n[q[q[c>>2]>>2]](c)|0;c=q[e+16>>2];if(!c){break c}n[q[q[c>>2]+8>>2]](c)|0;q[e+16>>2]=0}q[e+16>>2]=q[d>>2];n[q[q[h>>2]+80>>2]](e+88|0,h,e+72|0,e+40|0,e+16|0);c=q[e+88>>2];d:{if(!c){break d}n[q[q[c>>2]>>2]](c)|0;b=c+ -4|0;c=q[e+88>>2];if(!c){break d}n[q[q[c>>2]+8>>2]](c)|0;q[e+88>>2]=0}c=q[e+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e+16>>2]=0}c=q[e+40>>2];e:{if(!c){break e}q[e+44>>2]=c;d=q[e+48>>2];xt(e+96|0);n[q[e+104>>2]](e+96|0,c,d-c|0);c=q[q[e+108>>2]+4>>2];if(!c){break e}n[c](q[e+96>>2])}c=q[e+72>>2];f:{if(!c){break f}q[e+76>>2]=c;d=q[e+80>>2];xt(e+96|0);n[q[e+104>>2]](e+96|0,c,d-c|0);c=q[q[e+108>>2]+4>>2];if(!c){break f}n[c](q[e+96>>2])}q[e+8>>2]=0;g:{if(!b){break g}n[q[q[b+4>>2]>>2]](b+4|0)|0;c=q[e+8>>2];if(!c){break g}n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[e+8>>2]=0}q[e+8>>2]=b;c=rB(a,e+8|0,28313);a=q[e+8>>2];if(a){n[q[q[a+4>>2]+8>>2]](a+4|0)|0;q[e+8>>2]=0}if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0}ue=e+112|0;return c}function di(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=x(0),s=0,t=x(0);c=ue-256|0;ue=c;n[q[q[e>>2]+68>>2]](c+48|0,e);d=q[c+48>>2];if(d){g=Ao(c+96|0);i=Ao(c+112|0);j=Ao(c+128|0);k=Ao(c+144|0);l=Ao(c+160|0);m=Ao(c+176|0);e=Gj(b);h=q[e+44>>2];q[c+88>>2]=q[e+40>>2];q[c+92>>2]=h;h=q[e+36>>2];q[c+80>>2]=q[e+32>>2];q[c+84>>2]=h;h=q[e+28>>2];q[c+72>>2]=q[e+24>>2];q[c+76>>2]=h;o=q[e+20>>2];h=c- -64|0;q[h>>2]=q[e+16>>2];q[h+4>>2]=o;h=q[e+4>>2];q[c+48>>2]=q[e>>2];q[c+52>>2]=h;h=q[e+12>>2];q[c+56>>2]=q[e+8>>2];q[c+60>>2]=h;e=c;p=u[b+828>>2];a:{if(x(y(p))>2]=h;ck(c+32|0,b,0);e=c+40|0;o=q[e+4>>2];q[g+8>>2]=q[e>>2];q[g+12>>2]=o;h=q[c+36>>2];q[g>>2]=q[c+32>>2];q[g+4>>2]=h;ck(c+32|0,b,1);g=q[e+4>>2];q[i+8>>2]=q[e>>2];q[i+12>>2]=g;g=q[c+36>>2];q[i>>2]=q[c+32>>2];q[i+4>>2]=g;ck(c+32|0,b,2);g=q[e+4>>2];q[j+8>>2]=q[e>>2];q[j+12>>2]=g;g=q[c+36>>2];q[j>>2]=q[c+32>>2];q[j+4>>2]=g;ck(c+32|0,b,3);g=q[e+4>>2];q[k+8>>2]=q[e>>2];q[k+12>>2]=g;g=q[c+36>>2];q[k>>2]=q[c+32>>2];q[k+4>>2]=g;ck(c+32|0,b,4);g=q[e+4>>2];q[l+8>>2]=q[e>>2];q[l+12>>2]=g;g=q[c+36>>2];q[l>>2]=q[c+32>>2];q[l+4>>2]=g;ck(c+32|0,b,5);g=q[e+4>>2];q[m+8>>2]=q[e>>2];q[m+12>>2]=g;e=q[c+36>>2];q[m>>2]=q[c+32>>2];q[m+4>>2]=e;s=c,t=$j(b),u[s+192>>2]=t;q[c+196>>2]=q[b+1428>>2];if(r[a+3500|0]){q[c+200>>2]=q[b+336>>2]}Hh(a,b,c+212|0,c+228|0);b:{if(q[a+2472>>2]+ -1>>>0<=1){e=q[b+548>>2];q[c+28>>2]=e;g=q[b+324>>2];q[c+24>>2]=g;q[c+12>>2]=e;q[c+8>>2]=g;Oe(c+32|0,c+12|0,c+8|0);e=q[c+32>>2];break b}e=q[b+548>>2]}g=a+3436|0;q[c+204>>2]=e;if(r[q[q[b+152>>2]+20>>2]+208|0]){q[c+20>>2]=q[c+204>>2];a=q[q[b+152>>2]+20>>2];a=r[a+209|0]|r[a+210|0]<<8|(r[a+211|0]<<16|r[a+212|0]<<24);q[c+16>>2]=a;q[c+4>>2]=q[c+20>>2];q[c>>2]=a;Oe(c+32|0,c+4|0,c);q[c+204>>2]=q[c+32>>2]}n[q[q[d>>2]+24>>2]](d,g,c+48|0,f);n[q[q[d>>2]+8>>2]](d)|0}ue=c+256|0}function tr(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0;g=ue-160|0;ue=g;u[g+156>>2]=f;h=q[b+24>>2];d=w((d|0)%((q[b+28>>2]-h|0)/36|0)|0,36);h=d+h|0;i=q[h+16>>2]-q[h+12>>2]|0;a:{if(!i){yp(a);yp(a+12|0);yp(a+24|0);yp(a+36|0);break a}f=x(n[q[q[c>>2]+12>>2]](c));d=d+q[b+24>>2]|0;b=q[d+12>>2];h=(q[d+16>>2]-b|0)/12|0;j=b;f=x(f*x(((i|0)/12|0)+ -1|0));b:{if(x(y(f))(c|0)?c:h+ -1|0;b=j+w((b|0)>0?b:0,12)|0;j=q[b+8>>2];k=q[b+4>>2];i=q[b>>2];b=q[d>>2];q[g+152>>2]=1051372203;q[g+148>>2]=1051372203;q[g+144>>2]=1051372203;yp(g+96|0);c=yp(g+108|0);l=g+120|0;d=yp(l);h=yp(g+132|0);i=b+w(i,60)|0;Dp(g+32|0,i,g+152|0);k=b+w(k,60)|0;Dp(g+16|0,k,g+148|0);Bp(g+48|0,g+32|0,g+16|0);b=b+w(j,60)|0;Dp(g,b,g+144|0);Bp(g- -64|0,g+48|0,g);Dp(g+80|0,g- -64|0,g+156|0);m=g+104|0;j=g+88|0;q[m>>2]=q[j>>2];o=q[g+84>>2];q[g+96>>2]=q[g+80>>2];q[g+100>>2]=o;Dp(g+48|0,i+12|0,g+152|0);Dp(g+32|0,k+12|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+12|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[c+8>>2]=q[j>>2];o=q[g+84>>2];q[c>>2]=q[g+80>>2];q[c+4>>2]=o;Dp(g+48|0,i+24|0,g+152|0);Dp(g+32|0,k+24|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+24|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[d+8>>2]=q[j>>2];c=q[g+84>>2];q[d>>2]=q[g+80>>2];q[d+4>>2]=c;Dp(g+48|0,i+36|0,g+152|0);Dp(g+32|0,k+36|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+36|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[h+8>>2]=q[j>>2];b=q[g+84>>2];q[h>>2]=q[g+80>>2];q[h+4>>2]=b;if(!e){b=g+116|0;u[b>>2]=-u[b>>2];b=g+128|0;u[b>>2]=-u[b>>2];b=g+140|0;u[b>>2]=-u[b>>2];u[g+104>>2]=-u[g+104>>2]}b=q[g+100>>2];q[a>>2]=q[g+96>>2];q[a+4>>2]=b;b=q[g+140>>2];q[a+40>>2]=q[g+136>>2];q[a+44>>2]=b;b=q[g+132>>2];q[a+32>>2]=q[g+128>>2];q[a+36>>2]=b;b=q[l+4>>2];q[a+24>>2]=q[l>>2];q[a+28>>2]=b;b=q[g+116>>2];q[a+16>>2]=q[g+112>>2];q[a+20>>2]=b;b=q[m+4>>2];q[a+8>>2]=q[m>>2];q[a+12>>2]=b}ue=g+160|0}function bp(a){var b=0,c=0,d=0,e=0,f=0,g=0;c=ue-16|0;ue=c;q[a+12>>2]=0;q[a+16>>2]=0;q[a>>2]=5400;q[a+4>>2]=1;q[a+8>>2]=1;b=a+20|0;q[b>>2]=0;q[b+4>>2]=0;q[a+28>>2]=0;g=_S(8);Kf(g);q[c>>2]=0;n[q[q[g>>2]>>2]](g)|0;q[c>>2]=g;d=a+16|0;b=q[b>>2];a:{if(b>>>0>2]){q[b>>2]=0;e=q[c>>2];b:{if(!e){break b}n[q[q[e>>2]>>2]](e)|0;f=q[b>>2];if(!f){break b}n[q[q[f>>2]+8>>2]](f)|0;q[b>>2]=0;e=q[c>>2]}q[b>>2]=e;q[a+20>>2]=q[a+20>>2]+4;break a}cp(d,c)}b=q[c>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c>>2]=0}e=_S(8);b=e;q[b>>2]=0;q[b+4>>2]=0;Kf(b);q[b>>2]=5632;n[q[1408]](b)|0;q[c+8>>2]=0;n[q[q[b>>2]>>2]](b)|0;q[c+8>>2]=b;b=q[a+20>>2];c:{if(b>>>0>2]){q[b>>2]=0;d=q[c+8>>2];d:{if(!d){break d}n[q[q[d>>2]>>2]](d)|0;f=q[b>>2];if(!f){break d}n[q[q[f>>2]+8>>2]](f)|0;q[b>>2]=0;d=q[c+8>>2]}q[b>>2]=d;q[a+20>>2]=q[a+20>>2]+4;break c}cp(d,c+8|0)}b=q[c+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+8>>2]=0}n[q[q[e>>2]+8>>2]](e)|0;b=lV(_S(168),0,168);q[b+12>>2]=0;q[b+16>>2]=0;o[b+8|0]=1;q[b>>2]=5464;q[b+4>>2]=1;q[b+20>>2]=0;q[b+24>>2]=0;q[b+40>>2]=0;q[b+44>>2]=0;o[b+36|0]=1;q[b+28>>2]=0;q[b+32>>2]=1065353216;q[b+48>>2]=0;q[b+52>>2]=0;q[b+68>>2]=0;q[b+72>>2]=0;o[b+64|0]=1;q[b+56>>2]=0;q[b+60>>2]=1065353216;q[b+76>>2]=0;q[b+80>>2]=0;o[b+92|0]=1;q[b+84>>2]=0;q[b+88>>2]=1065353216;q[b+112>>2]=0;q[b+116>>2]=1065353216;q[b+104>>2]=0;q[b+108>>2]=0;q[b+96>>2]=0;q[b+100>>2]=0;o[b+120|0]=1;q[b+132>>2]=0;q[b+136>>2]=0;q[b+124>>2]=0;q[b+128>>2]=0;q[b+140>>2]=0;q[b+144>>2]=1065353216;q[b+152>>2]=0;q[b+160>>2]=0;q[b+164>>2]=0;o[b+148|0]=1;q[b+156>>2]=b+160;d=q[a+28>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+28>>2]=0}q[a+28>>2]=b;a=_S(8);q[a>>2]=0;q[a+4>>2]=1;q[a>>2]=6280;n[q[1570]](a)|0;n[q[q[a>>2]>>2]](a)|0;d=q[b+152>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b+152>>2]=0}q[b+152>>2]=a;n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0;n[q[q[e>>2]+8>>2]](e)|0;n[q[q[g>>2]+8>>2]](g)|0;ue=c+16|0}function lE(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=ue-32|0;ue=e;c=q[b>>2];n[q[q[c>>2]+20>>2]](c,e+28|0,4)|0;c=q[b>>2];n[q[q[c>>2]+20>>2]](c,e+24|0,4)|0;a:{if(q[e+28>>2]!=1179011410){q[a>>2]=0;break a}c=q[b>>2];n[q[q[c>>2]+20>>2]](c,e+28|0,4)|0;if(q[e+28>>2]!=1163280727){q[a>>2]=0;break a}q[e+16>>2]=0;q[e+8>>2]=0;q[e+12>>2]=0;q[e>>2]=0;q[e+4>>2]=0;while(1){b:{c=q[b>>2];n[q[q[c>>2]+20>>2]](c,e+28|0,4)|0;c=q[b>>2];n[q[q[c>>2]+20>>2]](c,e+24|0,4)|0;c=q[e+28>>2];if((c|0)!=544501094){if((c|0)==1635017060){break b}c=q[b>>2];d=n[q[q[c>>2]+28>>2]](c)|0;n[q[q[c>>2]+24>>2]](c,q[e+24>>2]+d|0);continue}c=q[b>>2];d=q[e+24>>2];d=d>>>0<20?d:20;n[q[q[c>>2]+20>>2]](c,e,d)|0;if(d>>>0>=t[e+24>>2]){continue}c=q[b>>2];d=(n[q[q[c>>2]+28>>2]](c)|0)-d|0;n[q[q[c>>2]+24>>2]](c,q[e+24>>2]+d|0);continue}break}if(!(s[e+2>>1]<3?s[e>>1]==1:0)){q[a>>2]=0;break a}c:{d:{e:{c=s[e+14>>1]+ -8|0;if(c>>>0>16){break e}f:{switch(c-1|0){default:d=q[e+24>>2];h=d<<1;c=_S(h);g=q[b>>2];b=(d&2147483647)+c|0;n[q[q[g>>2]+20>>2]](g,b,d)|0;if(!h){h=0;break c}d=c;while(1){p[d>>1]=r[b|0]<<8^32768;d=d+2|0;b=b+1|0;f=f+2|0;if(f>>>0>>0){continue}break}break c;case 7:break d;case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 8:case 9:case 10:case 11:case 12:case 13:case 14:break e;case 15:break f}}d=q[e+24>>2];f=d<<1;h=(f>>>0)/3|0;c=_S(h);g=_S(d);b=q[b>>2];n[q[q[b>>2]+20>>2]](b,g,d)|0;if(f>>>0>=3){f=0;b=g;d=c;while(1){p[d>>1]=r[b+1|0]|r[b+2|0]<<8;b=b+3|0;d=d+2|0;f=f+2|0;if(f>>>0>>0){continue}break}}_U(g);break c}q[a>>2]=0;break a}d=q[e+24>>2];c=_S(d);b=q[b>>2];h=n[q[q[b>>2]+20>>2]](b,c,d)|0}d=s[e+2>>1];b=_S(32);q[b>>2]=0;q[b+4>>2]=0;g=b+16|0;q[g>>2]=0;q[g+4>>2]=0;f=b+24|0;q[f>>2]=0;q[f+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;q[b+4>>2]=1;q[b>>2]=342628;q[g>>2]=0;q[b+20>>2]=d;q[f>>2]=q[e+4>>2];Ma(1,b+28|0);Na(q[b+28>>2],((d|0)==2?4355:4353)|0,c|0,h|0,q[e+4>>2]);_U(c);q[a>>2]=b}ue=e+32|0}function Qz(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0,l=x(0);f=ue-304|0;ue=f;j=1;c=(b-a|0)/304|0;a:{if(c>>>0<=5){b:{switch(c-2|0){case 0:b=b+ -304|0;if(!(u[b>>2]>u[a>>2])){break a}c=kV(f,a,304);kV(a,b,304);kV(b,c,304);break a;case 1:c=a+304|0;b=b+ -304|0;g=u[b>>2];i=u[a+304>>2];if(!(i>u[a>>2])){if(!(g>i)){break a}d=kV(f,c,304);c=kV(c,b,304);kV(b,d,304);if(!(u[a+304>>2]>u[a>>2])){break a}b=kV(d,a,304);kV(a,c,304);kV(c,b,304);break a}if(!!(g>i)){c=kV(f,a,304);kV(a,b,304);kV(b,c,304);break a}d=kV(f,a,304);e=kV(a,c,304);a=kV(c,d,304);if(!(u[b>>2]>u[e+304>>2])){break a}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);break a;case 2:Mz(a,a+304|0,a+608|0,b+ -304|0);break a;case 3:break b;default:break a}}c=a+304|0;d=a+608|0;e=a+912|0;Mz(a,c,d,e);h=b+ -304|0;if(!(u[h>>2]>u[a+912>>2])){break a}k=kV(f,e,304);b=kV(e,h,304);kV(h,k,304);if(!(u[b>>2]>u[d>>2])){break a}e=kV(k,d,304);d=kV(d,b,304);kV(b,e,304);if(!(u[d>>2]>u[c>>2])){break a}b=kV(e,c,304);c=kV(c,d,304);kV(d,b,304);if(!(u[a+304>>2]>u[a>>2])){break a}b=kV(b,a,304);kV(a,c,304);kV(c,b,304);break a}c=a+304|0;e=a+608|0;g=u[a+608>>2];i=u[a+304>>2];l=u[a>>2];c:{if(!(i>l)){if(!(g>i)){break c}d=kV(f,c,304);c=kV(c,e,304);kV(e,d,304);if(!(u[c>>2]>l)){break c}d=kV(d,a,304);kV(a,c,304);kV(c,d,304);break c}if(!!(g>i)){c=kV(f,a,304);kV(a,e,304);kV(e,c,304);break c}d=kV(f,a,304);h=kV(a,c,304);c=kV(c,d,304);if(!(g>u[h+304>>2])){break c}d=kV(d,c,304);kV(c,e,304);kV(e,d,304)}c=a+912|0;if((c|0)==(b|0)){break a}h=0;d:{while(1){d=c;g=u[c>>2];if(!!(g>u[e>>2])){k=kV(f,d+4|0,300);j=d;while(1){e:{c=e;kV(j,c,304);if((a|0)==(c|0)){c=a;break e}j=c;e=c+ -304|0;if(g>u[e>>2]){continue}}break}u[c>>2]=g;kV(c+4|0,k,300);h=h+1|0;if((h|0)==8){break d}}e=d;c=d+304|0;if((c|0)!=(b|0)){continue}break}j=1;break a}j=(d+304|0)==(b|0)}ue=f+304|0;return j}function NA(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0,l=x(0);f=ue-272|0;ue=f;j=1;c=(b-a|0)/272|0;a:{if(c>>>0<=5){b:{switch(c-2|0){case 0:b=b+ -272|0;if(!(u[b>>2]>u[a>>2])){break a}c=kV(f,a,272);kV(a,b,272);kV(b,c,272);break a;case 1:c=a+272|0;b=b+ -272|0;g=u[b>>2];i=u[a+272>>2];if(!(i>u[a>>2])){if(!(g>i)){break a}d=kV(f,c,272);c=kV(c,b,272);kV(b,d,272);if(!(u[a+272>>2]>u[a>>2])){break a}b=kV(d,a,272);kV(a,c,272);kV(c,b,272);break a}if(!!(g>i)){c=kV(f,a,272);kV(a,b,272);kV(b,c,272);break a}d=kV(f,a,272);e=kV(a,c,272);a=kV(c,d,272);if(!(u[b>>2]>u[e+272>>2])){break a}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);break a;case 2:JA(a,a+272|0,a+544|0,b+ -272|0);break a;case 3:break b;default:break a}}c=a+272|0;d=a+544|0;e=a+816|0;JA(a,c,d,e);h=b+ -272|0;if(!(u[h>>2]>u[a+816>>2])){break a}k=kV(f,e,272);b=kV(e,h,272);kV(h,k,272);if(!(u[b>>2]>u[d>>2])){break a}e=kV(k,d,272);d=kV(d,b,272);kV(b,e,272);if(!(u[d>>2]>u[c>>2])){break a}b=kV(e,c,272);c=kV(c,d,272);kV(d,b,272);if(!(u[a+272>>2]>u[a>>2])){break a}b=kV(b,a,272);kV(a,c,272);kV(c,b,272);break a}c=a+272|0;e=a+544|0;g=u[a+544>>2];i=u[a+272>>2];l=u[a>>2];c:{if(!(i>l)){if(!(g>i)){break c}d=kV(f,c,272);c=kV(c,e,272);kV(e,d,272);if(!(u[c>>2]>l)){break c}d=kV(d,a,272);kV(a,c,272);kV(c,d,272);break c}if(!!(g>i)){c=kV(f,a,272);kV(a,e,272);kV(e,c,272);break c}d=kV(f,a,272);h=kV(a,c,272);c=kV(c,d,272);if(!(g>u[h+272>>2])){break c}d=kV(d,c,272);kV(c,e,272);kV(e,d,272)}c=a+816|0;if((c|0)==(b|0)){break a}h=0;d:{while(1){d=c;g=u[c>>2];if(!!(g>u[e>>2])){k=kV(f,d+4|0,268);j=d;while(1){e:{c=e;kV(j,c,272);if((a|0)==(c|0)){c=a;break e}j=c;e=c+ -272|0;if(g>u[e>>2]){continue}}break}u[c>>2]=g;kV(c+4|0,k,268);h=h+1|0;if((h|0)==8){break d}}e=d;c=d+272|0;if((c|0)!=(b|0)){continue}break}j=1;break a}j=(d+272|0)==(b|0)}ue=f+272|0;return j}function Lz(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0,l=x(0);f=ue-304|0;ue=f;j=1;c=(b-a|0)/304|0;a:{if(c>>>0<=5){b:{switch(c-2|0){case 0:b=b+ -304|0;if(!(u[b>>2]>2])){break a}c=kV(f,a,304);kV(a,b,304);kV(b,c,304);break a;case 1:c=a+304|0;b=b+ -304|0;g=u[b>>2];i=u[a+304>>2];if(!(i>2])){if(!(g>2]>2])){break a}b=kV(d,a,304);kV(a,c,304);kV(c,b,304);break a}if(!!(g>2]>2])){break a}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);break a;case 2:Hz(a,a+304|0,a+608|0,b+ -304|0);break a;case 3:break b;default:break a}}c=a+304|0;d=a+608|0;e=a+912|0;Hz(a,c,d,e);h=b+ -304|0;if(!(u[h>>2]>2])){break a}k=kV(f,e,304);b=kV(e,h,304);kV(h,k,304);if(!(u[b>>2]>2])){break a}e=kV(k,d,304);d=kV(d,b,304);kV(b,e,304);if(!(u[d>>2]>2])){break a}b=kV(e,c,304);c=kV(c,d,304);kV(d,b,304);if(!(u[a+304>>2]>2])){break a}b=kV(b,a,304);kV(a,c,304);kV(c,b,304);break a}c=a+304|0;e=a+608|0;g=u[a+608>>2];i=u[a+304>>2];l=u[a>>2];c:{if(!(i>2]>2])){break c}d=kV(d,c,304);kV(c,e,304);kV(e,d,304)}c=a+912|0;if((c|0)==(b|0)){break a}h=0;d:{while(1){d=c;g=u[c>>2];if(!!(g>2])){k=kV(f,d+4|0,300);j=d;while(1){e:{c=e;kV(j,c,304);if((a|0)==(c|0)){c=a;break e}j=c;e=c+ -304|0;if(g>2]){continue}}break}u[c>>2]=g;kV(c+4|0,k,300);h=h+1|0;if((h|0)==8){break d}}e=d;c=d+304|0;if((c|0)!=(b|0)){continue}break}j=1;break a}j=(d+304|0)==(b|0)}ue=f+304|0;return j}function IA(a,b){var c=0,d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0,l=x(0);f=ue-272|0;ue=f;j=1;c=(b-a|0)/272|0;a:{if(c>>>0<=5){b:{switch(c-2|0){case 0:b=b+ -272|0;if(!(u[b>>2]>2])){break a}c=kV(f,a,272);kV(a,b,272);kV(b,c,272);break a;case 1:c=a+272|0;b=b+ -272|0;g=u[b>>2];i=u[a+272>>2];if(!(i>2])){if(!(g>2]>2])){break a}b=kV(d,a,272);kV(a,c,272);kV(c,b,272);break a}if(!!(g>2]>2])){break a}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);break a;case 2:EA(a,a+272|0,a+544|0,b+ -272|0);break a;case 3:break b;default:break a}}c=a+272|0;d=a+544|0;e=a+816|0;EA(a,c,d,e);h=b+ -272|0;if(!(u[h>>2]>2])){break a}k=kV(f,e,272);b=kV(e,h,272);kV(h,k,272);if(!(u[b>>2]>2])){break a}e=kV(k,d,272);d=kV(d,b,272);kV(b,e,272);if(!(u[d>>2]>2])){break a}b=kV(e,c,272);c=kV(c,d,272);kV(d,b,272);if(!(u[a+272>>2]>2])){break a}b=kV(b,a,272);kV(a,c,272);kV(c,b,272);break a}c=a+272|0;e=a+544|0;g=u[a+544>>2];i=u[a+272>>2];l=u[a>>2];c:{if(!(i>2]>2])){break c}d=kV(d,c,272);kV(c,e,272);kV(e,d,272)}c=a+816|0;if((c|0)==(b|0)){break a}h=0;d:{while(1){d=c;g=u[c>>2];if(!!(g>2])){k=kV(f,d+4|0,268);j=d;while(1){e:{c=e;kV(j,c,272);if((a|0)==(c|0)){c=a;break e}j=c;e=c+ -272|0;if(g>2]){continue}}break}u[c>>2]=g;kV(c+4|0,k,268);h=h+1|0;if((h|0)==8){break d}}e=d;c=d+272|0;if((c|0)!=(b|0)){continue}break}j=1;break a}j=(d+272|0)==(b|0)}ue=f+272|0;return j}function Dr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=ue-48|0;ue=d;q[d+24>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;i=q[c+4>>2]-q[c>>2]|0;if(i){fr(d+16|0,(i|0)/80|0);h=q[d+4>>2];e=q[d>>2]}i=(q[c+16>>2]-q[c+12>>2]|0)/12|0;h=(h-e|0)/12|0;a:{if(i>>>0>h>>>0){gr(d,i-h|0);break a}if(i>>>0>=h>>>0){break a}q[d+4>>2]=w(i,12)+e}if(q[d+20>>2]!=q[d+16>>2]){i=0;while(1){e=q[c>>2];yp(d+32|0);f=d+40|0;h=w(i,80);e=h+e|0;k=q[e+8>>2];q[f>>2]=k;g=q[e+4>>2];l=q[e>>2];q[d+32>>2]=l;q[d+36>>2]=g;e=w(i,60);j=e+q[d+16>>2]|0;q[j+8>>2]=k;q[j>>2]=l;q[j+4>>2]=g;g=q[c>>2];yp(d+32|0);g=g+h|0;k=q[g+24>>2];q[f>>2]=k;j=q[g+20>>2];l=q[g+16>>2];q[d+32>>2]=l;q[d+36>>2]=j;g=e+q[d+16>>2]|0;q[g+20>>2]=k;q[g+12>>2]=l;q[g+16>>2]=j;g=q[c>>2];yp(d+32|0);k=f;f=g+h|0;j=q[f+40>>2];q[k>>2]=j;g=q[f+36>>2];k=q[f+32>>2];q[d+32>>2]=k;q[d+36>>2]=g;f=e+q[d+16>>2]|0;q[f+44>>2]=j;q[f+36>>2]=k;q[f+40>>2]=g;f=q[c>>2];xp(d+32|0);f=f+h|0;j=q[f+52>>2];g=e+q[d+16>>2]|0;q[g+48>>2]=q[f+48>>2];q[g+52>>2]=j;f=e+q[d+16>>2]|0;Kp(f+24|0,f+12|0,f+36|0);f=(e+q[d+16>>2]|0)+24|0;Jp(f,f);q[(e+q[d+16>>2]|0)+56>>2]=q[(h+q[c>>2]|0)+64>>2];i=i+1|0;if(i>>>0<(q[d+20>>2]-q[d+16>>2]|0)/60>>>0){continue}break}}e=q[d+4>>2];i=q[d>>2];if((e|0)!=(i|0)){e=(e-i|0)/12|0;f=e>>>0>1?e:1;g=q[c+12>>2];e=0;while(1){h=w(e,12);c=h+i|0;h=g+h|0;q[c>>2]=q[h>>2];q[c+4>>2]=q[h+4>>2];q[c+8>>2]=q[h+8>>2];e=e+1|0;if((f|0)!=(e|0)){continue}break}}n[q[q[b>>2]+32>>2]](d+32|0,b,d+16|0,d);q[a>>2]=q[d+32>>2];a=q[d>>2];b:{if(!a){break b}q[d+4>>2]=a;b=q[d+8>>2];xt(d+32|0);n[q[d+40>>2]](d+32|0,a,b-a|0);a=q[q[d+44>>2]+4>>2];if(!a){break b}n[a](q[d+32>>2])}a=q[d+16>>2];c:{if(!a){break c}q[d+20>>2]=a;b=q[d+24>>2];xt(d+32|0);n[q[d+40>>2]](d+32|0,a,b-a|0);a=q[q[d+44>>2]+4>>2];if(!a){break c}n[a](q[d+32>>2])}ue=d+48|0}function rs(a,b){var c=0,d=x(0),g=x(0),h=0,i=0,l=x(0),m=0,n=0,o=x(0),p=0,q=x(0),s=0,t=0,v=x(0),w=0,z=0,A=0;q=u[b+4>>2];g=x(C(q));a:{if(x(y(g))>2];d=x(C(o));b:{if(x(y(d))>2];l=x(C(v));c:{if(x(y(l))>>0>7?b:p)^c<<31),j())+(f(0,c<<30&-2147483648^(t>>>0>3?(c&13)==12?p:n:b)),j()));q=x(x(d*x(d*d))*x(x(d*x(x(d*x(6))+x(-15)))+x(10)));c=(k(x(d+x(-1))),e(0));t=(m+r[i+1|0]|0)+a|0;z=(h+r[t|0]|0)+a|0;i=r[z|0];m=i&15;d=x(o+x(q*x(x((f(0,(m>>>0>7?b:c)^i<<31),j())+(f(0,i<<30&-2147483648^(m>>>0>3?(i&13)==12?c:n:b)),j()))-o)));o=x(x(g*x(g*g))*x(x(g*x(x(g*x(6))+x(-15)))+x(10)));i=(k(x(g+x(-1))),e(0));s=(h+r[s+1|0]|0)+a|0;m=r[s|0];A=m&15;g=x((f(0,(A>>>0>7?i:p)^m<<31),j())+(f(0,m<<30&-2147483648^(A>>>0>3?(m&13)==12?p:n:i)),j()));m=(h+r[t+1|0]|0)+a|0;a=r[m|0];h=a&15;g=x(d+x(o*x(x(g+x(q*x(x((f(0,(h>>>0>7?i:c)^a<<31),j())+(f(0,a<<30&-2147483648^(h>>>0>3?(a&13)==12?c:n:i)),j()))-g)))-d)));v=x(x(l*x(l*l))*x(x(l*x(x(l*x(6))+x(-15)))+x(10)));a=r[w+1|0];n=a&15;h=(k(x(l+x(-1))),e(0));d=x((f(0,(n>>>0>7?b:p)^a<<31),j())+(f(0,a<<30&-2147483648^(n>>>0>3?(a&13)==12?p:h:b)),j()));a=r[z+1|0];n=a&15;d=x(d+x(q*x(x((f(0,(n>>>0>7?b:c)^a<<31),j())+(f(0,a<<30&-2147483648^(n>>>0>3?(a&13)==12?c:h:b)),j()))-d)));a=r[s+1|0];b=a&15;l=x((f(0,(b>>>0>7?i:p)^a<<31),j())+(f(0,a<<30&-2147483648^(b>>>0>3?(a&13)==12?p:h:i)),j()));a=r[m+1|0];b=a&15;return x(g+x(v*x(x(d+x(o*x(x(l+x(q*x(x((f(0,(b>>>0>7?i:c)^a<<31),j())+(f(0,a<<30&-2147483648^(b>>>0>3?(a&13)==12?c:h:i)),j()))-l)))-d)))-g)))}function Gz(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=0,o=0,p=0;k=ue-304|0;ue=k;a:while(1){g=b+ -304|0;b:while(1){e=a;c:while(1){d:{e:{f:{g:{a=b-e|0;d=(a|0)/304|0;if(d>>>0<=5){h:{switch(d-2|0){case 0:if(!(u[g>>2]>u[e>>2])){break d}a=kV(k,e,304);kV(e,g,304);kV(g,a,304);break d;case 2:Mz(e,e+304|0,e+608|0,g);break d;case 1:break g;case 3:break h;default:break d}}Nz(e,e+304|0,e+608|0,e+912|0,g);break d}if((a|0)<=9423){Oz(e,b);break d}h=w((a>>>0)/608|0,304)+e|0;i:{if((a|0)>=303697){a=w((a>>>0)/1216|0,304);i=Nz(e,a+e|0,h,a+h|0,g);break i}i=Pz(e,h,g)}a=g;j=u[e>>2];l=u[h>>2];if(!(j>l)){while(1){a=a+ -304|0;if((e|0)==(a|0)){d=e+304|0;if(j>u[g>>2]){break e}if((d|0)==(g|0)){break d}while(1){if(!!(j>u[d>>2])){a=kV(k,d,304);d=kV(d,g,304);kV(g,a,304);d=d+304|0;break e}d=d+304|0;if((g|0)!=(d|0)){continue}break}break d}if(!(u[a>>2]>l)){continue}break}d=kV(k,e,304);kV(e,a,304);kV(a,d,304);i=i+1|0}d=e+304|0;if(d>>>0>=a>>>0){break f}while(1){j=u[h>>2];while(1){f=d;d=d+304|0;if(u[f>>2]>j){continue}break}while(1){a=a+ -304|0;if(!(u[a>>2]>j)){continue}break}if(f>>>0>a>>>0){d=f;break f}else{m=kV(k,f,304);f=kV(f,a,304);h=(n=kV(a,m,304),o=h,p=(f|0)==(h|0),p?n:o);i=i+1|0;continue}}}Pz(e,e+304|0,g);break d}if(!(u[h>>2]>u[d>>2]^1|(d|0)==(h|0))){a=kV(k,d,304);kV(d,h,304);kV(h,a,304);i=i+1|0}if(!i){f=Qz(e,d);a=d+304|0;if(Qz(a,b)){b=d;a=e;if(!f){continue a}break d}if(f){continue b}}if(((d-e|0)/304|0)<((b-d|0)/304|0)){Gz(e,d,c);a=d+304|0;continue b}Gz(d+304|0,b,c);b=d;a=e;continue a}a=g;if((d|0)==(a|0)){break d}while(1){j=u[e>>2];while(1){f=d;d=d+304|0;if(!(j>u[f>>2])){continue}break}while(1){a=a+ -304|0;if(j>u[a>>2]){continue}break}if(f>>>0>=a>>>0){e=f;continue c}else{i=kV(k,f,304);kV(f,a,304);kV(a,i,304);continue}}}break}break}break}ue=k+304|0}function Fz(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=0,o=0,p=0;k=ue-304|0;ue=k;a:while(1){g=b+ -304|0;b:while(1){e=a;c:while(1){d:{e:{f:{g:{a=b-e|0;d=(a|0)/304|0;if(d>>>0<=5){h:{switch(d-2|0){case 0:if(!(u[g>>2]>2])){break d}a=kV(k,e,304);kV(e,g,304);kV(g,a,304);break d;case 2:Hz(e,e+304|0,e+608|0,g);break d;case 1:break g;case 3:break h;default:break d}}Iz(e,e+304|0,e+608|0,e+912|0,g);break d}if((a|0)<=9423){Jz(e,b);break d}h=w((a>>>0)/608|0,304)+e|0;i:{if((a|0)>=303697){a=w((a>>>0)/1216|0,304);i=Iz(e,a+e|0,h,a+h|0,g);break i}i=Kz(e,h,g)}a=g;j=u[e>>2];l=u[h>>2];if(!(j>2]){break e}if((d|0)==(g|0)){break d}while(1){if(!!(j>2])){a=kV(k,d,304);d=kV(d,g,304);kV(g,a,304);d=d+304|0;break e}d=d+304|0;if((g|0)!=(d|0)){continue}break}break d}if(!(u[a>>2]>>0>=a>>>0){break f}while(1){j=u[h>>2];while(1){f=d;d=d+304|0;if(u[f>>2]>2]>>0>a>>>0){d=f;break f}else{m=kV(k,f,304);f=kV(f,a,304);h=(n=kV(a,m,304),o=h,p=(f|0)==(h|0),p?n:o);i=i+1|0;continue}}}Kz(e,e+304|0,g);break d}if(!(u[h>>2]>2]^1|(d|0)==(h|0))){a=kV(k,d,304);kV(d,h,304);kV(h,a,304);i=i+1|0}if(!i){f=Lz(e,d);a=d+304|0;if(Lz(a,b)){b=d;a=e;if(!f){continue a}break d}if(f){continue b}}if(((d-e|0)/304|0)<((b-d|0)/304|0)){Fz(e,d,c);a=d+304|0;continue b}Fz(d+304|0,b,c);b=d;a=e;continue a}a=g;if((d|0)==(a|0)){break d}while(1){j=u[e>>2];while(1){f=d;d=d+304|0;if(!(j>2])){continue}break}while(1){a=a+ -304|0;if(j>2]){continue}break}if(f>>>0>=a>>>0){e=f;continue c}else{i=kV(k,f,304);kV(f,a,304);kV(a,i,304);continue}}}break}break}break}ue=k+304|0}function DA(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=0,o=0,p=0;k=ue-272|0;ue=k;a:while(1){g=b+ -272|0;b:while(1){e=a;c:while(1){d:{e:{f:{g:{a=b-e|0;d=(a|0)/272|0;if(d>>>0<=5){h:{switch(d-2|0){case 0:if(!(u[g>>2]>u[e>>2])){break d}a=kV(k,e,272);kV(e,g,272);kV(g,a,272);break d;case 2:JA(e,e+272|0,e+544|0,g);break d;case 1:break g;case 3:break h;default:break d}}KA(e,e+272|0,e+544|0,e+816|0,g);break d}if((a|0)<=8431){LA(e,b);break d}h=w((a>>>0)/544|0,272)+e|0;i:{if((a|0)>=271729){a=w((a>>>0)/1088|0,272);i=KA(e,a+e|0,h,a+h|0,g);break i}i=MA(e,h,g)}a=g;j=u[e>>2];l=u[h>>2];if(!(j>l)){while(1){a=a+ -272|0;if((e|0)==(a|0)){d=e+272|0;if(j>u[g>>2]){break e}if((d|0)==(g|0)){break d}while(1){if(!!(j>u[d>>2])){a=kV(k,d,272);d=kV(d,g,272);kV(g,a,272);d=d+272|0;break e}d=d+272|0;if((g|0)!=(d|0)){continue}break}break d}if(!(u[a>>2]>l)){continue}break}d=kV(k,e,272);kV(e,a,272);kV(a,d,272);i=i+1|0}d=e+272|0;if(d>>>0>=a>>>0){break f}while(1){j=u[h>>2];while(1){f=d;d=d+272|0;if(u[f>>2]>j){continue}break}while(1){a=a+ -272|0;if(!(u[a>>2]>j)){continue}break}if(f>>>0>a>>>0){d=f;break f}else{m=kV(k,f,272);f=kV(f,a,272);h=(n=kV(a,m,272),o=h,p=(f|0)==(h|0),p?n:o);i=i+1|0;continue}}}MA(e,e+272|0,g);break d}if(!(u[h>>2]>u[d>>2]^1|(d|0)==(h|0))){a=kV(k,d,272);kV(d,h,272);kV(h,a,272);i=i+1|0}if(!i){f=NA(e,d);a=d+272|0;if(NA(a,b)){b=d;a=e;if(!f){continue a}break d}if(f){continue b}}if(((d-e|0)/272|0)<((b-d|0)/272|0)){DA(e,d,c);a=d+272|0;continue b}DA(d+272|0,b,c);b=d;a=e;continue a}a=g;if((d|0)==(a|0)){break d}while(1){j=u[e>>2];while(1){f=d;d=d+272|0;if(!(j>u[f>>2])){continue}break}while(1){a=a+ -272|0;if(j>u[a>>2]){continue}break}if(f>>>0>=a>>>0){e=f;continue c}else{i=kV(k,f,272);kV(f,a,272);kV(a,i,272);continue}}}break}break}break}ue=k+272|0}function CA(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=0,o=0,p=0;k=ue-272|0;ue=k;a:while(1){g=b+ -272|0;b:while(1){e=a;c:while(1){d:{e:{f:{g:{a=b-e|0;d=(a|0)/272|0;if(d>>>0<=5){h:{switch(d-2|0){case 0:if(!(u[g>>2]>2])){break d}a=kV(k,e,272);kV(e,g,272);kV(g,a,272);break d;case 2:EA(e,e+272|0,e+544|0,g);break d;case 1:break g;case 3:break h;default:break d}}FA(e,e+272|0,e+544|0,e+816|0,g);break d}if((a|0)<=8431){GA(e,b);break d}h=w((a>>>0)/544|0,272)+e|0;i:{if((a|0)>=271729){a=w((a>>>0)/1088|0,272);i=FA(e,a+e|0,h,a+h|0,g);break i}i=HA(e,h,g)}a=g;j=u[e>>2];l=u[h>>2];if(!(j>2]){break e}if((d|0)==(g|0)){break d}while(1){if(!!(j>2])){a=kV(k,d,272);d=kV(d,g,272);kV(g,a,272);d=d+272|0;break e}d=d+272|0;if((g|0)!=(d|0)){continue}break}break d}if(!(u[a>>2]>>0>=a>>>0){break f}while(1){j=u[h>>2];while(1){f=d;d=d+272|0;if(u[f>>2]>2]>>0>a>>>0){d=f;break f}else{m=kV(k,f,272);f=kV(f,a,272);h=(n=kV(a,m,272),o=h,p=(f|0)==(h|0),p?n:o);i=i+1|0;continue}}}HA(e,e+272|0,g);break d}if(!(u[h>>2]>2]^1|(d|0)==(h|0))){a=kV(k,d,272);kV(d,h,272);kV(h,a,272);i=i+1|0}if(!i){f=IA(e,d);a=d+272|0;if(IA(a,b)){b=d;a=e;if(!f){continue a}break d}if(f){continue b}}if(((d-e|0)/272|0)<((b-d|0)/272|0)){CA(e,d,c);a=d+272|0;continue b}CA(d+272|0,b,c);b=d;a=e;continue a}a=g;if((d|0)==(a|0)){break d}while(1){j=u[e>>2];while(1){f=d;d=d+272|0;if(!(j>2])){continue}break}while(1){a=a+ -272|0;if(j>2]){continue}break}if(f>>>0>=a>>>0){e=f;continue c}else{i=kV(k,f,272);kV(f,a,272);kV(a,i,272);continue}}}break}break}break}ue=k+272|0}function lt(a,b,c,d){var g=x(0),h=x(0),i=x(0),l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=0;p=x(1);i=x(1);if(c!=x(0)){i=c;c=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));a:{if(x(y(c))>2]=0;q[a+44>>2]=0;q[a+48>>2]=0;u[a+40>>2]=i*p;q[a+28>>2]=0;u[a+24>>2]=-o;n=a;s=i;if(b==x(0)){b=x(1)}else{c=b;d=c;b=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));c:{if(x(y(b))>2]=s*b;u[a+16>>2]=i*c;u[a+8>>2]=i*m;q[a+52>>2]=0;q[a+56>>2]=0;q[a+60>>2]=1065353216;d=x(o*b);u[a+36>>2]=x(m*c)+x(p*d);i=x(o*c);u[a+32>>2]=x(p*i)-x(m*b);u[a+4>>2]=x(m*d)-x(p*c);u[a>>2]=x(p*b)+x(m*i)}function yj(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=0;d=ue-288|0;ue=d;a:{if(!!(u[b+100>>2]<=c)){e=q[b+52>>2];q[a>>2]=q[b+48>>2];q[a+4>>2]=e;e=q[b+92>>2];q[a+40>>2]=q[b+88>>2];q[a+44>>2]=e;e=q[b+84>>2];q[a+32>>2]=q[b+80>>2];q[a+36>>2]=e;e=q[b+76>>2];q[a+24>>2]=q[b+72>>2];q[a+28>>2]=e;e=b- -64|0;p=q[e+4>>2];q[a+16>>2]=q[e>>2];q[a+20>>2]=p;e=q[b+60>>2];q[a+8>>2]=q[b+56>>2];q[a+12>>2]=e;break a}if(!!(u[b+96>>2]>=c)){e=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=e;e=q[b+44>>2];q[a+40>>2]=q[b+40>>2];q[a+44>>2]=e;e=q[b+36>>2];q[a+32>>2]=q[b+32>>2];q[a+36>>2]=e;e=q[b+28>>2];q[a+24>>2]=q[b+24>>2];q[a+28>>2]=e;e=q[b+20>>2];q[a+16>>2]=q[b+16>>2];q[a+20>>2]=e;e=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=e;break a}Ys(b,d+272|0,d+224|0,d+208|0);Ys(b+48|0,d+192|0,d+144|0,d+128|0);zj(d+112|0,d+224|0);zj(d+96|0,d+144|0);f=c;c=u[b+96>>2];c=x(x(f-c)/x(u[b+100>>2]-c));f=x(x(1)-c);u[d+92>>2]=x(c*u[d+140>>2])+x(f*u[d+220>>2]);u[d+88>>2]=x(c*u[d+136>>2])+x(f*u[d+216>>2]);u[d+84>>2]=x(c*u[d+132>>2])+x(f*u[d+212>>2]);u[d+80>>2]=x(u[d+128>>2]*c)+x(f*u[d+208>>2]);u[d+76>>2]=x(c*u[d+204>>2])+x(f*u[d+284>>2]);u[d+72>>2]=x(c*u[d+200>>2])+x(f*u[d+280>>2]);u[d+68>>2]=x(c*u[d+196>>2])+x(f*u[d+276>>2]);u[d+64>>2]=x(c*u[d+192>>2])+x(f*u[d+272>>2]);Aj(d+48|0,d+112|0,d+96|0,c);q[d+44>>2]=0;q[d+28>>2]=0;c=u[d+52>>2];f=u[d+56>>2];h=x(c*f);g=u[d+48>>2];k=u[d+60>>2];i=x(g*k);j=x(h+i);u[d+36>>2]=j+j;h=x(h-i);u[d+24>>2]=h+h;h=x(c*c);i=x(g*g);j=x(f*f);l=x(k*k);u[d+20>>2]=x(x(h-i)-j)+l;u[d+40>>2]=x(x(x(-i)-h)+j)+l;q[d+12>>2]=0;m=x(g*f);n=x(c*k);o=x(m-n);u[d+32>>2]=o+o;c=x(g*c);f=x(f*k);g=x(c+f);u[d+16>>2]=g+g;g=x(m+n);u[d+8>>2]=g+g;c=x(c-f);u[d+4>>2]=c+c;u[d>>2]=x(x(i-h)-j)+l;_s(a,d- -64|0,d,d+80|0)}ue=d+288|0}function sn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=x(0),i=0,j=x(0),k=0;f=ue-32|0;ue=f;k=JG();g=we;e=q[a+476>>2];i=a+480|0;if((e|0)!=(i|0)){while(1){d=e;q[d+248>>2]=q[d+248>>2]+1;c=q[d+4>>2];a:{if(!c){e=q[d+8>>2];if((d|0)==q[e>>2]){break a}c=d+8|0;while(1){d=q[c>>2];c=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break a}while(1){e=c;c=q[c>>2];if(c){continue}break}}if((e|0)!=(i|0)){continue}break}}e=q[a+488>>2];i=a+492|0;if((e|0)!=(i|0)){while(1){d=e;q[d+248>>2]=q[d+248>>2]+1;c=q[d+4>>2];b:{if(!c){e=q[d+8>>2];if((d|0)==q[e>>2]){break b}c=d+8|0;while(1){d=q[c>>2];c=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break b}while(1){e=c;c=q[c>>2];if(c){continue}break}}if((e|0)!=(i|0)){continue}break}}k=wW(k,g,-1e3,-1);e=q[a+464>>2];g=a+468|0;if((e|0)!=(g|0)){while(1){h=x(0);d=e;if(!r[d+80|0]){h=x(x(u[b>>2]*u[d+224>>2])*u[d+244>>2])}h=x(h+u[d+240>>2]);u[d+240>>2]=h;i=j>2];c:{if(c){while(1){e=c;c=q[c>>2];if(c){continue}break c}}e=q[d+8>>2];if((d|0)==q[e>>2]){break c}c=d+8|0;while(1){d=q[c>>2];c=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}}j=i?h:j;if((e|0)!=(g|0)){continue}break}}h=u[b+4>>2];d:{if(h!=x(0)){j=x(j/h);e:{if(x(y(j))>2]+348>>2]](a);c=q[a+12>>2];f:{if((c|0)==q[a+16>>2]){tn(a,b,e);break f}Qp(c);d=q[a+12>>2];q[f+28>>2]=5036;q[f+24>>2]=195;c=_S(20);q[c>>2]=a;g=q[b+4>>2];q[c+4>>2]=q[b>>2];q[c+8>>2]=g;o[c+12|0]=r[b+8|0];g=r[f+13|0]|r[f+14|0]<<8;o[c+13|0]=g;o[c+14|0]=g>>>8;o[c+15|0]=r[f+15|0];q[c+16>>2]=e;q[f+16>>2]=c;Pp(d,f+16|0);e=q[q[f+28>>2]+4>>2];if(e){n[e](q[f+16>>2])}if(!r[b+8|0]){break f}Qp(q[a+12>>2])}b=wW(JG(),we,1e3,0)+k|0;q[a+572>>2]=b;n[q[q[a>>2]+352>>2]](a);vn(a);ue=f+32|0}function pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=x(0);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=15){c=q[a+4>>2];Es(a+3808|0,b,n[q[q[c>>2]+36>>2]](c)|0)}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=1700){c=q[b>>2];q[a+3804>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];a:{if((n[q[q[c>>2]+36>>2]](c)|0)>=3){c=q[b>>2];break a}c=q[b>>2]+4|0;q[b>>2]=c}q[a+3728>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];ai(a+3732|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3776>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if((d|0)==1){e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);d=a+3780|0;q[d>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[d+4>>2]=e;c=q[b>>2]+8|0;q[b>>2]=c}d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+3788>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;b:{if(d>>>0>1){break b}if(d-1){c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<8){break b}c=q[b>>2];e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);d=a+3792|0;q[d>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[d+4>>2]=e;q[b>>2]=q[b>>2]+8;q[a+3788>>2]=1;break b}e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);d=a+3792|0;q[d>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[d+4>>2]=e;q[b>>2]=q[b>>2]+8}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=13){c=q[b>>2];q[a+3800>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)<=2){q[b>>2]=q[b>>2]+4}b=q[a+4>>2];if(!((n[q[q[b>>2]+36>>2]](b)|0)<8|q[a+3788>>2]!=1)){b=a+3792|0;c=q[a+4>>2];f=b,g=x(x(n[q[q[c>>2]+32>>2]](c))*u[b>>2]),u[f>>2]=g;b=a+3796|0;a=q[a+4>>2];f=b,g=x(x(n[q[q[a>>2]+32>>2]](a))*u[b>>2]),u[f>>2]=g}}function ur(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=ue-160|0;ue=g;u[g+156>>2]=f;h=q[b+28>>2];b=q[b+24>>2];b=w((d|0)%((h-b|0)/36|0)|0,36)+b|0;d=q[b+12>>2];h=q[b+16>>2]-d|0;a:{if(!h){yp(a);yp(a+12|0);yp(a+24|0);yp(a+36|0);break a}c=d+w((c|0)%(((h|0)/12|0)+ -1|0)|0,12)|0;i=q[c+8>>2];j=q[c+4>>2];b=q[b>>2];k=q[c>>2];q[g+152>>2]=1051372203;q[g+148>>2]=1051372203;q[g+144>>2]=1051372203;yp(g+96|0);c=yp(g+108|0);l=g+120|0;d=yp(l);h=yp(g+132|0);k=b+w(k,60)|0;Dp(g+32|0,k,g+152|0);j=b+w(j,60)|0;Dp(g+16|0,j,g+148|0);Bp(g+48|0,g+32|0,g+16|0);b=b+w(i,60)|0;Dp(g,b,g+144|0);Bp(g- -64|0,g+48|0,g);Dp(g+80|0,g- -64|0,g+156|0);m=g+104|0;i=g+88|0;q[m>>2]=q[i>>2];n=q[g+84>>2];q[g+96>>2]=q[g+80>>2];q[g+100>>2]=n;Dp(g+48|0,k+12|0,g+152|0);Dp(g+32|0,j+12|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+12|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[c+8>>2]=q[i>>2];n=q[g+84>>2];q[c>>2]=q[g+80>>2];q[c+4>>2]=n;Dp(g+48|0,k+24|0,g+152|0);Dp(g+32|0,j+24|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+24|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[d+8>>2]=q[i>>2];c=q[g+84>>2];q[d>>2]=q[g+80>>2];q[d+4>>2]=c;Dp(g+48|0,k+36|0,g+152|0);Dp(g+32|0,j+36|0,g+148|0);Bp(g- -64|0,g+48|0,g+32|0);Dp(g+16|0,b+36|0,g+144|0);Bp(g+80|0,g- -64|0,g+16|0);q[h+8>>2]=q[i>>2];b=q[g+84>>2];q[h>>2]=q[g+80>>2];q[h+4>>2]=b;if(!e){b=g+116|0;u[b>>2]=-u[b>>2];b=g+128|0;u[b>>2]=-u[b>>2];b=g+140|0;u[b>>2]=-u[b>>2];u[g+104>>2]=-u[g+104>>2]}b=q[g+100>>2];q[a>>2]=q[g+96>>2];q[a+4>>2]=b;b=q[g+140>>2];q[a+40>>2]=q[g+136>>2];q[a+44>>2]=b;b=q[g+132>>2];q[a+32>>2]=q[g+128>>2];q[a+36>>2]=b;b=q[l+4>>2];q[a+24>>2]=q[l>>2];q[a+28>>2]=b;b=q[g+116>>2];q[a+16>>2]=q[g+112>>2];q[a+20>>2]=b;b=q[m+4>>2];q[a+8>>2]=q[m>>2];q[a+12>>2]=b}ue=g+160|0}function lo(a,b,c,d){var g=x(0),h=x(0),i=x(0),l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=0;p=x(1);m=x(1);if(c!=x(0)){m=c;c=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));a:{if(x(y(c))>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;u[a+32>>2]=m*p;u[a+28>>2]=-o;u[a+24>>2]=m*l;n=a;s=m;if(b==x(0)){b=x(1)}else{c=b;d=c;b=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));c:{if(x(y(b))>2]=s*b;u[a+4>>2]=m*c;d=x(o*b);u[a+20>>2]=x(l*c)+x(p*d);u[a+12>>2]=x(l*d)-x(p*c);c=x(o*c);u[a+8>>2]=x(p*c)-x(l*b);u[a>>2]=x(p*b)+x(l*c)}function dt(a,b,c,d){var g=x(0),h=x(0),i=x(0),l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=0;p=x(1);i=x(1);if(c!=x(0)){i=c;c=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));a:{if(x(y(c))>2]=0;q[a+44>>2]=0;u[a+40>>2]=i*p;q[a+28>>2]=0;u[a+24>>2]=-o;n=a;s=i;if(b==x(0)){b=x(1)}else{c=b;d=c;b=x(x(c*x(.15915493667125702))+(f(0,(k(c),e(0))&-2147483648|1056964608),j()));c:{if(x(y(b))>2]=s*b;u[a+16>>2]=i*c;u[a+8>>2]=i*m;d=x(o*b);u[a+36>>2]=x(m*c)+x(p*d);i=x(o*c);u[a+32>>2]=x(p*i)-x(m*b);u[a+4>>2]=x(m*d)-x(p*c);u[a>>2]=x(p*b)+x(m*i)}function aV(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=q[a+4>>2];c=g&3;d=g&-8;f=d+a|0;a:{if(!c){c=0;if(b>>>0<256){break a}if(d>>>0>=b+4>>>0){c=a;if(d-b>>>0<=q[93230]<<1>>>0){break a}}return 0}b:{if(d>>>0>=b>>>0){c=d-b|0;if(c>>>0<16){break b}q[a+4>>2]=g&1|b|2;b=a+b|0;q[b+4>>2]=c|3;q[f+4>>2]=q[f+4>>2]|1;dV(b,c);break b}c=0;if((f|0)==q[93116]){d=d+q[93113]|0;if(d>>>0<=b>>>0){break a}q[a+4>>2]=g&1|b|2;c=a+b|0;b=d-b|0;q[c+4>>2]=b|1;q[93113]=b;q[93116]=c;break b}if((f|0)==q[93115]){d=d+q[93112]|0;if(d>>>0>>0){break a}c=d-b|0;c:{if(c>>>0>=16){q[a+4>>2]=g&1|b|2;b=a+b|0;q[b+4>>2]=c|1;d=a+d|0;q[d>>2]=c;q[d+4>>2]=q[d+4>>2]&-2;break c}q[a+4>>2]=d|g&1|2;b=a+d|0;q[b+4>>2]=q[b+4>>2]|1;c=0;b=0}q[93115]=b;q[93112]=c;break b}e=q[f+4>>2];if(e&2){break a}h=d+(e&-8)|0;if(h>>>0>>0){break a}j=h-b|0;d:{if(e>>>0<=255){c=q[f+8>>2];e=e>>>3|0;d=q[f+12>>2];if((c|0)==(d|0)){l=372440,m=q[93110]&zW(-2,e),q[l>>2]=m;break d}q[c+12>>2]=d;q[d+8>>2]=c;break d}i=q[f+24>>2];d=q[f+12>>2];e:{if((f|0)!=(d|0)){c=q[f+8>>2];q[c+12>>2]=d;q[d+8>>2]=c;break e}f:{c=f+20|0;e=q[c>>2];if(e){break f}c=f+16|0;e=q[c>>2];if(e){break f}d=0;break e}while(1){k=c;d=e;c=d+20|0;e=q[c>>2];if(e){continue}c=d+16|0;e=q[d+16>>2];if(e){continue}break}q[k>>2]=0}if(!i){break d}c=q[f+28>>2];e=(c<<2)+372744|0;g:{if((f|0)==q[e>>2]){q[e>>2]=d;if(d){break g}l=372444,m=q[93111]&zW(-2,c),q[l>>2]=m;break d}q[((f|0)==q[i+16>>2]?16:20)+i>>2]=d;if(!d){break d}}q[d+24>>2]=i;c=q[f+16>>2];if(c){q[d+16>>2]=c;q[c+24>>2]=d}c=q[f+20>>2];if(!c){break d}q[d+20>>2]=c;q[c+24>>2]=d}if(j>>>0<=15){q[a+4>>2]=g&1|h|2;b=a+h|0;q[b+4>>2]=q[b+4>>2]|1;break b}q[a+4>>2]=g&1|b|2;b=a+b|0;q[b+4>>2]=j|3;c=a+h|0;q[c+4>>2]=q[c+4>>2]|1;dV(b,j)}c=a}return c}function Vi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=x(0);q[b>>2]=q[b>>2]+4;c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=15){c=q[a+4>>2];Es(a+4144|0,b,n[q[q[c>>2]+36>>2]](c)|0)}c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+4116>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if(!d){q[a+4120>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2]+4|0;q[b>>2]=c}d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+4124>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if(!d){q[a+4128>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2]+4|0;q[b>>2]=c}d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a+4132>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if(!d){q[a+4136>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=13){c=q[b>>2];q[a+4140>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];if((n[q[q[c>>2]+36>>2]](c)|0)>=1700){c=q[b>>2];q[a+4168>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+4172>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4}c=q[a+4>>2];ai(a+3852|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[a+4>>2];ai(a+3984|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[a+4>>2];ai(a+3896|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[a+4>>2];ai(a+4028|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=q[a+4>>2];ai(a+3940|0,b,n[q[q[c>>2]+36>>2]](c)|0);c=b;b=q[a+4>>2];ai(a+4072|0,c,n[q[q[b>>2]+36>>2]](b)|0);b=q[a+4>>2];if((n[q[q[b>>2]+36>>2]](b)|0)>=8){b=a+4120|0;c=q[a+4>>2];e=b,f=x(x(n[q[q[c>>2]+32>>2]](c))*u[b>>2]),u[e>>2]=f;b=a+4128|0;c=q[a+4>>2];e=b,f=x(x(n[q[q[c>>2]+32>>2]](c))*u[b>>2]),u[e>>2]=f;b=a+4136|0;a=q[a+4>>2];e=b,f=x(x(n[q[q[a>>2]+32>>2]](a))*u[b>>2]),u[e>>2]=f}}function hx(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=ue-256|0;ue=e;c=q[a+32>>2];d=q[a+36>>2];a:{if((c|0)==(d|0)){break a}b=2147483647;if((c|0)!=(d|0)){while(1){g=q[c+932>>2];i=g+q[c+936>>2]|0;f=(f|0)>(i|0)?f:i;b=(b|0)<(g|0)?b:g;c=c+948|0;if((d|0)!=(c|0)){continue}break}}d=sy(q[a+4>>2]);q[e+192>>2]=0;q[e+128>>2]=0;b:{c:{d=d?d+8|0:0;c=f-b|0;if(n[q[q[d>>2]+12>>2]](d,c,e+128|0,e+192|0,q[q[a+32>>2]+940>>2]<<2)){kV(q[e+192>>2],q[a+8>>2]+b|0,c);n[q[q[d>>2]+20>>2]](d);c=q[a+32>>2];j=q[a+36>>2];if((c|0)==(j|0)){break b}while(1){b=q[a+4>>2];n[q[q[b>>2]+68>>2]](e+192|0,b);b=q[c+800>>2];d:{e:{if(b>>>0<=6){d=40;g=1;f:{switch(b-1|0){case 5:g=q[q[c+808>>2]+76>>2]?2:1;d=(q[c+796>>2]+q[c+792>>2]<<2)+40|0;break d;default:d=24;break e;case 3:case 4:d=88;break e;case 2:break f;case 0:case 1:break d}}d=72;break e}d=0}g=1}i=d<<2;f=0;while(1){b=q[c+936>>2];h=q[a+20>>2];if((b|0)>(h|0)){b=h-((h|0)%(i|0)|0)|0}h=q[a+4>>2];if(((b|0)/(d|0)|0)>n[q[q[h>>2]+64>>2]](h)<<2){b=q[a+4>>2];b=w(n[q[q[b>>2]+64>>2]](b)|0,i)}h=q[a+4>>2];n[q[q[h>>2]+76>>2]](e- -64|0,h);vx(a,ht(e+128|0,e- -64|0),ht(e,e+192|0),q[c+932>>2],b,q[c+940>>2],f,c);f=f+1|0;if((g|0)!=(f|0)){continue}break}c=c+948|0;if((j|0)!=(c|0)){continue}break}break c}b=q[q[a+4>>2]+4>>2];q[b+324>>2]=q[b+324>>2]+1;b=q[q[a+4>>2]+4>>2];q[b+324>>2]=q[b+324>>2]%q[q[q[a+4>>2]+4>>2]+328>>2];break a}c=q[a+32>>2];b=q[a+36>>2];if((c|0)==(b|0)){break b}while(1){d=b+ -948|0;g=b+ -24|0;f=q[g>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[g>>2]=0}tx(b+ -148|0);b=d;if((b|0)!=(c|0)){continue}break}}q[a+36>>2]=c;b=q[q[a+4>>2]+4>>2];q[b+324>>2]=q[b+324>>2]+1;b=q[q[a+4>>2]+4>>2];q[b+324>>2]=q[b+324>>2]%q[q[q[a+4>>2]+4>>2]+328>>2]}ue=e+256|0}function gk(a,b,c,d,e,f){var g=0,h=0,i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0);g=ue-16|0;ue=g;a:{b:{h=q[b>>2];if(h>>>0>60){break b}c:{switch(h-1|0){default:q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;break a;case 19:c=q[b+4>>2];b=q[b+8>>2];q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=c;q[a+4>>2]=b;break a;case 20:b=q[c>>2];c=q[c+4>>2];q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=b;q[a+4>>2]=c;break a;case 21:k=u[c+20>>2];l=u[b+44>>2];m=u[b+36>>2];n=u[b+40>>2];i=u[c>>2];o=u[c+16>>2];j=u[c+4>>2];q[a+8>>2]=0;q[a+12>>2]=0;e=x(B(x(A(x(e/f),x(1))),x(0)));e=x(x(l*e)+x(x(e*x(e*x(e*m)))+x(e*x(e*n))));u[a+4>>2]=j+x(x(k-j)*e);u[a>>2]=i+x(x(o-i)*e);break a;case 22:pj(g,q[b+4>>2],e,f);u[a>>2]=u[g>>2]+u[c>>2];e=u[c+4>>2];f=u[g+4>>2];q[a+8>>2]=0;q[a+12>>2]=0;u[a+4>>2]=f+e;break a;case 39:c=q[b+8>>2];q[a>>2]=q[b+4>>2];q[a+4>>2]=c;c=q[b+16>>2];q[a+8>>2]=q[b+12>>2];q[a+12>>2]=c;break a;case 52:vj(g,q[b+4>>2],e,f);u[a>>2]=x(u[g>>2]+u[c>>2])/x(255);u[a+4>>2]=x(u[g+4>>2]+u[c+4>>2])/x(255);u[a+8>>2]=x(u[g+8>>2]+u[c+8>>2])/x(255);u[a+12>>2]=x(u[g+12>>2]+u[c+12>>2])/x(255);break a;case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 53:case 54:case 55:case 56:case 57:case 58:break b;case 59:break c}}b=q[d+44>>2];q[a>>2]=q[d+40>>2];q[a+4>>2]=b;b=q[d+52>>2];q[a+8>>2]=q[d+48>>2];q[a+12>>2]=b;break a}q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0}ue=g+16|0}function Go(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),p=0,t=0,v=x(0),y=0,z=0,A=0;k=ue-16|0;ue=k;t=q[c>>2];h=-2128831035;p=q[c+4>>2];j=p<<1;if(j){c=0;while(1){h=w(r[c+t|0]^h,16777619);c=c+1|0;if((j|0)!=(c|0)){continue}break}}f=q[b+4>>2];a:{b:{if(!f){break b}j=q[b>>2];l=yW(f);i=f+ -1&h;c:{if(l>>>0<=1){break c}c=h;i=c;if(c>>>0>>0){break c}i=(h>>>0)%(f>>>0)|0}c=i;i=c;c=q[(c<<2)+j>>2];if(!c){break b}g=q[c>>2];if(!g){break b}y=f+ -1|0;z=l>>>0>1;while(1){c=q[g+4>>2];if((h|0)!=(c|0)){d:{if(!z){c=c&y;break d}if(c>>>0>>0){break d}c=(c>>>0)%(f>>>0)|0}if((c|0)!=(i|0)){break b}}e:{if(q[g+12>>2]!=(p|0)){break e}if(!p){break a}c=q[g+8>>2];l=p;j=t;while(1){if(s[j>>1]!=s[c>>1]){break e}j=j+2|0;c=c+2|0;l=l+ -1|0;if(l){continue}break}break a}g=q[g>>2];if(g){continue}break}}wt(k);g=n[q[k+8>>2]](k,24)|0;c=q[q[k+12>>2]+4>>2];if(c){n[c](q[k>>2])}c=q[d+4>>2];d=q[d>>2];q[g+16>>2]=0;q[g+8>>2]=d;q[g+12>>2]=c;d=q[e>>2];q[e>>2]=0;c=q[g+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[g+16>>2]=0}q[g+16>>2]=d;c=q[e+4>>2];q[g+4>>2]=h;q[g+20>>2]=c;q[g>>2]=0;m=u[b+16>>2];v=x(q[b+12>>2]+1>>>0);f:{if(x(m*x(f>>>0))>>0<3|f<<1;c=b;m=x(D(x(v/m)));g:{if(m=x(0)){d=~~m>>>0;break g}d=0}$o(c,e>>>0>>0?d:e);f=q[b+4>>2];if(!(f&f+ -1)){i=f+ -1&h;break f}if(h>>>0>>0){i=h;break f}i=(h>>>0)%(f>>>0)|0}d=i<<2;c=q[d+q[b>>2]>>2];h:{i:{if(!c){q[g>>2]=q[b+8>>2];q[b+8>>2]=g;q[d+q[b>>2]>>2]=b+8;c=q[g>>2];if(!c){break h}c=q[c+4>>2];d=f+ -1|0;j:{if(!(d&f)){c=c&d;break j}if(c>>>0>>0){break j}c=(c>>>0)%(f>>>0)|0}c=q[b>>2]+(c<<2)|0;break i}q[g>>2]=q[c>>2]}q[c>>2]=g}A=1;q[b+12>>2]=q[b+12>>2]+1}o[a+4|0]=A;q[a>>2]=g;ue=k+16|0}function oh(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=q[b>>2];e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=e;d=q[b>>2];q[b>>2]=d+4;a:{b:{if(e>>>0>6){break b}c:{switch(e-1|0){default:e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=d+8|0;q[b>>2]=d;f=a+8|0;kV((c|0)>13?a+4|0:f,d,e);q[b>>2]=e+q[b>>2];if(q[a+4>>2]>-1|u[f>>2]!=x(1)|(u[a+12>>2]!=x(1)|u[a+16>>2]!=x(1))){break b}q[a>>2]=2147483646;return;case 0:e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=d+8|0;q[b>>2]=d;kV((c|0)>13?a+20|0:a+44|0,d,e);break a;case 1:e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=d+8|0;q[b>>2]=d;vh(a+116|0,d,e,c);break a;case 2:c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=d+8|0;q[b>>2]=d;kV(a+276|0,d,c);q[b>>2]=c+q[b>>2];return;case 3:e=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);d=d+8|0;q[b>>2]=d;wh(a+300|0,d,e,c);break a;case 4:q[b>>2]=d+8;d=_S(136);e=lV(d,0,136);gj(e+4|0,x(0));gj(e+48|0,x(0));gj(e+92|0,x(0));f=q[a+396>>2];q[a+396>>2]=e;e=b;if(f){d=q[f+112>>2];if(d){q[f+116>>2]=d;_U(d)}d=q[f+68>>2];if(d){q[f+72>>2]=d;_U(d)}d=q[f+24>>2];if(d){q[f+28>>2]=d;_U(d)}_U(f);d=q[a+396>>2]}g=e,h=rj(d,q[b>>2],c)+q[b>>2]|0,q[g>>2]=h;a=q[a+396>>2];q[a+124>>2]=1065353216;q[a+80>>2]=1065353216;q[a+36>>2]=1065353216;return;case 5:break c}}q[b>>2]=d+8;d=_S(48);q[d>>2]=0;q[d+4>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;q[d+24>>2]=0;q[d+28>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;gj(d+4|0,x(0));f=q[a+400>>2];q[a+400>>2]=d;e=b;if(f){d=q[f+24>>2];if(d){q[f+28>>2]=d;_U(d)}_U(f);d=q[a+400>>2]}g=e,h=mj(d,q[b>>2],c)+q[b>>2]|0,q[g>>2]=h;q[q[a+400>>2]+36>>2]=1065353216}return}q[b>>2]=e+q[b>>2]}function Eu(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0;c=ue-112|0;ue=c;i=q[a+184>>2];j=q[a+180>>2];h=r[a+176|0];d=q[a+216>>2];q[c+96>>2]=q[a+212>>2];q[c+100>>2]=d;d=q[a+208>>2];q[c+88>>2]=q[a+204>>2];q[c+92>>2]=d;d=q[a+200>>2];q[c+80>>2]=q[a+196>>2];q[c+84>>2]=d;d=a+188|0;b=d;e=q[b+4>>2];q[c+72>>2]=q[b>>2];q[c+76>>2]=e;k=q[a+220>>2];l=q[a+224>>2];m=q[a+228>>2];n=q[a+232>>2];p=q[a+236>>2];s=q[a+240>>2];t=q[a+244>>2];u=q[a+248>>2];e=q[a+316>>2];b=c- -64|0;q[b>>2]=q[a+312>>2];q[b+4>>2]=e;b=q[a+308>>2];q[c+56>>2]=q[a+304>>2];q[c+60>>2]=b;b=q[a+300>>2];q[c+48>>2]=q[a+296>>2];q[c+52>>2]=b;b=q[a+292>>2];q[c+40>>2]=q[a+288>>2];q[c+44>>2]=b;b=q[a+284>>2];q[c+32>>2]=q[a+280>>2];q[c+36>>2]=b;b=q[a+276>>2];q[c+24>>2]=q[a+272>>2];q[c+28>>2]=b;b=q[a+268>>2];q[c+16>>2]=q[a+264>>2];q[c+20>>2]=b;b=q[a+260>>2];q[c+8>>2]=q[a+256>>2];q[c+12>>2]=b;b=q[a+24>>2]+q[a+20>>2]|0;f=q[a+12>>2];e=q[a+8>>2];g=f-e|0;if((b|0)==((g?w(g>>2,28)+ -1|0:0)|0)){Fu(a+4|0);f=q[a+12>>2];e=q[a+8>>2];b=q[a+20>>2]+q[a+24>>2]|0}g=a+176|0;h=h&3;if((e|0)!=(f|0)){f=e;e=(b>>>0)/28|0;b=q[f+(e<<2)>>2]+w(b-w(e,28)|0,144)|0}else{b=0}kV(b,g,144);o[a+176|0]=h;q[a+24>>2]=q[a+24>>2]+1;b=r[c+109|0]|r[c+110|0]<<8;o[a+177|0]=b;o[a+178|0]=b>>>8;o[a+179|0]=r[c+111|0];q[a+184>>2]=i;q[a+180>>2]=j;b=q[c+76>>2];q[d>>2]=q[c+72>>2];q[d+4>>2]=b;b=q[c+84>>2];q[d+8>>2]=q[c+80>>2];q[d+12>>2]=b;b=q[c+92>>2];q[d+16>>2]=q[c+88>>2];q[d+20>>2]=b;b=q[c+100>>2];q[d+24>>2]=q[c+96>>2];q[d+28>>2]=b;q[a+248>>2]=u;q[a+244>>2]=t;q[a+240>>2]=s;q[a+236>>2]=p;q[a+232>>2]=n;q[a+228>>2]=m;q[a+224>>2]=l;q[a+220>>2]=k;kV(a+252|0,c+4|0,68);ue=c+112|0;return g}function SP(){var a=0,b=0;TP(372160);q[93040]=355616;UP();VP();WP(28);yI(372336,355605);XP(372176);YP(372176);ZP();TP(371840);q[92960]=357208;$P(371840,_P(370372));TP(371848);q[92962]=357240;$P(371848,_P(370380));aQ();$P(371856,_P(370576));TP(371872);q[92968]=356196;$P(371872,_P(370568));TP(371880);q[92970]=356344;$P(371880,_P(370584));TP(371888);q[92972]=355688;a=371896,b=fM(),q[a>>2]=b;$P(371888,_P(370592));TP(371904);q[92976]=356492;$P(371904,_P(370600));QP(371912);$P(371912,_P(370608));TP(371920);p[185964]=11310;q[92980]=355736;CL(371932);$P(371920,_P(370616));TP(371952);q[92990]=46;q[92991]=44;q[92988]=355776;CL(371968);$P(371952,_P(370624));TP(371984);q[92996]=357272;$P(371984,_P(370388));TP(371992);q[92998]=357516;$P(371992,_P(370396));TP(372e3);q[93e3]=357728;$P(372e3,_P(370404));TP(372008);q[93002]=357960;$P(372008,_P(370412));TP(372016);q[93004]=358944;$P(372016,_P(370452));TP(372024);q[93006]=359092;$P(372024,_P(370460));TP(372032);q[93008]=359208;$P(372032,_P(370468));TP(372040);q[93010]=359324;$P(372040,_P(370476));TP(372048);q[93012]=359440;$P(372048,_P(370484));TP(372056);q[93014]=359604;$P(372056,_P(370492));TP(372064);q[93016]=359768;$P(372064,_P(370500));TP(372072);q[93018]=359932;$P(372072,_P(370508));TP(372080);q[93022]=361484;q[93020]=358160;q[93022]=358208;$P(372080,_P(370420));TP(372096);q[93026]=361520;q[93024]=358424;q[93026]=358472;$P(372096,_P(370428));TP(372112);ES(372120);q[93028]=358660;$P(372112,_P(370436));TP(372128);ES(372136);q[93032]=358816;$P(372128,_P(370444));TP(372144);q[93036]=360096;$P(372144,_P(370516));TP(372152);q[93038]=360216;$P(372152,_P(370524))}function bD(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=ue-32|0;ue=d;c=q[b+4>>2];q[a+12>>2]=q[b>>2];q[a+16>>2]=c;q[a+52>>2]=q[b+40>>2];c=q[b+36>>2];q[a+44>>2]=q[b+32>>2];q[a+48>>2]=c;c=q[b+28>>2];q[a+36>>2]=q[b+24>>2];q[a+40>>2]=c;c=q[b+20>>2];q[a+28>>2]=q[b+16>>2];q[a+32>>2]=c;c=q[b+12>>2];q[a+20>>2]=q[b+8>>2];q[a+24>>2]=c;c=q[b+44>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+56>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+56>>2]=0}q[a+56>>2]=q[b+44>>2];c=q[b+48>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+60>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+60>>2]=0}q[a+60>>2]=q[b+48>>2];c=q[b+52>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+64>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+64>>2]=0}q[a+64>>2]=q[b+52>>2];f=q[a+60>>2];if(f){n[q[q[f>>2]>>2]](f)|0}c=f+ -4|0;g=q[a+56>>2];if(g){n[q[q[g>>2]>>2]](g)|0}q[d>>2]=0;q[d+4>>2]=0;b=0;q[d+8>>2]=0;j=g?g+ -4|0:0;h=f?c:0;c=q[h+12>>2];if((c|0)!=q[h+16>>2]){while(1){i=(b<<5)+c|0;e=i+4|0;c=d;k=q[j+16>>2];if(o[i+15|0]<=-1){e=q[e>>2]}i=c;c=fw(k,e);q[i+16>>2]=c;e=q[d+4>>2];a:{if(e>>>0>2]){q[e>>2]=c;q[d+4>>2]=e+4;break a}yr(d,d+16|0)}b=b+1|0;c=q[h+12>>2];if(b>>>0>2]-c>>5>>>0){continue}break}}c=q[a+68>>2];if(c){q[a+72>>2]=c;b=q[a+76>>2];xt(d+16|0);n[q[d+24>>2]](d+16|0,c,b-c|0);b=q[q[d+28>>2]+4>>2];if(b){n[b](q[d+16>>2])}q[a+76>>2]=0;q[a+68>>2]=0;q[a+72>>2]=0}q[a+68>>2]=q[d>>2];q[a+72>>2]=q[d+4>>2];q[a+76>>2]=q[d+8>>2];q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;if(g){n[q[q[j+4>>2]+8>>2]](j+4|0)|0}if(f){n[q[q[h+4>>2]+8>>2]](h+4|0)|0}b:{if(!r[367112]){break b}c=_S(8);q[c>>2]=0;q[c+4>>2]=0;if(r[367112]){hw(c);q[c+4>>2]=366320}b=q[a+80>>2];q[a+80>>2]=c;if(!b){break b}_U(oC(b))}ue=d+32|0}function Ks(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0;j=ue+ -64|0;ue=j;l=q[f>>2];if((l|0)>=0){u[g>>2]=u[i>>2]*u[g>>2];u[g+4>>2]=u[i+4>>2]*u[g+4>>2];u[g+8>>2]=u[i+8>>2]*u[g+8>>2];m=(l<<4)+c|0;k=q[m+228>>2];q[j+56>>2]=q[m+224>>2];q[j+60>>2]=k;k=q[m+220>>2];q[j+48>>2]=q[m+216>>2];q[j+52>>2]=k;u[j+40>>2]=u[c+8>>2]/x(60);q[j+24>>2]=q[g+8>>2];k=q[g+4>>2];q[j+16>>2]=q[g>>2];q[j+20>>2]=k;q[j+28>>2]=0;u[j+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);k=q[b+260>>2]+w(l,60)|0;if(q[k+4>>2]==1){bl(j,k,c+40|0,j+40|0,j+16|0,e);k=q[j+12>>2];q[j+56>>2]=q[j+8>>2];q[j+60>>2]=k;k=q[j+4>>2];q[j+48>>2]=q[j>>2];q[j+52>>2]=k}k=q[j+52>>2];q[g>>2]=q[j+48>>2];q[g+4>>2]=k;k=g+8|0;q[k>>2]=q[j+56>>2];u[g>>2]=u[h>>2]*u[g>>2];u[g+4>>2]=u[h+4>>2]*u[g+4>>2];u[k>>2]=u[h+8>>2]*u[k>>2]}l=q[f+4>>2];if((l|0)>=0){u[g+12>>2]=u[i>>2]*u[g+12>>2];f=g+16|0;u[f>>2]=u[i+4>>2]*u[f>>2];k=g+20|0;u[k>>2]=u[i+8>>2]*u[k>>2];i=(l<<4)+c|0;f=q[i+228>>2];q[j+56>>2]=q[i+224>>2];q[j+60>>2]=f;f=q[i+220>>2];q[j+48>>2]=q[i+216>>2];q[j+52>>2]=f;u[j+40>>2]=u[c+8>>2]/x(60);q[j+24>>2]=q[k>>2];f=q[g+16>>2];q[j+16>>2]=q[g+12>>2];q[j+20>>2]=f;q[j+28>>2]=0;i=g+12|0;u[j+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);b=q[b+260>>2]+w(l,60)|0;if(q[b+4>>2]==1){bl(j,b,c+40|0,j+40|0,j+16|0,e);b=q[j+12>>2];q[j+56>>2]=q[j+8>>2];q[j+60>>2]=b;b=q[j+4>>2];q[j+48>>2]=q[j>>2];q[j+52>>2]=b}b=q[j+52>>2];q[i>>2]=q[j+48>>2];q[i+4>>2]=b;q[i+8>>2]=q[j+56>>2];u[g+12>>2]=u[h>>2]*u[g+12>>2];u[g+16>>2]=u[h+4>>2]*u[g+16>>2];u[g+20>>2]=u[h+8>>2]*u[g+20>>2]}b=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=b;b=q[g+20>>2];q[a+16>>2]=q[g+16>>2];q[a+20>>2]=b;b=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=b;ue=j- -64|0}function Bj(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;q[a+4>>2]=0;q[a+8>>2]=0;q[a+820>>2]=0;q[a+824>>2]=0;q[a+168>>2]=5300;q[a+160>>2]=0;q[a+164>>2]=0;q[a+156>>2]=e;q[a+152>>2]=d;q[a+148>>2]=c;q[a+144>>2]=b;q[a>>2]=3832;q[a+172>>2]=0;q[a+176>>2]=0;q[a+828>>2]=0;q[a+832>>2]=0;Ao(a+852|0);Ao(a+900|0);Ao(a+948|0);Ao(a+996|0);Ao(a+1044|0);Ao(a+1092|0);d=0;c=q[1829];b=a+1216|0;q[b>>2]=q[1828];q[b+4>>2]=c;c=q[1825];b=a+1200|0;q[b>>2]=q[1824];q[b+4>>2]=c;b=q[1821];q[a+1184>>2]=q[1820];q[a+1188>>2]=b;c=q[1831];b=a+1224|0;q[b>>2]=q[1830];q[b+4>>2]=c;c=q[1827];b=a+1208|0;q[b>>2]=q[1826];q[b+4>>2]=c;c=q[1823];b=a+1192|0;q[b>>2]=q[1822];q[b+4>>2]=c;c=q[1821];b=a+1232|0;q[b>>2]=q[1820];q[b+4>>2]=c;c=q[1823];b=a+1240|0;q[b>>2]=q[1822];q[b+4>>2]=c;c=q[1825];b=a+1248|0;q[b>>2]=q[1824];q[b+4>>2]=c;c=q[1827];b=a+1256|0;q[b>>2]=q[1826];q[b+4>>2]=c;c=q[1829];b=a+1264|0;q[b>>2]=q[1828];q[b+4>>2]=c;c=q[1831];b=a+1272|0;q[b>>2]=q[1830];q[b+4>>2]=c;b=a+1280|0;q[b>>2]=0;q[b+4>>2]=0;o[a+1288|0]=0;q[a+1428>>2]=0;o[a+1393|0]=0;o[a+1394|0]=0;o[a+1395|0]=0;o[a+1396|0]=0;o[a+1397|0]=0;o[a+1398|0]=0;o[a+1399|0]=0;o[a+1400|0]=0;b=a+1400|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;Ne(f+12|0,255,255,255,255);q[a+320>>2]=q[f+12>>2];Ne(f+8|0,255,255,255,255);q[a+324>>2]=q[f+8>>2];b=q[a+148>>2];a:{if((n[q[q[b>>2]+20>>2]](b)|0)<1){break a}b=0;while(1){c=vk(tk(q[a+152>>2],b));if(!c){break a}b:{if(d){q[d+312>>2]=c;break b}q[a+160>>2]=c}d=c;b=b+1|0;c=q[a+148>>2];if((b|0)<(n[q[q[c>>2]+20>>2]](c)|0)){continue}break}}q[a+848>>2]=0;q[a+1088>>2]=0;q[a+1040>>2]=0;q[a+992>>2]=0;q[a+944>>2]=0;q[a+896>>2]=0;ue=f+16|0;return a}function rG(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=ue-1056|0;ue=h;c=h+1048|0;q[c>>2]=0;q[c+4>>2]=0;c=h+1040|0;q[c>>2]=0;q[c+4>>2]=0;q[h+1032>>2]=0;q[h+1036>>2]=0;q[h+1024>>2]=0;q[h+1028>>2]=0;a:{b:{c:{d:{c=r[b|0];e:{if(!c){j=-1;d=1;break e}while(1){if(!r[a+f|0]){break b}d=c&255;f=f+1|0;q[(d<<2)+h>>2]=f;d=(h+1024|0)+(d>>>3&28)|0;q[d>>2]=q[d>>2]|1<<(c&31);c=r[b+f|0];if(c){continue}break}d=1;j=-1;if(f>>>0>1){break d}}g=-1;k=1;break c}i=1;c=1;while(1){l=r[(c+j|0)+b|0];g=r[b+d|0];f:{if((l|0)==(g|0)){if((c|0)==(i|0)){e=e+i|0;c=1;break f}c=c+1|0;break f}if(l>>>0>g>>>0){i=d-j|0;e=d;c=1;break f}j=e;e=e+1|0;i=1;c=1}d=c+e|0;if(d>>>0>>0){continue}break}g=-1;e=0;d=1;k=1;c=1;while(1){m=r[(c+g|0)+b|0];l=r[b+d|0];g:{if((m|0)==(l|0)){if((c|0)==(k|0)){e=e+k|0;c=1;break g}c=c+1|0;break g}if(m>>>0>>0){k=d-g|0;e=d;c=1;break g}g=e;e=e+1|0;k=1;c=1}d=c+e|0;if(d>>>0>>0){continue}break}d=i}c=g+1>>>0>j+1>>>0;i=c?k:d;n=c?g:j;m=n+1|0;h:{if(sG(b,i+b|0,m)){c=(n^-1)+f|0;i=(n>>>0>c>>>0?n:c)+1|0;o=f-i|0;c=0;break h}o=f-i|0;c=o}l=c;k=f+ -1|0;p=f|63;g=0;d=a;while(1){i:{if(a-d>>>0>=f>>>0){break i}c=tG(a,0,p);if(c){a=c;if(c-d>>>0>>0){break b}break i}a=a+p|0}e=r[d+k|0];c=f;j:{k:{if(!(q[(h+1024|0)+(e>>>3&28)>>2]>>>(e&31)&1)){break k}c=f-q[(e<<2)+h>>2]|0;if(c){c=l?g?c>>>0>>0?o:c:c:c;break k}l:{c=m;e=c>>>0>g>>>0?c:g;j=r[e+b|0];if(j){while(1){if(r[d+e|0]!=(j&255)){break l}e=e+1|0;j=r[e+b|0];if(j){continue}break}}while(1){if(c>>>0<=g>>>0){break a}c=c+ -1|0;if(r[c+b|0]==r[c+d|0]){continue}break}c=i;e=l;break j}c=e-n|0}e=0}g=e;d=c+d|0;continue}}d=0}ue=h+1056|0;return d}function Pn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=x(0),o=x(0),p=x(0),s=x(0),t=x(0);d=ue-176|0;ue=d;e=q[a+12>>2];if((e|0)!=q[a+16>>2]){Qp(e)}Fn(d,c,u[c+64>>2],u[c+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);g=a+528|0;a=q[g>>2];a:{if(!a){break a}e=g;while(1){h=q[a+32>>2]<(b|0);e=h?e:a;a=q[(h<<2)+a>>2];if(a){continue}break}if((e|0)==(g|0)|q[e+32>>2]>(b|0)|(!q[e+68>>2]|!r[e+81|0])){break a}a=q[e+72>>2];if(!(q[c+96>>2]>>>q[a+64>>2]&1)){break a}b=q[e+64>>2];if(!(q[b+296>>2]!=1|u[c+64>>2]==u[c+68>>2])){yp(d+112|0);q[d+120>>2]=q[e+272>>2];a=q[e+268>>2];q[d+112>>2]=q[e+264>>2];q[d+116>>2]=a;q[d+124>>2]=q[e+276>>2];if(!Bl(d,d+112|0)){break a}a=q[e+72>>2]}h=q[a+476>>2];i=q[a+472>>2];if((h|0)!=(i|0)){g=q[b+276>>2];if(g>>>0>=h-i>>2>>>0){break a}i=c+84|0;k=c+72|0;c=e+288|0;h=c+8|0;while(1){j=g<<2;b=q[j+q[a+472>>2]>>2];b:{if(!(u[q[b+16>>2]+2304>>2]>x(3.4028234663852886e+37))){a=c;f=q[a+44>>2];q[d+152>>2]=q[a+40>>2];q[d+156>>2]=f;f=q[a+36>>2];q[d+144>>2]=q[a+32>>2];q[d+148>>2]=f;f=q[a+28>>2];q[d+136>>2]=q[a+24>>2];q[d+140>>2]=f;f=q[a+20>>2];q[d+128>>2]=q[a+16>>2];q[d+132>>2]=f;f=q[h+4>>2];q[d+120>>2]=q[h>>2];q[d+124>>2]=f;f=q[a+4>>2];q[d+112>>2]=q[a>>2];q[d+116>>2]=f;Xs(d+160|0,d+112|0);nt(d+112|0,k);l=u[d+120>>2];m=u[d+168>>2];o=u[d+112>>2];p=u[d+160>>2];s=u[d+116>>2];t=u[d+164>>2];nt(d+96|0,i);if(u[q[b+16>>2]+2304>>2]>2])+x(x(t-s)*u[d+100>>2]))+x(x(m-l)*u[d+104>>2]))){break b}b=q[j+q[q[e+72>>2]+472>>2]>>2]}zk(b,0)}g=g+1|0;a=q[e+72>>2];if(g>>>0>2]-q[a+472>>2]>>2>>>0){continue}break}break a}zk(q[e+68>>2],1)}ue=d+176|0}function ZC(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=ue-272|0;ue=f;b=q[a+24>>2];g=q[a+20>>2];if((b|0)!=(g|0)){b=(b-g|0)/12|0;d=b>>>0>1?b:1;while(1){e=g+w(c,12)|0;if(o[e+11|0]<=-1){e=q[e>>2]}b=c<<2;q[b+(f+208|0)>>2]=e;k=b+(f+80|0)|0,l=sV(e),q[k>>2]=l;c=c+1|0;if((d|0)!=(c|0)){continue}break}}b=q[a+36>>2];g=q[a+32>>2];if((b|0)!=(g|0)){b=(b-g|0)/12|0;d=b>>>0>1?b:1;c=0;while(1){e=g+w(c,12)|0;if(o[e+11|0]<=-1){e=q[e>>2]}b=c<<2;q[b+(f+144|0)>>2]=e;k=b+(f+16|0)|0,l=sV(e),q[k>>2]=l;c=c+1|0;if((d|0)!=(c|0)){continue}break}}q[f+4>>2]=0;d=P(35633)|0;cw(d,(q[a+24>>2]-q[a+20>>2]|0)/12|0,f+208|0,f+80|0);Z(d|0);dw(d,f+12|0);b=P(35632)|0;cw(b,(q[a+36>>2]-q[a+32>>2]|0)/12|0,f+144|0,f+16|0);Z(b|0);dw(b,f+8|0);g=$()|0;ew(g,d);ew(g,b);da(g|0);ea(g|0,35714,f+4|0);ca(b|0);ca(d|0);a:{if(!q[f+4>>2]){ba(g|0);break a}q[a+16>>2]=g;j=1;b=q[a+44>>2];if(!b){break a}h=a+48|0;xr(h,(q[b+12>>2]-q[b+8>>2]|0)/12|0);c=q[a+44>>2];if(q[c+12>>2]!=q[c+8>>2]){e=0;while(1){b=f;g=q[a+16>>2];d=q[c+8>>2]+w(e,12)|0;if(o[d+11|0]<=-1){d=q[d>>2]}c=b;b=gw(g,d);q[c>>2]=b;d=q[a+52>>2];b:{if(d>>>0>2]){q[d>>2]=b;q[a+52>>2]=d+4;break b}yr(h,f)}e=e+1|0;c=q[a+44>>2];if(e>>>0<(q[c+12>>2]-q[c+8>>2]|0)/12>>>0){continue}break}}i=a+60|0;xr(i,(q[c+24>>2]-q[c+20>>2]|0)/28|0);c=q[a+44>>2];if(q[c+24>>2]==q[c+20>>2]){break a}e=0;while(1){h=q[c+20>>2]+w(e,28)|0;d=h+4|0;b=f;g=q[a+16>>2];if(o[h+15|0]<=-1){d=q[d>>2]}c=b;b=gw(g,d);q[c>>2]=b;d=q[a+64>>2];c:{if(d>>>0>2]){q[d>>2]=b;q[a+64>>2]=d+4;break c}yr(i,f)}e=e+1|0;c=q[a+44>>2];if(e>>>0<(q[c+24>>2]-q[c+20>>2]|0)/28>>>0){continue}break}}ue=f+272|0;return j}function vl(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;h=ue-96|0;ue=h;f=q[a+140>>2];a:{if(!f){b=0;break a}i=q[a+124>>2];j=a+136|0;g=q[j>>2];k=q[q[i+(g>>>8&16777212)>>2]+((g&1023)<<2)>>2];q[a+140>>2]=f+ -1;g=g+1|0;q[j>>2]=g;if(g>>>0>=2048){_U(q[i>>2]);q[a+124>>2]=q[a+124>>2]+4;q[a+136>>2]=q[a+136>>2]+ -1024}g=ok(k,a,b,c);if((n[q[q[b>>2]+20>>2]](b)|0)>=1){j=h+40|0;i=h+32|0;k=h+24|0;m=h+16|0;p=h+8|0;f=0;while(1){l=n[q[q[b>>2]+24>>2]](b,f)|0;q[j>>2]=0;q[j+4>>2]=0;q[i>>2]=0;q[i+4>>2]=0;q[k>>2]=0;q[k+4>>2]=0;q[m>>2]=0;q[m+4>>2]=0;q[p>>2]=0;q[p+4>>2]=0;q[h>>2]=0;q[h+4>>2]=0;l=vl(a,l,c,0,Ts(h+48|0,h));if(!l){n[q[q[g>>2]>>2]](g)|0;b=0;c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2];e=q[a+128>>2]-d|0;if((f|0)==((e?(e<<8)+ -1|0:0)|0)){ql(a+120|0);c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2]}q[q[d+(f>>>8&16777212)>>2]+((f&1023)<<2)>>2]=g;q[a+140>>2]=c+1;break a}sk(g,l);f=f+1|0;if((f|0)<(n[q[q[b>>2]+20>>2]](b)|0)){continue}break}}if(d){d=vk(g);if(!d){n[q[q[g>>2]>>2]](g)|0;b=0;c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2];e=q[a+128>>2]-d|0;if((f|0)==((e?(e<<8)+ -1|0:0)|0)){ql(a+120|0);c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2]}q[q[d+(f>>>8&16777212)>>2]+((f&1023)<<2)>>2]=g;q[a+140>>2]=c+1;break a}b=Rk(d);if(!b){b=0;o[d+308|0]=0;uk(g);n[q[q[g>>2]>>2]](g)|0;c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2];e=q[a+128>>2]-d|0;if((f|0)==((e?(e<<8)+ -1|0:0)|0)){ql(a+120|0);c=q[a+140>>2];f=c+q[a+136>>2]|0;d=q[a+124>>2]}q[q[d+(f>>>8&16777212)>>2]+((f&1023)<<2)>>2]=g;q[a+140>>2]=c+1;break a}Lk(c,g);Kj(b,0,x(1),0);Hj(b,e);o[d+308|0]=0}b=g}ue=h+96|0;return b}function Vj(a,b,c,d,e,f,g,h,i,j){var k=0,l=x(0),m=x(0),n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0);k=ue-32|0;ue=k;n=q[c>>2];a:{if(n>>>0>6){if((n|0)!=2147483646){break a}q[a+8>>2]=1065353216;q[a+12>>2]=1065353216;q[a>>2]=1065353216;q[a+4>>2]=1065353216;break a}b:{switch(n-1|0){case 5:g=nj(q[c+400>>2],g,h);h=u[b>>2];q[a+12>>2]=1065353216;g=x(g+h);u[a+8>>2]=g;u[a+4>>2]=g;u[a>>2]=g;break a;case 4:sj(k+16|0,q[c+396>>2],g,h);g=u[b>>2];h=u[b+4>>2];l=u[b+8>>2];m=u[k+16>>2];o=u[k+20>>2];p=u[k+24>>2];u[a+12>>2]=u[k+28>>2]+u[b+12>>2];u[a+8>>2]=p+l;u[a+4>>2]=o+h;u[a>>2]=m+g;break a;case 3:g=us(c+300|0,b,x(B(x(A(x(g/h),x(1))),x(0))));q[a+12>>2]=1065353216;u[a+8>>2]=g;u[a+4>>2]=g;u[a>>2]=g;break a;case 2:h=u[b+8>>2];l=u[b>>2];m=u[b+4>>2];q[a+12>>2]=1065353216;g=x(x(l+x(m*g))+x(x(x(h*g)*g)*x(.5)));u[a+8>>2]=g;u[a+4>>2]=g;u[a>>2]=g;break a;case 1:zs(k+16|0,c+116|0,b,x(B(x(A(x(g/h),x(1))),x(0))));b=q[k+28>>2];q[a+8>>2]=q[k+24>>2];q[a+12>>2]=b;b=q[k+20>>2];q[a>>2]=q[k+16>>2];q[a+4>>2]=b;break a;case 0:l=u[b+20>>2];m=u[b+36>>2];o=u[b+24>>2];p=u[b+40>>2];r=u[b+28>>2];s=u[b+44>>2];t=u[b+4>>2];v=u[b+8>>2];w=u[b+12>>2];h=x(x(g*g)*x(.5));u[a>>2]=x(x(u[b+16>>2]*g)+u[b>>2])+x(h*u[b+32>>2]);u[a+12>>2]=x(w+x(r*g))+x(h*s);u[a+8>>2]=x(v+x(o*g))+x(h*p);u[a+4>>2]=x(t+x(l*g))+x(h*m);break a;default:break b}}if(q[c+4>>2]>-1){Gs(k+16|0,e,f,i,d,c+4|0,nt(k,c+8|0),j+48|0,j+60|0);c=q[k+28>>2];q[b+8>>2]=q[k+24>>2];q[b+12>>2]=c;c=q[k+20>>2];q[b>>2]=q[k+16>>2];q[b+4>>2]=c}c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=c}ue=k+32|0}function su(a,b,c,d){var e=0,f=x(0),g=x(0),h=0,i=x(0),j=x(0),k=x(0),l=x(0);e=ue-48|0;ue=e;g=u[c>>2];a:{if(g==x(0)){break a}h=r[c+4|0];if(r[c+5|0]){Vs(e+32|0,a);g=x(g*x(x(x(u[e+32>>2]+u[e+36>>2])+u[e+40>>2])/x(3)))}b:{if(!h){break b}Xs(e+32|0,a);f=x(u[e+32>>2]-u[b>>2]);i=x(f*f);f=x(u[e+36>>2]-u[b+4>>2]);i=x(i+x(f*f));f=x(u[e+40>>2]-u[b+8>>2]);f=x(E(x(i+x(f*f))));if(f==x(0)){break b}f=x(x(f-g)/f);u[a>>2]=f*u[a>>2];u[a+4>>2]=f*u[a+4>>2];u[a+8>>2]=f*u[a+8>>2];u[a+16>>2]=f*u[a+16>>2];h=a+20|0;u[h>>2]=f*u[h>>2];h=a+24|0;u[h>>2]=f*u[h>>2];u[a+32>>2]=f*u[a+32>>2];h=a+36|0;u[h>>2]=f*u[h>>2];h=a+40|0;u[h>>2]=f*u[h>>2]}Xs(e+32|0,a);k=x(u[b>>2]-u[e+32>>2]);i=x(u[b+4>>2]-u[e+36>>2]);j=x(u[b+8>>2]-u[e+40>>2]);f=x(x(1)/x(E(x(x(x(k*k)+x(i*i))+x(j*j)))));l=x(x(u[b+12>>2]-u[e+44>>2])*f);j=x(j*f);i=x(i*f);f=x(k*f);if(d){Xs(e,a);u[e+28>>2]=x(g*l)+u[e+12>>2];u[e+24>>2]=x(g*j)+u[e+8>>2];u[e+20>>2]=x(g*i)+u[e+4>>2];u[e+16>>2]=x(g*f)+u[e>>2];Zs(a,e+16|0);break a}Xs(e,a);u[e+28>>2]=x(g*l)+u[e+12>>2];u[e+24>>2]=x(g*j)+u[e+8>>2];u[e+20>>2]=x(g*i)+u[e+4>>2];u[e+16>>2]=x(g*f)+u[e>>2];Zs(a,e+16|0)}c:{if(!(u[c+12>>2]>2]-u[b>>2]);f=x(g*g);g=x(u[e+36>>2]-u[b+4>>2]);f=x(f+x(g*g));g=x(u[e+40>>2]-u[b+8>>2]);g=x(E(x(f+x(g*g))));if(g==x(0)){break c}f=u[c+12>>2];g=x(f+x(x(g*x(.03125))*x(x(1)-f)));u[a>>2]=u[a>>2]*g;u[a+4>>2]=u[a+4>>2]*g;u[a+8>>2]=g*u[a+8>>2];u[a+16>>2]=g*u[a+16>>2];b=a+20|0;u[b>>2]=g*u[b>>2];b=a+24|0;u[b>>2]=g*u[b>>2];u[a+32>>2]=g*u[a+32>>2];b=a+36|0;u[b>>2]=g*u[b>>2];a=a+40|0;u[a>>2]=g*u[a>>2]}ue=e+48|0}function Or(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=0,y=x(0),z=x(0),A=x(0),B=x(0),C=x(0),D=x(0),F=x(0);d=ue-96|0;ue=d;l=u[c>>2];m=u[c+8>>2];b=q[b>>2];g=u[b+104>>2];h=u[c+4>>2];i=AG(x(x(h*u[b+88>>2])+u[b+96>>2]));e=u[b+100>>2];f=AG(x(x(h*u[b+84>>2])+u[b+92>>2]));i=x(g*i);j=zG(i);f=x(e*f);g=AG(f);e=AG(i);i=zG(f);n=u[b+136>>2];f=x(x(g*x(0))-x(i*e));k=x(i*j);e=x(x(e*x(0))-x(g*j));j=x(x(1)/x(E(x(x(f*f)+x(x(k*k)+x(e*e))))));o=x(h+x(l*g));e=x(e*j);f=x(f*j);h=x(x(e*x(0))-x(i*f));k=x(k*j);e=x(x(i*k)-x(g*e));f=x(x(g*f)-x(k*x(0)));g=x(x(1)/x(E(x(x(e*e)+x(x(f*f)+x(h*h))))));h=x(o+x(m*x(h*g)));k=AG(x(u[b+124>>2]+x(u[b+112>>2]*h)));o=u[b+140>>2];p=u[b+128>>2];r=u[b+116>>2];s=u[b+132>>2];t=u[b+120>>2];v=u[b+108>>2];w=q[b+284>>2];c=nt(d+48|0,b+144|0);y=u[c+4>>2];z=u[c+8>>2];A=u[c+12>>2];B=u[c>>2];c=nt(d+32|0,b+156|0);C=u[c+8>>2];D=u[c+12>>2];F=u[c>>2];k=x(h+x(n*k));u[d+68>>2]=u[c+4>>2]+x(y*k);i=x(x(x(x(l*i)+x(0))+x(m*x(f*g)))+x(s*AG(x(t+x(v*h)))));u[d+64>>2]=F+x(B*i);j=x(j*x(0));j=x(x(x(l+x(1))+x(m*x(x(j-j)*g)))+x(1));u[d+76>>2]=D+x(A*j);g=x(x(x(x(l*x(0))+x(0))+x(m*x(e*g)))+x(o*AG(x(p+x(r*h)))));u[d+72>>2]=C+x(z*g);c=q[d+68>>2];q[d>>2]=q[d+64>>2];q[d+4>>2]=c;c=q[d+76>>2];q[d+8>>2]=q[d+72>>2];q[d+12>>2]=c;qs(d+80|0,w,d);b=nt(d+16|0,b+168|0);l=u[b>>2];m=u[b+4>>2];h=u[b+8>>2];e=u[d+80>>2];f=u[d+84>>2];n=u[d+88>>2];u[a+12>>2]=j+x(u[d+92>>2]*u[b+12>>2]);u[a+8>>2]=g+x(n*h);u[a+4>>2]=k+x(f*m);u[a>>2]=i+x(e*l);ue=d+96|0}function Gi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=0,g=x(0),h=0,i=x(0);c=ue+ -64|0;ue=c;if(q[a+3460>>2]==2){h=b,i=us(a+3472|0,b+548|0,x(B(x(A(x(u[b+828>>2]/u[b+824>>2]),x(1))),x(0)))),u[h+544>>2]=i}if(q[a+3568>>2]==2){h=b,i=us(a+3580|0,b+568|0,x(B(x(A(x(u[b+828>>2]/u[b+824>>2]),x(1))),x(0)))),u[h+564>>2]=i}Hi(b,a+3676|0,b+592|0);Hi(b,a+3728|0,b+656|0);if(q[a+3780>>2]==2){h=b,i=us(a+3792|0,b+724|0,x(B(x(A(x(u[b+828>>2]/u[b+824>>2]),x(1))),x(0)))),u[h+720>>2]=i}hi(c+60|0,b+748|0,a+3888|0,u[b+828>>2],u[b+824>>2]);q[b+744>>2]=q[c+60>>2];hi(c+60|0,b+772|0,a+3932|0,u[b+828>>2],u[b+824>>2]);q[b+768>>2]=q[c+60>>2];hi(c+60|0,b+796|0,a+3976|0,u[b+828>>2],u[b+824>>2]);q[b+792>>2]=q[c+60>>2];e=Sh(a,b);if(e!=x(1)){f=b+747|0;g=x(e*x(r[f|0]));a:{if(g=x(0)){d=~~g>>>0;break a}d=0}o[f|0]=d;f=b+771|0;g=x(e*x(r[f|0]));b:{if(g=x(0)){d=~~g>>>0;break b}d=0}o[f|0]=d;f=b+795|0;e=x(e*x(r[f|0]));c:{if(e=x(0)){d=~~e>>>0;break c}d=0}o[f|0]=d}d:{if(q[a+2472>>2]+ -1>>>0<=1){a=q[b+744>>2];q[c+56>>2]=a;d=q[b+324>>2];q[c+52>>2]=d;q[c+32>>2]=a;q[c+28>>2]=d;Oe(c+60|0,c+32|0,c+28|0);q[b+740>>2]=q[c+60>>2];a=q[b+768>>2];q[c+48>>2]=a;d=q[b+324>>2];q[c+44>>2]=d;q[c+24>>2]=a;q[c+20>>2]=d;Oe(c+60|0,c+24|0,c+20|0);q[b+764>>2]=q[c+60>>2];a=q[b+792>>2];q[c+40>>2]=a;d=q[b+324>>2];q[c+36>>2]=d;q[c+16>>2]=a;q[c+12>>2]=d;Oe(c+60|0,c+16|0,c+12|0);q[b+788>>2]=q[c+60>>2];a=q[b+764>>2];break d}q[b+740>>2]=q[b+744>>2];a=q[b+768>>2];q[b+764>>2]=a;q[b+788>>2]=q[b+792>>2]}q[b+320>>2]=a;ue=c- -64|0}function uu(a,b,c,d,e){var f=x(0),g=0,h=x(0),i=x(0),j=x(0),k=x(0),l=x(0);g=ue-48|0;ue=g;h=u[d>>2];a:{if(h==x(0)){break a}h=r[d+5|0]?x(h*x(x(x(u[c>>2]+u[c+4>>2])+u[c+8>>2])/x(3))):h;b:{if(!r[d+4|0]){break b}Xs(g+32|0,a);f=x(u[g+32>>2]-u[b>>2]);i=x(f*f);f=x(u[g+36>>2]-u[b+4>>2]);i=x(i+x(f*f));f=x(u[g+40>>2]-u[b+8>>2]);f=x(E(x(i+x(f*f))));if(f==x(0)){break b}f=x(x(f-h)/f);u[a>>2]=f*u[a>>2];u[a+4>>2]=f*u[a+4>>2];u[a+8>>2]=f*u[a+8>>2];u[a+16>>2]=f*u[a+16>>2];c=a+20|0;u[c>>2]=f*u[c>>2];c=a+24|0;u[c>>2]=f*u[c>>2];u[a+32>>2]=f*u[a+32>>2];c=a+36|0;u[c>>2]=f*u[c>>2];c=a+40|0;u[c>>2]=f*u[c>>2]}Xs(g+32|0,a);k=x(u[b>>2]-u[g+32>>2]);i=x(u[b+4>>2]-u[g+36>>2]);j=x(u[b+8>>2]-u[g+40>>2]);f=x(x(1)/x(E(x(x(x(k*k)+x(i*i))+x(j*j)))));l=x(x(u[b+12>>2]-u[g+44>>2])*f);j=x(j*f);i=x(i*f);f=x(k*f);if(e){Xs(g,a);u[g+28>>2]=x(h*l)+u[g+12>>2];u[g+24>>2]=x(h*j)+u[g+8>>2];u[g+20>>2]=x(h*i)+u[g+4>>2];u[g+16>>2]=x(h*f)+u[g>>2];Zs(a,g+16|0);break a}Xs(g,a);u[g+28>>2]=x(h*l)+u[g+12>>2];u[g+24>>2]=x(h*j)+u[g+8>>2];u[g+20>>2]=x(h*i)+u[g+4>>2];u[g+16>>2]=x(h*f)+u[g>>2];Zs(a,g+16|0)}c:{if(!(u[d+12>>2]>2]-u[b>>2]);f=x(h*h);h=x(u[g+36>>2]-u[b+4>>2]);f=x(f+x(h*h));h=x(u[g+40>>2]-u[b+8>>2]);h=x(E(x(f+x(h*h))));if(h==x(0)){break c}f=u[d+12>>2];h=x(f+x(x(h*x(.03125))*x(x(1)-f)));u[a>>2]=u[a>>2]*h;u[a+4>>2]=u[a+4>>2]*h;u[a+8>>2]=h*u[a+8>>2];u[a+16>>2]=h*u[a+16>>2];b=a+20|0;u[b>>2]=h*u[b>>2];b=a+24|0;u[b>>2]=h*u[b>>2];u[a+32>>2]=h*u[a+32>>2];b=a+36|0;u[b>>2]=h*u[b>>2];a=a+40|0;u[a>>2]=h*u[a>>2]}ue=g+48|0}function NF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;d=ue-352|0;ue=d;q[d+16>>2]=c;a:{b:{if(!te(343768,343825,d+16|0)){q[a>>2]=0;break b}q[d+348>>2]=0;Fa(1,d+348|0);q[d>>2]=c;q[d+4>>2]=q[d+348>>2];te(343827,344554,d|0)|0;e=d+88|0;while(1){f=s[c>>1];if(f){c:{if(!(f&65408)){o[e|0]=f&127;f=1;break c}if(!(f&63488)){o[e+1|0]=f&63|128;o[e|0]=f>>>6&31|192;f=2;break c}o[e+2|0]=f&63|128;o[e|0]=f>>>12|224;o[e+1|0]=f>>>6&63|128;f=3}e=f+e|0;c=c+2|0;g=f+g|0;if(g>>>0<257){continue}}break}o[e|0]=0;q[d+80>>2]=0;q[d+72>>2]=0;q[d+76>>2]=0;c=sV(d+88|0);if(c>>>0>=4294967280){break a}d:{e:{if(c>>>0>=11){f=c+16&-16;e=_S(f);q[d+80>>2]=f|-2147483648;q[d+72>>2]=e;q[d+76>>2]=c;break e}o[d+83|0]=c;e=d+72|0;if(!c){break d}}kV(e,d+88|0,c)}o[c+e|0]=0;e=q[b+8>>2];f=q[d+348>>2];q[d+32>>2]=f;b=mT(d+32|4,d+72|0);q[d+60>>2]=344600;q[d+56>>2]=769;c=_S(16);q[c>>2]=q[d+32>>2];g=b+8|0;q[c+12>>2]=q[g>>2];h=q[b+4>>2];q[c+4>>2]=q[b>>2];q[c+8>>2]=h;q[b>>2]=0;q[b+4>>2]=0;q[g>>2]=0;q[d+48>>2]=c;GD(d- -64|0,e,f,1,d+48|0);c=q[d+64>>2];q[d+64>>2]=0;e=q[q[d+60>>2]+4>>2];if(e){n[e](q[d+48>>2])}if(o[b+11|0]<=-1){_U(q[b>>2])}b=_S(24);q[b+8>>2]=0;q[b+12>>2]=0;q[b+4>>2]=1;q[b>>2]=344712;q[b+16>>2]=0;q[b+20>>2]=0;f:{if(!c){break f}n[q[q[c>>2]>>2]](c)|0;e=q[b+20>>2];if(!e){break f}n[q[q[e>>2]+8>>2]](e)|0;q[b+20>>2]=0}q[b+20>>2]=c;OT(d+48|0,344557,d+72|0);if(r[367128]){rV(o[d+59|0]<0?q[d+48>>2]:d+48|0)}if(o[d+59|0]<=-1){_U(q[d+48>>2])}q[a>>2]=b;if(c){n[q[q[c>>2]+8>>2]](c)|0}if(o[d+83|0]>-1){break b}_U(q[d+72>>2])}ue=d+352|0;return}kT();F()}function wr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ue-32|0;ue=d;a:{if(r[a+37|0]|!b){break a}b:{e=q[a+24>>2];if((q[a+28>>2]-e|0)<1){break b}while(1){q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;h=w(i,36);c=h+e|0;xr(d,w((q[c+16>>2]-q[c+12>>2]|0)/12|0,6));j=0;c=q[a+24>>2]+h|0;f=q[c+12>>2];if((q[c+16>>2]-f|0)>0){while(1){c=q[d+4>>2];e=q[d+8>>2];c:{if(c>>>0>>0){q[c>>2]=q[f>>2];c=c+4|0;q[d+4>>2]=c;break c}yr(d,f);e=q[d+8>>2];c=q[d+4>>2]}g=f+4|0;d:{if(c>>>0>>0){q[c>>2]=q[g>>2];c=c+4|0;q[d+4>>2]=c;break d}yr(d,g);e=q[d+8>>2];c=q[d+4>>2]}e:{if(c>>>0>>0){q[c>>2]=q[g>>2];c=c+4|0;q[d+4>>2]=c;break e}yr(d,g);e=q[d+8>>2];c=q[d+4>>2]}g=f+8|0;f:{if(c>>>0>>0){q[c>>2]=q[g>>2];c=c+4|0;q[d+4>>2]=c;break f}yr(d,g);e=q[d+8>>2];c=q[d+4>>2]}g:{if(c>>>0>>0){q[c>>2]=q[g>>2];c=c+4|0;q[d+4>>2]=c;break g}yr(d,g);e=q[d+8>>2];c=q[d+4>>2]}h:{if(c>>>0>>0){q[c>>2]=q[f>>2];q[d+4>>2]=c+4;break h}yr(d,f)}f=f+12|0;j=j+1|0;c=q[a+24>>2]+h|0;if((j|0)<((q[c+16>>2]-q[c+12>>2]|0)/12|0)){continue}break}}c=q[d>>2];n[q[q[b>>2]+24>>2]](d+16|0,b,q[d+4>>2]-c>>2,c,1);c=q[a+24>>2];f=q[d+16>>2];q[d+16>>2]=0;e=c+h|0;c=e+32|0;e=q[e+32>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=f;c=q[d+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d+16>>2]=0}e=q[(q[a+24>>2]+h|0)+32>>2];c=q[d>>2];i:{if(!c){break i}q[d+4>>2]=c;f=q[d+8>>2];xt(d+16|0);n[q[d+24>>2]](d+16|0,c,f-c|0);c=q[q[d+28>>2]+4>>2];if(!c){break i}n[c](q[d+16>>2])}if(e){i=i+1|0;e=q[a+24>>2];if((i|0)>=((q[a+28>>2]-e|0)/36|0)){break b}continue}break}break a}o[a+37|0]=1}ue=d+32|0}function Cv(a,b){var c=0,d=x(0),e=x(0),g=x(0),h=x(0),i=x(0),k=x(0),l=0,m=0,n=0,o=0,p=0,s=0;c=ue-96|0;ue=c;h=(f(0,r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24)),j());i=(f(0,r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24)),j());k=(f(0,r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24)),j());q[c+92>>2]=1065353216;u[c+88>>2]=i;u[c+84>>2]=h;u[c+80>>2]=k;l=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);m=r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24);n=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);o=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);p=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);s=r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24);d=x(-(f(0,r[b+52|0]|r[b+53|0]<<8|(r[b+54|0]<<16|r[b+55|0]<<24)),j()));e=(f(0,r[b+48|0]|r[b+49|0]<<8|(r[b+50|0]<<16|r[b+51|0]<<24)),j());g=(f(0,r[b+56|0]|r[b+57|0]<<8|(r[b+58|0]<<16|r[b+59|0]<<24)),j());u[c+76>>2]=x(d-e)-g;u[c+72>>2]=x(x((f(0,m),j())*d)-x((f(0,s),j())*e))-x(i*g);u[c+68>>2]=x(x((f(0,l),j())*d)-x((f(0,p),j())*e))-x(h*g);u[c+64>>2]=x(x((f(0,n),j())*d)-x((f(0,o),j())*e))-x(k*g);wv(a,c+80|0,c- -64|0);ht(c,b);b=q[c+60>>2];q[a+120>>2]=q[c+56>>2];q[a+124>>2]=b;b=q[c+52>>2];q[a+112>>2]=q[c+48>>2];q[a+116>>2]=b;b=q[c+44>>2];q[a+104>>2]=q[c+40>>2];q[a+108>>2]=b;b=q[c+36>>2];q[a+96>>2]=q[c+32>>2];q[a+100>>2]=b;b=q[c+28>>2];q[a+88>>2]=q[c+24>>2];q[a+92>>2]=b;b=q[c+20>>2];q[a+80>>2]=q[c+16>>2];q[a+84>>2]=b;b=q[c+12>>2];q[a+72>>2]=q[c+8>>2];q[a+76>>2]=b;b=q[c+4>>2];q[a+64>>2]=q[c>>2];q[a+68>>2]=b;ue=c+96|0}function QC(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ue-48|0;ue=e;d=q[q[a+56>>2]+20>>2];a:{b:{if(!(d>>>0>2|!(d-1))){f=q[b+4>>2];g=f+ -1|0;if(g>>>0>11){break b}d=0;switch(g-1|0){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:break b;default:break a}}f=q[b+4>>2]}d=f+ -8|0;g=231>>>(d&255)&d>>>0<8;f=q[c>>2];h=q[c+4>>2];c=q[b+28>>2];d=0;q[e+44>>2]=0;h=h-f|0?f:0;c:{d:{e:{if((c|0)>=2){if(g){break a}ta(36007,e+44|0);d=q[b+4>>2];f=3553;break e}d=q[b+8>>2]==3;f=q[b>>2]&2;ta((f?35869:d?32874:32873)|0,e+44|0);Fa(1,a+44|0);f=f?35866:d?32879:3553;Ca(f|0,q[a+44>>2]);d=q[b+4>>2];if(!g){break e}break d}if(!(6399>>>(d&65535)&1)|d>>>0>=13){break c}d=d<<2;g=q[d+342128>>2];if((c|0)<=1){i=q[d+342232>>2];d=q[d+342180>>2];if(r[b|0]&2){break d}j=q[b+16>>2];k=q[b+12>>2];if(q[b+8>>2]==3){break d}Ga(f|0,0,g|0,k|0,j|0,0,d|0,i|0,h|0)}}if(q[b+24>>2]!=1){na(f|0)}d=q[e+44>>2];if((c|0)<=1){Ca(f|0,d|0)}q[a+52>>2]=f;c=q[b+4>>2];q[a+12>>2]=q[b>>2];q[a+16>>2]=c;c=q[b+12>>2];q[a+20>>2]=q[b+8>>2];q[a+24>>2]=c;c=q[b+20>>2];q[a+28>>2]=q[b+16>>2];q[a+32>>2]=c;c=q[b+28>>2];q[a+36>>2]=q[b+24>>2];q[a+40>>2]=c;d=1;break a}PT(e,d);a=DT(e,340332);b=a+8|0;q[e+24>>2]=q[b>>2];c=q[a+4>>2];q[e+16>>2]=q[a>>2];q[e+20>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;a=zT(e+16|0,340362);b=a+8|0;q[e+40>>2]=q[b>>2];c=q[a+4>>2];q[e+32>>2]=q[a>>2];q[e+36>>2]=c;q[a>>2]=0;q[a+4>>2]=0;q[b>>2]=0;el(2,e+32|0);if(o[e+43|0]<=-1){_U(q[e+32>>2])}if(o[e+27|0]<=-1){_U(q[e+16>>2])}if(o[e+11|0]<=-1){_U(q[e>>2])}d=0}ue=e+48|0;return d}function Xr(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=x(0),m=0,p=0,r=0;j=ue-16|0;ue=j;h=u[c+4>>2];k=u[c>>2];l=u[c+8>>2];i=((h==x(0)?0:q[c+4>>2])+(k==x(0)?0:q[c>>2])|0)+(l==x(0)?0:q[c+8>>2])|0;p=a;a:{b:{f=q[b+4>>2];if(!f){break b}e=q[b>>2];m=yW(f);g=i&f+ -1;c:{if(m>>>0<=1){break c}c=i;g=c;if(c>>>0>>0){break c}g=(i>>>0)%(f>>>0)|0}c=g;g=c;c=q[(c<<2)+e>>2];if(!c){break b}r=f+ -1|0;while(1){c=q[c>>2];if(!c){break b}e=q[c+4>>2];if((i|0)!=(e|0)){d:{if(m>>>0<=1){e=e&r;break d}if(e>>>0>>0){break d}e=(e>>>0)%(f>>>0)|0}if((e|0)!=(g|0)){break b}}if(((u[c+20>>2]==h)<<1|u[c+16>>2]==k|(u[c+24>>2]==l)<<2)!=7){continue}break}b=0;break a}yt(j);c=n[q[j+8>>2]](j,48,16)|0;e=q[q[j+12>>2]+4>>2];if(e){n[e](q[j>>2])}d=q[d>>2];e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;e=q[d+8>>2];d=q[d+12>>2];q[c>>2]=0;q[c+4>>2]=i;q[c+32>>2]=0;q[c+36>>2]=0;q[c+24>>2]=e;q[c+28>>2]=d;q[c+40>>2]=0;q[c+44>>2]=0;h=u[b+16>>2];k=x(q[b+12>>2]+1>>>0);e:{if(x(h*x(f>>>0))>>0<3|f<<1;d=b;h=x(D(x(k/h)));f:{if(h=x(0)){g=~~h>>>0;break f}g=0}cs(d,f>>>0>>0?g:f);f=q[b+4>>2];if(!(f&f+ -1)){g=i&f+ -1;break e}if(i>>>0>>0){g=i;break e}g=(i>>>0)%(f>>>0)|0}d=g<<2;e=q[d+q[b>>2]>>2];g:{h:{if(!e){q[c>>2]=q[b+8>>2];q[b+8>>2]=c;q[d+q[b>>2]>>2]=b+8;d=q[c>>2];if(!d){break g}e=q[d+4>>2];d=f+ -1|0;i:{if(!(d&f)){e=d&e;break i}if(e>>>0>>0){break i}e=(e>>>0)%(f>>>0)|0}e=q[b>>2]+(e<<2)|0;break h}q[c>>2]=q[e>>2]}q[e>>2]=c}q[b+12>>2]=q[b+12>>2]+1;b=1}o[p+4|0]=b;q[a>>2]=c;ue=j+16|0}function qy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=ue-16|0;ue=b;yv(q[a+4>>2]);a:{if(!r[a+172|0]){break a}f=a,g=za(3042)|0,o[f+88|0]=g;f=a,g=za(2884)|0,o[f+89|0]=g;f=a,g=za(2929)|0,o[f+90|0]=g;if(!n[q[q[a>>2]+244>>2]](a)){f=a,g=za(3553)|0,o[f+92|0]=g}Aa(2930,a+91|0);ta(2932,a+96|0);ta(2885,a+100|0);ta(32969,a+104|0);ta(32968,a+108|0);ta(32971,a+112|0);ta(32970,a+116|0);ta(32777,a+120|0);ta(34964,a+128|0);ta(34965,a+132|0);ta(35725,a+136|0);q[b+12>>2]=0;W(33984);ta(32873,b+12|0);q[a+140>>2]=q[b+12>>2];q[b+12>>2]=0;W(33985);ta(32873,b+12|0);q[a+144>>2]=q[b+12>>2];q[b+12>>2]=0;W(33986);ta(32873,b+12|0);q[a+148>>2]=q[b+12>>2];q[b+12>>2]=0;W(33987);ta(32873,b+12|0);q[a+152>>2]=q[b+12>>2];q[b+12>>2]=0;W(33988);ta(32873,b+12|0);q[a+156>>2]=q[b+12>>2];q[b+12>>2]=0;W(33989);ta(32873,b+12|0);q[a+160>>2]=q[b+12>>2];q[b+12>>2]=0;W(33990);ta(32873,b+12|0);q[a+164>>2]=q[b+12>>2];q[b+12>>2]=0;W(33991);ta(32873,b+12|0);q[a+168>>2]=q[b+12>>2];if(!r[367112]){break a}ta(34229,a+124|0)}Ba(515);ua(3042);va(2884);c=q[a+188>>2];d=q[a+184>>2];if((c|0)!=(d|0)){while(1){c=c+ -4|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}if((c|0)!=(d|0)){continue}break}}q[a+188>>2]=d;Au(Hu(q[a+80>>2]));c=q[a+80>>2];n[q[q[c>>2]+8>>2]](c,1);c=Hu(q[a+80>>2]);q[c+80>>2]=0;q[c+84>>2]=0;q[c+136>>2]=0;q[c+140>>2]=0;q[c+128>>2]=0;q[c+132>>2]=0;q[c+120>>2]=0;q[c+124>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+104>>2]=0;q[c+108>>2]=0;q[c+96>>2]=0;q[c+100>>2]=0;q[c+88>>2]=0;q[c+92>>2]=0;hx(q[a+72>>2]);ue=b+16|0;return 1}function Sp(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=0;f=lV(a,0,512);q[f+512>>2]=b;while(1){o[e+f|0]=e;e=e+1|0;if((e|0)!=256){continue}break}while(1){e=w(q[f+512>>2],1103515245)+12345&2147483647;q[f+512>>2]=e;a=f+g|0;i=r[a|0];j=a;h=x(x(x(x((e>>>0)%32767>>>0)/x(32766))*x(255))+x(0));a:{if(h=x(0)){a=~~h>>>0;break a}a=0}a=a+f|0;o[j|0]=r[a|0];o[a|0]=i;g=g+1|0;if((g|0)!=256){continue}break}e=0;while(1){a=e+f|0;o[a+256|0]=r[a|0];e=e+1|0;if((e|0)!=256){continue}break}g=0;lV(f+516|0,0,512);q[f+1028>>2]=w(((b|0)%1949|0)+5|0,b);e=0;while(1){o[(e+f|0)+516|0]=e;e=e+1|0;if((e|0)!=256){continue}break}a=f+516|0;while(1){e=w(q[f+1028>>2],1103515245)+12345&2147483647;q[f+1028>>2]=e;i=a+g|0;j=r[i|0];h=x(x(x(x((e>>>0)%32767>>>0)/x(32766))*x(255))+x(0));b:{if(h=x(0)){e=~~h>>>0;break b}e=0}e=e+a|0;o[i|0]=r[e|0];o[e|0]=j;g=g+1|0;if((g|0)!=256){continue}break}e=0;while(1){a=e+f|0;o[a+772|0]=r[a+516|0];e=e+1|0;if((e|0)!=256){continue}break}g=0;lV(f+1032|0,0,512);q[f+1544>>2]=w(((b|0)%3541|0)+10|0,b);e=0;while(1){o[(e+f|0)+1032|0]=e;e=e+1|0;if((e|0)!=256){continue}break}a=f+1032|0;while(1){b=w(q[f+1544>>2],1103515245)+12345&2147483647;q[f+1544>>2]=b;e=a+g|0;i=r[e|0];h=x(x(x(x((b>>>0)%32767>>>0)/x(32766))*x(255))+x(0));c:{if(h=x(0)){b=~~h>>>0;break c}b=0}b=b+a|0;o[e|0]=r[b|0];o[b|0]=i;g=g+1|0;if((g|0)!=256){continue}break}e=0;while(1){a=e+f|0;o[a+1288|0]=r[a+1032|0];e=e+1|0;if((e|0)!=256){continue}break}q[f+1552>>2]=d;u[f+1548>>2]=c;return f}function vn(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;e=ue-48|0;ue=e;if(q[a+1156>>2]){n[q[q[a>>2]+108>>2]](e,a);b=q[a+1156>>2];f=q[e>>2];a:{if(f){if(b){d=e+8|0;h=e|4;while(1){b=(q[a+1152>>2]+b|0)+ -1|0;c=(b>>>0)/93|0;b=q[q[a+1140>>2]+(c<<2)>>2]+w(b-w(c,93)|0,44)|0;c=q[b>>2];q[e+4>>2]=0;q[e>>2]=c;g=b+4|0;c=q[b+4>>2];b:{if(!c){break b}n[q[q[c>>2]>>2]](c)|0;c=q[e+4>>2];if(!c){break b}n[q[q[c>>2]+8>>2]](c)|0;q[e+4>>2]=0}q[e+4>>2]=q[g>>2];q[d+32>>2]=q[b+40>>2];c=q[b+36>>2];q[d+24>>2]=q[b+32>>2];q[d+28>>2]=c;c=q[b+28>>2];q[d+16>>2]=q[b+24>>2];q[d+20>>2]=c;c=q[b+20>>2];q[d+8>>2]=q[b+16>>2];q[d+12>>2]=c;c=q[b+12>>2];q[d>>2]=q[b+8>>2];q[d+4>>2]=c;n[q[q[f>>2]+20>>2]](f,q[e>>2],h)|0;i=a;b=q[a+1152>>2];c=(b>>>0)/93|0;g=q[q[a+1140>>2]+(c<<2)>>2]+w(b-w(c,93)|0,44)|0;c=q[g+4>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[g+4>>2]=0;b=q[a+1152>>2]}b=b+1|0;q[i+1152>>2]=b;q[a+1156>>2]=q[a+1156>>2]+ -1;if(b>>>0>=186){_U(q[q[a+1140>>2]>>2]);q[a+1140>>2]=q[a+1140>>2]+4;q[a+1152>>2]=q[a+1152>>2]+ -93}b=q[e+4>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+4>>2]=0}b=q[a+1156>>2];if(b){continue}break}}n[q[q[f>>2]+8>>2]](f)|0;break a}if(!b){break a}d=q[a+1152>>2];while(1){f=(d>>>0)/93|0;c=q[q[a+1140>>2]+(f<<2)>>2]+w(d-w(f,93)|0,44)|0;f=q[c+4>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[c+4>>2]=0;d=q[a+1152>>2];b=q[a+1156>>2]}d=d+1|0;q[a+1152>>2]=d;b=b+ -1|0;q[a+1156>>2]=b;if(d>>>0>=186){_U(q[q[a+1140>>2]>>2]);q[a+1140>>2]=q[a+1140>>2]+4;d=q[a+1152>>2]+ -93|0;q[a+1152>>2]=d;b=q[a+1156>>2]}if(b){continue}break}}}ue=e+48|0}function Wn(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0);d=ue-80|0;ue=d;a:{if(q[c+3312>>2]<0){break a}i=Ej(b);q[d+40>>2]=0;e=yp(d+60|0);f=n[q[q[c>>2]+8>>2]](c)|0;n[q[q[f>>2]+80>>2]](d,f,q[c+3312>>2]);g=q[d>>2];q[d>>2]=0;f=b+168|0;h=q[d+40>>2];b:{if(!h){q[d+40>>2]=g;break b}n[q[q[h>>2]+8>>2]](h)|0;q[d+40>>2]=g;g=q[d>>2];if(!g){break b}n[q[q[g>>2]+8>>2]](g)|0;q[d>>2]=0}j=d,k=x(n[q[q[b+168>>2]+16>>2]](f,u[c+3320>>2],u[c+3316>>2])),u[j+44>>2]=k;j=d,k=x(n[q[q[b+168>>2]+16>>2]](f,u[c+3328>>2],u[c+3324>>2])),u[j+52>>2]=k;j=d,k=x(n[q[q[b+168>>2]+16>>2]](f,u[c+3340>>2],u[c+3336>>2])),u[j+48>>2]=k;o[d+56|0]=q[c+3332>>2]==1;Xs(d,xj(Fj(b)));yp(d+24|0);q[e+8>>2]=q[d+8>>2];b=q[d+4>>2];q[e>>2]=q[d>>2];q[e+4>>2]=b;q[d+72>>2]=q[c+3344>>2];q[d+76>>2]=q[i+68>>2];c=0;e=q[a+1156>>2]+q[a+1152>>2]|0;f=q[a+1144>>2];b=q[a+1140>>2];g=f-b|0;if((e|0)==((g?w(g>>2,93)+ -1|0:0)|0)){Xn(a+1136|0);e=q[a+1152>>2]+q[a+1156>>2]|0;f=q[a+1144>>2];b=q[a+1140>>2]}if((b|0)!=(f|0)){c=(e>>>0)/93|0;c=q[b+(c<<2)>>2]+w(e-w(c,93)|0,44)|0}b=d+40|4;q[c+4>>2]=0;q[c>>2]=i;e=q[d+40>>2];c:{if(!e){break c}n[q[q[e>>2]>>2]](e)|0;e=q[c+4>>2];if(!e){break c}n[q[q[e>>2]+8>>2]](e)|0;q[c+4>>2]=0}q[c+4>>2]=q[d+40>>2];e=q[b+4>>2];q[c+8>>2]=q[b>>2];q[c+12>>2]=e;e=q[b+12>>2];q[c+16>>2]=q[b+8>>2];q[c+20>>2]=e;e=q[b+20>>2];q[c+24>>2]=q[b+16>>2];q[c+28>>2]=e;e=q[b+28>>2];q[c+32>>2]=q[b+24>>2];q[c+36>>2]=e;q[c+40>>2]=q[b+32>>2];q[a+1156>>2]=q[a+1156>>2]+1;a=q[d+40>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[d+40>>2]=0}ue=d+80|0}function DP(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p){var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;x=ue-16|0;ue=x;q[c>>2]=a;A=d&512;a:{while(1){if((z|0)==4){b:{if(uL(n)>>>0>1){C=x,D=VM(n),q[C+8>>2]=D;C=c,D=EP(tP(x+8|0,1),pN(n),q[c>>2]),q[C>>2]=D}d=d&176;if((d|0)==16){break a}if((d|0)!=32){break b}q[b>>2]=q[c>>2];break a}}else{s=o[i+z|0];c:{if(s>>>0>4){break c}d:{switch(s-1|0){default:q[b>>2]=q[c>>2];break c;case 0:q[b>>2]=q[c>>2];t=II(g,32);s=q[c>>2];q[c>>2]=s+4;q[s>>2]=t;break c;case 2:if(xL(n)){break c}t=q[rM(n,0)>>2];s=q[c>>2];q[c>>2]=s+4;q[s>>2]=t;break c;case 1:if(xL(m)|!A){break c}C=c,D=EP(VM(m),pN(m),q[c>>2]),q[C>>2]=D;break c;case 3:break d}}B=q[c>>2];e=h?e+4|0:e;u=e;while(1){e:{if(u>>>0>=f>>>0){break e}if(!ZH(g,2048,q[u>>2])){break e}u=u+4|0;continue}break}s=p;if((s|0)>=1){while(1){t=(s|0)<1;if(!(t|u>>>0<=e>>>0)){u=u+ -4|0;v=q[u>>2];t=q[c>>2];q[c>>2]=t+4;q[t>>2]=v;s=s+ -1|0;continue}break}if(t){y=0}else{y=II(g,48)}t=q[c>>2];while(1){v=t+4|0;if((s|0)>=1){q[t>>2]=y;s=s+ -1|0;t=v;continue}break}q[c>>2]=v;q[t>>2]=j}f:{if((e|0)==(u|0)){t=II(g,48);s=q[c>>2];u=s+4|0;q[c>>2]=u;q[s>>2]=t;break f}v=-1;g:{if(xL(l)){break g}v=o[vL(l,0)|0]}s=0;w=0;while(1){if((e|0)!=(u|0)){h:{if((s|0)!=(v|0)){t=s;break h}t=q[c>>2];q[c>>2]=t+4;q[t>>2]=k;t=0;w=w+1|0;if(w>>>0>=uL(l)>>>0){v=s;break h}if(r[vL(l,w)|0]==127){v=-1;break h}v=o[vL(l,w)|0]}u=u+ -4|0;y=q[u>>2];s=q[c>>2];q[c>>2]=s+4;q[s>>2]=y;s=t+1|0;continue}break}u=q[c>>2]}uN(B,u)}z=z+1|0;continue}break}q[b>>2]=a}ue=x+16|0}function Ij(a,b){var c=0,d=0,e=0,f=0,g=0;a:{e=a+1232|0;b:{if(u[e>>2]!=u[b>>2]|u[a+1236>>2]!=u[b+4>>2]|(u[a+1240>>2]!=u[b+8>>2]|u[a+1244>>2]!=u[b+12>>2])){break b}if(u[a+1248>>2]!=u[b+16>>2]|u[a+1252>>2]!=u[b+20>>2]|(u[a+1256>>2]!=u[b+24>>2]|u[a+1260>>2]!=u[b+28>>2])){break b}if(u[a+1264>>2]!=u[b+32>>2]|u[a+1268>>2]!=u[b+36>>2]|u[a+1272>>2]!=u[b+40>>2]){break b}if(u[a+1276>>2]==u[b+44>>2]){break a}}d=a+1184|0;q[a+1400>>2]=q[q[a+144>>2]+580>>2];g=q[a+828>>2];c:{if(r[a+1288|0]){c=e;f=q[c+4>>2];q[d>>2]=q[c>>2];q[d+4>>2]=f;f=q[c+44>>2];q[d+40>>2]=q[c+40>>2];q[d+44>>2]=f;f=q[c+36>>2];q[d+32>>2]=q[c+32>>2];q[d+36>>2]=f;f=q[c+28>>2];q[d+24>>2]=q[c+24>>2];q[d+28>>2]=f;f=q[c+20>>2];q[d+16>>2]=q[c+16>>2];q[d+20>>2]=f;f=q[c+12>>2];q[d+8>>2]=q[c+8>>2];q[d+12>>2]=f;break c}c=q[b+4>>2];q[d>>2]=q[b>>2];q[d+4>>2]=c;c=q[b+44>>2];q[d+40>>2]=q[b+40>>2];q[d+44>>2]=c;c=q[b+36>>2];q[d+32>>2]=q[b+32>>2];q[d+36>>2]=c;c=q[b+28>>2];q[d+24>>2]=q[b+24>>2];q[d+28>>2]=c;c=q[b+20>>2];q[d+16>>2]=q[b+16>>2];q[d+20>>2]=c;c=q[b+12>>2];q[d+8>>2]=q[b+8>>2];q[d+12>>2]=c}c=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=c;c=q[b+44>>2];q[e+40>>2]=q[b+40>>2];q[e+44>>2]=c;c=q[b+36>>2];q[e+32>>2]=q[b+32>>2];q[e+36>>2]=c;c=q[b+28>>2];q[e+24>>2]=q[b+24>>2];q[e+28>>2]=c;c=q[b+20>>2];q[e+16>>2]=q[b+16>>2];q[e+20>>2]=c;c=q[b+12>>2];q[e+8>>2]=q[b+8>>2];q[e+12>>2]=c;o[a+1288|0]=1;b=a+1284|0;c=q[b>>2];q[b>>2]=g;q[a+1280>>2]=c;b=q[a+160>>2];if(b){while(1){Wk(b,e);b=q[b+312>>2];if(b){continue}break}}o[a+1393|0]=1}}function Nn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=x(0),l=x(0),m=x(0),o=x(0),p=x(0);d=ue-176|0;ue=d;e=q[a+12>>2];if((e|0)!=q[a+16>>2]){Qp(e)}Fn(d,c,u[c+64>>2],u[c+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);g=a+528|0;a=q[g>>2];a:{if(!a){break a}e=g;while(1){h=q[a+32>>2]<(b|0);e=h?e:a;a=q[(h<<2)+a>>2];if(a){continue}break}if((e|0)==(g|0)|q[e+32>>2]>(b|0)|(!q[e+68>>2]|!r[e+81|0])){break a}a=q[e+72>>2];if(!(q[c+96>>2]>>>q[a+64>>2]&1)){break a}if(!(q[q[e+64>>2]+296>>2]!=1|u[c+64>>2]==u[c+68>>2])){yp(d+112|0);q[d+120>>2]=q[e+272>>2];a=q[e+268>>2];q[d+112>>2]=q[e+264>>2];q[d+116>>2]=a;q[d+124>>2]=q[e+276>>2];if(!Bl(d,d+112|0)){break a}a=q[e+72>>2]}g=q[a+476>>2];a=q[a+472>>2];b=(g|0)==(a|0);if(!b){if(b){break a}h=c+84|0;i=c+72|0;c=e+288|0;e=c+8|0;while(1){b=q[a>>2];b:{if(!(u[q[b+16>>2]+2304>>2]>x(3.4028234663852886e+37))){f=q[c+44>>2];q[d+152>>2]=q[c+40>>2];q[d+156>>2]=f;f=q[c+36>>2];q[d+144>>2]=q[c+32>>2];q[d+148>>2]=f;f=q[c+28>>2];q[d+136>>2]=q[c+24>>2];q[d+140>>2]=f;f=q[c+20>>2];q[d+128>>2]=q[c+16>>2];q[d+132>>2]=f;f=q[e+4>>2];q[d+120>>2]=q[e>>2];q[d+124>>2]=f;f=q[c+4>>2];q[d+112>>2]=q[c>>2];q[d+116>>2]=f;Xs(d+160|0,d+112|0);nt(d+112|0,i);j=u[d+120>>2];k=u[d+168>>2];l=u[d+112>>2];m=u[d+160>>2];o=u[d+116>>2];p=u[d+164>>2];nt(d+96|0,h);if(u[q[b+16>>2]+2304>>2]>2])+x(x(p-o)*u[d+100>>2]))+x(x(k-j)*u[d+104>>2]))){break b}b=q[a>>2]}zk(b,0)}a=a+4|0;if((g|0)!=(a|0)){continue}break}break a}zk(q[e+68>>2],1)}ue=d+176|0}function hi(a,b,c,d,e){var f=0,g=0;f=ue-32|0;ue=f;q[f+28>>2]=0;g=q[c>>2];a:{b:{if(g>>>0>4){break b}c:{switch(g-1|0){default:b=q[b>>2];o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;break a;case 0:b=q[b>>2];o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;break a;case 1:ji(c+4|0,f+28|0,b,b+4|0,x(B(x(A(x(d/e),x(1))),x(0))));break b;case 2:vj(f+8|0,q[c+4>>2],d,e);c=f;d=x(B(x(A(x(u[b>>2]+u[f+8>>2]),x(255))),x(0)));d:{if(d=x(0)){g=~~d>>>0;break d}g=0}o[c+28|0]=g;c=f;d=x(B(x(A(x(u[b+4>>2]+u[f+12>>2]),x(255))),x(0)));e:{if(d=x(0)){g=~~d>>>0;break e}g=0}o[c+29|0]=g;c=f;d=x(B(x(A(x(u[b+8>>2]+u[f+16>>2]),x(255))),x(0)));f:{if(d=x(0)){g=~~d>>>0;break f}g=0}o[c+30|0]=g;d=x(B(x(A(x(u[b+12>>2]+u[f+20>>2]),x(255))),x(0)));if(d=x(0)){o[f+31|0]=~~d>>>0;break b}o[f+31|0]=0;break b;case 3:break c}}Ms(f+8|0,q[c+40>>2],x(B(x(A(x(d/e),x(1))),x(0))));b=f;d=x(B(x(A(x(u[f+8>>2]*x(255)),x(255))),x(0)));g:{if(d=x(0)){c=~~d>>>0;break g}c=0}o[b+28|0]=c;b=f;d=x(B(x(A(x(u[f+12>>2]*x(255)),x(255))),x(0)));h:{if(d=x(0)){c=~~d>>>0;break h}c=0}o[b+29|0]=c;b=f;d=x(B(x(A(x(u[f+16>>2]*x(255)),x(255))),x(0)));i:{if(d=x(0)){c=~~d>>>0;break i}c=0}o[b+30|0]=c;b=f;d=x(B(x(A(x(u[f+20>>2]*x(255)),x(255))),x(0)));j:{if(d=x(0)){c=~~d>>>0;break j}c=0}o[b+31|0]=c}b=q[f+28>>2];o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24}ue=f+32|0}function On(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),o=x(0),p=x(0),s=x(0),t=x(0),v=x(0);d=ue-176|0;ue=d;e=q[a+12>>2];if((e|0)!=q[a+16>>2]){Qp(e)}Fn(d,c,u[c+64>>2],u[c+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);g=a+528|0;a=q[g>>2];a:{if(!a){break a}e=g;while(1){h=q[a+32>>2]<(b|0);e=h?e:a;a=q[(h<<2)+a>>2];if(a){continue}break}if(!(q[c+96>>2]>>>q[q[e+72>>2]+64>>2]&1)|((e|0)==(g|0)|q[e+32>>2]>(b|0)|(!q[e+68>>2]|!r[e+81|0]))){break a}h=q[e+64>>2];if(!(q[h+296>>2]!=1|u[c+64>>2]==u[c+68>>2])){yp(d+112|0);q[d+120>>2]=q[e+272>>2];a=q[e+268>>2];q[d+112>>2]=q[e+264>>2];q[d+116>>2]=a;q[d+124>>2]=q[e+276>>2];if(!Bl(d,d+112|0)){break a}}if(q[h+276>>2]<1){break a}k=c+84|0;l=c+72|0;g=e+288|0;i=g+8|0;a=0;while(1){j=a<<2;c=q[j+q[q[e+72>>2]+472>>2]>>2];b:{if(!(u[q[c+16>>2]+2304>>2]>x(3.4028234663852886e+37))){b=g;f=q[b+44>>2];q[d+152>>2]=q[b+40>>2];q[d+156>>2]=f;f=q[b+36>>2];q[d+144>>2]=q[b+32>>2];q[d+148>>2]=f;f=q[b+28>>2];q[d+136>>2]=q[b+24>>2];q[d+140>>2]=f;f=q[b+20>>2];q[d+128>>2]=q[b+16>>2];q[d+132>>2]=f;f=q[i+4>>2];q[d+120>>2]=q[i>>2];q[d+124>>2]=f;f=q[b+4>>2];q[d+112>>2]=q[b>>2];q[d+116>>2]=f;Xs(d+160|0,d+112|0);nt(d+112|0,l);m=u[d+120>>2];o=u[d+168>>2];p=u[d+112>>2];s=u[d+160>>2];t=u[d+116>>2];v=u[d+164>>2];nt(d+96|0,k);if(u[q[c+16>>2]+2304>>2]>2])+x(x(v-t)*u[d+100>>2]))+x(x(o-m)*u[d+104>>2]))){break b}c=q[j+q[q[e+72>>2]+472>>2]>>2]}zk(c,0)}a=a+1|0;if((a|0)>2]){continue}break}}ue=d+176|0}function El(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,s=0;f=ue-16|0;ue=f;d=q[a>>2];a:{if((q[a+8>>2]-d|0)/288>>>0>=64){break a}e=(q[a+4>>2]-d|0)/288|0;yt(f);d=n[q[f+8>>2]](f,18432,16)|0;g=q[q[f+12>>2]+4>>2];if(g){n[g](q[f>>2])}l=d+18432|0;j=d+w(e,288)|0;i=q[a+4>>2];e=q[a>>2];b:{if((i|0)!=(e|0)){d=j;while(1){g=d+ -288|0;q[g>>2]=0;k=i+ -288|0;c=q[k>>2];c:{if(!c){break c}n[q[q[c>>2]>>2]](c)|0;c=q[g>>2];if(!c){break c}n[q[q[c>>2]+8>>2]](c)|0;q[g>>2]=0}q[g>>2]=q[k>>2];b=i+ -271|0;h=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);c=d+ -271|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);o[c|0]=b;o[c+1|0]=b>>>8;o[c+2|0]=b>>>16;o[c+3|0]=b>>>24;o[c+4|0]=h;o[c+5|0]=h>>>8;o[c+6|0]=h>>>16;o[c+7|0]=h>>>24;b=i+ -276|0;h=q[b+4>>2];c=d+ -276|0;q[c>>2]=q[b>>2];q[c+4>>2]=h;b=i+ -284|0;h=q[b+4>>2];c=d+ -284|0;q[c>>2]=q[b>>2];q[c+4>>2]=h;h=i+ -260|0;m=q[h+4>>2];c=d+ -260|0;b=c;q[b>>2]=q[h>>2];q[b+4>>2]=m;q[d+ -252>>2]=q[i+ -252>>2];b=q[i+ -248>>2];q[d+ -248>>2]=b;b=q[b>>2];if(b){p=c,s=n[b](q[h>>2])|0,q[p>>2]=s}kV(d+ -244|0,i+ -244|0,228);d=g;i=k;if((e|0)!=(i|0)){continue}break}e=q[a+4>>2];d=q[a>>2];break b}g=j;d=e}q[a+4>>2]=j;q[a>>2]=g;g=q[a+8>>2];q[a+8>>2]=l;if((d|0)!=(e|0)){while(1){a=e+ -288|0;j=q[q[e+ -248>>2]+4>>2];if(j){n[j](q[e+ -260>>2])}e=q[a>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[a>>2]=0}e=a;if((a|0)!=(d|0)){continue}break}}if(!d){break a}zt(f);n[q[f+8>>2]](f,d,g-d|0);a=q[q[f+12>>2]+4>>2];if(!a){break a}n[a](q[f>>2])}ue=f+16|0}function Yr(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=x(0),m=0,p=0,r=0;j=ue-16|0;ue=j;h=u[c+4>>2];k=u[c>>2];l=u[c+8>>2];i=((h==x(0)?0:q[c+4>>2])+(k==x(0)?0:q[c>>2])|0)+(l==x(0)?0:q[c+8>>2])|0;p=a;a:{b:{f=q[b+4>>2];if(!f){break b}e=q[b>>2];m=yW(f);g=i&f+ -1;c:{if(m>>>0<=1){break c}c=i;g=c;if(c>>>0>>0){break c}g=(i>>>0)%(f>>>0)|0}c=g;g=c;c=q[(c<<2)+e>>2];if(!c){break b}r=f+ -1|0;while(1){c=q[c>>2];if(!c){break b}e=q[c+4>>2];if((i|0)!=(e|0)){d:{if(m>>>0<=1){e=e&r;break d}if(e>>>0>>0){break d}e=(e>>>0)%(f>>>0)|0}if((e|0)!=(g|0)){break b}}if(((u[c+20>>2]==h)<<1|u[c+16>>2]==k|(u[c+24>>2]==l)<<2)!=7){continue}break}b=0;break a}yt(j);c=n[q[j+8>>2]](j,48,16)|0;e=q[q[j+12>>2]+4>>2];if(e){n[e](q[j>>2])}d=q[d>>2];e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;e=q[d+12>>2];q[c+24>>2]=q[d+8>>2];q[c+28>>2]=e;q[c+32>>2]=0;q[c+4>>2]=i;q[c>>2]=0;h=u[b+16>>2];k=x(q[b+12>>2]+1>>>0);e:{if(x(h*x(f>>>0))>>0<3|f<<1;d=b;h=x(D(x(k/h)));f:{if(h=x(0)){g=~~h>>>0;break f}g=0}cs(d,f>>>0>>0?g:f);f=q[b+4>>2];if(!(f&f+ -1)){g=i&f+ -1;break e}if(i>>>0>>0){g=i;break e}g=(i>>>0)%(f>>>0)|0}d=g<<2;e=q[d+q[b>>2]>>2];g:{h:{if(!e){q[c>>2]=q[b+8>>2];q[b+8>>2]=c;q[d+q[b>>2]>>2]=b+8;d=q[c>>2];if(!d){break g}e=q[d+4>>2];d=f+ -1|0;i:{if(!(d&f)){e=d&e;break i}if(e>>>0>>0){break i}e=(e>>>0)%(f>>>0)|0}e=q[b>>2]+(e<<2)|0;break h}q[c>>2]=q[e>>2]}q[e>>2]=c}q[b+12>>2]=q[b+12>>2]+1;b=1}o[p+4|0]=b;q[a>>2]=c;ue=j+16|0}function Uj(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=x(0),o=x(0),p=x(0),r=x(0),s=0,t=x(0),v=x(0);l=ue-32|0;ue=l;m=x(1);s=q[b>>2];a:{b:{if(s>>>0>5){break b}c:{switch(s-1|0){default:if(q[b+4>>2]>=0){Gs(l+16|0,e,f,i,d,b+4|0,nt(l,b+8|0),k,k+12|0);b=q[l+28>>2];q[c+8>>2]=q[l+24>>2];q[c+12>>2]=b;b=q[l+20>>2];q[c>>2]=q[l+16>>2];q[c+4>>2]=b}m=u[c+12>>2];o=u[c+8>>2];p=u[c+4>>2];r=u[c>>2];break b;case 0:h=x(x(g*g)*x(.5));r=x(x(x(u[c+16>>2]*g)+u[c>>2])+x(h*u[c+32>>2]));m=x(x(x(u[c+28>>2]*g)+u[c+12>>2])+x(h*u[c+44>>2]));o=x(x(x(u[c+24>>2]*g)+u[c+8>>2])+x(h*u[c+40>>2]));p=x(x(x(u[c+20>>2]*g)+u[c+4>>2])+x(h*u[c+36>>2]));break b;case 1:zs(l+16|0,b+116|0,c,x(B(x(A(x(g/h),x(1))),x(0))));m=u[l+28>>2];o=u[l+24>>2];p=u[l+20>>2];r=u[l+16>>2];break b;case 2:sj(l+16|0,q[b+276>>2],g,h);g=x(u[l+24>>2]+u[c+8>>2]);o=j?g:x(-g);m=x(u[l+28>>2]+u[c+12>>2]);p=x(u[l+20>>2]+u[c+4>>2]);r=x(u[l+16>>2]+u[c>>2]);break b;case 4:break a;case 3:break c}}n[q[q[e>>2]+116>>2]](l+16|0,e,q[b+280>>2]);d=q[l+16>>2];if(!d){break b}h=u[b+284>>2];m=x(u[b+288>>2]*x(x(x(1)/x(u[d+68>>2]*h))*g));d:{if(q[b+292>>2]!=1){m=fV(m,x(1));break d}if(!(m>x(1))){break d}m=x(1)}Wj(l,d,m,x(h*x(n[q[q[e>>2]+32>>2]](e))));b=nt(l+16|0,l);m=u[b+12>>2];o=u[b+8>>2];p=u[b+4>>2];r=u[b>>2];n[q[q[d>>2]+8>>2]](d)|0}g=u[c+64>>2];u[c+64>>2]=r;b=c+76|0;h=u[b>>2];u[b>>2]=m;b=c+72|0;t=u[b>>2];u[b>>2]=o;b=c+68|0;v=u[b>>2];u[b>>2]=p;r=x(r-g);m=x(m-h);o=x(o-t);p=x(p-v)}u[a+12>>2]=m;u[a+8>>2]=o;u[a+4>>2]=p;u[a>>2]=r;ue=l+32|0}function xP(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p){var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;x=ue-16|0;ue=x;q[c>>2]=a;A=d&512;while(1){a:{b:{c:{d:{if((y|0)==4){if(uL(n)>>>0>1){C=x,D=VM(n),q[C+8>>2]=D;C=c,D=zP(fP(x+8|0,1),WM(n),q[c>>2]),q[C>>2]=D}d=d&176;if((d|0)==16){break c}if((d|0)!=32){break d}q[b>>2]=q[c>>2];break c}t=o[i+y|0];if(t>>>0>4){break a}e:{switch(t-1|0){default:q[b>>2]=q[c>>2];break a;case 0:q[b>>2]=q[c>>2];t=HI(g,32);s=q[c>>2];q[c>>2]=s+1;o[s|0]=t;break a;case 2:if(xL(n)){break a}t=r[vL(n,0)|0];s=q[c>>2];q[c>>2]=s+1;o[s|0]=t;break a;case 1:if(xL(m)|!A){break a}C=c,D=zP(VM(m),WM(m),q[c>>2]),q[C>>2]=D;break a;case 3:break e}}B=q[c>>2];e=h?e+1|0:e;u=e;while(1){f:{if(u>>>0>=f>>>0){break f}if(!IH(g,2048,o[u|0])){break f}u=u+1|0;continue}break}t=p;if((t|0)>=1){while(1){s=(t|0)<1;if(!(s|u>>>0<=e>>>0)){u=u+ -1|0;s=r[u|0];v=q[c>>2];q[c>>2]=v+1;o[v|0]=s;t=t+ -1|0;continue}break}if(s){s=0}else{s=HI(g,48)}while(1){v=q[c>>2];q[c>>2]=v+1;if((t|0)>=1){o[v|0]=s;t=t+ -1|0;continue}break}o[v|0]=j}if((e|0)==(u|0)){t=HI(g,48);s=q[c>>2];q[c>>2]=s+1;o[s|0]=t;break b}s=-1;g:{if(xL(l)){break g}s=o[vL(l,0)|0]}t=0;w=0;while(1){if((e|0)==(u|0)){break b}h:{if((t|0)!=(s|0)){v=t;break h}s=q[c>>2];q[c>>2]=s+1;o[s|0]=k;v=0;w=w+1|0;if(w>>>0>=uL(l)>>>0){s=t;break h}if(r[vL(l,w)|0]==127){s=-1;break h}s=o[vL(l,w)|0]}u=u+ -1|0;t=r[u|0];z=q[c>>2];q[c>>2]=z+1;o[z|0]=t;t=v+1|0;continue}}q[b>>2]=a}ue=x+16|0;return}dN(B,q[c>>2])}y=y+1|0;continue}}function Xi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=x(0),j=x(0),k=0,l=0,m=x(0);f=ue-16|0;ue=f;n[q[q[c>>2]+76>>2]](f,c);k=q[f>>2];if(k){kV(a+3744|0,b+200|0,108);c=q[b+184>>2];q[a+3508>>2]=0;q[a+3504>>2]=c;if(Tk(b)){c=Tk(b);e=q[a+4172>>2];i=x(0);a:{if(e>>>0>1){break a}if(e-1){i=u[c+828>>2];b:{if(x(y(i))>2];if(x(y(i))>2];c:{if(x(y(i))>2];e=a+3612|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3604|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,1,j,i);h=q[g+4>>2];e=a+3628|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3620|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,2,j,i);h=q[g+4>>2];e=a+3644|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3636|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,3,j,i);h=q[g+4>>2];e=a+3660|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3652|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,4,j,i);h=q[g+4>>2];e=a+3676|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3668|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,5,j,i);h=q[g+4>>2];e=a+3692|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;e=q[f+4>>2];g=a+3684|0;q[g>>2]=q[f>>2];q[g+4>>2]=e;l=a+3700|0,m=$j(c),u[l>>2]=m;q[a+3704>>2]=q[c+1428>>2];if(r[a+3480|0]){q[a+3708>>2]=q[c+336>>2]}Hh(a,Tk(b),a+3712|0,a+3728|0)}n[q[q[k>>2]+32>>2]](k,a+3436|0,q[b+184>>2],d);n[q[q[k>>2]+8>>2]](k)|0}ue=f+16|0}function ri(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=x(0),j=x(0),k=0,l=0,m=x(0);f=ue-16|0;ue=f;n[q[q[c>>2]+52>>2]](f,c);k=q[f>>2];if(k){c=q[b+184>>2];q[a+3492>>2]=0;q[a+3488>>2]=c;if(Tk(b)){c=Tk(b);e=q[a+3804>>2];i=x(0);a:{if(e>>>0>1){break a}if(e-1){i=u[c+828>>2];b:{if(x(y(i))>2];if(x(y(i))>2];c:{if(x(y(i))>2];e=a+3596|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3588|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,1,j,i);h=q[g+4>>2];e=a+3612|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3604|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,2,j,i);h=q[g+4>>2];e=a+3628|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3620|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,3,j,i);h=q[g+4>>2];e=a+3644|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3636|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,4,j,i);h=q[g+4>>2];e=a+3660|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;h=q[f+4>>2];e=a+3652|0;q[e>>2]=q[f>>2];q[e+4>>2]=h;ek(f,c,5,j,i);h=q[g+4>>2];e=a+3676|0;q[e>>2]=q[g>>2];q[e+4>>2]=h;e=q[f+4>>2];g=a+3668|0;q[g>>2]=q[f>>2];q[g+4>>2]=e;l=a+3684|0,m=$j(c),u[l>>2]=m;q[a+3688>>2]=q[c+1428>>2];if(r[a+3468|0]){q[a+3692>>2]=q[c+336>>2]}Hh(a,Tk(b),a+3696|0,a+3712|0)}n[q[q[k>>2]+32>>2]](k,a+3436|0,q[a+3488>>2],d);n[q[q[k>>2]+8>>2]](k)|0}ue=f+16|0}function TC(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-48|0;ue=d;f=q[a+8>>2];c=q[a+4>>2];a:{if(f-c>>5>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+24>>2]=0;q[c+28>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+32|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}g=q[a>>2];h=c-g>>5;e=h+b|0;b:{c:{if(e>>>0<134217728){q[d+24>>2]=a+8;q[d+20>>2]=0;c=0;f=f-g|0;g=f>>4;f=f>>5>>>0<67108863?g>>>0>>0?e:g:134217727;d:{if(!f){break d}wt(d+32|0);c=n[q[d+40>>2]](d+32|0,f<<5)|0;e=q[q[d+44>>2]+4>>2];if(!e){break d}n[e](q[d+32>>2])}q[d+8>>2]=c;e=(h<<5)+c|0;q[d+16>>2]=e;q[d+20>>2]=(f<<5)+c;q[d+12>>2]=e;f=lV(e,0,b<<5);while(1){f=f+32|0;b=b+ -1|0;if(b){continue}break}q[d+16>>2]=f;c=q[a+4>>2];g=q[a>>2];if((c|0)==(g|0)){break c}while(1){b=e+ -32|0;c=c+ -32|0;q[b>>2]=q[c>>2];e=c+12|0;q[b+12>>2]=q[e>>2];f=q[c+8>>2];q[b+4>>2]=q[c+4>>2];q[b+8>>2]=f;q[c+4>>2]=0;q[c+8>>2]=0;q[e>>2]=0;e=c+24|0;q[b+24>>2]=q[e>>2];f=q[c+20>>2];q[b+16>>2]=q[c+16>>2];q[b+20>>2]=f;q[c+16>>2]=0;q[c+20>>2]=0;q[e>>2]=0;q[b+28>>2]=q[c+28>>2];e=q[d+12>>2]+ -32|0;q[d+12>>2]=e;if((c|0)!=(g|0)){continue}break}c=q[a+4>>2];g=q[a>>2];f=q[d+16>>2];break b}kU();F()}e=q[d+12>>2]}q[a>>2]=e;q[d+12>>2]=g;q[a+4>>2]=f;q[d+16>>2]=c;b=q[a+8>>2];q[a+8>>2]=q[d+20>>2];q[d+8>>2]=g;q[d+20>>2]=b;LD(d+8|0,g);a=q[d+8>>2];if(!a){break a}b=q[d+20>>2];xt(d+32|0);n[q[d+40>>2]](d+32|0,a,b-a|0);a=q[q[d+44>>2]+4>>2];if(!a){break a}n[a](q[d+32>>2])}ue=d+48|0}function Pf(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{d=q[a+8>>2];c=q[a+4>>2];b:{if((d-c|0)/284>>>0>=b>>>0){while(1){c=lV(c,0,232);q[c+8>>2]=1;lV(c+84|0,0,96);q[c+232>>2]=0;q[c+236>>2]=0;q[c+188>>2]=0;q[c+192>>2]=0;q[c+180>>2]=1056964608;q[c+184>>2]=1056964608;q[c+240>>2]=0;q[c+244>>2]=0;q[c+248>>2]=0;q[c+252>>2]=0;q[c+256>>2]=0;q[c+260>>2]=0;q[c+264>>2]=0;q[c+268>>2]=0;q[c+280>>2]=1065353216;q[c+272>>2]=1056964608;q[c+276>>2]=1065353216;c=q[a+4>>2]+284|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=(c-g|0)/284|0;f=h+b|0;if(f>>>0>=15123125){break a}c=0;d=(d-g|0)/284|0;g=d<<1;f=d>>>0<7561562?g>>>0>>0?f:g:15123124;c:{if(!f){break c}wt(e);c=n[q[e+8>>2]](e,w(f,284))|0;d=q[q[e+12>>2]+4>>2];if(!d){break c}n[d](q[e>>2])}g=w(f,284)+c|0;d=w(h,284)+c|0;c=d;while(1){c=lV(c,0,232);q[c+8>>2]=1;lV(c+84|0,0,96);q[c+232>>2]=0;q[c+236>>2]=0;q[c+188>>2]=0;q[c+192>>2]=0;q[c+180>>2]=1056964608;q[c+184>>2]=1056964608;q[c+240>>2]=0;q[c+244>>2]=0;q[c+248>>2]=0;q[c+252>>2]=0;q[c+256>>2]=0;q[c+260>>2]=0;q[c+264>>2]=0;q[c+268>>2]=0;q[c+280>>2]=1065353216;q[c+272>>2]=1056964608;q[c+276>>2]=1065353216;c=c+284|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];f=q[a+4>>2]-b|0;d=d+w((f|0)/-284|0,284)|0;if((f|0)>=1){kV(d,b,f);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=d;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}xt(e);n[q[e+8>>2]](e,b,c-b|0);a=q[q[e+12>>2]+4>>2];if(!a){break b}n[a](q[e>>2])}ue=e+16|0;return}kU();F()}function Cf(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=q[a>>2];f=q[b+8>>2];g=f+4|0;if(!(q[b+12>>2]!=2?g>>>0<=t[b+4>>2]:0)){q[b+12>>2]=2;return}e=q[a+4>>2];c=q[a+8>>2];f=f+q[b>>2]|0;f=r[f|0]|r[f+1|0]<<8|(r[f+2|0]<<16|r[f+3|0]<<24);q[b+8>>2]=g;if(!((f|0)<=q[e>>2]?(f|0)>=0:0)){q[b+12>>2]=2}if((f|0)>=1){g=c+196|0;b=q[c+200>>2];d=q[c+196>>2];e=b-d>>2;a:{if(f>>>0>e>>>0){Af(g,f-e|0);break a}if(f>>>0>=e>>>0){break a}e=d+(f<<2)|0;if((e|0)!=(b|0)){while(1){b=b+ -4|0;d=q[b>>2];q[b>>2]=0;if(d){_U(d)}if((b|0)!=(e|0)){continue}break}}q[c+200>>2]=e}b=q[c+212>>2];d=q[c+208>>2];e=b-d>>2;b:{if(f>>>0>e>>>0){Bf(c+208|0,f-e|0);break b}if(f>>>0>=e>>>0){break b}e=d+(f<<2)|0;if((e|0)!=(b|0)){while(1){b=b+ -4|0;d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}if((b|0)!=(e|0)){continue}break}}q[c+212>>2]=e}e=0;while(1){c=q[a>>2];b=q[c+8>>2];h=b+4|0;c:{d:{if(!(q[c+12>>2]!=2?h>>>0<=t[c+4>>2]:0)){d=c+12|0;b=0;break d}i=q[a+4>>2];d=c+12|0;b=b+q[c>>2]|0;b=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[c+8>>2]=h;if((b|0)<0){break d}if((b|0)<=q[i>>2]){break c}}q[d>>2]=2}c=q[g>>2];d=b+b|0;d=_S(d>>>0>>0?-1:d);h=e<<2;i=h+c|0;c=q[i>>2];q[i>>2]=d;if(c){_U(c)}c=q[a>>2];e:{f:{g:{if((b|0)<0){break g}d=q[c+8>>2];b=b<<1;if(d+b>>>0>t[c+4>>2]){break g}if(q[c+12>>2]!=2){break f}}q[c+12>>2]=2;break e}kV(q[h+q[g>>2]>>2],d+q[c>>2]|0,b);q[c+8>>2]=b+q[c+8>>2]}e=e+1|0;if((f|0)!=(e|0)){continue}break}}}function Qw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=ue-144|0;ue=f;a:{if((e|0)==1){q[f+128>>2]=0;q[f+132>>2]=0;q[f+120>>2]=0;q[f+124>>2]=0;q[f+112>>2]=0;q[f+116>>2]=0;q[f+124>>2]=0;q[f+128>>2]=0;q[f+132>>2]=0;q[f+104>>2]=0;q[f+108>>2]=0;q[f+104>>2]=f+104|4;q[f+116>>2]=0;q[f+120>>2]=0;b:{if(!dq(f+104|0,c,d)){q[a>>2]=0;break b}if(!fq(f+104|0)){q[a>>2]=0;break b}q[f+16>>2]=0;q[f+20>>2]=0;p[f+22>>1]=0;p[f+24>>1]=0;p[f+26>>1]=0;p[f+28>>1]=0;q[f+8>>2]=0;q[f+12>>2]=0;q[f+4>>2]=2;q[f>>2]=5940;lV(f+36|0,0,68);d=q[jg(f+104|0)>>2];c=jg(f+104|0);c:{if(!qq(f,d,q[c+4>>2]-q[c>>2]|0)){b=Ft(369488,28552,35);EH(f+136|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(f+136|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(f+136|0);pI(b,c);DH(b);q[a>>2]=0;break c}Hw(f+136|0,b,f,gq(f+104|0));q[a>>2]=q[f+136>>2]}_q(f)}a=q[f+116>>2];if(a){q[f+120>>2]=a;_U(a)}Rw(f+104|0,q[f+108>>2]);break a}q[f+16>>2]=0;q[f+20>>2]=0;p[f+22>>1]=0;p[f+24>>1]=0;p[f+26>>1]=0;p[f+28>>1]=0;q[f+8>>2]=0;q[f+12>>2]=0;q[f+4>>2]=2;q[f>>2]=5940;lV(f+36|0,0,68);d:{if(!qq(f,c,d)){b=Ft(369488,28552,35);EH(f+104|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(f+104|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(f+104|0);pI(b,c);DH(b);q[a>>2]=0;break d}c=_S(12);q[c+4>>2]=26448;q[c>>2]=26416;q[c+8>>2]=1;d=b;b=n[q[6609]](c,f)|0;Hw(f+104|0,d,f,b);q[a>>2]=q[f+104>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}n[q[q[c>>2]+8>>2]](c)|0}_q(f)}ue=f+144|0}function Ds(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=q[b>>2];i=r[h|0]|r[h+1|0]<<8|(r[h+2|0]<<16|r[h+3|0]<<24);q[a>>2]=i;d=4;if((i|0)>0){while(1){j=c;a:{b:{if(0|(c|0)!=2){c=d;l=c+20|0;if((l|0)>-1){break b}}c=2;break a}d=w(f,20)+a|0;c=c+h|0;e=r[c+16|0]|r[c+17|0]<<8|(r[c+18|0]<<16|r[c+19|0]<<24);o[d+24|0]=e;o[d+25|0]=e>>>8;o[d+26|0]=e>>>16;o[d+27|0]=e>>>24;e=r[c+12|0]|r[c+13|0]<<8|(r[c+14|0]<<16|r[c+15|0]<<24);g=r[c+8|0]|r[c+9|0]<<8|(r[c+10|0]<<16|r[c+11|0]<<24);o[d+16|0]=g;o[d+17|0]=g>>>8;o[d+18|0]=g>>>16;o[d+19|0]=g>>>24;o[d+20|0]=e;o[d+21|0]=e>>>8;o[d+22|0]=e>>>16;o[d+23|0]=e>>>24;e=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[d+8|0]=c;o[d+9|0]=c>>>8;o[d+10|0]=c>>>16;o[d+11|0]=c>>>24;o[d+12|0]=e;o[d+13|0]=e>>>8;o[d+14|0]=e>>>16;o[d+15|0]=e>>>24;d=k|l;c=j}f=f+1|0;if((i|0)!=(f|0)){continue}break}}j=c;c:{d:{f=0;if(f|(c|0)!=2){c=d;g=c+4|0;if((g|0)>-1){break d}}e=q[a+4>>2];c=2;break c}d=c+h|0;e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a+4>>2]=e;d=f|g;c=j}if((e|0)>0){while(1){j=c;e:{f:{g=0;if(g|(c|0)!=2){c=d;i=c+8|0;if((i|0)>-1){break f}}c=2;break e}d=c+h|0;c=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);k=(f<<3)+a|0;q[k+168>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[k+172>>2]=c;d=g|i;c=j}f=f+1|0;if((e|0)!=(f|0)){continue}break}}q[b>>2]=d+q[b>>2]}function fy(a){a=a|0;var b=0,c=0,d=0,e=0;q[a+8>>2]=191360;q[a>>2]=191100;Gv(q[a+4>>2],a);b=q[a+176>>2];if(b){n[q[q[b>>2]+4>>2]](b);q[a+176>>2]=0}b=q[a+72>>2];if(b){n[q[q[b>>2]+4>>2]](b);q[a+72>>2]=0}b=q[a+44>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+44>>2]=0}b=q[a+48>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+48>>2]=0}b=q[a+52>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+52>>2]=0}b=q[a+56>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+56>>2]=0}b=q[a+60>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+60>>2]=0}b=q[a+64>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+64>>2]=0}b=q[a+80>>2];if(b){n[q[q[b>>2]+4>>2]](b);q[a+80>>2]=0}b=q[a+32>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+32>>2]=0}b=q[a+36>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+36>>2]=0}e=q[a+184>>2];if(e){c=e;b=q[a+188>>2];d=c;a:{if((c|0)==(b|0)){break a}while(1){b=b+ -4|0;c=q[b>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b>>2]=0}if((b|0)!=(e|0)){continue}break}d=q[a+184>>2]}c=d;q[a+188>>2]=e;_U(c)}b=q[a+180>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+180>>2]=0}b=q[a+76>>2];q[a+76>>2]=0;if(b){_U(oC(b))}e=q[a+20>>2];if(e){c=e;b=q[a+24>>2];d=c;b:{if((c|0)==(b|0)){break b}while(1){c=b;b=b+ -8|0;c=q[c+ -4>>2];c:{if(!c){break c}d=q[c+4>>2];q[c+4>>2]=d+ -1;if(d){break c}n[q[q[c>>2]+8>>2]](c);WS(c)}if((b|0)!=(e|0)){continue}break}d=q[a+20>>2]}c=d;q[a+24>>2]=e;_U(c)}b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}Lu(a);return a|0}function oK(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=ue-272|0;ue=f;a:{if(r[b|0]){break a}b=nK(350640);if(r[b|0]?b:0){break a}b=nK(w(a,12)+350656|0);if(r[b|0]?b:0){break a}b=nK(350728);if(r[b|0]?b:0){break a}b=350733}b:{while(1){d=r[b+c|0];if(!(!d|(d|0)==47)){g=15;c=c+1|0;if((c|0)!=15){continue}break b}break}g=c}d=350733;c:{d:{c=r[b|0];e:{f:{if(!(r[b+g|0]|(c|0)==46)){d=b;if((c|0)!=67){break f}}if(!r[d+1|0]){break e}}if(!kK(d,350733)){break e}if(kK(d,350741)){break d}}if(!a){c=350564;if(r[d+1|0]==46){break c}}c=0;break c}c=q[92591];if(c){while(1){if(!kK(d,c+8|0)){break c}c=q[c+24>>2];if(c){continue}break}}c=q[92591];if(c){while(1){if(!kK(d,c+8|0)){break c}c=q[c+24>>2];if(c){continue}break}}g:{h:{i:{if(q[91785]){break i}c=nK(350747);if(!c|!r[c|0]){break i}j=g+1|0;k=254-g|0;while(1){h=lG(c,58);b=r[h|0];i=(h-c|0)-((b|0)!=0)|0;if(i>>>0>>0){kV(f+16|0,c,i);b=(f+16|0)+i|0;o[b|0]=47;kV(b+1|0,d,g);o[f+16+(i+j)|0]=0;c=jb(f+16|0,f+12|0)|0;if(c){b=ZU(28);if(b){break h}WF(kb(c|0,q[f+12>>2])|0);break i}b=r[h|0]}c=h+((b|0)!=0)|0;if(r[c|0]){continue}break}}b=ZU(28);if(!b){break g}e=q[87642];q[b>>2]=q[87641];q[b+4>>2]=e;e=b+8|0;kV(e,d,g);o[g+e|0]=0;q[b+24>>2]=q[92591];q[92591]=b;e=b;break g}q[b>>2]=c;q[b+4>>2]=q[f+12>>2];e=b+8|0;kV(e,d,g);o[g+e|0]=0;q[b+24>>2]=q[92591];q[92591]=b;e=b}c=a|e?e:350564}ue=f+272|0;return c}function Cn(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0);e=q[b>>2];n[q[q[e>>2]+180>>2]](e)|0;e=q[b>>2];f=q[b+8>>2];uo(f+32|0,q[b+12>>2]);g=q[e+272>>2];d=q[f+476>>2];e=q[f+472>>2];h=d-e>>2;a:{if(g>>>0>h>>>0){Dn(f+472|0,g-h|0);e=q[f+472>>2];d=q[f+476>>2];break a}if(g>>>0>=h>>>0){break a}d=(g<<2)+e|0;q[f+476>>2]=d}if((e|0)!=(d|0)){d=0;while(1){q[(d<<2)+e>>2]=0;d=d+1|0;e=q[f+472>>2];if(d>>>0>2]-e>>2>>>0){continue}break}}q[b+172>>2]=0;o[b+168|0]=0;p[b+22>>1]=0;o[b+19|0]=256;o[b+20|0]=1;q[f+8>>2]=0;g=r[b+17|0];o[b+17|0]=0;tl(a,b);c=x(c+x(-1));if(!!(c>x(0))){h=a+384|0;f=a+144|0;while(1){Ek(q[b+8>>2],x(1));e=f;while(1){d=q[e>>2];i=q[e+4>>2];b:{if((d|0)==(i|0)){break b}while(1){lk(q[d>>2],q[b+8>>2]);d=d+4|0;if((i|0)!=(d|0)){continue}break}d=q[e>>2];i=q[e+4>>2];if((d|0)==(i|0)){break b}while(1){mk(q[d>>2],q[b+8>>2]);d=d+4|0;if((i|0)!=(d|0)){continue}break}}e=e+12|0;if((h|0)!=(e|0)){continue}break}pl(a,b);Fk(q[b+8>>2]);j=x(j+x(1));if(j>2],x(1));f=a+384|0;e=a+144|0;while(1){d=q[e>>2];g=q[e+4>>2];c:{if((d|0)==(g|0)){break c}while(1){lk(q[d>>2],q[b+8>>2]);d=d+4|0;if((g|0)!=(d|0)){continue}break}d=q[e>>2];g=q[e+4>>2];if((d|0)==(g|0)){break c}while(1){mk(q[d>>2],q[b+8>>2]);d=d+4|0;if((g|0)!=(d|0)){continue}break}}e=e+12|0;if((f|0)!=(e|0)){continue}break}pl(a,b);Fk(q[b+8>>2])}function nx(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,o=0,p=0;m=ue-32|0;ue=m;if(!(q[a+192>>2]==q[a+188>>2]|q[i+20>>2]<0)){n[q[q[b>>2]+228>>2]](m+24|0,b);l=q[m+24>>2];k=q[m+28>>2];a:{if(!k){break a}o=q[k+4>>2];q[k+4>>2]=o+ -1;if(o){break a}n[q[q[k>>2]+8>>2]](k);WS(k)}b:{if(!l){q[m+16>>2]=0;n[q[q[g>>2]+16>>2]](g,m+16|0);k=q[m+16>>2];if(!k){break b}n[q[q[k>>2]+8>>2]](k)|0;q[m+16>>2]=0;break b}n[q[q[b>>2]+228>>2]](m+24|0,b);q[m+8>>2]=0;l=q[m+24>>2];k=q[l+4>>2];c:{if(!k){break c}n[q[q[k>>2]>>2]](k)|0;k=q[m+8>>2];if(!k){break c}n[q[q[k>>2]+8>>2]](k)|0;q[m+8>>2]=0}q[m+8>>2]=q[l+4>>2];n[q[q[g>>2]+16>>2]](g,m+8|0);k=q[m+8>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[m+8>>2]=0}k=q[m+28>>2];if(!k){break b}l=q[k+4>>2];q[k+4>>2]=l+ -1;if(l){break b}n[q[q[k>>2]+8>>2]](k);WS(k)}l=q[q[i+40>>2]+40>>2];k=1;d:{if(!l){break d}l=q[l>>2];k=1;if((l|0)<0){break d}k=q[i+4>>2];n[q[q[k>>2]+104>>2]](m+24|0,k,l);l=q[m+24>>2];k=1;if(!l){break d}k=r[l+25|0];n[q[q[l>>2]+8>>2]](l)|0;k=k?2:1}ox(a,b,i);l=0;while(1){e:{f:{o=q[q[i+40>>2]+40>>2];if(!o){break f}o=q[o>>2];if((o|0)<0){break f}p=q[i+4>>2];n[q[q[p>>2]+104>>2]](m+24|0,p,o);o=q[m+24>>2];if(!o){break f}n[q[q[o>>2]+8>>2]](o)|0;rx(a,b,c,d,e,f,g,h,i,l,j);break e}if(q[a+364>>2]+ -3>>>0<=2){sx(a,b,c,d,e,f,g,h,i,l,j);break e}rx(a,b,c,d,e,f,g,h,i,l,j)}l=l+1|0;if((k|0)!=(l|0)){continue}break}}ue=m+32|0}function mx(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,o=0,p=0;m=ue-32|0;ue=m;if(!(q[a+192>>2]==q[a+188>>2]|q[i+20>>2]<0)){n[q[q[b>>2]+228>>2]](m+24|0,b);l=q[m+24>>2];k=q[m+28>>2];a:{if(!k){break a}o=q[k+4>>2];q[k+4>>2]=o+ -1;if(o){break a}n[q[q[k>>2]+8>>2]](k);WS(k)}b:{if(!l){q[m+16>>2]=0;n[q[q[g>>2]+16>>2]](g,m+16|0);k=q[m+16>>2];if(!k){break b}n[q[q[k>>2]+8>>2]](k)|0;q[m+16>>2]=0;break b}n[q[q[b>>2]+228>>2]](m+24|0,b);q[m+8>>2]=0;l=q[m+24>>2];k=q[l+4>>2];c:{if(!k){break c}n[q[q[k>>2]>>2]](k)|0;k=q[m+8>>2];if(!k){break c}n[q[q[k>>2]+8>>2]](k)|0;q[m+8>>2]=0}q[m+8>>2]=q[l+4>>2];n[q[q[g>>2]+16>>2]](g,m+8|0);k=q[m+8>>2];if(k){n[q[q[k>>2]+8>>2]](k)|0;q[m+8>>2]=0}k=q[m+28>>2];if(!k){break b}l=q[k+4>>2];q[k+4>>2]=l+ -1;if(l){break b}n[q[q[k>>2]+8>>2]](k);WS(k)}l=q[q[i+40>>2]+40>>2];k=1;d:{if(!l){break d}l=q[l>>2];k=1;if((l|0)<0){break d}k=q[i+4>>2];n[q[q[k>>2]+104>>2]](m+24|0,k,l);l=q[m+24>>2];k=1;if(!l){break d}k=r[l+25|0];n[q[q[l>>2]+8>>2]](l)|0;k=k?2:1}ox(a,b,i);l=0;while(1){e:{f:{o=q[q[i+40>>2]+40>>2];if(!o){break f}o=q[o>>2];if((o|0)<0){break f}p=q[i+4>>2];n[q[q[p>>2]+104>>2]](m+24|0,p,o);o=q[m+24>>2];if(!o){break f}n[q[q[o>>2]+8>>2]](o)|0;px(a,b,c,d,e,f,g,h,i,l,j);break e}if(q[a+364>>2]+ -3>>>0<=2){qx(a,b,c,d,e,f,g,h,i,l,j);break e}px(a,b,c,d,e,f,g,h,i,l,j)}l=l+1|0;if((k|0)!=(l|0)){continue}break}}ue=m+32|0}function VE(a,b,c){var d=0,e=0,g=0,h=0;d=ue-144|0;ue=d;e=a+24|0;g=a+40|0;Ap(d+128|0,zp(d+112|0,(f(0,r[a+8|0]|r[a+9|0]<<8|(r[a+10|0]<<16|r[a+11|0]<<24)),j()),(f(0,r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24)),j()),(f(0,r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24)),j())));q[b+8>>2]=q[d+136>>2];h=q[d+132>>2];q[b>>2]=q[d+128>>2];q[b+4>>2]=h;b=zp(d+128|0,x(-(f(0,r[a+48|0]|r[a+49|0]<<8|(r[a+50|0]<<16|r[a+51|0]<<24)),j())),x(-(f(0,r[a+52|0]|r[a+53|0]<<8|(r[a+54|0]<<16|r[a+55|0]<<24)),j())),x(-(f(0,r[a+56|0]|r[a+57|0]<<8|(r[a+58|0]<<16|r[a+59|0]<<24)),j())));e=zp(d+112|0,(f(0,r[a+8|0]|r[a+9|0]<<8|(r[a+10|0]<<16|r[a+11|0]<<24)),j()),(f(0,r[e|0]|r[e+1|0]<<8|(r[e+2|0]<<16|r[e+3|0]<<24)),j()),(f(0,r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24)),j()));g=zp(d+96|0,(f(0,r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24)),j()),(f(0,r[a+16|0]|r[a+17|0]<<8|(r[a+18|0]<<16|r[a+19|0]<<24)),j()),(f(0,r[a+32|0]|r[a+33|0]<<8|(r[a+34|0]<<16|r[a+35|0]<<24)),j()));a=zp(d+80|0,(f(0,r[a+4|0]|r[a+5|0]<<8|(r[a+6|0]<<16|r[a+7|0]<<24)),j()),(f(0,r[a+20|0]|r[a+21|0]<<8|(r[a+22|0]<<16|r[a+23|0]<<24)),j()),(f(0,r[a+36|0]|r[a+37|0]<<8|(r[a+38|0]<<16|r[a+39|0]<<24)),j()));Dp(d+32|0,g,b);Dp(d+16|0,a,b+4|0);Bp(d+48|0,d+32|0,d+16|0);Dp(d,e,b+8|0);Bp(d- -64|0,d+48|0,d);q[c+8>>2]=q[d+72>>2];a=q[d+68>>2];q[c>>2]=q[d+64>>2];q[c+4>>2]=a;ue=d+144|0}function Jn(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),s=x(0);c=ue-80|0;ue=c;a:{if(!q[b+4>>2]|!r[b+17|0]){break a}d=q[a+4>>2];if(!(q[d+96>>2]>>>q[q[b+8>>2]+64>>2]&1)){break a}if(!(q[q[b>>2]+296>>2]!=1|u[d+64>>2]==u[d+68>>2])){d=q[a+8>>2];yp(c+16|0);q[c+24>>2]=q[b+208>>2];f=q[b+204>>2];q[c+16>>2]=q[b+200>>2];q[c+20>>2]=f;q[c+28>>2]=q[b+212>>2];if(!Bl(d,c+16|0)){break a}}if(!r[b+18|0]){break a}d=q[b+8>>2];f=q[d+476>>2];g=q[d+472>>2];if((f|0)!=(g|0)){h=q[q[b>>2]+276>>2];if(h>>>0>=f-g>>2>>>0){break a}g=b+224|0;i=g+8|0;while(1){j=h<<2;f=q[j+q[d+472>>2]>>2];b:{if(!(u[q[f+16>>2]+2304>>2]>x(3.4028234663852886e+37))){k=q[a+4>>2];d=g;e=q[d+44>>2];q[c+56>>2]=q[d+40>>2];q[c+60>>2]=e;e=q[d+36>>2];q[c+48>>2]=q[d+32>>2];q[c+52>>2]=e;e=q[d+28>>2];q[c+40>>2]=q[d+24>>2];q[c+44>>2]=e;e=q[d+20>>2];q[c+32>>2]=q[d+16>>2];q[c+36>>2]=e;e=q[i+4>>2];q[c+24>>2]=q[i>>2];q[c+28>>2]=e;e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;Xs(c- -64|0,c+16|0);nt(c+16|0,k+72|0);l=u[c+24>>2];m=u[c+72>>2];n=u[c+16>>2];o=u[c+64>>2];p=u[c+20>>2];s=u[c+68>>2];nt(c,k+84|0);if(u[q[f+16>>2]+2304>>2]>2])+x(x(s-p)*u[c+4>>2]))+x(x(m-l)*u[c+8>>2]))){break b}f=q[q[q[b+8>>2]+472>>2]+j>>2]}zk(f,0)}h=h+1|0;d=q[b+8>>2];if(h>>>0>2]-q[d+472>>2]>>2>>>0){continue}break}break a}zk(q[b+4>>2],1)}ue=c+80|0}function iR(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0;q[c>>2]=a;q[f>>2]=d;a:{while(1){d=q[c>>2];if(d>>>0>=b>>>0){j=0;break a}j=1;h=q[f>>2];if(h>>>0>=e>>>0){break a}b:{a=r[d|0];if(a>>>0>1114111){break b}l=c;c:{if(a<<24>>24>=0){p[h>>1]=a;a=d+1|0;break c}if(a>>>0<194){break b}if(a>>>0<=223){if((b-d|0)<2){break a}g=r[d+1|0];if((g&192)!=128){break b}j=2;a=g&63|a<<6&1984;if(a>>>0>1114111){break a}p[h>>1]=a;a=d+2|0;break c}if(a>>>0<=239){if((b-d|0)<3){break a}i=r[d+2|0];g=r[d+1|0];d:{e:{if((a|0)!=237){if((a|0)!=224){break e}if((g&224)!=160){break b}break d}if((g&224)!=128){break b}break d}if((g&192)!=128){break b}}if((i&192)!=128){break b}j=2;a=i&63|((g&63)<<6|a<<12);if((a&65535)>>>0>1114111){break a}p[h>>1]=a;a=d+3|0;break c}if(a>>>0>244){break b}if((b-d|0)<4){break a}i=r[d+3|0];g=r[d+2|0];d=r[d+1|0];f:{g:{k=a+ -240|0;if(k>>>0>4){break g}h:{switch(k-1|0){default:if((d+112&255)>>>0>=48){break b}break f;case 0:case 1:case 2:break g;case 3:break h}}if((d&240)!=128){break b}break f}if((d&192)!=128){break b}}if((g&192)!=128|(i&192)!=128){break b}if((e-h|0)<4){break a}j=2;i=i&63;k=g<<6;a=a&7;if((i|(k&4032|(d<<12&258048|a<<18)))>>>0>1114111){break a}d=d<<2;p[h>>1]=(d&192|a<<8|(g>>>4&3|d&60))+16320|55296;q[f>>2]=h+2;p[h+2>>1]=i|k&960|56320;a=q[c>>2]+4|0}q[l>>2]=a;q[f>>2]=q[f>>2]+2;continue}break}return 2}return j}function ii(a,b,c){var d=x(0),e=0,f=0,g=0,h=0,i=0,j=x(0),k=x(0),l=x(0);e=a;d=x(n[q[q[c>>2]+16>>2]](c,x(r[b+8|0]),x(r[b+4|0])));a:{if(d=x(0)){f=~~d>>>0;break a}f=0}o[e|0]=f;e=a;d=x(n[q[q[c>>2]+16>>2]](c,x(r[b+9|0]),x(r[b+5|0])));b:{if(d=x(0)){f=~~d>>>0;break b}f=0}o[e+1|0]=f;e=a;d=x(n[q[q[c>>2]+16>>2]](c,x(r[b+10|0]),x(r[b+6|0])));c:{if(d=x(0)){f=~~d>>>0;break c}f=0}o[e+2|0]=f;e=a;d=x(n[q[q[c>>2]+16>>2]](c,x(r[b+11|0]),x(r[b+7|0])));d:{if(d=x(0)){c=~~d>>>0;break d}c=0}o[e+3|0]=c;if(q[b>>2]==1){g=r[a|0]|r[a+1|0]<<8|(r[a+2|0]<<16|r[a+3|0]<<24);j=x(x((g>>>8&255)>>>0)/x(255));b=g&255;b=b>>>0<252?b:252;e=(b>>>0)/42|0;l=x(x(x(b|0)/x(42))-x(e>>>0));c=g>>>16&255;k=x(c>>>0);d=x(x(x(1)-x(j*l))*k);e:{if(x(y(d))>>0)%6|0;e=f>>>0>5;d=x(x(x(1)-j)*k);g:{if(x(y(d))>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24}}function my(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=q[a+32>>2];if(b){n[q[q[b>>2]+16>>2]](b);while(1){b=zu(q[a+32>>2]+8|0,6);c=e<<2;d=c|2;o[b+20|0]=d;o[b+21|0]=d>>>8;o[b+22|0]=d>>>16;o[b+23|0]=d>>>24;o[b+16|0]=c;o[b+17|0]=c>>>8;o[b+18|0]=c>>>16;o[b+19|0]=c>>>24;d=c|3;o[b+12|0]=d;o[b+13|0]=d>>>8;o[b+14|0]=d>>>16;o[b+15|0]=d>>>24;o[b+8|0]=c;o[b+9|0]=c>>>8;o[b+10|0]=c>>>16;o[b+11|0]=c>>>24;c=c|1;o[b+4|0]=c;o[b+5|0]=c>>>8;o[b+6|0]=c>>>16;o[b+7|0]=c>>>24;o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;b=e>>>0<(w(q[a+40>>2],352)>>>0)/24>>>2>>>0;e=e+1|0;if(b){continue}break}b=q[a+32>>2];n[q[q[b>>2]+20>>2]](b)}b=q[a+36>>2];if(b){n[q[q[b>>2]+16>>2]](b);e=0;while(1){b=zu(q[a+36>>2]+8|0,8);c=e<<2;d=c|3;o[b+28|0]=d;o[b+29|0]=d>>>8;o[b+30|0]=d>>>16;o[b+31|0]=d>>>24;f=c|1;o[b+24|0]=f;o[b+25|0]=f>>>8;o[b+26|0]=f>>>16;o[b+27|0]=f>>>24;g=c|2;o[b+20|0]=g;o[b+21|0]=g>>>8;o[b+22|0]=g>>>16;o[b+23|0]=g>>>24;o[b+16|0]=c;o[b+17|0]=c>>>8;o[b+18|0]=c>>>16;o[b+19|0]=c>>>24;o[b+12|0]=d;o[b+13|0]=d>>>8;o[b+14|0]=d>>>16;o[b+15|0]=d>>>24;o[b+8|0]=g;o[b+9|0]=g>>>8;o[b+10|0]=g>>>16;o[b+11|0]=g>>>24;o[b+4|0]=f;o[b+5|0]=f>>>8;o[b+6|0]=f>>>16;o[b+7|0]=f>>>24;o[b|0]=c;o[b+1|0]=c>>>8;o[b+2|0]=c>>>16;o[b+3|0]=c>>>24;b=e>>>0<(w(q[a+40>>2],352)>>>0)/24>>>2>>>0;e=e+1|0;if(b){continue}break}a=q[a+36>>2];n[q[q[a>>2]+20>>2]](a)}}function qn(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0);l=u[b+52>>2];m=u[b+36>>2];n=u[b+20>>2];o=u[b+56>>2];p=u[b+40>>2];q=u[b+24>>2];h=u[b+60>>2];i=u[b+44>>2];j=u[b+28>>2];r=u[b+4>>2];s=u[b+8>>2];k=u[b+12>>2];d=u[c+12>>2];t=u[b+48>>2];e=u[c+8>>2];v=u[b+32>>2];f=u[c+4>>2];w=u[b+16>>2];g=u[c>>2];y=u[b>>2];u[a>>2]=x(d*t)+x(x(e*v)+x(x(f*w)+x(g*y)));u[a+12>>2]=x(d*h)+x(x(e*i)+x(x(f*j)+x(g*k)));u[a+8>>2]=x(d*o)+x(x(e*p)+x(x(f*q)+x(g*s)));u[a+4>>2]=x(d*l)+x(x(e*m)+x(x(f*n)+x(g*r)));d=u[c+28>>2];e=u[c+24>>2];f=u[c+20>>2];g=u[c+16>>2];u[a+28>>2]=x(h*d)+x(x(i*e)+x(x(j*f)+x(k*g)));u[a+24>>2]=x(o*d)+x(x(p*e)+x(x(q*f)+x(s*g)));u[a+20>>2]=x(l*d)+x(x(m*e)+x(x(n*f)+x(r*g)));u[a+16>>2]=x(t*d)+x(x(v*e)+x(x(w*f)+x(y*g)));d=u[c+44>>2];e=u[c+40>>2];f=u[c+36>>2];g=u[c+32>>2];u[a+44>>2]=x(h*d)+x(x(i*e)+x(x(j*f)+x(k*g)));u[a+40>>2]=x(o*d)+x(x(p*e)+x(x(q*f)+x(s*g)));u[a+36>>2]=x(l*d)+x(x(m*e)+x(x(n*f)+x(r*g)));u[a+32>>2]=x(t*d)+x(x(v*e)+x(x(w*f)+x(y*g)));d=h;h=u[c+60>>2];e=i;i=u[c+56>>2];f=j;j=u[c+52>>2];g=k;k=u[c+48>>2];u[a+60>>2]=x(d*h)+x(x(e*i)+x(x(f*j)+x(g*k)));u[a+56>>2]=x(o*h)+x(x(p*i)+x(x(q*j)+x(s*k)));u[a+52>>2]=x(l*h)+x(x(m*i)+x(x(n*j)+x(r*k)));u[a+48>>2]=x(t*h)+x(x(v*i)+x(x(w*j)+x(y*k)))}function ap(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0;e=ue-16|0;ue=e;a:{if(b){wt(e);f=n[q[e+8>>2]](e,b<<2)|0;c=q[q[e+12>>2]+4>>2];if(c){n[c](q[e>>2])}c=q[a>>2];q[a>>2]=f;b:{if(!c){break b}f=q[a+4>>2];xt(e);n[q[e+8>>2]](e,c,f<<2);c=q[q[e+12>>2]+4>>2];if(!c){break b}n[c](q[e>>2])}q[a+4>>2]=b;c=b>>>0>1?b:1;while(1){q[q[a>>2]+(d<<2)>>2]=0;d=d+1|0;if((c|0)!=(d|0)){continue}break}g=q[a+8>>2];if(!g){break a}c=a+8|0;h=q[g+4>>2];i=yW(b);c:{if(i>>>0<=1){h=b+ -1&h;break c}if(h>>>0>>0){break c}h=(h>>>0)%(b>>>0)|0}q[q[a>>2]+(h<<2)>>2]=c;f=q[g>>2];if(!f){break a}o=b+ -1|0;p=i>>>0>1;while(1){d=q[f+4>>2];d:{if(!p){d=d&o;break d}if(d>>>0>>0){break d}d=(d>>>0)%(b>>>0)|0}e:{if((d|0)==(h|0)){g=f;break e}j=d<<2;c=j+q[a>>2]|0;if(q[c>>2]){c=f;d=q[c>>2];f:{if(!d){break f}k=q[f+12>>2];i=f;while(1){c=d;if(q[c+12>>2]!=(k|0)){c=i;break f}if(k){d=q[f+8>>2];l=q[c+8>>2];m=k;while(1){if(s[l>>1]!=s[d>>1]){c=i;break f}l=l+2|0;d=d+2|0;m=m+ -1|0;if(m){continue}break}}i=c;d=q[c>>2];if(d){continue}break}}q[g>>2]=q[c>>2];q[c>>2]=q[q[q[a>>2]+j>>2]>>2];q[q[q[a>>2]+j>>2]>>2]=f;break e}q[c>>2]=g;g=f;h=d}f=q[g>>2];if(f){continue}break}break a}b=q[a>>2];q[a>>2]=0;g:{if(!b){break g}c=q[a+4>>2];xt(e);n[q[e+8>>2]](e,b,c<<2);b=q[q[e+12>>2]+4>>2];if(!b){break g}n[b](q[e>>2])}q[a+4>>2]=0}ue=e+16|0}function Dv(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=0,s=0;c=q[b+148>>2];d=q[b+164>>2];e=q[b+180>>2];f=q[b+152>>2];g=q[b+168>>2];h=q[b+184>>2];i=q[b+156>>2];j=q[b+172>>2];k=q[b+188>>2];l=q[b+144>>2];m=q[b+160>>2];n=q[b+176>>2];p=q[b+132>>2];r=q[b+136>>2];s=q[b+140>>2];b=q[b+128>>2];a=oo(a);o[a+48|0]=s;o[a+49|0]=s>>>8;o[a+50|0]=s>>>16;o[a+51|0]=s>>>24;o[a+32|0]=r;o[a+33|0]=r>>>8;o[a+34|0]=r>>>16;o[a+35|0]=r>>>24;o[a+16|0]=p;o[a+17|0]=p>>>8;o[a+18|0]=p>>>16;o[a+19|0]=p>>>24;o[a+12|0]=n;o[a+13|0]=n>>>8;o[a+14|0]=n>>>16;o[a+15|0]=n>>>24;o[a+8|0]=m;o[a+9|0]=m>>>8;o[a+10|0]=m>>>16;o[a+11|0]=m>>>24;o[a+4|0]=l;o[a+5|0]=l>>>8;o[a+6|0]=l>>>16;o[a+7|0]=l>>>24;o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;o[a+60|0]=k;o[a+61|0]=k>>>8;o[a+62|0]=k>>>16;o[a+63|0]=k>>>24;o[a+56|0]=j;o[a+57|0]=j>>>8;o[a+58|0]=j>>>16;o[a+59|0]=j>>>24;o[a+52|0]=i;o[a+53|0]=i>>>8;o[a+54|0]=i>>>16;o[a+55|0]=i>>>24;o[a+44|0]=h;o[a+45|0]=h>>>8;o[a+46|0]=h>>>16;o[a+47|0]=h>>>24;o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24;o[a+36|0]=f;o[a+37|0]=f>>>8;o[a+38|0]=f>>>16;o[a+39|0]=f>>>24;o[a+28|0]=e;o[a+29|0]=e>>>8;o[a+30|0]=e>>>16;o[a+31|0]=e>>>24;o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24}function Ln(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0;e=ue-80|0;ue=e;f=q[b>>2];g=-1;a:{if(!f){break a}f=n[q[q[f>>2]+188>>2]](f)|0;g=Ak();l=Bk(g);i=q[f+288>>2];b:{if((i|0)>-1){break b}n[q[q[a>>2]+28>>2]](e+16|0,a);i=n[q[e+24>>2]](e+16|0)|0;h=q[q[e+28>>2]+4>>2];if(!h){break b}n[h](q[e+16>>2])}uo(g+32|0,i);h=q[f+256>>2];q[g+48>>2]=q[f+252>>2];q[g+52>>2]=h;h=q[f+248>>2];q[g+40>>2]=q[f+244>>2];q[g+44>>2]=h;j=q[f+272>>2];f=q[g+476>>2];h=q[g+472>>2];k=f-h>>2;c:{if(j>>>0>k>>>0){Dn(g+472|0,j-k|0);h=q[g+472>>2];f=q[g+476>>2];break c}if(j>>>0>=k>>>0){break c}f=(j<<2)+h|0;q[g+476>>2]=f}if((f|0)!=(h|0)){f=0;while(1){q[(f<<2)+h>>2]=0;f=f+1|0;h=q[g+472>>2];if(f>>>0>2]-h>>2>>>0){continue}break}}m=e,p=il(a,b,l),q[m+76>>2]=p;a=kl(a+464|0,e+76|0);gt(e+16|0,nt(e,c));b=q[e+60>>2];q[a+264>>2]=q[e+56>>2];q[a+268>>2]=b;b=q[e+52>>2];q[a+256>>2]=q[e+48>>2];q[a+260>>2]=b;b=q[e+44>>2];q[a+248>>2]=q[e+40>>2];q[a+252>>2]=b;b=q[e+36>>2];q[a+240>>2]=q[e+32>>2];q[a+244>>2]=b;b=q[e+28>>2];q[a+232>>2]=q[e+24>>2];q[a+236>>2]=b;b=q[e+20>>2];q[a+224>>2]=q[e+16>>2];q[a+228>>2]=b;o[a+20|0]=1;d:{if(!r[a+168|0]){break d}b=q[a+4>>2];if(!b|!q[b+36>>2]){break d}b=Tk(q[b+36>>2]);if(!b){break d}Ij(b,e+16|0)}q[a+12>>2]=i;q[a+172>>2]=d;g=q[e+76>>2]}ue=e+80|0;return g|0}function aF(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];o[a+88|0]=c;o[a+89|0]=c>>>8;o[a+90|0]=c>>>16;o[a+91|0]=c>>>24;c=q[b+4>>2];o[a+92|0]=c;o[a+93|0]=c>>>8;o[a+94|0]=c>>>16;o[a+95|0]=c>>>24;c=q[b+8>>2];o[a+96|0]=c;o[a+97|0]=c>>>8;o[a+98|0]=c>>>16;o[a+99|0]=c>>>24;c=q[b+12>>2];o[a+100|0]=c;o[a+101|0]=c>>>8;o[a+102|0]=c>>>16;o[a+103|0]=c>>>24;c=q[b+16>>2];o[a+104|0]=c;o[a+105|0]=c>>>8;o[a+106|0]=c>>>16;o[a+107|0]=c>>>24;c=q[b+20>>2];o[a+108|0]=c;o[a+109|0]=c>>>8;o[a+110|0]=c>>>16;o[a+111|0]=c>>>24;c=q[b+24>>2];o[a+112|0]=c;o[a+113|0]=c>>>8;o[a+114|0]=c>>>16;o[a+115|0]=c>>>24;c=q[b+28>>2];o[a+116|0]=c;o[a+117|0]=c>>>8;o[a+118|0]=c>>>16;o[a+119|0]=c>>>24;c=q[b+32>>2];o[a+120|0]=c;o[a+121|0]=c>>>8;o[a+122|0]=c>>>16;o[a+123|0]=c>>>24;c=q[b+36>>2];o[a+124|0]=c;o[a+125|0]=c>>>8;o[a+126|0]=c>>>16;o[a+127|0]=c>>>24;c=q[b+40>>2];o[a+128|0]=c;o[a+129|0]=c>>>8;o[a+130|0]=c>>>16;o[a+131|0]=c>>>24;c=q[b+44>>2];o[a+132|0]=c;o[a+133|0]=c>>>8;o[a+134|0]=c>>>16;o[a+135|0]=c>>>24;c=q[b+48>>2];o[a+136|0]=c;o[a+137|0]=c>>>8;o[a+138|0]=c>>>16;o[a+139|0]=c>>>24;c=q[b+52>>2];o[a+140|0]=c;o[a+141|0]=c>>>8;o[a+142|0]=c>>>16;o[a+143|0]=c>>>24;c=q[b+56>>2];o[a+144|0]=c;o[a+145|0]=c>>>8;o[a+146|0]=c>>>16;o[a+147|0]=c>>>24;b=q[b+60>>2];o[a+148|0]=b;o[a+149|0]=b>>>8;o[a+150|0]=b>>>16;o[a+151|0]=b>>>24}function Bv(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=0,s=0;c=q[b+84>>2];d=q[b+100>>2];e=q[b+116>>2];f=q[b+88>>2];g=q[b+104>>2];h=q[b+120>>2];i=q[b+92>>2];j=q[b+108>>2];k=q[b+124>>2];l=q[b+80>>2];m=q[b+96>>2];n=q[b+112>>2];p=q[b+68>>2];r=q[b+72>>2];s=q[b+76>>2];b=q[b+64>>2];a=oo(a);o[a+48|0]=s;o[a+49|0]=s>>>8;o[a+50|0]=s>>>16;o[a+51|0]=s>>>24;o[a+32|0]=r;o[a+33|0]=r>>>8;o[a+34|0]=r>>>16;o[a+35|0]=r>>>24;o[a+16|0]=p;o[a+17|0]=p>>>8;o[a+18|0]=p>>>16;o[a+19|0]=p>>>24;o[a+12|0]=n;o[a+13|0]=n>>>8;o[a+14|0]=n>>>16;o[a+15|0]=n>>>24;o[a+8|0]=m;o[a+9|0]=m>>>8;o[a+10|0]=m>>>16;o[a+11|0]=m>>>24;o[a+4|0]=l;o[a+5|0]=l>>>8;o[a+6|0]=l>>>16;o[a+7|0]=l>>>24;o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;o[a+60|0]=k;o[a+61|0]=k>>>8;o[a+62|0]=k>>>16;o[a+63|0]=k>>>24;o[a+56|0]=j;o[a+57|0]=j>>>8;o[a+58|0]=j>>>16;o[a+59|0]=j>>>24;o[a+52|0]=i;o[a+53|0]=i>>>8;o[a+54|0]=i>>>16;o[a+55|0]=i>>>24;o[a+44|0]=h;o[a+45|0]=h>>>8;o[a+46|0]=h>>>16;o[a+47|0]=h>>>24;o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24;o[a+36|0]=f;o[a+37|0]=f>>>8;o[a+38|0]=f>>>16;o[a+39|0]=f>>>24;o[a+28|0]=e;o[a+29|0]=e>>>8;o[a+30|0]=e>>>16;o[a+31|0]=e>>>24;o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24}function qo(a,b,c,d){var f=0,g=0,h=0,i=0,j=0,l=x(0);i=ue-48|0;ue=i;g=yp(i+32|0);f=yp(i+16|0);h=yp(i);Jp(g,Ep(g,c,b));Jp(f,Kp(f,d,g));Jp(h,Kp(h,g,f));c=q[f>>2];o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;c=q[f+4>>2];o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;c=q[f+8>>2];o[a+48|0]=0;o[a+49|0]=0;o[a+50|0]=0;o[a+51|0]=0;o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;c=q[h>>2];o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;c=q[h+4>>2];o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;d=q[h+8>>2];c=a+52|0;o[c|0]=0;o[c+1|0]=0;o[c+2|0]=0;o[c+3|0]=0;o[a+36|0]=d;o[a+37|0]=d>>>8;o[a+38|0]=d>>>16;o[a+39|0]=d>>>24;d=q[g>>2];o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;d=q[g+4>>2];o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;j=q[g+8>>2];d=a+56|0;o[d|0]=0;o[d+1|0]=0;o[d+2|0]=0;o[d+3|0]=0;o[a+40|0]=j;o[a+41|0]=j>>>8;o[a+42|0]=j>>>16;o[a+43|0]=j>>>24;f=(k(x(-Ip(f,b))),e(0));o[a+48|0]=f;o[a+49|0]=f>>>8;o[a+50|0]=f>>>16;o[a+51|0]=f>>>24;f=(k(x(-Ip(h,b))),e(0));o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;l=Ip(g,b);o[a+60|0]=1065353216;o[a+61|0]=4161536;o[a+62|0]=16256;o[a+63|0]=63;a=(k(x(-l)),e(0));o[d|0]=a;o[d+1|0]=a>>>8;o[d+2|0]=a>>>16;o[d+3|0]=a>>>24;ue=i+48|0}function po(a,b,c,d){var f=0,g=0,h=0,i=0,j=0,l=x(0);i=ue-48|0;ue=i;g=yp(i+32|0);f=yp(i+16|0);h=yp(i);Jp(g,Ep(g,b,c));Jp(f,Kp(f,d,g));Jp(h,Kp(h,g,f));c=q[f>>2];o[a|0]=c;o[a+1|0]=c>>>8;o[a+2|0]=c>>>16;o[a+3|0]=c>>>24;c=q[f+4>>2];o[a+16|0]=c;o[a+17|0]=c>>>8;o[a+18|0]=c>>>16;o[a+19|0]=c>>>24;c=q[f+8>>2];o[a+48|0]=0;o[a+49|0]=0;o[a+50|0]=0;o[a+51|0]=0;o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;c=q[h>>2];o[a+4|0]=c;o[a+5|0]=c>>>8;o[a+6|0]=c>>>16;o[a+7|0]=c>>>24;c=q[h+4>>2];o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24;d=q[h+8>>2];c=a+52|0;o[c|0]=0;o[c+1|0]=0;o[c+2|0]=0;o[c+3|0]=0;o[a+36|0]=d;o[a+37|0]=d>>>8;o[a+38|0]=d>>>16;o[a+39|0]=d>>>24;d=q[g>>2];o[a+8|0]=d;o[a+9|0]=d>>>8;o[a+10|0]=d>>>16;o[a+11|0]=d>>>24;d=q[g+4>>2];o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;j=q[g+8>>2];d=a+56|0;o[d|0]=0;o[d+1|0]=0;o[d+2|0]=0;o[d+3|0]=0;o[a+40|0]=j;o[a+41|0]=j>>>8;o[a+42|0]=j>>>16;o[a+43|0]=j>>>24;f=(k(x(-Ip(f,b))),e(0));o[a+48|0]=f;o[a+49|0]=f>>>8;o[a+50|0]=f>>>16;o[a+51|0]=f>>>24;f=(k(x(-Ip(h,b))),e(0));o[c|0]=f;o[c+1|0]=f>>>8;o[c+2|0]=f>>>16;o[c+3|0]=f>>>24;l=Ip(g,b);o[a+60|0]=1065353216;o[a+61|0]=4161536;o[a+62|0]=16256;o[a+63|0]=63;a=(k(x(-l)),e(0));o[d|0]=a;o[d+1|0]=a>>>8;o[d+2|0]=a>>>16;o[d+3|0]=a>>>24;ue=i+48|0}function zv(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=0,s=0;c=q[b+20>>2];d=q[b+36>>2];e=q[b+52>>2];f=q[b+24>>2];g=q[b+40>>2];h=q[b+56>>2];i=q[b+28>>2];j=q[b+44>>2];k=q[b+60>>2];l=q[b>>2];m=q[b+16>>2];n=q[b+32>>2];p=q[b+48>>2];r=q[b+4>>2];s=q[b+8>>2];b=q[b+12>>2];a=oo(a);o[a+48|0]=b;o[a+49|0]=b>>>8;o[a+50|0]=b>>>16;o[a+51|0]=b>>>24;o[a+32|0]=s;o[a+33|0]=s>>>8;o[a+34|0]=s>>>16;o[a+35|0]=s>>>24;o[a+16|0]=r;o[a+17|0]=r>>>8;o[a+18|0]=r>>>16;o[a+19|0]=r>>>24;o[a+12|0]=p;o[a+13|0]=p>>>8;o[a+14|0]=p>>>16;o[a+15|0]=p>>>24;o[a+8|0]=n;o[a+9|0]=n>>>8;o[a+10|0]=n>>>16;o[a+11|0]=n>>>24;o[a+4|0]=m;o[a+5|0]=m>>>8;o[a+6|0]=m>>>16;o[a+7|0]=m>>>24;o[a|0]=l;o[a+1|0]=l>>>8;o[a+2|0]=l>>>16;o[a+3|0]=l>>>24;o[a+60|0]=k;o[a+61|0]=k>>>8;o[a+62|0]=k>>>16;o[a+63|0]=k>>>24;o[a+56|0]=j;o[a+57|0]=j>>>8;o[a+58|0]=j>>>16;o[a+59|0]=j>>>24;o[a+52|0]=i;o[a+53|0]=i>>>8;o[a+54|0]=i>>>16;o[a+55|0]=i>>>24;o[a+44|0]=h;o[a+45|0]=h>>>8;o[a+46|0]=h>>>16;o[a+47|0]=h>>>24;o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24;o[a+36|0]=f;o[a+37|0]=f>>>8;o[a+38|0]=f>>>16;o[a+39|0]=f>>>24;o[a+28|0]=e;o[a+29|0]=e>>>8;o[a+30|0]=e>>>16;o[a+31|0]=e>>>24;o[a+24|0]=d;o[a+25|0]=d>>>8;o[a+26|0]=d>>>16;o[a+27|0]=d>>>24;o[a+20|0]=c;o[a+21|0]=c>>>8;o[a+22|0]=c>>>16;o[a+23|0]=c>>>24}function uW(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{g=b;if(g){e=c;if(!e){break j}f=d;if(!f){break i}f=z(f)-z(g)|0;if(f>>>0<=31){break h}break b}if((d|0)==1&c>>>0>=0|d>>>0>1){break b}b=(a>>>0)/(c>>>0)|0;rW(a-w(b,c)|0,0);we=0;return b}e=d;if(!a){break g}if(!e){break f}f=e+ -1|0;if(f&e){break f}rW(a,f&g);a=g>>>(AW(e)&31)|0;we=0;return a}f=e+ -1|0;if(!(f&e)){break e}j=(z(e)+33|0)-z(g)|0;h=0-j|0;break c}j=f+1|0;h=63-f|0;break c}a=(g>>>0)/(e>>>0)|0;rW(0,g-w(a,e)|0);we=0;return a}f=z(e)-z(g)|0;if(f>>>0<31){break d}break b}rW(a&f,0);if((e|0)==1){break a}c=a;a=AW(e);d=a&31;if(32<=(a&63)>>>0){f=0;a=b>>>d|0}else{f=b>>>d|0;a=((1<>>d}we=f;return a}j=f+1|0;h=63-f|0}e=b;g=a;f=j&63;i=f&31;if(32<=(f&63)>>>0){f=0;l=e>>>i|0}else{f=e>>>i|0;l=((1<>>i}a=h&63;h=a&31;if(32<=(a&63)>>>0){e=g<>>32-h|b<>>0<4294967295){g=g+1|0}h=e;while(1){e=l;f=f<<1|e>>>31;e=e<<1;k=f;f=b>>>31|e;m=k;e=k;k=f;i=g-((h>>>0>>0)+e|0)|0;e=i>>31;i=i>>31;f=c&i;l=k-f|0;f=m-((d&e)+(k>>>0>>0)|0)|0;e=b<<1|a>>>31;a=n|a<<1;b=e|o;e=0;m=e;k=i&1;n=k;j=j+ -1|0;if(j){continue}break}}rW(l,f);e=b<<1|a>>>31;a=k|a<<1;we=e|m;return a}rW(a,b);a=0;b=0}we=b;return a}function gi(a,b,c){var d=x(0),e=0,f=0,g=0,h=x(0),i=0;g=ue-16|0;ue=g;f=q[c>>2];a:{if(f>>>0>3){break a}b:{switch(f-1|0){default:q[a>>2]=q[c+4>>2];break a;case 0:ii(g,c+4|0,b);q[a>>2]=q[g>>2];break a;case 1:d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+12|0]),x(r[c+8|0])));h=x(n[q[q[b>>2]+16>>2]](b,x(r[c+13|0]),x(r[c+9|0])));c:{if(h=x(0)){e=~~h>>>0;break c}e=0}f=e<<8;if(d=x(0)){e=~~d>>>0}else{e=0}f=e|f;e=a;d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+14|0]),x(r[c+10|0])));d:{if(d=x(0)){i=~~d>>>0;break d}i=0}i=i<<16|f;d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+15|0]),x(r[c+11|0])));e:{if(d=x(0)){f=~~d>>>0;break e}f=0}q[e>>2]=i|f<<24;d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+24|0]),x(r[c+20|0])));h=x(n[q[q[b>>2]+16>>2]](b,x(r[c+25|0]),x(r[c+21|0])));f:{if(h=x(0)){e=~~h>>>0;break f}e=0}f=e<<8;if(d=x(0)){e=~~d>>>0}else{e=0}f=e|f;d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+26|0]),x(r[c+22|0])));g:{if(d=x(0)){e=~~d>>>0;break g}e=0}e=f|e<<16;d=x(n[q[q[b>>2]+16>>2]](b,x(r[c+27|0]),x(r[c+23|0])));h:{if(d=x(0)){b=~~d>>>0;break h}b=0}q[a+4>>2]=e|b<<24;break a;case 2:break b}}wj(g,q[c+4>>2],b);b=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=b;b=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=b}ue=g+16|0}function Pw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=ue-48|0;ue=d;a:{b:{if(!r[b+12|0]){break b}e=Of(d+16|0,c);f=r[e+11|0];g=f<<24>>24<0;h=g?(q[e+8>>2]&2147483647)+ -1|0:4;f=g?q[e+4>>2]:f;c:{if((h|0)!=(f|0)){g=g?q[e>>2]:e;p[g+(f<<1)>>1]=100;f=f+1|0;d:{if(o[e+11|0]<=-1){q[e+4>>2]=f;break d}o[e+11|0]=f}p[g+(f<<1)>>1]=0;break c}fh(e,h,(f-h|0)+1|0,f,f,0,1,28548)}q[d+40>>2]=q[d+24>>2];e=q[d+20>>2];f=q[d+16>>2];q[d+32>>2]=f;q[d+36>>2]=e;e=q[b+16>>2];n[q[q[e>>2]+24>>2]](d+16|0,e,o[d+43|0]<0?f:d+32|0);e:{e=q[d+16>>2];if(!e){break e}g=n[q[q[e>>2]+32>>2]](e)|0;q[d+24>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;f=e;if(g){Se(d+16|0,g);h=q[d+16>>2]}else{h=0}n[q[q[e>>2]+20>>2]](f,h,g)|0;n[q[q[b>>2]+24>>2]](d+8|0,b,q[d+16>>2],g,1);g=q[d+8>>2];q[a>>2]=g;f=q[d+16>>2];if(f){q[d+20>>2]=f;_U(f)}n[q[q[e>>2]+8>>2]](e)|0;if(!g){break e}if(o[d+43|0]>-1){break a}_U(q[d+32>>2]);break a}if(o[d+43|0]>-1){break b}_U(q[d+32>>2])}e=q[b+16>>2];n[q[q[e>>2]+20>>2]](d+32|0,e,c);c=q[d+32>>2];if(c){f=n[q[q[c>>2]+32>>2]](c)|0;q[d+40>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;e=c;if(f){Se(d+32|0,f);g=q[d+32>>2]}else{g=0}n[q[q[c>>2]+20>>2]](e,g,f)|0;n[q[q[b>>2]+24>>2]](d+16|0,b,q[d+32>>2],f,0);q[a>>2]=q[d+16>>2];a=q[d+32>>2];if(a){q[d+36>>2]=a;_U(a)}n[q[q[c>>2]+8>>2]](c)|0;break a}q[a>>2]=0}ue=d+48|0}function Ys(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0);e=u[a+4>>2];f=x(e*e);e=u[a+20>>2];f=x(f+x(e*e));e=u[a+36>>2];f=x(f+x(e*e));e=u[a>>2];g=x(e*e);e=u[a+16>>2];g=x(g+x(e*e));e=u[a+32>>2];g=x(g+x(e*e));e=u[a+8>>2];h=x(e*e);e=u[a+24>>2];h=x(h+x(e*e));e=u[a+40>>2];e=x(h+x(e*e));a:{if(((x(y(f))<=x(9.999999974752427e-7))<<1|x(y(g))<=x(9.999999974752427e-7)|(x(y(e))<=x(9.999999974752427e-7))<<2)==7){q[b>>2]=0;q[b+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;b=q[1821];q[c>>2]=q[1820];q[c+4>>2]=b;b=q[1825];q[c+16>>2]=q[1824];q[c+20>>2]=b;b=q[1829];q[c+32>>2]=q[1828];q[c+36>>2]=b;b=q[1823];q[c+8>>2]=q[1822];q[c+12>>2]=b;b=q[1827];q[c+24>>2]=q[1826];q[c+28>>2]=b;b=q[1831];q[c+40>>2]=q[1830];q[c+44>>2]=b;break a}q[b+12>>2]=2139095040;e=x(x(1)/x(E(e)));u[b+8>>2]=x(1)/e;f=x(x(1)/x(E(f)));u[b+4>>2]=x(1)/f;g=x(x(1)/x(E(g)));u[b>>2]=x(1)/g;h=u[a>>2];i=u[a+4>>2];j=u[a+8>>2];u[c+12>>2]=u[a+12>>2]*x(0);u[c+8>>2]=e*j;u[c+4>>2]=f*i;u[c>>2]=g*h;h=u[a+16>>2];i=u[a+20>>2];j=u[a+24>>2];u[c+28>>2]=u[a+28>>2]*x(0);u[c+24>>2]=e*j;u[c+20>>2]=f*i;u[c+16>>2]=g*h;h=u[a+32>>2];i=u[a+36>>2];j=u[a+40>>2];u[c+44>>2]=u[a+44>>2]*x(0);u[c+40>>2]=e*j;u[c+36>>2]=f*i;u[c+32>>2]=g*h}b=q[a+12>>2];c=q[a+28>>2];a=q[a+44>>2];q[d+12>>2]=1065353216;q[d+8>>2]=a;q[d+4>>2]=c;q[d>>2]=b}function Qg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;g=ue-1056|0;ue=g;i=q[a+20>>2];a:{if(!n[q[q[i>>2]+24>>2]](i)){break a}l=g+16|0;j=n[q[q[a>>2]+28>>2]](a)|0;i=q[j>>2];if(i){n[q[q[i>>2]>>2]](i)|0;k=q[j>>2]}fp(l,k);i=q[g+16>>2];b:{if(!k){break b}q[g+1052>>2]=0;q[g+1048>>2]=0;if(!n[q[q[i>>2]+20>>2]](i,d,g+1052|0,g+1048|0)){break b}c:{if(e){break c}e=-1;while(1){d:{j=s[(h<<1)+d>>1];e:{if(!((j|0)==47|(j|0)==92)){if(j){break e}if((e|0)<0){break d}h=d;d=e<<1;kV(g+16|0,h,d);p[d+(g+16|0)>>1]=0;e=g+16|0;break c}e=h}h=h+1|0;continue}break}p[g+16>>1]=0;e=g+16|0}j=(c|0)<1;if(!j){h=0;while(1){d=q[(h<<2)+b>>2];d=n[q[q[d>>2]+424>>2]](d)|0;if(a){n[q[q[a>>2]>>2]](a)|0}q[g+8>>2]=a;Un(d,g+8|0);d=q[g+8>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[g+8>>2]=0}h=h+1|0;if((h|0)!=(c|0)){continue}break}}o[a+328|0]=(f|0)==1;$f(a);Nf(a,q[g+1052>>2],q[g+1048>>2],u[a+284>>2],e);o[a+328|0]=0;if(!j){h=0;while(1){d=q[(h<<2)+b>>2];d=n[q[q[d>>2]+424>>2]](d)|0;n[q[q[a>>2]>>2]](a)|0;q[g+8>>2]=a;Vn(d,g+8|0);d=q[g+8>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[g+8>>2]=0}h=h+1|0;if((h|0)!=(c|0)){continue}break}}n[q[q[i>>2]+24>>2]](i,q[g+1052>>2],q[g+1048>>2]);h=1}if(i){n[q[q[i>>2]+8>>2]](i)|0}if(!k){break a}n[q[q[k>>2]+8>>2]](k)|0}ue=g+1056|0;return h|0}function Fi(a,b,c){var d=0,e=x(0),f=x(0),g=0;g=ue-16|0;ue=g;d=q[a>>2];a:{if(d>>>0>2){break a}b:{switch(d-1|0){default:mt(g,a+4|0);a=q[g+12>>2];q[b+8>>2]=q[g+8>>2];q[b+12>>2]=a;a=q[g+4>>2];q[b>>2]=q[g>>2];q[b+4>>2]=a;break a;case 0:e=x(n[q[q[c>>2]+16>>2]](c,u[a+12>>2],u[a+4>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[a+16>>2],u[a+8>>2]));d=b+24|0;q[d>>2]=0;q[d+4>>2]=1065353216;u[b+20>>2]=f;u[b+16>>2]=e;e=x(n[q[q[c>>2]+16>>2]](c,u[a+28>>2],u[a+20>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[a+32>>2],u[a+24>>2]));q[b+40>>2]=0;q[b+44>>2]=1065353216;u[b+36>>2]=f;u[b+32>>2]=e;e=x(n[q[q[c>>2]+16>>2]](c,u[a+44>>2],u[a+36>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[a+48>>2],u[a+40>>2]));q[b+56>>2]=0;q[b+60>>2]=1065353216;u[b+52>>2]=f;u[b+48>>2]=e;a=q[b+20>>2];q[b>>2]=q[b+16>>2];q[b+4>>2]=a;a=q[d+4>>2];q[b+8>>2]=q[d>>2];q[b+12>>2]=a;break a;case 1:break b}}e=x(n[q[q[c>>2]+16>>2]](c,u[a+12>>2],u[a+4>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[a+16>>2],u[a+8>>2]));d=b+24|0;q[d>>2]=0;q[d+4>>2]=1065353216;u[b+20>>2]=f;u[b+16>>2]=e;e=x(n[q[q[c>>2]+16>>2]](c,u[a+28>>2],u[a+20>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[a+32>>2],u[a+24>>2]));q[b+40>>2]=0;q[b+44>>2]=1065353216;u[b+36>>2]=f;u[b+32>>2]=e;a=q[b+20>>2];q[b>>2]=q[b+16>>2];q[b+4>>2]=a;a=q[d+4>>2];q[b+8>>2]=q[d>>2];q[b+12>>2]=a}ue=g+16|0}function Jg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=ue-32|0;ue=e;f=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);g=q[f>>2];if(g){n[q[q[g>>2]>>2]](g)|0;g=q[f>>2]}if(c>>>0<=2){a:{b:{switch(c-1|0){default:h=b<<2;f=h+q[a+40>>2]|0;c:{if(!q[f>>2]){break c}q[e+24>>2]=0;c=e;b=q[f>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[f>>2]}q[c+24>>2]=b;Ho(g,e+24|0);b=q[e+24>>2];if(!b){break c}n[q[q[b>>2]+8>>2]](b)|0;q[e+24>>2]=0}a=h+q[a+40>>2]|0;b=q[d>>2];if(b){n[q[q[b>>2]>>2]](b)|0}b=q[a>>2];if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[a>>2]=0;break a;case 0:h=b<<2;f=h+q[a+64>>2]|0;d:{if(!q[f>>2]){break d}q[e+16>>2]=0;c=e;b=q[f>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[f>>2]}q[c+16>>2]=b;Ho(g,e+16|0);b=q[e+16>>2];if(!b){break d}n[q[q[b>>2]+8>>2]](b)|0;q[e+16>>2]=0}a=h+q[a+64>>2]|0;b=q[d>>2];if(b){n[q[q[b>>2]>>2]](b)|0}b=q[a>>2];if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[a>>2]=0;break a;case 1:break b}}h=b<<2;f=h+q[a+88>>2]|0;e:{if(!q[f>>2]){break e}q[e+8>>2]=0;c=e;b=q[f>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[f>>2]}q[c+8>>2]=b;Ho(g,e+8|0);b=q[e+8>>2];if(!b){break e}n[q[q[b>>2]+8>>2]](b)|0;q[e+8>>2]=0}a=h+q[a+88>>2]|0;b=q[d>>2];if(b){n[q[q[b>>2]>>2]](b)|0}b=q[a>>2];if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[a>>2]=0}q[a>>2]=q[d>>2]}if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=e+32|0}function ZE(a,b){a=a|0;b=b|0;var c=0,d=0;c=q[b>>2];o[a+24|0]=c;o[a+25|0]=c>>>8;o[a+26|0]=c>>>16;o[a+27|0]=c>>>24;c=q[b+4>>2];o[a+28|0]=c;o[a+29|0]=c>>>8;o[a+30|0]=c>>>16;o[a+31|0]=c>>>24;c=q[b+8>>2];o[a+32|0]=c;o[a+33|0]=c>>>8;o[a+34|0]=c>>>16;o[a+35|0]=c>>>24;c=q[b+12>>2];o[a+36|0]=c;o[a+37|0]=c>>>8;o[a+38|0]=c>>>16;o[a+39|0]=c>>>24;c=q[b+16>>2];o[a+40|0]=c;o[a+41|0]=c>>>8;o[a+42|0]=c>>>16;o[a+43|0]=c>>>24;c=q[b+20>>2];o[a+44|0]=c;o[a+45|0]=c>>>8;o[a+46|0]=c>>>16;o[a+47|0]=c>>>24;c=q[b+24>>2];o[a+48|0]=c;o[a+49|0]=c>>>8;o[a+50|0]=c>>>16;o[a+51|0]=c>>>24;c=q[b+28>>2];o[a+52|0]=c;o[a+53|0]=c>>>8;o[a+54|0]=c>>>16;o[a+55|0]=c>>>24;c=q[b+32>>2];o[a+56|0]=c;o[a+57|0]=c>>>8;o[a+58|0]=c>>>16;o[a+59|0]=c>>>24;c=q[b+36>>2];o[a+60|0]=c;o[a+61|0]=c>>>8;o[a+62|0]=c>>>16;o[a+63|0]=c>>>24;c=a- -64|0;d=q[b+40>>2];o[c|0]=d;o[c+1|0]=d>>>8;o[c+2|0]=d>>>16;o[c+3|0]=d>>>24;c=q[b+44>>2];o[a+68|0]=c;o[a+69|0]=c>>>8;o[a+70|0]=c>>>16;o[a+71|0]=c>>>24;c=q[b+48>>2];o[a+72|0]=c;o[a+73|0]=c>>>8;o[a+74|0]=c>>>16;o[a+75|0]=c>>>24;c=q[b+52>>2];o[a+76|0]=c;o[a+77|0]=c>>>8;o[a+78|0]=c>>>16;o[a+79|0]=c>>>24;c=q[b+56>>2];o[a+80|0]=c;o[a+81|0]=c>>>8;o[a+82|0]=c>>>16;o[a+83|0]=c>>>24;b=q[b+60>>2];o[a+84|0]=b;o[a+85|0]=b>>>8;o[a+86|0]=b>>>16;o[a+87|0]=b>>>24}function Ns(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),n=x(0),o=x(0),p=x(0),r=x(0);d=q[b>>2];if(!d){q[a+8>>2]=1065353216;q[a+12>>2]=1065353216;q[a>>2]=1065353216;q[a+4>>2]=1065353216;return}if(!!(u[b+8>>2]>c)){d=q[b+16>>2];e=q[b+12>>2];q[a+8>>2]=q[b+20>>2];q[a>>2]=e;q[a+4>>2]=d;q[a+12>>2]=q[b+24>>2];return}f=w(d+ -1|0,20)+b|0;if(!!(u[f+8>>2]<=c)){e=q[f+16>>2];b=q[f+12>>2];q[a+8>>2]=q[f+20>>2];q[a>>2]=b;q[a+4>>2]=e;q[a+12>>2]=q[f+24>>2];return}e=b+8|0;d=w(d,20);a:{if(!d){d=e;break a}h=(d|0)/20|0;d=e;while(1){j=h>>>1|0;f=w(j,20)+d|0;l=u[f>>2]>2]!=c)|0;k=u[w(d,20)+e>>2];if(!(k<=c)){break b}e=d+1|0;i=u[(w(e,20)+b|0)+8>>2];if(!(i>=c)){break b}g=x(i-k);if(g==x(0)){b=w(d,20)+b|0;q[a>>2]=q[b+12>>2];q[a+4>>2]=q[b+16>>2];q[a+8>>2]=q[b+20>>2];q[a+12>>2]=q[b+24>>2];return}b=b+8|0;e=b+w(e,20)|0;m=u[e+8>>2];b=b+w(d,20)|0;n=u[b+8>>2];o=u[e+12>>2];p=u[b+12>>2];r=u[e+4>>2];i=u[b+4>>2];g=x(x(c-k)/g);c=x(x(1)-g);u[a+12>>2]=x(g*u[e+16>>2])+x(c*u[b+16>>2]);u[a>>2]=x(g*r)+x(c*i);u[a+8>>2]=x(g*o)+x(c*p);u[a+4>>2]=x(g*m)+x(c*n);return}q[a+8>>2]=1065353216;q[a+12>>2]=1065353216;q[a>>2]=1065353216;q[a+4>>2]=1065353216}function fr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;a:{d=q[a+8>>2];c=q[a+4>>2];b:{if((d-c|0)/60>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+56>>2]=0;e=c+48|0;d=e;q[d>>2]=0;q[d+4>>2]=0;q[c+40>>2]=0;q[c+44>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;d=c+24|0;q[d>>2]=0;q[d+4>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;yp(c);yp(c+12|0);yp(d);yp(c+36|0);xp(e);c=q[a+4>>2]+60|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=(c-g|0)/60|0;e=h+b|0;if(e>>>0>=71582789){break a}c=0;d=(d-g|0)/60|0;g=d<<1;e=d>>>0<35791394?g>>>0>>0?e:g:71582788;c:{if(!e){break c}wt(f);c=n[q[f+8>>2]](f,w(e,60))|0;d=q[q[f+12>>2]+4>>2];if(!d){break c}n[d](q[f>>2])}g=w(e,60)+c|0;d=w(h,60)+c|0;c=d;while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+56>>2]=0;e=c+48|0;q[e>>2]=0;q[e+4>>2]=0;q[c+40>>2]=0;q[c+44>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;h=c+24|0;q[h>>2]=0;q[h+4>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;yp(c);yp(c+12|0);yp(h);yp(c+36|0);xp(e);c=c+60|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];e=q[a+4>>2]-b|0;d=d+w((e|0)/-60|0,60)|0;if((e|0)>=1){kV(d,b,e);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=d;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}xt(f);n[q[f+8>>2]](f,b,c-b|0);a=q[q[f+12>>2]+4>>2];if(!a){break b}n[a](q[f>>2])}ue=f+16|0;return}kU();F()}function Gw(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ue-48|0;ue=d;e=q[a>>2];h=(q[a+4>>2]-e|0)/12|0;c=h+1|0;a:{if(c>>>0<357913942){f=q[a+8>>2];q[d+24>>2]=a+8;q[d+20>>2]=0;e=(f-e|0)/12|0;f=e<<1;e=e>>>0<178956970?f>>>0>>0?c:f:357913941;b:{if(!e){break b}wt(d+32|0);g=n[q[d+40>>2]](d+32|0,w(e,12))|0;c=q[q[d+44>>2]+4>>2];if(!c){break b}n[c](q[d+32>>2])}q[d+8>>2]=g;c=w(h,12)+g|0;q[d+16>>2]=c;q[d+20>>2]=w(e,12)+g;q[d+12>>2]=c;q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;f=sV(b);if(f>>>0>=4294967280){break a}c:{d:{if(f>>>0>=11){wt(d+32|0);i=f+16&-16;e=n[q[d+40>>2]](d+32|0,i)|0;j=q[q[d+44>>2]+4>>2];if(j){n[j](q[d+32>>2])}q[c>>2]=e;c=w(h,12)+g|0;q[c+4>>2]=f;q[c+8>>2]=i|-2147483648;c=e;break d}o[c+11|0]=f;e=c;if(!f){break c}}kV(e,b,f)}o[c+f|0]=0;b=q[d+16>>2]+12|0;q[d+16>>2]=b;c=q[a+4>>2];g=q[a>>2];e:{if((c|0)==(g|0)){e=q[d+12>>2];break e}e=q[d+12>>2];while(1){b=e+ -12|0;c=c+ -12|0;e=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=e;e=b;b=c+8|0;q[e+8>>2]=q[b>>2];q[c>>2]=0;q[c+4>>2]=0;q[b>>2]=0;e=q[d+12>>2]+ -12|0;q[d+12>>2]=e;if((c|0)!=(g|0)){continue}break}c=q[a+4>>2];g=q[a>>2];b=q[d+16>>2]}q[a>>2]=e;q[d+12>>2]=g;q[a+4>>2]=b;q[d+16>>2]=c;b=q[a+8>>2];q[a+8>>2]=q[d+20>>2];q[d+8>>2]=g;q[d+20>>2]=b;Uw(d+8|0);ue=d+48|0;return}kU();F()}kT();F()}function zr(a,b){var c=0,d=0,e=0,f=0;e=ue-16|0;ue=e;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;c=q[b+4>>2]-q[b>>2]|0;d=(c|0)/60|0;a:{b:{c:{if(!c){break c}if(d>>>0>=71582789){break b}wt(e);c=n[q[e+8>>2]](e,c)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+w(d,60);f=q[b>>2];d=q[b+4>>2]-f|0;if((d|0)<1){break c}kV(c,f,d);q[a+4>>2]=q[a+4>>2]+w((d>>>0)/60|0,60)}q[a+12>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;c=q[b+16>>2]-q[b+12>>2]|0;d=(c|0)/12|0;d:{if(!c){break d}if(d>>>0>=357913942){break a}wt(e);c=n[q[e+8>>2]](e,c)|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a+12>>2]=c;q[a+16>>2]=c;q[a+20>>2]=c+w(d,12);f=q[b+12>>2];d=q[b+16>>2]-f|0;if((d|0)<1){break d}kV(c,f,d);q[a+16>>2]=q[a+16>>2]+w((d>>>0)/12|0,12)}q[a+24>>2]=0;c=q[b+24>>2];e:{if(!c){break e}n[q[q[c>>2]>>2]](c)|0;c=q[a+24>>2];if(!c){break e}n[q[q[c>>2]+8>>2]](c)|0;q[a+24>>2]=0}c=q[b+24>>2];q[a+28>>2]=0;q[a+24>>2]=c;c=q[b+28>>2];f:{if(!c){break f}n[q[q[c>>2]>>2]](c)|0;c=q[a+28>>2];if(!c){break f}n[q[q[c>>2]+8>>2]](c)|0;q[a+28>>2]=0}c=q[b+28>>2];q[a+32>>2]=0;q[a+28>>2]=c;c=q[b+32>>2];g:{if(!c){break g}n[q[q[c>>2]>>2]](c)|0;c=q[a+32>>2];if(!c){break g}n[q[q[c>>2]+8>>2]](c)|0;q[a+32>>2]=0}q[a+32>>2]=q[b+32>>2];ue=e+16|0;return a}kU();F()}kU();F()}function Gn(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0);c=ue-80|0;ue=c;a:{if(!q[b+4>>2]|!r[b+17|0]){break a}d=q[a+4>>2];if(!(q[d+96>>2]>>>q[q[b+8>>2]+64>>2]&1)){break a}if(!(q[q[b>>2]+296>>2]!=1|u[d+64>>2]==u[d+68>>2])){d=q[a+8>>2];yp(c+16|0);q[c+24>>2]=q[b+208>>2];f=q[b+204>>2];q[c+16>>2]=q[b+200>>2];q[c+20>>2]=f;q[c+28>>2]=q[b+212>>2];if(!Bl(d,c+16|0)){break a}}if(!r[b+18|0]){break a}d=q[b+8>>2];g=q[d+476>>2];f=q[d+472>>2];d=(g|0)==(f|0);if(!d){if(d){break a}d=b+224|0;h=d+8|0;while(1){b=q[f>>2];b:{if(!(u[q[b+16>>2]+2304>>2]>x(3.4028234663852886e+37))){i=q[a+4>>2];e=q[d+44>>2];q[c+56>>2]=q[d+40>>2];q[c+60>>2]=e;e=q[d+36>>2];q[c+48>>2]=q[d+32>>2];q[c+52>>2]=e;e=q[d+28>>2];q[c+40>>2]=q[d+24>>2];q[c+44>>2]=e;e=q[d+20>>2];q[c+32>>2]=q[d+16>>2];q[c+36>>2]=e;e=q[h+4>>2];q[c+24>>2]=q[h>>2];q[c+28>>2]=e;e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;Xs(c- -64|0,c+16|0);nt(c+16|0,i+72|0);j=u[c+24>>2];k=u[c+72>>2];l=u[c+16>>2];m=u[c+64>>2];n=u[c+20>>2];o=u[c+68>>2];nt(c,i+84|0);if(u[q[b+16>>2]+2304>>2]>2])+x(x(o-n)*u[c+4>>2]))+x(x(k-j)*u[c+8>>2]))){break b}b=q[f>>2]}zk(b,0)}f=f+4|0;if((g|0)!=(f|0)){continue}break}break a}zk(q[b+4>>2],1)}ue=c+80|0} + + + +function cx(a){a=a|0;var b=0;q[a>>2]=29528;tx(a+364|0);b=q[a+344>>2];if(b){q[a+348>>2]=b;_U(b)}b=q[a+332>>2];if(b){q[a+336>>2]=b;_U(b)}b=q[a+320>>2];if(b){q[a+324>>2]=b;_U(b)}b=q[a+308>>2];if(b){q[a+312>>2]=b;_U(b)}b=q[a+296>>2];if(b){q[a+300>>2]=b;_U(b)}b=q[a+284>>2];if(b){q[a+288>>2]=b;_U(b)}b=q[a+272>>2];if(b){q[a+276>>2]=b;_U(b)}b=q[a+260>>2];if(b){q[a+264>>2]=b;_U(b)}b=q[a+248>>2];if(b){q[a+252>>2]=b;_U(b)}b=q[a+236>>2];if(b){q[a+240>>2]=b;_U(b)}b=q[a+224>>2];if(b){q[a+228>>2]=b;_U(b)}b=q[a+212>>2];if(b){q[a+216>>2]=b;_U(b)}b=q[a+200>>2];if(b){q[a+204>>2]=b;_U(b)}b=q[a+188>>2];if(b){q[a+192>>2]=b;_U(b)}b=q[a+176>>2];if(b){q[a+180>>2]=b;_U(b)}b=q[a+164>>2];if(b){q[a+168>>2]=b;_U(b)}b=q[a+152>>2];if(b){q[a+156>>2]=b;_U(b)}b=q[a+140>>2];if(b){q[a+144>>2]=b;_U(b)}b=q[a+128>>2];if(b){q[a+132>>2]=b;_U(b)}b=q[a+116>>2];if(b){q[a+120>>2]=b;_U(b)}b=q[a+104>>2];if(b){q[a+108>>2]=b;_U(b)}b=q[a+92>>2];if(b){q[a+96>>2]=b;_U(b)}b=q[a+80>>2];if(b){q[a+84>>2]=b;_U(b)}b=q[a+68>>2];if(b){q[a+72>>2]=b;_U(b)}b=q[a+56>>2];if(b){q[a+60>>2]=b;_U(b)}b=q[a+44>>2];if(b){q[a+48>>2]=b;_U(b)}b=q[a+32>>2];if(b){q[a+36>>2]=b;_U(b)}b=q[a+20>>2];if(b){q[a+24>>2]=b;_U(b)}b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}return a|0}function zk(a,b){var c=0,d=0,e=0,f=0,g=0;c=q[a+16>>2];a:{if((n[q[q[c>>2]+12>>2]](c)|0)==-1){break a}c=q[a+16>>2];if(!n[q[q[c>>2]+12>>2]](c)){break a}b:{c:{d:{d=q[a+36>>2];if(d){while(1){c=q[d+176>>2];if(c){while(1){e=(q[c+820>>2]<2)+e|0;c=q[c+8>>2];if(c){continue}break}}d=q[d+316>>2];if(d){continue}break}if((e|0)>0){break d}}c=q[a+16>>2];break c}c=q[a+16>>2];if(!r[c+28|0]){break c}d=q[a+20>>2];if((q[c+136>>2]&q[d+76>>2])>0){break b}}if(!(q[c+140>>2]&-3)){break a}d=q[a+20>>2]}f=d;d=q[d+68>>2];n[q[q[c>>2]+56>>2]](c,e,q[a+12>>2],f,d);e=q[a+12>>2];c=q[a+16>>2];f=q[a+36>>2];if(f){while(1){n[q[q[c>>2]+60>>2]](c,f,e,d);e:{if(!q[q[a+16>>2]+3356>>2]){e=0;c=q[f+176>>2];if(!c){break e}while(1){if(q[c+820>>2]<=1){g=q[c+8>>2];f:{if(g){bk(c,g,e,d);break f}bk(c,0,e,d)}e=e+1|0}c=q[c+8>>2];if(c){continue}break}break e}e=0;c=q[f+180>>2];if(!c){break e}while(1){if(q[c+820>>2]<=1){g=q[c+4>>2];g:{if(g){bk(c,g,e,d);break g}bk(c,0,e,d)}e=e+1|0}c=q[c+4>>2];if(c){continue}break}}c=q[a+16>>2];n[q[q[c>>2]+64>>2]](c,f,q[a+12>>2],d);e=q[a+12>>2];c=q[a+16>>2];f=q[f+316>>2];if(f){continue}break}}n[q[q[c>>2]+72>>2]](c,e,d)}h:{if(!b){break h}c=q[a+24>>2];if(!c){break h}while(1){zk(c,1);c=q[c+8>>2];if(c){continue}break}}}function yl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=ue-16|0;ue=g;e=q[a+512>>2];c=q[a+516>>2];if((e|0)!=(c|0)){while(1){d=c+ -288|0;f=q[q[c+ -248>>2]+4>>2];if(f){n[f](q[c+ -260>>2])}c=q[d>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}c=d;if((c|0)!=(e|0)){continue}break}}q[a+516>>2]=e;a:{c=q[a+500>>2];h=q[a+504>>2];if((c|0)==(h|0)){break a}i=a+512|0;while(1){b:{if(e>>>0>2]){q[e>>2]=0;d=q[c>>2];c:{if(!d){break c}n[q[q[d>>2]>>2]](d)|0;d=q[e>>2];if(!d){break c}n[q[q[d>>2]+8>>2]](d)|0;q[e>>2]=0}q[e>>2]=q[c>>2];d=q[c+8>>2];q[e+4>>2]=q[c+4>>2];q[e+8>>2]=d;d=q[c+16>>2];q[e+12>>2]=q[c+12>>2];q[e+16>>2]=d;d=r[c+21|0]|r[c+22|0]<<8|(r[c+23|0]<<16|r[c+24|0]<<24);f=r[c+17|0]|r[c+18|0]<<8|(r[c+19|0]<<16|r[c+20|0]<<24);o[e+17|0]=f;o[e+18|0]=f>>>8;o[e+19|0]=f>>>16;o[e+20|0]=f>>>24;o[e+21|0]=d;o[e+22|0]=d>>>8;o[e+23|0]=d>>>16;o[e+24|0]=d>>>24;d=q[c+32>>2];q[e+28>>2]=q[c+28>>2];q[e+32>>2]=d;q[e+36>>2]=q[c+36>>2];d=q[c+40>>2];q[e+40>>2]=d;d=q[d>>2];if(d){j=e,k=n[d](q[c+28>>2])|0,q[j+28>>2]=k}kV(e+44|0,c+44|0,228);q[a+516>>2]=q[a+516>>2]+288;break b}zl(i,c)}c=c+288|0;if((h|0)==(c|0)){break a}e=q[a+516>>2];continue}}if(r[b+100|0]){c=q[a+516>>2];a=q[a+512>>2];q[g+8>>2]=b;Al(a,c,g+8|0)}ue=g+16|0}function Ts(a,b){var c=0,d=0,e=0,f=0,g=0;e=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);c=ue-16|0;d=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[c>>2]=d;q[c+4>>2]=e;q[c+8>>2]=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);q[a>>2]=d;q[a+4>>2]=e;d=q[c+12>>2];g=a+8|0;e=g;q[e>>2]=q[c+8>>2];q[e+4>>2]=d;q[c+8>>2]=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);e=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);d=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);q[c>>2]=d;q[c+4>>2]=e;q[a+16>>2]=d;q[a+20>>2]=e;f=q[c+12>>2];e=a+24|0;d=e;q[d>>2]=q[c+8>>2];q[d+4>>2]=f;q[c+8>>2]=r[b+32|0]|r[b+33|0]<<8|(r[b+34|0]<<16|r[b+35|0]<<24);d=r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24);f=r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24);q[c>>2]=f;q[c+4>>2]=d;q[a+32>>2]=f;q[a+36>>2]=d;d=q[c+12>>2];q[a+40>>2]=q[c+8>>2];q[a+44>>2]=d;c=r[b+40|0]|r[b+41|0]<<8|(r[b+42|0]<<16|r[b+43|0]<<24);d=r[b+44|0]|r[b+45|0]<<8|(r[b+46|0]<<16|r[b+47|0]<<24);b=r[b+36|0]|r[b+37|0]<<8|(r[b+38|0]<<16|r[b+39|0]<<24);f=q[a+16>>2];q[a+16>>2]=q[a+4>>2];q[a+4>>2]=f;f=q[g>>2];q[g>>2]=q[a+32>>2];q[a+32>>2]=f;q[a+12>>2]=b;b=q[e>>2];g=a+36|0;q[e>>2]=q[g>>2];q[g>>2]=b;q[a+44>>2]=d;q[a+28>>2]=c;return a}function AN(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0;j=ue-16|0;ue=j;k=WH(g);n=pM(g);SM(j,n);q[f>>2]=d;a:{h=a;g=r[h|0];i=g+ -43|0;if(!(i>>>0>2|!(i-1))){g=II(k,g<<24>>24);h=q[f>>2];q[f>>2]=h+4;q[h>>2]=g;h=a+1|0}g=h;if(!(r[g|0]!=48|(c-g|0)<=1|(r[g+1|0]|32)!=120)){g=II(k,48);i=q[f>>2];q[f>>2]=i+4;q[i>>2]=g;g=II(k,o[h+1|0]);i=q[f>>2];q[f>>2]=i+4;q[i>>2]=g;h=h+2|0;g=h;while(1){if(g>>>0>=c>>>0){break a}if(!JK(o[g|0],fM())){break a}g=g+1|0;continue}}while(1){if(g>>>0>=c>>>0){break a}i=o[g|0];fM();if(!IJ(i)){break a}g=g+1|0;continue}}b:{if(xL(j)){OM(k,h,g,q[f>>2]);q[f>>2]=q[f>>2]+(g-h<<2);break b}dN(h,g);s=RM(n);i=h;while(1){if(i>>>0>=g>>>0){uN((h-a<<2)+d|0,q[f>>2])}else{c:{if(o[vL(j,l)|0]<1){break c}if(o[vL(j,l)|0]!=(m|0)){break c}m=q[f>>2];q[f>>2]=m+4;q[m>>2]=s;l=(l>>>0>>0)+l|0;m=0}t=II(k,o[i|0]);p=q[f>>2];q[f>>2]=p+4;q[p>>2]=t;i=i+1|0;m=m+1|0;continue}break}}d:{e:{while(1){if(g>>>0>=c>>>0){break e}h=r[g|0];if((h|0)!=46){h=II(k,h<<24>>24);i=q[f>>2];q[f>>2]=i+4;q[i>>2]=h;g=g+1|0;continue}break}h=QM(n);l=q[f>>2];i=l+4|0;q[f>>2]=i;q[l>>2]=h;g=g+1|0;break d}i=q[f>>2]}OM(k,g,c,i);h=f;f=q[f>>2]+(c-g<<2)|0;q[h>>2]=f;q[e>>2]=(b|0)==(c|0)?f:(b-a<<2)+d|0;oT(j);ue=j+16|0}function Nm(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0,g=0,h=0,i=0,j=0,k=0;f=ue-192|0;ue=f;q[f+188>>2]=b;g=q[a+468>>2];a:{if(!g){break a}a=a+464|0;while(1){b:{h=q[g+32>>2];if((h|0)<=(b|0)){if((h|0)>=(b|0)){break b}g=g+4|0}g=q[g>>2];if(g){continue}break a}break}a=kl(a,f+188|0);b=a+264|0;h=q[b+4>>2];q[f+168>>2]=q[b>>2];q[f+172>>2]=h;g=a+256|0;k=q[g+4>>2];q[f+160>>2]=q[g>>2];q[f+164>>2]=k;h=a+248|0;i=q[h+4>>2];q[f+152>>2]=q[h>>2];q[f+156>>2]=i;k=a+240|0;i=k;j=q[i+4>>2];q[f+144>>2]=q[i>>2];q[f+148>>2]=j;i=a+232|0;j=q[i+4>>2];q[f+136>>2]=q[i>>2];q[f+140>>2]=j;j=q[a+228>>2];q[f+128>>2]=q[a+224>>2];q[f+132>>2]=j;Xs(f+112|0,f+128|0);zp(f- -64|0,c,d,e);q[a+100>>2]=q[f+72>>2];j=q[f+68>>2];q[a+92>>2]=q[f+64>>2];q[a+96>>2]=j;_s(f- -64|0,nt(f+48|0,a+92|0),Ts(f,a+44|0),f+112|0);j=q[f+108>>2];q[b>>2]=q[f+104>>2];q[b+4>>2]=j;b=q[f+100>>2];q[g>>2]=q[f+96>>2];q[g+4>>2]=b;b=q[f+92>>2];q[h>>2]=q[f+88>>2];q[h+4>>2]=b;b=q[f+84>>2];q[k>>2]=q[f+80>>2];q[k+4>>2]=b;b=q[f+76>>2];q[i>>2]=q[f+72>>2];q[i+4>>2]=b;b=q[f+68>>2];q[a+224>>2]=q[f+64>>2];q[a+228>>2]=b;o[a+20|0]=1;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,f- -64|0)}ue=f+192|0}function Aw(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-48|0;ue=d;e=q[a>>2];g=(q[a+4>>2]-e|0)/28|0;c=g+1|0;if(c>>>0<153391690){h=q[a+8>>2];q[d+24>>2]=a+8;q[d+20>>2]=0;e=(h-e|0)/28|0;h=e<<1;e=e>>>0<76695844?h>>>0>>0?c:h:153391689;a:{if(!e){break a}wt(d+32|0);f=n[q[d+40>>2]](d+32|0,w(e,28))|0;c=q[q[d+44>>2]+4>>2];if(!c){break a}n[c](q[d+32>>2])}q[d+8>>2]=f;c=w(g,28)+f|0;q[d+16>>2]=c;q[d+20>>2]=w(e,28)+f;q[d+12>>2]=c;q[c>>2]=q[b>>2];f=b+12|0;q[c+12>>2]=q[f>>2];e=q[b+8>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=e;q[b+4>>2]=0;q[b+8>>2]=0;q[f>>2]=0;q[c+24>>2]=q[b+24>>2];f=q[b+20>>2];q[c+16>>2]=q[b+16>>2];q[c+20>>2]=f;f=q[d+16>>2]+28|0;q[d+16>>2]=f;b=q[a+4>>2];e=q[a>>2];b:{if((b|0)==(e|0)){c=q[d+12>>2];break b}c=q[d+12>>2];while(1){c=c+ -28|0;b=b+ -28|0;q[c>>2]=q[b>>2];f=b+12|0;q[c+12>>2]=q[f>>2];g=q[b+8>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=g;q[b+4>>2]=0;q[b+8>>2]=0;q[f>>2]=0;q[c+24>>2]=q[b+24>>2];f=q[b+20>>2];q[c+16>>2]=q[b+16>>2];q[c+20>>2]=f;c=q[d+12>>2]+ -28|0;q[d+12>>2]=c;if((b|0)!=(e|0)){continue}break}b=q[a+4>>2];e=q[a>>2];f=q[d+16>>2]}q[a>>2]=c;q[d+12>>2]=e;q[a+4>>2]=f;q[d+16>>2]=b;b=q[a+8>>2];q[a+8>>2]=q[d+20>>2];q[d+8>>2]=e;q[d+20>>2]=b;Tw(d+8|0);ue=d+48|0;return}kU();F()} + + + +function cK(a,b){var c=0,d=0,e=0,f=0;c=q[a+4>>2];a:{if(c>>>0>2]){q[a+4>>2]=c+1;c=r[c|0];break a}c=HJ(a)}d=c+ -43|0;b:{if(!(d-1|0?d>>>0<=2:0)){d=c+ -48|0;break b}f=(c|0)==45;b=!b;c=q[a+4>>2];c:{if(c>>>0>2]){q[a+4>>2]=c+1;c=r[c|0];break c}c=HJ(a)}d=c+ -48|0;if(!(b|d>>>0<10|!q[a+104>>2])){q[a+4>>2]=q[a+4>>2]+ -1}}d:{if(d>>>0<10){d=0;while(1){d=w(d,10)+c|0;b=q[a+4>>2];e:{if(b>>>0>2]){q[a+4>>2]=b+1;c=r[b|0];break e}c=HJ(a)}e=c+ -48|0;d=d+ -48|0;if((d|0)<214748364?e>>>0<=9:0){continue}break}b=d;d=d>>31;f:{if(e>>>0>=10){break f}while(1){d=vW(b,d,10,0);c=d+c|0;b=we;b=c>>>0>>0?b+1|0:b;c=c+ -48|0;d=b+ -1|0;d=c>>>0<4294967248?d+1|0:d;b=c;c=q[a+4>>2];g:{if(c>>>0>2]){q[a+4>>2]=c+1;c=r[c|0];break g}c=HJ(a)}e=c+ -48|0;if(e>>>0>9){break f}if((d|0)<21474836?1:(d|0)<=21474836?b>>>0>=2061584302?0:1:0){continue}break}}if(e>>>0<10){while(1){c=q[a+4>>2];h:{if(c>>>0>2]){q[a+4>>2]=c+1;c=r[c|0];break h}c=HJ(a)}if(c+ -48>>>0<10){continue}break}}if(q[a+104>>2]){q[a+4>>2]=q[a+4>>2]+ -1}a=b;b=f?0-a|0:a;d=f?0-(d+(0>>0)|0)|0:d;break d}b=0;d=-2147483648;if(!q[a+104>>2]){break d}q[a+4>>2]=q[a+4>>2]+ -1;we=-2147483648;return 0}we=d;return b}function kN(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0;k=ue-16|0;ue=k;j=FH(g);n=lL(g);SM(k,n);q[f>>2]=d;a:{i=a;g=r[i|0];h=g+ -43|0;if(!(h>>>0>2|!(h-1))){g=HI(j,g<<24>>24);i=q[f>>2];q[f>>2]=i+1;o[i|0]=g;i=a+1|0}g=i;if(!(r[g|0]!=48|(c-g|0)<=1|(r[g+1|0]|32)!=120)){g=HI(j,48);h=q[f>>2];q[f>>2]=h+1;o[h|0]=g;g=HI(j,o[i+1|0]);h=q[f>>2];q[f>>2]=h+1;o[h|0]=g;i=i+2|0;g=i;while(1){if(g>>>0>=c>>>0){break a}if(!JK(o[g|0],fM())){break a}g=g+1|0;continue}}while(1){if(g>>>0>=c>>>0){break a}h=o[g|0];fM();if(!IJ(h)){break a}g=g+1|0;continue}}b:{if(xL(k)){eM(j,i,g,q[f>>2]);q[f>>2]=q[f>>2]+(g-i|0);break b}dN(i,g);s=RM(n);h=i;while(1){if(h>>>0>=g>>>0){dN((i-a|0)+d|0,q[f>>2])}else{c:{if(o[vL(k,m)|0]<1){break c}if(o[vL(k,m)|0]!=(l|0)){break c}l=q[f>>2];q[f>>2]=l+1;o[l|0]=s;m=(m>>>0>>0)+m|0;l=0}t=HI(j,o[h|0]);p=q[f>>2];q[f>>2]=p+1;o[p|0]=t;h=h+1|0;l=l+1|0;continue}break}}while(1){d:{i=j;if(g>>>0>>0){h=r[g|0];if((h|0)!=46){break d}j=QM(n);h=q[f>>2];q[f>>2]=h+1;o[h|0]=j;g=g+1|0}eM(i,g,c,q[f>>2]);i=f;f=q[f>>2]+(c-g|0)|0;q[i>>2]=f;q[e>>2]=(b|0)==(c|0)?f:(b-a|0)+d|0;oT(k);ue=k+16|0;return}i=HI(j,h<<24>>24);h=q[f>>2];q[f>>2]=h+1;o[h|0]=i;g=g+1|0;continue}}function rr(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0;g=ue-80|0;ue=g;u[g+76>>2]=f;h=q[b+24>>2];d=w((d|0)%((q[b+28>>2]-h|0)/36|0)|0,36);h=d+h|0;h=q[h+4>>2]-q[h>>2]|0;a:{if(!h){yp(a);yp(a+12|0);yp(a+24|0);yp(a+36|0);break a}f=x(n[q[q[c>>2]+12>>2]](c));b=d+q[b+24>>2]|0;i=q[b>>2];j=(q[b+4>>2]-i|0)/60|0;f=x(f*x(((h|0)/60|0)+ -1|0));b:{if(x(y(f))(b|0)?b:j+ -1|0;b=w((b|0)>0?b:0,60)+i|0;Dp(g+8|0,b,g+76|0);i=g+32|0;q[i>>2]=q[g+16>>2];j=q[g+12>>2];q[g+24>>2]=q[g+8>>2];q[g+28>>2]=j;q[c+8>>2]=q[b+20>>2];j=q[b+16>>2];q[c>>2]=q[b+12>>2];q[c+4>>2]=j;q[d+8>>2]=q[b+32>>2];c=q[b+28>>2];q[d>>2]=q[b+24>>2];q[d+4>>2]=c;q[h+8>>2]=q[b+44>>2];c=q[b+40>>2];q[h>>2]=q[b+36>>2];q[h+4>>2]=c;if(!e){b=g+44|0;u[b>>2]=-u[b>>2];b=g+56|0;u[b>>2]=-u[b>>2];b=g+68|0;u[b>>2]=-u[b>>2];u[g+32>>2]=-u[g+32>>2]}b=q[g+28>>2];q[a>>2]=q[g+24>>2];q[a+4>>2]=b;b=g- -64|0;c=q[b+4>>2];q[a+40>>2]=q[b>>2];q[a+44>>2]=c;b=q[g+60>>2];q[a+32>>2]=q[g+56>>2];q[a+36>>2]=b;b=q[k+4>>2];q[a+24>>2]=q[k>>2];q[a+28>>2]=b;b=q[g+44>>2];q[a+16>>2]=q[g+40>>2];q[a+20>>2]=b;b=q[i+4>>2];q[a+8>>2]=q[i>>2];q[a+12>>2]=b}ue=g+80|0}function oR(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0;q[c>>2]=a;q[f>>2]=d;while(1){g=q[c>>2];if(g>>>0>=b>>>0){return 0}j=1;a:{b:{k=q[f>>2];c:{if(k>>>0>=e>>>0){break c}a=o[g|0];d=a&255;if((a|0)>=0){if(d>>>0>1114111){break a}a=1;break b}if(d>>>0<194){break a}if(d>>>0<=223){if((b-g|0)<2){break c}j=2;h=r[g+1|0];if((h&192)!=128){break c}a=2;d=h&63|d<<6&1984;if(d>>>0<=1114111){break b}break c}d:{if(d>>>0<=239){if((b-g|0)<3){break c}i=r[g+2|0];h=r[g+1|0];e:{f:{if((d|0)!=237){if((d|0)!=224){break f}if((h&224)==160){break e}break a}if((h&224)==128){break e}break a}if((h&192)!=128){break a}}if((i&192)==128){break d}break a}if(d>>>0>244){break a}if((b-g|0)<4){break c}i=r[g+3|0];l=r[g+2|0];h=r[g+1|0];g:{h:{a=d+ -240|0;if(a>>>0>4){break h}i:{switch(a-1|0){default:if((h+112&255)>>>0>=48){break a}break g;case 0:case 1:case 2:break h;case 3:break i}}if((h&240)!=128){break a}break g}if((h&192)!=128){break a}}if((l&192)!=128|(i&192)!=128){break a}a=4;j=2;d=i&63|(l<<6&4032|(d<<18&1835008|(h&63)<<12));if(d>>>0>1114111){break c}break b}a=3;j=2;d=i&63|(d<<12&61440|(h&63)<<6);if(d>>>0<=1114111){break b}}return j}q[k>>2]=d;q[c>>2]=a+g;q[f>>2]=q[f>>2]+4;continue}break}return 2}function Hj(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{d=a+1232|0;b:{if(u[d>>2]!=u[b>>2]|u[a+1236>>2]!=u[b+4>>2]|(u[a+1240>>2]!=u[b+8>>2]|u[a+1244>>2]!=u[b+12>>2])){break b}if(u[a+1248>>2]!=u[b+16>>2]|u[a+1252>>2]!=u[b+20>>2]|(u[a+1256>>2]!=u[b+24>>2]|u[a+1260>>2]!=u[b+28>>2])){break b}if(u[a+1264>>2]!=u[b+32>>2]|u[a+1268>>2]!=u[b+36>>2]|u[a+1272>>2]!=u[b+40>>2]){break b}if(u[a+1276>>2]==u[b+44>>2]){break a}}q[a+1400>>2]=q[q[a+144>>2]+580>>2];h=b+32|0;e=h;g=q[e+4>>2];c=a+1184|0;q[c+32>>2]=q[e>>2];q[c+36>>2]=g;i=b+16|0;e=i;g=q[e+4>>2];q[c+16>>2]=q[e>>2];q[c+20>>2]=g;e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;e=b+40|0;f=q[e+4>>2];q[c+40>>2]=q[e>>2];q[c+44>>2]=f;g=b+24|0;f=g;j=q[f+4>>2];q[c+24>>2]=q[f>>2];q[c+28>>2]=j;f=b+8|0;j=q[f+4>>2];q[c+8>>2]=q[f>>2];q[c+12>>2]=j;c=q[h+4>>2];q[d+32>>2]=q[h>>2];q[d+36>>2]=c;c=q[i+4>>2];q[d+16>>2]=q[i>>2];q[d+20>>2]=c;c=q[b+4>>2];q[d>>2]=q[b>>2];q[d+4>>2]=c;b=q[e+4>>2];q[d+40>>2]=q[e>>2];q[d+44>>2]=b;b=q[g+4>>2];q[d+24>>2]=q[g>>2];q[d+28>>2]=b;b=q[f+4>>2];q[d+8>>2]=q[f>>2];q[d+12>>2]=b;b=a+1280|0;q[b>>2]=0;q[b+4>>2]=0;o[a+1288|0]=1;b=q[a+160>>2];if(b){while(1){Wk(b,d);b=q[b+312>>2];if(b){continue}break}}o[a+1393|0]=1}}function _J(a,b,c,d){var e=0,h=0,i=0,j=0,k=0,l=0,m=0;i=ue-32|0;ue=i;e=d&2147483647;k=e;e=e+ -1006698496|0;j=c;h=c;if(c>>>0<0){e=e+1|0}l=h;h=e;e=k+ -1140785152|0;m=j;if(j>>>0<0){e=e+1|0}a:{if((e|0)==(h|0)&l>>>0>>0|h>>>0>>0){e=d<<4|c>>>28;c=c<<4|b>>>28;b=b&268435455;j=b;if((b|0)==134217728&a>>>0>=1|b>>>0>134217728){e=e+1073741824|0;a=c+1|0;if(a>>>0<1){e=e+1|0}h=a;break a}h=c;e=e-((c>>>0<0)+ -1073741824|0)|0;if(a|j^134217728){break a}a=h+(h&1)|0;if(a>>>0>>0){e=e+1|0}h=a;break a}if(!(!j&(k|0)==2147418112?!(a|b):(k|0)==2147418112&j>>>0<0|k>>>0<2147418112)){e=d<<4|c>>>28;h=c<<4|b>>>28;e=e&524287|2146959360;break a}h=0;e=2146435072;if((k|0)==1140785151&j>>>0>4294967295|k>>>0>1140785151){break a}e=0;j=k>>>16|0;if(j>>>0<15249){break a}e=d&65535|65536;MJ(i+16|0,a,b,c,e,j+ -15233|0);PJ(i,a,b,c,e,15361-j|0);c=q[i+4>>2];a=q[i+8>>2];e=q[i+12>>2]<<4|a>>>28;h=a<<4|c>>>28;a=c&268435455;c=a;b=q[i>>2]|((q[i+16>>2]|q[i+24>>2])!=0|(q[i+20>>2]|q[i+28>>2])!=0);if((a|0)==134217728&b>>>0>=1|a>>>0>134217728){a=h+1|0;if(a>>>0<1){e=e+1|0}h=a;break a}if(b|c^134217728){break a}a=h+(h&1)|0;if(a>>>0>>0){e=e+1|0}h=a}ue=i+32|0;f(0,h|0);f(1,d&-2147483648|e);return+g()}function ds(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ue-16|0;ue=e;a:{if(b){yt(e);d=n[q[e+8>>2]](e,b<<2,16)|0;c=q[q[e+12>>2]+4>>2];if(c){n[c](q[e>>2])}c=q[a>>2];q[a>>2]=d;b:{if(!c){break b}d=q[a+4>>2];zt(e);n[q[e+8>>2]](e,c,d<<2);c=q[q[e+12>>2]+4>>2];if(!c){break b}n[c](q[e>>2])}q[a+4>>2]=b;c=b>>>0>1?b:1;d=0;while(1){q[q[a>>2]+(d<<2)>>2]=0;d=d+1|0;if((c|0)!=(d|0)){continue}break}g=q[a+8>>2];if(!g){break a}c=a+8|0;h=q[g+4>>2];d=yW(b);c:{if(d>>>0<=1){h=b+ -1&h;break c}if(h>>>0>>0){break c}h=(h>>>0)%(b>>>0)|0}q[q[a>>2]+(h<<2)>>2]=c;c=q[g>>2];if(!c){break a}k=b+ -1|0;l=d>>>0>1;while(1){f=q[c+4>>2];d:{if(!l){f=f&k;break d}if(f>>>0>>0){break d}f=(f>>>0)%(b>>>0)|0}e:{if((f|0)==(h|0)){g=c;break e}d=c;i=f<<2;j=i+q[a>>2]|0;if(!q[j>>2]){q[j>>2]=g;g=c;h=f;break e}while(1){f=d;d=q[d>>2];if(((u[c+20>>2]==u[d+20>>2])<<1|u[c+16>>2]==u[d+16>>2]|(u[c+24>>2]==u[d+24>>2])<<2)==7?d:0){continue}break}q[g>>2]=d;q[f>>2]=q[q[q[a>>2]+i>>2]>>2];q[q[q[a>>2]+i>>2]>>2]=c}c=q[g>>2];if(c){continue}break}break a}b=q[a>>2];q[a>>2]=0;f:{if(!b){break f}c=q[a+4>>2];zt(e);n[q[e+8>>2]](e,b,c<<2);b=q[q[e+12>>2]+4>>2];if(!b){break f}n[b](q[e>>2])}q[a+4>>2]=0}ue=e+16|0}function hj(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;q[a+12>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);q[a+16>>2]=r[b+4|0]|r[b+5|0]<<8|(r[b+6|0]<<16|r[b+7|0]<<24);q[a+36>>2]=r[b+8|0]|r[b+9|0]<<8|(r[b+10|0]<<16|r[b+11|0]<<24);q[a+40>>2]=r[b+12|0]|r[b+13|0]<<8|(r[b+14|0]<<16|r[b+15|0]<<24);q[a>>2]=r[b+16|0]|r[b+17|0]<<8|(r[b+18|0]<<16|r[b+19|0]<<24);q[a+4>>2]=r[b+20|0]|r[b+21|0]<<8|(r[b+22|0]<<16|r[b+23|0]<<24);q[a+8>>2]=r[b+24|0]|r[b+25|0]<<8|(r[b+26|0]<<16|r[b+27|0]<<24);h=r[b+28|0]|r[b+29|0]<<8|(r[b+30|0]<<16|r[b+31|0]<<24);a:{if((h|0)<1){j=32;break a}l=a+20|0;b=b+32|0;j=(h<<2)+32|0;b:{while(1){c:{g=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);c=q[a+24>>2];e=q[a+28>>2];d:{if((c|0)!=(e|0)){q[c>>2]=g;q[a+24>>2]=c+4;break d}f=q[l>>2];i=c-f|0;c=i>>2;d=c+1|0;if(d>>>0>=1073741824){break c}m=c<<2;e=e-f|0;c=e>>1;d=e>>2>>>0<536870911?c>>>0>>0?d:c:1073741823;c=0;e:{if(!d){break e}if(d>>>0>=1073741824){break b}c=_S(d<<2)}e=m+c|0;q[e>>2]=g;d=c+(d<<2)|0;g=e+4|0;if((i|0)>=1){kV(c,f,i)}q[a+28>>2]=d;q[a+24>>2]=g;q[a+20>>2]=c;if(!f){break d}_U(f)}b=b+4|0;k=k+1|0;if((k|0)!=(h|0)){continue}break a}break}kU();F()}Ue(3756);F()}return j}function nh(a,b,c){var d=0;d=ue-16|0;ue=d;u[d+12>>2]=b;u[c>>2]=u[c>>2]*b;u[c+4>>2]=u[c+4>>2]*b;u[c+8>>2]=u[c+8>>2]*b;c=q[a>>2];a:{if(c>>>0>3){break a}b:{switch(c-1|0){default:Gp(a+8|0,d+12|0);break a;case 0:c=a+56|0;u[c>>2]=u[c>>2]*b;c=a+60|0;u[c>>2]=u[c>>2]*b;c=a- -64|0;u[c>>2]=u[c>>2]*b;c=a+44|0;u[c>>2]=u[c>>2]*b;c=a+48|0;u[c>>2]=u[c>>2]*b;c=a+52|0;u[c>>2]=u[c>>2]*b;c=a+80|0;u[c>>2]=u[c>>2]*b;c=a+84|0;u[c>>2]=u[c>>2]*b;c=a+88|0;u[c>>2]=u[c>>2]*b;c=a+68|0;u[c>>2]=u[c>>2]*b;c=a+72|0;u[c>>2]=u[c>>2]*b;c=a+76|0;u[c>>2]=u[c>>2]*b;c=a+104|0;u[c>>2]=u[c>>2]*b;c=a+108|0;u[c>>2]=u[c>>2]*b;c=a+112|0;u[c>>2]=u[c>>2]*b;c=a+92|0;u[c>>2]=u[c>>2]*b;c=a+96|0;u[c>>2]=u[c>>2]*b;a=a+100|0;u[a>>2]=u[a>>2]*b;break a;case 1:c=a+164|0;u[c>>2]=u[c>>2]*b;c=a+168|0;u[c>>2]=u[c>>2]*b;c=a+172|0;u[c>>2]=u[c>>2]*b;c=a+152|0;u[c>>2]=u[c>>2]*b;c=a+156|0;u[c>>2]=u[c>>2]*b;c=a+160|0;u[c>>2]=u[c>>2]*b;c=a+188|0;u[c>>2]=u[c>>2]*b;c=a+192|0;u[c>>2]=u[c>>2]*b;c=a+196|0;u[c>>2]=u[c>>2]*b;c=a+176|0;u[c>>2]=u[c>>2]*b;c=a+180|0;u[c>>2]=u[c>>2]*b;a=a+184|0;u[a>>2]=u[a>>2]*b;break a;case 2:break b}}lj(q[a+276>>2]+4|0,b);lj(q[a+276>>2]+48|0,b);lj(q[a+276>>2]+92|0,b)}ue=d+16|0}function gR(a,b,c,d,e,f){var g=0,h=0;q[c>>2]=a;q[f>>2]=d;g=q[c>>2];a:{b:{while(1){if(g>>>0>=b>>>0){a=0;break a}a=2;d=s[g>>1];if(d>>>0>1114111){break a}c:{d:{if(d>>>0<=127){a=1;g=q[f>>2];if((e-g|0)<1){break a}q[f>>2]=g+1;o[g|0]=d;break d}if(d>>>0<=2047){a=q[f>>2];if((e-a|0)<2){break b}q[f>>2]=a+1;o[a|0]=d>>>6|192;a=q[f>>2];q[f>>2]=a+1;o[a|0]=d&63|128;break d}if(d>>>0<=55295){a=q[f>>2];if((e-a|0)<3){break b}q[f>>2]=a+1;o[a|0]=d>>>12|224;a=q[f>>2];q[f>>2]=a+1;o[a|0]=d>>>6&63|128;a=q[f>>2];q[f>>2]=a+1;o[a|0]=d&63|128;break d}if(d>>>0<=56319){a=1;if((b-g|0)<4){break a}h=s[g+2>>1];if((h&64512)!=56320){break c}if((e-q[f>>2]|0)<4){break a}a=d&960;if((h&1023|(d<<10&64512|a<<10))+65536>>>0>1114111){break c}q[c>>2]=g+2;g=q[f>>2];q[f>>2]=g+1;a=(a>>>6|0)+1|0;o[g|0]=a>>>2|240;g=q[f>>2];q[f>>2]=g+1;o[g|0]=a<<4&48|d>>>2&15|128;a=q[f>>2];q[f>>2]=a+1;o[a|0]=h>>>6&15|d<<4&48|128;a=q[f>>2];q[f>>2]=a+1;o[a|0]=h&63|128;break d}if(d>>>0<57344){break a}a=q[f>>2];if((e-a|0)<3){break b}q[f>>2]=a+1;o[a|0]=d>>>12|224;a=q[f>>2];q[f>>2]=a+1;o[a|0]=d>>>6&63|128;a=q[f>>2];q[f>>2]=a+1;o[a|0]=d&63|128}g=q[c>>2]+2|0;q[c>>2]=g;continue}break}return 2}return 1}return a}function RU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(CU(a,q[b+8>>2],e)){QU(b,c,d);return}a:{if(CU(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;if(q[b+44>>2]!=4){f=a+16|0;i=f+(q[a+12>>2]<<3)|0;j=b;b:{c:{while(1){d:{if(f>>>0>=i>>>0){break d}p[b+52>>1]=0;SU(f,b,c,c,1,e);if(r[b+54|0]){break d}e:{if(!r[b+53|0]){break e}if(r[b+52|0]){d=1;if(q[b+24>>2]==1){break c}h=1;g=1;if(r[a+8|0]&2){break e}break c}h=1;d=g;if(!(o[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=g;a=4;if(!h){break b}}a=3}q[j+44>>2]=a;if(d&1){break a}}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}g=q[a+12>>2];f=a+16|0;TU(f,b,c,d,e);if((g|0)<2){break a}g=f+(g<<3)|0;f=a+24|0;a=q[a+8>>2];if(!(q[b+36>>2]!=1?!(a&2):0)){while(1){if(r[b+54|0]){break a}TU(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break}break a}if(!(a&1)){while(1){if(r[b+54|0]|q[b+36>>2]==1){break a}TU(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break a}}while(1){if(r[b+54|0]|(q[b+24>>2]==1?q[b+36>>2]==1:0)){break a}TU(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break}}}function Vt(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=o[b+11|0];a:{if((g|0)<=-1){f=q[b+4>>2];g=q[b>>2];break a}f=g&255;g=b}h=r[c+11|0];k=h<<24>>24;i=(k|0)<0;m=q[c+4>>2];h=i?m:h;b:{if(h){if((f|0)<(h|0)){break b}j=f+g|0;i=i?q[c>>2]:c;n=r[i|0];e=g;while(1){f=f-h|0;l=f+1|0;if(l>>>0>>0){break b}e=tG(e,n,l);if(!e){break b}if(sG(e,i,h)){e=e+1|0;f=j-e|0;if((f|0)>=(h|0)){continue}break b}break}if((e|0)==(j|0)){break b}e=e-g|0;if((e|0)==-1){break b}}while(1){g=r[d+11|0];f=g<<24>>24<0;ET(b,e,(k|0)<0?m:k&255,f?q[d>>2]:d,f?q[d+4>>2]:g);g=o[d+11|0];f=q[d+4>>2];c:{if((g|0)<=-1){break c}f=g&255}e=f+e|0;g=o[b+11|0];d:{if((g|0)<=-1){f=q[b+4>>2];g=q[b>>2];break d}f=g&255;g=b}if(f>>>0>>0){break b}h=r[c+11|0];k=h<<24>>24;i=(k|0)<0;m=q[c+4>>2];h=i?m:h;if(h){j=f+g|0;e=e+g|0;f=j-e|0;if((f|0)<(h|0)){break b}i=i?q[c>>2]:c;n=r[i|0];while(1){f=f-h|0;l=f+1|0;if(l>>>0>>0){break b}e=tG(e,n,l);if(!e){break b}if(sG(e,i,h)){e=e+1|0;f=j-e|0;if((f|0)>=(h|0)){continue}break b}break}if((e|0)==(j|0)){break b}e=e-g|0}if((e|0)!=-1){continue}break}}c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=a;a=b+8|0;q[c+8>>2]=q[a>>2];q[b>>2]=0;q[b+4>>2]=0;q[a>>2]=0}function tu(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0);e=u[d>>2];if(e!=x(0)){e=r[d+5|0]?x(e*x(x(x(u[b>>2]+u[b+4>>2])+u[b+8>>2])/x(3))):e;a:{if(!r[d+4|0]){break a}f=x(u[a>>2]-u[c>>2]);g=x(f*f);f=x(u[a+4>>2]-u[c+4>>2]);g=x(g+x(f*f));f=x(u[a+8>>2]-u[c+8>>2]);f=x(E(x(g+x(f*f))));if(f==x(0)){break a}f=x(x(f-e)/f);u[b>>2]=f*u[b>>2];u[b+4>>2]=f*u[b+4>>2];u[b+8>>2]=f*u[b+8>>2];u[b+12>>2]=f*u[b+12>>2]}f=u[a+12>>2];g=f;n=x(u[c+12>>2]-f);k=u[a>>2];h=x(u[c>>2]-k);l=u[a+4>>2];i=x(u[c+4>>2]-l);m=u[a+8>>2];j=x(u[c+8>>2]-m);f=x(x(1)/x(E(x(x(x(h*h)+x(i*i))+x(j*j)))));u[a+12>>2]=g+x(e*x(n*f));u[a+8>>2]=m+x(e*x(j*f));u[a+4>>2]=l+x(e*x(i*f));u[a>>2]=k+x(e*x(h*f))}e=u[d+12>>2];b:{if(!(e>2]-u[c>>2]);g=x(f*f);f=x(u[a+4>>2]-u[c+4>>2]);g=x(g+x(f*f));f=x(u[a+8>>2]-u[c+8>>2]);f=x(E(x(g+x(f*f))));if(f==x(0)){break b}e=x(e+x(x(x(1)-e)*x(f*x(.03125))));u[b+12>>2]=e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*u[b+12>>2]))))))));u[b+8>>2]=e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*u[b+8>>2]))))))));u[b+4>>2]=e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*u[b+4>>2]))))))));u[b>>2]=e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*x(e*u[b>>2]))))))))}}function ji(a,b,c,d,e){var f=0,g=0,h=0,i=x(0),j=x(0),k=x(0),l=0,m=0;g=ue-32|0;ue=g;i=u[a+32>>2];j=u[a+24>>2];k=u[a+28>>2];f=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[g+24>>2]=f;c=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[g+20>>2]=c;q[g+16>>2]=f;q[g+12>>2]=c;Pe(g+28|0,g+16|0,g+12|0,x(x(i*e)+x(x(x(x(j*e)*e)*e)+x(x(k*e)*e))));c=b;h=q[g+28>>2];o[c|0]=h;o[c+1|0]=h>>>8;o[c+2|0]=h>>>16;o[c+3|0]=h>>>24;if(q[a>>2]==1){a=h&255;a=a>>>0<252?a:252;c=(a>>>0)/42|0;i=x(x((h>>>8&255)>>>0)/x(255));k=x(x(x(a|0)/x(42))-x(c>>>0));a=h>>>16&255;j=x(a>>>0);e=x(x(x(1)-x(i*k))*j);a:{if(x(y(e))>>0)%6|0;c=f>>>0>5;e=x(x(x(1)-i)*j);c:{if(x(y(e))>>8;o[b+2|0]=a>>>16;o[b+3|0]=a>>>24}ue=g+32|0}function Sy(a,b){var c=0,d=0;c=q[a+4>>2];a:{if(q[a+196>>2]){break a}c=q[a+20>>2]+(q[c+324>>2]<<3)|0;if(q[a+44>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+24>>2];break a}q[a+196>>2]=q[c>>2];break a}if(q[a+48>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+28>>2];break a}q[a+196>>2]=q[c+4>>2];break a}if(q[a+52>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+32>>2];break a}q[a+196>>2]=q[c+8>>2];break a}if(q[a+56>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+36>>2];break a}q[a+196>>2]=q[c+12>>2];break a}if(q[a+64>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+40>>2];break a}q[a+196>>2]=q[c+20>>2];break a}if(q[a+60>>2]==(b|0)){d=n[q[q[a>>2]+160>>2]](a)|0;c=q[q[c>>2]+4>>2];if((d|0)==1){q[a+196>>2]=q[c+44>>2];break a}q[a+196>>2]=q[c+16>>2];break a}q[a+196>>2]=0;c=q[a+76>>2];if(!c){break a}iw(q[c>>2])}ha(q[q[(q[b+24>>2]?b+24|0:b+20|0)>>2]+16>>2]);d=q[a+196>>2];if(d){d=q[d+8>>2];c=0;b:{if(!d){break b}c=q[d>>2]}iw(c)}q[a+68>>2]=b}function Lm(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=ue-192|0;ue=f;q[f+188>>2]=b;g=q[a+468>>2];a:{if(!g){break a}a=a+464|0;while(1){b:{i=q[g+32>>2];if((i|0)<=(b|0)){if((i|0)>=(b|0)){break b}g=g+4|0}g=q[g>>2];if(g){continue}break a}break}a=kl(a,f+188|0);b=a+264|0;i=q[b+4>>2];q[f+168>>2]=q[b>>2];q[f+172>>2]=i;g=a+256|0;k=q[g+4>>2];q[f+160>>2]=q[g>>2];q[f+164>>2]=k;i=a+248|0;j=q[i+4>>2];q[f+152>>2]=q[i>>2];q[f+156>>2]=j;k=a+240|0;j=k;h=q[j+4>>2];q[f+144>>2]=q[j>>2];q[f+148>>2]=h;j=a+232|0;h=j;l=q[h+4>>2];q[f+136>>2]=q[h>>2];q[f+140>>2]=l;h=q[a+228>>2];q[f+128>>2]=q[a+224>>2];q[f+132>>2]=h;Xs(f+112|0,f+128|0);h=a+44|0;lo(h,e,c,d);_s(f- -64|0,nt(f+48|0,a+92|0),Ts(f,h),f+112|0);h=q[f+108>>2];q[b>>2]=q[f+104>>2];q[b+4>>2]=h;b=q[f+100>>2];q[g>>2]=q[f+96>>2];q[g+4>>2]=b;b=q[f+92>>2];q[i>>2]=q[f+88>>2];q[i+4>>2]=b;b=q[f+84>>2];q[k>>2]=q[f+80>>2];q[k+4>>2]=b;b=q[f+76>>2];q[j>>2]=q[f+72>>2];q[j+4>>2]=b;b=q[f+68>>2];q[a+224>>2]=q[f+64>>2];q[a+228>>2]=b;o[a+20|0]=1;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,f- -64|0)}ue=f+192|0}function vu(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,v=0,w=0,y=0,z=0,A=0,B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0),H=x(0),I=x(0),J=x(0),K=x(0),L=x(0),M=x(0),N=x(0),O=x(0),P=x(0);e=ue-144|0;ue=e;d=oo(e+80|0);i=q[b+20>>2];j=q[b+36>>2];k=q[b+52>>2];l=q[b+24>>2];m=q[b+40>>2];n=q[b+56>>2];o=q[b+28>>2];p=q[b+44>>2];r=q[b+60>>2];s=q[b>>2];t=q[b+16>>2];v=q[b+32>>2];w=q[b+48>>2];y=q[b+4>>2];z=q[b+8>>2];A=q[b+12>>2];b=oo(e+16|0);q[b+48>>2]=A;q[b+32>>2]=z;q[b+16>>2]=y;q[b+12>>2]=w;q[b+8>>2]=v;q[b+4>>2]=t;q[b>>2]=s;q[b+60>>2]=r;q[b+56>>2]=p;q[b+52>>2]=o;q[b+44>>2]=n;q[b+40>>2]=m;q[b+36>>2]=l;q[b+28>>2]=k;q[b+24>>2]=j;q[b+20>>2]=i;to(d,b);B=u[d+52>>2];b=d+36|0;C=u[b>>2];D=u[d+56>>2];i=d+40|0;E=u[i>>2];F=u[d+48>>2];G=u[d+32>>2];Xs(e,a);H=u[b>>2];I=u[d+20>>2];f=u[i>>2];g=u[d+24>>2];J=u[d+32>>2];K=u[d>>2];L=u[d+16>>2];M=u[d+4>>2];h=u[d+8>>2];q[e+28>>2]=2143289344;N=h;h=u[e>>2];O=g;g=u[e+4>>2];P=f;f=u[e+8>>2];u[e+24>>2]=x(x(x(N*h)+x(O*g))-x(P*f))+x(D-x(E*c));u[e+20>>2]=x(x(x(M*h)+x(I*g))-x(H*f))+x(B-x(C*c));u[e+16>>2]=x(F-x(G*c))+x(x(x(K*h)+x(L*g))-x(J*f));Zs(a,e+16|0);ue=e+144|0}function Ew(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-48|0;ue=d;a:{e=q[a+8>>2];c=q[a+4>>2];b:{if((e-c|0)/12>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=(c-g|0)/12|0;c=h+b|0;if(c>>>0>=357913942){break a}q[d+24>>2]=a+8;q[d+20>>2]=0;e=(e-g|0)/12|0;g=e<<1;e=e>>>0<178956970?g>>>0>>0?c:g:357913941;c:{if(!e){break c}wt(d+32|0);f=n[q[d+40>>2]](d+32|0,w(e,12))|0;c=q[q[d+44>>2]+4>>2];if(!c){break c}n[c](q[d+32>>2])}q[d+8>>2]=f;c=w(h,12)+f|0;q[d+16>>2]=c;q[d+20>>2]=w(e,12)+f;q[d+12>>2]=c;while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;c=q[d+16>>2]+12|0;q[d+16>>2]=c;b=b+ -1|0;if(b){continue}break}b=q[a+4>>2];e=q[a>>2];d:{if((b|0)==(e|0)){f=q[d+12>>2];break d}f=q[d+12>>2];while(1){c=f+ -12|0;b=b+ -12|0;f=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=f;h=c;c=b+8|0;q[h+8>>2]=q[c>>2];q[b>>2]=0;q[b+4>>2]=0;q[c>>2]=0;f=q[d+12>>2]+ -12|0;q[d+12>>2]=f;if((b|0)!=(e|0)){continue}break}b=q[a+4>>2];e=q[a>>2];c=q[d+16>>2]}q[a>>2]=f;q[d+12>>2]=e;q[a+4>>2]=c;q[d+16>>2]=b;b=q[a+8>>2];q[a+8>>2]=q[d+20>>2];q[d+8>>2]=e;q[d+20>>2]=b;Uw(d+8|0)}ue=d+48|0;return}kU();F()}function Zi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=x(0),j=0,k=0,l=0,m=0,o=0;j=ue-16|0;ue=j;n[q[q[e>>2]+76>>2]](j+8|0,e);h=q[j+8>>2];if(h){i=u[b+824>>2];a:{if(x(y(i))>2];b:{if(x(y(i))>2]){q[a+3592>>2]=q[a+3840>>2]}if(!q[a+4124>>2]){q[a+3596>>2]=q[a+3844>>2]}c=a+3504|0;if(!q[a+4132>>2]){q[a+3600>>2]=q[a+3848>>2]}b=Gj(b);g=q[b+4>>2];e=a+3520|0;q[e>>2]=q[b>>2];q[e+4>>2]=g;g=q[b+44>>2];e=a+3560|0;q[e>>2]=q[b+40>>2];q[e+4>>2]=g;g=q[b+36>>2];e=a+3552|0;q[e>>2]=q[b+32>>2];q[e+4>>2]=g;g=q[b+28>>2];e=a+3544|0;q[e>>2]=q[b+24>>2];q[e+4>>2]=g;g=q[b+20>>2];e=a+3536|0;q[e>>2]=q[b+16>>2];q[e+4>>2]=g;g=q[b+12>>2];e=a+3528|0;q[e>>2]=q[b+8>>2];q[e+4>>2]=g;q[a+3508>>2]=d;n[q[q[h>>2]+24>>2]](h,a+3436|0,c,f);n[q[q[h>>2]+8>>2]](h)|0}ue=j+16|0}function Km(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=ue+ -64|0;ue=d;q[d+60>>2]=b;e=q[a+468>>2];a:{if(!e){break a}a=a+464|0;while(1){b:{j=q[e+32>>2];if((j|0)<=(b|0)){if((j|0)>=(b|0)){break b}e=e+4|0}e=q[e>>2];if(e){continue}break a}break}a=kl(a,d+60|0);e=a+264|0;g=q[e+4>>2];b=d+40|0;q[b>>2]=q[e>>2];q[b+4>>2]=g;l=a+256|0;h=l;k=q[h+4>>2];j=d+32|0;g=j;q[g>>2]=q[h>>2];q[g+4>>2]=k;h=a+248|0;i=q[h+4>>2];g=d+24|0;q[g>>2]=q[h>>2];q[g+4>>2]=i;m=a+240|0;f=m;n=q[f+4>>2];k=d+16|0;i=k;q[i>>2]=q[f>>2];q[i+4>>2]=n;i=a+232|0;f=i;n=q[f+4>>2];q[d+8>>2]=q[f>>2];q[d+12>>2]=n;f=q[a+228>>2];q[d>>2]=q[a+224>>2];q[d+4>>2]=f;u[d+12>>2]=u[d+12>>2]+u[c>>2];f=d+28|0;u[f>>2]=u[f>>2]+u[c+4>>2];f=d+44|0;u[f>>2]=u[f>>2]+u[c+8>>2];c=q[g+4>>2];q[h>>2]=q[g>>2];q[h+4>>2]=c;c=q[d+12>>2];q[i>>2]=q[d+8>>2];q[i+4>>2]=c;c=q[b+4>>2];q[e>>2]=q[b>>2];q[e+4>>2]=c;b=q[j+4>>2];q[l>>2]=q[j>>2];q[l+4>>2]=b;b=q[k+4>>2];q[m>>2]=q[k>>2];q[m+4>>2]=b;b=q[d+4>>2];q[a+224>>2]=q[d>>2];q[a+228>>2]=b;o[a+20|0]=1;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,d)}ue=d- -64|0}function kV(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){rb(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if((c|0)<1){c=a;break b}if(!(a&3)){c=a;break b}c=a;while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if(c>>>0>=e>>>0){break b}if(c&3){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+ -64|0;if(c>>>0>f>>>0){break c}while(1){q[c>>2]=q[b>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=q[b+16>>2];q[c+20>>2]=q[b+20>>2];q[c+24>>2]=q[b+24>>2];q[c+28>>2]=q[b+28>>2];q[c+32>>2]=q[b+32>>2];q[c+36>>2]=q[b+36>>2];q[c+40>>2]=q[b+40>>2];q[c+44>>2]=q[b+44>>2];q[c+48>>2]=q[b+48>>2];q[c+52>>2]=q[b+52>>2];q[c+56>>2]=q[b+56>>2];q[c+60>>2]=q[b+60>>2];b=b- -64|0;c=c- -64|0;if(c>>>0<=f>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){q[c>>2]=q[b>>2];b=b+4|0;c=c+4|0;if(c>>>0>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e+ -4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){o[c|0]=r[b|0];o[c+1|0]=r[b+1|0];o[c+2|0]=r[b+2|0];o[c+3|0]=r[b+3|0];b=b+4|0;c=c+4|0;if(c>>>0<=d>>>0){continue}break}}if(c>>>0>>0){while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function Mm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);var e=0,f=0,g=0,h=0,i=0,j=0;e=ue-192|0;ue=e;q[e+188>>2]=b;f=q[a+468>>2];a:{if(!f){break a}a=a+464|0;while(1){b:{g=q[f+32>>2];if((g|0)<=(b|0)){if((g|0)>=(b|0)){break b}f=f+4|0}f=q[f>>2];if(f){continue}break a}break}a=kl(a,e+188|0);b=a+264|0;g=q[b+4>>2];q[e+168>>2]=q[b>>2];q[e+172>>2]=g;f=a+256|0;j=q[f+4>>2];q[e+160>>2]=q[f>>2];q[e+164>>2]=j;g=a+248|0;h=q[g+4>>2];q[e+152>>2]=q[g>>2];q[e+156>>2]=h;j=a+240|0;h=j;i=q[h+4>>2];q[e+144>>2]=q[h>>2];q[e+148>>2]=i;h=a+232|0;i=q[h+4>>2];q[e+136>>2]=q[h>>2];q[e+140>>2]=i;i=q[a+228>>2];q[e+128>>2]=q[a+224>>2];q[e+132>>2]=i;Xs(e+112|0,e+128|0);i=a+44|0;mo(i,c,d);_s(e- -64|0,nt(e+48|0,a+92|0),Ts(e,i),e+112|0);c=q[e+108>>2];q[b>>2]=q[e+104>>2];q[b+4>>2]=c;b=q[e+100>>2];q[f>>2]=q[e+96>>2];q[f+4>>2]=b;b=q[e+92>>2];q[g>>2]=q[e+88>>2];q[g+4>>2]=b;b=q[e+84>>2];q[j>>2]=q[e+80>>2];q[j+4>>2]=b;b=q[e+76>>2];q[h>>2]=q[e+72>>2];q[h+4>>2]=b;b=q[e+68>>2];q[a+224>>2]=q[e+64>>2];q[a+228>>2]=b;o[a+20|0]=1;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,e- -64|0)}ue=e+192|0}function Sj(a,b,c){var d=0,e=x(0),f=x(0),g=0;d=ue-16|0;ue=d;g=q[c>>2]+ -21|0;a:{if(g>>>0>32){break a}b:{switch(g-1|0){case 0:e=x(n[q[q[b>>2]+16>>2]](b,u[c+12>>2],u[c+4>>2]));f=x(n[q[q[b>>2]+16>>2]](b,u[c+16>>2],u[c+8>>2]));q[a+8>>2]=0;q[a+12>>2]=1065353216;u[a+4>>2]=f;u[a>>2]=e;e=x(n[q[q[b>>2]+16>>2]](b,u[c+28>>2],u[c+20>>2]));f=x(n[q[q[b>>2]+16>>2]](b,u[c+32>>2],u[c+24>>2]));q[a+24>>2]=0;q[a+28>>2]=1065353216;u[a+20>>2]=f;u[a+16>>2]=e;break a;default:e=x(n[q[q[b>>2]+16>>2]](b,u[c+12>>2],u[c+4>>2]));f=x(n[q[q[b>>2]+16>>2]](b,u[c+16>>2],u[c+8>>2]));q[a+8>>2]=0;q[a+12>>2]=1065353216;u[a+4>>2]=f;u[a>>2]=e;break a;case 1:qj(d,q[c+4>>2],b);b=q[d+12>>2];q[a+8>>2]=q[d+8>>2];q[a+12>>2]=b;b=q[d+4>>2];q[a>>2]=q[d>>2];q[a+4>>2]=b;break a;case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:break a;case 31:break b}}wj(d,q[c+4>>2],b);b=q[d+12>>2];q[a+8>>2]=q[d+8>>2];q[a+12>>2]=b;b=q[d+4>>2];q[a>>2]=q[d>>2];q[a+4>>2]=b}ue=d+16|0}function BP(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;a=ue-1072|0;ue=a;q[a+16>>2]=f;q[a+20>>2]=g;q[a+24>>2]=h;q[a+28>>2]=i;q[a+956>>2]=a+960;j=LK(a+960|0,100,355599,a+16|0);q[a+544>>2]=857;o=rL(a+536|0,0,a+544|0);q[a+544>>2]=857;l=rL(a+528|0,0,a+544|0);m=a+544|0;a:{if(j>>>0>=100){j=fM();q[a>>2]=f;q[a+4>>2]=g;q[a+8>>2]=h;q[a+12>>2]=i;j=jN(a+956|0,j,355599,a);f=q[a+956>>2];if(!f){break a}sL(o,f);sL(l,ZU(j<<2));if(vP(l)){break a}m=q[l>>2]}EH(a+520|0,d);p=WH(a+520|0);f=q[a+956>>2];OM(p,f,f+j|0,m);n=j?r[q[a+956>>2]]==45:n;i=CL(a+488|0);g=CL(a+472|0);f=CL(a+456|0);CP(c,n,a+520|0,a+512|0,a+508|0,a+504|0,i,g,f,a+452|0);q[a+48>>2]=857;h=rL(a+40|0,0,a+48|0);c=q[a+452>>2];b:{if((j|0)>(c|0)){k=uL(f)+(j-c<<1|1)|0;break b}k=uL(f)+2|0}c=a+48|0;k=(uL(g)+k|0)+q[a+452>>2]|0;if(k>>>0>=101){sL(h,ZU(k<<2));c=q[h>>2];if(!c){break a}}DP(c,a+36|0,a+32|0,q[d+4>>2],m,(j<<2)+m|0,p,n,a+512|0,q[a+508>>2],q[a+504>>2],i,g,f,q[a+452>>2]);b=tN(b,c,q[a+36>>2],q[a+32>>2],d,e);wL(h);oT(f);oT(g);oT(i);kL(a+520|0);wL(l);wL(o);ue=a+1072|0;return b|0}TG();F()}function iP(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=ue-624|0;ue=a;q[a+608>>2]=c;q[a+616>>2]=b;q[a+16>>2]=858;b=rL(a+200|0,a+208|0,a+16|0);EH(a+192|0,e);h=WH(a+192|0);o[a+191|0]=0;a:{if(!jP(a+616|0,c,d,a+192|0,q[e+4>>2],f,a+191|0,h,b,a+196|0,a+608|0)){break a}c=r[355595]|r[355596]<<8|(r[355597]<<16|r[355598]<<24);o[a+183|0]=c;o[a+184|0]=c>>>8;o[a+185|0]=c>>>16;o[a+186|0]=c>>>24;c=r[355592]|r[355593]<<8|(r[355594]<<16|r[355595]<<24);q[a+176>>2]=r[355588]|r[355589]<<8|(r[355590]<<16|r[355591]<<24);q[a+180>>2]=c;OM(h,a+176|0,a+186|0,a+128|0);q[a+16>>2]=857;d=rL(a+8|0,0,a+16|0);c=a+16|0;b:{if((q[a+196>>2]-q[b>>2]|0)>=393){sL(d,ZU((q[a+196>>2]-q[b>>2]>>2)+2|0));if(!q[d>>2]){break b}c=q[d>>2]}if(r[a+191|0]){o[c|0]=45;c=c+1|0}e=q[b>>2];while(1){if(e>>>0>=t[a+196>>2]){c:{o[c|0]=0;q[a>>2]=g;if((KK(a+16|0,a)|0)!=1){break c}wL(d);break a}}else{i=c,j=r[(a+176|0)+(PM(a+128|0,a+168|0,e)-(a+128|0)>>2)|0],o[i|0]=j;c=c+1|0;e=e+4|0;continue}break}TG();F()}TG();F()}if($H(a+616|0,a+608|0)){q[f>>2]=q[f>>2]|2}c=q[a+616>>2];kL(a+192|0);wL(b);ue=a+624|0;return c|0}function Bu(a){q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=26988;q[a+12>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+44>>2]=0;q[a+48>>2]=0;q[a+36>>2]=1;q[a+40>>2]=2;q[a+52>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;q[a+64>>2]=0;q[a+68>>2]=0;q[a+72>>2]=0;q[a+100>>2]=1;q[a+104>>2]=1;q[a+92>>2]=1;q[a+96>>2]=1;q[a+84>>2]=1;q[a+88>>2]=1;q[a+76>>2]=1;q[a+80>>2]=1;q[a+168>>2]=0;q[a+172>>2]=0;q[a+160>>2]=0;q[a+164>>2]=0;q[a+152>>2]=0;q[a+156>>2]=0;q[a+144>>2]=0;q[a+148>>2]=0;q[a+136>>2]=0;q[a+140>>2]=0;q[a+128>>2]=0;q[a+132>>2]=0;q[a+120>>2]=0;q[a+124>>2]=0;q[a+112>>2]=0;q[a+116>>2]=0;o[a+32|0]=r[a+32|0]&252;q[a+180>>2]=1;q[a+184>>2]=2;q[a+188>>2]=0;q[a+192>>2]=0;q[a+196>>2]=0;q[a+200>>2]=0;q[a+204>>2]=0;q[a+208>>2]=0;q[a+212>>2]=0;q[a+216>>2]=0;q[a+220>>2]=1;q[a+224>>2]=1;q[a+228>>2]=1;q[a+232>>2]=1;q[a+236>>2]=1;q[a+240>>2]=1;q[a+244>>2]=1;q[a+248>>2]=1;q[a+256>>2]=0;q[a+260>>2]=0;q[a+264>>2]=0;q[a+268>>2]=0;q[a+272>>2]=0;q[a+276>>2]=0;q[a+280>>2]=0;q[a+284>>2]=0;q[a+288>>2]=0;q[a+292>>2]=0;q[a+296>>2]=0;q[a+300>>2]=0;q[a+304>>2]=0;q[a+308>>2]=0;q[a+312>>2]=0;q[a+316>>2]=0;o[a+176|0]=r[a+176|0]&252}function Sr(a,b){var c=0,d=x(0),e=0,f=x(0),g=x(0),h=x(0),i=x(0),j=0,k=0,l=0,m=0,n=0,p=x(0),s=x(0),t=x(0);c=ue-1664|0;ue=c;k=Sp(c+104|0,0,x(1),2);e=q[a>>2];j=q[a+4>>2];if((e|0)!=(j|0)){l=b+256|0;m=b+244|0;n=b+232|0;while(1){nt(c+48|0,n);d=u[e+8>>2];f=u[e+12>>2];g=u[e>>2];h=u[e+4>>2];i=u[c+56>>2];p=u[c+60>>2];s=u[c+48>>2];t=u[c+52>>2];nt(c+32|0,m);u[c+68>>2]=x(h*t)+u[c+36>>2];u[c+64>>2]=x(g*s)+u[c+32>>2];u[c+76>>2]=x(f*p)+u[c+44>>2];u[c+72>>2]=x(d*i)+u[c+40>>2];a=q[c+68>>2];q[c>>2]=q[c+64>>2];q[c+4>>2]=a;a=q[c+76>>2];q[c+8>>2]=q[c+72>>2];q[c+12>>2]=a;qs(c+80|0,k,c);nt(c+16|0,l);f=u[c+24>>2];g=u[c+88>>2];h=u[c+20>>2];i=u[c+84>>2];a=e;d=x(B(x(A(x(x(x(u[c+80>>2]*u[c+16>>2])*x(255))+x(r[e+64|0])),x(255))),x(0)));a:{if(d=x(0)){b=~~d>>>0;break a}b=0}o[a+64|0]=b;b=e+65|0;d=x(B(x(A(x(x(x(i*h)*x(255))+x(r[b|0])),x(255))),x(0)));b:{if(d=x(0)){a=~~d>>>0;break b}a=0}o[b|0]=a;b=e+66|0;d=x(B(x(A(x(x(x(g*f)*x(255))+x(r[b|0])),x(255))),x(0)));c:{if(d=x(0)){a=~~d>>>0;break c}a=0}o[b|0]=a;e=e+80|0;if((j|0)!=(e|0)){continue}break}}ue=c+1664|0}function Wt(a,b,c){var d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;e=d+24|0;f=Ft(a,13394,8);g=d+8|0;a:{b:{a=b+ -1|0;if(a>>>0>15){break b}c:{switch(a-1|0){default:q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;q[d+8>>2]=r[13378]|r[13379]<<8|(r[13380]<<16|r[13381]<<24);o[d+12|0]=r[13382];o[d+13|0]=0;o[d+19|0]=5;b=d+8|0;a=5;break a;case 0:q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;o[d+12|0]=0;q[d+8>>2]=845374838;o[d+19|0]=4;b=d+8|0;a=4;break a;case 1:q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;o[d+12|0]=0;q[d+8>>2]=862152054;o[d+19|0]=4;b=d+8|0;a=4;break a;case 2:q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;o[d+12|0]=0;q[d+8>>2]=878929270;o[d+19|0]=4;b=d+8|0;a=4;break a;case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:break b;case 14:break c}}q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;o[d+12|0]=0;q[d+8>>2]=880042349;o[d+19|0]=4;b=d+8|0;a=4;break a}q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;b=d+8|0;a=0}a=Ft(Ft(Ft(Ft(f,g,a),13403,1),c,sV(c)),13405,1);EH(e,q[q[a>>2]+ -12>>2]+a|0);c=pL(d+24|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(d+24|0);pI(a,c);DH(a);if(o[b+11|0]<=-1){_U(q[d+8>>2])}ue=d+32|0}function uP(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,p=0,s=0;a=ue-464|0;ue=a;q[a+16>>2]=f;q[a+20>>2]=g;q[a+24>>2]=h;q[a+28>>2]=i;q[a+348>>2]=a+352;j=LK(a+352|0,100,355599,a+16|0);q[a+240>>2]=857;p=rL(a+232|0,0,a+240|0);q[a+240>>2]=857;l=rL(a+224|0,0,a+240|0);m=a+240|0;a:{if(j>>>0>=100){j=fM();q[a>>2]=f;q[a+4>>2]=g;q[a+8>>2]=h;q[a+12>>2]=i;j=jN(a+348|0,j,355599,a);f=q[a+348>>2];if(!f){break a}sL(p,f);sL(l,ZU(j));if(vP(l)){break a}m=q[l>>2]}EH(a+216|0,d);s=FH(a+216|0);f=q[a+348>>2];eM(s,f,f+j|0,m);n=j?r[q[a+348>>2]]==45:n;i=CL(a+192|0);g=CL(a+176|0);f=CL(a+160|0);wP(c,n,a+216|0,a+208|0,a+207|0,a+206|0,i,g,f,a+156|0);q[a+48>>2]=857;h=rL(a+40|0,0,a+48|0);c=q[a+156>>2];b:{if((j|0)>(c|0)){k=uL(f)+(j-c<<1|1)|0;break b}k=uL(f)+2|0}c=a+48|0;k=(uL(g)+k|0)+q[a+156>>2]|0;if(k>>>0>=101){sL(h,ZU(k));c=q[h>>2];if(!c){break a}}xP(c,a+36|0,a+32|0,q[d+4>>2],m,j+m|0,s,n,a+208|0,o[a+207|0],o[a+206|0],i,g,f,q[a+156>>2]);b=Ut(b,c,q[a+36>>2],q[a+32>>2],d,e);wL(h);oT(f);oT(g);oT(i);kL(a+216|0);wL(l);wL(p);ue=a+464|0;return b|0}TG();F()}function OO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=ue-288|0;ue=a;q[a+272>>2]=c;q[a+280>>2]=b;q[a+16>>2]=858;b=rL(a+152|0,a+160|0,a+16|0);EH(a+144|0,e);h=FH(a+144|0);o[a+143|0]=0;a:{if(!PO(a+280|0,c,d,a+144|0,q[e+4>>2],f,a+143|0,h,b,a+148|0,a+260|0)){break a}c=r[355595]|r[355596]<<8|(r[355597]<<16|r[355598]<<24);o[a+135|0]=c;o[a+136|0]=c>>>8;o[a+137|0]=c>>>16;o[a+138|0]=c>>>24;c=r[355592]|r[355593]<<8|(r[355594]<<16|r[355595]<<24);q[a+128>>2]=r[355588]|r[355589]<<8|(r[355590]<<16|r[355591]<<24);q[a+132>>2]=c;eM(h,a+128|0,a+138|0,a+118|0);q[a+16>>2]=857;d=rL(a+8|0,0,a+16|0);c=a+16|0;b:{if((q[a+148>>2]-q[b>>2]|0)>=99){sL(d,ZU((q[a+148>>2]-q[b>>2]|0)+2|0));if(!q[d>>2]){break b}c=q[d>>2]}if(r[a+143|0]){o[c|0]=45;c=c+1|0}e=q[b>>2];while(1){if(e>>>0>=t[a+148>>2]){c:{o[c|0]=0;q[a>>2]=g;if((KK(a+16|0,a)|0)!=1){break c}wL(d);break a}}else{i=c,j=r[((lM(a+118|0,a+128|0,e)-a|0)+a|0)+10|0],o[i|0]=j;c=c+1|0;e=e+1|0;continue}break}TG();F()}TG();F()}if(KH(a+280|0,a+272|0)){q[f>>2]=q[f>>2]|2}c=q[a+280>>2];kL(a+144|0);wL(b);ue=a+288|0;return c|0}function xs(a){if(!!(a<=x(.5))){a=x(x(1)-x(a+a));a:{if(!!(a>2];if(!e){e=q[a+4>>2];if(!r[e+128|0]){break a}if(Gk(q[a+12>>2],r[e+129|0])){break c}e=q[a+16>>2]}if((e|0)!=1){break a}break b}q[a+16>>2]=1;u[a+28>>2]=u[a+32>>2]+b}e=q[a+4>>2];if(!r[e+130|0]){break a}if(!Gk(q[a+12>>2],r[e+131|0])){break a}q[a+16>>2]=2}e=1;i=q[a+4>>2];f=q[a+12>>2];if(!(q[i+136>>2]&q[f+76>>2])){e=q[i+140>>2]+ -1>>>0>1}d:{if(q[a+16>>2]!=1){break d}k=!r[f+72|0]&e;i=a+176|0;while(1){if(u[a+28>>2]<=b^1|q[a+24>>2]<=q[a+20>>2]){break d}if(k){f=Nl(q[a>>2],q[a+4>>2],q[a+8>>2],a);if(f){e=i;h=q[a+180>>2];if(h){q[f+4>>2]=h;e=h+8|0}q[e>>2]=f;q[a+180>>2]=f;q[a+184>>2]=q[a+184>>2]+1;Ik(q[a+12>>2]);Kj(f,d,u[a+28>>2],q[a+20>>2])}q[a+20>>2]=q[a+20>>2]+1}e=q[a+4>>2];h=n[q[q[e>>2]+8>>2]](e)|0;l=q[a+12>>2];e=q[a+4>>2];f=q[e+100>>2];j=q[e+96>>2];q[g+8>>2]=j;q[g+12>>2]=f;q[g+16>>2]=j;q[g+20>>2]=f;Is(g+24|0,h,l,d,c,e+44|0,g+8|0);m=x(n[q[q[c>>2]+16>>2]](c,u[g+28>>2],u[g+24>>2]));u[a+28>>2]=u[a+28>>2]+x(B(m,x(0)));if(q[a+16>>2]==1){continue}break}}ue=g+32|0}function Gh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;q[a>>2]=2480;c=q[a+12>>2];b=q[a+16>>2];if((c|0)!=(b|0)){while(1){f=d<<2;e=q[f+c>>2];if(e){n[q[q[e>>2]+4>>2]](e);q[q[a+12>>2]+f>>2]=0;b=q[a+16>>2];c=q[a+12>>2]}d=d+1|0;if(d>>>0>2>>>0){continue}break}}b=a+3272|0;c=q[b>>2];q[b>>2]=0;if(c){b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c)}Ch(a+2308|0);b=a+2192|0;c=q[b>>2];q[b>>2]=0;if(c){b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c)}b=a+2188|0;c=q[b>>2];q[b>>2]=0;if(c){b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c)}b=a+1620|0;c=q[b>>2];q[b>>2]=0;if(c){b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c)}Yh(a+1120|0);Yh(a+912|0);Yh(a+704|0);Yh(a+496|0);b=a+456|0;c=q[b>>2];q[b>>2]=0;if(c){b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c)}c=q[a+24>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+24>>2]=0}c=q[a+12>>2];if(c){q[a+16>>2]=c;_U(c)}return a|0}function dK(a,b,c,d){var e=0,g=0,h=0,i=0,k=0,l=0,m=0;i=ue-32|0;ue=i;g=d&2147483647;h=g;e=g+ -1065418752|0;g=c;k=g;if(g>>>0<0){e=e+1|0}m=k;l=h+ -1082064896|0;k=g;if(g>>>0<0){l=l+1|0}a:{if((e|0)==(l|0)&m>>>0>>0|e>>>0>>0){h=(d&33554431)<<7|c>>>25;g=0;l=g;k=c&33554431;if(!(!g&(k|0)==16777216?!(a|b):!g&k>>>0<16777216|g>>>0<0)){e=h+1073741825|0;break a}e=h+1073741824|0;if(k^16777216|a|(b|l)){break a}e=(e&1)+e|0;break a}if(!(!g&(h|0)==2147418112?!(a|b):(h|0)==2147418112&g>>>0<0|h>>>0<2147418112)){e=((d&33554431)<<7|c>>>25)&4194303|2143289344;break a}e=2139095040;if((h|0)==1082064895&g>>>0>4294967295|h>>>0>1082064895){break a}e=0;h=h>>>16|0;if(h>>>0<16145){break a}e=d&65535|65536;MJ(i+16|0,a,b,c,e,h+ -16129|0);PJ(i,a,b,g,e,16257-h|0);b=q[i+8>>2];e=(q[i+12>>2]&33554431)<<7|b>>>25;g=q[i+4>>2];h=g;a=0;k=a;l=q[i>>2]|((q[i+16>>2]|q[i+24>>2])!=0|(q[i+20>>2]|q[i+28>>2])!=0);b=b&33554431;if(!(!a&(b|0)==16777216?!(g|l):!a&b>>>0<16777216|a>>>0<0)){e=e+1|0;break a}if(b^16777216|l|(h|k)){break a}e=(e&1)+e|0}ue=i+32|0;return f(0,d&-2147483648|e),j()}function ci(a,b,c,d){var e=0,f=0,g=x(0),h=0,i=0,j=x(0);e=ue-16|0;ue=e;q[a+48>>2]=0;q[a+40>>2]=0;q[a+32>>2]=1065353216;q[a+36>>2]=0;Ne(e+12|0,255,255,255,255);q[a+52>>2]=q[e+12>>2];Ne(e+8|0,255,255,255,255);f=a+56|0;q[f>>2]=q[e+8>>2];q[a+68>>2]=0;p[a+64>>1]=0;q[a+60>>2]=1065353216;o[a+8|0]=r[b+2465|0];o[a+9|0]=r[b+2464|0];h=a,i=n[q[q[b>>2]+8>>2]](b)|0,q[h+4>>2]=i;u[a>>2]=u[d+8>>2]/x(60);q[a+20>>2]=q[b+3512>>2];q[a+16>>2]=q[b+3520>>2];q[a+12>>2]=q[b+3516>>2];d=q[b+4>>2];h=a,j=x(n[q[q[d>>2]+32>>2]](d)),u[h+24>>2]=j;h=a,i=q[q[n[q[q[c>>2]+84>>2]](c)>>2]+8>>2]==1,o[h+28|0]=i;c=n[q[q[b>>2]+8>>2]](b)|0;g=x(n[q[q[c>>2]+32>>2]](c));q[a+40>>2]=b+2476;q[a+36>>2]=b+2288;u[a+32>>2]=g;o[a+44|0]=r[b+3288|0];c=b+3300|0;d=q[c+4>>2];q[f>>2]=q[c>>2];q[f+4>>2]=d;c=q[b+3296>>2];q[a+48>>2]=q[b+3292>>2];q[a+52>>2]=c;o[a+64|0]=q[b+180>>2]==5;o[a+65|0]=q[b+3568>>2]==1;n[q[q[b>>2]+44>>2]](e,b);c=q[e>>2];q[e>>2]=0;b=q[a+68>>2];a:{if(!b){q[a+68>>2]=c;break a}n[q[q[b>>2]+8>>2]](b)|0;b=q[e>>2];q[a+68>>2]=c;if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[e>>2]=0}ue=e+16|0}function kR(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=a;while(1){a:{if(g>>>0>=c>>>0|e>>>0>=b>>>0){break a}f=r[e|0];if(f>>>0>1114111){break a}d=e+1|0;b:{if(f<<24>>24>=0){break b}if(f>>>0<194){break a}if(f>>>0<=223){if((b-e|0)<2){break a}d=r[e+1|0];if((d&192)!=128|(d&63|f<<6&1984)>>>0>1114111){break a}d=e+2|0;break b}c:{d:{e:{f:{g:{if(f>>>0<=239){if((b-e|0)<3){break a}h=r[e+2|0];d=r[e+1|0];if((f|0)==237){break g}if((f|0)==224){if((d&224)==160){break c}break a}if((d&192)!=128){break a}break c}if(c-g>>>0<2|f>>>0>244|(b-e|0)<4){break a}h=r[e+3|0];i=r[e+2|0];d=r[e+1|0];h:{j=f+ -240|0;if(j>>>0>4){break h}switch(j-1|0){case 0:case 1:case 2:break h;case 3:break e;default:break f}}if((d&192)!=128){break a}break d}if((d&224)==128){break c}break a}if((d+112&255)>>>0<48){break d}break a}if((d&240)!=128){break a}}if((i&192)!=128|(h&192)!=128|(h&63|(i<<6&4032|(f<<18&1835008|(d&63)<<12)))>>>0>1114111){break a}g=g+1|0;d=e+4|0;break b}if((h&192)!=128|(h&63|(f<<12&61440|(d&63)<<6))>>>0>1114111){break a}d=e+3|0}e=d;g=g+1|0;continue}break}return e-a|0}function mN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;a=ue-256|0;ue=a;q[a+248>>2]=37;q[a+252>>2]=0;j=iN(a+248|1,355370,q[c+4>>2]);q[a+204>>2]=a+208;i=fM();a:{if(j){k=q[c+8>>2];q[a+72>>2]=g;q[a+76>>2]=h;l=a- -64|0;q[l>>2]=e;q[l+4>>2]=f;q[a+48>>2]=k;i=aN(a+208|0,30,i,a+248|0,a+48|0);break a}q[a+80>>2]=e;q[a+84>>2]=f;q[a+88>>2]=g;q[a+92>>2]=h;i=aN(a+208|0,30,i,a+248|0,a+80|0)}q[a+128>>2]=857;k=rL(a+192|0,0,a+128|0);b:{if((i|0)>=30){i=fM();c:{if(j){j=q[c+8>>2];q[a+24>>2]=g;q[a+28>>2]=h;q[a+16>>2]=e;q[a+20>>2]=f;q[a>>2]=j;i=jN(a+204|0,i,a+248|0,a);break c}q[a+32>>2]=e;q[a+36>>2]=f;q[a+40>>2]=g;q[a+44>>2]=h;i=jN(a+204|0,i,a+248|0,a+32|0)}e=q[a+204>>2];if(!e){break b}sL(k,e)}f=q[a+204>>2];e=f+i|0;h=bN(f,e,c);q[a+128>>2]=857;f=rL(a+120|0,0,a+128|0);d:{if(q[a+204>>2]==(a+208|0)){i=a+128|0;g=a+208|0;break d}i=ZU(i<<1);if(!i){break b}sL(f,i);g=q[a+204>>2]}EH(a+104|0,c);kN(g,h,e,i,a+116|0,a+112|0,a+104|0);kL(a+104|0);b=Ut(b,i,q[a+116>>2],q[a+112>>2],c,d);wL(f);wL(k);ue=a+256|0;return b|0}TG();F()}function Im(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,v=0,w=0,y=0;f=ue+ -64|0;ue=f;q[f+60>>2]=b;g=q[a+468>>2];a:{if(!g){break a}a=a+464|0;while(1){b:{h=q[g+32>>2];if((h|0)<=(b|0)){if((h|0)>=(b|0)){break b}g=g+4|0}g=q[g>>2];if(g){continue}break a}break}a=kl(a,f+60|0);g=a+264|0;i=q[g+4>>2];b=f+40|0;h=b;q[h>>2]=q[g>>2];q[h+4>>2]=i;m=a+248|0;k=m;l=q[k+4>>2];h=f+24|0;q[h>>2]=q[k>>2];q[h+4>>2]=l;i=a+256|0;k=q[i+4>>2];n=q[i>>2];q[f+32>>2]=n;q[f+36>>2]=k;l=a+240|0;j=l;p=q[j+4>>2];s=q[j>>2];q[f+16>>2]=s;q[f+20>>2]=p;j=a+232|0;w=q[j>>2];y=q[j+4>>2];t=q[a+224>>2];v=q[a+228>>2];u[f+44>>2]=e;u[f+28>>2]=d;q[f+8>>2]=w;q[f+12>>2]=y;q[f>>2]=t;q[f+4>>2]=v;u[f+12>>2]=c;q[i>>2]=n;q[i+4>>2]=k;q[l>>2]=s;q[l+4>>2]=p;q[a+224>>2]=t;q[a+228>>2]=v;i=q[f+12>>2];q[j>>2]=q[f+8>>2];q[j+4>>2]=i;i=q[b>>2];b=q[b+4>>2];k=q[h+4>>2];h=q[h>>2];o[a+20|0]=1;q[m>>2]=h;q[m+4>>2]=k;q[g>>2]=i;q[g+4>>2]=b;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,f)}ue=f- -64|0}function BN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;a=ue-432|0;ue=a;q[a+424>>2]=37;q[a+428>>2]=0;j=iN(a+424|1,355370,q[c+4>>2]);q[a+380>>2]=a+384;i=fM();a:{if(j){k=q[c+8>>2];q[a+72>>2]=g;q[a+76>>2]=h;l=a- -64|0;q[l>>2]=e;q[l+4>>2]=f;q[a+48>>2]=k;i=aN(a+384|0,30,i,a+424|0,a+48|0);break a}q[a+80>>2]=e;q[a+84>>2]=f;q[a+88>>2]=g;q[a+92>>2]=h;i=aN(a+384|0,30,i,a+424|0,a+80|0)}q[a+128>>2]=857;k=rL(a+368|0,0,a+128|0);b:{if((i|0)>=30){i=fM();c:{if(j){j=q[c+8>>2];q[a+24>>2]=g;q[a+28>>2]=h;q[a+16>>2]=e;q[a+20>>2]=f;q[a>>2]=j;i=jN(a+380|0,i,a+424|0,a);break c}q[a+32>>2]=e;q[a+36>>2]=f;q[a+40>>2]=g;q[a+44>>2]=h;i=jN(a+380|0,i,a+424|0,a+32|0)}e=q[a+380>>2];if(!e){break b}sL(k,e)}f=q[a+380>>2];e=f+i|0;h=bN(f,e,c);q[a+128>>2]=857;f=rL(a+120|0,0,a+128|0);d:{if(q[a+380>>2]==(a+384|0)){i=a+128|0;g=a+384|0;break d}i=ZU(i<<3);if(!i){break b}sL(f,i);g=q[a+380>>2]}EH(a+104|0,c);AN(g,h,e,i,a+116|0,a+112|0,a+104|0);kL(a+104|0);b=tN(b,i,q[a+116>>2],q[a+112>>2],c,d);wL(f);wL(k);ue=a+432|0;return b|0}TG();F()}function Nl(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=n[q[q[b>>2]+16>>2]](b)|0;g=w(i,12)+a|0;m=g+144|0;j=q[m>>2];a:{b:{f=((i<<2)+a|0)+384|0;e=j+(q[f>>2]<<2)|0;k=g+148|0;g=q[k>>2];if((e|0)==(g|0)){break b}while(1){if(q[q[e>>2]+23056>>2]<16){break b}e=e+4|0;if((g|0)!=(e|0)){continue}break}q[f>>2]=g-j>>2;break a}q[f>>2]=e-j>>2;if((e|0)==(g|0)){break a}return nk(q[e>>2],a,b,c,d)}f=q[a+92>>2];if(!f){return 0}l=q[a+76>>2];h=a+88|0;e=q[h>>2];j=q[q[l+(e>>>8&16777212)>>2]+((e&1023)<<2)>>2];q[a+92>>2]=f+ -1;e=e+1|0;q[h>>2]=e;if(e>>>0>=2048){_U(q[l>>2]);q[a+76>>2]=q[a+76>>2]+4;q[a+88>>2]=q[a+88>>2]+ -1024;g=q[k>>2]}l=(w(i,12)+a|0)+152|0;e=q[l>>2];c:{if((e|0)!=(g|0)){q[g>>2]=j;q[k>>2]=q[k>>2]+4;break c}g=q[m>>2];i=e-g|0;h=i>>2;f=h+1|0;d:{if(f>>>0<1073741824){e=i>>1;f=h>>>0<536870911?e>>>0>>0?f:e:1073741823;e=0;e:{if(!f){break e}if(f>>>0>=1073741824){break d}e=_S(f<<2)}h=e+(h<<2)|0;q[h>>2]=j;f=e+(f<<2)|0;h=h+4|0;if((i|0)>=1){kV(e,g,i)}q[m>>2]=e;q[k>>2]=h;q[l>>2]=f;if(g){_U(g)}break c}kU();F()}Ue(4913);F()}return nk(j,a,b,c,d)}function oL(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0;i=ue-128|0;ue=i;q[i+120>>2]=b;k=qL(c,d);q[i+16>>2]=857;s=rL(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=ZU(k);if(!j){break a}sL(s,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(GH(a,i+120|0)?k:0)){if(KH(a,i+120|0)){q[f>>2]=q[f>>2]|2}break c}m=HH(a);if(!g){m=tL(e,m)}n=t+1|0;u=0;h=j;b=c;while(1)if((b|0)==(d|0)){t=n;if(!u){continue b}JH(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(r[h|0]!=2){break d}if((uL(b)|0)==(n|0)){break d}o[h|0]=0;l=l+ -1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(r[h|0]!=1){break e}p=o[vL(b,t)|0];v=m&255;if(!g){p=tL(e,p)}f:{if((p&255)==(v|0)){u=1;if((uL(b)|0)!=(n|0)){break e}o[h|0]=2;l=l+1|0;break f}o[h|0]=0}k=k+ -1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(r[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}q[f>>2]=q[f>>2]|4}wL(s);ue=i+128|0;return d}else{i:{if(!xL(b)){o[h|0]=1;break i}o[h|0]=2;l=l+1|0;k=k+ -1|0}h=h+1|0;b=b+12|0;continue}}TG();F()}function Jj(a,b){var c=x(0),d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0),z=x(0),A=x(0);c=u[b+24>>2];z=u[b+28>>2];d=u[b+20>>2];l=u[a+1232>>2];m=u[a+1248>>2];n=u[a+1264>>2];o=u[a+1236>>2];p=u[a+1252>>2];q=u[a+1268>>2];r=u[a+1240>>2];s=u[a+1256>>2];t=u[a+1272>>2];e=u[b+8>>2];A=u[b+12>>2];f=u[b>>2];g=u[b+4>>2];h=u[b+16>>2];v=u[a+1276>>2];i=u[b+40>>2];w=u[a+1260>>2];j=u[b+36>>2];y=u[a+1244>>2];k=u[b+32>>2];u[a+1340>>2]=x(v*i)+x(x(w*j)+x(u[b+44>>2]+x(y*k)));u[a+1336>>2]=x(t*i)+x(x(s*j)+x(x(r*k)+x(0)));u[a+1332>>2]=x(q*i)+x(x(p*j)+x(x(o*k)+x(0)));u[a+1328>>2]=x(n*i)+x(x(m*j)+x(x(l*k)+x(0)));u[a+1324>>2]=x(v*c)+x(x(w*d)+x(z+x(y*h)));u[a+1320>>2]=x(t*c)+x(x(s*d)+x(x(r*h)+x(0)));u[a+1316>>2]=x(q*c)+x(x(p*d)+x(x(o*h)+x(0)));u[a+1312>>2]=x(n*c)+x(x(m*d)+x(x(l*h)+x(0)));u[a+1308>>2]=x(x(A+x(f*y))+x(g*w))+x(e*v);u[a+1304>>2]=x(x(x(f*r)+x(0))+x(g*s))+x(e*t);u[a+1300>>2]=x(x(x(f*o)+x(0))+x(g*p))+x(e*q);u[a+1296>>2]=x(x(x(f*l)+x(0))+x(g*m))+x(e*n)}function Oq(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{f=q[a+8>>2];c=q[a+4>>2];if((f-c|0)/24>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+24|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}h=q[a>>2];g=(c-h|0)/24|0;d=g+b|0;b:{c:{d:{if(d>>>0<178956971){f=(f-h|0)/24|0;i=f<<1;d=f>>>0<89478485?i>>>0>>0?d:i:178956970;if(d){if(d>>>0>=178956971){break d}e=_S(w(d,24))}f=w(d,24)+e|0;e=w(g,24)+e|0;g=lV(e,0,w(b,24));d=g;while(1){d=d+24|0;b=b+ -1|0;if(b){continue}break}if((c|0)==(h|0)){break c}while(1){c=c+ -24|0;g=q[c+4>>2];e=e+ -24|0;b=e;q[b>>2]=q[c>>2];q[b+4>>2]=g;b=c+8|0;q[e+8>>2]=q[b>>2];q[c>>2]=0;q[c+4>>2]=0;q[b>>2]=0;q[e+20>>2]=q[c+20>>2];b=q[c+16>>2];q[e+12>>2]=q[c+12>>2];q[e+16>>2]=b;if((c|0)!=(h|0)){continue}break}q[a+8>>2]=f;b=q[a+4>>2];q[a+4>>2]=d;c=q[a>>2];q[a>>2]=e;if((b|0)==(c|0)){break b}while(1){a=b+ -24|0;if(o[b+ -13|0]<=-1){_U(q[a>>2])}b=a;if((b|0)!=(c|0)){continue}break}break b}kU();F()}Ue(6104);F()}q[a+8>>2]=f;q[a+4>>2]=d;q[a>>2]=g}if(!c){break a}_U(c)}}function ih(a,b){var c=0,d=0,e=0;c=(a|0)==(b|0);o[b+12|0]=c;a:{if(c){break a}while(1){d=q[b+8>>2];if(r[d+12|0]){break a}b:{c=q[d+8>>2];e=q[c>>2];if((e|0)==(d|0)){e=q[c+4>>2];if(!(!e|r[e+12|0])){break b}c:{if(q[d>>2]==(b|0)){b=d;break c}b=q[d+4>>2];e=q[b>>2];q[d+4>>2]=e;a=b;if(e){q[e+8>>2]=d;c=q[d+8>>2]}q[a+8>>2]=c;a=q[d+8>>2];q[(((d|0)!=q[a>>2])<<2)+a>>2]=b;q[b>>2]=d;q[d+8>>2]=b;c=q[b+8>>2]}o[b+12|0]=1;o[c+12|0]=0;a=q[c>>2];b=q[a+4>>2];q[c>>2]=b;if(b){q[b+8>>2]=c}q[a+8>>2]=q[c+8>>2];b=q[c+8>>2];q[((q[b>>2]!=(c|0))<<2)+b>>2]=a;q[a+4>>2]=c;q[c+8>>2]=a;return}if(!(r[e+12|0]|!e)){break b}d:{if(q[d>>2]!=(b|0)){b=d;break d}e=q[b+4>>2];q[d>>2]=e;a=b;if(e){q[e+8>>2]=d;c=q[d+8>>2]}q[a+8>>2]=c;a=q[d+8>>2];q[(((d|0)!=q[a>>2])<<2)+a>>2]=b;q[b+4>>2]=d;q[d+8>>2]=b;c=q[b+8>>2]}o[b+12|0]=1;o[c+12|0]=0;a=q[c+4>>2];b=q[a>>2];q[c+4>>2]=b;if(b){q[b+8>>2]=c}q[a+8>>2]=q[c+8>>2];b=q[c+8>>2];q[((q[b>>2]!=(c|0))<<2)+b>>2]=a;q[a>>2]=c;q[c+8>>2]=a;break a}b=e+12|0;o[d+12|0]=1;o[c+12|0]=(a|0)==(c|0);o[b|0]=1;b=c;if((a|0)!=(b|0)){continue}break}}}function qR(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a;while(1){a:{if(h>>>0>=c>>>0|d>>>0>=b>>>0){break a}e=o[d|0];f=e&255;b:{if((e|0)>=0){if(f>>>0>1114111){break a}d=d+1|0;break b}if(f>>>0<194){break a}if(f>>>0<=223){if((b-d|0)<2){break a}e=r[d+1|0];if((e&192)!=128|(e&63|f<<6&1984)>>>0>1114111){break a}d=d+2|0;break b}c:{d:{e:{f:{g:{if(f>>>0<=239){if((b-d|0)<3){break a}g=r[d+2|0];e=r[d+1|0];if((f|0)==237){break g}if((f|0)==224){if((e&224)==160){break c}break a}if((e&192)!=128){break a}break c}if((b-d|0)<4|f>>>0>244){break a}g=r[d+3|0];i=r[d+2|0];e=r[d+1|0];h:{j=f+ -240|0;if(j>>>0>4){break h}switch(j-1|0){case 0:case 1:case 2:break h;case 3:break e;default:break f}}if((e&192)!=128){break a}break d}if((e&224)==128){break c}break a}if((e+112&255)>>>0<48){break d}break a}if((e&240)!=128){break a}}if((i&192)!=128|(g&192)!=128|(g&63|(i<<6&4032|(f<<18&1835008|(e&63)<<12)))>>>0>1114111){break a}d=d+4|0;break b}if((g&192)!=128|(g&63|(f<<12&61440|(e&63)<<6))>>>0>1114111){break a}d=d+3|0}h=h+1|0;continue}break}return d-a|0}function ps(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=q[b>>2];e=q[c+4>>2]+(q[c>>2]-f<<3)|0;c=q[b+4>>2];g=e-c|0;a:{if((g|0)<=0){c=q[d+4>>2];break a}b:{if(!c){c=q[d+4>>2];break b}e=q[d+4>>2];i=32-e|0;k=32-c|0;h=(g|0)<(k|0)?g:k;j=i>>>0>>0?i:h;l=q[d>>2];f=q[f>>2]&(-1<>>k-h);q[l>>2]=q[l>>2]&(-1<>>i-j^-1)|(e>>>0>c>>>0?f<>>c-e|0);e=e+j|0;c=e&31;q[d+4>>2]=c;i=l+(e>>>3&536870908)|0;q[d>>2]=i;e=h-j|0;if((e|0)>=1){q[i>>2]=q[i>>2]&(-1>>>32-e^-1)|f>>>j+q[b+4>>2];q[d+4>>2]=e;c=e}g=g-h|0;f=q[b>>2]+4|0;q[b>>2]=f}j=-1<>2];f=q[f>>2];q[e>>2]=i&q[e>>2]|f<>2]=e+4;q[e+4>>2]=j&q[e+4>>2]|f>>>h;f=q[b>>2]+4|0;q[b>>2]=f;k=(g|0)>63;e=g+ -32|0;g=e;if(k){continue}break}}if((e|0)<1){break a}b=q[d>>2];g=(h|0)<(e|0)?h:e;i=q[b>>2]&(j&-1>>>h-g^-1);h=q[f>>2]&-1>>>32-e;q[b>>2]=i|h<>2]=c;f=b+(f>>>3&536870908)|0;q[d>>2]=f;b=e-g|0;if((b|0)<1){break a}q[f>>2]=q[f>>2]&(-1>>>32-b^-1)|h>>>g;q[d+4>>2]=b;c=b}b=q[d>>2];q[a+4>>2]=c;q[a>>2]=b}function qM(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0;i=ue-128|0;ue=i;q[i+120>>2]=b;k=qL(c,d);q[i+16>>2]=857;s=rL(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=ZU(k);if(!j){break a}sL(s,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(XH(a,i+120|0)?k:0)){if($H(a,i+120|0)){q[f>>2]=q[f>>2]|2}break c}m=YH(a);if(!g){m=HI(e,m)}n=t+1|0;u=0;h=j;b=c;while(1)if((b|0)==(d|0)){t=n;if(!u){continue b}_H(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(r[h|0]!=2){break d}if((uL(b)|0)==(n|0)){break d}o[h|0]=0;l=l+ -1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(r[h|0]!=1){break e}p=q[rM(b,t)>>2];if(!g){p=HI(e,p)}f:{if((m|0)==(p|0)){u=1;if((uL(b)|0)!=(n|0)){break e}o[h|0]=2;l=l+1|0;break f}o[h|0]=0}k=k+ -1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(r[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}q[f>>2]=q[f>>2]|4}wL(s);ue=i+128|0;return d}else{i:{if(!xL(b)){o[h|0]=1;break i}o[h|0]=2;l=l+1|0;k=k+ -1|0}h=h+1|0;b=b+12|0;continue}}TG();F()}function bs(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=q[b>>2];h=q[b+4>>2];e=(q[c+4>>2]+(q[c>>2]-i<<3)|0)-h|0;a:{if((e|0)<=0){g=q[d+4>>2];break a}b:{if(!h){g=q[d+4>>2];break b}j=q[d+4>>2];g=32-j|0;c=32-h|0;l=(e|0)<(c|0)?e:c;m=g>>>0>>0?g:l;f=q[d>>2];k=q[i>>2]&(-1<>>c-l);q[f>>2]=q[f>>2]&(-1<>>g-m^-1)|(j>>>0>h>>>0?k<>>h-j|0);c=j+m|0;g=c&31;q[d+4>>2]=g;f=f+(c>>>3&536870908)|0;q[d>>2]=f;c=l-m|0;if((c|0)>=1){q[f>>2]=q[f>>2]&(-1>>>32-c^-1)|k>>>h+m;q[d+4>>2]=c;g=c}e=e-l|0;i=i+4|0;q[b>>2]=i}j=-1<>2];l=q[c>>2];while(1){f=q[i>>2];q[c>>2]=l&m|f<>2]|f>>>h;q[c+4>>2]=l;i=i+4|0;c=c+4|0;k=(e|0)>63;f=e+ -32|0;e=f;if(k){continue}break}q[b>>2]=i;q[d>>2]=c}if((f|0)<1){break a}e=q[d>>2];k=(h|0)<(f|0)?h:f;c=q[i>>2]&-1>>>32-f;q[e>>2]=q[e>>2]&(j&-1>>>h-k^-1)|c<>2]=g;e=e+(b>>>3&536870908)|0;q[d>>2]=e;b=f-k|0;if((b|0)<1){break a}q[e>>2]=q[e>>2]&(-1>>>32-b^-1)|c>>>k;q[d+4>>2]=b;g=b}b=q[d>>2];q[a+4>>2]=g;q[a>>2]=b}function eu(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=ue-48|0;ue=c;q[c+44>>2]=0;p[c+40>>1]=0;_t(c+16|0,c+40|0,q[q[a>>2]>>2],b,q[q[a+12>>2]>>2],q[q[a+16>>2]>>2]);j=q[q[a+4>>2]>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;e=q[c+20>>2];d=o[c+27|0];f=d&255;g=(d|0)<0?e:f;h=g+1|0;if(h>>>0>=g>>>0){Se(c,h);e=q[c+20>>2];i=q[c>>2];f=r[c+27|0];d=f}d=d<<24>>24<0;kV(i,d?q[c+16>>2]:c+16|0,d?e:f);d=r[c+27|0];o[q[c>>2]+(d<<24>>24<0?q[c+20>>2]:d)|0]=0;if(b>>>0<4){d=(j+w(b,12)|0)+12|0;if((d|0)!=(c|0)){eq(d,q[c>>2],q[c+4>>2])}d=q[c>>2];if(d){q[c+4>>2]=d;_U(d)}f=q[q[a+4>>2]>>2];q[c+8>>2]=0;q[c>>2]=0;q[c+4>>2]=0;j=c+28|0;d=0;i=q[c+32>>2];a=o[c+39|0];e=a&255;g=(a|0)<0?i:e;h=g+1|0;if(h>>>0>=g>>>0){Se(c,h);i=q[c+32>>2];d=q[c>>2];e=r[c+39|0];a=e}a=a<<24>>24<0;kV(d,a?q[c+28>>2]:j,a?i:e);a=r[c+39|0];o[q[c>>2]+(a<<24>>24<0?q[c+32>>2]:a)|0]=0;a=(f+w(b,12)|0)+60|0;if((a|0)!=(c|0)){eq(a,q[c>>2],q[c+4>>2])}a=q[c>>2];if(a){q[c+4>>2]=a;_U(a)}if(o[c+39|0]<=-1){_U(q[c+28>>2])}if(o[c+27|0]<=-1){_U(q[c+16>>2])}ue=c+48|0;return}kq(26720);F()}function UQ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;k=ue-16|0;ue=k;i=c;while(1){a:{if((d|0)==(i|0)){i=d;break a}if(!q[i>>2]){break a}i=i+4|0;continue}break}q[h>>2]=f;q[e>>2]=c;l=1;while(1){b:{c:{if(!((f|0)==(g|0)|(c|0)==(d|0))){j=q[b+4>>2];q[k+8>>2]=q[b>>2];q[k+12>>2]=j;d:{e:{j=VQ(f,e,i-c>>2,g-f|0,q[a+8>>2]);m=j+1|0;f:{if(m>>>0<=1){if(!(m-1)){break c}q[h>>2]=f;while(1){g:{if(q[e>>2]==(c|0)){break g}b=WQ(f,q[c>>2],q[a+8>>2]);if((b|0)==-1){break g}f=b+q[h>>2]|0;q[h>>2]=f;c=c+4|0;continue}break}q[e>>2]=c;break f}f=j+q[h>>2]|0;q[h>>2]=f;if((f|0)==(g|0)){break d}if((d|0)==(i|0)){c=q[e>>2];i=d;continue}i=WQ(k+4|0,0,q[a+8>>2]);if((i|0)!=-1){break e}}l=2;break c}f=k+4|0;if(i>>>0>g-q[h>>2]>>>0){break c}while(1){if(i){c=r[f|0];j=q[h>>2];q[h>>2]=j+1;o[j|0]=c;i=i+ -1|0;f=f+1|0;continue}break}c=q[e>>2]+4|0;q[e>>2]=c;i=c;while(1){if((d|0)==(i|0)){i=d;break b}if(!q[i>>2]){break b}i=i+4|0;continue}}c=q[e>>2]}l=(c|0)!=(d|0)}ue=k+16|0;return l|0}f=q[h>>2];continue}}function Io(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-48|0;ue=d;e=q[a+4>>2];a:{if(!e){break a}c=q[b>>2];if(!c){break a}b:{h=r[c+19|0];f=h<<24>>24;c:{if((f|0)<=-1){g=q[c+12>>2];if(g){break c}break b}if(!f){break b}g=q[c+12>>2]}c=c+8|0;e=q[c>>2];f=(f|0)<0;q[d+36>>2]=f?g:h;q[d+32>>2]=f?e:c;e=a+8|0;c=Eo(e,d+32|0);if(!c){break a}f=q[c+20>>2];q[c+20>>2]=f+ -1;if((f|0)>1){break a}Jo(d+16|0,e,c);c=q[d+16>>2];q[d+16>>2]=0;d:{if(!c){break d}e:{if(!r[d+24|0]){break e}e=q[c+16>>2];if(!e){break e}n[q[q[e>>2]+8>>2]](e)|0;q[c+16>>2]=0}xt(d+32|0);n[q[d+40>>2]](d+32|0,c,24);c=q[q[d+44>>2]+4>>2];if(!c){break d}n[c](q[d+32>>2])}a=q[a+4>>2];q[d+8>>2]=0;c=q[b>>2];f:{if(!c){break f}n[q[q[c>>2]>>2]](c)|0;c=q[d+8>>2];if(!c){break f}n[q[q[c>>2]+8>>2]](c)|0;q[d+8>>2]=0}q[d+8>>2]=q[b>>2];n[q[q[a>>2]+28>>2]](a,d+8|0);a=q[d+8>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[d+8>>2]=0;break a}q[d>>2]=0;n[q[q[c>>2]>>2]](c)|0;q[d>>2]=q[b>>2];n[q[q[e>>2]+28>>2]](e,d);a=q[d>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0}ue=d+48|0}function br(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=q[a+8>>2];c=q[a+4>>2];a:{if((e-c|0)/36>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+32>>2]=0;q[c+24>>2]=0;q[c+28>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+36|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}g=q[a>>2];h=(c-g|0)/36|0;d=h+b|0;b:{c:{if(d>>>0<119304648){c=0;e=(e-g|0)/36|0;g=e<<1;d=e>>>0<59652323?g>>>0>>0?d:g:119304647;d:{if(!d){break d}wt(f);c=n[q[f+8>>2]](f,w(d,36))|0;e=q[q[f+12>>2]+4>>2];if(!e){break d}n[e](q[f>>2])}g=w(d,36)+c|0;e=w(h,36)+c|0;c=lV(e,0,w(b,36));while(1){c=c+36|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];d=q[a+4>>2];if((b|0)==(d|0)){break c}while(1){d=d+ -36|0;e=zr(e+ -36|0,d);if((b|0)!=(d|0)){continue}break}b=q[a+4>>2];d=q[a>>2];break b}kU();F()}d=b}q[a+4>>2]=c;q[a>>2]=e;c=q[a+8>>2];q[a+8>>2]=g;if((b|0)!=(d|0)){while(1){b=ir(b+ -36|0);if((d|0)!=(b|0)){continue}break}}if(!d){break a}xt(f);n[q[f+8>>2]](f,d,c-d|0);a=q[q[f+12>>2]+4>>2];if(!a){break a}n[a](q[f>>2])}ue=f+16|0}function ro(a,b,c,d,f){var g=0,h=x(0);o[a+4|0]=0;o[a+5|0]=0;o[a+6|0]=0;o[a+7|0]=0;o[a+8|0]=0;o[a+9|0]=0;o[a+10|0]=0;o[a+11|0]=0;o[a+12|0]=0;o[a+13|0]=0;o[a+14|0]=0;o[a+15|0]=0;o[a+16|0]=0;o[a+17|0]=0;o[a+18|0]=0;o[a+19|0]=0;o[a+24|0]=0;o[a+25|0]=0;o[a+26|0]=0;o[a+27|0]=0;o[a+28|0]=0;o[a+29|0]=0;o[a+30|0]=0;o[a+31|0]=0;o[a+32|0]=0;o[a+33|0]=0;o[a+34|0]=0;o[a+35|0]=0;o[a+36|0]=0;o[a+37|0]=0;o[a+38|0]=0;o[a+39|0]=0;o[a+60|0]=0;o[a+61|0]=0;o[a+62|0]=0;o[a+63|0]=0;o[a+52|0]=0;o[a+53|0]=0;o[a+54|0]=0;o[a+55|0]=0;o[a+44|0]=-1082130432;o[a+45|0]=12550144;o[a+46|0]=49024;o[a+47|0]=191;o[a+48|0]=0;o[a+49|0]=0;o[a+50|0]=0;o[a+51|0]=0;b=x(x(1)/CG(x(b*x(.5))));g=(k(b),e(0));o[a+20|0]=g;o[a+21|0]=g>>>8;o[a+22|0]=g>>>16;o[a+23|0]=g>>>24;h=x(f-d);g=(k(x(x(x(d*x(-2))*f)/h)),e(0));o[a+56|0]=g;o[a+57|0]=g>>>8;o[a+58|0]=g>>>16;o[a+59|0]=g>>>24;g=(k(x(x(-x(d+f))/h)),e(0));o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24;g=(k(x(b/c)),e(0));o[a|0]=g;o[a+1|0]=g>>>8;o[a+2|0]=g>>>16;o[a+3|0]=g>>>24}function sh(a,b,c){var d=0,e=0,f=0;d=q[b>>2];d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[a>>2]=d;e=q[b>>2];q[b>>2]=e+4;f=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);e=e+8|0;q[b>>2]=e;a:{if(d>>>0>3){break a}b:{switch(d-1|0){default:kV(a+4|0,e,f);break a;case 0:kV(a+12|0,e,f);break a;case 1:wh(a+60|0,e,f,c);break a;case 2:break b}}d=_S(48);q[d>>2]=0;q[d+4>>2]=0;q[d+40>>2]=0;q[d+44>>2]=0;q[d+32>>2]=0;q[d+36>>2]=0;q[d+24>>2]=0;q[d+28>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;gj(d+4|0,x(0));e=q[a+156>>2];q[a+156>>2]=d;if(e){d=q[e+24>>2];if(d){q[e+28>>2]=d;_U(d)}_U(e);d=q[a+156>>2]}mj(d,q[b>>2],c)}d=q[b>>2]+f|0;q[b>>2]=d;q[a+160>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);d=q[b>>2];q[b>>2]=d+4;q[a+164>>2]=r[d+4|0]|r[d+5|0]<<8|(r[d+6|0]<<16|r[d+7|0]<<24);e=q[b>>2];d=e+4|0;q[b>>2]=d;if((c|0)>=1606){q[a+168>>2]=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=q[b>>2]+4;return}c=r[e+4|0]|r[e+5|0]<<8|(r[e+6|0]<<16|r[e+7|0]<<24);q[b>>2]=e+8;u[a+168>>2]=c|0}function Mx(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=x(0),k=x(0);h=u[c>>2];j=u[b>>2];a:{if(!(j>u[a>>2])){if(!(h>j)){break a}h=u[b>>2];e=q[b>>2];f=q[b+4>>2];g=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=g;q[c>>2]=e;q[c+4>>2]=f;if(!(u[b>>2]>u[a>>2])){e=1;break a}e=q[a>>2];f=q[a+4>>2];g=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=g;q[b>>2]=e;q[b+4>>2]=f;h=u[c>>2];e=2;break a}e=1;k=u[a>>2];f=q[a>>2];g=q[a+4>>2];if(!!(h>j)){i=q[c+4>>2];q[a>>2]=q[c>>2];q[a+4>>2]=i;q[c>>2]=f;q[c+4>>2]=g;h=k;break a}i=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=i;q[b>>2]=f;q[b+4>>2]=g;h=u[c>>2];if(!(h>k)){break a}e=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=e;q[c>>2]=f;q[c+4>>2]=g;e=2;h=k}if(!!(u[d>>2]>h)){f=q[c>>2];g=q[c+4>>2];i=q[d+4>>2];q[c>>2]=q[d>>2];q[c+4>>2]=i;q[d>>2]=f;q[d+4>>2]=g;if(!(u[c>>2]>u[b>>2])){return e+1|0}d=q[b>>2];f=q[b+4>>2];g=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=g;q[c>>2]=d;q[c+4>>2]=f;if(!(u[b>>2]>u[a>>2])){return e+2|0}c=q[a>>2];d=q[a+4>>2];f=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=f;q[b>>2]=c;q[b+4>>2]=d;e=e+3|0}return e}function Kx(a,b,c,d){var e=0,f=0,g=0,h=x(0),i=0,j=x(0),k=x(0);h=u[c>>2];j=u[b>>2];a:{if(!(j>2])){if(!(h>2];e=q[b>>2];f=q[b+4>>2];g=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=g;q[c>>2]=e;q[c+4>>2]=f;if(!(u[b>>2]>2])){e=1;break a}e=q[a>>2];f=q[a+4>>2];g=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=g;q[b>>2]=e;q[b+4>>2]=f;h=u[c>>2];e=2;break a}e=1;k=u[a>>2];f=q[a>>2];g=q[a+4>>2];if(!!(h>2];q[a>>2]=q[c>>2];q[a+4>>2]=i;q[c>>2]=f;q[c+4>>2]=g;h=k;break a}i=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=i;q[b>>2]=f;q[b+4>>2]=g;h=u[c>>2];if(!(h>2];q[b>>2]=q[c>>2];q[b+4>>2]=e;q[c>>2]=f;q[c+4>>2]=g;e=2;h=k}if(!!(u[d>>2]>2];g=q[c+4>>2];i=q[d+4>>2];q[c>>2]=q[d>>2];q[c+4>>2]=i;q[d>>2]=f;q[d+4>>2]=g;if(!(u[c>>2]>2])){return e+1|0}d=q[b>>2];f=q[b+4>>2];g=q[c+4>>2];q[b>>2]=q[c>>2];q[b+4>>2]=g;q[c>>2]=d;q[c+4>>2]=f;if(!(u[b>>2]>2])){return e+2|0}c=q[a>>2];d=q[a+4>>2];f=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=f;q[b>>2]=c;q[b+4>>2]=d;e=e+3|0}return e}function sr(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0;g=ue-80|0;ue=g;u[g+76>>2]=f;h=q[b+28>>2];b=q[b+24>>2];d=w((d|0)%((h-b|0)/36|0)|0,36)+b|0;b=q[d>>2];h=q[d+4>>2]-b|0;a:{if(!h){yp(a);yp(a+12|0);yp(a+24|0);yp(a+36|0);break a}yp(g+24|0);d=yp(g+36|0);i=g+48|0;j=yp(i);k=yp(g+60|0);b=b+w((c|0)%((h|0)/60|0)|0,60)|0;Dp(g+8|0,b,g+76|0);c=g+32|0;q[c>>2]=q[g+16>>2];h=q[g+12>>2];q[g+24>>2]=q[g+8>>2];q[g+28>>2]=h;q[d+8>>2]=q[b+20>>2];h=q[b+16>>2];q[d>>2]=q[b+12>>2];q[d+4>>2]=h;q[j+8>>2]=q[b+32>>2];d=q[b+28>>2];q[j>>2]=q[b+24>>2];q[j+4>>2]=d;q[k+8>>2]=q[b+44>>2];d=q[b+40>>2];q[k>>2]=q[b+36>>2];q[k+4>>2]=d;if(!e){b=g+44|0;u[b>>2]=-u[b>>2];b=g+56|0;u[b>>2]=-u[b>>2];b=g+68|0;u[b>>2]=-u[b>>2];u[g+32>>2]=-u[g+32>>2]}b=q[g+28>>2];q[a>>2]=q[g+24>>2];q[a+4>>2]=b;b=g- -64|0;d=q[b+4>>2];q[a+40>>2]=q[b>>2];q[a+44>>2]=d;b=q[g+60>>2];q[a+32>>2]=q[g+56>>2];q[a+36>>2]=b;b=q[i+4>>2];q[a+24>>2]=q[i>>2];q[a+28>>2]=b;b=q[g+44>>2];q[a+16>>2]=q[g+40>>2];q[a+20>>2]=b;b=q[c+4>>2];q[a+8>>2]=q[c>>2];q[a+12>>2]=b}ue=g+80|0}function Mr(a){var b=0,c=0,d=0;c=ue-16|0;ue=c;b=q[a+72>>2];a:{if(!b){break a}q[a+76>>2]=b;d=q[a+80>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a+60>>2];b:{if(!b){break b}d=q[a+68>>2];xt(c);n[q[c+8>>2]](c,b,d<<2);b=q[q[c+12>>2]+4>>2];if(!b){break b}n[b](q[c>>2])}b=q[a+48>>2];c:{if(!b){break c}q[a+52>>2]=b;d=q[a+56>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break c}n[b](q[c>>2])}b=q[a+36>>2];d:{if(!b){break d}q[a+40>>2]=b;d=q[a+44>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break d}n[b](q[c>>2])}b=q[a+24>>2];e:{if(!b){break e}q[a+28>>2]=b;d=q[a+32>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break e}n[b](q[c>>2])}b=q[a+12>>2];f:{if(!b){break f}q[a+16>>2]=b;d=q[a+20>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break f}n[b](q[c>>2])}b=q[a>>2];g:{if(!b){break g}q[a+4>>2]=b;a=q[a+8>>2];zt(c);n[q[c+8>>2]](c,b,a-b|0);a=q[q[c+12>>2]+4>>2];if(!a){break g}n[a](q[c>>2])}ue=c+16|0}function Bf(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=ue-16|0;ue=f;g=q[a+8>>2];c=q[a+4>>2];a:{if(g-c>>2>>>0>=b>>>0){d=a;a=b<<2;i=d,j=lV(c,0,a)+a|0,q[i+4>>2]=j;break a}e=c;c=q[a>>2];h=e-c>>2;e=h+b|0;b:{c:{if(e>>>0<1073741824){c=g-c|0;g=c>>1;g=c>>2>>>0<536870911?g>>>0>>0?e:g:1073741823;d:{if(!g){break d}wt(f);d=n[q[f+8>>2]](f,g<<2)|0;c=q[q[f+12>>2]+4>>2];if(!c){break d}n[c](q[f>>2])}c=(h<<2)+d|0;lV(c,0,b<<2);h=(e<<2)+d|0;g=(g<<2)+d|0;b=q[a>>2];d=q[a+4>>2];if((b|0)==(d|0)){break c}while(1){c=c+ -4|0;q[c>>2]=0;d=d+ -4|0;e=q[d>>2];e:{if(!e){break e}n[q[q[e>>2]>>2]](e)|0;e=q[c>>2];if(!e){break e}n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=q[d>>2];if((b|0)!=(d|0)){continue}break}b=q[a+4>>2];d=q[a>>2];break b}kU();F()}d=b}q[a+4>>2]=h;q[a>>2]=c;c=q[a+8>>2];q[a+8>>2]=g;if((b|0)!=(d|0)){while(1){b=b+ -4|0;a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}if((b|0)!=(d|0)){continue}break}}if(!d){break a}xt(f);n[q[f+8>>2]](f,d,c-d|0);a=q[q[f+12>>2]+4>>2];if(!a){break a}n[a](q[f>>2])}ue=f+16|0}function MU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ue+ -64|0;ue=e;a:{b:{c:{if(CU(b,362848,0)){q[c>>2]=0;break c}if(LU(a,b)){f=1;a=q[c>>2];if(!a){break a}q[c>>2]=q[a>>2];break a}if(!b){break b}b=FU(b,362628);if(!b){break a}d=q[c>>2];if(d){q[c>>2]=q[d>>2]}g=q[b+8>>2];d=q[a+8>>2];if(g&(d^-1)&7|(g^-1)&d&96){break a}f=1;if(CU(q[a+12>>2],q[b+12>>2],0)){break a}if(CU(q[a+12>>2],362836,0)){a=q[b+12>>2];if(!a){break a}f=!FU(a,362680);break a}d=q[a+12>>2];if(!d){break b}f=0;d=FU(d,362628);if(d){if(!(o[a+8|0]&1)){break a}f=NU(d,q[b+12>>2]);break a}d=q[a+12>>2];if(!d){break a}d=FU(d,362740);if(d){if(!(o[a+8|0]&1)){break a}f=OU(d,q[b+12>>2]);break a}a=q[a+12>>2];if(!a){break a}d=FU(a,362532);if(!d){break a}a=q[b+12>>2];if(!a){break a}a=FU(a,362532);if(!a){break a}q[e+20>>2]=-1;q[e+16>>2]=d;q[e+12>>2]=0;q[e+8>>2]=a;lV(e+24|0,0,39);q[e+56>>2]=1;n[q[q[a>>2]+28>>2]](a,e+8|0,q[c>>2],1);if(q[e+32>>2]!=1){break a}if(!q[c>>2]){break c}q[c>>2]=q[e+24>>2]}f=1;break a}f=0}ue=e- -64|0;return f|0}function XQ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=ue-16|0;ue=j;i=c;while(1){a:{if((d|0)==(i|0)){i=d;break a}if(!r[i|0]){break a}i=i+1|0;continue}break}q[h>>2]=f;q[e>>2]=c;while(1){b:{c:{d:{if((f|0)==(g|0)|(c|0)==(d|0)){break d}k=q[b+4>>2];q[j+8>>2]=q[b>>2];q[j+12>>2]=k;e:{f:{g:{k=YQ(f,e,i-c|0,g-f>>2,b,q[a+8>>2]);h:{if((k|0)==-1){while(1){i:{q[h>>2]=f;if(q[e>>2]==(c|0)){break i}j:{f=ZQ(f,c,i-c|0,j+8|0,q[a+8>>2]);b=f+2|0;if(b>>>0>2){break j}f=1;k:{switch(b-1|0){case 1:break j;case 0:break k;default:break f}}q[e>>2]=c;break h}c=c+f|0;f=q[h>>2]+4|0;continue}break}q[e>>2]=c;break d}f=q[h>>2]+(k<<2)|0;q[h>>2]=f;if((f|0)==(g|0)){break e}c=q[e>>2];if((d|0)==(i|0)){i=d;continue}if(!ZQ(f,c,1,b,q[a+8>>2])){break g}}a=2;break c}q[h>>2]=q[h>>2]+4;c=q[e>>2]+1|0;q[e>>2]=c;i=c;while(1){if((d|0)==(i|0)){i=d;break b}if(!r[i|0]){break b}i=i+1|0;continue}}q[e>>2]=c;a=1;break c}c=q[e>>2]}a=(c|0)!=(d|0)}ue=j+16|0;return a|0}f=q[h>>2];continue}}function il(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;d=ue;i=d;f=d-320&-32;ue=f;e=q[a+28>>2];q[f+316>>2]=e;g=a;d=e;if((d|0)==2147483647){q[a+28>>2]=0;d=0}q[g+28>>2]=d+1;b=jl(f,b,c);q[b+164>>2]=e;a=kl(a+464|0,f+316|0);c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a>>2]=0}q[a>>2]=q[b>>2];c=r[b+21|0]|r[b+22|0]<<8|(r[b+23|0]<<16|r[b+24|0]<<24);d=r[b+17|0]|r[b+18|0]<<8|(r[b+19|0]<<16|r[b+20|0]<<24);o[a+17|0]=d;o[a+18|0]=d>>>8;o[a+19|0]=d>>>16;o[a+20|0]=d>>>24;o[a+21|0]=c;o[a+22|0]=c>>>8;o[a+23|0]=c>>>16;o[a+24|0]=c>>>24;c=q[b+16>>2];q[a+12>>2]=q[b+12>>2];q[a+16>>2]=c;c=q[b+8>>2];q[a+4>>2]=q[b+4>>2];q[a+8>>2]=c;d=q[b+36>>2];e=q[b+32>>2];c=q[b+28>>2];g=q[b+40>>2];h=q[g>>2];if(h){c=n[h](c)|0}q[a+36>>2]=d;d=q[a+28>>2];q[a+28>>2]=c;q[a+32>>2]=e;c=a+40|0;e=q[c>>2];q[c>>2]=g;c=q[e+4>>2];if(c){n[c](d)}kV(a+44|0,b+44|0,228);c=q[f+316>>2];a=q[q[b+40>>2]+4>>2];if(a){n[a](q[b+28>>2])}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}ue=i;return c}function IM(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=ue-16|0;ue=m;q[m+12>>2]=a;a:{b:{if((a|0)==(f|0)){if(!r[b|0]){break b}a=0;o[b|0]=0;b=q[e>>2];q[e>>2]=b+1;o[b|0]=46;if(!uL(h)){break a}b=q[j>>2];if((b-i|0)>159){break a}c=q[k>>2];q[j>>2]=b+4;q[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!uL(h)){break c}if(!r[b|0]){break b}a=0;b=q[j>>2];if((b-i|0)>159){break a}a=q[k>>2];q[j>>2]=b+4;q[b>>2]=a;a=0;q[k>>2]=0;break a}a=-1;f=PM(l,l+128|0,m+12|0)-l|0;if((f|0)>124){break a}g=r[(f>>2)+355328|0];a=zW(f+ -88|0,30);d:{if(a>>>0<=3){e:{switch(a-2|0){case 0:case 1:b=q[e>>2];if((b|0)!=(d|0)){a=-1;if((r[b+ -1|0]&95)!=(r[c|0]&127)){break a}}q[e>>2]=b+1;o[b|0]=g;a=0;break a;default:break e}}o[c|0]=80;break d}a=o[c|0];if((a|0)!=(g&95)){break d}o[c|0]=a|128;if(!r[b|0]){break d}o[b|0]=0;if(!uL(h)){break d}a=q[j>>2];if((a-i|0)>159){break d}b=q[k>>2];q[j>>2]=a+4;q[a>>2]=b}a=q[e>>2];q[e>>2]=a+1;o[a|0]=g;a=0;if((f|0)>84){break a}q[k>>2]=q[k>>2]+1;break a}a=-1}ue=m+16|0;return a}function Iw(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=ue-16|0;ue=f;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;c=q[b+4>>2]-q[b>>2]|0;d=(c|0)/28|0;a:{b:{c:{if(!c){break c}if(d>>>0>=153391690){break b}wt(f);c=n[q[f+8>>2]](f,c)|0;e=q[q[f+12>>2]+4>>2];if(e){n[e](q[f>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=w(d,28)+c;d=q[b>>2];h=q[b+4>>2];if((d|0)==(h|0)){break c}while(1){b=q[d>>2];q[c+4>>2]=0;q[c+8>>2]=0;q[c>>2]=b;g=c+12|0;q[g>>2]=0;b=c+4|0;d:{if(o[d+15|0]>=0){e=d+4|0;g=q[e+4>>2];q[b>>2]=q[e>>2];q[b+4>>2]=g;q[b+8>>2]=q[e+8>>2];break d}e=q[d+8>>2];if(e>>>0>=4294967280){break a}k=q[d+4>>2];e:{f:{if(e>>>0>=11){wt(f);i=e+16&-16;b=n[q[f+8>>2]](f,i)|0;j=q[q[f+12>>2]+4>>2];if(j){n[j](q[f>>2])}q[c+4>>2]=b;q[g>>2]=i|-2147483648;q[c+8>>2]=e;break f}o[b+11|0]=e;if(!e){break e}}kV(b,k,e)}o[b+e|0]=0}b=q[d+20>>2];q[c+16>>2]=q[d+16>>2];q[c+20>>2]=b;q[c+24>>2]=q[d+24>>2];c=q[a+4>>2]+28|0;q[a+4>>2]=c;d=d+28|0;if((h|0)!=(d|0)){continue}break}}ue=f+16|0;return a}kU();F()}kT();F()}function Wy(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=q[a+188>>2];h=q[a+184>>2];g=e-h>>2;if(g>>>0>d>>>0){f=d;while(1){e=Hu(q[a+80>>2])+(f<<3)|0;q[e+80>>2]=0;q[e+84>>2]=0;f=f+1|0;e=q[a+188>>2];h=q[a+184>>2];g=e-h>>2;if(f>>>0>>0){continue}break}}a:{if(g>>>0>>0){Xy(a+184|0,d-g|0);break a}if(g>>>0<=d>>>0){break a}f=(d<<2)+h|0;if((f|0)!=(e|0)){while(1){e=e+ -4|0;g=q[e>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[e>>2]=0}if((e|0)!=(f|0)){continue}break}}q[a+188>>2]=f}if((d|0)>=1){f=0;while(1){e=0;h=f<<2;g=h+c|0;i=q[g>>2];if(i){e=q[i+40>>2]}W(f+33984|0);Ca(3553,e|0);b:{if(q[g>>2]){i=Hu(q[a+80>>2])+(f<<3)|0;q[i+80>>2]=e;q[i+84>>2]=0;e=h+q[a+184>>2]|0;h=q[g>>2];if(h){n[q[q[h>>2]>>2]](h)|0}h=q[e>>2];if(h){n[q[q[h>>2]+8>>2]](h)|0;q[e>>2]=0}q[e>>2]=q[g>>2];break b}e=Hu(q[a+80>>2])+(f<<3)|0;q[e+80>>2]=0;q[e+84>>2]=0;g=h+q[a+184>>2]|0;e=q[g>>2];if(!e){break b}n[q[q[e>>2]+8>>2]](e)|0;q[g>>2]=0}if(FB(b,f)){bw(EB(b,f),f)}f=f+1|0;if((f|0)!=(d|0)){continue}break}}W(33984)}function so(a,b,c,d,f){var g=0;o[a+4|0]=0;o[a+5|0]=0;o[a+6|0]=0;o[a+7|0]=0;o[a+8|0]=0;o[a+9|0]=0;o[a+10|0]=0;o[a+11|0]=0;o[a+32|0]=0;o[a+33|0]=0;o[a+34|0]=0;o[a+35|0]=0;o[a+36|0]=0;o[a+37|0]=0;o[a+38|0]=0;o[a+39|0]=0;g=(k(x(x(2)/b)),e(0));o[a|0]=g;o[a+1|0]=g>>>8;o[a+2|0]=g>>>16;o[a+3|0]=g>>>24;o[a+12|0]=0;o[a+13|0]=0;o[a+14|0]=0;o[a+15|0]=0;o[a+16|0]=0;o[a+17|0]=0;o[a+18|0]=0;o[a+19|0]=0;o[a+24|0]=0;o[a+25|0]=0;o[a+26|0]=0;o[a+27|0]=0;o[a+28|0]=0;o[a+29|0]=0;o[a+30|0]=0;o[a+31|0]=0;g=(k(x(x(2)/c)),e(0));o[a+20|0]=g;o[a+21|0]=g>>>8;o[a+22|0]=g>>>16;o[a+23|0]=g>>>24;o[a+60|0]=1065353216;o[a+61|0]=4161536;o[a+62|0]=16256;o[a+63|0]=63;o[a+52|0]=0;o[a+53|0]=0;o[a+54|0]=0;o[a+55|0]=0;o[a+44|0]=0;o[a+45|0]=0;o[a+46|0]=0;o[a+47|0]=0;o[a+48|0]=0;o[a+49|0]=0;o[a+50|0]=0;o[a+51|0]=0;b=x(d-f);g=(k(x(d/b)),e(0));o[a+56|0]=g;o[a+57|0]=g>>>8;o[a+58|0]=g>>>16;o[a+59|0]=g>>>24;g=(k(x(x(1)/b)),e(0));o[a+40|0]=g;o[a+41|0]=g>>>8;o[a+42|0]=g>>>16;o[a+43|0]=g>>>24}function oo(a){var b=0;o[a+36|0]=0;o[a+37|0]=0;o[a+38|0]=0;o[a+39|0]=0;o[a+40|0]=0;o[a+41|0]=0;o[a+42|0]=0;o[a+43|0]=0;b=a+20|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;o[b+4|0]=0;o[b+5|0]=0;o[b+6|0]=0;o[b+7|0]=0;o[a+4|0]=0;o[a+5|0]=0;o[a+6|0]=0;o[a+7|0]=0;o[a+8|0]=0;o[a+9|0]=0;o[a+10|0]=0;o[a+11|0]=0;o[a|0]=1065353216;o[a+1|0]=4161536;o[a+2|0]=16256;o[a+3|0]=63;o[a+52|0]=0;o[a+53|0]=0;o[a+54|0]=0;o[a+55|0]=0;o[a+56|0]=0;o[a+57|0]=0;o[a+58|0]=0;o[a+59|0]=0;o[a+44|0]=0;o[a+45|0]=0;o[a+46|0]=0;o[a+47|0]=0;o[a+48|0]=0;o[a+49|0]=0;o[a+50|0]=0;o[a+51|0]=0;o[a+28|0]=0;o[a+29|0]=0;o[a+30|0]=0;o[a+31|0]=0;o[a+32|0]=0;o[a+33|0]=0;o[a+34|0]=0;o[a+35|0]=0;o[a+12|0]=0;o[a+13|0]=0;o[a+14|0]=0;o[a+15|0]=0;o[a+16|0]=0;o[a+17|0]=0;o[a+18|0]=0;o[a+19|0]=0;o[a+60|0]=1065353216;o[a+61|0]=4161536;o[a+62|0]=16256;o[a+63|0]=63;o[a+40|0]=1065353216;o[a+41|0]=4161536;o[a+42|0]=16256;o[a+43|0]=63;o[b|0]=1065353216;o[b+1|0]=4161536;o[b+2|0]=16256;o[b+3|0]=63;return a}function Rl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;f=q[a+8>>2];c=q[a+4>>2];a:{if((f-c|0)/148>>>0>=b>>>0){while(1){Lp(c);c=q[a+4>>2]+148|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}d=c;c=q[a>>2];g=(d-c|0)/148|0;d=g+b|0;b:{c:{if(d>>>0<29020050){c=(f-c|0)/148|0;f=c<<1;d=c>>>0<14510024?f>>>0>>0?d:f:29020049;d:{if(!d){c=0;break d}wt(e);c=n[q[e+8>>2]](e,w(d,148))|0;f=q[q[e+12>>2]+4>>2];if(!f){break d}n[f](q[e>>2])}h=w(d,148)+c|0;c=w(g,148)+c|0;f=c;while(1){f=Lp(f)+148|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];d=q[a+4>>2];if((b|0)==(d|0)){break c}while(1){c=c+ -148|0;q[c>>2]=0;q[c+16>>2]=4896;q[c+12>>2]=194;lV(c+20|0,0,124);d=d+ -148|0;if((d|0)!=(b|0)){continue}break}b=q[a+4>>2];d=q[a>>2];break b}kU();F()}d=b}q[a+4>>2]=f;q[a>>2]=c;c=q[a+8>>2];q[a+8>>2]=h;if((b|0)!=(d|0)){while(1){b=Mp(b+ -148|0);if((d|0)!=(b|0)){continue}break}}if(!d){break a}xt(e);n[q[e+8>>2]](e,d,c-d|0);a=q[q[e+12>>2]+4>>2];if(!a){break a}n[a](q[e>>2])}ue=e+16|0}function tl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;e=ue-48|0;ue=e;a:{if(r[b+168|0]){break a}d=q[b>>2];d=n[q[q[d>>2]+180>>2]](d)|0;g=q[b+8>>2];c=q[b+268>>2];q[e+40>>2]=q[b+264>>2];q[e+44>>2]=c;c=q[b+260>>2];q[e+32>>2]=q[b+256>>2];q[e+36>>2]=c;c=q[b+252>>2];q[e+24>>2]=q[b+248>>2];q[e+28>>2]=c;c=q[b+244>>2];q[e+16>>2]=q[b+240>>2];q[e+20>>2]=c;c=q[b+236>>2];q[e+8>>2]=q[b+232>>2];q[e+12>>2]=c;c=q[b+228>>2];q[e>>2]=q[b+224>>2];q[e+4>>2]=c;d=vl(a,d,g,1,e);o[b+168|0]=1;q[b+4>>2]=d;if(!d){o[b+19|0]=1;break a}Lj(Tk(q[d+36>>2]));if(q[b+172>>2]<1){break a}i=a+384|0;g=a+144|0;while(1){Ek(q[b+8>>2],x(1));d=g;while(1){c=q[d>>2];f=q[d+4>>2];b:{if((c|0)==(f|0)){break b}while(1){lk(q[c>>2],q[b+8>>2]);c=c+4|0;if((f|0)!=(c|0)){continue}break}c=q[d>>2];f=q[d+4>>2];if((c|0)==(f|0)){break b}while(1){mk(q[c>>2],q[b+8>>2]);c=c+4|0;if((f|0)!=(c|0)){continue}break}}d=d+12|0;if((i|0)!=(d|0)){continue}break}pl(a,b);h=h+1|0;if((h|0)>2]){continue}break}}ue=e+48|0}function DG(a){var b=x(0),c=0,d=0,g=x(0);d=(k(a),e(0));c=d&2147483647;if(c>>>0>=1065353216){if((c|0)==1065353216){return(d|0)<0?x(3.141592502593994):x(0)}return x(x(0)/x(a-a))}a:{if(c>>>0<=1056964607){b=x(1.570796251296997);if(c>>>0<847249409){break a}b=x(a*a);return x(x(x(x(7.549789415861596e-8)-x(x(x(b*x(x(b*x(x(b*x(-.008656363002955914))+x(-.04274342209100723)))+x(.16666586697101593)))/x(x(b*x(-.7066296339035034))+x(1)))*a))-a)+x(1.570796251296997))}if((d|0)<=-1){a=x(x(a+x(1))*x(.5));b=x(E(a));a=x(x(1.570796251296997)-x(b+x(x(b*x(x(a*x(x(a*x(x(a*x(-.008656363002955914))+x(-.04274342209100723)))+x(.16666586697101593)))/x(x(a*x(-.7066296339035034))+x(1))))+x(-7.549789415861596e-8))));return x(a+a)}a=x(x(x(1)-a)*x(.5));g=x(E(a));b=(f(0,(k(g),e(0))&-4096),j());a=x(x(x(x(x(a*x(x(a*x(x(a*x(-.008656363002955914))+x(-.04274342209100723)))+x(.16666586697101593)))/x(x(a*x(-.7066296339035034))+x(1)))*g)+x(x(a-x(b*b))/x(g+b)))+b);b=x(a+a)}return b}function XL(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=ue-16|0;ue=m;o[m+15|0]=a;a:{b:{if((a|0)==(f|0)){if(!r[b|0]){break b}a=0;o[b|0]=0;b=q[e>>2];q[e>>2]=b+1;o[b|0]=46;if(!uL(h)){break a}b=q[j>>2];if((b-i|0)>159){break a}c=q[k>>2];q[j>>2]=b+4;q[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!uL(h)){break c}if(!r[b|0]){break b}a=0;b=q[j>>2];if((b-i|0)>159){break a}a=q[k>>2];q[j>>2]=b+4;q[b>>2]=a;a=0;q[k>>2]=0;break a}a=-1;f=lM(l,l+32|0,m+15|0)-l|0;if((f|0)>31){break a}g=r[f+355328|0];a=f+ -22|0;d:{if(a>>>0<=3){e:{switch(a-2|0){case 0:case 1:b=q[e>>2];if((b|0)!=(d|0)){a=-1;if((r[b+ -1|0]&95)!=(r[c|0]&127)){break a}}q[e>>2]=b+1;o[b|0]=g;a=0;break a;default:break e}}o[c|0]=80;break d}a=o[c|0];if((a|0)!=(g&95)){break d}o[c|0]=a|128;if(!r[b|0]){break d}o[b|0]=0;if(!uL(h)){break d}a=q[j>>2];if((a-i|0)>159){break d}b=q[k>>2];q[j>>2]=a+4;q[a>>2]=b}a=q[e>>2];q[e>>2]=a+1;o[a|0]=g;a=0;if((f|0)>21){break a}q[k>>2]=q[k>>2]+1;break a}a=-1}ue=m+16|0;return a}function zs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);var e=0,f=0,g=x(0),h=0,i=x(0),j=x(0),k=x(0),l=x(0),m=0,n=x(0),o=x(0),p=x(0);e=ue+ -64|0;ue=e;a:{if(r[b+145|0]){while(1){g=As(b,q[((h<<2)+b|0)+148>>2],d);b:{if(r[b+144|0]){Bs(e,c,g);m=q[e+12>>2];f=(e+16|0)+(h<<4)|0;q[f+8>>2]=q[e+8>>2];q[f+12>>2]=m;m=q[e+4>>2];q[f>>2]=q[e>>2];q[f+4>>2]=m;break b}i=u[c>>2];n=u[c+32>>2];j=u[c+4>>2];o=u[c+36>>2];k=u[c+8>>2];l=u[c+40>>2];f=(e+16|0)+(h<<4)|0;p=u[c+12>>2];u[f+12>>2]=p+x(g*x(u[c+44>>2]-p));u[f+8>>2]=k+x(g*x(l-k));u[f+4>>2]=j+x(g*x(o-j));u[f>>2]=i+x(g*x(n-i))}h=h+1|0;if((h|0)!=3){continue}break}b=q[e+36>>2];c=q[e+56>>2];h=q[e+16>>2];q[a+12>>2]=1065353216;q[a+8>>2]=c;q[a+4>>2]=b;q[a>>2]=h;break a}d=As(b,q[b+108>>2],d);if(r[b+144|0]){Bs(a,c,d);break a}k=u[c+36>>2];n=u[c+40>>2];o=u[c+44>>2];g=u[c+4>>2];i=u[c+8>>2];j=u[c+12>>2];l=u[c>>2];u[a>>2]=l+x(d*x(u[c+32>>2]-l));u[a+12>>2]=j+x(d*x(o-j));u[a+8>>2]=i+x(d*x(n-i));u[a+4>>2]=g+x(d*x(k-g))}ue=e- -64|0}function Xg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,t=0,u=0;k=ue-16|0;ue=k;f=q[b+4>>2];a:{b:{if(f){e=r[c+11|0];g=e<<24>>24<0;l=g?q[c+4>>2]:e;m=g?q[c>>2]:c;g=b+4|0;while(1){h=f+16|0;c=r[f+27|0];p=c<<24>>24<0;c:{d:{n=p?q[f+20>>2]:c;i=n>>>0>>0?n:l;e:{if(i){c=p?q[h>>2]:h;j=i;e=m;while(1){t=s[e>>1];u=s[c>>1];if(t>>>0>>0){break e}if(u>>>0>>0){break d}c=c+2|0;e=e+2|0;j=j+ -1|0;if(j){continue}break}}if(l>>>0>=n>>>0){break d}}c=q[f>>2];if(c){break c}break b}f:{if(i){c=p?q[h>>2]:h;e=m;while(1){j=s[c>>1];h=s[e>>1];if(j>>>0>>0){break f}if(h>>>0>>0){break a}e=e+2|0;c=c+2|0;i=i+ -1|0;if(i){continue}break}}if(n>>>0>=l>>>0){break a}}g=f+4|0;c=q[f+4>>2];if(!c){break a}f=g}g=f;f=c;continue}}f=b+4|0}g=f}m=a;e=q[g>>2];if(e){b=0}else{hh(k,b,d);c=q[k>>2];q[c+8>>2]=f;q[c>>2]=0;q[c+4>>2]=0;q[g>>2]=c;d=q[q[b>>2]>>2];if(d){q[b>>2]=d;c=q[g>>2]}ih(q[b+4>>2],c);q[b+8>>2]=q[b+8>>2]+1;e=q[k>>2];b=1}o[m+4|0]=b;q[a>>2]=e;ue=k+16|0}function _w(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=ue-16|0;ue=i;q[a+4>>2]=1;o[a+478|0]=0;p[a+476>>1]=0;lV(a+8|0,0,404);q[a+488>>2]=1;q[a+480>>2]=-1;q[a+484>>2]=-1;q[a+544>>2]=0;q[a+540>>2]=h;q[a+536>>2]=g;q[a+532>>2]=f;q[a+528>>2]=e;q[a+524>>2]=d;q[a+520>>2]=c;q[a+492>>2]=b;q[a>>2]=29208;n[q[q[b>>2]+224>>2]](i+8|0,b);c=a+544|0;d=q[i+8>>2];if(d){n[q[q[d>>2]>>2]](d)|0}e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=d;d=q[i+8>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[i+8>>2]=0}a:{b:{if((n[q[q[b>>2]+244>>2]](b)|0)!=1){if((n[q[q[b>>2]+244>>2]](b)|0)!=3){break b}}q[a+488>>2]=0;$w(a);break a}ax(a)}q[i+4>>2]=0;if(r[367112]){ta(34229,i+4|0)}j=a,k=RB(c,q[a+520>>2],0,0),q[j+496>>2]=k;j=a,k=RB(c,q[a+524>>2],0,0),q[j+500>>2]=k;j=a,k=RB(c,q[a+528>>2],0,0),q[j+504>>2]=k;j=a,k=RB(c,q[a+532>>2],0,0),q[j+508>>2]=k;j=a,k=RB(c,q[a+536>>2],0,0),q[j+512>>2]=k;j=a,k=RB(c,q[a+540>>2],0,0),q[j+516>>2]=k;if(r[367112]){iw(q[i+4>>2])}ue=i+16|0;return a}function Vq(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{f=q[a+8>>2];c=q[a+4>>2];if(f-c>>4>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+16|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}h=q[a>>2];g=c-h>>4;d=g+b|0;b:{c:{d:{if(d>>>0<268435456){f=f-h|0;i=f>>3;d=f>>4>>>0<134217727?i>>>0>>0?d:i:268435455;if(d){if(d>>>0>=268435456){break d}e=_S(d<<4)}f=(d<<4)+e|0;e=(g<<4)+e|0;g=lV(e,0,b<<4);d=g;while(1){d=d+16|0;b=b+ -1|0;if(b){continue}break}if((c|0)==(h|0)){break c}while(1){c=c+ -16|0;b=q[c+4>>2];e=e+ -16|0;q[e>>2]=q[c>>2];q[e+4>>2]=b;b=c+8|0;q[e+8>>2]=q[b>>2];q[c>>2]=0;q[c+4>>2]=0;q[b>>2]=0;q[e+12>>2]=q[c+12>>2];if((c|0)!=(h|0)){continue}break}q[a+8>>2]=f;b=q[a+4>>2];q[a+4>>2]=d;c=q[a>>2];q[a>>2]=e;if((b|0)==(c|0)){break b}while(1){a=b+ -16|0;if(o[b+ -5|0]<=-1){_U(q[a>>2])}b=a;if((a|0)!=(c|0)){continue}break}break b}kU();F()}Ue(6104);F()}q[a+8>>2]=f;q[a+4>>2]=d;q[a>>2]=g}if(!c){break a}_U(c)}}function ry(a){a=a|0;var b=0;hx(q[a+72>>2]);a:{if(!r[a+172|0]){break a}if(r[367112]){iw(q[a+124>>2])}W(33984);Ca(3553,q[a+140>>2]);W(33985);Ca(3553,q[a+144>>2]);W(33986);Ca(3553,q[a+148>>2]);W(33987);Ca(3553,q[a+152>>2]);W(33988);Ca(3553,q[a+156>>2]);W(33989);Ca(3553,q[a+160>>2]);W(33990);Ca(3553,q[a+164>>2]);W(33991);Ca(3553,q[a+168>>2]);W(33984);b:{if(r[a+88|0]){ua(3042);break b}va(3042)}c:{if(r[a+89|0]){ua(2884);break c}va(2884)}d:{if(r[a+90|0]){ua(2929);break d}va(2929)}e:{if(n[q[q[a>>2]+244>>2]](a)){break e}if(r[a+92|0]){ua(3553);break e}va(3553)}Ba(q[a+96>>2]);wa(r[a+91|0]);xa(q[a+100>>2]);aw(q[a+104>>2],q[a+108>>2],q[a+112>>2],q[a+116>>2]);V(q[a+120>>2]);Yv(34962,q[a+128>>2]);Yv(34963,q[a+132>>2]);ha(q[a+136>>2]);if((n[q[q[a>>2]+244>>2]](a)|0)!=1){if((n[q[q[a>>2]+244>>2]](a)|0)!=3){break a}}if((q[a+188>>2]-q[a+184>>2]|0)<1){break a}while(1){b=b+1|0;if((b|0)>2]-q[a+184>>2]>>2){continue}break}}return 1}function Fl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=q[a+8>>2];d=q[a+4>>2];a:{if((e-d|0)/23072>>>0>=b>>>0){while(1){ik(d);d=q[a+4>>2]+23072|0;q[a+4>>2]=d;b=b+ -1|0;if(b){continue}break a}}c=d;d=q[a>>2];g=(c-d|0)/23072|0;c=g+b|0;b:{c:{if(c>>>0<186155){d=(e-d|0)/23072|0;e=d<<1;c=d>>>0<93077?e>>>0>>0?c:e:186154;d:{if(!c){d=0;break d}yt(f);d=n[q[f+8>>2]](f,w(c,23072),16)|0;e=q[q[f+12>>2]+4>>2];if(!e){break d}n[e](q[f>>2])}h=w(c,23072)+d|0;e=w(g,23072)+d|0;d=e;while(1){d=ik(d)+23072|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];c=q[a+4>>2];if((b|0)==(c|0)){break c}while(1){e=e+ -23072|0;c=c+ -23072|0;kV(e,c,23072);if((b|0)!=(c|0)){continue}break}b=q[a+4>>2];c=q[a>>2];break b}kU();F()}c=b}q[a+4>>2]=d;q[a>>2]=e;d=q[a+8>>2];q[a+8>>2]=h;if((b|0)!=(c|0)){while(1){b=b+ -23072|0;if((c|0)!=(b|0)){continue}break}}if(!c){break a}zt(f);n[q[f+8>>2]](f,c,d-c|0);a=q[q[f+12>>2]+4>>2];if(!a){break a}n[a](q[f>>2])}ue=f+16|0}function $p(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=x(0),s=x(0);l=x(1);i=x(u[b+64>>2]-u[b>>2]);j=x(u[b+68>>2]-u[b+4>>2]);k=x(u[b+72>>2]-u[b+8>>2]);e=x(E(x(x(x(i*i)+x(j*j))+x(k*k))));a:{if(!(e>x(0))){break a}d=u[c>>2];g=u[c+12>>2];f=u[c+8>>2];b:{if(!(!!(g>x(0))|f>x(0))){h=d;break b}if(e>=g){break b}if(!(e>f)){h=d;break b}h=x(d*x(x(1)-x(x(e-f)/x(g-f))))}d=x(0);g=u[b+148>>2];if(!(g>x(0))){break a}f=u[c+4>>2];m=x(x(1)-f);p=x(i/e);q=u[b+16>>2];i=x(x(x(p*h)*g)+q);n=x(j/e);r=u[b+20>>2];j=x(x(x(n*h)*g)+r);o=x(k/e);s=u[b+24>>2];k=x(x(x(o*h)*g)+s);d=x(x(E(x(x(x(i*i)+x(j*j))+x(k*k))))+x(9999999747378752e-20));e=x(x(u[b+76>>2]-u[b+12>>2])/e);l=x(x(e*h)*g);h=u[b+28>>2];l=x(x(d*x(x(e*f)+x(m*x(x(l+h)/d))))-h);o=x(x(d*x(x(o*f)+x(m*x(k/d))))-s);n=x(x(d*x(x(n*f)+x(m*x(j/d))))-r);d=x(x(d*x(x(p*f)+x(m*x(i/d))))-q)}u[a+12>>2]=l;u[a+8>>2]=o;u[a+4>>2]=n;u[a>>2]=d}function Ry(a,b){var c=0,d=0,e=0;c=ue-32|0;ue=c;a:{if(b>>>0<=5){b:{switch(b-1|0){case 4:b=a- -64|0;break a;case 3:b=a+60|0;break a;case 2:b=a+56|0;break a;case 1:b=a+48|0;break a;case 0:b=a+52|0;break a;default:break b}}n[q[q[a>>2]+228>>2]](c+24|0,a);e=q[c+24>>2];b=q[c+28>>2];c:{if(!b){break c}d=q[b+4>>2];q[b+4>>2]=d+ -1;if(d){break c}n[q[q[b>>2]+8>>2]](b);WS(b)}b=a+44|0;d=q[a+44>>2];if(!e){q[c+16>>2]=0;n[q[q[d>>2]+16>>2]](d,c+16|0);a=q[c+16>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[c+16>>2]=0;break a}n[q[q[a>>2]+228>>2]](c+24|0,a);q[c+8>>2]=0;e=q[c+24>>2];a=q[e>>2];d:{if(!a){break d}n[q[q[a>>2]>>2]](a)|0;a=q[c+8>>2];if(!a){break d}n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}q[c+8>>2]=q[e>>2];n[q[q[d>>2]+16>>2]](d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}a=q[c+28>>2];if(!a){break a}d=q[a+4>>2];q[a+4>>2]=d+ -1;if(d){break a}n[q[q[a>>2]+8>>2]](a);WS(a);break a}b=a+44|0}ue=c+32|0;return q[b>>2]}function Zw(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ue-48|0;ue=d;h=q[a>>2];q[d+8>>2]=0;q[d+12>>2]=0;q[d>>2]=0;q[d+4>>2]=0;e=d|4;f=sV(b);if(f>>>0<4294967280){a:{b:{if(f>>>0>=11){wt(d+32|0);i=f+16&-16;g=n[q[d+40>>2]](d+32|0,i)|0;j=q[q[d+44>>2]+4>>2];if(j){n[j](q[d+32>>2])}q[d+12>>2]=i|-2147483648;q[d+8>>2]=f;q[d+4>>2]=g;break b}o[d+15|0]=f;g=e;if(!f){break a}}kV(g,b,f)}o[f+g|0]=0;q[d+20>>2]=c;q[d+16>>2]=0;q[d+24>>2]=q[q[a+4>>2]>>2];b=q[h+4>>2];c:{if(b>>>0>2]){q[b>>2]=q[d>>2];g=e+8|0;q[b+12>>2]=q[g>>2];f=q[e+4>>2];q[b+4>>2]=q[e>>2];q[b+8>>2]=f;q[e>>2]=0;q[e+4>>2]=0;q[g>>2]=0;e=d+16|0;q[b+24>>2]=q[e+8>>2];g=q[e+4>>2];q[b+16>>2]=q[e>>2];q[b+20>>2]=g;q[h+4>>2]=q[h+4>>2]+28;break c}Aw(h,d)}d:{if(o[d+15|0]>-1){break d}b=q[d+12>>2];e=q[d+4>>2];xt(d+32|0);n[q[d+40>>2]](d+32|0,e,b&2147483647);b=q[q[d+44>>2]+4>>2];if(!b){break d}n[b](q[d+32>>2])}a=q[a+4>>2];q[a>>2]=q[a>>2]+(c<<4);ue=d+48|0;return}kT();F()}function Yw(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ue-48|0;ue=d;h=q[a>>2];q[d+8>>2]=0;q[d+12>>2]=0;q[d>>2]=0;q[d+4>>2]=0;e=d|4;f=sV(b);if(f>>>0<4294967280){a:{b:{if(f>>>0>=11){wt(d+32|0);i=f+16&-16;g=n[q[d+40>>2]](d+32|0,i)|0;j=q[q[d+44>>2]+4>>2];if(j){n[j](q[d+32>>2])}q[d+12>>2]=i|-2147483648;q[d+8>>2]=f;q[d+4>>2]=g;break b}o[d+15|0]=f;g=e;if(!f){break a}}kV(g,b,f)}o[f+g|0]=0;q[d+20>>2]=c;q[d+16>>2]=1;q[d+24>>2]=q[q[a+4>>2]>>2];b=q[h+4>>2];c:{if(b>>>0>2]){q[b>>2]=q[d>>2];g=e+8|0;q[b+12>>2]=q[g>>2];f=q[e+4>>2];q[b+4>>2]=q[e>>2];q[b+8>>2]=f;q[e>>2]=0;q[e+4>>2]=0;q[g>>2]=0;e=d+16|0;q[b+24>>2]=q[e+8>>2];g=q[e+4>>2];q[b+16>>2]=q[e>>2];q[b+20>>2]=g;q[h+4>>2]=q[h+4>>2]+28;break c}Aw(h,d)}d:{if(o[d+15|0]>-1){break d}b=q[d+12>>2];e=q[d+4>>2];xt(d+32|0);n[q[d+40>>2]](d+32|0,e,b&2147483647);b=q[q[d+44>>2]+4>>2];if(!b){break d}n[b](q[d+32>>2])}a=q[a+4>>2];q[a>>2]=q[a>>2]+(c<<6);ue=d+48|0;return}kT();F()}function Yj(a,b,c,d,e,f,g,h){var i=x(0),j=0,k=x(0),l=0;j=ue-32|0;ue=j;l=q[c>>2];i=x(0);a:{if(l>>>0>3){break a}b:{c:{d:{switch(l-1|0){default:d=q[c+4>>2];if((d|0)>=0){q[j>>2]=q[c+8>>2];Fs(j,e,f,b,a,d,j);i=u[j>>2];break a}i=u[c+8>>2];break a;case 0:a=q[d+16>>2];b=q[d+4>>2];c=q[d>>2];e=q[d+8>>2];f=q[d+12>>2];q[j+28>>2]=q[d+20>>2];q[j+20>>2]=f;q[j+24>>2]=1065353216;q[j+12>>2]=e;q[j+4>>2]=c;c=0;q[j>>2]=0;i=x(x(b|0)/h);u[j+8>>2]=i;k=x(x(h-x(a|0))/h);u[j+16>>2]=k;d=1;g=x(B(x(A(x(g/h),x(1))),x(0)));if(i>x(0)^1|g<=i^1|g>=x(0)^1){break c}h=i;k=x(0);break b;case 1:i=us(c+60|0,d,x(B(x(A(x(g/h),x(1))),x(0))));break a;case 2:break d}}i=x(x(nj(q[c+156>>2],g,h)+u[d>>2])/x(100));break a}e:{if(!(k>x(0))){break e}c=1;if(!(g<=k)){break e}d=2;if(!(i<=g)){break e}h=k;k=i;break b}h=x(1);i=h;if(g<=x(1)^1|k<=g^1){break a}c=2;d=3}i=u[((c<<3)+j|0)+4>>2];i=x(i+x(x(x(g-k)/x(h-k))*x(u[((d<<3)+j|0)+4>>2]-i)))}h=i;ue=j+32|0;return h}function Qj(a,b,c){var d=x(0),e=0,f=x(0),g=x(0),h=0,i=x(0);a:{e=q[c>>2]+ -2|0;if(e>>>0>2){break a}b:{switch(e-1|0){default:e=a;d=x(n[q[q[b>>2]+16>>2]](b,x(q[c+40>>2]),x(q[c+36>>2])));c:{if(x(y(d))>2]=b;c=q[c+20>>2];if((c|0)>2147483){break a}q[a>>2]=w(b,c);return;case 0:d=x(n[q[q[b>>2]+16>>2]](b,u[c+12>>2],u[c+4>>2]));f=x(n[q[q[b>>2]+16>>2]](b,u[c+16>>2],u[c+8>>2]));g=x(n[q[q[b>>2]+16>>2]](b,u[c+28>>2],u[c+20>>2]));h=a,i=x(n[q[q[b>>2]+16>>2]](b,u[c+32>>2],u[c+24>>2])),u[h+16>>2]=i;u[a+12>>2]=g;u[a+8>>2]=f;u[a+4>>2]=d;d=x(n[q[q[b>>2]+16>>2]](b,u[c+44>>2],u[c+36>>2]));f=x(n[q[q[b>>2]+16>>2]](b,u[c+48>>2],u[c+40>>2]));q[a+40>>2]=0;q[a+44>>2]=1065353216;u[a+36>>2]=f;u[a+32>>2]=d;return;case 1:break b}}h=a,i=jj(q[c+4>>2]+4|0,b),u[h+4>>2]=i;h=a,i=jj(q[c+4>>2]+48|0,b),u[h+8>>2]=i;c=c+8|0;h=a,i=jj(q[c>>2]+4|0,b),u[h+12>>2]=i;h=a,i=jj(q[c>>2]+48|0,b),u[h+16>>2]=i}}function jJ(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=ue-32|0;ue=c;a:{if(r[a+52|0]){d=q[a+48>>2];if(!b){break a}o[a+52|0]=0;q[a+48>>2]=-1;break a}q[c+24>>2]=1;e=q[nJ(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{c:{d:{while(1){if((d|0)!=(h|0)){f=OI(q[a+32>>2]);if((f|0)==-1){break d}o[(c+24|0)+d|0]=f;d=d+1|0;continue}break}e:{if(r[a+53|0]){o[c+23|0]=r[c+24|0];break e}h=c+24|0;while(1){d=q[a+40>>2];f=q[d>>2];i=q[d+4>>2];g=d;d=(c+24|0)+e|0;g=oJ(q[a+36>>2],g,c+24|0,d,c+16|0,c+23|0,h,c+12|0)+ -1|0;if(g>>>0>2){break e}f:{switch(g-1|0){default:g=q[a+40>>2];q[g>>2]=f;q[g+4>>2]=i;if((e|0)==8){break d}f=OI(q[a+32>>2]);if((f|0)==-1){break d}o[d|0]=f;e=e+1|0;continue;case 1:break f;case 0:break d}}break}o[c+23|0]=r[c+24|0]}if(b){break c}while(1){if((e|0)<1){break b}e=e+ -1|0;if((MI(oH(o[e+(c+24|0)|0]),q[a+32>>2])|0)!=-1){continue}break}}d=-1;break a}j=a,k=oH(o[c+23|0]),q[j+48>>2]=k}d=oH(o[c+23|0])}ue=c+32|0;return d}function $x(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-48|0;ue=c;g=q[a>>2];q[c+8>>2]=0;q[c+12>>2]=0;q[c>>2]=0;q[c+4>>2]=0;d=c|4;e=sV(b);if(e>>>0<4294967280){a:{b:{if(e>>>0>=11){wt(c+32|0);h=e+16&-16;f=n[q[c+40>>2]](c+32|0,h)|0;i=q[q[c+44>>2]+4>>2];if(i){n[i](q[c+32>>2])}q[c+12>>2]=h|-2147483648;q[c+8>>2]=e;q[c+4>>2]=f;break b}o[c+15|0]=e;f=d;if(!e){break a}}kV(f,b,e)}o[e+f|0]=0;q[c+16>>2]=1;q[c+20>>2]=1;q[c+24>>2]=q[q[a+4>>2]>>2];b=q[g+4>>2];c:{if(b>>>0>2]){q[b>>2]=q[c>>2];f=d+8|0;q[b+12>>2]=q[f>>2];e=q[d+4>>2];q[b+4>>2]=q[d>>2];q[b+8>>2]=e;q[d>>2]=0;q[d+4>>2]=0;q[f>>2]=0;d=c+16|0;q[b+24>>2]=q[d+8>>2];f=q[d+4>>2];q[b+16>>2]=q[d>>2];q[b+20>>2]=f;q[g+4>>2]=q[g+4>>2]+28;break c}Aw(g,c)}d:{if(o[c+15|0]>-1){break d}b=q[c+12>>2];d=q[c+4>>2];xt(c+32|0);n[q[c+40>>2]](c+32|0,d,b&2147483647);b=q[q[c+44>>2]+4>>2];if(!b){break d}n[b](q[c+32>>2])}a=q[a+4>>2];q[a>>2]=q[a>>2]- -64;ue=c+48|0;return}kT();F()}function Ar(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=q[b+4>>2];h=(e-q[b>>2]|0)/80|0;g=(q[b+16>>2]-q[b+12>>2]|0)/12|0;a:{d=q[c>>2];f=q[c+4>>2];if((d|0)==(f|0)){break a}while(1){b:{if(q[b+8>>2]!=(e|0)){kV(e,d,80);q[b+4>>2]=q[b+4>>2]+80;break b}Br(b,d)}d=d+80|0;if((f|0)==(d|0)){break a}e=q[b+4>>2];continue}}d=q[c+12>>2];e=q[c+16>>2];if((d|0)!=(e|0)){f=b+12|0;while(1){c=q[b+16>>2];c:{if((c|0)!=q[b+20>>2]){i=q[d+4>>2];q[c>>2]=q[d>>2];q[c+4>>2]=i;q[c+8>>2]=q[d+8>>2];q[b+16>>2]=q[b+16>>2]+12;break c}Cr(f,d)}d=d+12|0;if((e|0)!=(d|0)){continue}break}}e=q[b+16>>2];d=q[b+12>>2];f=(e-d|0)/12|0;if(g>>>0>>0){while(1){c=d+w(g,12)|0;q[c>>2]=q[c>>2]+h;q[c+4>>2]=q[c+4>>2]+h;q[c+8>>2]=q[c+8>>2]+h;g=g+1|0;if(g>>>0>>0){continue}break}}q[a>>2]=q[b>>2];q[a+4>>2]=q[b+4>>2];q[a+8>>2]=q[b+8>>2];q[b+8>>2]=0;q[b>>2]=0;q[b+4>>2]=0;q[a+12>>2]=d;q[a+16>>2]=e;c=a;a=b+20|0;q[c+20>>2]=q[a>>2];q[a>>2]=0;q[b+12>>2]=0;q[b+16>>2]=0}function oy(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-48|0;ue=c;g=q[a>>2];q[c+12>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;q[c>>2]=1;d=c|4;e=sV(b);if(e>>>0<4294967280){a:{b:{if(e>>>0>=11){wt(c+32|0);h=e+16&-16;f=n[q[c+40>>2]](c+32|0,h)|0;i=q[q[c+44>>2]+4>>2];if(i){n[i](q[c+32>>2])}q[c+12>>2]=h|-2147483648;q[c+8>>2]=e;q[c+4>>2]=f;break b}o[c+15|0]=e;f=d;if(!e){break a}}kV(f,b,e)}o[e+f|0]=0;q[c+16>>2]=0;q[c+20>>2]=1;q[c+24>>2]=q[q[a+4>>2]>>2];b=q[g+4>>2];c:{if(b>>>0>2]){q[b>>2]=q[c>>2];f=d+8|0;q[b+12>>2]=q[f>>2];e=q[d+4>>2];q[b+4>>2]=q[d>>2];q[b+8>>2]=e;q[d>>2]=0;q[d+4>>2]=0;q[f>>2]=0;d=c+16|0;q[b+24>>2]=q[d+8>>2];f=q[d+4>>2];q[b+16>>2]=q[d>>2];q[b+20>>2]=f;q[g+4>>2]=q[g+4>>2]+28;break c}Aw(g,c)}d:{if(o[c+15|0]>-1){break d}b=q[c+12>>2];d=q[c+4>>2];xt(c+32|0);n[q[c+40>>2]](c+32|0,d,b&2147483647);b=q[q[c+44>>2]+4>>2];if(!b){break d}n[b](q[c+32>>2])}a=q[a+4>>2];q[a>>2]=q[a>>2]+16;ue=c+48|0;return}kT();F()}function ay(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-48|0;ue=c;g=q[a>>2];q[c+8>>2]=0;q[c+12>>2]=0;q[c>>2]=0;q[c+4>>2]=0;d=c|4;e=sV(b);if(e>>>0<4294967280){a:{b:{if(e>>>0>=11){wt(c+32|0);h=e+16&-16;f=n[q[c+40>>2]](c+32|0,h)|0;i=q[q[c+44>>2]+4>>2];if(i){n[i](q[c+32>>2])}q[c+12>>2]=h|-2147483648;q[c+8>>2]=e;q[c+4>>2]=f;break b}o[c+15|0]=e;f=d;if(!e){break a}}kV(f,b,e)}o[e+f|0]=0;q[c+16>>2]=0;q[c+20>>2]=1;q[c+24>>2]=q[q[a+4>>2]>>2];b=q[g+4>>2];c:{if(b>>>0>2]){q[b>>2]=q[c>>2];f=d+8|0;q[b+12>>2]=q[f>>2];e=q[d+4>>2];q[b+4>>2]=q[d>>2];q[b+8>>2]=e;q[d>>2]=0;q[d+4>>2]=0;q[f>>2]=0;d=c+16|0;q[b+24>>2]=q[d+8>>2];f=q[d+4>>2];q[b+16>>2]=q[d>>2];q[b+20>>2]=f;q[g+4>>2]=q[g+4>>2]+28;break c}Aw(g,c)}d:{if(o[c+15|0]>-1){break d}b=q[c+12>>2];d=q[c+4>>2];xt(c+32|0);n[q[c+40>>2]](c+32|0,d,b&2147483647);b=q[q[c+44>>2]+4>>2];if(!b){break d}n[b](q[c+32>>2])}a=q[a+4>>2];q[a>>2]=q[a>>2]+16;ue=c+48|0;return}kT();F()}function fV(a,b){var c=0,d=0,g=0,h=0,i=0,l=0,m=0;a:{i=(k(b),e(0));g=i<<1;if(!(!g|(i&2147483647)>>>0>2139095040)){m=(k(a),e(0));d=m>>>23&255;if((d|0)!=255){break a}}a=x(a*b);return x(a/a)}c=m<<1;if(c>>>0>g>>>0){l=i>>>23&255;b:{if(!d){d=0;c=m<<9;if((c|0)>=0){while(1){d=d+ -1|0;c=c<<1;if((c|0)>-1){continue}break}}c=m<<1-d;break b}c=m&8388607|8388608}g=c;c:{if(!l){l=0;h=i<<9;if((h|0)>=0){while(1){l=l+ -1|0;h=h<<1;if((h|0)>-1){continue}break}}i=i<<1-l;break c}i=i&8388607|8388608}g=g-i|0;h=(g|0)>-1;if((d|0)>(l|0)){while(1){d:{if(!(h&1)){break d}c=g;if(c){break d}return x(a*x(0))}c=c<<1;g=c-i|0;h=(g|0)>-1;d=d+ -1|0;if((d|0)>(l|0)){continue}break}d=l}e:{if(!h){break e}c=g;if(c){break e}return x(a*x(0))}f:{if(c>>>0>8388607){h=c;break f}while(1){d=d+ -1|0;g=c>>>0<4194304;h=c<<1;c=h;if(g){continue}break}}return f(0,m&-2147483648|((d|0)>=1?h+ -8388608|d<<23:h>>>1-d|0)),j()}return(c|0)==(g|0)?x(a*x(0)):a}function Hs(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=x(0),m=x(0);j=ue+ -64|0;ue=j;k=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=k;k=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=k;g=q[f>>2];if((g|0)>=0){l=u[i+8>>2];m=u[i+4>>2];u[a>>2]=u[i>>2]*u[a>>2];u[a+4>>2]=m*u[a+4>>2];u[a+8>>2]=l*u[a+8>>2];f=(g<<4)+c|0;i=q[f+228>>2];q[j+56>>2]=q[f+224>>2];q[j+60>>2]=i;i=q[f+220>>2];q[j+48>>2]=q[f+216>>2];q[j+52>>2]=i;u[j+40>>2]=u[c+8>>2]/x(60);f=q[a+12>>2];q[j+24>>2]=q[a+8>>2];q[j+28>>2]=f;f=q[a+4>>2];q[j+16>>2]=q[a>>2];q[j+20>>2]=f;u[j+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);b=q[b+260>>2]+w(g,60)|0;if(q[b+4>>2]==1){bl(j,b,c+40|0,j+40|0,j+16|0,e);b=q[j+12>>2];q[j+56>>2]=q[j+8>>2];q[j+60>>2]=b;b=q[j+4>>2];q[j+48>>2]=q[j>>2];q[j+52>>2]=b}b=q[j+52>>2];q[a>>2]=q[j+48>>2];q[a+4>>2]=b;c=q[j+60>>2];b=a+8|0;q[b>>2]=q[j+56>>2];q[b+4>>2]=c;l=u[h+8>>2];m=u[h+4>>2];u[a>>2]=u[h>>2]*u[a>>2];u[a+4>>2]=m*u[a+4>>2];u[b>>2]=l*u[b>>2]}ue=j- -64|0}function wz(a,b){var c=0,d=0,e=0,f=0;c=kV(a,b,800);a=q[b+804>>2];e=q[b+800>>2];q[c+808>>2]=0;q[c+800>>2]=e;q[c+804>>2]=a;a=q[b+808>>2];a:{if(!a){break a}n[q[q[a>>2]>>2]](a)|0;a=q[c+808>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[c+808>>2]=0}q[c+808>>2]=q[b+808>>2];q[c+812>>2]=q[b+812>>2];a=0;while(1){d=a<<2;e=(d+c|0)+816|0;q[e>>2]=0;f=(b+d|0)+816|0;d=q[f>>2];b:{if(!d){break b}n[q[q[d>>2]>>2]](d)|0;d=q[e>>2];if(!d){break b}n[q[q[d>>2]+8>>2]](d)|0;q[e>>2]=0}q[e>>2]=q[f>>2];a=a+1|0;if((a|0)!=8){continue}break}kV(c+848|0,b+848|0,76);q[c+924>>2]=0;a=q[b+924>>2];c:{if(!a){break c}n[q[q[a>>2]>>2]](a)|0;a=q[c+924>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[c+924>>2]=0}q[c+924>>2]=q[b+924>>2];q[c+928>>2]=q[b+928>>2];a=q[b+936>>2];q[c+932>>2]=q[b+932>>2];q[c+936>>2]=a;a=s[b+942>>1]|s[b+944>>1]<<16;b=s[b+938>>1]|s[b+940>>1]<<16;p[c+938>>1]=b;p[c+940>>1]=b>>>16;p[c+942>>1]=a;p[c+944>>1]=a>>>16}function Zp(a,b,c){var d=0,e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=x(0),m=x(0);d=ue-80|0;ue=d;e=x(u[b>>2]-u[b+48>>2]);g=x(u[b+12>>2]-u[b+60>>2]);h=x(u[b+8>>2]-u[b+56>>2]);i=x(u[b+4>>2]-u[b+52>>2]);j=q[c+4>>2];a:{if(j){u[d+52>>2]=i;u[d+48>>2]=e;u[d+60>>2]=g;u[d+56>>2]=h;f=q[d+52>>2];q[d+16>>2]=q[d+48>>2];q[d+20>>2]=f;f=q[d+60>>2];q[d+24>>2]=q[d+56>>2];q[d+28>>2]=f;qs(d- -64|0,j,d+16|0);e=u[c>>2];g=x(e*u[d+76>>2]);h=x(e*u[d+72>>2]);i=x(e*u[d+68>>2]);e=x(e*u[d+64>>2]);break a}j=q[c+8>>2];if(!j){break a}u[d+36>>2]=i;u[d+32>>2]=e;u[d+44>>2]=g;u[d+40>>2]=h;f=q[d+36>>2];q[d>>2]=q[d+32>>2];q[d+4>>2]=f;f=q[d+44>>2];q[d+8>>2]=q[d+40>>2];q[d+12>>2]=f;ts(d- -64|0,j,d);e=u[c>>2];g=x(x(e*u[d+76>>2])*x(4));h=x(x(e*u[d+72>>2])*x(4));i=x(x(e*u[d+68>>2])*x(4));e=x(x(e*u[d+64>>2])*x(4))}k=u[b+20>>2];l=u[b+24>>2];m=u[b+28>>2];u[a>>2]=e-u[b+16>>2];u[a+12>>2]=g-m;u[a+8>>2]=h-l;u[a+4>>2]=i-k;ue=d+80|0}function lx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=ue-16|0;ue=g;e=q[q[b+40>>2]>>2];a:{if(q[a+364>>2]+ -3>>>0<=2){if((e|0)==6){f=q[a+492>>2];d=a+504|0;break a}f=q[a+492>>2];d=a+496|0;if((e|0)==7){break a}d=a+500|0;break a}if((e|0)==6){f=q[a+492>>2];d=a+516|0;break a}f=q[a+492>>2];d=a+508|0;if((e|0)==7){break a}d=a+512|0}q[f+196>>2]=q[d>>2];d=q[b+20>>2];b:{if((d|0)<0){break b}c:{if(r[b+65|0]){e=q[b+4>>2];n[q[q[e>>2]+128>>2]](g+8|0,e,d);d=q[g+8>>2];break c}e=q[b+4>>2];n[q[q[e>>2]+92>>2]](g,e,d);d=q[g>>2]}if(!d){break b}vr(d,q[a+544>>2]);d:{if(!r[d+36|0]){break d}e=q[a+492>>2];if((n[q[q[e>>2]+160>>2]](e)|0)==1){wr(d,q[a+544>>2]);if(!r[d+37|0]){break d}}e=q[a+540>>2];f=q[a+536>>2];h=q[a+532>>2];i=q[a+528>>2];j=q[a+524>>2];k=q[a+520>>2];l=q[a+492>>2];if(!q[a+488>>2]){mx(a,l,k,j,i,h,f,e,b,c);break d}nx(a,l,k,j,i,h,f,e,b,c)}n[q[q[d>>2]+8>>2]](d)|0}ue=g+16|0}function Tr(a,b){var c=0,d=0,e=0,f=0;a:{if(b>>>0>2){break a}b:{switch(b-1|0){default:b=q[a>>2];d=q[a+4>>2];if((b|0)!=(d|0)){while(1){c=q[b+4>>2];q[b+4>>2]=q[b>>2];q[b>>2]=c;c=q[b+16>>2];e=b+20|0;q[b+16>>2]=q[e>>2];q[e>>2]=c;c=q[b+32>>2];e=b+36|0;q[b+32>>2]=q[e>>2];q[e>>2]=c;b=b+80|0;if((d|0)!=(b|0)){continue}break}}b=q[a+12>>2];a=q[a+16>>2];if((b|0)==(a|0)){break a}while(1){d=q[b+8>>2];q[b+8>>2]=q[b>>2];q[b>>2]=d;b=b+12|0;if((a|0)!=(b|0)){continue}break}break a;case 0:break a;case 1:break b}}b=q[a>>2];d=q[a+4>>2];if((b|0)!=(d|0)){while(1){c=q[b+8>>2];q[b+8>>2]=q[b+4>>2];q[b+4>>2]=c;c=b+24|0;e=q[c>>2];f=c;c=b+20|0;q[f>>2]=q[c>>2];q[c>>2]=e;c=b+40|0;e=q[c>>2];f=c;c=b+36|0;q[f>>2]=q[c>>2];q[c>>2]=e;b=b+80|0;if((d|0)!=(b|0)){continue}break}}b=q[a+12>>2];a=q[a+16>>2];if((b|0)==(a|0)){break a}while(1){d=q[b+8>>2];q[b+8>>2]=q[b>>2];q[b>>2]=d;b=b+12|0;if((a|0)!=(b|0)){continue}break}}}function uJ(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-32|0;ue=c;a:{if(r[a+52|0]){d=q[a+48>>2];if(!b){break a}o[a+52|0]=0;q[a+48>>2]=-1;break a}q[c+24>>2]=1;e=q[nJ(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{c:{d:{while(1){if((d|0)!=(h|0)){f=OI(q[a+32>>2]);if((f|0)==-1){break d}o[(c+24|0)+d|0]=f;d=d+1|0;continue}break}e:{if(r[a+53|0]){q[c+20>>2]=o[c+24|0];break e}h=c+24|0;while(1){d=q[a+40>>2];f=q[d>>2];i=q[d+4>>2];g=d;d=(c+24|0)+e|0;g=oJ(q[a+36>>2],g,c+24|0,d,c+16|0,c+20|0,h,c+12|0)+ -1|0;if(g>>>0>2){break e}f:{switch(g-1|0){default:g=q[a+40>>2];q[g>>2]=f;q[g+4>>2]=i;if((e|0)==8){break d}f=OI(q[a+32>>2]);if((f|0)==-1){break d}o[d|0]=f;e=e+1|0;continue;case 1:break f;case 0:break d}}break}q[c+20>>2]=o[c+24|0]}if(b){break c}while(1){if((e|0)<1){break b}e=e+ -1|0;if((MI(o[e+(c+24|0)|0],q[a+32>>2])|0)!=-1){continue}break}}d=-1;break a}q[a+48>>2]=q[c+20>>2]}d=q[c+20>>2]}ue=c+32|0;return d}function Df(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;f=q[a+8>>2];b=q[a>>2];e=q[b+8>>2];g=e+4|0;a:{b:{if(!(q[b+12>>2]!=2?g>>>0<=t[b+4>>2]:0)){c=b+12|0;break b}h=q[a+4>>2];c=b+12|0;d=e+q[b>>2]|0;d=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b+8>>2]=g;if((d|0)<0){break b}if((d|0)<=q[h>>2]){break a}}q[c>>2]=2}c=q[f+160>>2];b=(q[f+164>>2]-c|0)/284|0;c:{if(d>>>0>b>>>0){Pf(f+160|0,d-b|0);break c}if(d>>>0>=b>>>0){break c}q[f+164>>2]=c+w(d,284)}b=q[f+152>>2];e=q[f+148>>2];c=b-e>>2;d:{if(d>>>0>c>>>0){Bf(f+148|0,d-c|0);break d}if(d>>>0>=c>>>0){break d}c=e+(d<<2)|0;if((c|0)!=(b|0)){while(1){b=b+ -4|0;e=q[b>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[b>>2]=0}if((b|0)!=(c|0)){continue}break}}q[f+152>>2]=c}if((d|0)>=1){b=0;while(1){Qf(q[f+160>>2]+w(b,284)|0,q[a>>2],q[f+24>>2]);c=q[f+148>>2]+(b<<2)|0;e=q[c>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[c>>2]=0}q[c>>2]=0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}}function ij(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=0;e=q[a+20>>2];f=q[a+24>>2]-e|0;if(!f){return u[a+32>>2]}b=d?x(x(b/c)*x(100)):b;g=q[a+4>>2];if(!g){return u[e>>2]}c=x(g|0);b=x(b-x(q[a>>2]));a:{if(!(b>2];if(d>>>0>2){break a}b:{switch(d-1|0){default:return u[e>>2];case 0:b=x(c-fV(x(-b),c));break a;case 1:break b}}b=fV(x(-b),c)}f=f>>2;c:{if(!(b>c)){break c}d=q[a+16>>2];if(d>>>0>2){break c}d:{switch(d-1|0){default:return u[((f<<2)+e|0)+ -4>>2];case 0:b=fV(x(b-c),c);break c;case 1:break d}}b=x(c-fV(x(b-c),c))}j=x(y(x(b-c)))>2];i=x(h|0);c=x(b/i);e:{if(c=x(0)){a=~~c>>>0;break e}a=0}d=f+ -1|0;if(!j){return u[(d<<2)+e>>2]}if((a|0)==(d|0)){c=u[(d<<2)+e>>2];a=w(d,h);return x(c+x(x(b-x(a>>>0))*x(x(u[(f<<2)+e>>2]-c)/x(g-a>>>0))))}d=(a<<2)+e|0;c=u[d>>2];return x(c+x(x(b-x(w(a,h)>>>0))*x(x(u[d+4>>2]-c)/i)))}function Qs(a){var b=0;b=q[a>>2];if(b>>>0<=5){a:{switch(b-1|0){default:b=a+8|0;u[b>>2]=-u[b>>2];a=a+12|0;u[a>>2]=-u[a>>2];return;case 0:b=a+44|0;u[b>>2]=-u[b>>2];b=a+56|0;u[b>>2]=-u[b>>2];b=a+48|0;u[b>>2]=-u[b>>2];b=a+60|0;u[b>>2]=-u[b>>2];b=a+68|0;u[b>>2]=-u[b>>2];b=a+80|0;u[b>>2]=-u[b>>2];b=a+72|0;u[b>>2]=-u[b>>2];b=a+84|0;u[b>>2]=-u[b>>2];b=a+92|0;u[b>>2]=-u[b>>2];b=a+104|0;u[b>>2]=-u[b>>2];b=a+96|0;u[b>>2]=-u[b>>2];a=a+108|0;u[a>>2]=-u[a>>2];return;case 1:b=a+152|0;u[b>>2]=-u[b>>2];b=a+164|0;u[b>>2]=-u[b>>2];b=a+156|0;u[b>>2]=-u[b>>2];b=a+168|0;u[b>>2]=-u[b>>2];b=a+176|0;u[b>>2]=-u[b>>2];b=a+188|0;u[b>>2]=-u[b>>2];b=a+180|0;u[b>>2]=-u[b>>2];a=a+192|0;u[a>>2]=-u[a>>2];return;case 2:b=a+288|0;u[b>>2]=-u[b>>2];a=a+300|0;u[a>>2]=-u[a>>2];return;case 3:b=a+336|0;u[b>>2]=-u[b>>2];a=a+348|0;u[a>>2]=-u[a>>2];return;case 4:break a}}kj(q[a+276>>2]+4|0);kj(q[a+276>>2]+48|0)}}function as(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=ue-48|0;ue=h;f=q[c+4>>2];j=f;l=f;g=f;e=q[c>>2];i=q[b+4>>2];c=q[b>>2];f=c;k=e-c<<3;d=q[a+4>>2];b=i;g=k+((d-b|0)+g|0)|0;q[a+4>>2]=g;a:{if(!(!d|(g+ -1^d+ -1)>>>0>31)){a=q[a>>2];break a}a=q[a>>2];if(g>>>0<=32){q[a>>2]=0;break a}q[(g+ -1>>>3&536870908)+a>>2]=0}a=(d>>>3&536870908)+a|0;d=d&31;b:{if((d|0)==(b|0)){d=(l-b|0)+k|0;c:{if((d|0)<1){break c}d:{if(!b){c=0;break d}e=32-b|0;c=(d|0)<(e|0)?d:e;e=-1<>>e-c;q[a>>2]=q[a>>2]&(e^-1)|e&q[f>>2];d=d-c|0;b=b+c|0;c=b&31;a=(b>>>3&536870908)+a|0;f=f+4|0}b=(d|0)/32|0;e=b<<2;a=mV(a,f,e)+e|0;b=d-(b<<5)|0;if((b|0)<1){b=c;break c}c=-1>>>32-b|0;q[a>>2]=q[a>>2]&(c^-1)|c&q[e+f>>2]}q[h+20>>2]=b;q[h+16>>2]=a;break b}b=h;q[b+32>>2]=e;q[b+36>>2]=j;q[b+40>>2]=c;q[b+44>>2]=i;q[b+28>>2]=d;q[b+24>>2]=a;q[b+8>>2]=c;q[b+12>>2]=i;q[b>>2]=e;q[b+4>>2]=j;bs(b+16|0,b+8|0,b,b+24|0)}ue=h+48|0}function bO(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0;i=ue-32|0;ue=i;q[i+16>>2]=c;q[i+24>>2]=b;EH(i+8|0,d);j=WH(i+8|0);kL(i+8|0);q[e>>2]=0;c=0;a:{while(1){if(c|(g|0)==(h|0)){break a}b:{if($H(i+24|0,i+16|0)){break b}c:{if((cO(j,q[g>>2])|0)==37){c=g+4|0;if((h|0)==(c|0)){break b}k=0;b=cO(j,q[c>>2]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}g=g+8|0;if((g|0)==(h|0)){break b}k=b;b=cO(j,q[g>>2])}l=i,m=n[q[q[a>>2]+36>>2]](a,q[i+24>>2],q[i+16>>2],d,e,f,b,k)|0,q[l+24>>2]=m;g=c+8|0;break c}if(ZH(j,8192,q[g>>2])){while(1){e:{g=g+4|0;if((h|0)==(g|0)){g=h;break e}if(ZH(j,8192,q[g>>2])){continue}}break}while(1){if(!XH(i+24|0,i+16|0)){break c}if(!ZH(j,8192,YH(i+24|0))){break c}_H(i+24|0);continue}}if((HI(j,YH(i+24|0))|0)==(HI(j,q[g>>2])|0)){g=g+4|0;_H(i+24|0);break c}q[e>>2]=4}c=q[e>>2];continue}break}q[e>>2]=4}if($H(i+24|0,i+16|0)){q[e>>2]=q[e>>2]|2}ue=i+32|0;return q[i+24>>2]}function FG(a,b){var c=0,d=0,g=0,h=0,i=x(0);a:{d=(k(b),e(0));h=d&2147483647;if(h>>>0<=2139095040){c=(k(a),e(0));g=c&2147483647;if(g>>>0<2139095041){break a}}return x(a+b)}if((d|0)==1065353216){return EG(a)}d=d>>>30&2;c=d|c>>>31;b:{c:{d:{e:{if(!g){f:{switch(c-2|0){case 0:break e;case 1:break f;default:break d}}return x(-3.1415927410125732)}if((h|0)!=2139095040){if(!h|!(h+218103808>>>0>=g>>>0?(g|0)!=2139095040:0)){break b}g:{if(g+218103808>>>0>>0){i=x(0);if(d){break g}}i=EG(x(y(x(a/b))))}b=i;if(c>>>0<=2){a=b;h:{switch(c-1|0){case 0:return x(-b);case 1:break h;default:break d}}return x(x(3.1415927410125732)-x(b+x(8.742277657347586e-8)))}return x(x(b+x(8.742277657347586e-8))+x(-3.1415927410125732))}if((g|0)==2139095040){break c}return u[(c<<2)+347680>>2]}a=x(3.1415927410125732)}return a}return u[(c<<2)+347664>>2]}return f(0,(k(a),e(0))&-2147483648|1070141403),j()}function Af(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=ue-16|0;ue=e;d=q[a+8>>2];c=q[a+4>>2];a:{if(d-c>>2>>>0>=b>>>0){d=a;a=b<<2;i=d,j=lV(c,0,a)+a|0,q[i+4>>2]=j;break a}f=q[a>>2];h=c-f>>2;g=h+b|0;b:{c:{if(g>>>0<1073741824){c=0;d=d-f|0;f=d>>1;f=d>>2>>>0<536870911?f>>>0>>0?g:f:1073741823;d:{if(!f){break d}wt(e);c=n[q[e+8>>2]](e,f<<2)|0;d=q[q[e+12>>2]+4>>2];if(!d){break d}n[d](q[e>>2])}d=(h<<2)+c|0;lV(d,0,b<<2);g=(g<<2)+c|0;f=(f<<2)+c|0;b=q[a>>2];c=q[a+4>>2];if((b|0)==(c|0)){break c}while(1){c=c+ -4|0;h=q[c>>2];q[c>>2]=0;d=d+ -4|0;q[d>>2]=h;if((b|0)!=(c|0)){continue}break}b=q[a+4>>2];c=q[a>>2];break b}kU();F()}c=b}q[a+4>>2]=g;q[a>>2]=d;g=q[a+8>>2];q[a+8>>2]=f;if((b|0)!=(c|0)){while(1){b=b+ -4|0;a=q[b>>2];q[b>>2]=0;if(a){_U(a)}if((b|0)!=(c|0)){continue}break}}if(!c){break a}xt(e);n[q[e+8>>2]](e,c,g-c|0);a=q[q[e+12>>2]+4>>2];if(!a){break a}n[a](q[e>>2])}ue=e+16|0}function _q(a){a=a|0;var b=0,c=0,d=0;q[a>>2]=5940;b=q[a+92>>2];if(b){q[a+96>>2]=b;_U(b)}d=q[a+80>>2];if(d){b=q[a+84>>2];c=d;a:{if((d|0)==(b|0)){break a}while(1){c=b+ -244|0;if(o[b+ -233|0]<=-1){_U(q[c>>2])}b=c;if((b|0)!=(d|0)){continue}break}c=q[a+80>>2]}q[a+84>>2]=d;_U(c)}d=q[a+68>>2];if(d){b=q[a+72>>2];c=d;b:{if((d|0)==(b|0)){break b}while(1){c=b+ -244|0;if(o[b+ -233|0]<=-1){_U(q[c>>2])}b=c;if((b|0)!=(d|0)){continue}break}c=q[a+68>>2]}q[a+72>>2]=d;_U(c)}d=q[a+56>>2];if(d){b=q[a+60>>2];c=d;c:{if((d|0)==(b|0)){break c}while(1){c=b+ -16|0;if(o[b+ -5|0]<=-1){_U(q[c>>2])}b=c;if((b|0)!=(d|0)){continue}break}c=q[a+56>>2]}q[a+60>>2]=d;_U(c)}d=q[a+44>>2];if(d){b=q[a+48>>2];c=d;d:{if((d|0)==(b|0)){break d}while(1){c=b+ -24|0;if(o[b+ -13|0]<=-1){_U(q[c>>2])}b=c;if((b|0)!=(d|0)){continue}break}c=q[a+44>>2]}q[a+48>>2]=d;_U(c)}if(o[a+27|0]<=-1){_U(q[a+16>>2])}return a|0}function FN(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0;i=ue-32|0;ue=i;q[i+16>>2]=c;q[i+24>>2]=b;EH(i+8|0,d);j=FH(i+8|0);kL(i+8|0);q[e>>2]=0;c=0;a:{while(1){if(c|(g|0)==(h|0)){break a}b:{if(KH(i+24|0,i+16|0)){break b}c:{if((GN(j,o[g|0])|0)==37){c=g+1|0;if((h|0)==(c|0)){break b}k=0;b=GN(j,o[c|0]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}g=g+2|0;if((g|0)==(h|0)){break b}k=b;b=GN(j,o[g|0])}l=i,m=n[q[q[a>>2]+36>>2]](a,q[i+24>>2],q[i+16>>2],d,e,f,b,k)|0,q[l+24>>2]=m;g=c+2|0;break c}if(IH(j,8192,o[g|0])){while(1){e:{g=g+1|0;if((h|0)==(g|0)){g=h;break e}if(IH(j,8192,o[g|0])){continue}}break}while(1){if(!GH(i+24|0,i+16|0)){break c}if(!IH(j,8192,HH(i+24|0))){break c}JH(i+24|0);continue}}if((tL(j,HH(i+24|0))|0)==(tL(j,o[g|0])|0)){g=g+1|0;JH(i+24|0);break c}q[e>>2]=4}c=q[e>>2];continue}break}q[e>>2]=4}if(KH(i+24|0,i+16|0)){q[e>>2]=q[e>>2]|2}ue=i+32|0;return q[i+24>>2]}function ey(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0;m=RB(b,k,c,d);l=q[a+20>>2];q[a+20>>2]=m;if(l){n[q[q[l>>2]+12>>2]](l)}m=RB(b,g,c,d);l=q[a+4>>2];q[a+4>>2]=m;if(l){n[q[q[l>>2]+12>>2]](l)}m=RB(b,j,c,d);l=q[a+16>>2];q[a+16>>2]=m;if(l){n[q[q[l>>2]+12>>2]](l)}m=RB(b,h,c,d);l=q[a+8>>2];q[a+8>>2]=m;if(l){n[q[q[l>>2]+12>>2]](l)}m=RB(b,f,c,d);l=q[a>>2];q[a>>2]=m;if(l){n[q[q[l>>2]+12>>2]](l)}l=RB(b,i,c,d);d=q[a+12>>2];q[a+12>>2]=l;if(d){n[q[q[d>>2]+12>>2]](d)}f=RB(b,f,c,e);d=q[a+24>>2];q[a+24>>2]=f;if(d){n[q[q[d>>2]+12>>2]](d)}f=RB(b,h,c,e);d=q[a+32>>2];q[a+32>>2]=f;if(d){n[q[q[d>>2]+12>>2]](d)}f=RB(b,g,c,e);d=q[a+28>>2];q[a+28>>2]=f;if(d){n[q[q[d>>2]+12>>2]](d)}f=RB(b,i,c,e);d=q[a+36>>2];q[a+36>>2]=f;if(d){n[q[q[d>>2]+12>>2]](d)}f=RB(b,j,c,e);d=q[a+44>>2];q[a+44>>2]=f;if(d){n[q[q[d>>2]+12>>2]](d)}c=RB(b,k,c,e);b=q[a+40>>2];q[a+40>>2]=c;if(b){n[q[q[b>>2]+12>>2]](b)}}function Do(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=ue-32|0;ue=e;a:{b:{f=q[b+4>>2];if(!f){break b}if(r[b|0]){q[e+24>>2]=c;if(s[c>>1]){f=c;while(1){g=g+1|0;h=s[f+2>>1];f=f+2|0;if(h){continue}break}}q[e+28>>2]=g;h=b+8|0;f=Eo(h,e+24|0);if(f){q[f+20>>2]=q[f+20>>2]+1;q[a>>2]=0;b=q[f+16>>2];if(!b){q[a>>2]=b;break a}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[f+16>>2];break a}b=q[b+4>>2];n[q[q[b>>2]+20>>2]](e+24|0,b,c,q[d>>2]);b=q[e+24>>2];if(!b){break b}d=b+8|0;g=0;if(s[c>>1]){f=c;while(1){g=g+1|0;i=s[f+2>>1];f=f+2|0;if(i){continue}break}}Fo(d,c,g);f=d;c=r[b+19|0];d=c<<24>>24<0;q[e+16>>2]=d?q[b+8>>2]:f;q[e+20>>2]=d?q[b+12>>2]:c;q[e+8>>2]=0;n[q[q[b>>2]>>2]](b)|0;q[e+12>>2]=1;q[e+8>>2]=b;Go(e+24|0,h,e+16|0,e+16|0,e+8|0);c=q[e+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e+8>>2]=0}q[a>>2]=b;break a}n[q[q[f>>2]+20>>2]](e+24|0,f,c,q[d>>2]);q[a>>2]=q[e+24>>2];break a}q[a>>2]=0}ue=e+32|0}function cp(a,b){var c=0,d=0,e=0,f=0,g=0;c=q[a>>2];f=q[a+4>>2]-c>>2;d=f+1|0;a:{b:{c:{if(d>>>0<1073741824){c=q[a+8>>2]-c|0;g=c>>1;c=c>>2>>>0<536870911?g>>>0>>0?d:g:1073741823;if(c){if(c>>>0>=1073741824){break c}e=_S(c<<2)}d=(f<<2)+e|0;q[d>>2]=0;f=c<<2;c=q[b>>2];d:{if(!c){break d}n[q[q[c>>2]>>2]](c)|0;c=q[d>>2];if(!c){break d}n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}f=e+f|0;q[d>>2]=q[b>>2];g=d+4|0;b=q[a+4>>2];e=q[a>>2];if((b|0)==(e|0)){break b}while(1){d=d+ -4|0;q[d>>2]=0;b=b+ -4|0;c=q[b>>2];e:{if(!c){break e}n[q[q[c>>2]>>2]](c)|0;c=q[d>>2];if(!c){break e}n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}q[d>>2]=q[b>>2];if((b|0)!=(e|0)){continue}break}e=q[a+4>>2];b=q[a>>2];break a}kU();F()}Ue(5528);F()}b=e}q[a+8>>2]=f;q[a+4>>2]=g;q[a>>2]=d;if((b|0)!=(e|0)){while(1){e=e+ -4|0;a=q[e>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[e>>2]=0}if((b|0)!=(e|0)){continue}break}}if(b){_U(b)}}function Xy(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=q[a+8>>2];e=q[a+4>>2];if(d-e>>2>>>0>=b>>>0){c=a;a=b<<2;j=c,k=lV(e,0,a)+a|0,q[j+4>>2]=k;return}g=q[a>>2];c=e-g>>2;f=c+b|0;a:{b:{c:{if(f>>>0<1073741824){h=c<<2;d=d-g|0;c=d>>1;c=d>>2>>>0<536870911?c>>>0>>0?f:c:1073741823;if(c){if(c>>>0>=1073741824){break c}i=_S(c<<2)}d=h+i|0;h=lV(d,0,b<<2);f=(f<<2)+i|0;b=(c<<2)+i|0;if((e|0)==(g|0)){break b}while(1){d=d+ -4|0;q[d>>2]=0;e=e+ -4|0;c=q[e>>2];d:{if(!c){break d}n[q[q[c>>2]>>2]](c)|0;c=q[d>>2];if(!c){break d}n[q[q[c>>2]+8>>2]](c)|0;q[d>>2]=0}q[d>>2]=q[e>>2];if((e|0)!=(g|0)){continue}break}q[a+8>>2]=b;b=q[a+4>>2];q[a+4>>2]=f;e=q[a>>2];q[a>>2]=d;if((b|0)==(e|0)){break a}while(1){b=b+ -4|0;a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}if((b|0)!=(e|0)){continue}break}break a}kU();F()}Ue(337013);F()}q[a+8>>2]=b;q[a+4>>2]=f;q[a>>2]=h}if(e){_U(e)}}function ns(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0);f=q[b>>2];e=q[b+4>>2]-f>>4;g=e+ -1|0;h=x(C(c));a:{if(x(y(h))0?d:0;d=(d|0)>(e|0)?g:d;if(!((d|0)>=q[b- -64>>2]|!(q[q[b+60>>2]+(d>>>3&536870908)>>2]>>>(d&31)&1))){b=f+(d<<4)|0;d=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=d;d=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=d;return}e=f;f=d<<4;e=e+f|0;h=u[e>>2];g=f+q[b+12>>2]|0;j=u[g>>2];i=f+q[b+24>>2]|0;k=u[i>>2];b=f+q[b+36>>2]|0;l=u[b>>2];m=u[e+4>>2];n=u[g+4>>2];o=u[i+4>>2];p=u[b+4>>2];r=u[e+8>>2];s=u[g+8>>2];t=u[i+8>>2];v=u[b+8>>2];c=x(c-x(d|0));u[a+12>>2]=x(c*x(x(c*x(x(c*u[b+12>>2])+u[i+12>>2]))+u[g+12>>2]))+u[e+12>>2];u[a+8>>2]=r+x(c*x(s+x(c*x(t+x(c*v)))));u[a+4>>2]=m+x(c*x(n+x(c*x(o+x(c*p)))));u[a>>2]=h+x(c*x(j+x(c*x(k+x(c*l)))))}function zN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=ue-384|0;ue=a;q[a+376>>2]=37;q[a+380>>2]=0;g=iN(a+376|1,355369,q[c+4>>2]);q[a+332>>2]=a+336;f=fM();a:{if(g){i=q[c+8>>2];v[a+40>>3]=e;q[a+32>>2]=i;f=aN(a+336|0,30,f,a+376|0,a+32|0);break a}v[a+48>>3]=e;f=aN(a+336|0,30,f,a+376|0,a+48|0)}q[a+80>>2]=857;i=rL(a+320|0,0,a+80|0);b:{if((f|0)>=30){f=fM();c:{if(g){g=q[c+8>>2];v[a+8>>3]=e;q[a>>2]=g;f=jN(a+332|0,f,a+376|0,a);break c}v[a+16>>3]=e;f=jN(a+332|0,f,a+376|0,a+16|0)}g=q[a+332>>2];if(!g){break b}sL(i,g)}h=q[a+332>>2];g=h+f|0;k=bN(h,g,c);q[a+80>>2]=857;h=rL(a+72|0,0,a+80|0);d:{if(q[a+332>>2]==(a+336|0)){f=a+80|0;j=a+336|0;break d}f=ZU(f<<3);if(!f){break b}sL(h,f);j=q[a+332>>2]}EH(a+56|0,c);AN(j,k,g,f,a+68|0,a- -64|0,a+56|0);kL(a+56|0);b=tN(b,f,q[a+68>>2],q[a+64>>2],c,d);wL(h);wL(i);ue=a+384|0;return b|0}TG();F()}function rq(a,b){var c=0,d=0,e=0,f=0,g=0;e=q[a>>2];g=(q[a+4>>2]-e|0)/24|0;c=g+1|0;a:{b:{c:{if(c>>>0<178956971){e=(q[a+8>>2]-e|0)/24|0;f=e<<1;e=e>>>0<89478485?f>>>0>>0?c:f:178956970;d=0;d:{if(!e){break d}if(e>>>0>=178956971){break c}d=_S(w(e,24))}c=d+w(g,24)|0;mT(c,b);q[c+20>>2]=q[b+20>>2];g=q[b+16>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=g;e=d+w(e,24)|0;g=c+24|0;b=q[a+4>>2];d=q[a>>2];if((b|0)==(d|0)){break b}while(1){b=b+ -24|0;f=q[b+4>>2];c=c+ -24|0;q[c>>2]=q[b>>2];q[c+4>>2]=f;f=b+8|0;q[c+8>>2]=q[f>>2];q[b>>2]=0;q[b+4>>2]=0;q[f>>2]=0;q[c+20>>2]=q[b+20>>2];f=q[b+16>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=f;if((b|0)!=(d|0)){continue}break}d=q[a+4>>2];b=q[a>>2];break a}kU();F()}Ue(6104);F()}b=d}q[a+8>>2]=e;q[a+4>>2]=g;q[a>>2]=c;if((b|0)!=(d|0)){while(1){a=d+ -24|0;if(o[d+ -13|0]<=-1){_U(q[a>>2])}d=a;if((a|0)!=(b|0)){continue}break}}if(b){_U(b)}}function hN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=ue-208|0;ue=a;q[a+200>>2]=37;q[a+204>>2]=0;g=iN(a+200|1,355369,q[c+4>>2]);q[a+156>>2]=a+160;f=fM();a:{if(g){i=q[c+8>>2];v[a+40>>3]=e;q[a+32>>2]=i;f=aN(a+160|0,30,f,a+200|0,a+32|0);break a}v[a+48>>3]=e;f=aN(a+160|0,30,f,a+200|0,a+48|0)}q[a+80>>2]=857;i=rL(a+144|0,0,a+80|0);b:{if((f|0)>=30){f=fM();c:{if(g){g=q[c+8>>2];v[a+8>>3]=e;q[a>>2]=g;f=jN(a+156|0,f,a+200|0,a);break c}v[a+16>>3]=e;f=jN(a+156|0,f,a+200|0,a+16|0)}g=q[a+156>>2];if(!g){break b}sL(i,g)}h=q[a+156>>2];g=h+f|0;k=bN(h,g,c);q[a+80>>2]=857;h=rL(a+72|0,0,a+80|0);d:{if(q[a+156>>2]==(a+160|0)){f=a+80|0;j=a+160|0;break d}f=ZU(f<<1);if(!f){break b}sL(h,f);j=q[a+156>>2]}EH(a+56|0,c);kN(j,k,g,f,a+68|0,a- -64|0,a+56|0);kL(a+56|0);b=Ut(b,f,q[a+68>>2],q[a+64>>2],c,d);wL(h);wL(i);ue=a+208|0;return b|0}TG();F()}function Yo(a,b){var c=0,d=0,e=0,f=0,g=0;f=ue-16|0;ue=f;a:{if(!q[a+4>>2]|!q[b>>2]){break a}c=q[a+8>>2];g=a+12|0;if((c|0)!=(g|0)){while(1){b:{d=c;c=q[c+584>>2];c:{if(!c){if(!q[b>>2]){break b}break c}n[q[q[c>>2]>>2]](c)|0;e=q[b>>2];c=q[d+584>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;if((c|0)!=(e|0)){break c}break b}if((c|0)==(e|0)){break b}}e=q[d+4>>2];d:{if(!e){c=q[d+8>>2];if((d|0)==q[c>>2]){break d}d=d+8|0;while(1){e=q[d>>2];d=e+8|0;c=q[e+8>>2];if((e|0)!=q[c>>2]){continue}break}break d}while(1){c=e;e=q[c>>2];if(e){continue}break}}if((c|0)!=(g|0)){continue}break a}break}c=d}if((c|0)==(g|0)){break a}d=q[c+588>>2];q[c+588>>2]=d+ -1;if((d|0)>1){break a}Zo(a+8|0,c);d=q[a+4>>2];q[f+8>>2]=0;c=f;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[c+8>>2]=a;n[q[q[d>>2]+24>>2]](d,f+8|0);a=q[f+8>>2];if(!a){break a}n[q[q[a>>2]+8>>2]](a)|0;q[f+8>>2]=0}ue=f+16|0}function Bi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=x(0),j=0,k=0;f=ue-16|0;ue=f;n[q[q[c>>2]+60>>2]](f+8|0,c);g=q[f+8>>2];if(g){j=a+4024|0,k=n[q[q[a>>2]+8>>2]](a)|0,q[j>>2]=k;i=u[d+8>>2];o[a+4028|0]=r[a+2465|0];u[a+4020>>2]=i/x(60);o[a+4029|0]=r[a+2464|0];h=q[a+3444>>2];d=a+4032|0;q[d>>2]=q[a+3440>>2];q[d+4>>2]=h;j=a+4040|0,k=(n[q[q[c>>2]+36>>2]](c)|0)==1,o[j|0]=k;c=n[q[q[a>>2]+8>>2]](a)|0;i=x(n[q[q[c>>2]+32>>2]](c));q[a+4060>>2]=a+2476;q[a+4056>>2]=a+2288;u[a+4044>>2]=i;d=a+3452|0;h=q[d+4>>2];c=a+4048|0;q[c>>2]=q[d>>2];q[c+4>>2]=h;o[a+4256|0]=q[a+180>>2]==5;n[q[q[a>>2]+44>>2]](f,a);d=q[f>>2];q[f>>2]=0;h=a+4020|0;c=q[a+4260>>2];a:{if(!c){q[a+4260>>2]=d;break a}n[q[q[c>>2]+8>>2]](c)|0;c=q[f>>2];q[a+4260>>2]=d;if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[f>>2]=0}n[q[q[g>>2]+20>>2]](g,h,b,e);n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Nf(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=q[a+20>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[a+20>>2]=0}f=q[a+12>>2];a:{b:{if(!f){break b}if((rp(f)|0)<1){break b}while(1){f=q[q[a+12>>2]+16>>2]+(g<<2)|0;h=q[f>>2];i=0;c:{if(!h){break c}n[q[q[h>>2]>>2]](h)|0;i=q[f>>2]}f=i;if(n[q[q[f>>2]+20>>2]](f,b,c)){if(f){n[q[q[f>>2]>>2]](f)|0}g=q[a+20>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0;q[a+20>>2]=0}q[a+20>>2]=f;if(!f){break a}n[q[q[f>>2]+8>>2]](f)|0;break b}if(f){n[q[q[f>>2]+8>>2]](f)|0}g=g+1|0;if((g|0)<(rp(q[a+12>>2])|0)){continue}break}}f=q[a+20>>2]}g=0;d:{if(!f){break d}if(!n[q[q[f>>2]+20>>2]](f,b,c)){break d}f=q[a+20>>2];if(!n[q[q[f>>2]+28>>2]](f,a,b,c,d,e)){break d}if(e){if(s[e>>1]){f=e;while(1){g=g+1|0;h=s[f+2>>1];f=f+2|0;if(h){continue}break}}Yf(a+232|0,e,g)}g=1;f=q[a+20>>2];if(!n[q[q[f>>2]+44>>2]](f)){break d}n[q[q[a>>2]+172>>2]](a,b,c,e)}return g}function Lo(a,b,c){var d=0,e=0,f=0,g=0,h=0;e=ue-32|0;ue=e;a:{b:{d=q[b+4>>2];if(!d){break b}if(r[b|0]){q[e+24>>2]=c;if(s[c>>1]){d=c;while(1){f=f+1|0;g=s[d+2>>1];d=d+2|0;if(g){continue}break}}q[e+28>>2]=f;g=b+8|0;d=Eo(g,e+24|0);if(d){q[d+20>>2]=q[d+20>>2]+1;q[a>>2]=0;b=q[d+16>>2];if(!b){q[a>>2]=b;break a}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[d+16>>2];break a}b=q[b+4>>2];n[q[q[b>>2]+20>>2]](e+24|0,b,c);b=q[e+24>>2];if(!b){break b}f=0;if(s[c>>1]){d=c;while(1){f=f+1|0;h=s[d+2>>1];d=d+2|0;if(h){continue}break}}d=b+8|0;Fo(d,c,f);f=d;c=r[b+19|0];d=c<<24>>24<0;q[e+16>>2]=d?q[b+8>>2]:f;q[e+20>>2]=d?q[b+12>>2]:c;q[e+8>>2]=0;n[q[q[b>>2]>>2]](b)|0;q[e+12>>2]=1;q[e+8>>2]=b;Go(e+24|0,g,e+16|0,e+16|0,e+8|0);c=q[e+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[e+8>>2]=0}q[a>>2]=b;break a}n[q[q[d>>2]+20>>2]](e+24|0,d,c);q[a>>2]=q[e+24>>2];break a}q[a>>2]=0}ue=e+32|0}function vr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-32|0;ue=f;a:{if(r[a+36|0]|!b){break a}b:{c=q[a+24>>2];if((q[a+28>>2]-c|0)<1){break b}while(1){d=c;c=w(g,36);d=d+c|0;e=q[d>>2];n[q[q[b>>2]+20>>2]](f+16|0,b,q[d+4>>2]-e|0,e,0);e=q[a+24>>2];h=q[f+16>>2];q[f+16>>2]=0;d=c+e|0;e=d+24|0;d=q[d+24>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[e>>2]=0}q[e>>2]=h;e=q[f+16>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+16>>2]=0}d=c;c=q[a+24>>2];if(!q[(d+c|0)+24>>2]){break a}e=w(g,36);d=e+c|0;c=q[d+12>>2];n[q[q[b>>2]+24>>2]](f+16|0,b,w((q[d+16>>2]-c|0)/12|0,3),c,1);c=q[a+24>>2];h=q[f+16>>2];q[f+16>>2]=0;d=c+e|0;c=d+28|0;d=q[d+28>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c>>2]=0}q[c>>2]=h;c=q[f+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[f+16>>2]=0}c=q[a+24>>2];if(q[(e+c|0)+28>>2]){g=g+1|0;if((g|0)>=((q[a+28>>2]-c|0)/36|0)){break b}continue}break}break a}o[a+36|0]=1}ue=f+32|0}function Rj(a,b,c,d,e,f){var g=x(0),h=0,i=0,j=x(0);h=q[c>>2];a:{if(h>>>0>3){break a}b:{switch(h-1|0){default:if(q[c+4>>2]>-1){break a}return u[c+8>>2];case 0:i=a,j=x(n[q[q[b>>2]+16>>2]](b,u[c+16>>2],u[c+12>>2])),u[i>>2]=j;d=a;g=x(n[q[q[b>>2]+16>>2]](b,x(q[c+24>>2]),x(q[c+20>>2])));c:{if(x(y(g))>2]=e;i=a,j=x(n[q[q[b>>2]+16>>2]](b,u[c+32>>2],u[c+28>>2])),u[i+8>>2]=j;i=a,j=x(n[q[q[b>>2]+16>>2]](b,u[c+40>>2],u[c+36>>2])),u[i+12>>2]=j;d=a;g=x(n[q[q[b>>2]+16>>2]](b,x(q[c+48>>2]),x(q[c+44>>2])));d:{if(x(y(g))>2]=e;i=a,j=x(n[q[q[b>>2]+16>>2]](b,u[c+56>>2],u[c+52>>2])),u[i+20>>2]=j;return x(0);case 1:ys(c+60|0,a,e,f,d,b);return x(0);case 2:break b}}d=a;a=q[c+156>>2];i=d,j=x(n[q[q[b>>2]+16>>2]](b,u[a+44>>2],u[a+40>>2])),u[i>>2]=j}return x(0)}function MM(a,b,c,d,e){var f=0;f=ue-384|0;ue=f;q[f+368>>2]=b;q[f+376>>2]=a;HM(f+216|0,c,f+240|0,f+236|0,f+232|0);b=CL(f+200|0);EL(b,DL(b));a=vL(b,0);q[f+196>>2]=a;q[f+28>>2]=f+32;q[f+24>>2]=0;o[f+23|0]=1;o[f+22|0]=69;while(1){a:{if(!XH(f+376|0,f+368|0)){break a}if(q[f+196>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+196>>2]=c+a}if(IM(YH(f+376|0),f+23|0,f+22|0,a,f+196|0,q[f+236>>2],q[f+232>>2],f+216|0,f+32|0,f+28|0,f+24|0,f+240|0)){break a}_H(f+376|0);continue}break}b:{if(!uL(f+216|0)|!r[f+23|0]){break b}c=q[f+28>>2];if((c-(f+32|0)|0)>159){break b}q[f+28>>2]=c+4;q[c>>2]=q[f+24>>2]}cM(f,a,q[f+196>>2],d);a=q[f+4>>2];q[e>>2]=q[f>>2];q[e+4>>2]=a;a=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=a;HL(f+216|0,f+32|0,q[f+28>>2],d);if($H(f+376|0,f+368|0)){q[d>>2]=q[d>>2]|2}a=q[f+376>>2];oT(b);oT(f+216|0);ue=f+384|0;return a}function bM(a,b,c,d,e){var f=0;f=ue-288|0;ue=f;q[f+272>>2]=b;q[f+280>>2]=a;WL(f+224|0,c,f+240|0,f+239|0,f+238|0);b=CL(f+208|0);EL(b,DL(b));a=vL(b,0);q[f+204>>2]=a;q[f+28>>2]=f+32;q[f+24>>2]=0;o[f+23|0]=1;o[f+22|0]=69;while(1){a:{if(!GH(f+280|0,f+272|0)){break a}if(q[f+204>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+204>>2]=c+a}if(XL(HH(f+280|0),f+23|0,f+22|0,a,f+204|0,o[f+239|0],o[f+238|0],f+224|0,f+32|0,f+28|0,f+24|0,f+240|0)){break a}JH(f+280|0);continue}break}b:{if(!uL(f+224|0)|!r[f+23|0]){break b}c=q[f+28>>2];if((c-(f+32|0)|0)>159){break b}q[f+28>>2]=c+4;q[c>>2]=q[f+24>>2]}cM(f,a,q[f+204>>2],d);a=q[f+4>>2];q[e>>2]=q[f>>2];q[e+4>>2]=a;a=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=a;HL(f+224|0,f+32|0,q[f+28>>2],d);if(KH(f+280|0,f+272|0)){q[d>>2]=q[d>>2]|2}a=q[f+280>>2];oT(b);oT(f+224|0);ue=f+288|0;return a}function ly(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=q[a+32>>2];if(b){n[q[q[b>>2]+16>>2]](b);while(1){b=zu(q[a+32>>2]+8|0,6);c=e<<2;d=c|2;o[b+10|0]=d;o[b+11|0]=d>>>8;o[b+8|0]=c;o[b+9|0]=c>>>8;d=c|3;o[b+6|0]=d;o[b+7|0]=d>>>8;o[b+4|0]=c;o[b+5|0]=c>>>8;c=c|1;o[b+2|0]=c;o[b+3|0]=c>>>8;o[b|0]=d;o[b+1|0]=d>>>8;b=e>>>0<(w(q[a+40>>2],352)>>>0)/24>>>2>>>0;e=e+1|0;if(b){continue}break}b=q[a+32>>2];n[q[q[b>>2]+20>>2]](b)}b=q[a+36>>2];if(b){n[q[q[b>>2]+16>>2]](b);e=0;while(1){b=zu(q[a+36>>2]+8|0,8);c=e<<2;d=c|3;o[b+14|0]=d;o[b+15|0]=d>>>8;f=c|1;o[b+12|0]=f;o[b+13|0]=f>>>8;g=c|2;o[b+10|0]=g;o[b+11|0]=g>>>8;o[b+8|0]=c;o[b+9|0]=c>>>8;o[b+6|0]=d;o[b+7|0]=d>>>8;o[b+4|0]=g;o[b+5|0]=g>>>8;o[b+2|0]=f;o[b+3|0]=f>>>8;o[b|0]=c;o[b+1|0]=c>>>8;b=e>>>0<(w(q[a+40>>2],352)>>>0)/24>>>2>>>0;e=e+1|0;if(b){continue}break}a=q[a+36>>2];n[q[q[a>>2]+20>>2]](a)}}function dr(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=ue-16|0;ue=e;a:{g=c-b|0;f=(g|0)/12|0;h=q[a+8>>2];d=q[a>>2];i=h-d|0;b:{if(f>>>0<=(i|0)/12>>>0){g=(q[a+4>>2]-d|0)/12|0;h=f>>>0>g>>>0?w(g,12)+b|0:c;i=h-b|0;j=(i|0)/12|0;if(i){mV(d,b,i)}if(f>>>0>g>>>0){b=c-h|0;if((b|0)<1){break b}kV(q[a+4>>2],h,b);q[a+4>>2]=q[a+4>>2]+w((b>>>0)/12|0,12);break b}q[a+4>>2]=d+w(j,12);break b}if(d){q[a+4>>2]=d;xt(e);n[q[e+8>>2]](e,d,i);c=q[q[e+12>>2]+4>>2];if(c){n[c](q[e>>2])}q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;h=0}if(f>>>0>=357913942){break a}c=(h|0)/12|0;d=c<<1;d=c>>>0<178956970?d>>>0>>0?f:d:357913941;if(d>>>0>=357913942){break a}wt(e);c=n[q[e+8>>2]](e,w(d,12))|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+w(d,12);if((g|0)<1){break b}kV(c,b,g);q[a+4>>2]=q[a+4>>2]+w((g>>>0)/12|0,12)}ue=e+16|0;return}kU();F()}function Pt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;h=q[b+44>>2];i=q[b+24>>2];if(h>>>0>>0){q[b+44>>2]=i;h=i}m=-1;n=-1;p=f&24;a:{if(!p|((p|0)==24?(e|0)==1:0)){break a}if(h){g=b+32|0;j=h;if(o[b+43|0]<=-1){g=q[g>>2]}g=j-g|0;j=g;g=g>>31}if(e>>>0>2){break a}b:{c:{switch(e-1|0){case 0:if(f&8){e=q[b+12>>2]-q[b+8>>2]|0;k=e;l=e>>31;break b}e=i-q[b+20>>2]|0;k=e;l=e>>31;break b;case 1:break c;default:break b}}k=j;l=g}e=d+l|0;c=c+k|0;if(c>>>0>>0){e=e+1|0}d=c;c=e;if(((e|0)<0?1:(e|0)<=0?d>>>0>=0?0:1:0)|((g|0)<(e|0)?1:(g|0)<=(e|0)?j>>>0>=d>>>0?0:1:0)){break a}e=f&8;d:{if(!(c|d)){break d}if(q[b+12>>2]?0:e){break a}if(!(f&16)){break d}if(!i){break a}}if(e){q[b+16>>2]=h;q[b+12>>2]=d+q[b+8>>2]}if(f&16){q[b+24>>2]=d+q[b+20>>2]}m=d;n=c}q[a+8>>2]=m;q[a+12>>2]=n;q[a>>2]=0;q[a+4>>2]=0}function cr(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=ue-16|0;ue=e;a:{g=c-b|0;f=(g|0)/60|0;h=q[a+8>>2];d=q[a>>2];i=h-d|0;b:{if(f>>>0<=(i|0)/60>>>0){g=(q[a+4>>2]-d|0)/60|0;h=f>>>0>g>>>0?w(g,60)+b|0:c;i=h-b|0;j=(i|0)/60|0;if(i){mV(d,b,i)}if(f>>>0>g>>>0){b=c-h|0;if((b|0)<1){break b}kV(q[a+4>>2],h,b);q[a+4>>2]=q[a+4>>2]+w((b>>>0)/60|0,60);break b}q[a+4>>2]=d+w(j,60);break b}if(d){q[a+4>>2]=d;xt(e);n[q[e+8>>2]](e,d,i);c=q[q[e+12>>2]+4>>2];if(c){n[c](q[e>>2])}q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;h=0}if(f>>>0>=71582789){break a}c=(h|0)/60|0;d=c<<1;d=c>>>0<35791394?d>>>0>>0?f:d:71582788;if(d>>>0>=71582789){break a}wt(e);c=n[q[e+8>>2]](e,w(d,60))|0;f=q[q[e+12>>2]+4>>2];if(f){n[f](q[e>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+w(d,60);if((g|0)<1){break b}kV(c,b,g);q[a+4>>2]=q[a+4>>2]+w((g>>>0)/60|0,60)}ue=e+16|0;return}kU();F()}function PK(a,b,c){var d=0,e=0,f=0,g=0,h=0;h=ue-16|0;ue=h;a:{b:{c:{d:{if(a){if(c>>>0>=4){break d}e=c;break c}a=q[b>>2];e=q[a>>2];if(!e){break a}while(1){f=1;if(e>>>0>=128){g=-1;f=rK(h+12|0,e);if((f|0)==-1){break a}}e=q[a+4>>2];a=a+4|0;d=d+f|0;g=d;if(e){continue}break}break a}f=q[b>>2];e=c;while(1){d=q[f>>2];e:{if(d+ -1>>>0>=127){if(!d){o[a|0]=0;q[b>>2]=0;break b}g=-1;d=rK(a,d);if((d|0)==-1){break a}e=e-d|0;a=a+d|0;break e}o[a|0]=d;e=e+ -1|0;f=q[b>>2];a=a+1|0}f=f+4|0;q[b>>2]=f;if(e>>>0>3){continue}break}}if(e){f=q[b>>2];while(1){d=q[f>>2];f:{if(d+ -1>>>0>=127){if(!d){o[a|0]=0;q[b>>2]=0;break b}g=-1;d=rK(h+12|0,d);if((d|0)==-1){break a}if(e>>>0>>0){break b}rK(a,q[f>>2]);e=e-d|0;a=a+d|0;break f}o[a|0]=d;e=e+ -1|0;f=q[b>>2];a=a+1|0}f=f+4|0;q[b>>2]=f;if(e){continue}break}}g=c;break a}g=c-e|0}ue=h+16|0;return g}function xz(a,b){var c=0,d=0,e=0,f=0,g=0;e=ue-16|0;ue=e;c=q[a>>2];g=(q[a+4>>2]-c|0)/948|0;d=g+1|0;a:{b:{if(d>>>0<4530557){c=(q[a+8>>2]-c|0)/948|0;f=c<<1;f=c>>>0<2265278?f>>>0>>0?d:f:4530556;c:{if(!f){d=0;break c}yt(e);d=n[q[e+8>>2]](e,w(f,948),16)|0;c=q[q[e+12>>2]+4>>2];if(!c){break c}n[c](q[e>>2])}c=w(g,948)+d|0;wz(c,b);f=w(f,948)+d|0;g=c+948|0;d=q[a>>2];b=q[a+4>>2];if((d|0)==(b|0)){break b}while(1){c=c+ -948|0;b=b+ -948|0;wz(c,b);if((b|0)!=(d|0)){continue}break}d=q[a+4>>2];b=q[a>>2];break a}kU();F()}b=d}q[a+4>>2]=g;q[a>>2]=c;g=q[a+8>>2];q[a+8>>2]=f;if((b|0)!=(d|0)){while(1){a=d+ -948|0;f=d+ -24|0;c=q[f>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[f>>2]=0}tx(d+ -148|0);d=a;if((b|0)!=(a|0)){continue}break}}d:{if(!b){break d}zt(e);n[q[e+8>>2]](e,b,g-b|0);a=q[q[e+12>>2]+4>>2];if(!a){break d}n[a](q[e>>2])}ue=e+16|0}function Pg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=x(0),l=x(0),m=0,p=0;i=ue-16|0;ue=i;h=q[a+20>>2];a:{if(!n[q[q[h>>2]+24>>2]](h)){break a}b:{if(f){break b}f=a+232|0;if(o[a+243|0]>-1){break b}f=q[f>>2]}p=1;m=(c|0)<1;if(!m){h=0;while(1){j=q[(h<<2)+b>>2];j=n[q[q[j>>2]+424>>2]](j)|0;n[q[q[a>>2]>>2]](a)|0;q[i+8>>2]=a;Un(j,i+8|0);j=q[i+8>>2];if(j){n[q[q[j>>2]+8>>2]](j)|0;q[i+8>>2]=0}h=h+1|0;if((h|0)!=(c|0)){continue}break}}k=x(n[q[q[a>>2]+32>>2]](a));o[a+328|0]=(g|0)==1;l=u[a+284>>2];$f(a);k=x(l*x(k/l));Nf(a,d,e,k,f);o[a+328|0]=0;u[a+284>>2]=l;u[a+280>>2]=k;if(m){break a}h=0;while(1){d=q[(h<<2)+b>>2];d=n[q[q[d>>2]+424>>2]](d)|0;n[q[q[a>>2]>>2]](a)|0;q[i>>2]=a;Vn(d,i);d=q[i>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[i>>2]=0}h=h+1|0;if((h|0)!=(c|0)){continue}break}}ue=i+16|0;return p|0}function qi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=x(0),i=0,j=0,k=0,l=x(0);f=ue-16|0;ue=f;n[q[q[c>>2]+52>>2]](f+8|0,c);g=q[f+8>>2];if(g){o[a+3444|0]=r[a+2465|0];o[a+3445|0]=r[a+2464|0];o[a+3446|0]=q[a+3728>>2]!=0;j=a+3440|0,k=n[q[q[a>>2]+8>>2]](a)|0,q[j>>2]=k;h=u[d+8>>2];q[a+3464>>2]=a+3808;q[a+3460>>2]=a+2476;q[a+3456>>2]=a+2288;q[a+3452>>2]=q[a+3800>>2];u[a+3436>>2]=h/x(60);j=a+3447|0,k=(n[q[q[c>>2]+36>>2]](c)|0)==1,o[j|0]=k;c=n[q[q[a>>2]+8>>2]](a)|0;j=a+3448|0,l=x(n[q[q[c>>2]+32>>2]](c)),u[j>>2]=l;o[a+3468|0]=q[a+180>>2]==5;n[q[q[a>>2]+44>>2]](f,a);d=q[f>>2];q[f>>2]=0;i=a+3436|0;c=q[a+3472>>2];a:{if(!c){q[a+3472>>2]=d;break a}n[q[q[c>>2]+8>>2]](c)|0;c=q[f>>2];q[a+3472>>2]=d;if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[f>>2]=0}n[q[q[g>>2]+20>>2]](g,i,b,e);n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Wi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=x(0),i=0,j=0,k=0,l=x(0);f=ue-16|0;ue=f;n[q[q[c>>2]+76>>2]](f+8|0,c);g=q[f+8>>2];if(g){o[a+3444|0]=r[a+2465|0];o[a+3445|0]=r[a+2464|0];j=a+3440|0,k=n[q[q[a>>2]+8>>2]](a)|0,q[j>>2]=k;h=u[d+8>>2];q[a+3460>>2]=a+2288;q[a+3468>>2]=a+4144;q[a+3464>>2]=a+2476;u[a+3436>>2]=h/x(60);q[a+3448>>2]=q[a+4140>>2];j=a+3452|0,k=(n[q[q[c>>2]+36>>2]](c)|0)==1,o[j|0]=k;c=n[q[q[a>>2]+8>>2]](a)|0;j=a+3456|0,l=x(n[q[q[c>>2]+32>>2]](c)),u[j>>2]=l;q[a+3484>>2]=q[a+4168>>2];o[a+3480|0]=q[a+180>>2]==5;n[q[q[a>>2]+44>>2]](f,a);d=q[f>>2];q[f>>2]=0;i=a+3436|0;c=q[a+3488>>2];a:{if(!c){q[a+3488>>2]=d;break a}n[q[q[c>>2]+8>>2]](c)|0;c=q[f>>2];q[a+3488>>2]=d;if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[f>>2]=0}n[q[q[g>>2]+20>>2]](g,i,b,e);n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function qh(a){var b=0;a:{b=q[a+4>>2];b:{if(b>>>0>4){break b}c:{switch(b-1|0){default:b=a+28|0;u[b>>2]=-u[b>>2];a=a+16|0;u[a>>2]=-u[a>>2];return;case 3:b=a+32|0;u[b>>2]=-u[b>>2];b=a+20|0;u[b>>2]=-u[b>>2];b=a+56|0;u[b>>2]=-u[b>>2];break a;case 2:b=q[a+40>>2];if(b>>>0>1){break b}if(b-1){b=a+24|0;u[b>>2]=-u[b>>2];b=a+20|0;u[b>>2]=-u[b>>2];b=a+32|0;u[b>>2]=-u[b>>2];b=a+28|0;u[b>>2]=-u[b>>2];b=a+48|0;u[b>>2]=-u[b>>2];b=a+44|0;u[b>>2]=-u[b>>2];b=a+16|0;u[b>>2]=-u[b>>2];a=a+12|0;u[a>>2]=-u[a>>2];return}b=a+24|0;u[b>>2]=-u[b>>2];b=a+20|0;u[b>>2]=-u[b>>2];b=a+32|0;u[b>>2]=-u[b>>2];b=a+28|0;u[b>>2]=-u[b>>2];b=a+48|0;u[b>>2]=-u[b>>2];break a;case 1:break b;case 0:break c}}b=a+16|0;u[b>>2]=-u[b>>2];b=a+20|0;u[b>>2]=-u[b>>2];b=a+24|0;u[b>>2]=-u[b>>2];a=a+28|0;u[a>>2]=-u[a>>2]}return}a=a+44|0;u[a>>2]=-u[a>>2]}function bx(a){a=a|0;var b=0;q[a>>2]=29208;b=q[a+496>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+496>>2]=0}b=q[a+500>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+500>>2]=0}b=q[a+504>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+504>>2]=0}b=q[a+508>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+508>>2]=0}b=q[a+512>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+512>>2]=0}b=q[a+516>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+516>>2]=0}b=q[a+536>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+536>>2]=0}b=q[a+532>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+532>>2]=0}b=q[a+540>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+540>>2]=0}b=q[a+524>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+524>>2]=0}b=q[a+520>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+520>>2]=0}b=q[a+528>>2];if(b){n[q[q[b>>2]+12>>2]](b);q[a+528>>2]=0}b=q[a+544>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+544>>2]=0}cx(a);return a|0}function gr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{d=q[a+8>>2];c=q[a+4>>2];b:{if((d-c|0)/12>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;c=q[a+4>>2]+12|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=(c-g|0)/12|0;f=h+b|0;if(f>>>0>=357913942){break a}c=0;d=(d-g|0)/12|0;g=d<<1;f=d>>>0<178956970?g>>>0>>0?f:g:357913941;c:{if(!f){break c}wt(e);c=n[q[e+8>>2]](e,w(f,12))|0;d=q[q[e+12>>2]+4>>2];if(!d){break c}n[d](q[e>>2])}g=w(f,12)+c|0;d=lV(w(h,12)+c|0,0,w(b,12));c=d;while(1){c=c+12|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];f=q[a+4>>2]-b|0;d=d+w((f|0)/-12|0,12)|0;if((f|0)>=1){kV(d,b,f);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=d;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}xt(e);n[q[e+8>>2]](e,b,c-b|0);a=q[q[e+12>>2]+4>>2];if(!a){break b}n[a](q[e>>2])}ue=e+16|0;return}kU();F()}function UC(a,b){var c=0,d=0,e=0,f=0,g=0;q[a>>2]=q[b>>2];a:{if((a|0)==(b|0)){break a}f=r[b+15|0];c=f<<24>>24<0;e=c?q[b+8>>2]:f;g=c?q[b+4>>2]:b+4|0;b:{c:{d:{f=a+4|0;d=o[f+11|0];e:{if((d|0)<=-1){c=(q[a+12>>2]&2147483647)+ -1|0;d=q[f>>2];if(c>>>0>=e>>>0){break c}d=q[a+8>>2];break e}c=10;if(e>>>0<=10){break d}d=d&255}Fw(f,c,e-c|0,d,d,e,g);break b}d=f}c=d;if(e){mV(c,g,e)}o[c+e|0]=0;if(o[f+11|0]<=-1){q[a+8>>2]=e;break b}o[f+11|0]=e}f=r[b+27|0];c=f<<24>>24<0;e=c?q[b+20>>2]:f;g=c?q[b+16>>2]:b+16|0;f=a+16|0;f:{g:{d=o[a+27|0];h:{if((d|0)<=-1){c=(q[a+24>>2]&2147483647)+ -1|0;d=q[f>>2];if(c>>>0>=e>>>0){break f}d=q[a+20>>2];break h}c=10;if(e>>>0<=10){break g}d=d&255}Fw(f,c,e-c|0,d,d,e,g);break a}d=f}c=d;if(e){mV(c,g,e)}o[c+e|0]=0;if(o[f+11|0]<=-1){q[a+20>>2]=e;break a}o[f+11|0]=e}q[a+28>>2]=q[b+28>>2]}function Yt(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;f=ue-16|0;ue=f;Ft(a,25394,22);Ft(a,25417,329);a:{b:{c:{if(!c){Ft(a,25747,102);if(!d){break b}if(!n[q[q[b>>2]+20>>2]](b)){break c}Ft(a,13504,374);break a}d:{if((c|0)!=1){break d}}Ft(a,14896,302);break a}Ft(a,13888,504);break a}Ft(a,14400,484)}e=q[b+92>>2];g=q[b+96>>2];e:{if((e|0)==(g|0)){break e}c=0;while(1){d=c;c=1;h=q[e>>2];f:{if(h>>>0<=1){if(h-1){break f}i=1}c=d}e=e+4|0;if((g|0)!=(e|0)){continue}break}g:{if(c&1){Ft(a,8188,sV(8188));if(i){break g}break e}if(!i){break e}}Ft(a,11779,sV(11779))}e=q[b+80>>2];d=q[b+84>>2];if((e|0)!=(d|0)){while(1){c=f;if(o[e+11|0]<=-1){b=q[e>>2]}else{b=e}Et(c,b,e+12|0);b=r[f+11|0];c=b<<24>>24<0;Ft(a,c?q[f>>2]:f,c?q[f+4>>2]:b);if(o[f+11|0]<=-1){_U(q[f>>2])}e=e+244|0;if((d|0)!=(e|0)){continue}break}}ue=f+16|0}function zG(a){var b=x(0),c=0,d=0,f=0,g=0;d=ue-16|0;ue=d;f=(k(a),e(0));c=f&2147483647;a:{if(c>>>0<=1061752794){b=x(1);if(c>>>0<964689920){break a}b=vG(+a);break a}if(c>>>0<=1081824209){g=+a;if(c>>>0>=1075235812){b=x(-vG(((f|0)<0?3.141592653589793:-3.141592653589793)+g));break a}if((f|0)<=-1){b=wG(g+1.5707963267948966);break a}b=wG(1.5707963267948966-g);break a}if(c>>>0<=1088565717){if(c>>>0>=1085271520){b=vG(((f|0)<0?6.283185307179586:-6.283185307179586)+ +a);break a}if((f|0)<=-1){b=wG(-4.71238898038469- +a);break a}b=wG(+a+ -4.71238898038469);break a}b=x(a-a);if(c>>>0>=2139095040){break a}c=yG(a,d+8|0)&3;if(c>>>0<=2){b:{switch(c-1|0){default:b=vG(v[d+8>>3]);break a;case 0:b=wG(-v[d+8>>3]);break a;case 1:break b}}b=x(-vG(v[d+8>>3]));break a}b=wG(v[d+8>>3])}a=b;ue=d+16|0;return a}function wA(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=x(0),j=x(0);d=ue-48|0;ue=d;g=q[q[b+36>>2]+8>>2];a:{if(!g){break a}e=q[a+8>>2];f=q[a+12>>2];b:{if((e|0)==(f|0)){f=e;break b}while(1){Xs(d+32|0,e+16|0);g=q[a+20>>2];n[q[q[g>>2]+88>>2]](d,g);nt(d+16|0,d);h=u[d+16>>2];c:{if(r[b+20|0]){i=u[d+24>>2];j=u[d+20>>2];break c}q[d+28>>2]=1065353216;i=x(-u[d+24>>2]);u[d+24>>2]=i;j=x(-u[d+20>>2]);u[d+20>>2]=j;h=x(-h);u[d+16>>2]=h}u[e>>2]=x(x(u[d+32>>2]*h)+x(u[d+36>>2]*j))+x(u[d+40>>2]*i);e=e+272|0;if((f|0)!=(e|0)){continue}break}e=q[a+12>>2];g=q[q[b+36>>2]+8>>2];f=q[a+8>>2]}d:{if((g|0)==1){CA(f,e,d+32|0);break d}DA(f,e,d+32|0)}e=q[a+8>>2];f=q[a+12>>2];if((e|0)==(f|0)){break a}g=q[q[q[a+20>>2]+72>>2]+36>>2]+ -948|0;while(1){xA(a,e+16|0,b,g,c);e=e+272|0;if((f|0)!=(e|0)){continue}break}}ue=d+48|0}function Wr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;a:{e=q[a+8>>2];c=q[a+4>>2];b:{if(e-c>>4>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+16|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=c-g>>4;d=h+b|0;if(d>>>0>=268435456){break a}c=0;e=e-g|0;g=e>>3;d=e>>4>>>0<134217727?g>>>0>>0?d:g:268435455;c:{if(!d){break c}yt(f);c=n[q[f+8>>2]](f,d<<4,16)|0;e=q[q[f+12>>2]+4>>2];if(!e){break c}n[e](q[f>>2])}g=(d<<4)+c|0;d=lV((h<<4)+c|0,0,b<<4);c=d;while(1){c=c+16|0;b=b+ -1|0;if(b){continue}break}e=d;b=q[a>>2];d=q[a+4>>2]-b|0;e=e-d|0;if((d|0)>=1){kV(e,b,d);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=e;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}zt(f);n[q[f+8>>2]](f,b,c-b|0);a=q[q[f+12>>2]+4>>2];if(!a){break b}n[a](q[f>>2])}ue=f+16|0;return}kU();F()} + + + +function Jo(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=q[c+4>>2];e=q[b+4>>2];h=yW(e);a:{if(h>>>0<=1){g=e+ -1&g;break a}if(g>>>0>>0){break a}g=(g>>>0)%(e>>>0)|0}f=q[b>>2]+(g<<2)|0;d=q[f>>2];while(1){i=d;d=q[d>>2];if((d|0)!=(c|0)){continue}break}j=b+8|0;b:{if((j|0)!=(i|0)){d=q[i+4>>2];c:{if(h>>>0<=1){d=e+ -1&d;break c}if(d>>>0>>0){break c}d=(d>>>0)%(e>>>0)|0}if((d|0)==(g|0)){break b}}d=q[c>>2];if(d){d=q[d+4>>2];d:{if(h>>>0<=1){d=e+ -1&d;break d}if(d>>>0>>0){break d}d=(d>>>0)%(e>>>0)|0}if((d|0)==(g|0)){break b}}q[f>>2]=0}d=q[c>>2];e:{if(!d){break e}f=q[d+4>>2];f:{if(h>>>0<=1){f=e+ -1&f;break f}if(f>>>0>>0){break f}f=(f>>>0)%(e>>>0)|0}if((g|0)==(f|0)){break e}q[q[b>>2]+(f<<2)>>2]=i;d=q[c>>2]}q[i>>2]=d;q[c>>2]=0;q[b+12>>2]=q[b+12>>2]+ -1;o[a+8|0]=1;q[a+4>>2]=j;q[a>>2]=c}function uA(a,b,c,d){var e=0,f=0,g=0,h=0;e=ue-272|0;ue=e;a:{b:{c:{if(!q[q[b+36>>2]+8>>2]){xA(a,c,b,q[q[q[a+20>>2]+72>>2]+36>>2]+ -948|0,d);break c}if((q[a+12>>2]-q[a+8>>2]|0)/272>>>0>=t[a+36>>2]){break c}Ao(e+120|0);Ao(e+136|0);Ao(e+152|0);Ao(e+168|0);Ao(e+184|0);Ao(e+200|0);kV(e+16|0,c,244);b=q[a+12>>2];g=q[a+16>>2];if((b|0)!=(g|0)){kV(b,e,272);q[a+12>>2]=q[a+12>>2]+272;break c}c=b;b=q[a+8>>2];c=c-b|0;h=(c|0)/272|0;f=h+1|0;if(f>>>0>=15790321){break b}g=(g-b|0)/272|0;d=g<<1;f=g>>>0<7895160?d>>>0>>0?f:d:15790320;d=0;d:{if(!f){break d}if(f>>>0>=15790321){break a}d=_S(w(f,272))}h=kV(d+w(h,272)|0,e,272);g=h+w((c|0)/-272|0,272)|0;d=d+w(f,272)|0;f=h+272|0;if((c|0)>=1){kV(g,b,c)}q[a+16>>2]=d;q[a+12>>2]=f;q[a+8>>2]=g;if(!b){break c}_U(b)}ue=e+272|0;return}kU();F()}Ue(337013);F()}function Ls(a,b,c,d,e,f,g){var h=0,i=0,j=x(0),k=0;h=ue-48|0;ue=h;i=q[f>>2];if((i|0)>=0){j=u[((i<<4)+c|0)+216>>2];k=q[g>>2];u[h+40>>2]=u[c+8>>2]/x(60);q[h+28>>2]=0;q[h+20>>2]=0;q[h+24>>2]=0;u[h+16>>2]=k|0;u[h+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);k=g;i=q[b+260>>2]+w(i,60)|0;if(q[i+4>>2]==1){bl(h,i,c+40|0,h+40|0,h+16|0,e);j=u[h>>2]}a:{if(x(y(j))>2]=i}k=q[f+4>>2];if((k|0)>=0){j=u[((k<<4)+c|0)+216>>2];f=q[g+4>>2];u[h+40>>2]=u[c+8>>2]/x(60);q[h+28>>2]=0;q[h+20>>2]=0;q[h+24>>2]=0;u[h+16>>2]=f|0;u[h+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);d=g;b=q[b+260>>2]+w(k,60)|0;if(q[b+4>>2]==1){bl(h,b,c+40|0,h+40|0,h+16|0,e);j=u[h>>2]}b:{if(x(y(j))>2]=b}b=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=b;ue=h+48|0}function Gt(a,b){var c=0,d=0,e=0,f=0;a:{d=q[b+48>>2];if(d&16){d=q[b+44>>2];c=q[b+24>>2];if(d>>>0>>0){q[b+44>>2]=c;d=c}b=q[b+20>>2];q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;e=d-b|0;if(e>>>0>=4294967280){break a}b:{if(e>>>0<=10){o[a+11|0]=e;break b}f=e+16&-16;c=_S(f);q[a+8>>2]=f|-2147483648;q[a>>2]=c;q[a+4>>2]=e;a=c}if((b|0)!=(d|0)){while(1){o[a|0]=r[b|0];a=a+1|0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}o[a|0]=0;return}if(d&8){e=q[b+16>>2];b=q[b+8>>2];q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;c=e-b|0;if(c>>>0>=4294967280){break a}c:{if(c>>>0<=10){o[a+11|0]=c;break c}f=c+16&-16;d=_S(f);q[a+8>>2]=f|-2147483648;q[a>>2]=d;q[a+4>>2]=c;a=d}if((b|0)!=(e|0)){while(1){o[a|0]=r[b|0];a=a+1|0;b=b+1|0;if((e|0)!=(b|0)){continue}break}}o[a|0]=0;return}q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;return}kT();F()}function zj(a,b){var c=x(0),d=x(0),e=x(0),f=x(0);c=u[b>>2];d=u[b+20>>2];e=u[b+40>>2];f=x(x(c+d)+e);a:{if(!!(f>x(0))){c=x(x(E(x(f+x(1))))*x(.5));f=x(c*x(4));d=x(x(u[b+16>>2]-u[b+4>>2])/f);e=x(x(u[b+8>>2]-u[b+32>>2])/f);f=x(x(u[b+36>>2]-u[b+24>>2])/f);break a}if(!(c>d^1|c>e^1)){f=x(x(E(x(x(x(c-d)-e)+x(1))))*x(.5));c=x(f*x(4));d=x(x(u[b+8>>2]+u[b+32>>2])/c);e=x(x(u[b+4>>2]+u[b+16>>2])/c);c=x(x(u[b+36>>2]-u[b+24>>2])/c);break a}if(!!(d>e)){e=x(x(E(x(x(x(d-c)-e)+x(1))))*x(.5));c=x(e*x(4));d=x(x(u[b+24>>2]+u[b+36>>2])/c);f=x(x(u[b+4>>2]+u[b+16>>2])/c);c=x(x(u[b+8>>2]-u[b+32>>2])/c);break a}d=x(x(E(x(x(x(e-c)-d)+x(1))))*x(.5));c=x(d*x(4));e=x(x(u[b+24>>2]+u[b+36>>2])/c);f=x(x(u[b+8>>2]+u[b+32>>2])/c);c=x(x(u[b+16>>2]-u[b+4>>2])/c)}u[a+12>>2]=c;u[a+8>>2]=d;u[a+4>>2]=e;u[a>>2]=f}function AG(a){var b=0,c=0,d=0,f=0;c=ue-16|0;ue=c;f=(k(a),e(0));b=f&2147483647;a:{if(b>>>0<=1061752794){if(b>>>0<964689920){break a}a=wG(+a);break a}if(b>>>0<=1081824209){d=+a;if(b>>>0<=1075235811){if((f|0)<=-1){a=x(-vG(d+1.5707963267948966));break a}a=vG(d+ -1.5707963267948966);break a}a=wG(-(((f|0)<0?3.141592653589793:-3.141592653589793)+d));break a}if(b>>>0<=1088565717){d=+a;if(b>>>0<=1085271519){if((f|0)<=-1){a=vG(d+4.71238898038469);break a}a=x(-vG(d+ -4.71238898038469));break a}a=wG(((f|0)<0?6.283185307179586:-6.283185307179586)+d);break a}if(b>>>0>=2139095040){a=x(a-a);break a}b=yG(a,c+8|0)&3;if(b>>>0<=2){b:{switch(b-1|0){default:a=wG(v[c+8>>3]);break a;case 0:a=vG(v[c+8>>3]);break a;case 1:break b}}a=wG(-v[c+8>>3]);break a}a=x(-vG(v[c+8>>3]))}ue=c+16|0;return a}function os(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;f=ue-32|0;ue=f;h=q[c+4>>2];d=q[b+4>>2];i=q[c>>2];g=q[b>>2];b=(h-d|0)+(i-g<<3)|0;c=q[a+4>>2];e=b+c|0;q[a+4>>2]=e;a:{if(!(!c|(e+ -1^c+ -1)>>>0>31)){a=q[a>>2];break a}a=q[a>>2];if(e>>>0<=32){q[a>>2]=0;break a}q[(e+ -1>>>3&536870908)+a>>2]=0}a=(c>>>3&536870908)+a|0;c=c&31;b:{if((c|0)==(d|0)){c:{if((b|0)<1){break c}d:{if(!d){c=0;break d}e=32-d|0;c=(b|0)<(e|0)?b:e;e=-1<>>e-c;q[a>>2]=q[a>>2]&(e^-1)|e&q[g>>2];b=b-c|0;d=c+d|0;c=d&31;a=(d>>>3&536870908)+a|0;g=g+4|0}d=(b|0)/32|0;e=d<<2;a=mV(a,g,e)+e|0;d=b-(d<<5)|0;if((d|0)<1){d=c;break c}b=-1>>>32-d|0;q[a>>2]=q[a>>2]&(b^-1)|b&q[e+g>>2]}q[f+4>>2]=d;q[f>>2]=a;break b}q[f+28>>2]=d;q[f+24>>2]=g;q[f+20>>2]=h;q[f+16>>2]=i;q[f+12>>2]=c;q[f+8>>2]=a;ps(f,f+24|0,f+16|0,f+8|0)}ue=f+32|0}function _i(a,b,c,d,e,f,g){var h=0,i=x(0);h=ue-48|0;ue=h;hi(h+44|0,d,e,x(f|0),x(g|0));d=q[h+44>>2];o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24;if(q[a+2472>>2]+ -1>>>0<=1){q[h+40>>2]=d;e=q[c+324>>2];q[h+36>>2]=e;q[h+24>>2]=d;q[h+20>>2]=e;Oe(h+44|0,h+24|0,h+20|0);d=q[h+44>>2];o[b|0]=d;o[b+1|0]=d>>>8;o[b+2|0]=d>>>16;o[b+3|0]=d>>>24}i=Sh(a,c);if(i!=x(1)){a=b;i=x(i*x(r[b+3|0]));a:{if(i=x(0)){d=~~i>>>0;break a}d=0}o[a+3|0]=d}if(r[q[q[c+152>>2]+20>>2]+208|0]){q[h+32>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);a=q[q[c+152>>2]+20>>2];a=r[a+209|0]|r[a+210|0]<<8|(r[a+211|0]<<16|r[a+212|0]<<24);q[h+28>>2]=a;q[h+16>>2]=q[h+32>>2];q[h+12>>2]=a;Oe(h+44|0,h+16|0,h+12|0);a=q[h+44>>2];o[b|0]=a;o[b+1|0]=a>>>8;o[b+2|0]=a>>>16;o[b+3|0]=a>>>24}ue=h+48|0}function Vr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{d=q[a+8>>2];c=q[a+4>>2];b:{if((d-c|0)/80>>>0>=b>>>0){while(1){lV(c,0,80);c=q[a+4>>2]+80|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=(c-g|0)/80|0;f=h+b|0;if(f>>>0>=53687092){break a}c=0;d=(d-g|0)/80|0;g=d<<1;f=d>>>0<26843545?g>>>0>>0?f:g:53687091;c:{if(!f){break c}yt(e);c=n[q[e+8>>2]](e,w(f,80),16)|0;d=q[q[e+12>>2]+4>>2];if(!d){break c}n[d](q[e>>2])}g=w(f,80)+c|0;d=lV(w(h,80)+c|0,0,w(b,80));c=d;while(1){c=c+80|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];f=q[a+4>>2]-b|0;d=d+w((f|0)/-80|0,80)|0;if((f|0)>=1){kV(d,b,f);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=d;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}zt(e);n[q[e+8>>2]](e,b,c-b|0);a=q[q[e+12>>2]+4>>2];if(!a){break b}n[a](q[e>>2])}ue=e+16|0;return}kU();F()}function wy(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=q[a+4>>2];f=q[a>>2];d=c-f>>3;e=d+1|0;a:{if(e>>>0<536870912){h=d<<3;g=q[a+8>>2]-f|0;d=g>>2;g=g>>3>>>0<268435455?d>>>0>>0?e:d:536870911;d=0;b:{if(!g){break b}if(g>>>0>=536870912){break a}d=_S(g<<3)}e=h+d|0;q[e>>2]=q[b>>2];b=q[b+4>>2];q[e+4>>2]=b;g=g<<3;if(b){q[b+4>>2]=q[b+4>>2]+1;f=q[a>>2];c=q[a+4>>2]}b=d+g|0;d=e+8|0;if((c|0)!=(f|0)){while(1){e=e+ -8|0;c=c+ -8|0;q[e>>2]=q[c>>2];q[e+4>>2]=q[c+4>>2];q[c>>2]=0;q[c+4>>2]=0;if((c|0)!=(f|0)){continue}break}f=q[a>>2];c=q[a+4>>2]}q[a+8>>2]=b;q[a+4>>2]=d;q[a>>2]=e;if((c|0)!=(f|0)){while(1){a=c;c=a+ -8|0;a=q[a+ -4>>2];c:{if(!a){break c}b=q[a+4>>2];q[a+4>>2]=b+ -1;if(b){break c}n[q[q[a>>2]+8>>2]](a);WS(a)}if((c|0)!=(f|0)){continue}break}}if(f){_U(f)}return}kU();F()}Ue(337013);F()}function GM(a,b,c,d,e){var f=0,g=0,h=x(0);f=ue-368|0;ue=f;q[f+352>>2]=b;q[f+360>>2]=a;HM(f+200|0,c,f+224|0,f+220|0,f+216|0);b=CL(f+184|0);EL(b,DL(b));a=vL(b,0);q[f+180>>2]=a;q[f+12>>2]=f+16;q[f+8>>2]=0;o[f+7|0]=1;o[f+6|0]=69;while(1){a:{if(!XH(f+360|0,f+352|0)){break a}if(q[f+180>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+180>>2]=c+a}if(IM(YH(f+360|0),f+7|0,f+6|0,a,f+180|0,q[f+220>>2],q[f+216>>2],f+200|0,f+16|0,f+12|0,f+8|0,f+224|0)){break a}_H(f+360|0);continue}break}b:{if(!uL(f+200|0)|!r[f+7|0]){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}g=e,h=YL(a,q[f+180>>2],d),u[g>>2]=h;HL(f+200|0,f+16|0,q[f+12>>2],d);if($H(f+360|0,f+352|0)){q[d>>2]=q[d>>2]|2}a=q[f+360>>2];oT(b);oT(f+200|0);ue=f+368|0;return a}function zh(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=q[a+8>>2];c=q[a+4>>2];if(d-c>>3>>>0>=b>>>0){d=a;a=b<<3;j=d,k=lV(c,0,a)+a|0,q[j+4>>2]=k;return}f=q[a>>2];e=c-f>>3;g=e+b|0;a:{if(g>>>0<536870912){i=e<<3;d=d-f|0;e=d>>2;e=d>>3>>>0<268435455?e>>>0>>0?g:e:536870911;if(e){if(e>>>0>=536870912){break a}h=_S(e<<3)}d=h+i|0;lV(d,0,b<<3);b=(g<<3)+h|0;g=(e<<3)+h|0;if((c|0)!=(f|0)){while(1){d=d+ -8|0;c=c+ -8|0;q[d>>2]=q[c>>2];q[d+4>>2]=q[c+4>>2];q[c>>2]=0;q[c+4>>2]=0;if((c|0)!=(f|0)){continue}break}f=q[a>>2];c=q[a+4>>2]}q[a+8>>2]=g;q[a+4>>2]=b;q[a>>2]=d;if((c|0)!=(f|0)){while(1){a=c;c=a+ -8|0;a=q[a+ -4>>2];b:{if(!a){break b}b=q[a+4>>2];q[a+4>>2]=b+ -1;if(b){break b}n[q[q[a>>2]+8>>2]](a);WS(a)}if((c|0)!=(f|0)){continue}break}}if(f){_U(f)}return}kU();F()}Ue(2732);F()}function mV(a,b,c){var d=0,e=0;a:{if((a|0)==(b|0)){break a}b:{if(b+c>>>0>a>>>0){e=a+c|0;if(e>>>0>b>>>0){break b}}return kV(a,b,c)}d=(a^b)&3;c:{d:{if(a>>>0>>0){if(d){d=a;break c}if(!(a&3)){d=a;break d}d=a;while(1){if(!c){break a}o[d|0]=r[b|0];b=b+1|0;c=c+ -1|0;d=d+1|0;if(d&3){continue}break}break d}e:{if(d){break e}if(e&3){while(1){if(!c){break a}c=c+ -1|0;d=c+a|0;o[d|0]=r[b+c|0];if(d&3){continue}break}}if(c>>>0<=3){break e}while(1){c=c+ -4|0;q[c+a>>2]=q[b+c>>2];if(c>>>0>3){continue}break}}if(!c){break a}while(1){c=c+ -1|0;o[c+a|0]=r[b+c|0];if(c){continue}break}break a}if(c>>>0<=3){break c}while(1){q[d>>2]=q[b>>2];b=b+4|0;d=d+4|0;c=c+ -4|0;if(c>>>0>3){continue}break}}if(!c){break a}while(1){o[d|0]=r[b|0];d=d+1|0;b=b+1|0;c=c+ -1|0;if(c){continue}break}}return a}function mR(a,b,c,d,e,f){var g=0;q[c>>2]=a;q[f>>2]=d;d=q[c>>2];a:{while(1){if(d>>>0>=b>>>0){g=0;break a}g=2;a=q[d>>2];if(a>>>0>1114111|(a&-2048)==55296){break a}b:{c:{if(a>>>0<=127){g=1;d=q[f>>2];if((e-d|0)<1){break a}q[f>>2]=d+1;o[d|0]=a;break c}if(a>>>0<=2047){d=q[f>>2];if((e-d|0)<2){break b}q[f>>2]=d+1;o[d|0]=a>>>6|192;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a&63|128;break c}d=q[f>>2];g=e-d|0;if(a>>>0<=65535){if((g|0)<3){break b}q[f>>2]=d+1;o[d|0]=a>>>12|224;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a>>>6&63|128;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a&63|128;break c}if((g|0)<4){break b}q[f>>2]=d+1;o[d|0]=a>>>18|240;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a>>>12&63|128;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a>>>6&63|128;d=q[f>>2];q[f>>2]=d+1;o[d|0]=a&63|128}d=q[c>>2]+4|0;q[c>>2]=d;continue}break}return 1}return g}function kC(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:{d=q[a>>2];c=q[d+16>>2];d=q[d+12>>2];if((c|0)==(d|0)){break a}c=c-d>>5;g=c>>>0>1?c:1;while(1){e=q[(f<<5)+d>>2];c=4;b:{if((e&-2)==4){break b}c=0;if(e>>>0>3){break b}c=(e<<2)+4|0}j=c+j|0;f=f+1|0;if((g|0)!=(f|0)){continue}break}f=0;g=0;while(1){h=q[q[b>>2]+(f<<2)>>2];k=(f<<5)+d|0;d=q[k>>2];c:{d:{if(d>>>0<=5){e=5121;c=4;i=0;e:{switch(d-1|0){case 3:i=1;break c;default:e=5126;c=1;break d;case 0:e=5126;c=2;break d;case 1:e=5126;c=3;break d;case 4:break c;case 2:break e}}e=5126;c=4;break d}e=0;c=0}i=0}if((h|0)>=0){ia(h|0);ka(h|0,c|0,e|0,i|0,j|0,g|0);d=q[k>>2]}c=4;f:{if((d&-2)==4){break f}c=0;if(d>>>0>3){break f}c=(d<<2)+4|0}e=q[a>>2];d=q[e+12>>2];f=f+1|0;if(f>>>0>=q[e+16>>2]-d>>5>>>0){break a}g=c+g|0;continue}}}function VL(a,b,c,d,e){var f=0,g=0,h=x(0);f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;WL(f+208|0,c,f+224|0,f+223|0,f+222|0);b=CL(f+192|0);EL(b,DL(b));a=vL(b,0);q[f+188>>2]=a;q[f+12>>2]=f+16;q[f+8>>2]=0;o[f+7|0]=1;o[f+6|0]=69;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+188>>2]=c+a}if(XL(HH(f+264|0),f+7|0,f+6|0,a,f+188|0,o[f+223|0],o[f+222|0],f+208|0,f+16|0,f+12|0,f+8|0,f+224|0)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)|!r[f+7|0]){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}g=e,h=YL(a,q[f+188>>2],d),u[g>>2]=h;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}a=q[f+264>>2];oT(b);oT(f+208|0);ue=f+272|0;return a}function sN(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;k=ue-16|0;ue=k;l=WH(g);g=pM(g);SM(k,g);a:{if(xL(k)){OM(l,a,c,d);g=(c-a<<2)+d|0;q[f>>2]=g;break a}q[f>>2]=d;j=a;i=r[j|0];h=i+ -43|0;if(!(h>>>0>2|!(h-1))){j=II(l,i<<24>>24);i=q[f>>2];q[f>>2]=i+4;q[i>>2]=j;j=a+1|0}if(!(r[j|0]!=48|(c-j|0)<2|(r[j+1|0]|32)!=120)){i=II(l,48);h=q[f>>2];q[f>>2]=h+4;q[h>>2]=i;i=II(l,o[j+1|0]);h=q[f>>2];q[f>>2]=h+4;q[h>>2]=i;j=j+2|0}dN(j,c);h=0;n=RM(g);i=0;g=j;while(1){if(g>>>0>=c>>>0){uN((j-a<<2)+d|0,q[f>>2]);g=q[f>>2]}else{b:{if(!r[vL(k,i)|0]){break b}if(o[vL(k,i)|0]!=(h|0)){break b}h=q[f>>2];q[f>>2]=h+4;q[h>>2]=n;i=(i>>>0>>0)+i|0;h=0}p=II(l,o[g|0]);m=q[f>>2];q[f>>2]=m+4;q[m>>2]=p;g=g+1|0;h=h+1|0;continue}break}}q[e>>2]=(b|0)==(c|0)?g:(b-a<<2)+d|0;oT(k);ue=k+16|0}function Tt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=ue-16|0;ue=g;c=0;a:{if((b|0)==-1){break a}i=q[a+8>>2];j=q[a+12>>2];e=q[a+24>>2];f=q[a+28>>2];b:{if((e|0)!=(f|0)){d=q[a+44>>2];break b}c=-1;if(!(r[a+48|0]&16)){break a}f=q[a+44>>2];d=q[a+20>>2];c=a+32|0;AT(c,0);h=f-d|0;e=e-d|0;tT(c,o[a+43|0]<=-1?(q[a+40>>2]&2147483647)+ -1|0:10);d=o[c+11|0];c:{if((d|0)<=-1){c=q[a+32>>2];d=q[a+36>>2];break c}d=d&255}q[a+20>>2]=c;f=d+c|0;q[a+28>>2]=f;d=c+h|0;q[a+44>>2]=d;e=c+e|0;q[a+24>>2]=e}c=e+1|0;q[g+12>>2]=c;h=q[(c>>>0>>0?a+44|0:g+12|0)>>2];q[a+44>>2]=h;if(r[a+48|0]&8){i=j-i|0;d=a+32|0;d=o[a+43|0]<=-1?q[d>>2]:d;q[a+16>>2]=h;q[a+8>>2]=d;q[a+12>>2]=d+i}if((e|0)==(f|0)){c=n[q[q[a>>2]+52>>2]](a,b&255)|0;break a}q[a+24>>2]=c;o[e|0]=b;c=b&255}ue=g+16|0;return c|0}function KM(a,b,c,d,e){var f=0,g=0,h=0;f=ue-368|0;ue=f;q[f+352>>2]=b;q[f+360>>2]=a;HM(f+200|0,c,f+224|0,f+220|0,f+216|0);b=CL(f+184|0);EL(b,DL(b));a=vL(b,0);q[f+180>>2]=a;q[f+12>>2]=f+16;q[f+8>>2]=0;o[f+7|0]=1;o[f+6|0]=69;while(1){a:{if(!XH(f+360|0,f+352|0)){break a}if(q[f+180>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+180>>2]=c+a}if(IM(YH(f+360|0),f+7|0,f+6|0,a,f+180|0,q[f+220>>2],q[f+216>>2],f+200|0,f+16|0,f+12|0,f+8|0,f+224|0)){break a}_H(f+360|0);continue}break}b:{if(!uL(f+200|0)|!r[f+7|0]){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}g=e,h=$L(a,q[f+180>>2],d),v[g>>3]=h;HL(f+200|0,f+16|0,q[f+12>>2],d);if($H(f+360|0,f+352|0)){q[d>>2]=q[d>>2]|2}a=q[f+360>>2];oT(b);oT(f+200|0);ue=f+368|0;return a}function dB(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:{f=q[b+32>>2];d=q[f>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;a=q[a+28>>2]-q[a+24>>2]|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;g=a>>>0>1?a:1;e=q[b+12>>2];b=w(e,q[c>>2])<<3;a=0;while(1){if((e|0)>=1){d=b+d|0;q[c+4>>2]=d}a=a+1|0;if((g|0)!=(a|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;h=q[a+24>>2];a=q[a+28>>2]-h|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;i=a>>>0>1?a:1;b=q[b+12>>2];a=q[c>>2];j=w(b,a)<<3;g=w(a,(b|0)>1?b:1)<<3;e=q[f+12>>2];a=0;while(1){k=c;b:{c:{d:{if(a>>>0>>0){if((b|0)<1){break b}break d}if(a>>>0>=q[w(a,240)+h>>2]+(q[f+8>>2]^-1)>>>0){if((b|0)>=1){break d}break b}if((b|0)<1){break b}d=d+g|0;break c}d=d+j|0}q[k+4>>2]=d}a=a+1|0;if((i|0)!=(a|0)){continue}break}}}function dA(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:{f=q[b+28>>2];d=q[f>>2];if(d>>>0>1){break a}if(d-1){d=q[c+8>>2];q[c+4>>2]=d;a=q[a+28>>2]-q[a+24>>2]|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;g=a>>>0>1?a:1;e=q[b+16>>2];b=w(e,q[c>>2])<<2;a=0;while(1){if((e|0)>=1){d=b+d|0;q[c+4>>2]=d}a=a+1|0;if((g|0)!=(a|0)){continue}break}break a}d=q[c+8>>2];q[c+4>>2]=d;h=q[a+24>>2];a=q[a+28>>2]-h|0;if((a|0)==240){break a}a=((a|0)/240|0)+ -1|0;i=a>>>0>1?a:1;b=q[b+16>>2];a=q[c>>2];j=w(b,a)<<2;g=w(a,(b|0)>1?b:1)<<2;e=q[f+12>>2];a=0;while(1){k=c;b:{c:{d:{if(a>>>0>>0){if((b|0)<1){break b}break d}if(a>>>0>=q[w(a,240)+h>>2]+(q[f+8>>2]^-1)>>>0){if((b|0)>=1){break d}break b}if((b|0)<1){break b}d=d+g|0;break c}d=d+j|0}q[k+4>>2]=d}a=a+1|0;if((i|0)!=(a|0)){continue}break}}}function _L(a,b,c,d,e){var f=0,g=0,h=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;WL(f+208|0,c,f+224|0,f+223|0,f+222|0);b=CL(f+192|0);EL(b,DL(b));a=vL(b,0);q[f+188>>2]=a;q[f+12>>2]=f+16;q[f+8>>2]=0;o[f+7|0]=1;o[f+6|0]=69;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(b)+a|0)){c=uL(b);EL(b,uL(b)<<1);EL(b,DL(b));a=vL(b,0);q[f+188>>2]=c+a}if(XL(HH(f+264|0),f+7|0,f+6|0,a,f+188|0,o[f+223|0],o[f+222|0],f+208|0,f+16|0,f+12|0,f+8|0,f+224|0)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)|!r[f+7|0]){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}g=e,h=$L(a,q[f+188>>2],d),v[g>>3]=h;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}a=q[f+264>>2];oT(b);oT(f+208|0);ue=f+272|0;return a}function Ef(a,b){var c=0,d=0,e=0,f=0,g=0;a:{e=q[a+8>>2];c=q[a+4>>2];if((e-c|0)/60>>>0>=b>>>0){while(1){Yk(c);c=q[a+4>>2]+60|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break a}}f=q[a>>2];g=(c-f|0)/60|0;c=g+b|0;b:{c:{d:{if(c>>>0<71582789){e=(e-f|0)/60|0;f=e<<1;c=e>>>0<35791394?f>>>0>>0?c:f:71582788;d=0;e:{if(!c){break e}if(c>>>0>=71582789){break d}d=_S(w(c,60))}f=d+w(c,60)|0;e=d+w(g,60)|0;c=e;while(1){c=Yk(c)+60|0;b=b+ -1|0;if(b){continue}break}b=q[a>>2];d=q[a+4>>2];if((b|0)==(d|0)){break c}while(1){d=d+ -60|0;e=eh(e+ -60|0,d);if((b|0)!=(d|0)){continue}break}b=q[a+4>>2];d=q[a>>2];break b}kU();F()}Ue(2320);F()}d=b}q[a+8>>2]=f;q[a+4>>2]=c;q[a>>2]=e;if((b|0)!=(d|0)){while(1){b=b+ -60|0;n[q[q[b>>2]>>2]](b)|0;if((b|0)!=(d|0)){continue}break}}if(!d){break a}_U(d)}}function eh(a,b){var c=0,d=0,e=0,f=0,g=0;q[a>>2]=4216;c=q[b+4>>2];q[a+16>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=c;a:{b:{c=q[b+12>>2]-q[b+8>>2]|0;c:{if(!c){break c}d=c>>2;if(d>>>0>=1073741824){break b}c=_S(c);q[a+8>>2]=c;q[a+12>>2]=c;q[a+16>>2]=c+(d<<2);e=q[b+8>>2];d=q[b+12>>2]-e|0;if((d|0)<1){break c}f=a,g=kV(c,e,d)+d|0,q[f+12>>2]=g}q[a+20>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;c=q[b+24>>2]-q[b+20>>2]|0;d:{if(!c){break d}if((c|0)<=-1){break a}d=_S(c);q[a+20>>2]=d;q[a+24>>2]=d;q[a+28>>2]=c+d;e=q[b+20>>2];c=q[b+24>>2]-e|0;if((c|0)<1){break d}f=a,g=kV(d,e,c)+c|0,q[f+24>>2]=g}c=q[b+36>>2];q[a+32>>2]=q[b+32>>2];q[a+36>>2]=c;o[a+56|0]=r[b+56|0];c=q[b+52>>2];q[a+48>>2]=q[b+48>>2];q[a+52>>2]=c;c=q[b+44>>2];q[a+40>>2]=q[b+40>>2];q[a+44>>2]=c;return a}kU();F()}kU();F()}function sz(a,b,c){var d=0,e=0,f=0,g=0;d=ue-144|0;ue=d;f=q[c+24>>2];a:{if(!f){break a}e=q[a+20>>2];g=q[a+24>>2];b:{if((e|0)==(g|0)){g=e;break b}while(1){Xs(d- -64|0,e+16|0);f=q[a+8>>2];n[q[q[f>>2]+88>>2]](d+128|0,f);if(!r[c+16|0]){Ap(d,d+128|0);q[d+136>>2]=q[d+8>>2];f=q[d+4>>2];q[d+128>>2]=q[d>>2];q[d+132>>2]=f}nt(d,d+128|0);u[e>>2]=x(x(u[d+64>>2]*u[d>>2])+x(u[d+68>>2]*u[d+4>>2]))+x(u[d+72>>2]*u[d+8>>2]);e=e+304|0;if((g|0)!=(e|0)){continue}break}e=q[a+24>>2];f=q[c+24>>2];g=q[a+20>>2]}c:{if((f|0)==1){Fz(g,e,d- -64|0);break c}Gz(g,e,d- -64|0)}e=q[a+20>>2];g=q[a+24>>2];if((e|0)==(g|0)){break a}while(1){f=q[a+8>>2];n[q[q[f>>2]+76>>2]](d- -64|0,f);yz(a,e+16|0,c,q[q[b+72>>2]+36>>2]+ -948|0,ht(d,d- -64|0));e=e+304|0;if((g|0)!=(e|0)){continue}break}}ue=d+144|0}function cN(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;k=ue-16|0;ue=k;l=FH(g);g=lL(g);SM(k,g);a:{if(xL(k)){eM(l,a,c,d);g=(c-a|0)+d|0;q[f>>2]=g;break a}q[f>>2]=d;j=a;i=r[j|0];h=i+ -43|0;if(!(h>>>0>2|!(h-1))){j=HI(l,i<<24>>24);i=q[f>>2];q[f>>2]=i+1;o[i|0]=j;j=a+1|0}if(!(r[j|0]!=48|(c-j|0)<2|(r[j+1|0]|32)!=120)){i=HI(l,48);h=q[f>>2];q[f>>2]=h+1;o[h|0]=i;i=HI(l,o[j+1|0]);h=q[f>>2];q[f>>2]=h+1;o[h|0]=i;j=j+2|0}dN(j,c);h=0;n=RM(g);i=0;g=j;while(1){if(g>>>0>=c>>>0){dN((j-a|0)+d|0,q[f>>2]);g=q[f>>2]}else{b:{if(!r[vL(k,i)|0]){break b}if(o[vL(k,i)|0]!=(h|0)){break b}h=q[f>>2];q[f>>2]=h+1;o[h|0]=n;i=(i>>>0>>0)+i|0;h=0}p=HI(l,o[g|0]);m=q[f>>2];q[f>>2]=m+1;o[m|0]=p;g=g+1|0;h=h+1|0;continue}break}}q[e>>2]=(b|0)==(c|0)?g:(b-a|0)+d|0;oT(k);ue=k+16|0}function EG(a){var b=0,c=x(0),d=0,g=x(0),h=0,i=x(0);h=(k(a),e(0));b=h&2147483647;if(b>>>0<1283457024){a:{b:{if(b>>>0<=1054867455){d=-1;if(b>>>0>=964689920){break b}break a}a=x(y(a));if(b>>>0<=1066926079){if(b>>>0<=1060110335){a=x(x(x(a+a)+x(-1))/x(a+x(2)));d=0;break b}a=x(x(a+x(-1))/x(a+x(1)));d=1;break b}if(b>>>0<=1075576831){a=x(x(a+x(-1.5))/x(x(a*x(1.5))+x(1)));d=2;break b}a=x(x(-1)/a);d=3}b=d;g=x(a*a);c=x(g*g);i=x(c*x(x(c*x(-.106480173766613))+x(-.19999158382415771)));c=x(g*x(x(c*x(x(c*x(.06168760731816292))+x(.14253635704517365)))+x(.333333283662796)));if((b|0)<=-1){return x(a-x(a*x(i+c)))}b=b<<2;a=x(u[b+347632>>2]-x(x(x(a*x(i+c))-u[b+347648>>2])-a));a=(h|0)<0?x(-a):a}return a}return b>>>0>2139095040?a:(f(0,(k(a),e(0))&-2147483648|1070141402),j())}function uq(a,b){var c=0,d=0,e=0,f=0,g=0;e=q[a>>2];g=(q[a+4>>2]-e|0)/244|0;d=g+1|0;a:{b:{c:{if(d>>>0<17602325){e=(q[a+8>>2]-e|0)/244|0;f=e<<1;e=e>>>0<8801162?f>>>0>>0?d:f:17602324;c=0;d:{if(!e){break d}if(e>>>0>=17602325){break c}c=_S(w(e,244))}d=c+w(g,244)|0;mT(d,b);kV(d+12|0,b+12|0,232);e=c+w(e,244)|0;g=d+244|0;b=q[a>>2];c=q[a+4>>2];if((b|0)==(c|0)){break b}while(1){c=c+ -244|0;f=q[c+4>>2];d=d+ -244|0;q[d>>2]=q[c>>2];q[d+4>>2]=f;f=c+8|0;q[d+8>>2]=q[f>>2];q[c>>2]=0;q[c+4>>2]=0;q[f>>2]=0;kV(d+12|0,c+12|0,232);if((b|0)!=(c|0)){continue}break}b=q[a+4>>2];c=q[a>>2];break a}kU();F()}Ue(6104);F()}c=b}q[a+8>>2]=e;q[a+4>>2]=g;q[a>>2]=d;if((b|0)!=(c|0)){while(1){a=b+ -244|0;if(o[b+ -233|0]<=-1){_U(q[a>>2])}b=a;if((a|0)!=(c|0)){continue}break}}if(c){_U(c)}}function hl(a,b){var c=0,d=0,e=x(0),f=x(0),g=0;c=ue-80|0;ue=c;d=q[a+268>>2];q[c+72>>2]=q[a+264>>2];q[c+76>>2]=d;g=q[a+260>>2];d=c- -64|0;q[d>>2]=q[a+256>>2];q[d+4>>2]=g;d=q[a+252>>2];q[c+56>>2]=q[a+248>>2];q[c+60>>2]=d;d=q[a+244>>2];q[c+48>>2]=q[a+240>>2];q[c+52>>2]=d;d=q[a+228>>2];q[c+32>>2]=q[a+224>>2];q[c+36>>2]=d;d=q[a+236>>2];q[c+40>>2]=q[a+232>>2];q[c+44>>2]=d;d=nt(c+16|0,b);Xs(c,c+32|0);e=x(u[d>>2]-u[c>>2]);f=x(e*e);e=x(u[d+4>>2]-u[c+4>>2]);f=x(f+x(e*e));e=x(u[d+8>>2]-u[c+8>>2]);e=x(u[b+12>>2]+x(E(x(f+x(e*e)))));b=q[a>>2];f=u[b+324>>2];a:{if(!(f>x(0)^1|e>f^1)){q[q[a+8>>2]+76>>2]=8;break a}f=u[b+320>>2];if(!(f>x(0)^1|e>f^1)){q[q[a+8>>2]+76>>2]=4;break a}a=q[a+8>>2];f=u[b+316>>2];if(!(f>x(0)^1|e>f^1)){q[a+76>>2]=2;break a}q[a+76>>2]=1}ue=c+80|0}function Tg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+4|0;c=q[a+4>>2];a:{b:{if(!c){break b}d=r[b+11|0];a=d<<24>>24<0;g=a?q[b+4>>2]:d;h=a?q[b>>2]:b;d=i;while(1){b=r[c+27|0];a=b<<24>>24<0;c:{d:{e=a?q[c+20>>2]:b;f=g>>>0>>0?g:e;if(f){b=c+16|0;b=a?q[b>>2]:b;a=h;while(1){j=s[b>>1];k=s[a>>1];if(j>>>0>>0){c=c+4|0;break c}if(k>>>0>>0){break d}a=a+2|0;b=b+2|0;f=f+ -1|0;if(f){continue}break}}if(e>>>0>=g>>>0){break d}c=c+4|0;break c}d=c}c=q[c>>2];if(c){continue}break}if((d|0)==(i|0)){break b}a=r[d+27|0];b=a<<24>>24<0;c=b?q[d+20>>2]:a;a=c>>>0>>0?c:g;if(a){e=d+16|0;b=b?q[e>>2]:e;while(1){e=s[h>>1];f=s[b>>1];if(e>>>0>>0){break b}if(f>>>0>>0){break a}b=b+2|0;h=h+2|0;a=a+ -1|0;if(a){continue}break}}if(g>>>0>=c>>>0){break a}}d=i}return d}function ws(a,b){var c=0,d=x(0),e=x(0),f=x(0),g=0,h=x(0),i=x(0);c=ue-80|0;d=u[a+12>>2];a:{if(!!(d>2];q[c+64>>2]=q[a>>2];b=u[a+4>>2];q[c+68>>2]=q[a+4>>2];d=u[a+8>>2];q[c+72>>2]=q[a+8>>2];o[c+9|0]=d==b;o[c+8|0]=b==e;q[c+56>>2]=0;q[c+40>>2]=0;q[c+32>>2]=0;q[c+24>>2]=0;f=x(x(x(x(e-x(b+b))+d)*x(3))*x(.25));u[c+36>>2]=f;i=x(f/x(3));u[c+16>>2]=i;u[c+48>>2]=x(b-e)-i;e=x(x(x(0)-f)/x(3));u[c+20>>2]=e;u[c+52>>2]=x(x(d-b)-f)-e;d=x(B(x(A(h,x(2))),x(0)));b=x(C(d));b:{if(x(y(b))0?a:0;g=(a|0)<2?a:2;a=g<<2;b=u[a+(c- -64|0)>>2];if(!r[g+(c+8|0)|0]){e=b;b=x(d-x(g|0));b=x(e+x(b*x(u[a+(c+48|0)>>2]+x(b*x(u[a+(c+32|0)>>2]+x(b*u[a+(c+16|0)>>2]))))))}return b}function Um(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=ue-16|0;ue=e;q[e+12>>2]=c;a:{b:{d=q[b+468>>2];if(d){b=b+464|0;while(1){f=q[d+32>>2];if((f|0)<=(c|0)){if((f|0)>=(c|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break}}q[a>>2]=0;q[a+4>>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;break a}b=kl(b,e+12|0);c=q[b+128>>2];d=q[b+144>>2];f=q[b+116>>2];g=q[b+132>>2];h=q[b+148>>2];i=q[b+120>>2];j=q[b+136>>2];k=q[b+152>>2];l=q[b+124>>2];m=q[b+140>>2];n=q[b+112>>2];q[a+44>>2]=q[b+156>>2];q[a+40>>2]=m;q[a+36>>2]=l;q[a+32>>2]=k;q[a+28>>2]=j;q[a+24>>2]=i;q[a+20>>2]=h;q[a+16>>2]=g;q[a+12>>2]=f;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=n}ue=e+16|0}function Fm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=ue-16|0;ue=e;q[e+12>>2]=c;a:{b:{d=q[b+468>>2];if(d){b=b+464|0;while(1){f=q[d+32>>2];if((f|0)<=(c|0)){if((f|0)>=(c|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break}}q[a>>2]=0;q[a+4>>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;break a}b=kl(b,e+12|0);c=q[b+240>>2];d=q[b+256>>2];f=q[b+228>>2];g=q[b+244>>2];h=q[b+260>>2];i=q[b+232>>2];j=q[b+248>>2];k=q[b+264>>2];l=q[b+236>>2];m=q[b+252>>2];n=q[b+224>>2];q[a+44>>2]=q[b+268>>2];q[a+40>>2]=m;q[a+36>>2]=l;q[a+32>>2]=k;q[a+28>>2]=j;q[a+24>>2]=i;q[a+20>>2]=h;q[a+16>>2]=g;q[a+12>>2]=f;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=n}ue=e+16|0}function SK(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0;g=ue-1040|0;ue=g;h=q[b>>2];q[g+12>>2]=h;i=a?a:g+16|0;d=a?d:256;a:{if(!d|!h){break a}f=c>>>2|0;k=f>>>0>=d>>>0;if(f>>>0>>0?c>>>0<=131:0){break a}while(1){f=k?d:f;c=c-f|0;f=RK(i,g+12|0,f,e);if((f|0)==-1){d=0;h=q[g+12>>2];j=-1;break a}k=(g+16|0)==(i|0);i=k?i:(f<<2)+i|0;j=f+j|0;d=d-(k?0:f)|0;h=q[g+12>>2];if(!d|!h){break a}f=c>>>2|0;k=f>>>0>=d>>>0;if(c>>>0>131|f>>>0>=d>>>0){continue}break}}b:{c:{if(!c|(!h|!d)){break c}while(1){f=LJ(i,h,c,e);if(f+2>>>0<=2){c=f+1|0;if(c>>>0<=1){if(c-1){break b}q[g+12>>2]=0;break c}q[e>>2]=0;break c}h=q[g+12>>2]+f|0;q[g+12>>2]=h;j=j+1|0;d=d+ -1|0;if(!d){break c}i=i+4|0;c=c-f|0;f=j;if(c){continue}break}break b}f=j}if(a){q[b>>2]=q[g+12>>2]}ue=g+1040|0;return f}function Zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=ue-80|0;ue=c;q[a>>2]=0;q[a+4>>2]=0;b=n[q[q[b>>2]+180>>2]](b)|0;q[c+40>>2]=2147483647;q[c+44>>2]=2147483647;q[c+32>>2]=0;q[c+36>>2]=0;q[c+24>>2]=2147483647;q[c+28>>2]=2147483647;q[c+16>>2]=0;q[c+20>>2]=0;q[c+12>>2]=2392;q[c+8>>2]=36;q[c>>2]=a;q[c+4>>2]=c;if((n[q[q[b>>2]+20>>2]](b)|0)>=1){a=0;while(1){d=n[q[q[b>>2]+24>>2]](b,a)|0;n[q[q[d>>2]+40>>2]](c+48|0,d,c+16|0);d=q[c>>2];e=q[d>>2];f=q[c+72>>2];q[d>>2]=(e|0)>(f|0)?e:f;f=d;d=q[d+4>>2];e=q[c+76>>2];q[f+4>>2]=(d|0)>(e|0)?d:e;d=q[c+4>>2];h=d,i=n[q[q[b>>2]+24>>2]](b,a)|0,j=c+48|0,g=q[d+8>>2],n[g](h|0,i|0,j|0);a=a+1|0;if((a|0)<(n[q[q[b>>2]+20>>2]](b)|0)){continue}break}}a=q[q[c+12>>2]+4>>2];if(a){n[a](q[c>>2])}ue=c+80|0}function yM(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;f=ue-352|0;ue=f;q[f+336>>2]=b;q[f+344>>2]=a;g=AL(c);h=uM(c,f+224|0);vM(f+208|0,c,f+332|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!XH(f+344|0,f+336|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(wM(YH(f+344|0),g,b,f+188|0,f+8|0,q[f+332>>2],f+208|0,f+16|0,f+12|0,h)){break a}_H(f+344|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}i=e,j=KL(b,q[f+188>>2],d,g),q[i>>2]=j;q[e+4>>2]=we;HL(f+208|0,f+16|0,q[f+12>>2],d);if($H(f+344|0,f+336|0)){q[d>>2]=q[d>>2]|2}b=q[f+344>>2];oT(a);oT(f+208|0);ue=f+352|0;return b}function EM(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;f=ue-352|0;ue=f;q[f+336>>2]=b;q[f+344>>2]=a;g=AL(c);h=uM(c,f+224|0);vM(f+208|0,c,f+332|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!XH(f+344|0,f+336|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(wM(YH(f+344|0),g,b,f+188|0,f+8|0,q[f+332>>2],f+208|0,f+16|0,f+12|0,h)){break a}_H(f+344|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}i=e,j=TL(b,q[f+188>>2],d,g),q[i>>2]=j;q[e+4>>2]=we;HL(f+208|0,f+16|0,q[f+12>>2],d);if($H(f+344|0,f+336|0)){q[d>>2]=q[d>>2]|2}b=q[f+344>>2];oT(a);oT(f+208|0);ue=f+352|0;return b}function sq(a,b){var c=0,d=0,e=0,f=0,g=0;e=q[a>>2];g=q[a+4>>2]-e>>4;d=g+1|0;a:{b:{c:{if(d>>>0<268435456){e=q[a+8>>2]-e|0;f=e>>3;e=e>>4>>>0<134217727?f>>>0>>0?d:f:268435455;c=0;d:{if(!e){break d}if(e>>>0>=268435456){break c}c=_S(e<<4)}d=c+(g<<4)|0;mT(d,b);q[d+12>>2]=q[b+12>>2];e=c+(e<<4)|0;g=d+16|0;b=q[a>>2];c=q[a+4>>2];if((b|0)==(c|0)){break b}while(1){c=c+ -16|0;f=q[c+4>>2];d=d+ -16|0;q[d>>2]=q[c>>2];q[d+4>>2]=f;f=c+8|0;q[d+8>>2]=q[f>>2];q[c>>2]=0;q[c+4>>2]=0;q[f>>2]=0;q[d+12>>2]=q[c+12>>2];if((b|0)!=(c|0)){continue}break}b=q[a+4>>2];c=q[a>>2];break a}kU();F()}Ue(6104);F()}c=b}q[a+8>>2]=e;q[a+4>>2]=g;q[a>>2]=d;if((b|0)!=(c|0)){while(1){a=b+ -16|0;if(o[b+ -5|0]<=-1){_U(q[a>>2])}b=a;if((a|0)!=(c|0)){continue}break}}if(c){_U(c)}}function it(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;d=q[b+20>>2];i=a+16|0;c=i;j=q[b+16>>2];q[c>>2]=j;q[c+4>>2]=d;e=q[b+60>>2];d=a+56|0;c=d;q[c>>2]=q[b+56>>2];q[c+4>>2]=e;f=q[b+52>>2];e=a+48|0;c=e;q[c>>2]=q[b+48>>2];q[c+4>>2]=f;c=q[b+44>>2];q[a+40>>2]=q[b+40>>2];q[a+44>>2]=c;g=q[b+36>>2];f=a+32|0;c=f;q[c>>2]=q[b+32>>2];q[c+4>>2]=g;h=q[b+28>>2];g=a+24|0;c=g;q[c>>2]=q[b+24>>2];q[c+4>>2]=h;h=q[b+12>>2];c=a+8|0;q[c>>2]=q[b+8>>2];q[c+4>>2]=h;b=q[a+4>>2];q[a+4>>2]=j;q[i>>2]=b;b=q[f>>2];q[f>>2]=q[c>>2];q[c>>2]=b;b=q[e>>2];q[e>>2]=q[a+12>>2];q[a+12>>2]=b;b=a+36|0;c=q[b>>2];q[b>>2]=q[g>>2];q[g>>2]=c;b=q[d>>2];c=a+44|0;q[d>>2]=q[c>>2];q[c>>2]=b;b=a+52|0;c=q[b>>2];a=a+28|0;q[b>>2]=q[a>>2];q[a>>2]=c}function Mf(a,b,c,d,e){var f=0,g=0;if(!(d?c:0)){q[a>>2]=0;return}f=_S(340);q[f+4>>2]=2164;q[f>>2]=1960;q[f+8>>2]=1;b=q[b>>2];b=n[q[q[b>>2]+84>>2]](b)|0;q[f+12>>2]=0;g=q[b>>2];a:{if(!g){break a}n[q[q[g>>2]>>2]](g)|0;g=q[f+12>>2];if(!g){break a}n[q[q[g>>2]+8>>2]](g)|0;q[f+12>>2]=0}b=q[b>>2];q[f+16>>2]=1;q[f+12>>2]=b;lV(f+20|0,0,224);q[f+268>>2]=0;q[f+272>>2]=0;q[f+260>>2]=0;q[f+264>>2]=0;q[f+292>>2]=0;q[f+284>>2]=1065353216;q[f+288>>2]=-1;q[f+276>>2]=0;q[f+280>>2]=1065353216;yp(f+300|0);q[f+332>>2]=0;q[f+336>>2]=0;q[f+316>>2]=0;q[f+320>>2]=0;q[f+296>>2]=0;o[f+321|0]=0;o[f+322|0]=0;o[f+323|0]=0;o[f+324|0]=0;o[f+325|0]=0;o[f+326|0]=0;o[f+327|0]=0;o[f+328|0]=0;b=Nf(f,c,d,e,0);q[a>>2]=0;if(b){q[a>>2]=f;return}n[q[q[f>>2]+8>>2]](f)|0}function Eo(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=q[b>>2];e=-2128831035;g=q[b+4>>2];c=g<<1;if(c){b=0;while(1){e=w(r[b+h|0]^e,16777619);b=b+1|0;if((c|0)!=(b|0)){continue}break}}d=q[a+4>>2];a:{if(!d){break a}b=q[a>>2];f=yW(d);a=d+ -1&e;b:{if(f>>>0<=1){break b}a=e;if(e>>>0>>0){break b}a=(e>>>0)%(d>>>0)|0}b=q[b+(a<<2)>>2];if(!b){break a}c=q[b>>2];if(!c){break a}i=a;j=d+ -1|0;k=f>>>0>1;while(1){c:{b=q[c+4>>2];if((e|0)!=(b|0)){d:{if(!k){b=b&j;break d}if(b>>>0>>0){break d}b=(b>>>0)%(d>>>0)|0}if((b|0)!=(i|0)){break a}break c}if(q[c+12>>2]!=(g|0)){break c}if(g){b=q[c+8>>2];a=g;f=h;while(1){if(s[f>>1]!=s[b>>1]){break c}f=f+2|0;b=b+2|0;a=a+ -1|0;if(a){continue}break}}l=c;break a}c=q[c>>2];if(c){continue}break}}return l}function Hy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ue-32|0;ue=d;e=q[a+180>>2];a:{if(!e){e=q[a+16>>2];q[d+20>>2]=4896;q[d+16>>2]=194;GD(d+24|0,e,b,c,d+8|0);e=q[d+24>>2];q[d+24>>2]=0;c=q[a+180>>2];b:{if(!c){q[a+180>>2]=e;break b}n[q[q[c>>2]+8>>2]](c)|0;c=q[d+24>>2];q[a+180>>2]=e;if(!c){break b}n[q[q[c>>2]+8>>2]](c)|0;q[d+24>>2]=0}c=q[q[d+20>>2]+4>>2];if(!c){break a}n[c](q[d+8>>2]);break a}q[d+20>>2]=4896;q[d+16>>2]=194;SC(e+ -4|0,b,c,d+8|0);c=q[q[d+20>>2]+4>>2];if(!c){break a}n[c](q[d+8>>2])}c:{if(b){c=d;b=q[a+180>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[a+180>>2]}q[c>>2]=b;lv(a,d);a=q[d>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0;break c}q[d>>2]=0;lv(a,d);a=q[d>>2];if(!a){break c}n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0}ue=d+32|0}function Ku(a){var b=0,c=0;c=ue-16|0;ue=c;q[a>>2]=27124;q[c+12>>2]=0;cV(c+12|0,16,352);b=lV(q[c+12>>2],0,352);q[b+236>>2]=1065353216;q[b+228>>2]=1065353216;q[b+232>>2]=1065353216;q[b+220>>2]=1065353216;q[b+224>>2]=1065353216;q[b+212>>2]=0;q[b+216>>2]=1065353216;q[b+204>>2]=1065353216;q[b+208>>2]=0;Ne(b+240|0,255,255,255,255);Ne(b+244|0,40,40,40,255);q[b+272>>2]=0;q[b+276>>2]=0;q[b+264>>2]=0;q[b+268>>2]=0;q[b+256>>2]=0;q[b+260>>2]=0;q[b+248>>2]=0;q[b+252>>2]=0;q[b+284>>2]=0;q[b+288>>2]=0;q[b+280>>2]=1065353216;q[b+292>>2]=0;q[b+296>>2]=0;q[b+300>>2]=0;q[b+304>>2]=0;q[b+308>>2]=0;q[b+332>>2]=0;q[b+336>>2]=0;q[b+324>>2]=0;q[b+328>>2]=1;q[b+316>>2]=0;q[b+320>>2]=0;o[b+314|0]=0;p[b+312>>1]=1;o[b+340|0]=0;q[a+4>>2]=b;ue=c+16|0}function tM(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;f=ue-352|0;ue=f;q[f+336>>2]=b;q[f+344>>2]=a;g=AL(c);h=uM(c,f+224|0);vM(f+208|0,c,f+332|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!XH(f+344|0,f+336|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(wM(YH(f+344|0),g,b,f+188|0,f+8|0,q[f+332>>2],f+208|0,f+16|0,f+12|0,h)){break a}_H(f+344|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}i=e,j=GL(b,q[f+188>>2],d,g),q[i>>2]=j;HL(f+208|0,f+16|0,q[f+12>>2],d);if($H(f+344|0,f+336|0)){q[d>>2]=q[d>>2]|2}b=q[f+344>>2];oT(a);oT(f+208|0);ue=f+352|0;return b}function Oz(a,b){var c=0,d=0,e=0,f=x(0),g=0,h=0,i=x(0),j=x(0),k=0;g=ue-304|0;ue=g;c=a+304|0;e=a+608|0;f=u[a+608>>2];i=u[a+304>>2];j=u[a>>2];a:{if(!(i>j)){if(!(f>i)){break a}d=kV(g,c,304);c=kV(c,e,304);kV(e,d,304);if(!(u[c>>2]>j)){break a}d=kV(d,a,304);kV(a,c,304);kV(c,d,304);break a}if(!!(f>i)){c=kV(g,a,304);kV(a,e,304);kV(e,c,304);break a}d=kV(g,a,304);h=kV(a,c,304);c=kV(c,d,304);if(!(f>u[h+304>>2])){break a}d=kV(d,c,304);kV(c,e,304);kV(e,d,304)}c=a+912|0;if((c|0)!=(b|0)){while(1){d=c;f=u[c>>2];if(!!(f>u[e>>2])){k=kV(g,d+4|0,300);h=d;while(1){b:{c=e;kV(h,c,304);if((a|0)==(c|0)){c=a;break b}h=c;e=c+ -304|0;if(f>u[e>>2]){continue}}break}u[c>>2]=f;kV(c+4|0,k,300)}e=d;c=e+304|0;if((c|0)!=(b|0)){continue}break}}ue=g+304|0}function LA(a,b){var c=0,d=0,e=0,f=x(0),g=0,h=0,i=x(0),j=x(0),k=0;g=ue-272|0;ue=g;c=a+272|0;e=a+544|0;f=u[a+544>>2];i=u[a+272>>2];j=u[a>>2];a:{if(!(i>j)){if(!(f>i)){break a}d=kV(g,c,272);c=kV(c,e,272);kV(e,d,272);if(!(u[c>>2]>j)){break a}d=kV(d,a,272);kV(a,c,272);kV(c,d,272);break a}if(!!(f>i)){c=kV(g,a,272);kV(a,e,272);kV(e,c,272);break a}d=kV(g,a,272);h=kV(a,c,272);c=kV(c,d,272);if(!(f>u[h+272>>2])){break a}d=kV(d,c,272);kV(c,e,272);kV(e,d,272)}c=a+816|0;if((c|0)!=(b|0)){while(1){d=c;f=u[c>>2];if(!!(f>u[e>>2])){k=kV(g,d+4|0,268);h=d;while(1){b:{c=e;kV(h,c,272);if((a|0)==(c|0)){c=a;break b}h=c;e=c+ -272|0;if(f>u[e>>2]){continue}}break}u[c>>2]=f;kV(c+4|0,k,268)}e=d;c=e+272|0;if((c|0)!=(b|0)){continue}break}}ue=g+272|0}function Jz(a,b){var c=0,d=0,e=0,f=x(0),g=0,h=0,i=x(0),j=x(0),k=0;g=ue-304|0;ue=g;c=a+304|0;e=a+608|0;f=u[a+608>>2];i=u[a+304>>2];j=u[a>>2];a:{if(!(i>2]>2])){break a}d=kV(d,c,304);kV(c,e,304);kV(e,d,304)}c=a+912|0;if((c|0)!=(b|0)){while(1){d=c;f=u[c>>2];if(!!(f>2])){k=kV(g,d+4|0,300);h=d;while(1){b:{c=e;kV(h,c,304);if((a|0)==(c|0)){c=a;break b}h=c;e=c+ -304|0;if(f>2]){continue}}break}u[c>>2]=f;kV(c+4|0,k,300)}e=d;c=e+304|0;if((c|0)!=(b|0)){continue}break}}ue=g+304|0}function GA(a,b){var c=0,d=0,e=0,f=x(0),g=0,h=0,i=x(0),j=x(0),k=0;g=ue-272|0;ue=g;c=a+272|0;e=a+544|0;f=u[a+544>>2];i=u[a+272>>2];j=u[a>>2];a:{if(!(i>2]>2])){break a}d=kV(d,c,272);kV(c,e,272);kV(e,d,272)}c=a+816|0;if((c|0)!=(b|0)){while(1){d=c;f=u[c>>2];if(!!(f>2])){k=kV(g,d+4|0,268);h=d;while(1){b:{c=e;kV(h,c,272);if((a|0)==(c|0)){c=a;break b}h=c;e=c+ -272|0;if(f>2]){continue}}break}u[c>>2]=f;kV(c+4|0,k,268)}e=d;c=e+272|0;if((c|0)!=(b|0)){continue}break}}ue=g+272|0}function CM(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;f=ue-352|0;ue=f;q[f+336>>2]=b;q[f+344>>2]=a;g=AL(c);h=uM(c,f+224|0);vM(f+208|0,c,f+332|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!XH(f+344|0,f+336|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(wM(YH(f+344|0),g,b,f+188|0,f+8|0,q[f+332>>2],f+208|0,f+16|0,f+12|0,h)){break a}_H(f+344|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}i=e,j=QL(b,q[f+188>>2],d,g),q[i>>2]=j;HL(f+208|0,f+16|0,q[f+12>>2],d);if($H(f+344|0,f+336|0)){q[d>>2]=q[d>>2]|2}b=q[f+344>>2];oT(a);oT(f+208|0);ue=f+352|0;return b}function AM(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;f=ue-352|0;ue=f;q[f+336>>2]=b;q[f+344>>2]=a;g=AL(c);h=uM(c,f+224|0);vM(f+208|0,c,f+332|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!XH(f+344|0,f+336|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(wM(YH(f+344|0),g,b,f+188|0,f+8|0,q[f+332>>2],f+208|0,f+16|0,f+12|0,h)){break a}_H(f+344|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}i=e,j=NL(b,q[f+188>>2],d,g),p[i>>1]=j;HL(f+208|0,f+16|0,q[f+12>>2],d);if($H(f+344|0,f+336|0)){q[d>>2]=q[d>>2]|2}b=q[f+344>>2];oT(a);oT(f+208|0);ue=f+352|0;return b}function ys(a,b,c,d,e,f){var g=0,h=0,i=0,j=x(0),k=x(0),l=0,m=x(0);g=ue-80|0;ue=g;h=q[a+40>>2];i=q[a+36>>2];q[g+24>>2]=i;q[g+28>>2]=h;q[g+64>>2]=i;q[g+68>>2]=h;Is(g+72|0,c,d,e,f,a+12|0,g+24|0);h=q[a+48>>2];i=q[a+44>>2];q[g+16>>2]=i;q[g+20>>2]=h;q[g+48>>2]=i;q[g+52>>2]=h;Is(g+56|0,c,d,e,f,a+20|0,g+16|0);l=b,m=x(n[q[q[f>>2]+16>>2]](f,u[g+76>>2],u[g+72>>2])),u[l>>2]=m;l=b,m=x(n[q[q[f>>2]+16>>2]](f,u[g+60>>2],u[g+56>>2])),u[l+8>>2]=m;if(r[a+88|0]){h=q[a+56>>2];i=q[a+52>>2];q[g+8>>2]=i;q[g+12>>2]=h;q[g+32>>2]=i;q[g+36>>2]=h;Is(g+40|0,c,d,e,f,a+28|0,g+8|0);j=x(n[q[q[f>>2]+16>>2]](f,u[g+44>>2],u[g+40>>2]));u[b+4>>2]=j;k=x(y(x(j-u[b>>2])));j=x(k+x(y(x(u[b+8>>2]-j))));u[b+12>>2]=j>x(9.999999974752427e-7)?x(k/j):x(0)}ue=g+80|0}function SL(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;g=AL(c);BL(f+208|0,c,f+255|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(FL(HH(f+264|0),g,b,f+188|0,f+8|0,o[f+255|0],f+208|0,f+16|0,f+12|0,355328)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}h=e,i=TL(b,q[f+188>>2],d,g),q[h>>2]=i;q[e+4>>2]=we;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}b=q[f+264>>2];oT(a);oT(f+208|0);ue=f+272|0;return b}function JL(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;g=AL(c);BL(f+208|0,c,f+255|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(FL(HH(f+264|0),g,b,f+188|0,f+8|0,o[f+255|0],f+208|0,f+16|0,f+12|0,355328)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}h=e,i=KL(b,q[f+188>>2],d,g),q[h>>2]=i;q[e+4>>2]=we;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}b=q[f+264>>2];oT(a);oT(f+208|0);ue=f+272|0;return b}function js(a,b){var c=0,d=0,e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0);c=q[a+4>>2];a:{if((c|0)!=q[a+8>>2]){d=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=d;d=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=d;b=q[a+4>>2]+16|0;q[a+4>>2]=b;break a}_r(a,b);b=q[a+4>>2]}b:{c=b;b=q[a>>2];c=c-b>>4;if(c>>>0>=2){c=b+(c<<4)|0;b=c+ -32|0;e=u[b>>2];c=c+ -16|0;f=u[c>>2];g=u[b+4>>2];h=u[c+4>>2];i=u[b+8>>2];j=u[c+8>>2];b=q[a- -64>>2];c=q[a+68>>2];if((b|0)==c<<5){if((b+1|0)<=-1){break b}d=a+60|0;if(b>>>0<=1073741822){b=b+32&-32;c=c<<6;b=c>>>0>>0?b:c}else{b=2147483647}ks(d,b);b=q[a+64>>2]}q[a+64>>2]=b+1;c=1<<(b&31);a=q[a+60>>2]+(b>>>3&536870908)|0;b=a;if(((h==g)<<1|f==e|(j==i)<<2)==7){a=c|q[a>>2]}else{a=q[a>>2]&(c^-1)}q[b>>2]=a}return}kU();F()}function Hi(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=x(0),l=x(0);i=q[b>>2]+ -1|0;if(i>>>0<=1){a:{if(i-1){d=u[a+828>>2];e=x(x(d*u[c+44>>2])+u[c+28>>2]);f=x(x(d*u[c+40>>2])+u[c+24>>2]);g=x(x(d*u[c+36>>2])+u[c+20>>2]);h=x(x(d*u[c+32>>2])+u[c+16>>2]);j=x(x(d*x(d*u[c+60>>2]))*x(.5));k=x(x(d*x(d*u[c+56>>2]))*x(.5));l=x(x(d*x(d*u[c+52>>2]))*x(.5));d=x(x(d*x(d*u[c+48>>2]))*x(.5));break a}e=u[c+28>>2];d=x(B(x(A(x(u[a+828>>2]/u[a+824>>2]),x(1))),x(0)));d=x(x(d*u[b+44>>2])+x(x(d*x(d*x(d*u[b+36>>2])))+x(d*x(d*u[b+40>>2]))));j=x(x(u[c+44>>2]-e)*d);f=u[c+24>>2];k=x(x(u[c+40>>2]-f)*d);g=u[c+20>>2];l=x(x(u[c+36>>2]-g)*d);h=u[c+16>>2];d=x(x(u[c+32>>2]-h)*d)}u[c+12>>2]=e+j;u[c+8>>2]=f+k;u[c+4>>2]=g+l;u[c>>2]=h+d}}function lV(a,b,c){var d=0,e=0,f=0,g=0;a:{if(!c){break a}d=a+c|0;o[d+ -1|0]=b;o[a|0]=b;if(c>>>0<3){break a}o[d+ -2|0]=b;o[a+1|0]=b;o[d+ -3|0]=b;o[a+2|0]=b;if(c>>>0<7){break a}o[d+ -4|0]=b;o[a+3|0]=b;if(c>>>0<9){break a}d=0-a&3;e=d+a|0;b=w(b&255,16843009);q[e>>2]=b;c=c-d&-4;d=c+e|0;q[d+ -4>>2]=b;if(c>>>0<9){break a}q[e+8>>2]=b;q[e+4>>2]=b;q[d+ -8>>2]=b;q[d+ -12>>2]=b;if(c>>>0<25){break a}q[e+24>>2]=b;q[e+20>>2]=b;q[e+16>>2]=b;q[e+12>>2]=b;q[d+ -16>>2]=b;q[d+ -20>>2]=b;q[d+ -24>>2]=b;q[d+ -28>>2]=b;g=e&4|24;c=c-g|0;if(c>>>0<32){break a}d=b;f=b;b=e+g|0;while(1){q[b+24>>2]=f;q[b+28>>2]=d;q[b+16>>2]=f;q[b+20>>2]=d;q[b+8>>2]=f;q[b+12>>2]=d;q[b>>2]=f;q[b+4>>2]=d;b=b+32|0;c=c+ -32|0;if(c>>>0>31){continue}break}}return a}function Yp(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0);i=x(1);h=x(u[b>>2]-u[b+48>>2]);l=x(u[b+8>>2]-u[b+56>>2]);d=x(E(x(x(x(h*h)+x(0))+x(l*l))));a:{if(d>2];if(x(y(e))>2]?e:x(d*e);g=x(x(f/d)*x(f*x(.5)));j=u[b+148>>2];e=e>2]-u[b+60>>2])/d);f=x(E(x(x(f*f)-x(g*g))));i=x(j*x(x(e*x(x(x(i-i)*f)-x(i*g)))-u[b+28>>2]));k=x(x(0)/d);m=x(k*x(0));h=x(h/d);d=x(l/d);n=x(j*x(x(e*x(x(x(m-h)*f)-x(d*g)))-u[b+24>>2]));k=x(j*x(x(e*x(x(x(x(h*x(0))-x(d*x(0)))*f)-x(k*g)))-u[b+20>>2]));g=x(j*x(x(e*x(x(x(d-m)*f)-x(h*g)))-u[b+16>>2]))}u[a+12>>2]=i;u[a+8>>2]=n;u[a+4>>2]=k;u[a>>2]=g}function Ni(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=x(0),p=x(0);f=ue-16|0;ue=f;n[q[q[c>>2]+44>>2]](f,c);g=q[f>>2];if(g){i=r[a+2465|0];j=r[a+2464|0];k=q[a+3484>>2];l=n[q[q[a>>2]+8>>2]](a)|0;c=n[q[q[c>>2]+36>>2]](c)|0;m=u[d+8>>2];d=q[a+2276>>2];h=n[q[q[a>>2]+8>>2]](a)|0;p=x(n[q[q[h>>2]+32>>2]](h));n[q[q[a>>2]+44>>2]](f+8|0,a);h=q[f+8>>2];o[a+3472|0]=q[a+180>>2]==5;q[a+3468>>2]=a+2476;q[a+3464>>2]=a+2288;q[a+3460>>2]=d;u[a+3456>>2]=p;o[a+3452|0]=(c|0)==1;q[a+3448>>2]=k;o[a+3445|0]=j;o[a+3444|0]=i;q[a+3440>>2]=l;u[a+3436>>2]=m/x(60);d=a+3436|0;c=q[a+3476>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+3476>>2]=0}q[a+3476>>2]=h;n[q[q[g>>2]+20>>2]](g,d,b,e);n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Gm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=ue+ -64|0;ue=d;q[d+60>>2]=b;e=q[a+468>>2];a:{if(!e){break a}a=a+464|0;while(1){b:{f=q[e+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}e=e+4|0}e=q[e>>2];if(e){continue}break a}break}a=kl(a,d+60|0);no(c,a+92|0,a+44|0,yp(d+48|0));b=Ts(d,c);c=q[d+44>>2];q[a+264>>2]=q[d+40>>2];q[a+268>>2]=c;c=q[d+36>>2];q[a+256>>2]=q[d+32>>2];q[a+260>>2]=c;c=q[d+28>>2];q[a+248>>2]=q[d+24>>2];q[a+252>>2]=c;c=q[d+20>>2];q[a+240>>2]=q[d+16>>2];q[a+244>>2]=c;c=q[d+12>>2];q[a+232>>2]=q[d+8>>2];q[a+236>>2]=c;c=q[d+4>>2];q[a+224>>2]=q[d>>2];q[a+228>>2]=c;o[a+20|0]=1;if(!r[a+168|0]){break a}a=q[a+4>>2];if(!a|!q[a+36>>2]){break a}a=Tk(q[a+36>>2]);if(!a){break a}Ij(a,b)}ue=d- -64|0}function YJ(a,b,c,d,e,f){var g=0;g=ue-80|0;ue=g;a:{if((f|0)>=16384){QJ(g+32|0,b,c,d,e,0,0,0,2147352576);d=q[g+40>>2];e=q[g+44>>2];b=q[g+32>>2];c=q[g+36>>2];if((f|0)<32767){f=f+ -16383|0;break a}QJ(g+16|0,b,c,d,e,0,0,0,2147352576);f=((f|0)<49149?f:49149)+ -32766|0;d=q[g+24>>2];e=q[g+28>>2];b=q[g+16>>2];c=q[g+20>>2];break a}if((f|0)>-16383){break a}QJ(g- -64|0,b,c,d,e,0,0,0,65536);d=q[g+72>>2];e=q[g+76>>2];b=q[g+64>>2];c=q[g+68>>2];if((f|0)>-32765){f=f+16382|0;break a}QJ(g+48|0,b,c,d,e,0,0,0,65536);f=((f|0)>-49146?f:-49146)+32764|0;d=q[g+56>>2];e=q[g+60>>2];b=q[g+48>>2];c=q[g+52>>2]}QJ(g,b,c,d,e,0,0,0,f+16383<<16);b=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=b;b=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=b;ue=g+80|0}function Gl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;a:{e=q[a+8>>2];c=q[a+4>>2];b:{if(e-c>>>0>=b>>>0){while(1){o[c|0]=0;c=q[a+4>>2]+1|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=c-g|0;d=h+b|0;if((d|0)<=-1){break a}c=0;e=e-g|0;g=e<<1;d=e>>>0<1073741823?g>>>0>>0?d:g:2147483647;c:{if(!d){break c}yt(f);c=n[q[f+8>>2]](f,d,16)|0;e=q[q[f+12>>2]+4>>2];if(!e){break c}n[e](q[f>>2])}g=c+d|0;d=lV(c+h|0,0,b);c=d;while(1){c=c+1|0;b=b+ -1|0;if(b){continue}break}e=d;b=q[a>>2];d=q[a+4>>2]-b|0;e=e-d|0;if((d|0)>=1){kV(e,b,d);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=e;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}zt(f);n[q[f+8>>2]](f,b,c-b|0);a=q[q[f+12>>2]+4>>2];if(!a){break b}n[a](q[f>>2])}ue=f+16|0;return}kU();F()}function _o(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0;i=ue-16|0;ue=i;if(2147483630-b>>>0>=c>>>0){if(o[a+11|0]<=-1){h=q[a>>2]}else{h=a}l=h;k=2147483631;wt(i);h=i;if(b>>>0<=1073741798){j=b<<1;c=b+c|0;c=c>>>0>>0?j:c;k=c>>>0<5?5:c+8&-8}j=n[q[i+8>>2]](h,k<<1)|0;c=q[q[i+12>>2]+4>>2];if(c){n[c](q[i>>2])}if(f){c=j;h=f;while(1){p[c>>1]=s[g>>1];g=g+2|0;c=c+2|0;h=h+ -1|0;if(h){continue}break}}d=d-e|0;h=d;if(h){g=(e<<1)+l|0;c=(f<<1)+j|0;while(1){p[c>>1]=s[g>>1];g=g+2|0;c=c+2|0;h=h+ -1|0;if(h){continue}break}}b=b+1|0;a:{if((b|0)==5){break a}xt(i);n[q[i+8>>2]](i,l,b<<1);b=q[q[i+12>>2]+4>>2];if(!b){break a}n[b](q[i>>2])}q[a>>2]=j;q[a+8>>2]=k|-2147483648;b=a;a=d+f|0;q[b+4>>2]=a;p[(a<<1)+j>>1]=0;ue=i+16|0;return}kT();F()}function zL(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;g=AL(c);BL(f+208|0,c,f+255|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(FL(HH(f+264|0),g,b,f+188|0,f+8|0,o[f+255|0],f+208|0,f+16|0,f+12|0,355328)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}h=e,i=GL(b,q[f+188>>2],d,g),q[h>>2]=i;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}b=q[f+264>>2];oT(a);oT(f+208|0);ue=f+272|0;return b}function PL(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;g=AL(c);BL(f+208|0,c,f+255|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(FL(HH(f+264|0),g,b,f+188|0,f+8|0,o[f+255|0],f+208|0,f+16|0,f+12|0,355328)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}h=e,i=QL(b,q[f+188>>2],d,g),q[h>>2]=i;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}b=q[f+264>>2];oT(a);oT(f+208|0);ue=f+272|0;return b}function ML(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ue-272|0;ue=f;q[f+256>>2]=b;q[f+264>>2]=a;g=AL(c);BL(f+208|0,c,f+255|0);a=CL(f+192|0);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=b;q[f+12>>2]=f+16;q[f+8>>2]=0;while(1){a:{if(!GH(f+264|0,f+256|0)){break a}if(q[f+188>>2]==(uL(a)+b|0)){c=uL(a);EL(a,uL(a)<<1);EL(a,DL(a));b=vL(a,0);q[f+188>>2]=c+b}if(FL(HH(f+264|0),g,b,f+188|0,f+8|0,o[f+255|0],f+208|0,f+16|0,f+12|0,355328)){break a}JH(f+264|0);continue}break}b:{if(!uL(f+208|0)){break b}c=q[f+12>>2];if((c-(f+16|0)|0)>159){break b}q[f+12>>2]=c+4;q[c>>2]=q[f+8>>2]}h=e,i=NL(b,q[f+188>>2],d,g),p[h>>1]=i;HL(f+208|0,f+16|0,q[f+12>>2],d);if(KH(f+264|0,f+256|0)){q[d>>2]=q[d>>2]|2}b=q[f+264>>2];oT(a);oT(f+208|0);ue=f+272|0;return b}function LC(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;a:{e=q[a+8>>2];c=q[a+4>>2];b:{if(e-c>>>0>=b>>>0){while(1){o[c|0]=0;c=q[a+4>>2]+1|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}g=q[a>>2];h=c-g|0;d=h+b|0;if((d|0)<=-1){break a}c=0;e=e-g|0;g=e<<1;d=e>>>0<1073741823?g>>>0>>0?d:g:2147483647;c:{if(!d){break c}wt(f);c=n[q[f+8>>2]](f,d)|0;e=q[q[f+12>>2]+4>>2];if(!e){break c}n[e](q[f>>2])}g=c+d|0;d=lV(c+h|0,0,b);c=d;while(1){c=c+1|0;b=b+ -1|0;if(b){continue}break}e=d;b=q[a>>2];d=q[a+4>>2]-b|0;e=e-d|0;if((d|0)>=1){kV(e,b,d);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=e;c=q[a+8>>2];q[a+8>>2]=g;if(!b){break b}xt(f);n[q[f+8>>2]](f,b,c-b|0);a=q[q[f+12>>2]+4>>2];if(!a){break b}n[a](q[f>>2])}ue=f+16|0;return}kU();F()}function nk(a,b,c,d,e){var f=0,g=0;a:{b:{if(!r[a+23040|0]){g=a+23040|0;f=0;break b}g=a+23041|0;f=1;if(!r[g|0]){break b}g=a+23042|0;f=2;if(!r[g|0]){break b}g=a+23043|0;f=3;if(!r[g|0]){break b}g=a+23044|0;f=4;if(!r[g|0]){break b}g=a+23045|0;f=5;if(!r[g|0]){break b}g=a+23046|0;f=6;if(!r[g|0]){break b}g=a+23047|0;f=7;if(!r[g|0]){break b}g=a+23048|0;f=8;if(!r[g|0]){break b}g=a+23049|0;f=9;if(!r[g|0]){break b}g=a+23050|0;f=10;if(!r[g|0]){break b}g=a+23051|0;f=11;if(!r[g|0]){break b}g=a+23052|0;f=12;if(!r[g|0]){break b}g=a+23053|0;f=13;if(!r[g|0]){break b}g=a+23054|0;f=14;if(!r[g|0]){break b}g=a+23055|0;f=0;if(r[g|0]){break a}f=15}o[g|0]=1;q[a+23056>>2]=q[a+23056>>2]+1;f=Bj(w(f,1440)+a|0,b,c,d,e)}return f}function FP(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=ue-496|0;ue=a;EH(a+488|0,d);l=WH(a+488|0);if(uL(f)){m=q[rM(f,0)>>2]==(II(l,45)|0)}j=CL(a+456|0);i=CL(a+440|0);h=CL(a+424|0);CP(c,m,a+488|0,a+480|0,a+476|0,a+472|0,j,i,h,a+420|0);q[a+16>>2]=857;k=rL(a+8|0,0,a+16|0);a:{if((uL(f)|0)>q[a+420>>2]){c=uL(f);g=q[a+420>>2];g=(uL(h)+(c-g<<1)|0)+1|0;break a}g=uL(h)+2|0}c=a+16|0;g=(uL(i)+g|0)+q[a+420>>2]|0;b:{if(g>>>0<101){break b}sL(k,ZU(g<<2));c=q[k>>2];if(c){break b}TG();F()}DP(c,a+4|0,a,q[d+4>>2],kM(f),kM(f)+(uL(f)<<2)|0,l,m,a+480|0,q[a+476>>2],q[a+472>>2],j,i,h,q[a+420>>2]);b=tN(b,c,q[a+4>>2],q[a>>2],d,e);wL(k);oT(h);oT(i);oT(j);kL(a+488|0);ue=a+496|0;return b|0}function cG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=ue-32|0;ue=d;e=q[a+28>>2];q[d+16>>2]=e;f=q[a+20>>2];q[d+28>>2]=c;q[d+24>>2]=b;b=f-e|0;q[d+20>>2]=b;e=b+c|0;h=2;b=d+16|0;a:{b:{c:{if(!uG(db(q[a+60>>2],d+16|0,2,d+12|0)|0)){while(1){f=q[d+12>>2];if((f|0)==(e|0)){break c}if((f|0)<=-1){break b}g=q[b+4>>2];i=f>>>0>g>>>0;b=i?b+8|0:b;g=f-(i?g:0)|0;q[b>>2]=g+q[b>>2];q[b+4>>2]=q[b+4>>2]-g;e=e-f|0;h=h-i|0;if(!uG(db(q[a+60>>2],b|0,h|0,d+12|0)|0)){continue}break}}q[d+12>>2]=-1;if((e|0)!=-1){break b}}b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];a=c;break a}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a>>2]=q[a>>2]|32;a=0;if((h|0)==2){break a}a=c-q[b+4>>2]|0}ue=d+32|0;return a|0}function Uo(a,b,c){var d=0,e=0,f=0,g=0,h=0;f=ue-304|0;ue=f;a:{b:{d=q[b+4>>2];if(!d){break b}if(r[b|0]){c:{d=b+12|0;g=q[d>>2];if(!g){break c}e=d;while(1){h=Vo(g+16|0,c);e=h?e:g;g=q[(h?4:0)+g>>2];if(g){continue}break}if((e|0)==(d|0)){break c}if(Vo(c,e+16|0)){break c}q[e+588>>2]=q[e+588>>2]+1;q[a>>2]=0;b=q[e+584>>2];if(!b){q[a>>2]=b;break a}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[e+584>>2];break a}d=q[b+4>>2];n[q[q[d>>2]+20>>2]](f,d,c);d=q[f>>2];if(!d){break b}e=kV(f,c,284);q[e+284>>2]=0;n[q[q[d>>2]>>2]](d)|0;q[e+288>>2]=1;q[e+284>>2]=d;Wo(e+296|0,b+8|0,c,c,e);b=q[e+284>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+284>>2]=0}q[a>>2]=d;break a}n[q[q[d>>2]+20>>2]](f,d,c);q[a>>2]=q[f>>2];break a}q[a>>2]=0}ue=f+304|0}function Wo(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;h=ue-16|0;ue=h;g=q[b+4>>2];a:{b:{if(g){i=b+4|0;while(1){f=g+16|0;c:{if(Vo(c,f)){f=q[g>>2];if(f){break c}break b}if(!Vo(f,c)){break a}i=g+4|0;f=q[g+4>>2];if(!f){break a}g=i}i=g;g=f;continue}}g=b+4|0}i=g}j=a;f=q[i>>2];if(f){b=0}else{wt(h);f=n[q[h+8>>2]](h,592)|0;c=q[q[h+12>>2]+4>>2];if(c){n[c](q[h>>2])}kV(f+16|0,d,284);kV(f+300|0,e,284);q[f+584>>2]=0;d=q[e+284>>2];q[e+284>>2]=0;c=q[f+584>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[f+584>>2]=0}q[f+584>>2]=d;c=q[e+288>>2];q[f+8>>2]=g;q[f>>2]=0;q[f+4>>2]=0;q[f+588>>2]=c;q[i>>2]=f;d=q[q[b>>2]>>2];c=f;d:{if(!d){break d}q[b>>2]=d;c=q[i>>2]}ih(q[b+4>>2],c);q[b+8>>2]=q[b+8>>2]+1;b=1}o[j+4|0]=b;q[a>>2]=f;ue=h+16|0}function bV(a,b){var c=0,d=0,e=0,f=0,g=0;c=16;d=a>>>0>16?a:16;a:{if(!(d+ -1&d)){a=d;break a}while(1){a=c;c=a<<1;if(a>>>0>>0){continue}break}}if(-64-a>>>0<=b>>>0){q[91802]=48;return 0}d=b>>>0<11?16:b+11&-8;c=ZU((d+a|0)+12|0);if(!c){return 0}b=c+ -8|0;b:{if(!(c&a+ -1)){a=b;break b}f=c+ -4|0;g=q[f>>2];c=((a+c|0)+ -1&0-a)+ -8|0;a=c-b>>>0>15?c:a+c|0;c=a-b|0;e=(g&-8)-c|0;if(!(g&3)){b=q[b>>2];q[a+4>>2]=e;q[a>>2]=b+c;break b}q[a+4>>2]=e|q[a+4>>2]&1|2;e=a+e|0;q[e+4>>2]=q[e+4>>2]|1;q[f>>2]=c|q[f>>2]&1|2;q[a+4>>2]=q[a+4>>2]|1;dV(b,c)}b=q[a+4>>2];c:{if(!(b&3)){break c}c=b&-8;if(c>>>0<=d+16>>>0){break c}q[a+4>>2]=d|b&1|2;b=a+d|0;d=c-d|0;q[b+4>>2]=d|3;c=a+c|0;q[c+4>>2]=q[c+4>>2]|1;dV(b,d)}return a+8|0}function CP(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=ue-16|0;ue=k;a:{if(a){a=pP(c);b:{if(b){$O(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;aP(k,a);break b}yP(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;nL(k,a)}qP(i,k);oT(k);l=e,m=QM(a),q[l>>2]=m;l=f,m=RM(a),q[l>>2]=m;SM(k,a);bP(g,k);oT(k);mL(k,a);qP(h,k);oT(k);a=cP(a);break a}a=rP(c);c:{if(b){$O(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;aP(k,a);break c}yP(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;nL(k,a)}qP(i,k);oT(k);l=e,m=QM(a),q[l>>2]=m;l=f,m=RM(a),q[l>>2]=m;SM(k,a);bP(g,k);oT(k);mL(k,a);qP(h,k);oT(k);a=cP(a)}q[j>>2]=a;ue=k+16|0}function AP(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=ue-192|0;ue=a;EH(a+184|0,d);l=FH(a+184|0);if(uL(f)){m=r[vL(f,0)|0]==(HI(l,45)&255)}j=CL(a+160|0);i=CL(a+144|0);h=CL(a+128|0);wP(c,m,a+184|0,a+176|0,a+175|0,a+174|0,j,i,h,a+124|0);q[a+16>>2]=857;k=rL(a+8|0,0,a+16|0);a:{if((uL(f)|0)>q[a+124>>2]){c=uL(f);g=q[a+124>>2];g=(uL(h)+(c-g<<1)|0)+1|0;break a}g=uL(h)+2|0}c=a+16|0;g=(uL(i)+g|0)+q[a+124>>2]|0;b:{if(g>>>0<101){break b}sL(k,ZU(g));c=q[k>>2];if(c){break b}TG();F()}xP(c,a+4|0,a,q[d+4>>2],kM(f),kM(f)+uL(f)|0,l,m,a+176|0,o[a+175|0],o[a+174|0],j,i,h,q[a+124>>2]);b=Ut(b,c,q[a+4>>2],q[a>>2],d,e);wL(k);oT(h);oT(i);oT(j);kL(a+184|0);ue=a+192|0;return b|0}function wP(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=ue-16|0;ue=k;a:{if(a){a=_O(c);b:{if(b){$O(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;aP(k,a);break b}yP(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;nL(k,a)}bP(i,k);oT(k);l=e,m=QM(a),o[l|0]=m;l=f,m=RM(a),o[l|0]=m;SM(k,a);bP(g,k);oT(k);mL(k,a);bP(h,k);oT(k);a=cP(a);break a}a=dP(c);c:{if(b){$O(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;aP(k,a);break c}yP(k,a);b=q[k>>2];o[d|0]=b;o[d+1|0]=b>>>8;o[d+2|0]=b>>>16;o[d+3|0]=b>>>24;nL(k,a)}bP(i,k);oT(k);l=e,m=QM(a),o[l|0]=m;l=f,m=RM(a),o[l|0]=m;SM(k,a);bP(g,k);oT(k);mL(k,a);bP(h,k);oT(k);a=cP(a)}q[j>>2]=a;ue=k+16|0}function xl(a){var b=0,c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;b=q[a+464>>2];f=a+468|0;if((b|0)!=(f|0)){while(1){c=b;a:{if(!r[b+86|0]){break a}b=q[c+68>>2];if(b){yk(b,1)}o[c+83|0]=1;n[q[q[a>>2]+108>>2]](d+8|0,a);b=q[d+8>>2];if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;n[q[q[a>>2]+108>>2]](d,a);b=q[d>>2];n[q[q[b>>2]+36>>2]](b,q[c+72>>2]);b=q[d>>2];if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}b:{if(!r[c+87|0]|!r[c+88|0]){break b}b=q[c+68>>2];if(!b){break b}yk(b,0)}e=q[c+4>>2];c:{if(!e){b=q[c+8>>2];if((c|0)==q[b>>2]){break c}c=c+8|0;while(1){e=q[c>>2];c=e+8|0;b=q[e+8>>2];if((e|0)!=q[b>>2]){continue}break}break c}while(1){b=e;e=q[b>>2];if(e){continue}break}}if((b|0)!=(f|0)){continue}break}}ue=d+16|0}function HJ(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;c=q[a+116>>2];d=c;a:{f=q[a+112>>2];b:{if(c|f){c=q[a+124>>2];if((c|0)>(d|0)?1:(c|0)>=(d|0)?t[a+120>>2]>>0?0:1:0){break b}}f=NI(a);if((f|0)>-1){break a}}q[a+104>>2]=0;return-1}c=q[a+8>>2];d=q[a+116>>2];e=d;c:{d:{b=q[a+112>>2];if(!(d|b)){break d}d=(q[a+124>>2]^-1)+e|0;e=q[a+120>>2]^-1;b=e+b|0;if(b>>>0>>0){d=d+1|0}e=b;b=q[a+4>>2];g=c-b|0;h=e>>>0>>0?0:1;g=g>>31;if((d|0)>(g|0)?1:(d|0)>=(g|0)?h:0){break d}q[a+104>>2]=e+b;break c}q[a+104>>2]=c}e:{if(!c){c=q[a+4>>2];break e}d=a;b=c;c=q[a+4>>2];b=(b-c|0)+1|0;e=b+q[a+120>>2]|0;a=q[a+124>>2]+(b>>31)|0;q[d+120>>2]=e;q[d+124>>2]=e>>>0>>0?a+1|0:a}a=c+ -1|0;if(r[a|0]!=(f|0)){o[a|0]=f}return f}function fh(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0;a:{if(2147483630-b>>>0>=c>>>0){if(o[a+11|0]<=-1){k=q[a>>2]}else{k=a}l=2147483631;if(b>>>0<=1073741798){i=b<<1;c=b+c|0;c=c>>>0>>0?i:c;l=c>>>0<5?5:c+8&-8;if((l|0)<=-1){break a}}j=_S(l<<1);if(e){c=j;m=e;i=k;while(1){p[c>>1]=s[i>>1];i=i+2|0;c=c+2|0;m=m+ -1|0;if(m){continue}break}}if(g){c=(e<<1)+j|0;i=g;while(1){p[c>>1]=s[h>>1];h=h+2|0;c=c+2|0;i=i+ -1|0;if(i){continue}break}}d=d-f|0;i=d-e|0;if(i){c=e<<1;h=(c+k|0)+(f<<1)|0;c=(c+j|0)+(g<<1)|0;while(1){p[c>>1]=s[h>>1];h=h+2|0;c=c+2|0;i=i+ -1|0;if(i){continue}break}}if((b|0)!=4){_U(k)}q[a>>2]=j;q[a+8>>2]=l|-2147483648;b=a;a=d+g|0;q[b+4>>2]=a;p[(a<<1)+j>>1]=0;return}kT();F()}Ue(2320);F()}function nv(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;d=ue-16|0;ue=d;a:{g=c-b|0;e=q[a+8>>2];f=q[a>>2];h=e-f|0;b:{c:{if(g>>>0<=h>>>0){e=q[a+4>>2]-f|0;h=g>>>0>e>>>0?e+b|0:c;i=h-b|0;if(i){mV(f,b,i)}b=a+4|0;if(g>>>0>e>>>0){a=c-h|0;if((a|0)<1){break b}kV(q[b>>2],h,a);a=a+q[b>>2]|0;break c}a=f+i|0;break c}if(f){q[a+4>>2]=f;xt(d);n[q[d+8>>2]](d,f,h);c=q[q[d+12>>2]+4>>2];if(c){n[c](q[d>>2])}q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;e=0}if((g|0)<=-1){break a}c=e<<1;f=e>>>0<1073741823?c>>>0>>0?g:c:2147483647;if((f|0)<=-1){break a}wt(d);c=n[q[d+8>>2]](d,f)|0;e=q[q[d+12>>2]+4>>2];if(e){n[e](q[d>>2])}q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+f;kV(c,b,g);b=a+4|0;a=q[a+4>>2]+g|0}q[b>>2]=a}ue=d+16|0;return}kU();F()}function wM(a,b,c,d,e,f,g,h,i,j){var k=0,l=0;k=ue-16|0;ue=k;q[k+12>>2]=a;a:{b:{c:{d:{if(q[d>>2]!=(c|0)){break d}l=q[j+96>>2]==(a|0);if(q[j+100>>2]!=(a|0)?!l:0){break d}q[d>>2]=c+1;o[c|0]=l?43:45;break c}if(!uL(g)|(a|0)!=(f|0)){break b}a=0;b=q[i>>2];if((b-h|0)>159){break a}a=q[e>>2];q[i>>2]=b+4;q[b>>2]=a}a=0;q[e>>2]=0;break a}a=-1;g=PM(j,j+104|0,k+12|0)-j|0;if((g|0)>92){break a}f=g>>2;h=b+ -8|0;e:{if(h>>>0>2){if((b|0)!=16|(g|0)<88){break e}b=q[d>>2];if((b|0)==(c|0)|(b-c|0)>2|r[b+ -1|0]!=48){break a}a=0;q[e>>2]=0;q[d>>2]=b+1;o[b|0]=r[f+355328|0];break a}if(!(h-1)){break e}if((f|0)>=(b|0)){break a}}a=q[d>>2];q[d>>2]=a+1;o[a|0]=r[f+355328|0];q[e>>2]=q[e>>2]+1;a=0}ue=k+16|0;return a}function Mz(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0);g=ue-304|0;ue=g;j=u[c>>2];i=u[b>>2];a:{b:{if(!(i>u[a>>2])){if(!(j>i)){break a}h=kV(g,b,304);f=kV(b,c,304);kV(c,h,304);e=1;if(!(u[f>>2]>u[a>>2])){break a}e=kV(h,a,304);kV(a,f,304);kV(f,e,304);break b}e=1;if(!!(j>i)){f=kV(g,a,304);kV(a,c,304);kV(c,f,304);break a}h=kV(g,a,304);kV(a,b,304);f=kV(b,h,304);if(!(u[c>>2]>u[f>>2])){break a}e=kV(h,f,304);kV(f,c,304);kV(c,e,304)}e=2}c:{if(!(u[d>>2]>u[c>>2])){break c}f=kV(g,c,304);c=kV(c,d,304);kV(d,f,304);if(!(u[c>>2]>u[b>>2])){e=e+1|0;break c}d=kV(f,b,304);b=kV(b,c,304);kV(c,d,304);if(!(u[b>>2]>u[a>>2])){e=e+2|0;break c}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);e=e+3|0}ue=g+304|0;return e}function JA(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0);g=ue-272|0;ue=g;j=u[c>>2];i=u[b>>2];a:{b:{if(!(i>u[a>>2])){if(!(j>i)){break a}h=kV(g,b,272);f=kV(b,c,272);kV(c,h,272);e=1;if(!(u[f>>2]>u[a>>2])){break a}e=kV(h,a,272);kV(a,f,272);kV(f,e,272);break b}e=1;if(!!(j>i)){f=kV(g,a,272);kV(a,c,272);kV(c,f,272);break a}h=kV(g,a,272);kV(a,b,272);f=kV(b,h,272);if(!(u[c>>2]>u[f>>2])){break a}e=kV(h,f,272);kV(f,c,272);kV(c,e,272)}e=2}c:{if(!(u[d>>2]>u[c>>2])){break c}f=kV(g,c,272);c=kV(c,d,272);kV(d,f,272);if(!(u[c>>2]>u[b>>2])){e=e+1|0;break c}d=kV(f,b,272);b=kV(b,c,272);kV(c,d,272);if(!(u[b>>2]>u[a>>2])){e=e+2|0;break c}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);e=e+3|0}ue=g+272|0;return e}function Hz(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0);g=ue-304|0;ue=g;j=u[c>>2];i=u[b>>2];a:{b:{if(!(i>2])){if(!(j>2]>2])){break a}e=kV(h,a,304);kV(a,f,304);kV(f,e,304);break b}e=1;if(!!(j>2]>2])){break a}e=kV(h,f,304);kV(f,c,304);kV(c,e,304)}e=2}c:{if(!(u[d>>2]>2])){break c}f=kV(g,c,304);c=kV(c,d,304);kV(d,f,304);if(!(u[c>>2]>2])){e=e+1|0;break c}d=kV(f,b,304);b=kV(b,c,304);kV(c,d,304);if(!(u[b>>2]>2])){e=e+2|0;break c}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);e=e+3|0}ue=g+304|0;return e}function FL(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=ue-16|0;ue=k;o[k+15|0]=a;a:{b:{c:{d:{if(q[d>>2]!=(c|0)){break d}l=a&255;m=(l|0)==r[j+24|0];if(r[j+25|0]!=(l|0)?!m:0){break d}q[d>>2]=c+1;o[c|0]=m?43:45;break c}if(!uL(g)|(a|0)!=(f|0)){break b}a=0;b=q[i>>2];if((b-h|0)>159){break a}a=q[e>>2];q[i>>2]=b+4;q[b>>2]=a}a=0;q[e>>2]=0;break a}a=-1;f=lM(j,j+26|0,k+15|0)-j|0;if((f|0)>23){break a}g=b+ -8|0;e:{if(g>>>0>2){if((b|0)!=16|(f|0)<22){break e}b=q[d>>2];if((b|0)==(c|0)|(b-c|0)>2|r[b+ -1|0]!=48){break a}a=0;q[e>>2]=0;q[d>>2]=b+1;o[b|0]=r[f+355328|0];break a}if(!(g-1)){break e}if((f|0)>=(b|0)){break a}}a=q[d>>2];q[d>>2]=a+1;o[a|0]=r[f+355328|0];q[e>>2]=q[e>>2]+1;a=0}ue=k+16|0;return a}function ET(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=ue-16|0;ue=g;q[g+12>>2]=c;h=uL(a);a:{b:{c:{if(h>>>0>=b>>>0){i=h-b|0;q[g+8>>2]=i;k=g,l=q[RQ(g+12|0,g+8|0)>>2],q[k+12>>2]=l;c=DL(a);f=q[g+12>>2];if((c-h|0)+f>>>0>=e>>>0){j=kM(a);c=q[g+12>>2];d:{if((c|0)==(e|0)){break d}i=i-c|0;if(!i){break d}f=b+j|0;if(c>>>0>e>>>0){break c}e:{if(h+j>>>0<=d>>>0|f>>>0>=d>>>0){break e}if(c+f>>>0<=d>>>0){d=(e-c|0)+d|0;break e}rT(f,d,c);f=q[g+12>>2];c=0;q[g+12>>2]=0;d=d+e|0;e=e-f|0;b=b+f|0}f=b+j|0;rT(f+e|0,c+f|0,i)}rT(b+j|0,d,e);break b}sT(a,c,((e+h|0)-c|0)-f|0,h,b,f,e,d);break a}lT();F()}rT(f,d,e);rT(e+f|0,f+q[g+12>>2]|0,i)}b=a;a=h+(e-q[g+12>>2]|0)|0;nS(b,a);o[g+7|0]=0;XO(a+j|0,g+7|0)}ue=g+16|0}function EA(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0);g=ue-272|0;ue=g;j=u[c>>2];i=u[b>>2];a:{b:{if(!(i>2])){if(!(j>2]>2])){break a}e=kV(h,a,272);kV(a,f,272);kV(f,e,272);break b}e=1;if(!!(j>2]>2])){break a}e=kV(h,f,272);kV(f,c,272);kV(c,e,272)}e=2}c:{if(!(u[d>>2]>2])){break c}f=kV(g,c,272);c=kV(c,d,272);kV(d,f,272);if(!(u[c>>2]>2])){e=e+1|0;break c}d=kV(f,b,272);b=kV(b,c,272);kV(c,d,272);if(!(u[b>>2]>2])){e=e+2|0;break c}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);e=e+3|0}ue=g+272|0;return e}function vy(a){var b=0;b=q[a+44>>2];q[a+44>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+40>>2];q[a+40>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+36>>2];q[a+36>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+32>>2];q[a+32>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+28>>2];q[a+28>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+24>>2];q[a+24>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+20>>2];q[a+20>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+16>>2];q[a+16>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+12>>2];q[a+12>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+8>>2];q[a+8>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a+4>>2];q[a+4>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}b=q[a>>2];q[a>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}return a}function zn(a,b,c){a=a|0;b=b|0;c=x(c);var d=0,e=0,f=0,g=0,h=0;f=a+468|0;d=q[f>>2];a:{if(!d){break a}e=f;while(1){h=q[d+32>>2]<(b|0);e=h?e:d;d=q[(h<<2)+d>>2];if(d){continue}break}if((e|0)==(f|0)|q[e+32>>2]>(b|0)){break a}f=e- -64|0;c=x((r[e+80|0]?x(0):x(x(u[e+224>>2]*c)*u[e+244>>2]))+u[e+240>>2]);u[e+240>>2]=c;Ek(q[e+72>>2],c);q[e+240>>2]=0;h=a+384|0;b=a+144|0;while(1){d=q[b>>2];g=q[b+4>>2];b:{if((d|0)==(g|0)){break b}while(1){lk(q[d>>2],q[e+72>>2]);d=d+4|0;if((g|0)!=(d|0)){continue}break}d=q[b>>2];g=q[b+4>>2];if((d|0)==(g|0)){break b}while(1){mk(q[d>>2],q[e+72>>2]);d=d+4|0;if((g|0)!=(d|0)){continue}break}}b=b+12|0;if((h|0)!=(b|0)){continue}break}pl(a,f);o[e+88|0]=1}vn(a)}function GD(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=_S(76);q[f+40>>2]=1;q[f+32>>2]=1;q[f+36>>2]=1;q[f+24>>2]=1;q[f+28>>2]=1;q[f+16>>2]=0;q[f+20>>2]=2;q[f+8>>2]=1;q[f+12>>2]=0;q[f+72>>2]=4896;q[f+68>>2]=194;q[f+56>>2]=b;q[f+52>>2]=-1;q[f+44>>2]=0;q[f+48>>2]=0;q[f+4>>2]=340312;q[f>>2]=340288;if(b){n[q[q[b>>2]>>2]](b)|0}b=f+4|0;if(c){q[f+44>>2]=c;g=q[e+8>>2];i=q[e+4>>2];c=q[e>>2];e=q[e+12>>2];h=q[e>>2];if(h){c=n[h](c)|0}q[f+68>>2]=g;q[f+64>>2]=i;g=q[f+72>>2];q[f+72>>2]=e;e=q[f+60>>2];q[f+60>>2]=c;c=q[g+4>>2];if(c){n[c](e)}q[f+40>>2]=1;q[f+28>>2]=1;q[f+32>>2]=1;q[f+20>>2]=2;q[f+24>>2]=1;q[f+12>>2]=4;q[f+16>>2]=0;q[f+36>>2]=d?2:1;q[a>>2]=b;return}q[a>>2]=0;n[q[q[b>>2]+8>>2]](b)|0}function Aj(a,b,c,d){var e=x(0),f=0,g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0);f=ue-16|0;ue=f;m=u[b>>2];i=u[c>>2];n=u[b+4>>2];j=u[c+4>>2];o=u[b+8>>2];k=u[c+8>>2];p=u[b+12>>2];l=u[c+12>>2];e=x(x(x(x(m*i)+x(n*j))+x(o*k))+x(p*l));a:{if(!!(e>2]=-l;u[f+8>>2]=-k;u[f+4>>2]=-j;u[f>>2]=-i;Aj(a,b,f,d);break a}g=DG(x(A(e,x(1))));if(!!(g>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=c;break a}h=AG(x(g*d));e=AG(g);d=AG(x(x(x(1)-d)*g));u[a+12>>2]=x(x(p*d)/e)+x(x(l*h)/e);u[a+8>>2]=x(x(o*d)/e)+x(x(k*h)/e);u[a+4>>2]=x(x(n*d)/e)+x(x(j*h)/e);u[a>>2]=x(x(m*d)/e)+x(x(i*h)/e)}ue=f+16|0}function yK(a,b,c){a:{b:{if(b>>>0>20){break b}b=b+ -9|0;if(b>>>0>9){break b}c:{switch(b-1|0){default:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];return;case 0:b=q[c>>2];q[c>>2]=b+4;b=q[b>>2];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 1:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];q[a+4>>2]=0;return;case 3:b=q[c>>2];q[c>>2]=b+4;b=p[b>>1];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 4:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=s[b>>1];q[a+4>>2]=0;return;case 5:b=q[c>>2];q[c>>2]=b+4;b=o[b|0];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 6:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=r[b|0];q[a+4>>2]=0;return;case 2:case 7:break a;case 8:break c}}n[855](a,c)}return}b=q[c>>2]+7&-8;q[c>>2]=b+8;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c}function TJ(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0;j=1;i=d&2147483647;m=i;k=c;a:{if(!c&(i|0)==2147418112?a|b:(i|0)==2147418112&c>>>0>0|i>>>0>2147418112){break a}l=h&2147483647;n=l;i=g;if(!g&(l|0)==2147418112?e|f:(l|0)==2147418112&g>>>0>0|l>>>0>2147418112){break a}if(!(a|e|(i|k)|(b|f|(m|n)))){return 0}k=d&h;if((k|0)>0?1:(k|0)>=0?(c&g)>>>0<0?0:1:0){j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>>0|b>>>0>>0:(d|0)<(h|0)?1:(d|0)<=(h|0)?c>>>0>=g>>>0?0:1:0){break a}return(a^e|c^g)!=0|(b^f|d^h)!=0}j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>e>>>0|b>>>0>f>>>0:(d|0)>(h|0)?1:(d|0)>=(h|0)?c>>>0<=g>>>0?0:1:0){break a}j=(a^e|c^g)!=0|(b^f|d^h)!=0}return j}function yn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=a+72|0;k=a+384|0;d=a+144|0;while(1){b=q[d>>2];c=q[d+4>>2];a:{if((b|0)==(c|0)){break a}while(1){g=q[b>>2];b:{if(q[g+23056>>2]){b=b+4|0;if((c|0)!=(b|0)){continue}b=c;break b}if((b|0)==(c|0)){break b}e=q[a+92>>2];f=e+q[a+88>>2]|0;h=q[a+76>>2];i=q[a+80>>2]-h|0;if((f|0)==((i?(i<<8)+ -1|0:0)|0)){ql(j);e=q[a+92>>2];f=e+q[a+88>>2]|0;g=q[b>>2];h=q[a+76>>2]}q[q[h+(f>>>8&16777212)>>2]+((f&1023)<<2)>>2]=g;q[a+92>>2]=e+1;c=c+ -4|0;if((c|0)==(b|0)){break b}q[b>>2]=q[c>>2]}if((b|0)!=(c|0)){continue}break}if(q[d+4>>2]==(b|0)){break a}q[d+4>>2]=b}d=d+12|0;if((k|0)!=(d|0)){continue}break}lV(a+384|0,0,80);o[a+564|0]=0}function no(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0),n=0,o=0;q[d>>2]=q[a+36>>2];q[d+4>>2]=q[a+40>>2];q[d+8>>2]=q[a+44>>2];d=a+20|0;f=u[d>>2];i=a+16|0;g=u[i>>2];j=u[a+8>>2];k=u[a>>2];l=u[a+4>>2];m=u[a+12>>2];e=u[a+24>>2];h=x(e*e);n=a+28|0;e=u[n>>2];h=x(h+x(e*e));o=a+32|0;e=u[o>>2];e=x(E(x(h+x(e*e))));u[b+8>>2]=e;f=x(E(x(x(x(m*m)+x(g*g))+x(f*f))));u[b+4>>2]=f;g=x(E(x(x(x(k*k)+x(l*l))+x(j*j))));u[b>>2]=g;u[c>>2]=u[a>>2]/g;u[c+4>>2]=u[a+4>>2]/g;u[c+8>>2]=u[a+8>>2]/g;u[c+12>>2]=u[a+12>>2]/f;u[c+16>>2]=u[i>>2]/f;u[c+20>>2]=u[d>>2]/f;u[c+24>>2]=u[a+24>>2]/e;u[c+28>>2]=u[n>>2]/e;f=u[o>>2];q[c+44>>2]=0;q[c+36>>2]=0;q[c+40>>2]=0;u[c+32>>2]=f/e}function Sf(a,b){var c=0,d=0,e=0,f=0,g=0;q[a>>2]=0;q[a+4>>2]=0;c=a+8|0;q[c>>2]=0;a:{b:{c:{if(o[b+11|0]>=0){d=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=d;q[c>>2]=q[b+8>>2];break c}d=q[b+4>>2];if(d>>>0>=2147483632){break b}f=q[b>>2];d:{e:{if(d>>>0>=5){e=d+8&-8;if((e|0)<=-1){break a}c=_S(e<<1);q[a+8>>2]=e|-2147483648;q[a>>2]=c;q[a+4>>2]=d;break e}o[a+11|0]=d;c=a;if(!d){break d}}e=c;g=d;while(1){p[e>>1]=s[f>>1];f=f+2|0;e=e+2|0;g=g+ -1|0;if(g){continue}break}}p[(d<<1)+c>>1]=0}q[a+12>>2]=0;c=q[b+12>>2];f:{if(!c){break f}n[q[q[c>>2]>>2]](c)|0;c=q[a+12>>2];if(!c){break f}n[q[q[c>>2]+8>>2]](c)|0;q[a+12>>2]=0}q[a+12>>2]=q[b+12>>2];q[a+16>>2]=q[b+16>>2];return}kT();F()}Ue(2320);F()}function ks(a,b){var c=0,d=0,e=0;c=ue-48|0;ue=c;a:{b:{if(q[a+8>>2]<<5>>>0>=b>>>0){break b}q[c+24>>2]=0;q[c+16>>2]=0;q[c+20>>2]=0;if((b|0)<=-1){break a}wt(c+32|0);b=(b+ -1>>>5|0)+1|0;d=n[q[c+40>>2]](c+32|0,b<<2)|0;e=q[q[c+44>>2]+4>>2];if(e){n[e](q[c+32>>2])}q[c+24>>2]=b;q[c+20>>2]=0;q[c+16>>2]=d;b=q[a>>2];q[c+12>>2]=0;q[c+8>>2]=b;d=q[a+4>>2];q[c+4>>2]=d&31;q[c>>2]=b+(d>>>3&536870908);os(c+16|0,c+8|0,c);b=q[a>>2];q[a>>2]=q[c+16>>2];q[c+16>>2]=b;d=q[a+4>>2];q[a+4>>2]=q[c+20>>2];q[c+20>>2]=d;d=q[a+8>>2];q[a+8>>2]=q[c+24>>2];q[c+24>>2]=d;if(!b){break b}xt(c+32|0);n[q[c+40>>2]](c+32|0,b,d<<2);a=q[q[c+44>>2]+4>>2];if(!a){break b}n[a](q[c+32>>2])}ue=c+48|0;return}kU();F()}function FE(a){var b=0,c=0,d=0,e=0,f=0;f=ue-16|0;ue=f;a:{if(!q[a+16>>2]){break a}c=a+8|0;d=a+12|0;b:{while(1){b=q[d>>2];if((b|0)==(c|0)){break b}e=q[b+8>>2];q[f+12>>2]=0;Va(q[e>>2],4112,f+12|0);d=b+4|0;if((q[f+12>>2]&-2)==4114){continue}break}d=q[b>>2];q[d+4>>2]=q[b+4>>2];q[q[b+4>>2]>>2]=d;q[a+16>>2]=q[a+16>>2]+ -1;_U(b);b=_S(12);q[b+4>>2]=c;q[b+8>>2]=e;c=q[a+8>>2];q[b>>2]=c;q[c+4>>2]=b;q[a+8>>2]=b;q[a+16>>2]=q[a+16>>2]+1;break a}b=q[a+12>>2];e=q[b+8>>2];d=q[b>>2];q[d+4>>2]=q[b+4>>2];q[q[b+4>>2]>>2]=d;q[a+16>>2]=q[a+16>>2]+ -1;_U(b);b=_S(12);q[b+4>>2]=c;q[b+8>>2]=e;c=q[a+8>>2];q[b>>2]=c;q[c+4>>2]=b;q[a+8>>2]=b;q[a+16>>2]=q[a+16>>2]+1;Ta(q[e>>2])}ue=f+16|0;return e}function rC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;q[a+4>>2]=340196;q[a>>2]=340168;f=q[a+28>>2];d=f+12|0;g=q[d>>2];a:{if(!g){break a}c=d;b=g;while(1){e=t[b+16>>2]>>0;c=e?c:b;b=q[(e<<2)+b>>2];if(b){continue}break}if((c|0)==(d|0)|t[c+16>>2]>a>>>0){break a}b=q[c+4>>2];b:{if(!b){d=q[c+8>>2];if(q[d>>2]==(c|0)){break b}e=c+8|0;while(1){b=q[e>>2];e=b+8|0;d=q[b+8>>2];if((b|0)!=q[d>>2]){continue}break}break b}while(1){d=b;b=q[b>>2];if(b){continue}break}}if(q[f+8>>2]==(c|0)){q[f+8>>2]=d}b=f+16|0;q[b>>2]=q[b>>2]+ -1;gh(g,c);_U(c)}if(q[a+12>>2]){b=a+12|0;Xv(b);q[b>>2]=0}b=q[a+28>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+28>>2]=0}b=q[a+16>>2];if(b){q[a+20>>2]=b;_U(b)}return a|0}function CC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;q[a+4>>2]=340256;q[a>>2]=340228;f=q[a+36>>2];d=f+12|0;g=q[d>>2];a:{if(!g){break a}c=d;b=g;while(1){e=t[b+16>>2]>>0;c=e?c:b;b=q[(e<<2)+b>>2];if(b){continue}break}if((c|0)==(d|0)|t[c+16>>2]>a>>>0){break a}b=q[c+4>>2];b:{if(!b){d=q[c+8>>2];if(q[d>>2]==(c|0)){break b}e=c+8|0;while(1){b=q[e>>2];e=b+8|0;d=q[b+8>>2];if((b|0)!=q[d>>2]){continue}break}break b}while(1){d=b;b=q[b>>2];if(b){continue}break}}if(q[f+8>>2]==(c|0)){q[f+8>>2]=d}b=f+16|0;q[b>>2]=q[b>>2]+ -1;gh(g,c);_U(c)}if(q[a+20>>2]){b=a+20|0;Xv(b);q[b>>2]=0}b=q[a+36>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+36>>2]=0}b=q[a+24>>2];if(b){q[a+28>>2]=b;_U(b)}return a|0}function dM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=ue-272|0;ue=a;q[a+256>>2]=c;q[a+264>>2]=b;g=CL(a+208|0);EH(a+16|0,d);eM(FH(a+16|0),355328,355354,a+224|0);kL(a+16|0);c=CL(a+192|0);EL(c,DL(c));b=vL(c,0);q[a+188>>2]=b;q[a+12>>2]=a+16;q[a+8>>2]=0;while(1){a:{if(!GH(a+264|0,a+256|0)){break a}if(q[a+188>>2]==(uL(c)+b|0)){d=uL(c);EL(c,uL(c)<<1);EL(c,DL(c));b=vL(c,0);q[a+188>>2]=d+b}if(FL(HH(a+264|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}JH(a+264|0);continue}break}EL(c,q[a+188>>2]-b|0);b=kM(c);d=fM();q[a>>2]=f;if((gM(b,d,a)|0)!=1){q[e>>2]=4}if(KH(a+264|0,a+256|0)){q[e>>2]=q[e>>2]|2}b=q[a+264>>2];oT(c);oT(g);ue=a+272|0;return b|0}function NM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=ue-352|0;ue=a;q[a+336>>2]=c;q[a+344>>2]=b;g=CL(a+208|0);EH(a+16|0,d);OM(WH(a+16|0),355328,355354,a+224|0);kL(a+16|0);c=CL(a+192|0);EL(c,DL(c));b=vL(c,0);q[a+188>>2]=b;q[a+12>>2]=a+16;q[a+8>>2]=0;while(1){a:{if(!XH(a+344|0,a+336|0)){break a}if(q[a+188>>2]==(uL(c)+b|0)){d=uL(c);EL(c,uL(c)<<1);EL(c,DL(c));b=vL(c,0);q[a+188>>2]=d+b}if(wM(YH(a+344|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}_H(a+344|0);continue}break}EL(c,q[a+188>>2]-b|0);b=kM(c);d=fM();q[a>>2]=f;if((gM(b,d,a)|0)!=1){q[e>>2]=4}if($H(a+344|0,a+336|0)){q[e>>2]=q[e>>2]|2}b=q[a+344>>2];oT(c);oT(g);ue=a+352|0;return b|0}function Yx(a,b,c){var d=0,e=0;e=_S(208);d=q[b>>2];b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}Ku(e);c=e;q[c+16>>2]=0;q[c+20>>2]=0;q[c+8>>2]=191360;q[c>>2]=191100;q[c+12>>2]=1;q[c+24>>2]=0;q[c+28>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;q[c+44>>2]=0;q[c+48>>2]=0;q[c+40>>2]=d;q[c+52>>2]=0;q[c+56>>2]=0;q[c+60>>2]=0;q[c+64>>2]=0;q[c+68>>2]=0;q[c+72>>2]=0;q[c+76>>2]=0;q[c+80>>2]=0;d=q[b+20>>2];q[c+176>>2]=0;q[c+180>>2]=0;o[c+172|0]=1;q[c+84>>2]=d;q[c+184>>2]=0;q[c+188>>2]=0;q[c+192>>2]=0;q[c+196>>2]=0;q[c+200>>2]=2;q[c+204>>2]=0;c=c+16|0;if(b){n[q[q[b>>2]>>2]](b)|0}d=q[c>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c>>2]=0}q[e+16>>2]=b;q[a>>2]=e;if(b){n[q[q[b>>2]+8>>2]](b)|0}}function ct(a,b){var c=x(0),d=x(0),g=x(0),h=x(0),i=0,l=x(0),m=x(0),n=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+40>>2]=1065353216;q[a+44>>2]=0;n=a;c=b;b=x(x(b*x(.15915493667125702))+(f(0,(k(b),e(0))&-2147483648|1056964608),j()));a:{if(x(y(b))>2]=m;u[a>>2]=m;b=x(b*x(x(x(x(x(x(c/x(-6))+x(1))+x(d/x(120)))+x(g/x(-5040)))+x(h/x(362880)))+x(l/x(-39916800))));u[a+16>>2]=b;u[a+4>>2]=-b}function bt(a,b){var c=x(0),d=x(0),g=x(0),h=x(0),i=0,l=x(0),m=x(0),n=0;q[a+12>>2]=0;q[a+16>>2]=0;q[a+4>>2]=0;q[a+44>>2]=0;q[a+36>>2]=0;q[a+28>>2]=0;q[a+20>>2]=1065353216;q[a+24>>2]=0;n=a;c=b;b=x(x(b*x(.15915493667125702))+(f(0,(k(b),e(0))&-2147483648|1056964608),j()));a:{if(x(y(b))>2]=m;u[a>>2]=m;b=x(b*x(x(x(x(x(x(c/x(-6))+x(1))+x(d/x(120)))+x(g/x(-5040)))+x(h/x(362880)))+x(l/x(-39916800))));u[a+8>>2]=b;u[a+32>>2]=-b}function at(a,b){var c=x(0),d=x(0),g=x(0),h=x(0),i=0,l=x(0),m=x(0),n=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=1065353216;q[a+12>>2]=0;q[a+16>>2]=0;q[a+44>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;n=a;c=b;b=x(x(b*x(.15915493667125702))+(f(0,(k(b),e(0))&-2147483648|1056964608),j()));a:{if(x(y(b))>2]=m;u[a+20>>2]=m;b=x(b*x(x(x(x(x(x(c/x(-6))+x(1))+x(d/x(120)))+x(g/x(-5040)))+x(h/x(362880)))+x(l/x(-39916800))));u[a+36>>2]=b;u[a+24>>2]=-b}function UB(a,b,c,d){var e=0;Tv(a,q[b>>2]);Lv(a+8|0,c);q[a+8>>2]=339976;q[a>>2]=339936;q[a+44>>2]=q[d>>2];b=q[d+4>>2];q[a+48>>2]=b;if(b){q[b+4>>2]=q[b+4>>2]+1}o[a+56|0]=0;q[a+52>>2]=0;o[a+36|0]=0;a:{if(q[d>>2]){break a}b=_S(24);q[b+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0;q[b+16>>2]=0;q[b>>2]=337216;q[b+20>>2]=0;q[a+44>>2]=b+12;d=q[a+48>>2];q[a+48>>2]=b;b:{if(!d){break b}b=q[d+4>>2];q[d+4>>2]=b+ -1;if(b){break b}n[q[q[d>>2]+8>>2]](d);WS(d)}b=q[a+44>>2];d=q[b>>2];e=q[b+4>>2]-d|0;if(e>>>0>>0){Gl(b,c-e|0);break a}if(e>>>0<=c>>>0){break a}q[b+4>>2]=c+d}q[a+24>>2]=0;Zv(a+40|0);Yv(34962,q[a+40>>2]);if(r[a+36|0]){_v(34962,q[a+16>>2],q[q[a+44>>2]>>2],35040)}Yv(34962,0)}function qB(a,b,c,d){var e=0;Tv(a,q[b>>2]);q[a+8>>2]=339680;q[a>>2]=339632;e=q[q[b>>2]+20>>2];q[a+16>>2]=0;q[a+20>>2]=0;q[a+12>>2]=e;e=q[c>>2];a:{if(!e){break a}n[q[q[e+4>>2]>>2]](e+4|0)|0;e=q[a+20>>2];if(!e){break a}n[q[q[e+4>>2]+8>>2]](e+4|0)|0;q[a+20>>2]=0}c=q[c>>2];q[a+24>>2]=0;q[a+28>>2]=0;q[a+20>>2]=c;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;q[a+48>>2]=0;q[a+52>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;o[a+61|0]=0;o[a+62|0]=0;o[a+63|0]=0;o[a+64|0]=0;o[a+65|0]=0;o[a+66|0]=0;o[a+67|0]=0;o[a+68|0]=0;q[a+72>>2]=-1;BT(a+44|0,d);c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+16>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+16>>2]=0}q[a+16>>2]=q[b>>2];pB(a);return a}function pl(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-48|0;ue=c;hl(b,((q[q[b+8>>2]+64>>2]<<4)+a|0)+624|0);f=q[b>>2];u[c+40>>2]=u[q[b+8>>2]+8>>2]/x(60);d=q[f+260>>2];e=q[f+264>>2];if((d|0)!=(e|0)){i=c+16|0;while(1){h=w(g,60)+d|0;if(!q[h+4>>2]){d=q[b+8>>2];q[i>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;q[c>>2]=0;q[c+4>>2]=0;bl(c+24|0,h,d+40|0,c+40|0,c,d);e=q[c+36>>2];d=q[b+8>>2]+(g<<4)|0;q[d+224>>2]=q[c+32>>2];q[d+228>>2]=e;e=q[c+28>>2];q[d+216>>2]=q[c+24>>2];q[d+220>>2]=e;e=q[f+264>>2];d=q[f+260>>2]}g=g+1|0;if(g>>>0<(e-d|0)/60>>>0){continue}break}}tl(a,b);a=q[b+4>>2];a:{if(!a){break a}wk(a,r[b+17|0]);if(!r[b+21|0]){break a}xk(q[b+4>>2],b+112|0)}Fk(q[b+8>>2]);ue=c+48|0}function Is(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0;h=ue-48|0;ue=h;i=q[f>>2];if((i|0)>=0){j=q[((i<<4)+c|0)+216>>2];u[h+40>>2]=u[c+8>>2]/x(60);k=q[g>>2];q[h+28>>2]=0;q[h+20>>2]=0;q[h+24>>2]=0;q[h+16>>2]=k;u[h+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);k=g;i=q[b+260>>2]+w(i,60)|0;if(q[i+4>>2]==1){bl(h,i,c+40|0,h+40|0,h+16|0,e);j=q[h>>2]}q[k>>2]=j}j=q[f+4>>2];if((j|0)>=0){k=q[((j<<4)+c|0)+216>>2];u[h+40>>2]=u[c+8>>2]/x(60);f=q[g+4>>2];q[h+28>>2]=0;q[h+20>>2]=0;q[h+24>>2]=0;q[h+16>>2]=f;u[h+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);d=g;b=q[b+260>>2]+w(j,60)|0;if(q[b+4>>2]==1){bl(h,b,c+40|0,h+40|0,h+16|0,e);k=q[h>>2]}q[d+4>>2]=k}b=q[g+4>>2];q[a>>2]=q[g>>2];q[a+4>>2]=b;ue=h+48|0}function LJ(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=ue-16|0;ue=h;f=d?d:370348;d=q[f>>2];a:{b:{c:{if(!b){if(d){break c}break a}e=-2;if(!c){break a}i=a?a:h+12|0;d:{if(d){a=c;break d}a=r[b|0];d=a<<24>>24;if((d|0)>=0){q[i>>2]=a;e=(d|0)!=0;break a}a=o[b|0];if(!q[q[91624]>>2]){q[i>>2]=a&57343;e=1;break a}a=(a&255)+ -194|0;if(a>>>0>50){break c}d=q[(a<<2)+350240>>2];a=c+ -1|0;if(!a){break b}b=b+1|0}g=r[b|0];j=g>>>3|0;if((j+ -16|(d>>26)+j)>>>0>7){break c}while(1){a=a+ -1|0;d=g+ -128|d<<6;if((d|0)>=0){q[f>>2]=0;q[i>>2]=d;e=c-a|0;break a}if(!a){break b}b=b+1|0;g=r[b|0];if((g&192)==128){continue}break}}q[f>>2]=0;q[91802]=25;e=-1;break a}q[f>>2]=d}ue=h+16|0;return e}function QK(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;f=ue-272|0;ue=f;g=q[b>>2];q[f+12>>2]=g;h=a?a:f+16|0;d=a?d:256;a:{if(!d|!g){break a}e=d>>>0<=c>>>0;if(!(e|c>>>0>32)){break a}while(1){e=e?d:c;c=c-e|0;e=PK(h,f+12|0,e);if((e|0)==-1){d=0;g=q[f+12>>2];j=-1;break a}i=(f+16|0)==(h|0);h=i?h:e+h|0;j=e+j|0;d=d-(i?0:e)|0;g=q[f+12>>2];if(!d|!g){break a}e=c>>>0>=d>>>0;if(e|c>>>0>=33){continue}break}}b:{c:{if(!c|(!g|!d)){break c}while(1){i=rK(h,q[g>>2]);if(i+1>>>0<=1){e=-1;if(i){break b}q[f+12>>2]=0;break c}g=q[f+12>>2]+4|0;q[f+12>>2]=g;j=j+i|0;d=d-i|0;if(!d){break c}h=h+i|0;e=j;c=c+ -1|0;if(c){continue}break}break b}e=j}if(a){q[b>>2]=q[f+12>>2]}ue=f+272|0;return e}function nl(a){var b=0,c=0,d=0,e=0;b=q[a+464>>2];e=a+468|0;if((b|0)!=(e|0)){while(1){c=b;a:{if(r[b+83|0]|r[b+86|0]){break a}b:{if(!q[q[c+72>>2]+4>>2]){break b}if(q[q[c+72>>2]+4>>2]!=1){break a}b=q[c+68>>2];if(!b){break a}b=q[b+36>>2];if(!b){break a}b=Tk(b);if(!b|q[b+820>>2]>1|r[b+1392|0]){break a}if(Zj(b)){break a}b=q[a+604>>2];if(!b){break b}if(n[q[q[b>>2]+44>>2]](b,q[c+72>>2])){break a}}n[q[q[a>>2]+148>>2]](a,q[c+32>>2])}d=q[c+4>>2];c:{if(!d){b=q[c+8>>2];if((c|0)==q[b>>2]){break c}c=c+8|0;while(1){d=q[c>>2];c=d+8|0;b=q[d+8>>2];if((d|0)!=q[b>>2]){continue}break}break c}while(1){b=d;d=q[b>>2];if(d){continue}break}}if((b|0)!=(e|0)){continue}break}}}function Sh(a,b){var c=x(0),d=x(0),e=x(0),f=x(0),g=0,h=x(0);c=x(1);a:{if(q[a+2764>>2]!=1){break a}d=u[b+828>>2];e=u[a+2768>>2];if(!(d>2])+x(x(c*x(c*x(c*u[a+2772>>2])))+x(c*x(c*u[a+2776>>2]))))+x(0))}g=q[a+2784>>2]+ -1|0;b:{if(g>>>0>1){break b}if(g-1){d=u[a+2788>>2];e=x(u[b+828>>2]+d);h=u[b+824>>2];if(!(e>h)){break b}f=c;c=x(x(e-h)/d);c=x(f*x(x(1)-x(x(c*u[a+2800>>2])+x(x(c*x(c*x(c*u[a+2792>>2])))+x(c*x(c*u[a+2796>>2]))))));break b}if(q[b+820>>2]>1){break b}f=c;c=x(u[b+832>>2]/u[a+2788>>2]);c=x(f*x(x(1)-x(x(c*u[a+2800>>2])+x(x(c*x(c*x(c*u[a+2792>>2])))+x(c*x(c*u[a+2796>>2]))))))}return x(B(x(A(c,x(1))),x(0)))}function XA(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;a:{if(!q[a+20>>2]){break a}f=q[c>>2];if((f|0)<2){break a}i=q[c+4>>2];b:{if(i){e=q[a+28>>2];break b}e=f;c:{if(q[b+48>>2]!=1){break c}g=q[a+48>>2];h=q[a+52>>2]-g>>4;d:{if(f>>>0>h>>>0){Wr(a+48|0,f-h|0);e=q[c>>2];break d}e=f;if(f>>>0>=h>>>0){break d}q[a+52>>2]=g+(f<<4);e=f}g=q[a+36>>2];h=q[a+40>>2]-g>>4;if(e>>>0>h>>>0){Wr(a+36|0,e-h|0);e=q[c>>2];break c}if(e>>>0>=h>>>0){break c}q[a+40>>2]=g+(e<<4)}Wz(a+24|0,e);e=q[a+28>>2];g=q[a+24>>2];if((e|0)==(g|0)){break b}q[a+28>>2]=g;e=g}f=f+ -1|0;e:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break e}Xz(a+24|0,c)}if((f|0)!=(i|0)){break a}aB(a,b,d)}}function WA(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;a:{if(!q[a+20>>2]){break a}f=q[c>>2];if((f|0)<2){break a}i=q[c+4>>2];b:{if(i){e=q[a+28>>2];break b}e=f;c:{if(q[b+48>>2]!=1){break c}g=q[a+48>>2];h=q[a+52>>2]-g>>4;d:{if(f>>>0>h>>>0){Wr(a+48|0,f-h|0);e=q[c>>2];break d}e=f;if(f>>>0>=h>>>0){break d}q[a+52>>2]=g+(f<<4);e=f}g=q[a+36>>2];h=q[a+40>>2]-g>>4;if(e>>>0>h>>>0){Wr(a+36|0,e-h|0);e=q[c>>2];break c}if(e>>>0>=h>>>0){break c}q[a+40>>2]=g+(e<<4)}Wz(a+24|0,e);e=q[a+28>>2];g=q[a+24>>2];if((e|0)==(g|0)){break b}q[a+28>>2]=g;e=g}f=f+ -1|0;e:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break e}Xz(a+24|0,c)}if((f|0)!=(i|0)){break a}$A(a,b,d)}}function VA(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;a:{if(!q[a+20>>2]){break a}f=q[c>>2];if((f|0)<2){break a}i=q[c+4>>2];b:{if(i){e=q[a+28>>2];break b}e=f;c:{if(q[b+48>>2]!=1){break c}g=q[a+48>>2];h=q[a+52>>2]-g>>4;d:{if(f>>>0>h>>>0){Wr(a+48|0,f-h|0);e=q[c>>2];break d}e=f;if(f>>>0>=h>>>0){break d}q[a+52>>2]=g+(f<<4);e=f}g=q[a+36>>2];h=q[a+40>>2]-g>>4;if(e>>>0>h>>>0){Wr(a+36|0,e-h|0);e=q[c>>2];break c}if(e>>>0>=h>>>0){break c}q[a+40>>2]=g+(e<<4)}Wz(a+24|0,e);e=q[a+28>>2];g=q[a+24>>2];if((e|0)==(g|0)){break b}q[a+28>>2]=g;e=g}f=f+ -1|0;e:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break e}Xz(a+24|0,c)}if((f|0)!=(i|0)){break a}_A(a,b,d)}}function UA(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;a:{if(!q[a+20>>2]){break a}f=q[c>>2];if((f|0)<2){break a}i=q[c+4>>2];b:{if(i){e=q[a+28>>2];break b}e=f;c:{if(q[b+48>>2]!=1){break c}g=q[a+48>>2];h=q[a+52>>2]-g>>4;d:{if(f>>>0>h>>>0){Wr(a+48|0,f-h|0);e=q[c>>2];break d}e=f;if(f>>>0>=h>>>0){break d}q[a+52>>2]=g+(f<<4);e=f}g=q[a+36>>2];h=q[a+40>>2]-g>>4;if(e>>>0>h>>>0){Wr(a+36|0,e-h|0);e=q[c>>2];break c}if(e>>>0>=h>>>0){break c}q[a+40>>2]=g+(e<<4)}Wz(a+24|0,e);e=q[a+28>>2];g=q[a+24>>2];if((e|0)==(g|0)){break b}q[a+28>>2]=g;e=g}f=f+ -1|0;e:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break e}Xz(a+24|0,c)}if((f|0)!=(i|0)){break a}ZA(a,b,d)}}function TA(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;a:{if(!q[a+20>>2]){break a}f=q[c>>2];if((f|0)<2){break a}i=q[c+4>>2];b:{if(i){e=q[a+28>>2];break b}e=f;c:{if(q[b+48>>2]!=1){break c}g=q[a+48>>2];h=q[a+52>>2]-g>>4;d:{if(f>>>0>h>>>0){Wr(a+48|0,f-h|0);e=q[c>>2];break d}e=f;if(f>>>0>=h>>>0){break d}q[a+52>>2]=g+(f<<4);e=f}g=q[a+36>>2];h=q[a+40>>2]-g>>4;if(e>>>0>h>>>0){Wr(a+36|0,e-h|0);e=q[c>>2];break c}if(e>>>0>=h>>>0){break c}q[a+40>>2]=g+(e<<4)}Wz(a+24|0,e);e=q[a+28>>2];g=q[a+24>>2];if((e|0)==(g|0)){break b}q[a+28>>2]=g;e=g}f=f+ -1|0;e:{if(q[a+32>>2]!=(e|0)){kV(e,c,240);q[a+28>>2]=q[a+28>>2]+240;break e}Xz(a+24|0,c)}if((f|0)!=(i|0)){break a}YA(a,b,d)}}function Cr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;e=q[a>>2];f=(q[a+4>>2]-e|0)/12|0;c=f+1|0;if(c>>>0<357913942){e=(q[a+8>>2]-e|0)/12|0;g=e<<1;g=e>>>0<178956970?g>>>0>>0?c:g:357913941;a:{if(!g){e=0;break a}wt(d);e=n[q[d+8>>2]](d,w(g,12))|0;c=q[q[d+12>>2]+4>>2];if(!c){break a}n[c](q[d>>2])}c=w(f,12)+e|0;f=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=f;q[c+8>>2]=q[b+8>>2];b=q[a>>2];f=q[a+4>>2]-b|0;h=c+w((f|0)/-12|0,12)|0;e=w(g,12)+e|0;c=c+12|0;if((f|0)>=1){kV(h,b,f);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=h;c=q[a+8>>2];q[a+8>>2]=e;b:{if(!b){break b}xt(d);n[q[d+8>>2]](d,b,c-b|0);a=q[q[d+12>>2]+4>>2];if(!a){break b}n[a](q[d>>2])}ue=d+16|0;return}kU();F()}function _r(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;e=q[a>>2];f=q[a+4>>2]-e>>4;c=f+1|0;if(c>>>0<268435456){e=q[a+8>>2]-e|0;g=e>>3;g=e>>4>>>0<134217727?g>>>0>>0?c:g:268435455;a:{if(!g){e=0;break a}yt(d);e=n[q[d+8>>2]](d,g<<4,16)|0;c=q[q[d+12>>2]+4>>2];if(!c){break a}n[c](q[d>>2])}c=(f<<4)+e|0;f=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=f;f=q[b+12>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=f;b=q[a>>2];f=q[a+4>>2]-b|0;h=c-f|0;e=(g<<4)+e|0;c=c+16|0;if((f|0)>=1){kV(h,b,f);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=h;c=q[a+8>>2];q[a+8>>2]=e;b:{if(!b){break b}zt(d);n[q[d+8>>2]](d,b,c-b|0);a=q[q[d+12>>2]+4>>2];if(!a){break b}n[a](q[d>>2])}ue=d+16|0;return}kU();F()}function SJ(a,b){var c=0,d=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=ue-16|0;ue=i;h(+b);d=e(1)|0;j=e(0)|0;l=d&-2147483648;f=d&2147483647;c=f;f=c+ -1048576|0;g=j;m=g;if(g>>>0<0){f=f+1|0}a:{if((f|0)==2145386495&m>>>0<=4294967295|f>>>0<2145386495){k=g<<28;d=(c&15)<<28|g>>>4;c=(c>>>4|0)+1006632960|0;c=d>>>0<0?c+1|0:c;break a}if((c|0)==2146435072&g>>>0>=0|c>>>0>2146435072){k=j<<28;f=d>>>4|0;d=(d&15)<<28|j>>>4;c=f|2147418112;break a}if(!(c|g)){d=0;c=0;break a}f=c;c=(c|0)==1&g>>>0<0|c>>>0<1?z(j)+32|0:z(c);MJ(i,g,f,0,0,c+49|0);n=q[i>>2];k=q[i+4>>2];d=q[i+8>>2];c=q[i+12>>2]^65536|15372-c<<16}q[a>>2]=n;q[a+4>>2]=k;q[a+8>>2]=d|o;q[a+12>>2]=c|l;ue=i+16|0}function GB(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a+8>>2]=339680;q[a>>2]=339632;b=q[a+56>>2];a:{if(!b){break a}q[a+60>>2]=b;d=q[a- -64>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}if(o[a+55|0]<=-1){_U(q[a+44>>2])}b=q[a+40>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+40>>2]=0}b=q[a+36>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+36>>2]=0}b=q[a+28>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+28>>2]=0}b=q[a+24>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+24>>2]=0}b=q[a+20>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+20>>2]=0}b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}Uv(a);ue=c+16|0;return a|0}function ak(a,b,c){var d=x(0),e=x(0),f=0,g=0,h=0;if(q[b>>2]==2){d=x(u[a+828>>2]+x(q[a+848>>2]));b=q[a+148>>2];a:{if((n[q[q[b>>2]+12>>2]](b)|0)!=3){b=q[a+148>>2];if((n[q[q[b>>2]+12>>2]](b)|0)!=6){break a}}a=Tk(q[q[a+152>>2]+36>>2]);if(!a){break a}d=x(u[a+828>>2]+x(q[a+848>>2]))}g=q[c+24>>2];h=q[c+28>>2];f=q[c+32>>2];b=f>>>0>2;d=x(d/x(q[c+20>>2]));b:{if(x(y(d))(a|0)?a:c+ -1|0;break c;case 0:c=(a|0)%(c|0)|0;break c;case 1:break d}}b=(a|0)/(c|0)|0;a=a-w(b,c)|0;c=((b|0)%2|0)==1?c+(a^-1)|0:a}e=d;d=x(c|0);e=x(x(e-d)+d)}else{e=x(0)}return e}function Qn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ue-128|0;ue=d;q[d+108>>2]=b;Fn(d+8|0,c,u[c+64>>2],u[c+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);f=1;e=q[a+468>>2];a:{if(!e){break a}a=a+464|0;while(1){b:{g=q[e+32>>2];if((g|0)<=(b|0)){if((g|0)>=(b|0)){break b}e=e+4|0}e=q[e>>2];if(e){continue}break a}break}a=kl(a,d+108|0);if(!q[a+4>>2]|!r[a+17|0]|!(q[c+96>>2]>>>q[q[a+8>>2]+64>>2]&1)){break a}f=0;if(u[c+64>>2]==u[c+68>>2]){break a}f=1;if(q[q[a>>2]+296>>2]==1){yp(d+112|0);q[d+120>>2]=q[a+208>>2];b=q[a+204>>2];q[d+112>>2]=q[a+200>>2];q[d+116>>2]=b;q[d+124>>2]=q[a+212>>2];if(!Bl(d+8|0,d+112|0)){break a}}f=0}ue=d+128|0;return f|0}function uD(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;g=ue-16|0;ue=g;h=q[b>>2];if(h){n[q[q[h>>2]>>2]](h)|0}b=h+ -4|0;c=q[c>>2];if(c){n[q[q[c>>2]>>2]](c)|0}b=h?b:0;a:{b:{c:{i=c?c+ -4|0:0;if(q[i+52>>2]!=3553){break c}j=q[b+52>>2];if(q[d+8>>2]?!((j|0)==32879|(j|0)==35866):0){break c}ta(36006,g+12|0);lw(q[a+56>>2]);nw(36064,q[i+44>>2]);a=q[b+52>>2];Ca(a|0,q[b+44>>2]);c=q[d+4>>2];j=q[d>>2];d=q[b+52>>2];if((a|0)==3553){Ha(d|0,0,j|0,c|0,q[e>>2],q[e+4>>2],q[f>>2],q[f+4>>2])}lw(q[g+12>>2]);d=1;break b}d=0;if(!c){break a}}n[q[q[i+4>>2]+8>>2]](i+4|0)|0}if(h){n[q[q[b+4>>2]+8>>2]](b+4|0)|0}ue=g+16|0;return d|0}function Vm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=ue+ -64|0;ue=d;q[d+60>>2]=b;e=q[a+468>>2];a:{if(!e){break a}f=a+464|0;while(1){b:{a=q[e+32>>2];if((a|0)<=(b|0)){if((a|0)>=(b|0)){break b}e=e+4|0}e=q[e>>2];if(e){continue}break a}break}Ts(d,c);a=kl(f,d+60|0);c=q[d+44>>2];q[a+152>>2]=q[d+40>>2];q[a+156>>2]=c;b=q[d+36>>2];q[a+144>>2]=q[d+32>>2];q[a+148>>2]=b;b=q[d+28>>2];q[a+136>>2]=q[d+24>>2];q[a+140>>2]=b;b=q[d+20>>2];q[a+128>>2]=q[d+16>>2];q[a+132>>2]=b;b=q[d+12>>2];q[a+120>>2]=q[d+8>>2];q[a+124>>2]=b;b=q[d+4>>2];q[a+112>>2]=q[d>>2];q[a+116>>2]=b;g=kl(f,d+60|0),h=1,o[g+21|0]=h;g=kl(f,d+60|0),h=1,o[g+20|0]=h}ue=d- -64|0}function mv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-80|0;ue=d;a:{if(c>>>0>1){break a}if(c-1){q[d+60>>2]=-1;break a}q[d+60>>2]=-32897}q[d+40>>2]=1;q[d+44>>2]=1;q[d+24>>2]=0;q[d+28>>2]=0;q[d+48>>2]=1;q[d+52>>2]=1;q[d+32>>2]=2;q[d+36>>2]=1;q[d+16>>2]=0;q[d+8>>2]=0;q[d+12>>2]=0;nv(d+8|0,d+60|0,d- -64|0);n[q[q[b>>2]+224>>2]](d,b);b=q[d>>2];n[q[q[b>>2]+60>>2]](d- -64|0,b,d+24|0,d+8|0);b=q[d+64>>2];q[d+64>>2]=0;q[a>>2]=b;a=q[d>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0}a=q[d+8>>2];b:{if(!a){break b}q[d+12>>2]=a;b=q[d+16>>2];xt(d- -64|0);n[q[d+72>>2]](d- -64|0,a,b-a|0);a=q[q[d+76>>2]+4>>2];if(!a){break b}n[a](q[d+64>>2])}ue=d+80|0}function Il(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;d=q[a+16>>2];b=(d>>>0)/93|0;c=q[a+4>>2];f=q[a+8>>2];a:{if((c|0)==(f|0)){g=a+20|0;break a}g=a+20|0;e=(b<<2)+c|0;b=q[e>>2]+w(d-w(b,93)|0,44)|0;d=d+q[a+20>>2]|0;h=(d>>>0)/93|0;d=q[(h<<2)+c>>2]+w(d-w(h,93)|0,44)|0;if((b|0)==(d|0)){break a}while(1){c=q[b+4>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+4>>2]=0}b=b+44|0;if((b-q[e>>2]|0)==4092){b=q[e+4>>2];e=e+4|0}if((b|0)!=(d|0)){continue}break}c=q[a+4>>2];f=q[a+8>>2]}q[g>>2]=0;b=f-c>>2;if(b>>>0>2){while(1){_U(q[c>>2]);c=q[a+4>>2]+4|0;q[a+4>>2]=c;b=q[a+8>>2]-c>>2;if(b>>>0>2){continue}break}}b=b+ -1|0;if(b>>>0<=1){q[a+16>>2]=b-1|0?46:93}}function bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=x(e);f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:{if(d>>>0<4|d>>>0<9|(r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24))!=1162561093){break a}h=8;i=8;while(1){b:{c:{k=i+4|0;if(k>>>0<=d>>>0){j=g;if(0|(g|0)!=2){break c}}i=0;j=2;break b}g=c+i|0;i=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);h=k|m}g=h;d:{e:{h=j;if(0|(h|0)!=2){j=g;l=g+4|0;if(l>>>0<=d>>>0){break e}}k=0;j=2;break d}g=c+j|0;k=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);g=m|l;j=h}h=g;g=j;if((i|0)!=1598966082){i=h+k|0;h=i;if(h>>>0>>0){continue}break a}break}if(!c){break a}n=yf(a,b,c+h|0,k,e,f)}return n|0}function Qk(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=0,j=0;d=ue-32|0;ue=d;q[a+20>>2]=0;f=q[a+4>>2];i=n[q[q[f>>2]+8>>2]](f)|0;j=q[a+12>>2];f=q[a+4>>2];e=q[f+108>>2];h=q[f+104>>2];q[d>>2]=h;q[d+4>>2]=e;q[d+16>>2]=h;q[d+20>>2]=e;Is(d+24|0,i,j,c,b,f+52|0,d);g=x(n[q[q[b>>2]+16>>2]](b,u[d+28>>2],u[d+24>>2]));u[a+28>>2]=g;u[a+32>>2]=g;f=a;e=q[a+4>>2];a:{if(q[e+32>>2]>=0){u[d+12>>2]=q[e+60>>2];Fs(d+12|0,n[q[q[e>>2]+8>>2]](e)|0,q[a+12>>2],c,b,q[q[a+4>>2]+32>>2],d+12|0);g=u[d+12>>2];if(x(y(g))>2];b=~~g;break a}e=q[a+4>>2];b=-2147483648;break a}b=q[e+60>>2]}q[f+24>>2]=b;if(!r[e+128|0]){q[a+16>>2]=1}ue=d+32|0}function sD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ue-48|0;ue=e;d=_S(76);q[d+40>>2]=1;q[d+32>>2]=1;q[d+36>>2]=1;q[d+24>>2]=1;q[d+28>>2]=1;q[d+16>>2]=0;q[d+20>>2]=2;q[d+8>>2]=1;q[d+12>>2]=0;q[d+72>>2]=4896;q[d+68>>2]=194;q[d+56>>2]=b;q[d+52>>2]=-1;q[d+44>>2]=0;q[d+48>>2]=0;q[d+4>>2]=340312;q[d>>2]=340288;if(b){n[q[q[b>>2]>>2]](b)|0}b=d+4|0;f=q[c+8>>2];g=q[c+4>>2];q[e+36>>2]=1;q[e+28>>2]=g;q[e+32>>2]=f;f=q[c>>2];q[e+40>>2]=1;q[e+20>>2]=f;c=q[c+12>>2];q[e+24>>2]=2;q[e+44>>2]=c;q[e+16>>2]=1;q[e+8>>2]=0;q[e>>2]=0;q[e+4>>2]=0;c=QC(d,e+16|0,e);q[a>>2]=0;a:{if(c){q[a>>2]=b;break a}n[q[q[b>>2]+8>>2]](b)|0}ue=e+48|0}function uK(a,b,c){var d=0,e=0,f=0,g=0;d=ue-208|0;ue=d;q[d+204>>2]=c;c=0;lV(d+160|0,0,40);q[d+200>>2]=q[d+204>>2];a:{if((vK(0,b,d+200|0,d+80|0,d+160|0)|0)<0){b=-1;break a}c=q[a+76>>2]>=0?1:c;e=q[a>>2];if(o[a+74|0]<=0){q[a>>2]=e&-33}g=e&32;b:{if(q[a+48>>2]){b=vK(a,b,d+200|0,d+80|0,d+160|0);break b}q[a+48>>2]=80;q[a+16>>2]=d+80;q[a+28>>2]=d;q[a+20>>2]=d;e=q[a+44>>2];q[a+44>>2]=d;f=vK(a,b,d+200|0,d+80|0,d+160|0);b=f;if(!e){break b}n[q[a+36>>2]](a,0,0)|0;q[a+48>>2]=0;q[a+44>>2]=e;q[a+28>>2]=0;q[a+16>>2]=0;b=q[a+20>>2];q[a+20>>2]=0;b=b?f:-1}f=a;a=q[a>>2];q[f>>2]=a|g;b=a&32?-1:b;if(!c){break a}}ue=d+208|0;return b}function Lh(a,b){a=a|0;b=b|0;q[a+2312>>2]=q[b+4>>2];q[a+2320>>2]=q[b+8>>2];q[a+2424>>2]=q[b+12>>2];q[a+2324>>2]=q[b+16>>2];q[a+2428>>2]=q[b+20>>2];q[a+2328>>2]=q[b+24>>2];q[a+2432>>2]=q[b+28>>2];if(r[b+48|0]){q[a+2804>>2]=2;q[a+2836>>2]=q[b+56>>2];q[a+2828>>2]=q[b+60>>2];q[a+2832>>2]=q[b- -64>>2];q[a+2808>>2]=q[b+76>>2];q[a+2812>>2]=q[b+80>>2];q[a+2816>>2]=q[b+68>>2];q[a+2820>>2]=q[b+72>>2]}q[a+2448>>2]=q[b+88>>2];q[a+2452>>2]=q[b+92>>2];q[a+2380>>2]=q[b+172>>2];o[a+2466|0]=r[b+186|0];q[a+2468>>2]=q[b+188>>2];q[a+2384>>2]=q[b+176>>2];q[a+2416>>2]=q[b+180>>2];o[a+2465|0]=r[b+185|0];o[a+2464|0]=r[b+184|0]}function zz(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;c=q[a>>2];g=(q[a+4>>2]-c|0)/304|0;e=g+1|0;if(e>>>0<14128182){c=(q[a+8>>2]-c|0)/304|0;f=c<<1;c=c>>>0<7064090?f>>>0>>0?e:f:14128181;a:{if(!c){e=0;break a}yt(d);e=n[q[d+8>>2]](d,w(c,304),16)|0;f=q[q[d+12>>2]+4>>2];if(!f){break a}n[f](q[d>>2])}h=kV(w(g,304)+e|0,b,304);b=q[a>>2];g=q[a+4>>2]-b|0;f=h+w((g|0)/-304|0,304)|0;e=w(c,304)+e|0;c=h+304|0;if((g|0)>=1){kV(f,b,g);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=f;c=q[a+8>>2];q[a+8>>2]=e;b:{if(!b){break b}zt(d);n[q[d+8>>2]](d,b,c-b|0);a=q[q[d+12>>2]+4>>2];if(!a){break b}n[a](q[d>>2])}ue=d+16|0;return}kU();F()}function Xz(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;c=q[a>>2];g=(q[a+4>>2]-c|0)/240|0;e=g+1|0;if(e>>>0<17895698){c=(q[a+8>>2]-c|0)/240|0;f=c<<1;c=c>>>0<8947848?f>>>0>>0?e:f:17895697;a:{if(!c){e=0;break a}yt(d);e=n[q[d+8>>2]](d,w(c,240),16)|0;f=q[q[d+12>>2]+4>>2];if(!f){break a}n[f](q[d>>2])}h=kV(w(g,240)+e|0,b,240);b=q[a>>2];g=q[a+4>>2]-b|0;f=h+w((g|0)/-240|0,240)|0;e=w(c,240)+e|0;c=h+240|0;if((g|0)>=1){kV(f,b,g);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=f;c=q[a+8>>2];q[a+8>>2]=e;b:{if(!b){break b}zt(d);n[q[d+8>>2]](d,b,c-b|0);a=q[q[d+12>>2]+4>>2];if(!a){break b}n[a](q[d>>2])}ue=d+16|0;return}kU();F()}function Ut(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0;g=ue-16|0;ue=g;a:{if(!a){break a}i=q[e+12>>2];h=c-b|0;if((h|0)>=1){if((n[q[q[a>>2]+48>>2]](a,b,h)|0)!=(h|0)){break a}}b=d-b|0;h=(i|0)>(b|0)?i-b|0:0;if((h|0)>=1){q[g+8>>2]=0;q[g>>2]=0;q[g+4>>2]=0;b:{if(h>>>0>=11){b=h+16&-16;i=_S(b);q[g+8>>2]=b|-2147483648;q[g>>2]=i;q[g+4>>2]=h;b=g;break b}o[g+11|0]=h;i=g;b=g}k=lV(i,f,h)+h|0,l=0,o[k|0]=l;f=n[q[q[a>>2]+48>>2]](a,o[b+11|0]<0?q[g>>2]:g,h)|0;if(o[b+11|0]<=-1){_U(q[g>>2])}if((f|0)!=(h|0)){break a}}b=d-c|0;if((b|0)>=1){if((n[q[q[a>>2]+48>>2]](a,c,b)|0)!=(b|0)){break a}}q[e+12>>2]=0;j=a}ue=g+16|0;return j}function Iu(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{e=q[a+8>>2];c=q[a+12>>2];b:{if((e|0)!=(c|0)){c=e;break b}d=q[a+4>>2];f=q[a>>2];if(d>>>0>f>>>0){e=e-d|0;h=e>>2;f=((d-f>>2)+1|0)/-2<<2;g=f+d|0;c=a;if(e){mV(g,d,e);d=q[a+4>>2]}q[c+4>>2]=d+f;c=g+(h<<2)|0;q[a+8>>2]=c;break b}c=c-f|0;c=c?c>>1:1;if(c>>>0>=1073741824){break a}g=c<<2;h=_S(g);i=g+h|0;g=h+(c&-4)|0;c=g;if((d|0)!=(e|0)){c=g;while(1){q[c>>2]=q[d>>2];c=c+4|0;d=d+4|0;if((e|0)!=(d|0)){continue}break}f=q[a>>2]}q[a+12>>2]=i;q[a+8>>2]=c;q[a+4>>2]=g;q[a>>2]=h;if(!f){break b}_U(f);c=q[a+8>>2]}q[c>>2]=q[b>>2];q[a+8>>2]=q[a+8>>2]+4;return}Ue(27048);F()}function $n(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{e=q[a+8>>2];c=q[a+12>>2];b:{if((e|0)!=(c|0)){c=e;break b}d=q[a+4>>2];f=q[a>>2];if(d>>>0>f>>>0){e=e-d|0;h=e>>2;f=((d-f>>2)+1|0)/-2<<2;g=f+d|0;c=a;if(e){mV(g,d,e);d=q[a+4>>2]}q[c+4>>2]=d+f;c=g+(h<<2)|0;q[a+8>>2]=c;break b}c=c-f|0;c=c?c>>1:1;if(c>>>0>=1073741824){break a}g=c<<2;h=_S(g);i=g+h|0;g=h+(c&-4)|0;c=g;if((d|0)!=(e|0)){c=g;while(1){q[c>>2]=q[d>>2];c=c+4|0;d=d+4|0;if((e|0)!=(d|0)){continue}break}f=q[a>>2]}q[a+12>>2]=i;q[a+8>>2]=c;q[a+4>>2]=g;q[a>>2]=h;if(!f){break b}_U(f);c=q[a+8>>2]}q[c>>2]=q[b>>2];q[a+8>>2]=q[a+8>>2]+4;return}Ue(4913);F()}function Ju(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;a:{e=q[a+4>>2];d=q[a>>2];b:{if((e|0)!=(d|0)){c=e;break b}f=q[a+8>>2];c=q[a+12>>2];if(f>>>0>>0){g=((c-f>>2)+1|0)/2<<2;c=g+f|0;d=f-e|0;if(d){c=c-d|0;mV(c,e,d);f=q[a+8>>2]}q[a+4>>2]=c;q[a+8>>2]=f+g;break b}c=c-d|0;c=c?c>>1:1;if(c>>>0>=1073741824){break a}d=c<<2;g=_S(d);h=d+g|0;c=g+(c+3&-4)|0;c:{if((e|0)==(f|0)){d=c;break c}d=c;while(1){q[d>>2]=q[e>>2];d=d+4|0;e=e+4|0;if((f|0)!=(e|0)){continue}break}e=q[a>>2]}q[a+12>>2]=h;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break b}_U(e);c=q[a+4>>2]}q[c+ -4>>2]=q[b>>2];q[a+4>>2]=q[a+4>>2]+ -4;return}Ue(27048);F()}function ao(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;a:{e=q[a+4>>2];d=q[a>>2];b:{if((e|0)!=(d|0)){c=e;break b}f=q[a+8>>2];c=q[a+12>>2];if(f>>>0>>0){g=((c-f>>2)+1|0)/2<<2;c=g+f|0;d=f-e|0;if(d){c=c-d|0;mV(c,e,d);f=q[a+8>>2]}q[a+4>>2]=c;q[a+8>>2]=f+g;break b}c=c-d|0;c=c?c>>1:1;if(c>>>0>=1073741824){break a}d=c<<2;g=_S(d);h=d+g|0;c=g+(c+3&-4)|0;c:{if((e|0)==(f|0)){d=c;break c}d=c;while(1){q[d>>2]=q[e>>2];d=d+4|0;e=e+4|0;if((f|0)!=(e|0)){continue}break}e=q[a>>2]}q[a+12>>2]=h;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break b}_U(e);c=q[a+4>>2]}q[c+ -4>>2]=q[b>>2];q[a+4>>2]=q[a+4>>2]+ -4;return}Ue(4913);F()}function Zr(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{f=c-b|0;g=f>>2;d=q[a+8>>2];e=q[a>>2];b:{if(g>>>0<=d-e>>2>>>0){d=q[a+4>>2]-e|0;f=d>>2;d=g>>>0>f>>>0?b+d|0:c;h=d-b|0;if(h){mV(e,b,h)}if(g>>>0>f>>>0){b=c-d|0;if((b|0)<1){break b}kV(q[a+4>>2],d,b);q[a+4>>2]=b+q[a+4>>2];return}q[a+4>>2]=e+(h>>2<<2);return}if(e){q[a+4>>2]=e;_U(e);q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;d=0}if(g>>>0>=1073741824){break a}c=d>>1;c=d>>2>>>0<536870911?c>>>0>>0?g:c:1073741823;if(c>>>0>=1073741824){break a}e=c<<2;c=_S(e);q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+e;if((f|0)<1){break b}i=a,j=kV(c,b,f)+f|0,q[i+4>>2]=j}return}kU();F()}function Os(a,b){var c=0,d=0,e=x(0),f=0,g=x(0),h=0,i=0,j=0,k=x(0);e=x(1);a:{c=q[a+4>>2];b:{if(!c){break b}if(!!(u[a+168>>2]>b)){return u[a+172>>2]}d=(c+ -1<<3)+a|0;if(u[d+168>>2]<=b){break a}h=a+168|0;d=h;while(1){f=c>>>1|0;i=(f<<3)+d|0;j=u[i>>2]>3)-(u[c+d>>2]!=b)|0;g=u[(c<<3)+d>>2];if(!(g<=b)){break b}d=c+1|0;k=u[((d<<3)+a|0)+168>>2];if(!(k>=b)){break b}e=x(k-g);if(e==x(0)){return u[((c<<3)+a|0)+172>>2]}b=x(x(b-g)/e);a=a+168|0;e=x(x(b*u[(a+(d<<3)|0)+4>>2])+x(x(x(1)-b)*u[(a+(c<<3)|0)+4>>2]))}return e}return u[d+172>>2]}function CG(a){var b=0,c=0,d=0,f=0;f=ue-16|0;ue=f;c=(k(a),e(0));b=c&2147483647;a:{if(b>>>0<=1061752794){if(b>>>0<964689920){break a}a=BG(+a,0);break a}if(b>>>0<=1081824209){d=+a;if(b>>>0<=1075235811){a=BG(((c|0)<0?1.5707963267948966:-1.5707963267948966)+d,1);break a}a=BG(((c|0)<0?3.141592653589793:-3.141592653589793)+d,0);break a}if(b>>>0<=1088565717){d=+a;if(b>>>0<=1085271519){a=BG(((c|0)<0?4.71238898038469:-4.71238898038469)+d,1);break a}a=BG(((c|0)<0?6.283185307179586:-6.283185307179586)+d,0);break a}if(b>>>0>=2139095040){a=x(a-a);break a}b=yG(a,f+8|0);a=BG(v[f+8>>3],b&1)}ue=f+16|0;return a}function En(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=ue-112|0;ue=d;c=q[a+12>>2];if((c|0)!=q[a+16>>2]){Qp(c)}c=JG();e=we;Fn(d+16|0,b,u[b+64>>2],u[b+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);q[d+4>>2]=b;q[d>>2]=a;e=wW(c,e,-1e3,-1);q[d+8>>2]=d+16;a:{if(!r[b+100|0]){c=q[a+500>>2];if((c|0)==q[a+504>>2]){break a}b=0;while(1){Gn(d,w(b,288)+c|0);b=b+1|0;c=q[a+500>>2];if(b>>>0<(q[a+504>>2]-c|0)/288>>>0){continue}break}break a}yl(a,b);b=q[a+512>>2];c=q[a+516>>2];if((b|0)==(c|0)){break a}while(1){Gn(d,b);b=b+288|0;if((c|0)!=(b|0)){continue}break}}f=a,g=wW(JG(),we,1e3,0)+e|0,q[f+576>>2]=g;ue=d+112|0}function Br(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;c=q[a>>2];g=(q[a+4>>2]-c|0)/80|0;e=g+1|0;if(e>>>0<53687092){c=(q[a+8>>2]-c|0)/80|0;f=c<<1;c=c>>>0<26843545?f>>>0>>0?e:f:53687091;a:{if(!c){e=0;break a}yt(d);e=n[q[d+8>>2]](d,w(c,80),16)|0;f=q[q[d+12>>2]+4>>2];if(!f){break a}n[f](q[d>>2])}h=kV(w(g,80)+e|0,b,80);b=q[a>>2];g=q[a+4>>2]-b|0;f=h+w((g|0)/-80|0,80)|0;e=w(c,80)+e|0;c=h+80|0;if((g|0)>=1){kV(f,b,g);b=q[a>>2]}q[a+4>>2]=c;q[a>>2]=f;c=q[a+8>>2];q[a+8>>2]=e;b:{if(!b){break b}zt(d);n[q[d+8>>2]](d,b,c-b|0);a=q[q[d+12>>2]+4>>2];if(!a){break b}n[a](q[d>>2])}ue=d+16|0;return}kU();F()}function BC(a,b){var c=0,d=0,e=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+4>>2]=340256;q[a>>2]=340228;q[a+40>>2]=0;q[a+36>>2]=b;q[a+16>>2]=0;q[a+8>>2]=1;q[a+12>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;if(b){n[q[q[b>>2]>>2]](b)|0;e=q[a+36>>2]}d=e+12|0;b=q[d>>2];a:{if(b){d=e+12|0;while(1){c=q[b+16>>2];b:{if(c>>>0>a>>>0){c=q[b>>2];if(c){break b}d=b;break a}if(c>>>0>=a>>>0){break a}d=b+4|0;c=q[b+4>>2];if(!c){break a}b=d}d=b;b=c;continue}}b=d}if(!q[d>>2]){c=_S(20);q[c+8>>2]=b;q[c>>2]=0;q[c+4>>2]=0;q[c+16>>2]=a;q[d>>2]=c;b=q[q[e+8>>2]>>2];if(b){q[e+8>>2]=b;c=q[d>>2]}ih(q[e+12>>2],c);b=e+16|0;q[b>>2]=q[b>>2]+1}return a}function hh(a,b,c){var d=0,e=0,f=0,g=0;d=_S(36);o[a+8|0]=0;q[a+4>>2]=b+4;q[a>>2]=d;b=q[c>>2];q[d+24>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;f=d+16|0;a:{b:{c:{if(o[b+11|0]>=0){c=q[b+4>>2];q[f>>2]=q[b>>2];q[f+4>>2]=c;q[f+8>>2]=q[b+8>>2];break c}e=q[b+4>>2];if(e>>>0>=2147483632){break b}c=q[b>>2];d:{e:{if(e>>>0>=5){b=e+8&-8;if((b|0)<=-1){break a}f=_S(b<<1);q[d+24>>2]=b|-2147483648;q[d+16>>2]=f;q[d+20>>2]=e;break e}o[d+27|0]=e;if(!e){break d}}b=f;g=e;while(1){p[b>>1]=s[c>>1];c=c+2|0;b=b+2|0;g=g+ -1|0;if(g){continue}break}}p[(e<<1)+f>>1]=0}q[d+28>>2]=0;q[d+32>>2]=0;o[a+8|0]=1;return}kT();F()}Ue(2320);F()}function Xt(a,b,c,d,e){var f=0;f=ue-32|0;ue=f;a:{if(r[a|0]){if(r[a+1|0]){a=Ft(Ft(Ft(nI(Ft(nI(Ft(b,13407,13),e),13421,12),q[a+4>>2]+d|0),13434,20),c,sV(c)),13405,1);EH(f+8|0,a+q[q[a>>2]+ -12>>2]|0);b=pL(f+8|0,370576);b=n[q[q[b>>2]+28>>2]](b,10)|0;kL(f+8|0);break a}a=Ft(Ft(Ft(nI(Ft(b,13455,17),q[a+4>>2]+d|0),13434,20),c,sV(c)),13405,1);EH(f+16|0,a+q[q[a>>2]+ -12>>2]|0);b=pL(f+16|0,370576);b=n[q[q[b>>2]+28>>2]](b,10)|0;kL(f+16|0);break a}a=Ft(Ft(Ft(b,13473,18),c,sV(c)),13405,1);EH(f+24|0,a+q[q[a>>2]+ -12>>2]|0);b=pL(f+24|0,370576);b=n[q[q[b>>2]+28>>2]](b,10)|0;kL(f+24|0)}pI(a,b);DH(a);ue=f+32|0}function Ex(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{f=c-b|0;g=f>>4;d=q[a+8>>2];e=q[a>>2];b:{if(g>>>0<=d-e>>4>>>0){d=q[a+4>>2]-e|0;f=d>>4;d=g>>>0>f>>>0?b+d|0:c;h=d-b|0;if(h){mV(e,b,h)}if(g>>>0>f>>>0){b=c-d|0;if((b|0)<1){break b}kV(q[a+4>>2],d,b);q[a+4>>2]=b+q[a+4>>2];return}q[a+4>>2]=e+(h>>4<<4);return}if(e){q[a+4>>2]=e;_U(e);q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;d=0}if(g>>>0>=268435456){break a}c=d>>3;c=d>>4>>>0<134217727?c>>>0>>0?g:c:268435455;if(c>>>0>=268435456){break a}e=c<<4;c=_S(e);q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+e;if((f|0)<1){break b}i=a,j=kV(c,b,f)+f|0,q[i+4>>2]=j}return}kU();F()}function Dx(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{f=c-b|0;g=f>>6;d=q[a+8>>2];e=q[a>>2];b:{if(g>>>0<=d-e>>6>>>0){d=q[a+4>>2]-e|0;f=d>>6;d=g>>>0>f>>>0?b+d|0:c;h=d-b|0;if(h){mV(e,b,h)}if(g>>>0>f>>>0){b=c-d|0;if((b|0)<1){break b}kV(q[a+4>>2],d,b);q[a+4>>2]=b+q[a+4>>2];return}q[a+4>>2]=e+(h>>6<<6);return}if(e){q[a+4>>2]=e;_U(e);q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;d=0}if(g>>>0>=67108864){break a}c=d>>5;c=d>>6>>>0<33554431?c>>>0>>0?g:c:67108863;if(c>>>0>=67108864){break a}e=c<<6;c=_S(e);q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+e;if((f|0)<1){break b}i=a,j=kV(c,b,f)+f|0,q[i+4>>2]=j}return}kU();F()}function yh(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>4>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;c=q[a+4>>2]+16|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>4;c=f+b|0;if(c>>>0>=268435456){break b}f=f<<4;d=d-e|0;i=d>>3;d=d>>4>>>0<134217727?i>>>0>>0?c:i:268435455;if(d){if(d>>>0>=268435456){break a}g=_S(d<<4)}c=g+f|0;lV(c,0,b<<4);d=(d<<4)+g|0;while(1){c=c+16|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(2732);F()}function VO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=ue-160|0;ue=a;q[a+144>>2]=c;q[a+152>>2]=b;q[a+20>>2]=858;h=rL(a+24|0,a+32|0,a+20|0);EH(a+16|0,e);b=FH(a+16|0);o[a+15|0]=0;a:{if(!PO(a+152|0,c,d,a+16|0,q[e+4>>2],f,a+15|0,b,h,a+20|0,a+132|0)){break a}WO(g);if(r[a+15|0]){AT(g,HI(b,45))}c=HI(b,48);e=q[h>>2];i=q[a+20>>2];d=i+ -1|0;b=e>>>0>d>>>0?e:d;j=c&255;while(1){c=g;b:{if(e>>>0>>0){if((j|0)==r[e|0]){break b}}else{e=b}ZO(c,e,i);break a}e=e+1|0;continue}}if(KH(a+152|0,a+144|0)){q[f>>2]=q[f>>2]|2}b=q[a+152>>2];kL(a+16|0);wL(h);ue=a+160|0;return b|0}function VC(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a+4>>2]=340396;q[a>>2]=340372;b=q[a+16>>2];if(b){ba(b|0)}q[a+52>>2]=q[a+48>>2];b=q[a+60>>2];q[a- -64>>2]=b;d=q[a+12>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+12>>2]=0;b=q[a+60>>2]}a:{if(!b){break a}q[a+64>>2]=b;d=q[a+68>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a+48>>2];b:{if(!b){break b}q[a+52>>2]=b;d=q[a+56>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break b}n[b](q[c>>2])}b=q[a+44>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+44>>2]=0}Kw(a+32|0);Kw(a+20|0);ue=c+16|0;return a|0}function Bx(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>2>>>0>=b>>>0){while(1){o[c|0]=0;o[c+1|0]=0;o[c+2|0]=0;o[c+3|0]=0;c=q[a+4>>2]+4|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>2;c=f+b|0;if(c>>>0>=1073741824){break b}f=f<<2;d=d-e|0;i=d>>1;d=d>>2>>>0<536870911?i>>>0>>0?c:i:1073741823;if(d){if(d>>>0>=1073741824){break a}g=_S(d<<2)}c=g+f|0;lV(c,0,b<<2);d=(d<<2)+g|0;while(1){c=c+4|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(190925);F()}function pC(a,b){var c=0,d=0,e=0;q[a+12>>2]=0;q[a+16>>2]=0;q[a+4>>2]=340196;q[a>>2]=340168;o[a+36|0]=0;q[a+32>>2]=0;q[a+28>>2]=b;q[a+8>>2]=1;q[a+20>>2]=0;q[a+24>>2]=0;if(b){n[q[q[b>>2]>>2]](b)|0;e=q[a+28>>2]}d=e+12|0;b=q[d>>2];a:{if(b){d=e+12|0;while(1){c=q[b+16>>2];b:{if(c>>>0>a>>>0){c=q[b>>2];if(c){break b}d=b;break a}if(c>>>0>=a>>>0){break a}d=b+4|0;c=q[b+4>>2];if(!c){break a}b=d}d=b;b=c;continue}}b=d}if(!q[d>>2]){c=_S(20);q[c+8>>2]=b;q[c>>2]=0;q[c+4>>2]=0;q[c+16>>2]=a;q[d>>2]=c;b=q[q[e+8>>2]>>2];if(b){q[e+8>>2]=b;c=q[d>>2]}ih(q[e+12>>2],c);b=e+16|0;q[b>>2]=q[b>>2]+1}return a}function zx(a,b){var c=0,d=0,e=0,f=0,g=0;a:{b:{e=q[a+8>>2];d=q[a+4>>2];c:{if(e-d>>6>>>0>=b>>>0){while(1){oo(d);d=q[a+4>>2]- -64|0;q[a+4>>2]=d;b=b+ -1|0;if(b){continue}break c}}f=q[a>>2];g=d-f>>6;c=g+b|0;if(c>>>0>=67108864){break b}e=e-f|0;f=e>>5;c=e>>6>>>0<33554431?f>>>0>>0?c:f:67108863;d=0;d:{if(!c){break d}if(c>>>0>=67108864){break a}d=_S(c<<6)}f=d+(c<<6)|0;c=d+(g<<6)|0;d=c;while(1){d=oo(d)- -64|0;b=b+ -1|0;if(b){continue}break}g=c;b=q[a>>2];c=q[a+4>>2]-b|0;e=g-c|0;if((c|0)>=1){kV(e,b,c)}q[a+8>>2]=f;q[a+4>>2]=d;q[a>>2]=e;if(!b){break c}_U(b)}return}kU();F()}Ue(190925);F()}function Ax(a,b){var c=0,d=0,e=0,f=0,g=0;a:{b:{e=q[a+8>>2];d=q[a+4>>2];c:{if(e-d>>4>>>0>=b>>>0){while(1){Ao(d);d=q[a+4>>2]+16|0;q[a+4>>2]=d;b=b+ -1|0;if(b){continue}break c}}f=q[a>>2];g=d-f>>4;c=g+b|0;if(c>>>0>=268435456){break b}e=e-f|0;f=e>>3;c=e>>4>>>0<134217727?f>>>0>>0?c:f:268435455;d=0;d:{if(!c){break d}if(c>>>0>=268435456){break a}d=_S(c<<4)}f=d+(c<<4)|0;c=d+(g<<4)|0;d=c;while(1){d=Ao(d)+16|0;b=b+ -1|0;if(b){continue}break}g=c;b=q[a>>2];c=q[a+4>>2]-b|0;e=g-c|0;if((c|0)>=1){kV(e,b,c)}q[a+8>>2]=f;q[a+4>>2]=d;q[a>>2]=e;if(!b){break c}_U(b)}return}kU();F()}Ue(190925);F()}function WU(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(CU(a,q[b+8>>2],f)){PU(b,c,d,e);return}h=r[b+53|0];g=q[a+12>>2];o[b+53|0]=0;i=r[b+52|0];o[b+52|0]=0;j=a+16|0;SU(j,b,c,d,e,f);k=r[b+53|0];h=h|k;l=r[b+52|0];i=i|l;a:{if((g|0)<2){break a}j=j+(g<<3)|0;g=a+24|0;while(1){if(r[b+54|0]){break a}b:{if(l){if(q[b+24>>2]==1){break a}if(r[a+8|0]&2){break b}break a}if(!k){break b}if(!(o[a+8|0]&1)){break a}}p[b+52>>1]=0;SU(g,b,c,d,e,f);k=r[b+53|0];h=k|h;l=r[b+52|0];i=l|i;g=g+8|0;if(g>>>0>>0){continue}break}}o[b+53|0]=(h&255)!=0;o[b+52|0]=(i&255)!=0}function uV(a){if(!kK(a,363264)){return 1135}if(!kK(a,363277)){return 1136}if(!kK(a,363293)){return 1137}if(!kK(a,363303)){return 1138}if(!kK(a,363316)){return 1139}if(!kK(a,363327)){return 1140}if(!kK(a,363342)){return 1141}if(!kK(a,363355)){return 1142}if(!kK(a,363374)){return 1143}if(!kK(a,363394)){return 1144}if(!kK(a,363415)){return 1145}if(!kK(a,363437)){return 1146}if(!kK(a,363455)){return 1147}if(!kK(a,363476)){return 1148}if(!kK(a,363494)){return 1149}if(!kK(a,363510)){return 1150}if(!kK(a,363524)){return 1151}if(!kK(a,363546)){return 1152}return kK(a,363570)?0:1153}function Pe(a,b,c,d){var e=0,f=x(0),g=0;g=a;e=r[b|0];f=x(B(x(A(x(x(x(r[c|0]-e|0)*d)+x(e>>>0)),x(255))),x(0)));a:{if(f=x(0)){e=~~f>>>0;break a}e=0}o[g|0]=e;g=a;e=r[b+1|0];f=x(B(x(A(x(x(x(r[c+1|0]-e|0)*d)+x(e>>>0)),x(255))),x(0)));b:{if(f=x(0)){e=~~f>>>0;break b}e=0}o[g+1|0]=e;g=a;e=r[b+2|0];f=x(B(x(A(x(x(x(r[c+2|0]-e|0)*d)+x(e>>>0)),x(255))),x(0)));c:{if(f=x(0)){e=~~f>>>0;break c}e=0}o[g+2|0]=e;b=r[b+3|0];d=x(B(x(A(x(x(x(r[c+3|0]-b|0)*d)+x(b>>>0)),x(255))),x(0)));if(d=x(0)){o[a+3|0]=~~d>>>0;return}o[a+3|0]=0}function yr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-16|0;ue=c;g=q[a+4>>2];d=q[a>>2];h=g-d>>2;e=h+1|0;if(e>>>0<1073741824){f=q[a+8>>2]-d|0;i=f>>1;f=f>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;a:{if(!f){e=0;break a}wt(c);e=n[q[c+8>>2]](c,f<<2)|0;d=q[q[c+12>>2]+4>>2];if(d){n[d](q[c>>2])}d=q[a>>2];g=q[a+4>>2]}h=(h<<2)+e|0;q[h>>2]=q[b>>2];b=g-d|0;g=h-b|0;e=(f<<2)+e|0;f=h+4|0;if((b|0)>=1){kV(g,d,b);d=q[a>>2]}q[a+4>>2]=f;q[a>>2]=g;b=q[a+8>>2];q[a+8>>2]=e;b:{if(!d){break b}xt(c);n[q[c+8>>2]](c,d,b-d|0);a=q[q[c+12>>2]+4>>2];if(!a){break b}n[a](q[c>>2])}ue=c+16|0;return}kU();F()}function QR(){var a=0;a:{if(o[371760]&1){break a}if(!oU(371760)){break a}a=371472;while(1){a=CL(a)+12|0;if((a|0)!=371760){continue}break}sU(371760)}LR(371472,360856);LR(371484,360888);LR(371496,360924);LR(371508,360948);LR(371520,360972);LR(371532,360988);LR(371544,361008);LR(371556,361028);LR(371568,361056);LR(371580,361096);LR(371592,361128);LR(371604,361164);LR(371616,361200);LR(371628,361216);LR(371640,361232);LR(371652,361248);LR(371664,360972);LR(371676,361264);LR(371688,361280);LR(371700,361296);LR(371712,361312);LR(371724,361328);LR(371736,361344);LR(371748,361360)}function NR(){var a=0;a:{if(o[371456]&1){break a}if(!oU(371456)){break a}a=371168;while(1){a=CL(a)+12|0;if((a|0)!=371456){continue}break}sU(371456)}ER(371168,360724);ER(371180,360732);ER(371192,360741);ER(371204,360747);ER(371216,360753);ER(371228,360757);ER(371240,360762);ER(371252,360767);ER(371264,360774);ER(371276,360784);ER(371288,360792);ER(371300,360801);ER(371312,360810);ER(371324,360814);ER(371336,360818);ER(371348,360822);ER(371360,360753);ER(371372,360826);ER(371384,360830);ER(371396,360834);ER(371408,360838);ER(371420,360842);ER(371432,360846);ER(371444,360850)}function ml(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;f=b+4|0;yt(d);b=n[q[d+8>>2]](d,352,16)|0;e=q[q[d+12>>2]+4>>2];if(e){n[e](q[d>>2])}q[a+4>>2]=f;q[a>>2]=b;a=a+8|0;o[a|0]=0;c=q[q[c>>2]>>2];q[b+64>>2]=0;q[b+68>>2]=0;q[b+32>>2]=c;q[b+72>>2]=0;q[b+76>>2]=0;q[b+104>>2]=4896;q[b+100>>2]=191;o[b+88|0]=0;o[b+85|0]=0;o[b+83|0]=0;o[b+84|0]=0;p[b+80>>1]=256;zp(b+156|0,x(1),x(1),x(1));q[b+256>>2]=0;q[b+260>>2]=0;q[b+244>>2]=1065353216;q[b+248>>2]=0;q[b+236>>2]=0;q[b+240>>2]=0;o[b+232|0]=0;q[b+224>>2]=1065353216;q[b+228>>2]=-1;yp(b+264|0);q[b+276>>2]=0;ko(b+108|0);o[a|0]=1;ue=d+16|0}function AJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=ue-32|0;ue=c;a:{b:{c:{if(SH(b,-1)){break c}h=c,i=lH(b),o[h+23|0]=i;if(r[a+44|0]){if((qV(c+23|0,1,1,q[a+32>>2])|0)!=1){break b}break c}q[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+23|0;while(1){e=mJ(q[a+36>>2],q[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(q[c+12>>2]==(d|0)){break b}if((e|0)==3){if((qV(d,1,1,q[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=q[c+16>>2]-(c+24|0)|0;if((qV(c+24|0,1,d,q[a+32>>2])|0)!=(d|0)){break b}d=q[c+12>>2];if((e|0)==1){continue}break}}a=BJ(b);break a}a=-1}ue=c+32|0;return a|0}function Op(a){a=a|0;var b=0,c=0,d=0,e=0;c=ue-16|0;ue=c;a:{if(o[372432]&1){break a}if(!oU(372432)){break a}b=ZU(8);q[b>>2]=0;q[b+4>>2]=38177486;q[93107]=b;sU(372432)}b=q[a>>2];q[a>>2]=0;d=q[93107];if(q[d+4>>2]==38177486){q[d>>2]=b}b=q[a+4>>2];d=b+4|0;e=b+20|0;while(1){q[c+8>>2]=e;o[c+12|0]=1;b:{if(o[b+144|0]&1){break b}while(1){if(o[b+146|0]&1){break b}OG(c+8|0);if(!(o[b+144|0]&1)){continue}break}}if(!(o[b+146|0]&1)){if(!r[q[b+16>>2]+8|0]){n[q[b+12>>2]](d)}o[b+144|0]=256;o[b+145|0]=1;continue}break}if(a){b=q[a>>2];q[a>>2]=0;if(b){_U(fU(b))}_U(a)}ue=c+16|0;return 0}function Ws(a,b){var c=x(0),d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0);c=u[b+36>>2];g=u[b+20>>2];d=u[b+40>>2];h=u[b+24>>2];m=u[b+28>>2];e=u[b+44>>2];i=u[b+4>>2];j=u[b+8>>2];f=u[b+32>>2];k=u[b>>2];l=u[b+16>>2];u[a+12>>2]=u[b+12>>2]*x(0);u[a+44>>2]=e*x(0);u[a+28>>2]=m*x(0);e=f;f=x(x(1)/x(E(x(x(x(k*k)+x(l*l))+x(f*f)))));u[a+32>>2]=e*f;u[a+16>>2]=l*f;u[a>>2]=k*f;e=d;d=x(x(1)/x(E(x(x(x(j*j)+x(h*h))+x(d*d)))));u[a+40>>2]=e*d;e=c;c=x(x(1)/x(E(x(x(x(i*i)+x(g*g))+x(c*c)))));u[a+36>>2]=e*c;u[a+24>>2]=h*d;u[a+20>>2]=g*c;u[a+8>>2]=j*d;u[a+4>>2]=i*c}function Kj(a,b,c,d){var e=0;q[a+164>>2]=b;q[a+820>>2]=0;b=q[1821];q[a+1344>>2]=q[1820];q[a+1348>>2]=b;e=q[1823];b=a+1352|0;q[b>>2]=q[1822];q[b+4>>2]=e;e=q[1825];b=a+1360|0;q[b>>2]=q[1824];q[b+4>>2]=e;e=q[1827];b=a+1368|0;q[b>>2]=q[1826];q[b+4>>2]=e;e=q[1829];b=a+1376|0;q[b>>2]=q[1828];q[b+4>>2]=e;e=q[1831];b=a+1384|0;q[b>>2]=q[1830];q[b+4>>2]=e;q[a+832>>2]=0;q[a+824>>2]=2139095039;q[a+828>>2]=0;q[a+1396>>2]=d;u[a+176>>2]=c;o[a+1392|0]=1;b=q[q[a+152>>2]+20>>2];uo(a+168|0,n[q[q[b+32>>2]+8>>2]](b+32|0)|0);q[a+88>>2]=0;q[a+92>>2]=1065353216;q[a+80>>2]=0;q[a+84>>2]=0}function dy(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=337092;q[a+4>>2]=b;c=a+16|0;q[c>>2]=0;q[c+4>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;b=q[q[q[b+20>>2]+(q[q[b+4>>2]+324>>2]<<3)>>2]>>2];g=a,h=n[q[q[b+8>>2]+28>>2]](b+8|0)|0,q[g+20>>2]=h;b=q[a+4>>2];b=q[q[q[b+20>>2]+(q[q[b+4>>2]+324>>2]<<3)>>2]>>2];d=n[q[q[b+8>>2]+28>>2]](b+8|0)|0;b=q[a+8>>2];a:{if(q[c>>2]-b>>>0>=d>>>0){break a}c=q[a+12>>2];e=d;d=_S(d);e=e+d|0;c=c-b|0;f=c+d|0;if((c|0)>=1){kV(d,b,c)}q[a+16>>2]=e;q[a+12>>2]=f;q[a+8>>2]=d;if(!b){break a}_U(b)}}function LE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=_S(188);d=lV(f,0,188);oo(d+24|0);oo(d+88|0);q[d+184>>2]=0;q[d+176>>2]=0;q[d+180>>2]=0;q[d+168>>2]=0;q[d+172>>2]=0;q[d+160>>2]=0;q[d+164>>2]=0;q[d+152>>2]=0;q[d+156>>2]=0;e=Ya(0)|0;q[d+156>>2]=e;e=Za(e|0,0)|0;q[d+160>>2]=e;_a(e|0)|0;if(!ME(d,a,b,c)){b=d+152|0;if(o[d+187|0]<=-1){_U(q[d+176>>2])}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}a=q[d+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+8>>2]=0}a=q[d+4>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+4>>2]=0}a=q[d>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0}_U(d);f=0}return f|0}function wx(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>3>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;c=q[a+4>>2]+8|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>3;c=f+b|0;if(c>>>0>=536870912){break b}f=f<<3;d=d-e|0;i=d>>2;d=d>>3>>>0<268435455?i>>>0>>0?c:i:536870911;if(d){if(d>>>0>=536870912){break a}g=_S(d<<3)}c=g+f|0;lV(c,0,b<<3);d=(d<<3)+g|0;while(1){c=c+8|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(190925);F()}function xh(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>3>>>0>=b>>>0){while(1){q[c>>2]=0;q[c+4>>2]=0;c=q[a+4>>2]+8|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>3;c=f+b|0;if(c>>>0>=536870912){break b}f=f<<3;d=d-e|0;i=d>>2;d=d>>3>>>0<268435455?i>>>0>>0?c:i:536870911;if(d){if(d>>>0>=536870912){break a}g=_S(d<<3)}c=g+f|0;lV(c,0,b<<3);d=(d<<3)+g|0;while(1){c=c+8|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(2732);F()}function lJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;c=SH(b,-1);e=r[a+52|0];a:{if(c){c=b;if(e){break a}c=q[a+48>>2];f=a,g=SH(c,-1)^1,o[f+52|0]=g;break a}if(e){f=d,g=lH(q[a+48>>2]),o[f+19|0]=g;c=mJ(q[a+36>>2],q[a+40>>2],d+19|0,d+20|0,d+12|0,d+24|0,d+32|0,d+20|0)+ -1|0;b:{c:{if(c>>>0<=2){if(c-2){break c}c=q[a+48>>2];q[d+20>>2]=d+25;o[d+24|0]=c}while(1){c=q[d+20>>2];e=1;if(c>>>0<=d+24>>>0){break b}c=c+ -1|0;q[d+20>>2]=c;if((MI(o[c|0],q[a+32>>2])|0)!=-1){continue}break}}c=-1;e=0}if(!e){break a}}o[a+52|0]=1;q[a+48>>2]=b;c=b}ue=d+32|0;return c|0}function eG(a,b){var c=0,d=0;d=ue-32|0;ue=d;a:{b:{c:{if(!mG(344772,o[b|0])){q[91802]=28;break c}c=ZU(1176);if(c){break b}}a=0;break a}lV(c,0,144);if(!mG(b,43)){q[c>>2]=r[b|0]==114?8:4}d:{if(r[b|0]!=97){b=q[c>>2];break d}b=bb(a|0,3,0)|0;if(!(b&1024)){q[d+16>>2]=b|1024;bb(a|0,4,d+16|0)|0}b=q[c>>2]|128;q[c>>2]=b}o[c+75|0]=255;q[c+48>>2]=1024;q[c+60>>2]=a;q[c+44>>2]=c+152;e:{if(b&8){break e}q[d>>2]=d+24;if(cb(a|0,21523,d|0)){break e}o[c+75|0]=10}q[c+40>>2]=789;q[c+36>>2]=790;q[c+32>>2]=791;q[c+12>>2]=792;if(!q[91784]){q[c+76>>2]=-1}a=gG(c)}ue=d+32|0;return a}function Bm(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=q[a+464>>2];f=a+468|0;if((b|0)!=(f|0)){while(1){c=b;b=q[c+64>>2];a=0;a:{if(!b){break a}n[q[q[b>>2]>>2]](b)|0;a=q[c+64>>2]}b=q[c+92>>2];e=q[c+72>>2];d=q[c+104>>2];g=q[d>>2];if(g){b=n[g](b)|0}e=q[e+4>>2];d=q[d+4>>2];if(d){n[d](b)}if(a){n[q[q[a>>2]+8>>2]](a)|0}a=q[c+4>>2];b:{if(!a){b=q[c+8>>2];if((c|0)==q[b>>2]){break b}a=c+8|0;while(1){c=q[a>>2];a=c+8|0;b=q[c+8>>2];if((c|0)!=q[b>>2]){continue}break}break b}while(1){b=a;a=q[b>>2];if(a){continue}break}}h=e+h|0;if((b|0)!=(f|0)){continue}break}}return h|0}function Up(a,b,c){var d=0,e=0;d=q[b>>2];e=r[d|0]|r[d+1|0]<<8|(r[d+2|0]<<16|r[d+3|0]<<24);q[b>>2]=d+4;if((e|0)>=1){d=0;while(1){Tp(w(d,208)+a|0,b,c);d=d+1|0;if((e|0)!=(d|0)){continue}break}}a:{if(!r[a+192|0]){break a}o[a+832|0]=1;if(q[a+172>>2]?0:!q[a+168>>2]){break a}o[a+833|0]=1}b:{if(!r[a+400|0]){break b}o[a+832|0]=1;if(q[a+380>>2]?0:!q[a+376>>2]){break b}o[a+833|0]=1}c:{if(!r[a+608|0]){break c}o[a+832|0]=1;if(q[a+588>>2]?0:!q[a+584>>2]){break c}o[a+833|0]=1}d:{if(!r[a+816|0]){break d}o[a+832|0]=1;if(q[a+796>>2]?0:!q[a+792>>2]){break d}o[a+833|0]=1}}function In(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=ue-112|0;ue=c;d=JG();e=we;Fn(c+16|0,b,u[b+64>>2],u[b+68>>2],q[q[n[q[q[a>>2]+84>>2]](a)>>2]+8>>2]);q[c+4>>2]=b;q[c>>2]=a;e=wW(d,e,-1e3,-1);q[c+8>>2]=c+16;a:{if(!r[b+100|0]){d=q[a+500>>2];if((d|0)==q[a+504>>2]){break a}b=0;while(1){Jn(c,w(b,288)+d|0);b=b+1|0;d=q[a+500>>2];if(b>>>0<(q[a+504>>2]-d|0)/288>>>0){continue}break}break a}yl(a,b);b=q[a+512>>2];d=q[a+516>>2];if((b|0)==(d|0)){break a}while(1){Jn(c,b);b=b+288|0;if((d|0)!=(b|0)){continue}break}}f=a,g=wW(JG(),we,1e3,0)+e|0,q[f+576>>2]=g;ue=c+112|0}function PI(){var a=0;a=q[87377];RI(a);SI();TI(a);UI();a=q[87378];VI(370124,a,370172);WI(369488,370124);XI(370180,a,370228);YI(369572,370180);a=q[87379];VI(370236,a,370284);WI(369656,370236);WI(369824,q[(q[q[92414]+ -12>>2]+369656|0)+24>>2]);XI(370292,a,370340);YI(369740,370292);YI(369908,q[(q[q[92435]+ -12>>2]+369740|0)+24>>2]);ZI(q[q[92328]+ -12>>2]+369312|0,369488);ZI(q[q[92350]+ -12>>2]+369400|0,369572);fJ(q[q[92414]+ -12>>2]+369656|0);fJ(q[q[92435]+ -12>>2]+369740|0);ZI(q[q[92414]+ -12>>2]+369656|0,369488);ZI(q[q[92435]+ -12>>2]+369740|0,369572)}function th(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>2>>>0>=b>>>0){while(1){q[c>>2]=0;c=q[a+4>>2]+4|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>2;c=f+b|0;if(c>>>0>=1073741824){break b}f=f<<2;d=d-e|0;i=d>>1;d=d>>2>>>0<536870911?i>>>0>>0?c:i:1073741823;if(d){if(d>>>0>=1073741824){break a}g=_S(d<<2)}c=g+f|0;lV(c,0,b<<2);d=(d<<2)+g|0;while(1){c=c+4|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(2732);F()}function Dn(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{d=q[a+8>>2];c=q[a+4>>2];c:{if(d-c>>2>>>0>=b>>>0){while(1){q[c>>2]=0;c=q[a+4>>2]+4|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break c}}e=q[a>>2];h=c-e|0;f=h>>2;c=f+b|0;if(c>>>0>=1073741824){break b}f=f<<2;d=d-e|0;i=d>>1;d=d>>2>>>0<536870911?i>>>0>>0?c:i:1073741823;if(d){if(d>>>0>=1073741824){break a}g=_S(d<<2)}c=g+f|0;lV(c,0,b<<2);d=(d<<2)+g|0;while(1){c=c+4|0;b=b+ -1|0;if(b){continue}break}if((h|0)>=1){kV(g,e,h)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break c}_U(e)}return}kU();F()}Ue(4913);F()}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=ue-32|0;ue=c;a:{b:{c:{if(SH(b,-1)){break c}q[c+20>>2]=b;if(r[a+44|0]){if((qV(c+20|0,4,1,q[a+32>>2])|0)!=1){break b}break c}q[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+20|0;while(1){e=mJ(q[a+36>>2],q[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(q[c+12>>2]==(d|0)){break b}if((e|0)==3){if((qV(d,1,1,q[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=q[c+16>>2]-(c+24|0)|0;if((qV(c+24|0,1,d,q[a+32>>2])|0)!=(d|0)){break b}d=q[c+12>>2];if((e|0)==1){continue}break}}a=BJ(b);break a}a=-1}ue=c+32|0;return a|0}function Du(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;c=q[a+16>>2];b=(c>>>0)/28|0;d=q[a+4>>2];f=q[a+8>>2];a:{if((d|0)==(f|0)){g=a+20|0;break a}g=a+20|0;e=(b<<2)+d|0;b=q[e>>2]+w(c-w(b,28)|0,144)|0;c=c+q[a+20>>2]|0;h=(c>>>0)/28|0;c=q[(h<<2)+d>>2]+w(c-w(h,28)|0,144)|0;if((b|0)==(c|0)){break a}while(1){b=b+144|0;if((b-q[e>>2]|0)==4032){b=q[e+4>>2];e=e+4|0}if((b|0)!=(c|0)){continue}break}}q[g>>2]=0;b=f-d>>2;if(b>>>0>2){while(1){_U(q[d>>2]);d=q[a+4>>2]+4|0;q[a+4>>2]=d;b=q[a+8>>2]-d>>2;if(b>>>0>2){continue}break}}b=b+ -1|0;if(b>>>0<=1){q[a+16>>2]=b-1|0?14:28}}function wv(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=0,i=0;h=ue-16|0;ue=h;i=q[c+4>>2];q[a+192>>2]=q[c>>2];q[a+196>>2]=i;i=q[c+12>>2];q[a+200>>2]=q[c+8>>2];q[a+204>>2]=i;e=u[b>>2];f=u[b+4>>2];g=u[b+8>>2];d=x(E(x(x(x(e*e)+x(f*f))+x(g*g))));a:{if(!!(d>x(9999999747378752e-20))){g=x(g/d);f=x(f/d);e=x(e/d);d=x(u[b+12>>2]/d);break a}b=Ft(369488,27404,44);EH(h+8|0,q[q[b>>2]+ -12>>2]+b|0);c=pL(h+8|0,370576);c=n[q[q[c>>2]+28>>2]](c,10)|0;kL(h+8|0);pI(b,c);DH(b);g=x(1);e=x(0);f=x(0);d=x(1)}u[a+208>>2]=e;u[a+220>>2]=d;u[a+216>>2]=g;u[a+212>>2]=f;ue=h+16|0}function wJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;c=SH(b,-1);e=r[a+52|0];a:{if(c){c=b;if(e){break a}c=q[a+48>>2];f=a,g=SH(c,-1)^1,o[f+52|0]=g;break a}if(e){q[d+16>>2]=q[a+48>>2];c=mJ(q[a+36>>2],q[a+40>>2],d+16|0,d+20|0,d+12|0,d+24|0,d+32|0,d+20|0)+ -1|0;b:{c:{if(c>>>0<=2){if(c-2){break c}c=q[a+48>>2];q[d+20>>2]=d+25;o[d+24|0]=c}while(1){c=q[d+20>>2];e=1;if(c>>>0<=d+24>>>0){break b}c=c+ -1|0;q[d+20>>2]=c;if((MI(o[c|0],q[a+32>>2])|0)!=-1){continue}break}}c=-1;e=0}if(!e){break a}}o[a+52|0]=1;q[a+48>>2]=b;c=b}ue=d+32|0;return c|0}function gs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=_S(132);c=q[a+28>>2];q[b+24>>2]=q[a+24>>2];q[b+28>>2]=c;c=q[a+20>>2];q[b+16>>2]=q[a+16>>2];q[b+20>>2]=c;c=q[a+12>>2];q[b+8>>2]=q[a+8>>2];q[b+12>>2]=c;c=q[a+4>>2];q[b>>2]=q[a>>2];q[b+4>>2]=c;Lr(b+32|0,a+32|0);q[b+124>>2]=0;q[b+116>>2]=0;q[b+120>>2]=0;a:{e=q[a+116>>2];c=q[a+120>>2]-e|0;b:{if(!c){break b}f=c>>2;if(f>>>0>=1073741824){break a}d=_S(c);q[b+116>>2]=d;q[b+120>>2]=d;q[b+124>>2]=(f<<2)+d;if((c|0)<1){break b}g=b,h=kV(d,e,c)+c|0,q[g+120>>2]=h}q[b+128>>2]=q[a+128>>2];return b|0}kU();F()}function jl(a,b,c){var d=0;q[a>>2]=0;d=q[b>>2];a:{if(!d){break a}n[q[q[d>>2]>>2]](d)|0;d=q[a>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0}b=q[b>>2];o[a+19|0]=0;o[a+20|0]=0;o[a+21|0]=0;o[a+22|0]=0;o[a+18|0]=1;p[a+16>>1]=256;q[a+12>>2]=0;q[a+8>>2]=c;q[a+4>>2]=0;q[a>>2]=b;o[a+23|0]=0;o[a+24|0]=0;q[a+40>>2]=4896;q[a+36>>2]=191;zp(a+92|0,x(1),x(1),x(1));q[a+192>>2]=0;q[a+196>>2]=0;q[a+180>>2]=1065353216;q[a+184>>2]=0;q[a+172>>2]=0;q[a+176>>2]=0;o[a+168|0]=0;q[a+160>>2]=1065353216;q[a+164>>2]=-1;yp(a+200|0);q[a+212>>2]=0;ko(a+44|0);return a}function kP(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=ue-16|0;ue=k;a:{if(a){a=pP(b);$O(k,a);b=q[k>>2];o[c|0]=b;o[c+1|0]=b>>>8;o[c+2|0]=b>>>16;o[c+3|0]=b>>>24;aP(k,a);qP(i,k);oT(k);nL(k,a);qP(h,k);oT(k);l=d,m=QM(a),q[l>>2]=m;l=e,m=RM(a),q[l>>2]=m;SM(k,a);bP(f,k);oT(k);mL(k,a);qP(g,k);oT(k);a=cP(a);break a}a=rP(b);$O(k,a);b=q[k>>2];o[c|0]=b;o[c+1|0]=b>>>8;o[c+2|0]=b>>>16;o[c+3|0]=b>>>24;aP(k,a);qP(i,k);oT(k);nL(k,a);qP(h,k);oT(k);l=d,m=QM(a),q[l>>2]=m;l=e,m=RM(a),q[l>>2]=m;SM(k,a);bP(f,k);oT(k);mL(k,a);qP(g,k);oT(k);a=cP(a)}q[j>>2]=a;ue=k+16|0}function Yf(a,b,c){var d=0,e=0,f=0;a:{b:{d=o[a+11|0];c:{if((d|0)<=-1){e=(q[a+8>>2]&2147483647)+ -1|0;f=q[a>>2];if(e>>>0>=c>>>0){break a}d=q[a+4>>2];break c}e=4;if(c>>>0<=4){break b}d=d&255}fh(a,e,c-e|0,d,0,d,c,b);return}f=a}d:{if(f>>>0>>0){if(!c){break d}e=f;d=c;while(1){p[e>>1]=s[b>>1];b=b+2|0;e=e+2|0;d=d+ -1|0;if(d){continue}break}break d}if(!c|f>>>0<=b>>>0){break d}d=c<<1;e=d+f|0;b=b+d|0;d=c;while(1){e=e+ -2|0;b=b+ -2|0;p[e>>1]=s[b>>1];d=d+ -1|0;if(d){continue}break}}p[(c<<1)+f>>1]=0;if(o[a+11|0]<=-1){q[a+4>>2]=c;return}o[a+11|0]=c}function mo(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0);f=zG(c);d=x(x(1)-f);e=u[b>>2];u[a>>2]=f+x(d*x(e*e));e=x(d*x(u[b>>2]*u[b+4>>2]));g=u[b+8>>2];c=AG(c);u[a+4>>2]=e+x(g*c);u[a+8>>2]=x(d*x(u[b+8>>2]*u[b>>2]))-x(c*u[b+4>>2]);u[a+12>>2]=x(d*x(u[b>>2]*u[b+4>>2]))-x(c*u[b+8>>2]);e=u[b+4>>2];u[a+16>>2]=f+x(d*x(e*e));u[a+20>>2]=x(d*x(u[b+4>>2]*u[b+8>>2]))+x(c*u[b>>2]);u[a+24>>2]=x(d*x(u[b+8>>2]*u[b>>2]))+x(c*u[b+4>>2]);u[a+28>>2]=x(d*x(u[b+4>>2]*u[b+8>>2]))-x(c*u[b>>2]);c=u[b+8>>2];q[a+44>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;u[a+32>>2]=f+x(d*x(c*c))}function Fo(a,b,c){var d=0,e=0,f=0;a:{b:{d=o[a+11|0];c:{if((d|0)<=-1){e=(q[a+8>>2]&2147483647)+ -1|0;f=q[a>>2];if(e>>>0>=c>>>0){break a}d=q[a+4>>2];break c}e=4;if(c>>>0<=4){break b}d=d&255}_o(a,e,c-e|0,d,d,c,b);return}f=a}d:{if(f>>>0>>0){if(!c){break d}e=f;d=c;while(1){p[e>>1]=s[b>>1];b=b+2|0;e=e+2|0;d=d+ -1|0;if(d){continue}break}break d}if(!c|f>>>0<=b>>>0){break d}d=c<<1;e=d+f|0;b=b+d|0;d=c;while(1){e=e+ -2|0;b=b+ -2|0;p[e>>1]=s[b>>1];d=d+ -1|0;if(d){continue}break}}p[(c<<1)+f>>1]=0;if(o[a+11|0]<=-1){q[a+4>>2]=c;return}o[a+11|0]=c}function QO(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=ue-16|0;ue=k;a:{if(a){a=_O(b);$O(k,a);b=q[k>>2];o[c|0]=b;o[c+1|0]=b>>>8;o[c+2|0]=b>>>16;o[c+3|0]=b>>>24;aP(k,a);bP(i,k);oT(k);nL(k,a);bP(h,k);oT(k);l=d,m=QM(a),o[l|0]=m;l=e,m=RM(a),o[l|0]=m;SM(k,a);bP(f,k);oT(k);mL(k,a);bP(g,k);oT(k);a=cP(a);break a}a=dP(b);$O(k,a);b=q[k>>2];o[c|0]=b;o[c+1|0]=b>>>8;o[c+2|0]=b>>>16;o[c+3|0]=b>>>24;aP(k,a);bP(i,k);oT(k);nL(k,a);bP(h,k);oT(k);l=d,m=QM(a),o[l|0]=m;l=e,m=RM(a),o[l|0]=m;SM(k,a);bP(f,k);oT(k);mL(k,a);bP(g,k);oT(k);a=cP(a)}q[j>>2]=a;ue=k+16|0}function Nk(a,b,c,d,e){q[a+16>>2]=0;q[a+20>>2]=0;q[a+12>>2]=e;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=b;q[a+176>>2]=0;q[a+180>>2]=0;q[a+312>>2]=0;q[a+316>>2]=0;o[a+308|0]=1;q[a+32>>2]=0;q[a+36>>2]=0;q[a+184>>2]=0;q[a+188>>2]=0;q[a+192>>2]=0;q[a+196>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;b=q[1821];q[a+48>>2]=q[1820];q[a+52>>2]=b;b=q[1823];q[a+56>>2]=q[1822];q[a+60>>2]=b;c=q[1825];b=a- -64|0;q[b>>2]=q[1824];q[b+4>>2]=c;b=q[1827];q[a+72>>2]=q[1826];q[a+76>>2]=b;b=q[1829];q[a+80>>2]=q[1828];q[a+84>>2]=b;b=q[1831];q[a+88>>2]=q[1830];q[a+92>>2]=b;return a}function Yh(a){var b=0,c=0;b=q[a+188>>2];q[a+188>>2]=0;if(b){_U(b)}b=q[a+184>>2];q[a+184>>2]=0;if(b){_U(b)}b=q[a+180>>2];q[a+180>>2]=0;if(b){_U(b)}b=q[a+176>>2];q[a+176>>2]=0;if(b){_U(b)}b=q[a+172>>2];q[a+172>>2]=0;if(b){_U(b)}b=q[a+168>>2];q[a+168>>2]=0;if(b){_U(b)}b=q[a+164>>2];q[a+164>>2]=0;if(b){_U(b)}b=q[a+160>>2];q[a+160>>2]=0;if(b){c=q[b+8>>2];q[b+8>>2]=0;if(c){_U(c)}c=q[b+4>>2];q[b+4>>2]=0;if(c){_U(c)}_U(b)}b=q[a+156>>2];q[a+156>>2]=0;if(b){_U(b)}b=q[a+152>>2];q[a+152>>2]=0;if(b){_U(b)}b=q[a+148>>2];q[a+148>>2]=0;if(b){_U(b)}}function hV(a){var b=0,c=x(0),d=0,h=0,i=0,j=0;a:{b:{c:{b=(k(a),e(0));h=b&2147483647;if(h>>>0>=1123811329){if(h>>>0>2139095040){return a}if((b|0)<0|b>>>0<1124073472){break c}return x(a*x(1.7014118346046923e+38))}if(h>>>0>855638016){break b}return x(a+x(1))}c=x(0);if(b>>>0>3272998911){break a}}c=x(a+x(786432));b=(k(c),e(0))+8|0;i=v[((b&15)<<3)+363136>>3];d=+x(a-x(c+x(-786432)));j=i*d;f(0,0);f(1,(b>>>4|0)+1023<<20);c=x((i+(d*.24022650718688965+.6931471824645996)*j+(d*.009618354961276054+.055505409836769104)*(d*d*j))*+g())}return c}function Fw(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0;h=ue-16|0;ue=h;if(-18-b>>>0>=c>>>0){if(o[a+11|0]<=-1){k=q[a>>2]}else{k=a}i=-17;wt(h);j=h;if(b>>>0<=2147483622){i=b<<1;c=b+c|0;c=c>>>0>>0?i:c;i=c>>>0<11?11:c+16&-16}c=n[q[h+8>>2]](j,i)|0;j=q[q[h+12>>2]+4>>2];if(j){n[j](q[h>>2])}if(f){kV(c,g,f)}d=d-e|0;g=d;if(d){kV(c+f|0,e+k|0,g)}b=b+1|0;a:{if((b|0)==11){break a}xt(h);n[q[h+8>>2]](h,k,b);b=q[q[h+12>>2]+4>>2];if(!b){break a}n[b](q[h>>2])}q[a>>2]=c;q[a+8>>2]=i|-2147483648;b=a;a=d+f|0;q[b+4>>2]=a;o[a+c|0]=0;ue=h+16|0;return}kT();F()}function KL(a,b,c,d){var e=0,f=0,g=0;e=ue-16|0;ue=e;a:{b:{c:{if((a|0)!=(b|0)){g=q[91802];q[91802]=0;d=WK(a,e+12|0,d,fM());a=we;f=q[91802];d:{if(f){if(q[e+12>>2]!=(b|0)){break d}if((f|0)==68){break b}break c}q[91802]=g;if(q[e+12>>2]==(b|0)){break c}}}q[c>>2]=4;d=0;a=0;break a}if((a|0)<-2147483648?1:(a|0)<=-2147483648?d>>>0>=0?0:1:0){break b}if(2147483647>(a|0)?1:2147483647>=(a|0)?4294967295>>0?0:1:0){break a}}q[c>>2]=4;if((a|0)>0?1:(a|0)>=0?d>>>0<1?0:1:0){d=-1;a=2147483647;break a}d=0;a=-2147483648}ue=e+16|0;we=a;return d}function Jl(a){var b=0,c=0,d=0,e=0,f=0,g=0;c=q[a+4>>2];e=q[a+8>>2];a:{if((c|0)==(e|0)){f=a+20|0;break a}f=a+20|0;b=q[a+16>>2];d=b+q[a+20>>2]|0;g=q[(d>>>8&16777212)+c>>2]+((d&1023)<<2)|0;d=(b>>>8&16777212)+c|0;b=q[d>>2]+((b&1023)<<2)|0;if((g|0)==(b|0)){break a}while(1){b=b+4|0;if((b-q[d>>2]|0)==4096){b=q[d+4>>2];d=d+4|0}if((b|0)!=(g|0)){continue}break}}q[f>>2]=0;b=e-c>>2;if(b>>>0>2){while(1){_U(q[c>>2]);c=q[a+4>>2]+4|0;q[a+4>>2]=c;b=q[a+8>>2]-c>>2;if(b>>>0>2){continue}break}}b=b+ -1|0;if(b>>>0<=1){q[a+16>>2]=b-1|0?512:1024}}function dp(a){a=a|0;var b=0,c=0,d=0;q[a>>2]=5400;c=q[a+20>>2];b=q[a+16>>2];if((c|0)!=(b|0)){while(1){c=c+ -4|0;d=q[c>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c>>2]=0}if((b|0)!=(c|0)){continue}break}}q[a+20>>2]=b;b=q[a+28>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+28>>2]=0}b=q[a+16>>2];if(b){c=q[a+20>>2];d=b;a:{if((b|0)==(c|0)){break a}while(1){c=c+ -4|0;d=q[c>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c>>2]=0}if((b|0)!=(c|0)){continue}break}d=q[a+16>>2]}q[a+20>>2]=b;_U(d)}b=q[a+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}return a|0}function tx(a){var b=0;b=q[a+44>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+44>>2]=0}b=q[a+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+40>>2]=0}b=q[a+36>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+36>>2]=0}b=q[a+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+32>>2]=0}b=q[a+28>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+28>>2]=0}b=q[a+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+24>>2]=0}b=q[a+20>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+20>>2]=0}b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}}function TL(a,b,c,d){var e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=r[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=q[91802];q[91802]=0;a=VK(a,e+12|0,d,fM());d=we;g=q[91802];g:{if(g){if(q[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}q[91802]=h;if(q[e+12>>2]==(b|0)){break d}}}}q[c>>2]=4;a=0;b=0;break a}if((d|0)==-1&4294967295>=a>>>0|4294967295>d>>>0){break b}}q[c>>2]=4;a=-1;b=-1;break a}b=a;c=(f|0)==45;a=c?0-a|0:a;b=c?0-(d+(0>>0)|0)|0:d}ue=e+16|0;we=b;return a}function qk(a,b){var c=0,d=0,e=0;c=q[a+36>>2];a:{if(!c){break a}while(1){Pk(c);c=q[c+316>>2];if(c){continue}break}c=q[a+36>>2];if(!c){break a}while(1){Pk(c);c=q[c+316>>2];if(c){continue}break}d=q[a+36>>2];if(!d){break a}while(1){c=d;b:{if(!(r[c+308|0]|q[c+184>>2])){d=q[c+316>>2];Pl(q[a+12>>2],c);if((c|0)==q[a+36>>2]){q[a+36>>2]=d}if(!e){e=0;break b}q[e+316>>2]=d;break b}d=q[c+316>>2];e=c}if(d){continue}break}}q[a+40>>2]=e;c:{if(!b){break c}c=q[a+24>>2];if(!c){break c}while(1){qk(c,1);c=q[c+8>>2];if(c){continue}break}}}function Rv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;e=q[b+12>>2];n[q[q[e>>2]+20>>2]](d+16|0,e,c);c=q[d+16>>2];a:{if(!c){q[a>>2]=0;break a}e=n[q[q[c>>2]+32>>2]](c)|0;q[d+8>>2]=0;q[d>>2]=0;q[d+4>>2]=0;g=c;if(e){Gl(d,e);f=q[d>>2]}else{f=0}n[q[q[c>>2]+20>>2]](g,f,e)|0;n[q[q[b>>2]+24>>2]](d+16|0,b,q[d>>2],e);q[a>>2]=q[d+16>>2];a=q[d>>2];b:{if(!a){break b}q[d+4>>2]=a;b=q[d+8>>2];zt(d+16|0);n[q[d+24>>2]](d+16|0,a,b-a|0);a=q[q[d+28>>2]+4>>2];if(!a){break b}n[a](q[d+16>>2])}n[q[q[c>>2]+8>>2]](c)|0}ue=d+32|0}function OE(a){a=a|0;var b=0,c=0;b=q[a+4>>2];if(q[a+164>>2]){c=a+164|0;Ea(1,c|0);q[c>>2]=0}n[q[q[b>>2]+240>>2]](b,0,0);b=q[a>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a>>2]=0}b=q[a+4>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+4>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}if(o[a+187|0]<=-1){_U(q[a+176>>2])}b=q[a+152>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+152>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}b=q[a+4>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+4>>2]=0}b=q[a>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function hk(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=G;f=q[b>>2];h=q[b+4>>2]-f|0;a:{if(!h){break a}l=(h>>3)+ -1|0;j=c+d|0;h=j+1|0;if(l>>>0>>0){break a}g=0;k=v[(c<<3)+f>>3];if(k>e){break a}i=v[(h<<3)+f>>3];if(i>>0<=1){g=1;if(d-1|v[((c<<3)+f|0)+8>>3]==e){break a}}g=0;j=j<<3;if(v[j+f>>3]!=k){i=(e-k)*hk(a,b,c,d+ -1|0,e);f=q[b>>2];m=i/(v[j+f>>3]-v[(c<<3)+f>>3]);i=v[(h<<3)+f>>3]}c=c+1|0;if(i!=v[(c<<3)+f>>3]){e=(i-e)*hk(a,b,c,d+ -1|0,e);a=q[b>>2];g=e/(v[a+(h<<3)>>3]-v[a+(c<<3)>>3])}g=m+g}return g}function eq(a,b,c){var d=0,e=0,f=0,g=0,h=0;a:{e=c-b|0;f=q[a+8>>2];d=q[a>>2];b:{c:{if(e>>>0<=f-d>>>0){f=q[a+4>>2]-d|0;g=e>>>0>f>>>0?f+b|0:c;h=g-b|0;if(h){mV(d,b,h)}a=a+4|0;if(e>>>0>f>>>0){b=c-g|0;if((b|0)<1){break b}kV(q[a>>2],g,b);b=b+q[a>>2]|0;break c}b=d+h|0;break c}if(d){q[a+4>>2]=d;_U(d);q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;f=0}if((e|0)<=-1){break a}c=f<<1;d=f>>>0<1073741823?c>>>0>>0?e:c:2147483647;if((d|0)<=-1){break a}c=_S(d);q[a>>2]=c;q[a+4>>2]=c;q[a+8>>2]=c+d;a=a+4|0;b=kV(c,b,e)+e|0}q[a>>2]=b}return}kU();F()}function mP(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;a=ue-448|0;ue=a;q[a+432>>2]=c;q[a+440>>2]=b;q[a+20>>2]=858;b=rL(a+24|0,a+32|0,a+20|0);EH(a+16|0,e);h=WH(a+16|0);o[a+15|0]=0;if(jP(a+440|0,c,d,a+16|0,q[e+4>>2],f,a+15|0,h,b,a+20|0,a+432|0)){nP(g);if(r[a+15|0]){MT(g,II(h,45))}c=II(h,48);e=q[b>>2];d=q[a+20>>2];h=d+ -4|0;while(1){if(!((c|0)!=q[e>>2]|e>>>0>=h>>>0)){e=e+4|0;continue}break}oP(g,e,d)}if($H(a+440|0,a+432|0)){q[f>>2]=q[f>>2]|2}c=q[a+440>>2];kL(a+16|0);wL(b);ue=a+448|0;return c|0}function Ok(a){var b=0,c=0,d=0,e=0;d=q[a+184>>2];if(d){while(1){b=q[a+176>>2];if(b){q[b+4>>2]=0;e=b+8|0;c=q[e>>2];q[e>>2]=0;if(c){q[c+4>>2]=0}q[a+176>>2]=c;q[a+184>>2]=d+ -1}Jk(q[a+12>>2]);if(q[b+820>>2]<=1){_j(b)}d=q[a+184>>2];if(d){continue}break}}b=q[a+188>>2];if(b){while(1){q[b+4>>2]=0;c=b+8|0;b=q[c>>2];q[c>>2]=0;if(b){continue}break}}q[a+188>>2]=0;q[a+192>>2]=0;q[a+196>>2]=0;b=q[a+176>>2];if(b){while(1){q[b+4>>2]=0;c=b+8|0;b=q[c>>2];q[c>>2]=0;if(b){continue}break}}q[a+184>>2]=0;q[a+176>>2]=0;q[a+180>>2]=0}function FU(a,b){var c=0,d=0,e=0,f=0;c=ue+ -64|0;ue=c;e=q[a>>2];d=q[e+ -4>>2];e=q[e+ -8>>2];q[c+20>>2]=0;q[c+16>>2]=362484;q[c+12>>2]=a;q[c+8>>2]=b;lV(c+24|0,0,39);a=a+e|0;a:{if(CU(d,b,0)){q[c+56>>2]=1;n[q[q[d>>2]+20>>2]](d,c+8|0,a,a,1,0);f=q[c+32>>2]==1?a:0;break a}n[q[q[d>>2]+24>>2]](d,c+8|0,a,1,0);a=q[c+44>>2];if(a>>>0>1){break a}if(a-1){f=q[c+48>>2]==1?q[c+36>>2]==1?q[c+40>>2]==1?q[c+28>>2]:0:0:0;break a}if(q[c+32>>2]!=1){if(q[c+48>>2]|q[c+36>>2]!=1|q[c+40>>2]!=1){break a}}f=q[c+24>>2]}ue=c- -64|0;return f}function PJ(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){c=f+ -64|0;b=c&31;if(32<=(c&63)>>>0){c=0;b=e>>>b|0}else{c=e>>>b|0;b=((1<>>b}d=0;e=0;break a}if(!f){break a}h=e;i=d;j=64-f|0;g=j&31;if(32<=(j&63)>>>0){h=i<>>32-g|h<>>0){g=0;b=c>>>b|0}else{g=c>>>b|0;b=((1<>>b}b=j|b;c=g|h;g=d;d=f&31;if(32<=(f&63)>>>0){h=0;d=e>>>d|0}else{h=e>>>d|0;d=((1<>>d}e=h}q[a>>2]=b;q[a+4>>2]=c;q[a+8>>2]=d;q[a+12>>2]=e} + + + +function UJ(a,b,c,d){var e=0,f=0,g=0,h=0;g=-1;e=d&2147483647;h=e;f=c;a:{if(!c&(e|0)==2147418112?a|b:(e|0)==2147418112&c>>>0>0|e>>>0>2147418112){break a}if(!(a|f|(h|1073610752|b))){return 0}f=d&1073610752;if((f|0)>0?1:(f|0)>=0?1:0){if(!c&(d|0)==1073610752?!b&a>>>0<0|b>>>0<0:(d|0)<1073610752?1:(d|0)<=1073610752?c>>>0>=0?0:1:0){break a}return(a|c)!=0|(d^1073610752|b)!=0}if(!c&(d|0)==1073610752?!b&a>>>0>0|b>>>0>0:(d|0)>1073610752?1:(d|0)>=1073610752?c>>>0<=0?0:1:0){break a}g=(a|c)!=0|(d^1073610752|b)!=0}return g}function UU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(CU(a,q[b+8>>2],e)){QU(b,c,d);return}a:{if(CU(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;b:{if(q[b+44>>2]==4){break b}p[b+52>>1]=0;a=q[a+8>>2];n[q[q[a>>2]+20>>2]](a,b,c,c,1,e);if(r[b+53|0]){q[b+44>>2]=3;if(!r[b+52|0]){break b}break a}q[b+44>>2]=4}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}a=q[a+8>>2];n[q[q[a>>2]+24>>2]](a,b,c,d,e)}}function OA(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a>>2]=338132;Mr(a+60|0);b=q[a+48>>2];a:{if(!b){break a}q[a+52>>2]=b;d=q[a+56>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a+36>>2];b:{if(!b){break b}q[a+40>>2]=b;d=q[a+44>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break b}n[b](q[c>>2])}b=q[a+24>>2];c:{if(!b){break c}q[a+28>>2]=b;d=q[a+32>>2];zt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break c}n[b](q[c>>2])}ue=c+16|0;return a|0}function rl(a,b){var c=0,d=0,e=0,f=0;c=ue-16|0;ue=c;d=q[b+4>>2];a:{if(!d){e=q[b+8>>2];if(q[e>>2]==(b|0)){break a}d=b+8|0;while(1){f=q[d>>2];d=f+8|0;e=q[f+8>>2];if((f|0)!=q[e>>2]){continue}break}break a}while(1){e=d;d=q[e>>2];if(d){continue}break}}if(q[a>>2]==(b|0)){q[a>>2]=e}q[a+8>>2]=q[a+8>>2]+ -1;gh(q[a+4>>2],b);a=q[q[b+104>>2]+4>>2];if(a){n[a](q[b+92>>2])}a=q[b+64>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+64>>2]=0}zt(c);n[q[c+8>>2]](c,b,352);a=q[q[c+12>>2]+4>>2];if(a){n[a](q[c>>2])}ue=c+16|0;return e}function aq(a){q[a+112>>2]=0;q[a+116>>2]=0;q[a+96>>2]=0;q[a+100>>2]=0;q[a+80>>2]=0;q[a+84>>2]=0;q[a+48>>2]=0;q[a+52>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=1065353216;q[a>>2]=0;q[a+4>>2]=0;q[a+64>>2]=0;q[a+68>>2]=0;q[a+120>>2]=0;q[a+124>>2]=1065353216;q[a+104>>2]=0;q[a+108>>2]=1065353216;q[a+88>>2]=0;q[a+92>>2]=1065353216;q[a+56>>2]=0;q[a+60>>2]=1065353216;q[a+40>>2]=0;q[a+44>>2]=1065353216;q[a+24>>2]=0;q[a+28>>2]=1065353216;q[a+72>>2]=0;q[a+76>>2]=1065353216}function Jv(a,b,c){var d=0,e=0,f=0,g=0;e=ue+ -64|0;ue=e;d=q[a+276>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[b>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b>>2]=0}d=b;b=q[a+276>>2];q[d>>2]=b;a:{if(b){b=q[a+284>>2];q[c>>2]=q[a+280>>2];q[c+4>>2]=b;b=q[a+300>>2];q[c+16>>2]=q[a+296>>2];q[c+20>>2]=b;b=q[a+292>>2];q[c+8>>2]=q[a+288>>2];q[c+12>>2]=b;break a}b=q[a+56>>2];d=q[a+60>>2];f=q[a+44>>2];g=q[a+40>>2];oo(e);q[c+8>>2]=g;q[c+12>>2]=f;q[c+16>>2]=b;q[c+20>>2]=d;a=r[a+314|0];q[c>>2]=0;u[c+4>>2]=a?x(0):x(1)}ue=e- -64|0}function ir(a){var b=0,c=0,d=0;c=ue-16|0;ue=c;b=q[a+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+32>>2]=0}b=q[a+28>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+28>>2]=0}b=q[a+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+24>>2]=0}b=q[a+12>>2];a:{if(!b){break a}q[a+16>>2]=b;d=q[a+20>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a>>2];b:{if(!b){break b}q[a+4>>2]=b;d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break b}n[b](q[c>>2])}ue=c+16|0;return a}function Of(a,b){var c=0,d=0,e=0,f=0;q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;a:{b:{c:{d:{if(s[b>>1]){c=b;while(1){e=d;d=d+1|0;f=s[c+2>>1];c=c+2|0;if(f){continue}break}if(d>>>0>=2147483632){break d}e:{if(d>>>0>=5){c=e+9&-8;if((c|0)<=-1){break c}e=_S(c<<1);q[a+8>>2]=c|-2147483648;q[a>>2]=e;q[a+4>>2]=d;break e}o[a+11|0]=d;if(!d){break b}e=a}c=e;f=d;while(1){p[c>>1]=s[b>>1];b=b+2|0;c=c+2|0;f=f+ -1|0;if(f){continue}break}break a}o[a+11|0]=0;e=a;break a}kT();F()}Ue(2320);F()}d=0;e=a}p[(d<<1)+e>>1]=0;return a}function MJ(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){d=b;e=f+ -64|0;b=e&31;if(32<=(e&63)>>>0){e=d<>>32-b|c<>>0){h=g<>>32-d|e<>>0){f=0;d=d>>>e|0}else{f=d>>>e|0;d=((1<>>e}d=j|d;e=f|h;f=b;b=i&31;if(32<=(i&63)>>>0){h=f<>>32-b|c<>2]=b;q[a+4>>2]=c;q[a+8>>2]=d;q[a+12>>2]=e}function kk(a){if(r[a+23040|0]){Dj(a)}if(r[a+23041|0]){Dj(a+1440|0)}if(r[a+23042|0]){Dj(a+2880|0)}if(r[a+23043|0]){Dj(a+4320|0)}if(r[a+23044|0]){Dj(a+5760|0)}if(r[a+23045|0]){Dj(a+7200|0)}if(r[a+23046|0]){Dj(a+8640|0)}if(r[a+23047|0]){Dj(a+10080|0)}if(r[a+23048|0]){Dj(a+11520|0)}if(r[a+23049|0]){Dj(a+12960|0)}if(r[a+23050|0]){Dj(a+14400|0)}if(r[a+23051|0]){Dj(a+15840|0)}if(r[a+23052|0]){Dj(a+17280|0)}if(r[a+23053|0]){Dj(a+18720|0)}if(r[a+23054|0]){Dj(a+20160|0)}if(r[a+23055|0]){Dj(a+21600|0)}}function bj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=x(0),g=0,h=0,i=0,j=0,k=0,l=0;d=ue-32|0;ue=d;e=u[b+828>>2];f=u[b+824>>2];a:{if(x(y(f))>2]+ -1>>>0>=2){a=q[d+28>>2];break b}c=q[d+28>>2];q[d+20>>2]=c;a=q[b+324>>2];q[d+12>>2]=c;q[d+16>>2]=a;q[d+8>>2]=a;Oe(d+24|0,d+12|0,d+8|0);a=q[d+24>>2];q[d+28>>2]=a}q[b+320>>2]=a;ue=d+32|0}function tG(a,b,c){var d=0,e=0;d=(c|0)!=0;a:{b:{c:{d:{if(!c|!(a&3)){break d}e=b&255;while(1){if((e|0)==r[a|0]){break c}a=a+1|0;c=c+ -1|0;d=(c|0)!=0;if(!c){break d}if(a&3){continue}break}}if(!d){break b}}if(r[a|0]==(b&255)){break a}e:{if(c>>>0>=4){d=w(b&255,16843009);while(1){e=d^q[a>>2];if((e^-1)&e+ -16843009&-2139062144){break e}a=a+4|0;c=c+ -4|0;if(c>>>0>3){continue}break}}if(!c){break b}}b=b&255;while(1){if((b|0)==r[a|0]){break a}a=a+1|0;c=c+ -1|0;if(c){continue}break}}return 0}return a}function Og(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);d=q[e>>2];if(d){n[q[q[d>>2]>>2]](d)|0;g=q[e>>2]}d=q[a+148>>2];q[f+8>>2]=0;e=f;h=d+(b<<2)|0;d=q[h>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[h>>2]}q[e+8>>2]=d;Xo(g,f+8|0);e=q[f+8>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+8>>2]=0}b=q[a+148>>2]+(b<<2)|0;a=q[c>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=q[c>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);d=q[e>>2];if(d){n[q[q[d>>2]>>2]](d)|0;g=q[e>>2]}d=q[a+208>>2];q[f+8>>2]=0;e=f;h=d+(b<<2)|0;d=q[h>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[h>>2]}q[e+8>>2]=d;So(g,f+8|0);e=q[f+8>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+8>>2]=0}b=q[a+208>>2]+(b<<2)|0;a=q[c>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=q[c>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Mg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);d=q[e>>2];if(d){n[q[q[d>>2]>>2]](d)|0;g=q[e>>2]}d=q[a+184>>2];q[f+8>>2]=0;e=f;h=d+(b<<2)|0;d=q[h>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[h>>2]}q[e+8>>2]=d;Qo(g,f+8|0);e=q[f+8>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+8>>2]=0}b=q[a+184>>2]+(b<<2)|0;a=q[c>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=q[c>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);d=q[e>>2];if(d){n[q[q[d>>2]>>2]](d)|0;g=q[e>>2]}d=q[a+136>>2];q[f+8>>2]=0;e=f;h=d+(b<<2)|0;d=q[h>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[h>>2]}q[e+8>>2]=d;Mo(g,f+8|0);e=q[f+8>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+8>>2]=0}b=q[a+136>>2]+(b<<2)|0;a=q[c>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=q[c>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;e=sp(q[n[q[q[a>>2]+28>>2]](a)>>2]);d=q[e>>2];if(d){n[q[q[d>>2]>>2]](d)|0;g=q[e>>2]}d=q[a+112>>2];q[f+8>>2]=0;e=f;h=d+(b<<2)|0;d=q[h>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[h>>2]}q[e+8>>2]=d;Oo(g,f+8|0);e=q[f+8>>2];if(e){n[q[q[e>>2]+8>>2]](e)|0;q[f+8>>2]=0}b=q[a+112>>2]+(b<<2)|0;a=q[c>>2];if(a){n[q[q[a>>2]>>2]](a)|0}a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=q[c>>2];if(g){n[q[q[g>>2]+8>>2]](g)|0}ue=f+16|0}function $r(a,b){var c=0,d=0,e=0,f=0;c=ue-48|0;ue=c;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;a:{d=q[b+4>>2];if(d){if((d|0)<=-1){break a}wt(c+32|0);d=(d+ -1>>>5|0)+1|0;f=n[q[c+40>>2]](c+32|0,d<<2)|0;e=q[q[c+44>>2]+4>>2];if(e){n[e](q[c+32>>2])}q[a+8>>2]=d;q[a+4>>2]=0;q[a>>2]=f;d=q[b>>2];q[c+28>>2]=0;q[c+24>>2]=d;b=q[b+4>>2];q[c+20>>2]=b&31;q[c+16>>2]=d+(b>>>3&536870908);b=q[c+28>>2];q[c+8>>2]=q[c+24>>2];q[c+12>>2]=b;b=q[c+20>>2];q[c>>2]=q[c+16>>2];q[c+4>>2]=b;as(a,c+8|0,c)}ue=c+48|0;return}kU();F()}function yG(a,b){var c=0,d=0,g=0,h=0,i=0,l=0;g=ue-16|0;ue=g;h=(k(a),e(0));c=h&2147483647;a:{if(c>>>0<=1305022426){i=+a;d=i*.6366197723675814+6755399441055744+ -6755399441055744;v[b>>3]=i+d*-1.5707963109016418+d*-1.5893254773528196e-8;if(y(d)<2147483648){c=~~d;break a}c=-2147483648;break a}if(c>>>0>=2139095040){v[b>>3]=x(a-a);c=0;break a}l=c;c=(c>>>23|0)+ -150|0;v[g+8>>3]=(f(0,l-(c<<23)|0),j());c=xG(g+8|0,g,c);d=v[g>>3];if((h|0)<=-1){v[b>>3]=-d;c=0-c|0;break a}v[b>>3]=d}ue=g+16|0;return c}function oM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=ue-32|0;ue=g;q[g+24>>2]=b;a:{if(!(q[d+4>>2]&1)){q[g>>2]=-1;b=n[q[q[a>>2]+16>>2]](a,b,c,d,e,g)|0;q[g+24>>2]=b;a=q[g>>2];if(a>>>0<=1){if(a-1){o[f|0]=0;break a}o[f|0]=1;break a}o[f|0]=1;q[e>>2]=4;break a}EH(g,d);b=WH(g);kL(g);EH(g,d);a=pM(g);kL(g);mL(g,a);nL(g|12,a);d=g+24|0;h=f,i=(qM(g+24|0,c,g,d,b,e,1)|0)==(g|0),o[h|0]=i;b=q[g+24>>2];while(1){d=oT(d+ -12|0);if((g|0)!=(d|0)){continue}break}}ue=g+32|0;return b|0}function jL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=ue-32|0;ue=g;q[g+24>>2]=b;a:{if(!(q[d+4>>2]&1)){q[g>>2]=-1;b=n[q[q[a>>2]+16>>2]](a,b,c,d,e,g)|0;q[g+24>>2]=b;a=q[g>>2];if(a>>>0<=1){if(a-1){o[f|0]=0;break a}o[f|0]=1;break a}o[f|0]=1;q[e>>2]=4;break a}EH(g,d);b=FH(g);kL(g);EH(g,d);a=lL(g);kL(g);mL(g,a);nL(g|12,a);d=g+24|0;h=f,i=(oL(g+24|0,c,g,d,b,e,1)|0)==(g|0),o[h|0]=i;b=q[g+24>>2];while(1){d=oT(d+ -12|0);if((g|0)!=(d|0)){continue}break}}ue=g+32|0;return b|0}function hr(a){a=a|0;var b=0,c=0,d=0,e=0;c=ue-16|0;ue=c;q[a>>2]=6180;b=q[a+24>>2];a:{if(!b){break a}d=q[a+28>>2];e=b;b:{if((b|0)==(d|0)){break b}while(1){d=ir(d+ -36|0);if((b|0)!=(d|0)){continue}break}e=q[a+24>>2]}d=e;q[a+28>>2]=b;b=q[a+32>>2];xt(c);n[q[c+8>>2]](c,d,b-d|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}q[a>>2]=1352;c:{if(o[a+19|0]>-1){break c}b=q[a+16>>2];d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,d,b<<1);b=q[q[c+12>>2]+4>>2];if(!b){break c}n[b](q[c>>2])}ue=c+16|0;return a|0}function GL(a,b,c,d){var e=0,f=0,g=0;e=ue-16|0;ue=e;a:{b:{c:{if((a|0)!=(b|0)){g=q[91802];q[91802]=0;a=WK(a,e+12|0,d,fM());d=we;f=q[91802];d:{if(f){if(q[e+12>>2]!=(b|0)){break d}if((f|0)==68){break b}break c}q[91802]=g;if(q[e+12>>2]==(b|0)){break c}}}q[c>>2]=4;b=0;break a}if(((d|0)<-1?1:(d|0)<=-1?a>>>0>=2147483648?0:1:0)|((d|0)>0?1:(d|0)>=0?a>>>0<=2147483647?0:1:0)){break b}b=a;break a}q[c>>2]=4;b=2147483647;if((d|0)>0?1:(d|0)>=0?a>>>0<1?0:1:0){break a}b=-2147483648}ue=e+16|0;return b}function UE(a){var b=0,c=0,d=0,e=0,f=0,g=0;c=ue-160|0;ue=c;b=yp(c+144|0);d=a+88|0;VE(d,yp(c+128|0),b);zp(c+112|0,x(0),x(0),x(0));q[c+120>>2]=q[c+152>>2];q[c+124>>2]=0;b=q[c+148>>2];q[c+112>>2]=q[c+144>>2];q[c+116>>2]=b;b=q[a>>2];n[q[q[b>>2]+184>>2]](b,0,c+112|0);b=q[a+4>>2];n[q[q[b>>2]+72>>2]](b,a+24|0);b=q[a+4>>2];n[q[q[b>>2]+80>>2]](b,d);b=q[a+4>>2];n[q[q[b>>2]+32>>2]](b)|0;b=q[a>>2];f=b,g=fl(c+8|0),e=q[q[b>>2]+364>>2],n[e](f|0,g|0);a=q[a+4>>2];n[q[q[a>>2]+36>>2]](a)|0;ue=c+160|0}function yy(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=ue-16|0;ue=c;d=q[a>>2];a:{if((q[a+8>>2]-d|0)/304>>>0>=b>>>0){break a}d=(q[a+4>>2]-d|0)/304|0;yt(c);f=n[q[c+8>>2]](c,w(b,304),16)|0;e=q[q[c+12>>2]+4>>2];if(e){n[e](q[c>>2])}g=f+w(d,304)|0;d=q[a>>2];e=q[a+4>>2]-d|0;h=g+w((e|0)/-304|0,304)|0;b=f+w(b,304)|0;if((e|0)>=1){kV(h,d,e);d=q[a>>2]}q[a+4>>2]=g;q[a>>2]=h;f=q[a+8>>2];q[a+8>>2]=b;if(!d){break a}zt(c);n[q[c+8>>2]](c,d,f-d|0);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function kl(a,b){var c=0,d=0,e=0,f=0;d=ue-32|0;ue=d;q[d+8>>2]=b;c=q[a+4>>2];a:{b:{if(c){e=a+4|0;f=q[b>>2];while(1){b=q[c+32>>2];c:{if((f|0)<(b|0)){b=q[c>>2];if(b){break c}break b}if((b|0)>=(f|0)){break a}e=c+4|0;b=q[c+4>>2];if(!b){break a}c=e}e=c;c=b;continue}}c=a+4|0}e=c}b=q[e>>2];if(!b){ml(d+16|0,a,d+8|0);b=q[d+16>>2];q[b+8>>2]=c;q[b>>2]=0;q[b+4>>2]=0;q[e>>2]=b;c=q[q[a>>2]>>2];if(c){q[a>>2]=c;b=q[e>>2]}ih(q[a+4>>2],b);q[a+8>>2]=q[a+8>>2]+1;b=q[d+16>>2]}ue=d+32|0;return b- -64|0}function Wz(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=ue-16|0;ue=c;d=q[a>>2];a:{if((q[a+8>>2]-d|0)/240>>>0>=b>>>0){break a}d=(q[a+4>>2]-d|0)/240|0;yt(c);f=n[q[c+8>>2]](c,w(b,240),16)|0;e=q[q[c+12>>2]+4>>2];if(e){n[e](q[c>>2])}g=f+w(d,240)|0;d=q[a>>2];e=q[a+4>>2]-d|0;h=g+w((e|0)/-240|0,240)|0;b=f+w(b,240)|0;if((e|0)>=1){kV(h,d,e);d=q[a>>2]}q[a+4>>2]=g;q[a>>2]=h;f=q[a+8>>2];q[a+8>>2]=b;if(!d){break a}zt(c);n[q[c+8>>2]](c,d,f-d|0);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function Au(a){q[a+12>>2]=0;q[a+16>>2]=0;q[a+4>>2]=1;q[a+8>>2]=2;q[a+80>>2]=0;q[a+84>>2]=0;q[a+44>>2]=1;q[a+48>>2]=1;q[a+20>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;q[a+68>>2]=1;q[a+72>>2]=1;q[a+60>>2]=1;q[a+64>>2]=1;q[a+52>>2]=1;q[a+56>>2]=1;q[a+88>>2]=0;q[a+92>>2]=0;q[a+96>>2]=0;q[a+100>>2]=0;q[a+104>>2]=0;q[a+108>>2]=0;q[a+112>>2]=0;q[a+116>>2]=0;q[a+120>>2]=0;q[a+124>>2]=0;q[a+128>>2]=0;q[a+132>>2]=0;q[a+136>>2]=0;q[a+140>>2]=0;o[a|0]=r[a|0]&252}function fG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;q[d+16>>2]=b;e=q[a+48>>2];q[d+20>>2]=c-((e|0)!=0);f=q[a+44>>2];q[d+28>>2]=e;q[d+24>>2]=f;a:{b:{c:{if(uG(eb(q[a+60>>2],d+16|0,2,d+12|0)|0)){q[d+12>>2]=-1;c=-1;break c}e=q[d+12>>2];if((e|0)>0){break b}c=e}q[a>>2]=q[a>>2]|c&48^16;break a}g=q[d+20>>2];if(e>>>0<=g>>>0){c=e;break a}f=q[a+44>>2];q[a+4>>2]=f;q[a+8>>2]=f+(e-g|0);if(!q[a+48>>2]){break a}q[a+4>>2]=f+1;o[(b+c|0)+ -1|0]=r[f|0]}ue=d+32|0;return c|0}function wi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=0;c=ue-32|0;ue=c;hi(c+28|0,b+552|0,a+3732|0,u[b+828>>2],u[b+824>>2]);q[b+548>>2]=q[c+28>>2];e=Sh(a,b);if(e!=x(1)){d=b;e=x(e*x(r[b+551|0]));a:{if(e=x(0)){f=~~e>>>0;break a}f=0}o[d+551|0]=f}f=b;b:{if(q[a+2472>>2]+ -1>>>0<=1){a=q[b+548>>2];q[c+24>>2]=a;d=q[b+324>>2];q[c+20>>2]=d;q[c+16>>2]=a;q[c+12>>2]=d;Oe(c+28|0,c+16|0,c+12|0);a=q[c+28>>2];break b}a=q[b+548>>2]}q[f+544>>2]=a;q[b+320>>2]=a;ue=c+32|0}function ki(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=0;c=ue-32|0;ue=c;hi(c+28|0,b+552|0,a+3524|0,u[b+828>>2],u[b+824>>2]);q[b+548>>2]=q[c+28>>2];e=Sh(a,b);if(e!=x(1)){d=b;e=x(e*x(r[b+551|0]));a:{if(e=x(0)){f=~~e>>>0;break a}f=0}o[d+551|0]=f}f=b;b:{if(q[a+2472>>2]+ -1>>>0<=1){a=q[b+548>>2];q[c+24>>2]=a;d=q[b+324>>2];q[c+20>>2]=d;q[c+16>>2]=a;q[c+12>>2]=d;Oe(c+28|0,c+16|0,c+12|0);a=q[c+28>>2];break b}a=q[b+548>>2]}q[f+544>>2]=a;q[b+320>>2]=a;ue=c+32|0}function Ri(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=0;c=ue-32|0;ue=c;hi(c+28|0,b+552|0,a+3488|0,u[b+828>>2],u[b+824>>2]);q[b+548>>2]=q[c+28>>2];e=Sh(a,b);if(e!=x(1)){d=b;e=x(e*x(r[b+551|0]));a:{if(e=x(0)){f=~~e>>>0;break a}f=0}o[d+551|0]=f}f=b;b:{if(q[a+2472>>2]+ -1>>>0<=1){a=q[b+548>>2];q[c+24>>2]=a;d=q[b+324>>2];q[c+20>>2]=d;q[c+16>>2]=a;q[c+12>>2]=d;Oe(c+28|0,c+16|0,c+12|0);a=q[c+28>>2];break b}a=q[b+548>>2]}q[f+544>>2]=a;q[b+320>>2]=a;ue=c+32|0}function RC(a,b){var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;c=q[b>>2]+ -16|0;if(c>>>0<=2){e=q[b+12>>2];q[d+12>>2]=0;c=c<<2;f=q[c+342296>>2];a:{if((e|0)<=1){ta(32873,d+12|0);Fa(1,a+44|0);Ca(3553,q[a+44>>2]);Ga(3553,0,f|0,q[b+4>>2],q[b+8>>2],0,q[c+342284>>2],5126,0);Ca(3553,q[d+12>>2]);break a}ta(36007,d+12|0)}c=q[b>>2];q[a+20>>2]=2;q[a+16>>2]=c;c=q[b+4>>2];e=q[b+8>>2];q[a+32>>2]=1;q[a+36>>2]=1;q[a+24>>2]=c;q[a+28>>2]=e;b=q[b+12>>2];q[a+12>>2]=0;q[a+40>>2]=b;e=1}ue=d+16|0;return e}function tp(a){a=a|0;var b=0;q[a>>2]=5464;up(a+156|0,q[a+160>>2]);b=q[a+152>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+152>>2]=0}vp(a+128|0);b=q[a+124>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+124>>2]=0}vp(a+100|0);b=q[a+96>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+96>>2]=0}vp(a+72|0);b=q[a+68>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+68>>2]=0}vp(a+44|0);b=q[a+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+40>>2]=0}vp(a+16|0);b=q[a+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}return a|0}function sC(a,b){var c=0,d=0,e=0,f=0,g=0;a:{e=a+12|0;f=q[e>>2];if(!f){break a}d=e;c=f;while(1){g=t[c+16>>2]>>0;d=g?d:c;c=q[(g<<2)+c>>2];if(c){continue}break}if((d|0)==(e|0)|t[d+16>>2]>b>>>0){break a}c=q[d+4>>2];b:{if(!c){e=q[d+8>>2];if(q[e>>2]==(d|0)){break b}b=d+8|0;while(1){c=q[b>>2];b=c+8|0;e=q[c+8>>2];if((c|0)!=q[e>>2]){continue}break}break b}while(1){e=c;c=q[c>>2];if(c){continue}break}}if(q[a+8>>2]==(d|0)){q[a+8>>2]=e}a=a+16|0;q[a>>2]=q[a>>2]+ -1;gh(f,d);_U(d)}}function Cx(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=q[a+8>>2];d=q[a+4>>2];if(c-d>>2>>>0>=b>>>0){c=a;a=b<<2;j=c,k=lV(d,0,a)+a|0,q[j+4>>2]=k;return}f=q[a>>2];h=d-f|0;g=h>>2;e=g+b|0;a:{if(e>>>0<1073741824){d=0;g=g<<2;c=c-f|0;i=c>>1;c=c>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;if(c){if(c>>>0>=1073741824){break a}d=_S(c<<2)}lV(d+g|0,0,b<<2);b=(e<<2)+d|0;e=(c<<2)+d|0;if((h|0)>=1){kV(d,f,h)}q[a+8>>2]=e;q[a+4>>2]=b;q[a>>2]=d;if(f){_U(f)}return}kU();F()}Ue(190925);F()}function Mw(a,b,c,d){q[a+16>>2]=0;o[a+12|0]=d;q[a>>2]=28516;q[a+4>>2]=1;q[a+8>>2]=0;d=q[c>>2];a:{if(!d){break a}n[q[q[d>>2]>>2]](d)|0;d=q[a+16>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[a+16>>2]=0}d=q[c>>2];q[a+24>>2]=1;q[a+16>>2]=d;q[a+20>>2]=1768;if(!q[c>>2]){c=_S(8);q[c>>2]=0;q[c+4>>2]=1;q[c>>2]=1768;if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+16>>2]=0}q[a+16>>2]=c}c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}q[a+8>>2]=q[b>>2]}function al(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=q[a+8>>2];d=q[a+4>>2];if(c-d>>2>>>0>=b>>>0){c=a;a=b<<2;j=c,k=lV(d,0,a)+a|0,q[j+4>>2]=k;return}f=q[a>>2];h=d-f|0;g=h>>2;e=g+b|0;a:{if(e>>>0<1073741824){d=0;g=g<<2;c=c-f|0;i=c>>1;c=c>>2>>>0<536870911?i>>>0>>0?e:i:1073741823;if(c){if(c>>>0>=1073741824){break a}d=_S(c<<2)}lV(d+g|0,0,b<<2);b=(e<<2)+d|0;e=(c<<2)+d|0;if((h|0)>=1){kV(d,f,h)}q[a+8>>2]=e;q[a+4>>2]=b;q[a>>2]=d;if(f){_U(f)}return}kU();F()}Ue(4264);F()}function mC(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;f=q[a>>2];e=q[f+44>>2];if(q[e+24>>2]!=q[e+20>>2]){while(1){f=q[q[f+60>>2]+(h<<2)>>2];a:{if((f|0)<0){break a}e=q[e+20>>2]+w(h,28)|0;g=q[e>>2];if(g>>>0>1){break a}g=q[(g-1|0?b:c)>>2];if(!g){break a}i=q[e+16>>2];if(i>>>0>1){break a}if(i-1){ma(f|0,q[e+20>>2],q[g+12>>2]+q[e+24>>2]|0);break a}la(f|0,q[e+20>>2],d|0,q[g+12>>2]+q[e+24>>2]|0)}h=h+1|0;f=q[a>>2];e=q[f+44>>2];if(h>>>0<(q[e+24>>2]-q[e+20>>2]|0)/28>>>0){continue}break}}}function yv(a){var b=0,c=0;b=ue+ -64|0;ue=b;qn(b,a- -64|0,a);c=q[b+60>>2];q[a+184>>2]=q[b+56>>2];q[a+188>>2]=c;c=q[b+52>>2];q[a+176>>2]=q[b+48>>2];q[a+180>>2]=c;c=q[b+44>>2];q[a+168>>2]=q[b+40>>2];q[a+172>>2]=c;c=q[b+36>>2];q[a+160>>2]=q[b+32>>2];q[a+164>>2]=c;c=q[b+28>>2];q[a+152>>2]=q[b+24>>2];q[a+156>>2]=c;c=q[b+20>>2];q[a+144>>2]=q[b+16>>2];q[a+148>>2]=c;c=q[b+12>>2];q[a+136>>2]=q[b+8>>2];q[a+140>>2]=c;c=q[b+4>>2];q[a+128>>2]=q[b>>2];q[a+132>>2]=c;ue=b- -64|0}function xD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=ue-16|0;ue=f;e=_S(44);q[e+20>>2]=0;q[e+24>>2]=0;q[e+16>>2]=b;q[e+4>>2]=340480;q[e>>2]=340456;q[e+8>>2]=1;q[e+12>>2]=0;q[e+28>>2]=0;q[e+32>>2]=0;q[e+36>>2]=0;q[e+40>>2]=0;if(b){n[q[q[b>>2]>>2]](b)|0}q[f+8>>2]=0;b=q[d>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[d>>2]}q[f+8>>2]=b;c=gD(e,c,f+8|0);if(b){n[q[q[b>>2]+8>>2]](b)|0;q[f+8>>2]=0}b=e+4|0;q[a>>2]=0;a:{if(c){q[a>>2]=b;break a}n[q[q[b>>2]+8>>2]](b)|0}ue=f+16|0}function NL(a,b,c,d){var e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=r[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=q[91802];q[91802]=0;a=VK(a,e+12|0,d,fM());d=we;g=q[91802];g:{if(g){if(q[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}q[91802]=h;if(q[e+12>>2]==(b|0)){break d}}}}q[c>>2]=4;a=0;break a}if(!d&a>>>0<=65535|d>>>0<0){break b}}q[c>>2]=4;a=65535;break a}a=(f|0)==45?0-a|0:a}ue=e+16|0;return a&65535}function Se(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;a:{d=q[a+8>>2];c=q[a+4>>2];b:{if(d-c>>>0>=b>>>0){while(1){o[c|0]=0;c=q[a+4>>2]+1|0;q[a+4>>2]=c;b=b+ -1|0;if(b){continue}break b}}e=q[a>>2];f=c-e|0;c=f+b|0;if((c|0)<=-1){break a}d=d-e|0;h=d<<1;d=d>>>0<1073741823?h>>>0>>0?c:h:2147483647;if(d){g=_S(d)}c=g+f|0;lV(c,0,b);d=d+g|0;while(1){c=c+1|0;b=b+ -1|0;if(b){continue}break}if((f|0)>=1){kV(g,e,f)}q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=g;if(!e){break b}_U(e)}return}kU();F()}function RD(a){var b=0,c=0,d=0,e=0,f=0;c=ue-16|0;ue=c;b=q[a+4>>2];e=q[a>>2];if((b|0)!=(e|0)){while(1){a:{if(o[b+ -5|0]>-1){break a}d=q[b+ -8>>2];f=q[b+ -16>>2];xt(c);n[q[c+8>>2]](c,f,d&2147483647);d=q[q[c+12>>2]+4>>2];if(!d){break a}n[d](q[c>>2])}d=b+ -32|0;b:{if(o[b+ -17|0]>-1){break b}f=q[b+ -20>>2];b=q[b+ -28>>2];xt(c);n[q[c+8>>2]](c,b,f&2147483647);b=q[q[c+12>>2]+4>>2];if(!b){break b}n[b](q[c>>2])}b=d;if((e|0)!=(b|0)){continue}break}}q[a+4>>2]=e;ue=c+16|0}function Ov(a,b,c){var d=0;q[a>>2]=27584;q[a+4>>2]=1;q[a+8>>2]=0;d=q[b>>2];a:{if(!d){break a}n[q[q[d>>2]>>2]](d)|0;d=q[a+8>>2];if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[a+8>>2]=0}b=q[b>>2];q[a+12>>2]=0;q[a+8>>2]=b;b=q[c>>2];b:{if(!b){break b}n[q[q[b>>2]>>2]](b)|0;b=q[a+12>>2];if(!b){break b}n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}b=q[c>>2];q[a+12>>2]=b;if(!q[c>>2]){c=_S(8);q[c>>2]=0;q[c+4>>2]=1;q[c>>2]=1768;if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}q[a+12>>2]=c}}function Ch(a){var b=0,c=0,d=0,e=0;Dh(a+756|0);Dh(a+704|0);Dh(a+652|0);Dh(a+600|0);Dh(a+548|0);Dh(a+496|0);Eh(a+408|0);Eh(a+360|0);b=q[a+60>>2];if(b){d=q[a- -64>>2];c=b;a:{if((b|0)==(d|0)){break a}while(1){c=d;d=c+ -8|0;c=q[c+ -4>>2];b:{if(!c){break b}e=q[c+4>>2];q[c+4>>2]=e+ -1;if(e){break b}n[q[q[c>>2]+8>>2]](c);WS(c)}if((b|0)!=(d|0)){continue}break}c=q[a+60>>2]}q[a+64>>2]=b;_U(c)}b=q[a+48>>2];if(b){q[a+52>>2]=b;_U(b)}b=q[a+36>>2];if(b){q[a+40>>2]=b;_U(b)}}function QL(a,b,c,d){var e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=r[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=q[91802];q[91802]=0;a=VK(a,e+12|0,d,fM());d=we;g=q[91802];g:{if(g){if(q[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}q[91802]=h;if(q[e+12>>2]==(b|0)){break d}}}}q[c>>2]=4;a=0;break a}if(!d&a>>>0<=4294967295|d>>>0<0){break b}}q[c>>2]=4;a=-1;break a}a=(f|0)==45?0-a|0:a}ue=e+16|0;return a}function Tw(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=ue-16|0;ue=b;d=q[a+8>>2];g=q[a+4>>2];if((d|0)!=(g|0)){while(1){e=d+ -28|0;q[a+8>>2]=e;h=g;c=e;f=c;a:{if(o[c+15|0]>-1){break a}d=q[d+ -16>>2];c=q[e+4>>2];xt(b);n[q[b+8>>2]](b,c,d&2147483647);c=q[q[b+12>>2]+4>>2];if(c){n[c](q[b>>2])}f=q[a+8>>2]}d=f;if((h|0)!=(d|0)){continue}break}}c=q[a>>2];b:{if(!c){break b}a=q[a+12>>2];xt(b);n[q[b+8>>2]](b,c,a-c|0);a=q[q[b+12>>2]+4>>2];if(!a){break b}n[a](q[b>>2])}ue=b+16|0}function Xw(a,b,c,d){var e=0;e=ue-32|0;ue=e;q[e+28>>2]=0;q[e+16>>2]=a;q[e+20>>2]=e+28;q[e+8>>2]=a;q[e+12>>2]=e+28;Yw(e+8|0,28834,1);Yw(e+8|0,c?28852:28870,d);Zw(e+16|0,28883,d);if(b){Zw(e+16|0,28893,d);Zw(e+16|0,28908,d);Zw(e+16|0,28930,d);Zw(e+16|0,28945,d);Zw(e+16|0,28965,d);Zw(e+16|0,28992,1);Zw(e+16|0,29017,1);Zw(e+16|0,29042,d);Zw(e+16|0,29074,d)}Zw(e+16|0,29101,d);Zw(e+16|0,29119,1);Zw(e+16|0,29141,1);Zw(e+16|0,29159,1);Zw(e+16|0,29179,1);ue=e+32|0}function Wm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}a=kl(a,e+12|0);d=q[c+8>>2];f=q[c+4>>2];b=q[c>>2];c=q[c+12>>2];g=q[c>>2];if(g){b=n[g](b)|0}q[a+36>>2]=d;d=q[a+28>>2];q[a+28>>2]=b;q[a+32>>2]=f;a=a+40|0;b=q[a>>2];q[a>>2]=c;a=q[b+4>>2];if(!a){break a}n[a](d)}ue=e+16|0}function Uw(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=ue-16|0;ue=b;d=q[a+8>>2];g=q[a+4>>2];if((d|0)!=(g|0)){while(1){e=d+ -12|0;q[a+8>>2]=e;h=g;c=e;f=c;a:{if(o[c+11|0]>-1){break a}d=q[d+ -4>>2];c=q[e>>2];xt(b);n[q[b+8>>2]](b,c,d&2147483647);c=q[q[b+12>>2]+4>>2];if(c){n[c](q[b>>2])}f=q[a+8>>2]}d=f;if((h|0)!=(d|0)){continue}break}}c=q[a>>2];b:{if(!c){break b}a=q[a+12>>2];xt(b);n[q[b+8>>2]](b,c,a-c|0);a=q[q[b+12>>2]+4>>2];if(!a){break b}n[a](q[b>>2])}ue=b+16|0}function LD(a,b){var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;c=q[a+8>>2];if((c|0)!=(b|0)){while(1){e=c+ -32|0;q[a+8>>2]=e;a:{if(o[e+27|0]>-1){break a}f=q[c+ -8>>2];e=q[e+16>>2];xt(d);n[q[d+8>>2]](d,e,f&2147483647);e=q[q[d+12>>2]+4>>2];if(!e){break a}n[e](q[d>>2])}b:{if(o[c+ -17|0]>-1){break b}e=q[c+ -20>>2];c=q[c+ -28>>2];xt(d);n[q[d+8>>2]](d,c,e&2147483647);c=q[q[d+12>>2]+4>>2];if(!c){break b}n[c](q[d>>2])}c=q[a+8>>2];if((c|0)!=(b|0)){continue}break}}ue=d+16|0}function Oe(a,b,c){var d=x(0),e=0,f=0;f=a;d=x(x(x(r[b|0])*x(r[c|0]))/x(255));a:{if(d=x(0)){e=~~d>>>0;break a}e=0}o[f|0]=e;f=a;d=x(x(x(r[b+1|0])*x(r[c+1|0]))/x(255));b:{if(d=x(0)){e=~~d>>>0;break b}e=0}o[f+1|0]=e;f=a;d=x(x(x(r[b+2|0])*x(r[c+2|0]))/x(255));c:{if(d=x(0)){e=~~d>>>0;break c}e=0}o[f+2|0]=e;d=x(x(x(r[b+3|0])*x(r[c+3|0]))/x(255));if(d=x(0)){o[a+3|0]=~~d>>>0;return}o[a+3|0]=0}function Es(a,b,c){var d=0;c=q[b>>2];d=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);q[a>>2]=d;c=q[b>>2]+4|0;q[b>>2]=c;if((d|0)==1){q[a+8>>2]=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+12>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+16>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);c=q[b>>2];q[b>>2]=c+4;q[a+20>>2]=r[c+4|0]|r[c+5|0]<<8|(r[c+6|0]<<16|r[c+7|0]<<24);q[b>>2]=q[b>>2]+4}}function VD(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a+4>>2]=341948;q[a>>2]=341924;b=q[a+80>>2];q[a+80>>2]=0;if(b){_U(oC(b))}b=q[a+68>>2];a:{if(!b){break a}q[a+72>>2]=b;d=q[a+76>>2];xt(c);n[q[c+8>>2]](c,b,d-b|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a- -64>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+64>>2]=0}b=q[a+60>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+60>>2]=0}b=q[a+56>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+56>>2]=0}ue=c+16|0;return a|0}function Kw(a){var b=0,c=0,d=0,e=0,f=0;b=ue-16|0;ue=b;f=q[a>>2];a:{if(!f){break a}d=f;c=q[a+4>>2];e=d;b:{if((d|0)==(c|0)){break b}while(1){d=c+ -12|0;c:{if(o[c+ -1|0]>-1){break c}c=q[c+ -4>>2];e=q[d>>2];xt(b);n[q[b+8>>2]](b,e,c&2147483647);c=q[q[b+12>>2]+4>>2];if(!c){break c}n[c](q[b>>2])}c=d;if((f|0)!=(c|0)){continue}break}e=q[a>>2]}d=e;q[a+4>>2]=f;a=q[a+8>>2];xt(b);n[q[b+8>>2]](b,d,a-d|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}ue=b+16|0}function dz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;c=ue-16|0;ue=c;q[a>>2]=337092;b=q[a+32>>2];a:{if(!b){break a}e=b;d=q[a+36>>2];if((b|0)!=(d|0)){while(1){e=d+ -948|0;g=d+ -24|0;f=q[g>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[g>>2]=0}tx(d+ -148|0);d=e;if((b|0)!=(d|0)){continue}break}e=q[a+32>>2]}q[a+36>>2]=b;b=q[a+40>>2];zt(c);n[q[c+8>>2]](c,e,b-e|0);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}ue=c+16|0;return a|0}function _g(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ue-32|0;ue=e;if((n[q[q[b>>2]+20>>2]](b)|0)>=1){while(1){d=n[q[q[b>>2]+24>>2]](b,g)|0;n[q[q[d>>2]+40>>2]](e,d,c);d=q[a>>2];f=q[d>>2];h=q[e+24>>2];q[d>>2]=(f|0)>(h|0)?f:h;h=d;d=q[d+4>>2];f=q[e+28>>2];q[h+4>>2]=(d|0)>(f|0)?d:f;d=q[a+4>>2];j=d,k=n[q[q[b>>2]+24>>2]](b,g)|0,l=e,i=q[d+8>>2],n[i](j|0,k|0,l|0);g=g+1|0;if((g|0)<(n[q[q[b>>2]+20>>2]](b)|0)){continue}break}}ue=e+32|0}function Zo(a,b){var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;c=q[b+4>>2];a:{if(!c){e=q[b+8>>2];if(q[e>>2]==(b|0)){break a}c=b+8|0;while(1){f=q[c>>2];c=f+8|0;e=q[f+8>>2];if((f|0)!=q[e>>2]){continue}break}break a}while(1){e=c;c=q[c>>2];if(c){continue}break}}if(q[a>>2]==(b|0)){q[a>>2]=e}q[a+8>>2]=q[a+8>>2]+ -1;gh(q[a+4>>2],b);a=q[b+584>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+584>>2]=0}xt(d);n[q[d+8>>2]](d,b,592);a=q[q[d+12>>2]+4>>2];if(a){n[a](q[d>>2])}ue=d+16|0}function Jw(a){var b=0,c=0,d=0,e=0,f=0;b=ue-16|0;ue=b;e=q[a>>2];a:{if(!e){break a}c=q[a+4>>2];d=e;b:{if((e|0)==(c|0)){break b}while(1){d=c+ -28|0;c:{if(o[c+ -13|0]>-1){break c}f=q[c+ -16>>2];c=q[c+ -24>>2];xt(b);n[q[b+8>>2]](b,c,f&2147483647);c=q[q[b+12>>2]+4>>2];if(!c){break c}n[c](q[b>>2])}c=d;if((e|0)!=(c|0)){continue}break}d=q[a>>2]}q[a+4>>2]=e;a=q[a+8>>2];xt(b);n[q[b+8>>2]](b,d,a-d|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}ue=b+16|0}function Fv(a,b){var c=0,d=0,e=0;c=ue-16|0;ue=c;n[q[q[b>>2]+204>>2]](c+8|0,b,0);e=q[c+8>>2];q[c+8>>2]=0;d=q[a+264>>2];a:{if(!d){q[a+264>>2]=e;break a}n[q[q[d>>2]+8>>2]](d)|0;d=q[c+8>>2];q[a+264>>2]=e;if(!d){break a}n[q[q[d>>2]+8>>2]](d)|0;q[c+8>>2]=0}n[q[q[b>>2]+204>>2]](c,b,1);d=q[c>>2];q[c>>2]=0;b=q[a+268>>2];b:{if(!b){q[a+268>>2]=d;break b}n[q[q[b>>2]+8>>2]](b)|0;b=q[c>>2];q[a+268>>2]=d;if(!b){break b}n[q[q[b>>2]+8>>2]](b)|0;q[c>>2]=0}ue=c+16|0}function rN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-32|0;ue=a;p[a+28>>1]=r[355376]|r[355377]<<8;q[a+24>>2]=r[355372]|r[355373]<<8|(r[355374]<<16|r[355375]<<24);$M(a+24|1,355364,1,q[c+4>>2]);g=q[c+4>>2];f=a+ -16|0;ue=f;h=fM();q[a>>2]=e;e=g>>>9&1;g=aN(f,e+13|0,h,a+24|0,a)+f|0;h=bN(f,g,c);e=f-((e<<3|96)+11&112)|0;ue=e;EH(a+8|0,c);sN(f,h,g,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=tN(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function cD(a){a=a|0;var b=0;q[a+4>>2]=340480;q[a>>2]=340456;if(q[a+12>>2]){b=a+12|0;mw(b);q[b>>2]=0}b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}b=q[a+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+40>>2]=0}b=q[a+32>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+32>>2]=0}b=q[a+28>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+28>>2]=0}b=q[a+24>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+24>>2]=0}b=q[a+20>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+20>>2]=0}return a|0}function lG(a,b){var c=0,d=0;a:{d=b&255;if(d){if(a&3){while(1){c=r[a|0];if(!c|(c|0)==(b&255)){break a}a=a+1|0;if(a&3){continue}break}}c=q[a>>2];b:{if((c^-1)&c+ -16843009&-2139062144){break b}d=w(d,16843009);while(1){c=c^d;if((c^-1)&c+ -16843009&-2139062144){break b}c=q[a+4>>2];a=a+4|0;if(!(c+ -16843009&(c^-1)&-2139062144)){continue}break}}while(1){c=a;d=r[c|0];if(d){a=c+1|0;if((d|0)!=(b&255)){continue}}break}return c}return sV(a)+a|0}return a}function Bk(a){q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=4160;o[a+208|0]=0;q[a+76>>2]=0;q[a+32>>2]=5300;q[a+60>>2]=0;q[a+64>>2]=0;q[a+12>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+36>>2]=0;q[a+28>>2]=1065353216;o[a+65|0]=0;o[a+66|0]=0;o[a+67|0]=0;o[a+68|0]=0;o[a+69|0]=0;o[a+70|0]=0;o[a+71|0]=0;o[a+72|0]=0;Ne(a+209|0,255,255,255,255);q[a+480>>2]=0;q[a+472>>2]=0;q[a+476>>2]=0;q[a+40>>2]=0;q[a+44>>2]=0;q[a+48>>2]=0;q[a+52>>2]=0;q[a+56>>2]=0;return a}function rK(a,b){a:{if(a){if(b>>>0<=127){break a}b:{if(!q[q[91624]>>2]){if((b&-128)==57216){break a}break b}if(b>>>0<=2047){o[a+1|0]=b&63|128;o[a|0]=b>>>6|192;return 2}if(!((b&-8192)!=57344?b>>>0>=55296:0)){o[a+2|0]=b&63|128;o[a|0]=b>>>12|224;o[a+1|0]=b>>>6&63|128;return 3}if(b+ -65536>>>0<=1048575){o[a+3|0]=b&63|128;o[a|0]=b>>>18|240;o[a+2|0]=b>>>6&63|128;o[a+1|0]=b>>>12&63|128;return 4}}q[91802]=25;a=-1}else{a=1}return a}o[a|0]=b;return 1}function NJ(a,b){var c=0,d=0,f=0,g=0,h=0,i=0,j=0;f=ue-16|0;ue=f;d=(k(b),e(0));h=d&-2147483648;c=d&2147483647;a:{if(c+ -8388608>>>0<=2130706431){d=c;c=c>>>7|0;d=d<<25;c=c+1065353216|0;g=d;c=d>>>0<0?c+1|0:c;break a}if(c>>>0>=2139095040){g=d<<25;c=d>>>7|2147418112;break a}if(!c){c=0;break a}d=c;c=z(c);MJ(f,d,0,0,0,c+81|0);i=q[f>>2];j=q[f+4>>2];g=q[f+8>>2];c=q[f+12>>2]^65536|16265-c<<16}q[a>>2]=i;q[a+4>>2]=j;q[a+8>>2]=g;q[a+12>>2]=c|h;ue=f+16|0}function xr(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=ue-16|0;ue=c;d=q[a>>2];a:{if(q[a+8>>2]-d>>2>>>0>=b>>>0){break a}d=q[a+4>>2]-d>>2;wt(c);f=n[q[c+8>>2]](c,b<<2)|0;e=q[q[c+12>>2]+4>>2];if(e){n[e](q[c>>2])}g=f+(d<<2)|0;d=q[a>>2];e=q[a+4>>2]-d|0;h=g-e|0;b=f+(b<<2)|0;if((e|0)>=1){kV(h,d,e);d=q[a>>2]}q[a+4>>2]=g;q[a>>2]=h;f=q[a+8>>2];q[a+8>>2]=b;if(!d){break a}xt(c);n[q[c+8>>2]](c,d,f-d|0);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function JT(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=ue-16|0;ue=i;if((b^-1)+1073741807>>>0>=c>>>0){j=kM(a);a:{if(536870887>b>>>0){q[i+8>>2]=b<<1;q[i+12>>2]=b+c;c=PS(q[zI(i+12|0,i+8|0)>>2]);break a}c=1073741806}k=c+1|0;c=QS(k);if(e){vH(c,j,e)}if(g){vH(c+(e<<2)|0,h,g)}d=d-f|0;h=d-e|0;if(h){e=e<<2;vH((e+c|0)+(g<<2)|0,(e+j|0)+(f<<2)|0,h)}if((b|0)!=1){_U(j)}AS(a,c);BS(a,k);b=a;a=d+g|0;uo(b,a);q[i+4>>2]=0;KI(c+(a<<2)|0,i+4|0);ue=i+16|0;return}kT();F()}function Pz(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0);d=ue-304|0;ue=d;h=u[c>>2];f=u[b>>2];a:{b:{if(!(f>u[a>>2])){if(!(h>f)){break a}e=kV(d,b,304);b=kV(b,c,304);kV(c,e,304);g=1;if(!(u[b>>2]>u[a>>2])){break a}c=kV(e,a,304);kV(a,b,304);kV(b,c,304);break b}g=1;if(!!(h>f)){b=kV(d,a,304);kV(a,c,304);kV(c,b,304);break a}e=kV(d,a,304);kV(a,b,304);a=kV(b,e,304);if(!(u[c>>2]>u[a>>2])){break a}b=kV(e,a,304);kV(a,c,304);kV(c,b,304)}g=2}ue=d+304|0;return g}function MA(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0);d=ue-272|0;ue=d;h=u[c>>2];f=u[b>>2];a:{b:{if(!(f>u[a>>2])){if(!(h>f)){break a}e=kV(d,b,272);b=kV(b,c,272);kV(c,e,272);g=1;if(!(u[b>>2]>u[a>>2])){break a}c=kV(e,a,272);kV(a,b,272);kV(b,c,272);break b}g=1;if(!!(h>f)){b=kV(d,a,272);kV(a,c,272);kV(c,b,272);break a}e=kV(d,a,272);kV(a,b,272);a=kV(b,e,272);if(!(u[c>>2]>u[a>>2])){break a}b=kV(e,a,272);kV(a,c,272);kV(c,b,272)}g=2}ue=d+272|0;return g}function Kz(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0);d=ue-304|0;ue=d;h=u[c>>2];f=u[b>>2];a:{b:{if(!(f>2])){if(!(h>2]>2])){break a}c=kV(e,a,304);kV(a,b,304);kV(b,c,304);break b}g=1;if(!!(h>2]>2])){break a}b=kV(e,a,304);kV(a,c,304);kV(c,b,304)}g=2}ue=d+304|0;return g}function HA(a,b,c){var d=0,e=0,f=x(0),g=0,h=x(0);d=ue-272|0;ue=d;h=u[c>>2];f=u[b>>2];a:{b:{if(!(f>2])){if(!(h>2]>2])){break a}c=kV(e,a,272);kV(a,b,272);kV(b,c,272);break b}g=1;if(!!(h>2]>2])){break a}b=kV(e,a,272);kV(a,c,272);kV(c,b,272)}g=2}ue=d+272|0;return g}function OB(a){var b=0,c=0,d=0;b=q[a+12>>2];if(!q[q[(q[b+24>>2]?b+24|0:b+20|0)>>2]+16>>2]){b=q[a+12>>2];n[q[q[b>>2]+4>>2]](b)}c=_S(8);b=nC(c);d=q[a+8>>2];q[a+8>>2]=c;if(d){_U(oC(d));b=q[a+8>>2]}iw(q[b>>2]);b=q[a+16>>2];if(b){if(!q[b+40>>2]){b=q[a+16>>2];n[q[q[b>>2]+4>>2]](b)}Yv(34962,q[q[a+16>>2]+40>>2])}b=q[a+20>>2];if(b){if(!q[b+32>>2]){b=q[a+20>>2];n[q[q[b>>2]+4>>2]](b)}Yv(34963,q[q[a+20>>2]+32>>2])}if(q[a+16>>2]){wB(q[a+12>>2])}iw(0)}function uf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-256|0;ue=e;b=e;while(1){d=s[c>>1];if(d){a:{if(!(d&65408)){o[b|0]=d&127;d=1;break a}if(!(d&63488)){o[b+1|0]=d&63|128;o[b|0]=d>>>6&31|192;d=2;break a}o[b+2|0]=d&63|128;o[b|0]=d>>>12|224;o[b+1|0]=d>>>6&63|128;d=3}b=d+b|0;c=c+2|0;f=d+f|0;if(f>>>0<253){continue}}break}o[b|0]=0;c=XF(e,1591);b:{if(!c){q[a>>2]=0;break b}b=_S(12);q[b+8>>2]=c;q[b>>2]=1548;q[b+4>>2]=1;q[a>>2]=b}ue=e+256|0}function tf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-256|0;ue=e;b=e;while(1){d=s[c>>1];if(d){a:{if(!(d&65408)){o[b|0]=d&127;d=1;break a}if(!(d&63488)){o[b+1|0]=d&63|128;o[b|0]=d>>>6&31|192;d=2;break a}o[b+2|0]=d&63|128;o[b|0]=d>>>12|224;o[b+1|0]=d>>>6&63|128;d=3}b=d+b|0;c=c+2|0;f=d+f|0;if(f>>>0<253){continue}}break}o[b|0]=0;c=XF(e,1588);b:{if(!c){q[a>>2]=0;break b}b=_S(12);q[b+8>>2]=c;q[b>>2]=1504;q[b+4>>2]=1;q[a>>2]=b}ue=e+256|0}function sF(a,b,c,d,e,f){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);f=x(f);var g=0,h=0,i=0,j=0,k=0,l=0;h=ue-16|0;ue=h;if(f=x(0)){g=~~f>>>0}else{g=0}k=g;if(e=x(0)){i=~~e>>>0}else{i=0}if(d=x(0)){g=~~d>>>0}else{g=0}l=h+12|0;if(c=x(0)){j=~~c>>>0}else{j=0}g=Ne(l,j,g,i,k);i=q[a>>2];a=q[q[i>>2]+224>>2];q[h+8>>2]=r[g|0]|r[g+1|0]<<8|(r[g+2|0]<<16|r[g+3|0]<<24);n[a](i,b,h+8|0);ue=h+16|0}function Hh(a,b,c,d){var e=0,f=0;e=ue-16|0;ue=e;f=q[a+2516>>2];a:{if(!f){break a}f=q[f>>2];if((f|0)<0){break a}a=q[a+4>>2];n[q[q[a>>2]+104>>2]](e,a,f);a=q[e>>2];if(!a){break a}if(q[a+28>>2]>=1){fk(e,b,0);f=q[e+12>>2];q[c+8>>2]=q[e+8>>2];q[c+12>>2]=f;f=q[e+4>>2];q[c>>2]=q[e>>2];q[c+4>>2]=f}if(q[a+32>>2]>=1){fk(e,b,1);b=q[e+12>>2];q[d+8>>2]=q[e+8>>2];q[d+12>>2]=b;b=q[e+4>>2];q[d>>2]=q[e>>2];q[d+4>>2]=b}n[q[q[a>>2]+8>>2]](a)|0}ue=e+16|0}function oN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=ue-48|0;ue=f;q[f+40>>2]=b;a:{if(!(q[c+4>>2]&1)){c=n[q[q[a>>2]+24>>2]](a,b,c,d,e)|0;break a}EH(f+24|0,c);a=pM(f+24|0);kL(f+24|0);b:{if(e){mL(f+24|0,a);break b}nL(f+24|0,a)}g=f,h=VM(f+24|0),q[g+16>>2]=h;while(1){g=f,h=pN(f+24|0),q[g+8>>2]=h;if(XM(f+16|0,f+8|0)){qI(f+40|0,q[q[f+16>>2]>>2]);qN(f+16|0);continue}else{c=q[f+40>>2];oT(f+24|0)}break}}ue=f+48|0;return c|0}function Av(a,b){var c=0;c=ue+ -64|0;ue=c;ht(c,b);b=q[c+60>>2];q[a+56>>2]=q[c+56>>2];q[a+60>>2]=b;b=q[c+52>>2];q[a+48>>2]=q[c+48>>2];q[a+52>>2]=b;b=q[c+44>>2];q[a+40>>2]=q[c+40>>2];q[a+44>>2]=b;b=q[c+36>>2];q[a+32>>2]=q[c+32>>2];q[a+36>>2]=b;b=q[c+28>>2];q[a+24>>2]=q[c+24>>2];q[a+28>>2]=b;b=q[c+20>>2];q[a+16>>2]=q[c+16>>2];q[a+20>>2]=b;b=q[c+12>>2];q[a+8>>2]=q[c+8>>2];q[a+12>>2]=b;b=q[c+4>>2];q[a>>2]=q[c>>2];q[a+4>>2]=b;ue=c- -64|0}function _M(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-32|0;ue=a;p[a+28>>1]=r[355376]|r[355377]<<8;q[a+24>>2]=r[355372]|r[355373]<<8|(r[355374]<<16|r[355375]<<24);$M(a+24|1,355364,1,q[c+4>>2]);g=q[c+4>>2];f=a+ -16|0;ue=f;h=fM();q[a>>2]=e;g=aN(f,(g>>>9&1)+13|0,h,a+24|0,a)+f|0;h=bN(f,g,c);e=f+ -32|0;ue=e;EH(a+8|0,c);cN(f,h,g,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=Ut(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function UM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=ue-48|0;ue=f;q[f+40>>2]=b;a:{if(!(q[c+4>>2]&1)){c=n[q[q[a>>2]+24>>2]](a,b,c,d,e)|0;break a}EH(f+24|0,c);a=lL(f+24|0);kL(f+24|0);b:{if(e){mL(f+24|0,a);break b}nL(f+24|0,a)}g=f,h=VM(f+24|0),q[g+16>>2]=h;while(1){g=f,h=WM(f+24|0),q[g+8>>2]=h;if(XM(f+16|0,f+8|0)){oI(f+40|0,o[q[f+16>>2]]);YM(f+16|0);continue}else{c=q[f+40>>2];oT(f+24|0)}break}}ue=f+48|0;return c|0}function fs(a,b,c){var d=0,e=0,f=x(0),g=0,h=0;e=ue-32|0;ue=e;g=q[b+116>>2];d=q[b+120>>2]-g|0;h=d>>2;a:{if(d){c=x(x(B(x(A(c,x(1))),x(0)))*u[b+128>>2]);d=0;while(1){f=u[(d<<2)+g>>2];if(!!(c<=f)){b=b+32|0;c=x(x(c/f)+x(d>>>0));ns(e+16|0,b,c);break a}c=x(c-f);d=d+1|0;if(d>>>0>>0){continue}break}}b=b+32|0;c=x(h>>>0);ns(e+16|0,b,c)}d=q[e+16>>2];ns(e,b,c);b=q[e+4>>2];q[a+8>>2]=0;q[a+12>>2]=1065353216;q[a+4>>2]=b;q[a>>2]=d;ue=e+32|0}function xN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-32|0;ue=a;p[a+28>>1]=r[355376]|r[355377]<<8;q[a+24>>2]=r[355372]|r[355373]<<8|(r[355374]<<16|r[355375]<<24);$M(a+24|1,355364,0,q[c+4>>2]);g=q[c+4>>2];f=a+ -16|0;ue=f;h=fM();q[a>>2]=e;g=aN(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=bN(f,g,c);e=f+ -96|0;ue=e;EH(a+8|0,c);sN(f,h,g,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=tN(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function fN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-32|0;ue=a;p[a+28>>1]=r[355376]|r[355377]<<8;q[a+24>>2]=r[355372]|r[355373]<<8|(r[355374]<<16|r[355375]<<24);$M(a+24|1,355364,0,q[c+4>>2]);g=q[c+4>>2];f=a+ -16|0;ue=f;h=fM();q[a>>2]=e;g=aN(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=bN(f,g,c);e=f+ -32|0;ue=e;EH(a+8|0,c);cN(f,h,g,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=Ut(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function CN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-208|0;ue=a;p[a+204>>1]=r[355382]|r[355383]<<8;q[a+200>>2]=r[355378]|r[355379]<<8|(r[355380]<<16|r[355381]<<24);f=fM();q[a>>2]=e;h=aN(a+176|0,20,f,a+200|0,a);e=h+(a+176|0)|0;f=bN(a+176|0,e,c);EH(a+16|0,c);g=WH(a+16|0);kL(a+16|0);OM(g,a+176|0,e,a+16|0);g=b;b=(a+16|0)+(h<<2)|0;b=tN(g,a+16|0,(e|0)==(f|0)?b:((f-a<<2)+a|0)+ -688|0,b,c,d);ue=a+208|0;return b|0}function Re(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ue-32|0;ue=d;e=q[b+8>>2];n[q[q[e>>2]+20>>2]](d+16|0,e,c);c=q[d+16>>2];a:{if(!c){q[a>>2]=0;break a}e=n[q[q[c>>2]+32>>2]](c)|0;q[d+24>>2]=0;q[d+16>>2]=0;q[d+20>>2]=0;g=c;if(e){Se(d+16|0,e);f=q[d+16>>2]}else{f=0}n[q[q[c>>2]+20>>2]](g,f,e)|0;n[q[q[b>>2]+24>>2]](d+8|0,b,q[d+16>>2],e);q[a>>2]=q[d+8>>2];a=q[d+16>>2];if(a){q[d+20>>2]=a;_U(a)}n[q[q[c>>2]+8>>2]](c)|0}ue=d+32|0}function vv(a){var b=0,c=0;b=q[a+336>>2];a:{if(!b){break a}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(c){break a}n[q[q[b>>2]+8>>2]](b);WS(b)}b=q[a+316>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+316>>2]=0}b=q[a+276>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+276>>2]=0}b=q[a+272>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+272>>2]=0}b=q[a+268>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+268>>2]=0}b=q[a+264>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+264>>2]=0}return a}function Vn(a,b){var c=0,d=0,e=0,f=0;e=q[a+464>>2];f=a+468|0;if((e|0)!=(f|0)){while(1){c=e;if(!(q[c+64>>2]!=q[b>>2]|q[c+68>>2])){Cn(a,c- -64|0,u[q[c+72>>2]+8>>2])}d=q[c+4>>2];a:{if(!d){e=q[c+8>>2];if((c|0)==q[e>>2]){break a}c=c+8|0;while(1){d=q[c>>2];c=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break a}while(1){e=d;d=q[d>>2];if(d){continue}break}}if((e|0)!=(f|0)){continue}break}}n[q[q[a>>2]+336>>2]](a);o[a+564|0]=0}function AD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=_S(72);q[f+16>>2]=0;q[f+20>>2]=0;q[f+12>>2]=b;q[f+4>>2]=340396;q[f>>2]=340372;q[f+8>>2]=1;q[f+24>>2]=0;q[f+28>>2]=0;q[f+32>>2]=0;q[f+36>>2]=0;q[f+40>>2]=0;q[f+44>>2]=0;q[f+48>>2]=0;q[f+52>>2]=0;q[f+56>>2]=0;q[f+60>>2]=0;g=f- -64|0;q[g>>2]=0;q[g+4>>2]=0;if(b){n[q[q[b>>2]>>2]](b)|0}b=f+4|0;c=_C(f,c,d,e);q[a>>2]=0;if(c){q[a>>2]=b;return}n[q[q[b>>2]+8>>2]](b)|0}function uH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ue-16|0;ue=e;while(1){a:{if((f|0)>=(c|0)){break a}d=q[a+12>>2];g=q[a+16>>2];b:{if(d>>>0>>0){q[e+12>>2]=2147483647;q[e+8>>2]=g-d>>2;q[e+4>>2]=c-f;d=q[jH(e+12|0,jH(e+8|0,e+4|0))>>2];vH(b,q[a+12>>2],d);q[a+12>>2]=q[a+12>>2]+(d<<2);b=(d<<2)+b|0;break b}d=n[q[q[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}q[b>>2]=d;d=1;b=b+4|0}f=d+f|0;continue}break}ue=e+16|0;return f|0}function iH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;while(1){a:{if((f|0)>=(c|0)){break a}d=q[a+12>>2];g=q[a+16>>2];b:{if(d>>>0>>0){q[e+12>>2]=2147483647;q[e+8>>2]=g-d;q[e+4>>2]=c-f;d=q[jH(e+12|0,jH(e+8|0,e+4|0))>>2];kH(b,q[a+12>>2],d);q[a+12>>2]=q[a+12>>2]+d;break b}d=n[q[q[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}h=b,i=lH(d),o[h|0]=i;d=1}b=b+d|0;f=d+f|0;continue}break}ue=e+16|0;return f|0}function nN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=ue-96|0;ue=a;p[a+92>>1]=r[355382]|r[355383]<<8;q[a+88>>2]=r[355378]|r[355379]<<8|(r[355380]<<16|r[355381]<<24);f=fM();q[a>>2]=e;h=aN(a- -64|0,20,f,a+88|0,a);e=h+(a- -64|0)|0;f=bN(a- -64|0,e,c);EH(a+16|0,c);g=FH(a+16|0);kL(a+16|0);eM(g,a- -64|0,e,a+16|0);g=b;b=h+(a+16|0)|0;b=Ut(g,a+16|0,(e|0)==(f|0)?b:((f-a|0)+a|0)+ -48|0,b,c,d);ue=a+96|0;return b|0}function qz(a,b,c,d){var e=0;d=ue-368|0;ue=d;a:{if(!q[b+24>>2]){e=q[a+8>>2];n[q[q[e>>2]+76>>2]](d,e);yz(a,c,b,q[q[q[a+8>>2]+72>>2]+36>>2]+ -948|0,ht(d+304|0,d));break a}if((q[a+24>>2]-q[a+20>>2]|0)/304>>>0>=t[a+40>>2]){break a}Ao(d+160|0);Ao(d+176|0);Ao(d+192|0);Ao(d+208|0);Ao(d+224|0);Ao(d+240|0);kV(d+16|0,c,284);b=q[a+24>>2];if((b|0)!=q[a+28>>2]){kV(b,d,304);q[a+24>>2]=q[a+24>>2]+304;break a}zz(a+20|0,d)}ue=d+368|0}function wk(a,b){var c=0,d=0,e=0;c=q[a+36>>2];a:{if(!c){break a}while(1){Uk(c);c=q[c+316>>2];if(c){continue}break}d=q[a+36>>2];if(!d){break a}while(1){c=d;b:{if(!(r[c+308|0]|q[c+184>>2])){d=q[c+316>>2];Pl(q[a+12>>2],c);if((c|0)==q[a+36>>2]){q[a+36>>2]=d}if(!e){e=0;break b}q[e+316>>2]=d;break b}d=q[c+316>>2];e=c}if(d){continue}break}}q[a+40>>2]=e;c=q[a+24>>2];if(c){while(1){wk(c,b);c=q[c+8>>2];if(c){continue}break}}}function qK(){var a=0,b=0,c=0,d=0,e=0,f=0;b=ue-32|0;ue=b;a:{b:{if(pK(0)){while(1){if(2147483647>>>a&1){e=a<<2,f=oK(a,355605),q[e>>2]=f}a=a+1|0;if((a|0)!=6){continue}break}break b}while(1){d=oK(a,1<>2]=d;c=((d|0)!=0)+c|0;a=a+1|0;if((a|0)!=6){continue}break}if(c>>>0>1){break b}a=350592;if(c-1){break a}if(q[b+8>>2]!=350564){break b}a=350616;break a}a=0}ue=b+32|0;return a}function et(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0);f=u[b>>2];d=u[b+4>>2];g=u[b+8>>2];q[a+44>>2]=0;q[a+28>>2]=0;q[a+12>>2]=0;h=zG(c);e=x(x(1)-h);u[a+40>>2]=h+x(e*x(g*g));c=AG(c);i=x(f*c);j=x(e*x(d*g));u[a+36>>2]=i+j;k=x(e*x(f*g));l=x(c*d);u[a+32>>2]=k-l;u[a+24>>2]=j-i;u[a+20>>2]=h+x(e*x(d*d));d=x(e*x(f*d));c=x(c*g);u[a+16>>2]=d+c;u[a+8>>2]=l+k;u[a+4>>2]=d-c;u[a>>2]=h+x(e*x(f*f))}function Vs(a,b){var c=x(0),d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=x(0),k=x(0),l=x(0),m=x(0);e=u[b+36>>2];f=u[b+20>>2];g=u[b+40>>2];h=u[b+24>>2];i=u[b+44>>2];j=u[b+28>>2];k=u[b+4>>2];l=u[b+8>>2];m=u[b+12>>2];c=u[b>>2];d=x(c*c);c=u[b+16>>2];d=x(d+x(c*c));c=u[b+32>>2];u[a>>2]=E(x(d+x(c*c)));u[a+12>>2]=E(x(x(x(m*m)+x(j*j))+x(i*i)));u[a+8>>2]=E(x(x(x(l*l)+x(h*h))+x(g*g)));u[a+4>>2]=E(x(x(x(k*k)+x(f*f))+x(e*e)))}function cs(a,b){var c=0,d=0,e=x(0),f=0;c=2;a:{if((b|0)==1){break a}c=b;if(!(b+ -1&b)){break a}c=QG(b)}d=q[a+4>>2];if(c>>>0>d>>>0){ds(a,c);return}b:{if(c>>>0>=d>>>0){break b}f=d>>>0<3;e=x(D(x(x(t[a+12>>2])/u[a+16>>2])));c:{if(e=x(0)){b=~~e>>>0;break c}b=0}d:{e:{if(f){break e}if(yW(d)>>>0>1){break e}b=b>>>0<2?b:1<<32-z(b+ -1|0);break d}b=QG(b)}b=c>>>0>>0?b:c;if(b>>>0>=d>>>0){break b}ds(a,b)}}function $o(a,b){var c=0,d=0,e=x(0),f=0;c=2;a:{if((b|0)==1){break a}c=b;if(!(b+ -1&b)){break a}c=QG(b)}d=q[a+4>>2];if(c>>>0>d>>>0){ap(a,c);return}b:{if(c>>>0>=d>>>0){break b}f=d>>>0<3;e=x(D(x(x(t[a+12>>2])/u[a+16>>2])));c:{if(e=x(0)){b=~~e>>>0;break c}b=0}d:{e:{if(f){break e}if(yW(d)>>>0>1){break e}b=b>>>0<2?b:1<<32-z(b+ -1|0);break d}b=QG(b)}b=c>>>0>>0?b:c;if(b>>>0>=d>>>0){break b}ap(a,b)}}function iC(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;d=q[b>>2];if(q[d+16>>2]!=q[d+12>>2]){while(1){f=q[d+12>>2]+(h<<5)|0;d=f+4|0;g=e;i=q[q[c>>2]+16>>2];if(o[f+15|0]<=-1){d=q[d>>2]}f=g;g=fw(i,d);q[f+12>>2]=g;d=q[a+4>>2];a:{if(d>>>0>2]){q[d>>2]=g;q[a+4>>2]=d+4;break a}yr(a,e+12|0)}h=h+1|0;d=q[b>>2];if(h>>>0>2]-q[d+12>>2]>>5>>>0){continue}break}}ue=e+16|0}function bi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=ue-80|0;ue=f;n[q[q[c>>2]+68>>2]](f+8|0,c);g=q[f+8>>2];if(g){ci(f+8|0,a,c,d);h=kV(a+3436|0,f+8|0,66);d=q[f+76>>2];q[f+76>>2]=0;c=q[a+3504>>2];a:{if(!c){q[a+3504>>2]=d;break a}n[q[q[c>>2]+8>>2]](c)|0;c=q[f+76>>2];q[a+3504>>2]=d;if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[f+76>>2]=0}n[q[q[g>>2]+20>>2]](g,h,b,e);n[q[q[g>>2]+8>>2]](g)|0}ue=f+80|0}function An(a,b,c){a=a|0;b=b|0;c=x(c);var d=0,e=0,f=0,g=0;a:{f=a+468|0;d=q[f>>2];if(!d){break a}e=f;while(1){g=q[d+32>>2]<(b|0);e=g?e:d;d=q[(g<<2)+d>>2];if(d){continue}break}if((e|0)==(f|0)|q[e+32>>2]>(b|0)){break a}if(!!(u[q[e+72>>2]+8>>2]>c)){b=e- -64|0;Bn(a,b);Cn(a,b,c);return}c=x(c-u[q[e+72>>2]+8>>2]);if(!(c>x(0))){break a}d=0;while(1){n[q[q[a>>2]+356>>2]](a,b,x(1));d=d+1|0;if(c>x(d|0)){continue}break}}}function Xx(a,b,c){var d=0,e=0;e=ue-16|0;ue=e;d=_S(76);a:{if(!r[hD(d,c)+72|0]){n[q[q[d>>2]+8>>2]](d)|0;q[a>>2]=0;break a}n[q[q[d>>2]>>2]](d)|0;q[e+12>>2]=b;n[q[q[d>>2]>>2]](d)|0;q[e+8>>2]=d;Yx(e,e+12|0,e+8|0);b=q[e>>2];b:{if(Zx(b)){c=b;break b}c=0;if(!b){break b}n[q[q[b>>2]+8>>2]](b)|0}b=q[e+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[e+8>>2]=0}q[a>>2]=c;n[q[q[d>>2]+8>>2]](d)|0;n[q[q[d>>2]+8>>2]](d)|0}ue=e+16|0}function Eh(a){var b=0,c=0;a:{c=q[a>>2];if((c|0)==23){c=q[a+4>>2];if(!c){break a}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+4>>2]=0;c=q[a>>2]}if((c|0)!=53){break a}c=q[a+4>>2];if(!c){break a}b=q[c+156>>2];if(b){q[c+160>>2]=b;_U(b)}b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+4>>2]=0}}function qH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=ue-16|0;ue=e;while(1){a:{if((f|0)>=(c|0)){break a}d=q[a+24>>2];g=q[a+28>>2];if(d>>>0>=g>>>0){if(((i=a,j=oH(o[b|0]),h=q[q[a>>2]+52>>2],n[h](i|0,j|0)|0)|0)==-1){break a}f=f+1|0;b=b+1|0}else{q[e+12>>2]=g-d;q[e+8>>2]=c-f;d=q[jH(e+12|0,e+8|0)>>2];kH(q[a+24>>2],b,d);q[a+24>>2]=d+q[a+24>>2];f=f+d|0;b=b+d|0}continue}break}ue=e+16|0;return f|0}function YK(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ue-160|0;ue=e;lV(e+16|0,0,144);q[e+92>>2]=-1;q[e+60>>2]=b;q[e+24>>2]=-1;q[e+20>>2]=b;GJ(e+16|0,0,0);$J(e,e+16|0,d,1);d=q[e+8>>2];g=q[e+12>>2];h=q[e>>2];i=q[e+4>>2];if(c){j=c;f=b;b=q[e+20>>2]-q[e+24>>2]|0;k=b;c=b+q[e+136>>2]|0;b=q[e+140>>2]+(b>>31)|0;b=c>>>0>>0?b+1|0:b;q[j>>2]=!(b|c)?f:f+c|0}q[a>>2]=h;q[a+4>>2]=i;q[a+8>>2]=d;q[a+12>>2]=g;ue=e+160|0}function pB(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=ue-32|0;ue=b;d=q[a+24>>2]?a+24|0:a+20|0;if(q[a+28>>2]){iC(b,a+28|0,d);c=q[a+56>>2];if(c){q[a+60>>2]=c;e=q[a- -64>>2];xt(b+16|0);n[q[b+24>>2]](b+16|0,c,e-c|0);c=q[q[b+28>>2]+4>>2];if(c){n[c](q[b+16>>2])}q[a+64>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0}q[a+56>>2]=q[b>>2];q[a+60>>2]=q[b+4>>2];q[a- -64>>2]=q[b+8>>2]}f=a,g=gw(q[q[d>>2]+16>>2],339596),q[f+72>>2]=g;ue=b+32|0}function Nz(a,b,c,d,e){var f=0,g=0,h=0;g=ue-304|0;ue=g;f=Mz(a,b,c,d);a:{if(!(u[e>>2]>u[d>>2])){break a}h=kV(g,d,304);d=kV(d,e,304);kV(e,h,304);if(!(u[d>>2]>u[c>>2])){f=f+1|0;break a}e=kV(h,c,304);c=kV(c,d,304);kV(d,e,304);if(!(u[c>>2]>u[b>>2])){f=f+2|0;break a}d=kV(e,b,304);b=kV(b,c,304);kV(c,d,304);if(!(u[b>>2]>u[a>>2])){f=f+3|0;break a}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);f=f+4|0}ue=g+304|0;return f}function KA(a,b,c,d,e){var f=0,g=0,h=0;g=ue-272|0;ue=g;f=JA(a,b,c,d);a:{if(!(u[e>>2]>u[d>>2])){break a}h=kV(g,d,272);d=kV(d,e,272);kV(e,h,272);if(!(u[d>>2]>u[c>>2])){f=f+1|0;break a}e=kV(h,c,272);c=kV(c,d,272);kV(d,e,272);if(!(u[c>>2]>u[b>>2])){f=f+2|0;break a}d=kV(e,b,272);b=kV(b,c,272);kV(c,d,272);if(!(u[b>>2]>u[a>>2])){f=f+3|0;break a}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);f=f+4|0}ue=g+272|0;return f}function Iz(a,b,c,d,e){var f=0,g=0,h=0;g=ue-304|0;ue=g;f=Hz(a,b,c,d);a:{if(!(u[e>>2]>2])){break a}h=kV(g,d,304);d=kV(d,e,304);kV(e,h,304);if(!(u[d>>2]>2])){f=f+1|0;break a}e=kV(h,c,304);c=kV(c,d,304);kV(d,e,304);if(!(u[c>>2]>2])){f=f+2|0;break a}d=kV(e,b,304);b=kV(b,c,304);kV(c,d,304);if(!(u[b>>2]>2])){f=f+3|0;break a}c=kV(d,a,304);kV(a,b,304);kV(b,c,304);f=f+4|0}ue=g+304|0;return f}function FA(a,b,c,d,e){var f=0,g=0,h=0;g=ue-272|0;ue=g;f=EA(a,b,c,d);a:{if(!(u[e>>2]>2])){break a}h=kV(g,d,272);d=kV(d,e,272);kV(e,h,272);if(!(u[d>>2]>2])){f=f+1|0;break a}e=kV(h,c,272);c=kV(c,d,272);kV(d,e,272);if(!(u[c>>2]>2])){f=f+2|0;break a}d=kV(e,b,272);b=kV(b,c,272);kV(c,d,272);if(!(u[b>>2]>2])){f=f+3|0;break a}c=kV(d,a,272);kV(a,b,272);kV(b,c,272);f=f+4|0}ue=g+272|0;return f}function EE(a){var b=0,c=0,d=0,e=0;b=q[a+12>>2];d=a+8|0;if((b|0)!=(d|0)){while(1){c=q[b+8>>2];if(c){_U(c)}b=q[b+4>>2];if((d|0)!=(b|0)){continue}break}}Xa(q[a+4>>2],q[a>>2]);c=q[a>>2];if(c){_U(c)}a:{if(!q[a+16>>2]){break a}b=q[a+12>>2];e=q[b>>2];c=q[a+8>>2];q[e+4>>2]=q[c+4>>2];q[q[c+4>>2]>>2]=e;q[a+16>>2]=0;if((b|0)==(d|0)){break a}while(1){c=q[b+4>>2];_U(b);b=c;if((d|0)!=(b|0)){continue}break}}return a}function sT(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=ue-16|0;ue=i;if((b^-1)+ -17>>>0>=c>>>0){j=kM(a);a:{if(2147483623>b>>>0){q[i+8>>2]=b<<1;q[i+12>>2]=b+c;c=yS(q[zI(i+12|0,i+8|0)>>2]);break a}c=-18}k=c+1|0;c=zS(k);if(e){kH(c,j,e)}if(g){kH(c+e|0,h,g)}d=d-f|0;h=d-e|0;if(h){kH((c+e|0)+g|0,(e+j|0)+f|0,h)}if((b|0)!=10){_U(j)}AS(a,c);BS(a,k);b=a;a=d+g|0;uo(b,a);o[i+7|0]=0;XO(a+c|0,i+7|0);ue=i+16|0;return}kT();F()}function xi(a){a=a|0;var b=0,c=0;q[a>>2]=3204;a:{if(q[a+3732>>2]!=3){break a}c=q[a+3736>>2];if(!c){break a}b=q[c+156>>2];if(b){q[c+160>>2]=b;_U(b)}b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+3736>>2]=0}b=a+3772|0;c=q[b>>2];q[b>>2]=0;if(c){_U(c)}c=q[a+3472>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+3472>>2]=0}Gh(a);return a|0}function mi(a){a=a|0;var b=0,c=0;q[a>>2]=3064;a:{if(q[a+3524>>2]!=3){break a}c=q[a+3528>>2];if(!c){break a}b=q[c+156>>2];if(b){q[c+160>>2]=b;_U(b)}b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+3528>>2]=0}b=a+3564|0;c=q[b>>2];q[b>>2]=0;if(c){_U(c)}c=q[a+3504>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+3504>>2]=0}Gh(a);return a|0}function Si(a){a=a|0;var b=0,c=0;q[a>>2]=3484;a:{if(q[a+3488>>2]!=3){break a}c=q[a+3492>>2];if(!c){break a}b=q[c+156>>2];if(b){q[c+160>>2]=b;_U(b)}b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+3492>>2]=0}b=a+3528|0;c=q[b>>2];q[b>>2]=0;if(c){_U(c)}c=q[a+3476>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+3476>>2]=0}Gh(a);return a|0}function qC(a,b){var c=0,d=0,e=0;e=a+12|0;d=q[e>>2];a:{if(d){e=a+12|0;while(1){c=q[d+16>>2];b:{if(c>>>0>b>>>0){c=q[d>>2];if(c){break b}e=d;break a}if(c>>>0>=b>>>0){break a}e=d+4|0;c=q[d+4>>2];if(!c){break a}d=e}e=d;d=c;continue}}d=e}if(!q[e>>2]){c=_S(20);q[c+8>>2]=d;q[c>>2]=0;q[c+4>>2]=0;q[c+16>>2]=b;q[e>>2]=c;b=q[q[a+8>>2]>>2];if(b){q[a+8>>2]=b;c=q[e>>2]}ih(q[a+12>>2],c);a=a+16|0;q[a>>2]=q[a>>2]+1}}function yD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;b=lV(_S(84),0,84);q[b+40>>2]=0;q[b+44>>2]=0;q[b+32>>2]=4;q[b+36>>2]=5;q[b+24>>2]=4;q[b+28>>2]=5;o[b+20|0]=1;q[b+16>>2]=2;q[b+4>>2]=341948;q[b>>2]=341924;q[b+8>>2]=1;q[b+12>>2]=0;o[b+47|0]=0;o[b+48|0]=0;o[b+49|0]=0;o[b+50|0]=0;q[b+56>>2]=0;q[b+60>>2]=0;q[b+52>>2]=1;d=b- -64|0;q[d>>2]=0;q[d+4>>2]=0;q[b+72>>2]=0;q[b+76>>2]=0;q[b+80>>2]=0;bD(b,c);q[a>>2]=b+4}function BE(a,b,c){var d=0,e=0;d=ue-16|0;ue=d;e=q[c>>2];if(e){q[a+4>>2]=b;Pa(q[a>>2],4105,q[e+28>>2]);Qa(q[a>>2],4099,x(hV(u[c+12>>2])));Qa(q[a>>2],4106,x(u[c+4>>2]));a:{if(r[c+16|0]){Pa(q[a>>2],514,0);Ra(q[a>>2],4100,c+20|0);Qa(q[a>>2],4131,x(u[c+32>>2]));break a}b=q[c+8>>2];q[d+8>>2]=0;q[d+12>>2]=0;q[d+4>>2]=b;Pa(q[a>>2],514,1);Ra(q[a>>2],4100,d+4|0);Qa(q[a>>2],4131,x(x(1)))}Sa(q[a>>2])}ue=d+16|0}function wN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=ue-32|0;ue=a;q[a+24>>2]=37;q[a+28>>2]=0;$M(a+24|1,355366,1,q[c+4>>2]);h=q[c+4>>2];g=a+ -32|0;ue=g;i=fM();q[a>>2]=e;q[a+4>>2]=f;e=h>>>9&1;f=aN(g,e+23|0,i,a+24|0,a)+g|0;h=bN(g,f,c);e=g-((e<<3|176)+11&240)|0;ue=e;EH(a+8|0,c);sN(g,h,f,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=tN(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function PP(a,b,c,d){var e=0,f=0;e=ue-160|0;ue=e;q[e+152>>2]=b;f=e+144|0;a:{b:while(1){if(c>>>0>>0){q[e+8>>2]=c;if((n[q[q[a>>2]+16>>2]](a,e+144|0,c,(d-c|0)>32?c+32|0:d,e+8|0,e+16|0,f,e+12|0)|0)==2){break a}b=e+16|0;if(q[e+8>>2]==(c|0)){break a}while(1)if(b>>>0>=t[e+12>>2]){c=q[e+8>>2];continue b}else{q[e+4>>2]=q[b>>2];MT(q[e+152>>2],q[e+4>>2]);b=b+4|0;continue}}break}ue=e+160|0;return}TG();F()}function NK(a,b){var c=0;a:{b:{if((a^b)&3){break b}if(b&3){while(1){c=r[b|0];o[a|0]=c;if(!c){break a}a=a+1|0;b=b+1|0;if(b&3){continue}break}}c=q[b>>2];if((c^-1)&c+ -16843009&-2139062144){break b}while(1){q[a>>2]=c;c=q[b+4>>2];a=a+4|0;b=b+4|0;if(!(c+ -16843009&(c^-1)&-2139062144)){continue}break}}c=r[b|0];o[a|0]=c;if(!c){break a}while(1){c=r[b+1|0];o[a+1|0]=c;a=a+1|0;b=b+1|0;if(c){continue}break}}}function JR(){var a=0;a:{if(o[371160]&1){break a}if(!oU(371160)){break a}a=370992;while(1){a=CL(a)+12|0;if((a|0)!=371160){continue}break}sU(371160)}LR(370992,360384);LR(371004,360412);LR(371016,360440);LR(371028,360472);LR(371040,360512);LR(371052,360548);LR(371064,360576);LR(371076,360612);LR(371088,360628);LR(371100,360644);LR(371112,360660);LR(371124,360676);LR(371136,360692);LR(371148,360708)}function GR(){var a=0;a:{if(o[370984]&1){break a}if(!oU(370984)){break a}a=370816;while(1){a=CL(a)+12|0;if((a|0)!=370984){continue}break}sU(370984)}ER(370816,360296);ER(370828,360303);ER(370840,360310);ER(370852,360318);ER(370864,360328);ER(370876,360337);ER(370888,360344);ER(370900,360353);ER(370912,360357);ER(370924,360361);ER(370936,360365);ER(370948,360369);ER(370960,360373);ER(370972,360377)}function rD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=_S(76);q[e+40>>2]=1;q[e+32>>2]=1;q[e+36>>2]=1;q[e+24>>2]=1;q[e+28>>2]=1;q[e+16>>2]=0;q[e+20>>2]=2;q[e+8>>2]=1;q[e+12>>2]=0;q[e+72>>2]=4896;q[e+68>>2]=194;q[e+56>>2]=b;q[e+52>>2]=-1;q[e+44>>2]=0;q[e+48>>2]=0;q[e+4>>2]=340312;q[e>>2]=340288;if(b){n[q[q[b>>2]>>2]](b)|0}b=e+4|0;c=QC(e,c,d);q[a>>2]=0;if(c){q[a>>2]=b;return}n[q[q[b>>2]+8>>2]](b)|0}function yN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=ue-32|0;ue=a;q[a+24>>2]=37;q[a+28>>2]=0;$M(a+24|1,355366,0,q[c+4>>2]);h=q[c+4>>2];g=a+ -32|0;ue=g;i=fM();q[a>>2]=e;q[a+4>>2]=f;e=h>>>9&1|22;f=aN(g,e+1|0,i,a+24|0,a)+g|0;h=bN(g,f,c);e=g-((e<<3)+11&240)|0;ue=e;EH(a+8|0,c);sN(g,h,f,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=tN(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function Om(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}a=q[kl(a,e+12|0)+8>>2];o[a+208|0]=1;b=r[c|0]|r[c+1|0]<<8|(r[c+2|0]<<16|r[c+3|0]<<24);o[a+209|0]=b;o[a+210|0]=b>>>8;o[a+211|0]=b>>>16;o[a+212|0]=b>>>24}ue=e+16|0}function Hr(a,b,c){a=a|0;b=b|0;c=x(c);var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=0,j=x(0);b=q[b>>2];f=u[b>>2];d=x(-f);e=u[b+8>>2];e=e>f?f:e;e=e>2];g=g>f?f:g;d=g>2]=0;q[a+12>>2]=1065353216;i=a,j=x(f*AG(d)),u[i+4>>2]=j;i=a,j=x(f*zG(d)),u[i>>2]=j}function Ug(a,b){var c=0,d=0,e=0;c=q[b+4>>2];a:{if(!c){d=q[b+8>>2];if(q[d>>2]==(b|0)){break a}e=b+8|0;while(1){c=q[e>>2];e=c+8|0;d=q[c+8>>2];if((c|0)!=q[d>>2]){continue}break}break a}while(1){d=c;c=q[c>>2];if(c){continue}break}}if(q[a>>2]==(b|0)){q[a>>2]=d}q[a+8>>2]=q[a+8>>2]+ -1;gh(q[a+4>>2],b);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}function kn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);var e=0,f=0,g=0;f=q[a+464>>2];g=a+468|0;if((f|0)!=(g|0)){while(1){e=f;if(b&q[e+256>>2]|c&q[e+260>>2]){u[e+244>>2]=d}a=q[e+4>>2];a:{if(!a){f=q[e+8>>2];if((e|0)==q[f>>2]){break a}a=e+8|0;while(1){e=q[a>>2];a=e+8|0;f=q[e+8>>2];if((e|0)!=q[f>>2]){continue}break}break a}while(1){f=a;a=q[a>>2];if(a){continue}break}}if((f|0)!=(g|0)){continue}break}}}function tD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=_S(76);q[d+40>>2]=1;q[d+32>>2]=1;q[d+36>>2]=1;q[d+24>>2]=1;q[d+28>>2]=1;q[d+16>>2]=0;q[d+20>>2]=2;q[d+8>>2]=1;q[d+12>>2]=0;q[d+72>>2]=4896;q[d+68>>2]=194;q[d+56>>2]=b;q[d+52>>2]=-1;q[d+44>>2]=0;q[d+48>>2]=0;q[d+4>>2]=340312;q[d>>2]=340288;if(b){n[q[q[b>>2]>>2]](b)|0}b=d+4|0;c=RC(d,c);q[a>>2]=0;if(c){q[a>>2]=b;return}n[q[q[b>>2]+8>>2]](b)|0}function cC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=q[a+16>>2];if((h|0)>=(b|0)){f=a+32|0;g=(q[f>>2]+e|0)+ -1|0;g=g-((g|0)%(e|0)|0)|0;q[f>>2]=g;f=q[q[a+44>>2]>>2];q[a+24>>2]=f;e=a;a:{if(!(r[a+36|0]?(b+g|0)<=(h|0):0)){q[c>>2]=0;q[d>>2]=f;d=b;break a}q[c>>2]=g;q[d>>2]=f;d=q[a+32>>2]+b|0}q[e+32>>2]=d;c=q[c>>2];o[a+56|0]=1;q[a+20>>2]=b;q[a+52>>2]=c;a=1}else{a=0}return a|0}function pV(a,b,c){var d=0,e=0,f=0,g=0;d=q[c+16>>2];a:{if(!d){if(nV(c)){break a}d=q[c+16>>2]}f=q[c+20>>2];if(d-f>>>0>>0){return n[q[c+36>>2]](c,a,b)|0}b:{if(o[c+75|0]<0){break b}e=b;while(1){d=e;if(!d){break b}e=d+ -1|0;if(r[e+a|0]!=10){continue}break}e=n[q[c+36>>2]](c,a,d)|0;if(e>>>0>>0){break a}b=b-d|0;a=a+d|0;f=q[c+20>>2];g=d}kV(f,a,b);q[c+20>>2]=q[c+20>>2]+b;e=b+g|0}return e}function Un(a,b){var c=0,d=0,e=0,f=0;o[a+564|0]=1;e=q[a+464>>2];f=a+468|0;if((e|0)!=(f|0)){while(1){c=e;if(!(q[c+64>>2]!=q[b>>2]|!q[c+68>>2])){Bn(a,c- -64|0)}d=q[c+4>>2];a:{if(!d){e=q[c+8>>2];if((c|0)==q[e>>2]){break a}c=c+8|0;while(1){d=q[c>>2];c=d+8|0;e=q[d+8>>2];if((d|0)!=q[e>>2]){continue}break}break a}while(1){e=d;d=q[d>>2];if(d){continue}break}}if((e|0)!=(f|0)){continue}break}}}function Wg(a,b,c){var d=0,e=0,f=0;d=ue-48|0;ue=d;b=Of(d+8|0,b);e=Tg(a,b);a:{if((e|0)==(a+4|0)){q[d+32>>2]=b;Xg(d+40|0,a,b,d+32|0);e=q[d+40>>2];f=q[c>>2];if(f){n[q[q[f>>2]>>2]](f)|0}f=q[e+28>>2];if(f){n[q[q[f>>2]+8>>2]](f)|0;q[e+28>>2]=0}q[e+28>>2]=q[c>>2];q[d+32>>2]=b;Xg(d+40|0,a,b,d+32|0);q[q[d+40>>2]+32>>2]=1;break a}q[e+32>>2]=q[e+32>>2]+1}if(o[b+11|0]<=-1){_U(q[b>>2])}ue=d+48|0}function gN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=ue-32|0;ue=a;q[a+24>>2]=37;q[a+28>>2]=0;$M(a+24|1,355366,0,q[c+4>>2]);h=q[c+4>>2];g=a+ -32|0;ue=g;i=fM();q[a>>2]=e;q[a+4>>2]=f;f=aN(g,(h>>>9&1|22)+1|0,i,a+24|0,a)+g|0;h=bN(g,f,c);e=g+ -48|0;ue=e;EH(a+8|0,c);cN(g,h,f,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=Ut(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function dC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=q[a+8>>2];if((g|0)>=(b|0)){f=(q[a+24>>2]+e|0)+ -1|0;f=f-((f|0)%(e|0)|0)|0;q[a+24>>2]=f;e=q[q[a+36>>2]>>2];q[a+16>>2]=e;h=a;a:{if(!(r[a+28|0]?(b+f|0)<=(g|0):0)){q[c>>2]=0;q[d>>2]=e;d=b;break a}q[c>>2]=f;q[d>>2]=e;d=q[a+24>>2]+b|0}q[h+24>>2]=d;c=q[c>>2];o[a+48|0]=1;q[a+12>>2]=b;q[a+44>>2]=c;a=1}else{a=0}return a|0}function _s(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0);g=u[b>>2];e=u[c>>2];h=u[b+4>>2];f=u[c+4>>2];i=u[b+8>>2];u[a+8>>2]=u[c+8>>2]*i;u[a+4>>2]=f*h;u[a>>2]=e*g;e=u[c+20>>2];f=u[c+16>>2];u[a+24>>2]=i*u[c+24>>2];u[a+20>>2]=h*e;u[a+16>>2]=g*f;e=u[c+36>>2];f=u[c+32>>2];u[a+40>>2]=i*u[c+40>>2];u[a+36>>2]=h*e;u[a+32>>2]=g*f;q[a+12>>2]=q[d>>2];q[a+28>>2]=q[d+4>>2];q[a+44>>2]=q[d+8>>2]}function $T(a){var b=0,c=0,d=0,e=0,f=0;b=ue-16|0;ue=b;c=a+12|0;e=b,f=aU(c),q[e+8>>2]=f;e=b,f=bU(c),q[e>>2]=f;while(1){if(XM(b+8|0,b)){d=b+8|0;q[d>>2]=q[d>>2]+8;continue}else{a:{e=b,f=aU(a),q[e+8>>2]=f;e=b,f=bU(a),q[e>>2]=f;while(1){if(!XM(b+8|0,b)){break a}XT(q[q[b+8>>2]>>2]);gQ(q[q[b+8>>2]>>2]);qN(b+8|0);continue}}}break}hU(c);hU(c);cU(c);hU(a);XP(a);hU(a);dU(a);ue=b+16|0;return a}function cM(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=ue-32|0;ue=e;a:{if((b|0)!=(c|0)){j=q[91802];q[91802]=0;TS(e,b,e+28|0);b=q[e+8>>2];f=q[e+12>>2];g=q[e>>2];h=q[e+4>>2];i=q[91802];b:{if(i){if(q[e+28>>2]!=(c|0)){break b}if((i|0)!=68){break a}q[d>>2]=4;break a}q[91802]=j;if(q[e+28>>2]==(c|0)){break a}}}q[d>>2]=4;g=0;h=0;b=0;f=0}q[a>>2]=g;q[a+4>>2]=h;q[a+8>>2]=b;q[a+12>>2]=f;ue=e+32|0}function xH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;while(1){a:{if((e|0)>=(c|0)){break a}f=q[a+24>>2];g=q[a+28>>2];if(f>>>0>=g>>>0){if((n[q[q[a>>2]+52>>2]](a,q[b>>2])|0)==-1){break a}e=e+1|0;b=b+4|0}else{q[d+12>>2]=g-f>>2;q[d+8>>2]=c-e;f=q[jH(d+12|0,d+8|0)>>2];vH(q[a+24>>2],b,f);g=f<<2;q[a+24>>2]=g+q[a+24>>2];e=e+f|0;b=b+g|0}continue}break}ue=d+16|0;return e|0}function eN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=ue-32|0;ue=a;q[a+24>>2]=37;q[a+28>>2]=0;$M(a+24|1,355366,1,q[c+4>>2]);h=q[c+4>>2];g=a+ -32|0;ue=g;i=fM();q[a>>2]=e;q[a+4>>2]=f;f=aN(g,(h>>>9&1)+23|0,i,a+24|0,a)+g|0;h=bN(g,f,c);e=g+ -48|0;ue=e;EH(a+8|0,c);cN(g,h,f,e,a+20|0,a+16|0,a+8|0);kL(a+8|0);b=Ut(b,e,q[a+20>>2],q[a+16>>2],c,d);ue=a+32|0;return b|0}function Ft(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;d=ue-16|0;ue=d;g=MH(d,a);a:{if(!r[d|0]){break a}f=b+c|0;c=q[q[a>>2]+ -12>>2]+a|0;h=(q[c+4>>2]&176)==32?f:b;i=q[c+24>>2];e=q[c+76>>2];if((e|0)==-1){EH(d+8|0,c);e=pL(d+8|0,370576);e=n[q[q[e>>2]+28>>2]](e,32)|0;kL(d+8|0);q[c+76>>2]=e}if(Ut(i,b,h,f,c,e<<24>>24)){break a}b=q[q[a>>2]+ -12>>2]+a|0;UH(b,q[b+16>>2]|5)}OH(g);ue=d+16|0;return a}function DD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;a=q[b>>2];a:{if(!a){lw(0);break a}lw(q[a+8>>2]);b=0;f=q[a+16>>2];if(f){n[q[q[f>>2]>>2]](f)|0;b=q[a+16>>2]}Ia(0,0,q[b+20>>2],q[b+24>>2]);if(!b){break a}n[q[q[b>>2]+8>>2]](b)|0}b=0;if(c){Ja(x(x(x(r[e|0])/x(255))),x(x(x(r[e+1|0])/x(255))),x(x(x(r[e+2|0])/x(255))),x(x(x(r[e+3|0])/x(255))));b=16384}a=d?b|256:b;if(a){Ka(a|0)}}function lO(a,b,c,d,e){var f=0,g=0;f=ue-16|0;ue=f;q[f+8>>2]=b;a:{if($H(a,f+8|0)){q[c>>2]=q[c>>2]|6;b=0;break a}b=YH(a);if(!ZH(d,2048,b)){q[c>>2]=q[c>>2]|4;b=0;break a}b=cO(d,b);while(1){b:{_H(a);b=b+ -48|0;if(!XH(a,f+8|0)|(e|0)<2){break b}g=YH(a);if(!ZH(d,2048,g)){break a}e=e+ -1|0;b=cO(d,g)+w(b,10)|0;continue}break}if(!$H(a,f+8|0)){break a}q[c>>2]=q[c>>2]|2}ue=f+16|0;return b}function PN(a,b,c,d,e){var f=0,g=0;f=ue-16|0;ue=f;q[f+8>>2]=b;a:{if(KH(a,f+8|0)){q[c>>2]=q[c>>2]|6;b=0;break a}b=HH(a);if(!IH(d,2048,b)){q[c>>2]=q[c>>2]|4;b=0;break a}b=GN(d,b);while(1){b:{JH(a);b=b+ -48|0;if(!GH(a,f+8|0)|(e|0)<2){break b}g=HH(a);if(!IH(d,2048,g)){break a}e=e+ -1|0;b=GN(d,g)+w(b,10)|0;continue}break}if(!KH(a,f+8|0)){break a}q[c>>2]=q[c>>2]|2}ue=f+16|0;return b}function iu(a){a=a|0;var b=0;q[a+4>>2]=26628;q[a>>2]=26584;b=q[a+96>>2];if(b){q[a+100>>2]=b;_U(b)}b=q[a+84>>2];if(b){q[a+88>>2]=b;_U(b)}b=q[a+72>>2];if(b){q[a+76>>2]=b;_U(b)}b=q[a+60>>2];if(b){q[a- -64>>2]=b;_U(b)}b=q[a+48>>2];if(b){q[a+52>>2]=b;_U(b)}b=q[a+36>>2];if(b){q[a+40>>2]=b;_U(b)}b=q[a+24>>2];if(b){q[a+28>>2]=b;_U(b)}b=q[a+12>>2];if(b){q[a+16>>2]=b;_U(b)}return a|0}function vp(a){var b=0,c=0,d=0,e=0;c=ue-16|0;ue=c;b=q[a+8>>2];if(b){while(1){e=q[b>>2];d=q[b+16>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[b+16>>2]=0}xt(c);n[q[c+8>>2]](c,b,24);b=q[q[c+12>>2]+4>>2];if(b){n[b](q[c>>2])}b=e;if(b){continue}break}}b=q[a>>2];q[a>>2]=0;a:{if(!b){break a}a=q[a+4>>2];xt(c);n[q[c+8>>2]](c,b,a<<2);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function Dy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ue-32|0;ue=d;q[d+16>>2]=0;b=q[b+16>>2];if(b){n[q[q[b>>2]>>2]](b)|0}q[d+8>>2]=0;q[d+16>>2]=b;e=d;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[e+8>>2]=b;q[d+24>>2]=0;b=q[d+24>>2];q[d+24>>2]=0;q[a>>2]=b;a=q[d+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+8>>2]=0}a=q[d+16>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+16>>2]=0}ue=d+32|0}function hq(a){a=a|0;var b=0;q[a+4>>2]=5772;q[a>>2]=5728;b=q[a+96>>2];if(b){q[a+100>>2]=b;_U(b)}b=q[a+84>>2];if(b){q[a+88>>2]=b;_U(b)}b=q[a+72>>2];if(b){q[a+76>>2]=b;_U(b)}b=q[a+60>>2];if(b){q[a- -64>>2]=b;_U(b)}b=q[a+48>>2];if(b){q[a+52>>2]=b;_U(b)}b=q[a+36>>2];if(b){q[a+40>>2]=b;_U(b)}b=q[a+24>>2];if(b){q[a+28>>2]=b;_U(b)}b=q[a+12>>2];if(b){q[a+16>>2]=b;_U(b)}return a|0}function ym(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=q[a+464>>2];d=a+468|0;if((c|0)!=(d|0)){e=q[b>>2];while(1){b=c;if(q[b+64>>2]==(e|0)){o[b+87|0]=1}a=q[b+4>>2];a:{if(!a){c=q[b+8>>2];if((b|0)==q[c>>2]){break a}b=b+8|0;while(1){a=q[b>>2];b=a+8|0;c=q[a+8>>2];if((a|0)!=q[c>>2]){continue}break}break a}while(1){c=a;a=q[a>>2];if(a){continue}break}}if((c|0)!=(d|0)){continue}break}}}function Ql(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;e=a+12|0;c=q[a+16>>2];f=q[a+12>>2];d=(c-f|0)/148|0;a:{if(d>>>0>>0){Rl(e,b-d|0);c=q[a+16>>2];break a}if(d>>>0<=b>>>0){break a}b=w(b,148)+f|0;if((b|0)!=(c|0)){while(1){c=Mp(c+ -148|0);if((b|0)!=(c|0)){continue}break}}q[a+16>>2]=b;c=b}b=q[e>>2];if((c|0)!=(b|0)){while(1){Np(b);b=b+148|0;if((c|0)!=(b|0)){continue}break}}}function iN(a,b,c){var d=0,e=0,f=0;if(c&2048){o[a|0]=43;a=a+1|0}if(c&1024){o[a|0]=35;a=a+1|0}d=c&260;if((d|0)!=260){o[a|0]=10798;o[a+1|0]=42;f=1;a=a+2|0}c=c&16384;while(1){e=r[b|0];if(e){o[a|0]=e;a=a+1|0;b=b+1|0;continue}break}a:{b:{if((d|0)!=256){if((d|0)!=4){break b}b=c?70:102;break a}b=c?69:101;break a}b=c?65:97;if((d|0)==260){break a}b=c?71:103}o[a|0]=b;return f}function Mn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;c=q[a+464>>2];d=a+468|0;if((c|0)!=(d|0)){while(1){b=c;f=1<>2]+64>>2];a=q[b+4>>2];a:{if(!a){c=q[b+8>>2];if((b|0)==q[c>>2]){break a}a=b+8|0;while(1){b=q[a>>2];a=b+8|0;c=q[b+8>>2];if((b|0)!=q[c>>2]){continue}break}break a}while(1){c=a;a=q[a>>2];if(a){continue}break}}e=e|f;if((c|0)!=(d|0)){continue}break}}return e|0}function IF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;b=ue-32|0;ue=b;q[b+20>>2]=0;q[b+16>>2]=c;a:{if(!te(343260,343322,b+16|0)){break a}q[b+28>>2]=0;q[b>>2]=c;q[b+12>>2]=0;q[b+24>>2]=0;q[b+4>>2]=b+28;q[b+8>>2]=b+24;te(343325,343538,b|0)|0;c=q[b+28>>2];if(!c){break a}d=_S(20);e=q[b+24>>2];q[d+16>>2]=0;q[d+12>>2]=e;q[d+8>>2]=c;q[d>>2]=343552;q[d+4>>2]=1}q[a>>2]=d;ue=b+32|0}function HF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;b=ue-32|0;ue=b;q[b+20>>2]=1;q[b+16>>2]=c;a:{if(!te(343260,343322,b+16|0)){break a}q[b+28>>2]=0;q[b>>2]=c;q[b+12>>2]=1;q[b+24>>2]=0;q[b+4>>2]=b+28;q[b+8>>2]=b+24;te(343325,343538,b|0)|0;c=q[b+28>>2];if(!c){break a}d=_S(20);e=q[b+24>>2];q[d+16>>2]=0;q[d+12>>2]=e;q[d+8>>2]=c;q[d>>2]=343552;q[d+4>>2]=1}q[a>>2]=d;ue=b+32|0}function JJ(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=e;e=0;k=e;h=c;c=0;g=vW(j,e,h,c);e=we;l=g;g=g>>>0<0?e+1|0:e;f=d;e=0;i=b;d=vW(f,e,b,0);b=we;f=vW(f,e,h,c);c=b+f|0;b=we;b=c>>>0>>0?b+1|0:b;h=b;f=b+l|0;b=g;b=f>>>0>>0?b+1|0:b;g=b;b=vW(i,m,j,k)+c|0;e=we;e=b>>>0>>0?e+1|0:e;i=e;f=e+f|0;e=g;q[a+8>>2]=f;q[a+12>>2]=f>>>0>>0?e+1|0:e;q[a>>2]=d;q[a+4>>2]=b}function GG(a,b){a:{if((b|0)>=128){a=x(a*x(1.7014118346046923e+38));if((b|0)<255){b=b+ -127|0;break a}a=x(a*x(1.7014118346046923e+38));b=((b|0)<381?b:381)+ -254|0;break a}if((b|0)>-127){break a}a=x(a*x(1.1754943508222875e-38));if((b|0)>-253){b=b+126|0;break a}a=x(a*x(1.1754943508222875e-38));b=((b|0)>-378?b:-378)+252|0}return x(a*(f(0,(b<<23)+1065353216|0),j()))}function GC(a,b,c){var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;e=w(q[a+40>>2],q[a+16>>2]);g=q[a+24>>2];f=q[a+28>>2]-g|0;a:{if(e>>>0>f>>>0){Se(a+24|0,e-f|0);break a}if(e>>>0>=f>>>0){break a}q[a+28>>2]=e+g}Zv(a+20|0);q[d+12>>2]=0;ta(34965,d+12|0);Yv(34963,q[a+20>>2]);_v(34963,q[a+28>>2]-q[a+24>>2]|0,0,35044);Yv(34963,q[d+12>>2]);q[a+12>>2]=(c|0)==4;q[a+16>>2]=b;ue=d+16|0}function oF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-48|0;ue=d;q[d>>2]=q[c>>2];q[d+4>>2]=q[c+4>>2];q[d+8>>2]=q[c+8>>2];q[d+12>>2]=q[c+16>>2];q[d+16>>2]=q[c+20>>2];q[d+20>>2]=q[c+24>>2];q[d+24>>2]=q[c+32>>2];q[d+28>>2]=q[c+36>>2];q[d+32>>2]=q[c+40>>2];q[d+36>>2]=q[c+48>>2];q[d+40>>2]=q[c+52>>2];q[d+44>>2]=q[c+56>>2];a=q[a>>2];n[q[q[a>>2]+192>>2]](a,b,d);ue=d+48|0}function qG(a,b){var c=0,d=0,e=0,f=0;d=a+3|0;c=r[a+3|0];f=(c|0)!=0;e=c|(r[a+1|0]<<16|r[a|0]<<24|r[a+2|0]<<8);a=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);b=a<<24|a<<8&16711680|(a>>>8&65280|a>>>24);a:{if(!(!c|(e|0)==(b|0))){while(1){a=d+1|0;c=r[d+1|0];f=(c|0)!=0;e=c|e<<8;if((b|0)==(e|0)){break a}d=a;if(c){continue}break}break a}a=d}return f?a+ -3|0:0}function SC(a,b,c,d){var e=0,f=0,g=0;if(!b){return}q[a+44>>2]=b;e=q[d+8>>2];f=q[d+4>>2];b=q[d>>2];d=q[d+12>>2];g=q[d>>2];if(g){b=n[g](b)|0}q[a+68>>2]=e;e=q[a+60>>2];q[a+60>>2]=b;q[a- -64>>2]=f;b=a+72|0;f=q[b>>2];q[b>>2]=d;b=q[f+4>>2];if(b){n[b](e)}q[a+40>>2]=1;q[a+36>>2]=c?2:1;q[a+28>>2]=1;q[a+32>>2]=1;q[a+20>>2]=2;q[a+24>>2]=1;q[a+12>>2]=4;q[a+16>>2]=0}function tN(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;i=ue-16|0;ue=i;a:{if(!a){break a}h=q[e+12>>2];g=c-b|0;if((g|0)>=1){g=g>>2;if((rI(a,b,g)|0)!=(g|0)){break a}}b=d-b>>2;b=(h|0)>(b|0)?h-b|0:0;if((b|0)>=1){f=vN(i,b,f);h=rI(a,kM(f),b);oT(f);if((b|0)!=(h|0)){break a}}b=d-c|0;if((b|0)>=1){b=b>>2;if((rI(a,c,b)|0)!=(b|0)){break a}}q[e+12>>2]=0;j=a}ue=i+16|0;return j}function nI(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=ue-32|0;ue=c;d=MH(c+24|0,a);a:{if(!r[d|0]){break a}EH(c+16|0,q[q[a>>2]+ -12>>2]+a|0);e=pL(c+16|0,370404);kL(c+16|0);g=jI(c+8|0,a);f=q[q[a>>2]+ -12>>2]+a|0;h=kI(f);i=c,j=n[q[q[e>>2]+16>>2]](e,q[g>>2],f,h,b)|0,q[i+16>>2]=j;if(!lI(c+16|0)){break a}LH(q[q[a>>2]+ -12>>2]+a|0,5)}OH(d);ue=c+32|0;return a}function Uk(a){var b=0,c=0,d=0,e=0,f=0;b=q[a+176>>2];a:{if(!b){break a}e=a+176|0;f=a+180|0;while(1){if(q[b+820>>2]>=2){c=q[b+8>>2];d=q[b+4>>2];q[b+4>>2]=0;q[b+8>>2]=0;q[(d?d+8|0:e)>>2]=c;q[(c?c+4|0:f)>>2]=d;q[a+184>>2]=q[a+184>>2]+ -1;Jk(q[a+12>>2]);b=c;if(b){continue}break a}b=q[b+8>>2];if(b){continue}break}}u[a+36>>2]=u[q[a+12>>2]+60>>2]+u[a+36>>2]}function UO(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;f=q[lN(a)>>2];d=q[c>>2]-q[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:4;g=q[b>>2];i=q[a>>2];h=$U((f|0)==858?0:q[a>>2],d);if(h){g=g-i>>2;if((f|0)!=858){gP(a)}q[e+4>>2]=857;f=rL(e+8|0,h,e+4|0);hP(a,f);wL(f);q[b>>2]=q[a>>2]+(g<<2);q[c>>2]=q[a>>2]+(d&-4);ue=e+16|0;return}TG();F()}function Ey(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=ue-16|0;ue=d;e=_S(16);q[d+8>>2]=0;b=q[b+16>>2];if(b){n[q[q[b>>2]>>2]](b)|0}q[d>>2]=0;q[d+8>>2]=b;f=d;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[f>>2]=b;Ov(e,d+8|0,d);b=q[d>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d>>2]=0}b=q[d+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0}q[a>>2]=e;ue=d+16|0}function ZO(a,b,c){var d=0,e=0,f=0,g=0;f=ue-32|0;ue=f;d=uL(a);e=DL(a);g=OS(b,c);a:{if(!g){break a}if(US(b,kM(a),kM(a)+uL(a)|0)){d=f+16|0;VS(d);dL(d,b,c);yT(a,kM(d),uL(d));oT(d);break a}if(e-d>>>0>>0){wT(a,e,(d+g|0)-e|0,d,d)}e=kM(a)+d|0;while(1){if((b|0)!=(c|0)){XO(e,b);b=b+1|0;e=e+1|0;continue}break}o[f+15|0]=0;XO(e,f+15|0);nS(a,d+g|0)}ue=f+32|0}function YF(a,b,c,d){var e=0,f=0;if((d|0)==1){f=b;e=q[a+8>>2]-q[a+4>>2]|0;b=b-e|0;c=c-((e>>31)+(f>>>0>>0)|0)|0}a:{if(t[a+20>>2]>t[a+28>>2]){n[q[a+36>>2]](a,0,0)|0;if(!q[a+20>>2]){break a}}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;c=n[q[a+40>>2]](a,b,c,d)>>>0>=0?0:1;b=we;if((b|0)<0?1:(b|0)<=0?c:0){break a}q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=q[a>>2]&-17}}function OP(a,b,c,d){var e=0,f=0;e=ue+ -64|0;ue=e;q[e+56>>2]=b;f=e+48|0;a:{b:while(1){if(c>>>0>>0){q[e+8>>2]=c;if((n[q[q[a>>2]+12>>2]](a,e+48|0,c,d,e+8|0,e+16|0,f,e+12|0)|0)==2){break a}b=e+16|0;if(q[e+8>>2]==(c|0)){break a}while(1)if(b>>>0>=t[e+12>>2]){c=q[e+8>>2];continue b}else{MP(e+56|0,b);b=b+1|0;continue}}break}ue=e- -64|0;return}TG();F()}function GK(a,b,c,d){var e=0,f=0;e=ue-160|0;ue=e;kV(e+8|0,351304,144);a:{b:{if(b+ -1>>>0>=2147483647){if(b){break b}b=1;a=e+159|0}q[e+52>>2]=a;q[e+28>>2]=a;f=-2-a|0;b=b>>>0>f>>>0?f:b;q[e+56>>2]=b;a=a+b|0;q[e+36>>2]=a;q[e+24>>2]=a;a=DK(e+8|0,c,d);if(!b){break a}b=q[e+28>>2];o[b-((b|0)==q[e+24>>2])|0]=0;break a}q[91802]=61;a=-1}ue=e+160|0;return a}function oD(a){var b=0,c=0,d=0;c=q[a+8>>2];d=a+12|0;if((c|0)!=(d|0)){while(1){b=c;a=q[b+16>>2];n[q[q[a>>2]+4>>2]](a);a=q[b+4>>2];a:{if(!a){c=q[b+8>>2];if((b|0)==q[c>>2]){break a}a=b+8|0;while(1){b=q[a>>2];a=b+8|0;c=q[b+8>>2];if((b|0)!=q[c>>2]){continue}break}break a}while(1){c=a;a=q[a>>2];if(a){continue}break}}if((c|0)!=(d|0)){continue}break}}}function iV(a,b){a:{if((b|0)>=1024){a=a*8.98846567431158e+307;if((b|0)<2047){b=b+ -1023|0;break a}a=a*8.98846567431158e+307;b=((b|0)<3069?b:3069)+ -2046|0;break a}if((b|0)>-1023){break a}a=a*2.2250738585072014e-308;if((b|0)>-2045){b=b+1022|0;break a}a=a*2.2250738585072014e-308;b=((b|0)>-3066?b:-3066)+2044|0}f(0,0);f(1,b+1023<<20);return a*+g()}function NU(a,b){var c=0,d=0;a:{while(1){if(!b){return 0}b=FU(b,362628);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(CU(q[a+12>>2],q[b+12>>2],0)){return 1}if(!(o[a+8|0]&1)){break a}c=q[a+12>>2];if(!c){break a}c=FU(c,362628);if(c){b=q[b+12>>2];a=c;continue}break}a=q[a+12>>2];if(!a){break a}a=FU(a,362740);if(!a){break a}d=OU(a,q[b+12>>2])}return d}function oP(a,b,c){var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;f=uL(a);e=mS(a);g=VG(b,c);a:{if(!g){break a}if(US(b,kM(a),kM(a)+(uL(a)<<2)|0)){VS(d);hL(d,b,c);LT(a,kM(d),uL(d));oT(d);break a}if(e-f>>>0>>0){KT(a,e,(f+g|0)-e|0,f,f)}e=kM(a)+(f<<2)|0;while(1){if((b|0)!=(c|0)){KI(e,b);b=b+4|0;e=e+4|0;continue}break}q[d>>2]=0;KI(e,d);nS(a,f+g|0)}ue=d+16|0}function lk(a,b){var c=0,d=0,e=0,f=0;while(1){f=(a+e|0)+23040|0;a:{if(!r[f|0]){break a}c=w(e,1440)+a|0;if((Ej(c)|0)!=(b|0)){break a}d=q[c+820>>2];if((d|0)<=1){Xj(c,u[b+60>>2]);break a}d=d+ -2|0;if(d>>>0>1){break a}if(d-1){q[c+820>>2]=3;break a}n[q[q[c>>2]>>2]](c)|0;o[f|0]=0;q[a+23056>>2]=q[a+23056>>2]+ -1}e=e+1|0;if((e|0)!=16){continue}break}}function wm(a){a=a|0;var b=0,c=0,d=0;c=q[a+464>>2];d=a+468|0;if((c|0)!=(d|0)){while(1){b=c;o[b+83|0]=1;o[b+86|0]=1;a=q[b+4>>2];a:{if(!a){c=q[b+8>>2];if((b|0)==q[c>>2]){break a}a=b+8|0;while(1){b=q[a>>2];a=b+8|0;c=q[b+8>>2];if((b|0)!=q[c>>2]){continue}break}break a}while(1){c=a;a=q[a>>2];if(a){continue}break}}if((c|0)!=(d|0)){continue}break}}}function nD(a){var b=0,c=0,d=0;c=q[a+8>>2];d=a+12|0;if((c|0)!=(d|0)){while(1){b=c;a=q[b+16>>2];n[q[q[a>>2]>>2]](a);a=q[b+4>>2];a:{if(!a){c=q[b+8>>2];if((b|0)==q[c>>2]){break a}a=b+8|0;while(1){b=q[a>>2];a=b+8|0;c=q[b+8>>2];if((b|0)!=q[c>>2]){continue}break}break a}while(1){c=a;a=q[a>>2];if(a){continue}break}}if((c|0)!=(d|0)){continue}break}}}function EU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ue+ -64|0;ue=d;e=1;a:{if(CU(a,b,0)){break a}e=0;if(!b){break a}b=FU(b,362532);e=0;if(!b){break a}q[d+20>>2]=-1;q[d+16>>2]=a;q[d+12>>2]=0;q[d+8>>2]=b;lV(d+24|0,0,39);q[d+56>>2]=1;n[q[q[b>>2]+28>>2]](b,d+8|0,q[c>>2],1);e=0;if(q[d+32>>2]!=1){break a}q[c>>2]=q[d+24>>2];e=1}ue=d- -64|0;return e|0}function Gy(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;f=_S(28);q[d+8>>2]=0;e=q[b>>2];if(e){n[q[q[e>>2]>>2]](e)|0;e=q[b>>2]}q[d>>2]=0;q[d+8>>2]=e;e=d;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[e>>2]=b;Mw(f,d+8|0,d,1);q[a>>2]=f;a=q[d>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0}a=q[d+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+8>>2]=0}ue=d+16|0}function Us(a,b){var c=0;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=c;c=q[b+20>>2];q[a+16>>2]=q[b+16>>2];q[a+20>>2]=c;c=q[b+28>>2];q[a+24>>2]=q[b+24>>2];q[a+28>>2]=c;c=q[b+44>>2];q[a+40>>2]=q[b+40>>2];q[a+44>>2]=c;c=q[b+36>>2];q[a+32>>2]=q[b+32>>2];q[a+36>>2]=c;q[a+28>>2]=0;q[a+12>>2]=0;q[a+44>>2]=0}function TO(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;f=q[lN(a)>>2];d=q[c>>2]-q[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:1;g=q[b>>2];i=q[a>>2];h=$U((f|0)==858?0:q[a>>2],d);if(h){g=g-i|0;if((f|0)!=858){gP(a)}q[e+4>>2]=857;f=rL(e+8|0,h,e+4|0);hP(a,f);wL(f);q[b>>2]=g+q[a>>2];q[c>>2]=d+q[a>>2];ue=e+16|0;return}TG();F()}function Hm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=c;e=yp(a);a=q[b+468>>2];a:{if(!a){break a}b=b+464|0;while(1){b:{f=q[a+32>>2];if((f|0)<=(c|0)){if((f|0)>=(c|0)){break b}a=a+4|0}a=q[a>>2];if(a){continue}break a}break}a=kl(b,d+12|0);b=q[a+236>>2];c=q[a+252>>2];q[e+8>>2]=q[a+268>>2];q[e+4>>2]=c;q[e>>2]=b}ue=d+16|0}function Bl(a,b){var c=0;a:{if(Ip(a,b)>x(u[a+12>>2]+u[b+12>>2])){break a}if(!!(Ip(a+16|0,b)>x(u[a+28>>2]+u[b+12>>2]))){break a}if(Ip(a+32|0,b)>x(u[a+44>>2]+u[b+12>>2])){break a}if(Ip(a+48|0,b)>x(u[a+60>>2]+u[b+12>>2])){break a}if(Ip(a- -64|0,b)>x(u[a+76>>2]+u[b+12>>2])){break a}if(Ip(a+80|0,b)>x(u[a+92>>2]+u[b+12>>2])){break a}c=1}return c}function vi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=ue-32|0;ue=c;d=b+552|0;e=a+3732|0;gi(d,b+168|0,e);hi(c+28|0,d,e,u[b+828>>2],u[b+824>>2]);d=q[c+28>>2];q[b+548>>2]=d;if(q[a+2472>>2]+ -1>>>0<=1){q[c+24>>2]=d;a=q[b+324>>2];q[c+20>>2]=a;q[c+16>>2]=d;q[c+12>>2]=a;Oe(c+28|0,c+16|0,c+12|0);d=q[c+28>>2]}q[b+544>>2]=d;q[b+320>>2]=d;ue=c+32|0}function fi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=ue-32|0;ue=c;d=b+552|0;e=a+3524|0;gi(d,b+168|0,e);hi(c+28|0,d,e,u[b+828>>2],u[b+824>>2]);d=q[c+28>>2];q[b+548>>2]=d;if(q[a+2472>>2]+ -1>>>0<=1){q[c+24>>2]=d;a=q[b+324>>2];q[c+20>>2]=a;q[c+16>>2]=d;q[c+12>>2]=a;Oe(c+28|0,c+16|0,c+12|0);d=q[c+28>>2]}q[b+544>>2]=d;q[b+320>>2]=d;ue=c+32|0}function Qi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=ue-32|0;ue=c;d=b+552|0;e=a+3488|0;gi(d,b+168|0,e);hi(c+28|0,d,e,u[b+828>>2],u[b+824>>2]);d=q[c+28>>2];q[b+548>>2]=d;if(q[a+2472>>2]+ -1>>>0<=1){q[c+24>>2]=d;a=q[b+324>>2];q[c+20>>2]=a;q[c+16>>2]=d;q[c+12>>2]=a;Oe(c+28|0,c+16|0,c+12|0);d=q[c+28>>2]}q[b+544>>2]=d;q[b+320>>2]=d;ue=c+32|0}function PU(a,b,c,d){o[a+53|0]=1;a:{if(q[a+4>>2]!=(c|0)){break a}o[a+52|0]=1;c=q[a+16>>2];if(!c){q[a+36>>2]=1;q[a+24>>2]=d;q[a+16>>2]=b;if((d|0)!=1|q[a+48>>2]!=1){break a}o[a+54|0]=1;return}if((b|0)==(c|0)){c=q[a+24>>2];if((c|0)==2){q[a+24>>2]=d;c=d}if(q[a+48>>2]!=1|(c|0)!=1){break a}o[a+54|0]=1;return}o[a+54|0]=1;q[a+36>>2]=q[a+36>>2]+1}}function bn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=q[a+464>>2];e=a+468|0;if((d|0)!=(e|0)){while(1){c=d;o[c+80|0]=b;a=q[c+4>>2];a:{if(!a){d=q[c+8>>2];if((c|0)==q[d>>2]){break a}a=c+8|0;while(1){c=q[a>>2];a=c+8|0;d=q[c+8>>2];if((c|0)!=q[d>>2]){continue}break}break a}while(1){d=a;a=q[a>>2];if(a){continue}break}}if((d|0)!=(e|0)){continue}break}}}function aG(a,b,c){var d=0,e=0,f=0,g=0;e=r[c+74|0];o[c+74|0]=e+ -1|e;e=b;d=q[c+4>>2];f=q[c+8>>2]-d|0;g=e;a:{if((f|0)<1){break a}g=d;d=f>>>0>>0?f:e;kV(a,g,d);q[c+4>>2]=d+q[c+4>>2];a=a+d|0;g=e-d|0}d=g;if(d){while(1){b:{if(!jG(c)){f=n[q[c+32>>2]](c,a,d)|0;if(f+1>>>0>1){break b}}return e-d|0}a=a+f|0;d=d-f|0;if(d){continue}break}}return b}function Bn(a,b){var c=0,d=0,e=0,f=0,g=0;yk(q[b+4>>2],1);qk(q[b+4>>2],1);e=q[b+4>>2];n[q[q[e>>2]>>2]](e)|0;c=q[a+140>>2];d=c+q[a+136>>2]|0;f=q[a+124>>2];g=q[a+128>>2]-f|0;if((d|0)==((g?(g<<8)+ -1|0:0)|0)){ql(a+120|0);f=q[a+124>>2];c=q[a+140>>2];d=c+q[a+136>>2]|0}q[q[(d>>>8&16777212)+f>>2]+((d&1023)<<2)>>2]=e;q[a+140>>2]=c+1;q[b+4>>2]=0}function Sm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);var e=0,f=0,g=0;f=ue-16|0;ue=f;q[f+12>>2]=b;e=q[a+468>>2];a:{if(!e){break a}a=a+464|0;while(1){b:{g=q[e+32>>2];if((g|0)<=(b|0)){if((g|0)>=(b|0)){break b}e=e+4|0}e=q[e>>2];if(e){continue}break a}break}a=kl(a,f+12|0);if(c>>>0>3){break a}u[(q[a+8>>2]+(c<<2)|0)+40>>2]=d;o[a+20|0]=1}ue=f+16|0}function MT(a,b){var c=0,d=0,e=0;d=ue-16|0;ue=d;q[d+12>>2]=b;a:{b:{c:{d:{if(iM(a)){c=jM(a)+ -1|0;e=q[a+4>>2];if((c|0)==(e|0)){break d}break b}e=1;c=1;b=r[a+11|0];if((b|0)!=1){break c}}KT(a,c,1,c,c);b=e;if(iM(a)){break b}}c=a;YO(a,b+1|0);break a}c=q[a>>2];uo(a,e+1|0);b=e}a=(b<<2)+c|0;KI(a,d+12|0);q[d+8>>2]=0;KI(a+4|0,d+8|0);ue=d+16|0}function AT(a,b){var c=0,d=0,e=0;d=ue-16|0;ue=d;o[d+15|0]=b;a:{b:{c:{d:{if(iM(a)){c=jM(a)+ -1|0;e=q[a+4>>2];if((c|0)==(e|0)){break d}break b}e=10;c=10;b=r[a+11|0];if((b|0)!=10){break c}}wT(a,c,1,c,c);b=e;if(iM(a)){break b}}c=a;YO(a,b+1|0);break a}c=q[a>>2];uo(a,e+1|0);b=e}a=b+c|0;XO(a,d+15|0);o[d+14|0]=0;XO(a+1|0,d+14|0);ue=d+16|0}function sV(a){var b=0,c=0,d=0;a:{b:{b=a;if(!(b&3)){break b}if(!r[a|0]){return 0}while(1){b=b+1|0;if(!(b&3)){break b}if(r[b|0]){continue}break}break a}while(1){c=b;b=b+4|0;d=q[c>>2];if(!((d^-1)&d+ -16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=r[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function St(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=q[a+44>>2];c=q[a+24>>2];if(d>>>0>>0){q[a+44>>2]=c;d=c}c=q[a+12>>2];e=-1;a:{if(t[a+8>>2]>=c>>>0){break a}if((b|0)==-1){q[a+16>>2]=d;q[a+12>>2]=c+ -1;return 0}if(!(r[a+48|0]&16)){e=-1;if(r[c+ -1|0]!=(b&255)){break a}}q[a+16>>2]=d;d=a;a=c+ -1|0;q[d+12>>2]=a;o[a|0]=b;e=b}return e|0}function hn(a,b,c){a=a|0;b=b|0;c=x(c);var d=0,e=0,f=0,g=0,h=x(0),i=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}g=kl(a,e+12|0),h=c,u[g+160>>2]=h;g=kl(a,e+12|0),i=1,o[g+20|0]=i}ue=e+16|0}function DE(a){var b=0,c=0,d=0,e=0;q[a+4>>2]=16;q[a+16>>2]=0;d=a+8|0;q[a+12>>2]=d;q[a+8>>2]=d;b=_S(64);q[a>>2]=b;Wa(16,b|0);while(1){c=_S(8);b=q[q[a>>2]+(e<<2)>>2];q[c+4>>2]=0;q[c>>2]=b;b=_S(12);q[b+4>>2]=d;q[b+8>>2]=c;c=q[a+8>>2];q[b>>2]=c;q[c+4>>2]=b;q[a+8>>2]=b;q[a+16>>2]=q[a+16>>2]+1;e=e+1|0;if((e|0)!=16){continue}break}}function du(a){var b=0,c=0;b=ue-48|0;ue=b;q[b+40>>2]=16;q[b+44>>2]=a;q[b+36>>2]=6;c=_S(108);q[c+4>>2]=26628;q[c>>2]=26584;q[c+8>>2]=1;lV(c+12|0,0,96);q[b+32>>2]=c;q[b+16>>2]=b+36;q[b+12>>2]=b+40;q[b+8>>2]=b+24;q[b+4>>2]=b+32;q[b>>2]=b+44;if(n[q[q[a>>2]+28>>2]](a)){eu(b,2);eu(b,3)}eu(b,0);eu(b,1);ue=b+48|0;return q[b+32>>2]}function KT(a,b,c,d,e){var f=0,g=0,h=0;f=ue-16|0;ue=f;if(1073741807-b>>>0>=c>>>0){g=kM(a);a:{if(536870887>b>>>0){q[f+8>>2]=b<<1;q[f+12>>2]=b+c;c=PS(q[zI(f+12|0,f+8|0)>>2]);break a}c=1073741806}h=c+1|0;c=QS(h);if(e){vH(c,g,e)}d=d-e|0;if(d){e=e<<2;vH(e+c|0,e+g|0,d)}if((b|0)!=1){_U(g)}AS(a,c);BS(a,h);ue=f+16|0;return}kT();F()}function xy(a,b){a=a|0;b=b|0;var c=0,d=0;d=ue-16|0;ue=d;q[d+12>>2]=0;cV(d+12|0,16,52);c=q[d+12>>2];q[c+12>>2]=0;q[c+16>>2]=0;q[c+8>>2]=b;q[c>>2]=337504;q[c+4>>2]=1;q[c+20>>2]=0;q[c+24>>2]=0;q[c+28>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;q[c+40>>2]=0;q[c+44>>2]=0;q[c+48>>2]=0;yy(c+20|0,n[q[q[b>>2]+64>>2]](b)|0);q[a>>2]=c;ue=d+16|0}function Sg(a,b,c){var d=0,e=0,f=0;e=ue-16|0;ue=e;f=Of(e,b);b=Tg(a,f);a:{if((b|0)==(a+4|0)){c=0;break a}q[b+32>>2]=q[b+32>>2]+ -1;d=q[b+28>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[c>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[c>>2]=0}q[c>>2]=q[b+28>>2];c=1;if(q[b+32>>2]){break a}Ug(a,b)}if(o[f+11|0]<=-1){_U(q[f>>2])}ue=e+16|0;return c}function cj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=x(0),f=x(0),g=0,h=0,i=0,j=0,k=0;d=ue-16|0;ue=d;e=u[b+828>>2];f=u[b+824>>2];a:{if(x(y(f))>2]=q[d+12>>2];ue=d+16|0}function aj(a,b,c){a=a|0;b=b|0;c=c|0;c=q[b+12>>2]+32|0;gi(b+200|0,c,a+3852|0);gi(b+216|0,c,a+3896|0);gi(b+232|0,c,a+3940|0);gi(b+248|0,c,a+3984|0);gi(b+264|0,c,a+4028|0);gi(b+280|0,c,a+4072|0);if(!q[a+4116>>2]){q[b+296>>2]=q[a+4120>>2]}if(!q[a+4132>>2]){q[b+304>>2]=q[a+4136>>2]}if(!q[a+4124>>2]){q[b+300>>2]=q[a+4128>>2]}}function rg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;a:{if(q[b+24>>2]<=8){n[q[q[b>>2]+44>>2]](d+8|0,b,c);q[a>>2]=q[d+8>>2];break a}b:{if((c|0)>=0){if((n[q[q[b>>2]+72>>2]](b)|0)>(c|0)){break b}}q[a>>2]=0;break a}b=q[b+88>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}ue=d+16|0}function og(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;a:{if(q[b+24>>2]<=8){n[q[q[b>>2]+44>>2]](d+8|0,b,c);q[a>>2]=q[d+8>>2];break a}b:{if((c|0)>=0){if((n[q[q[b>>2]+60>>2]](b)|0)>(c|0)){break b}}q[a>>2]=0;break a}b=q[b+64>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}ue=d+16|0}function CK(a,b,c){var d=0,e=0,f=0;a:{if((b|0)==1&a>>>0<0|b>>>0<1){d=a;break a}while(1){d=xW(a,b,10,0);e=we;f=e;e=vW(d,e,10,0);c=c+ -1|0;o[c|0]=a-e|48;e=(b|0)==9&a>>>0>4294967295|b>>>0>9;a=d;b=f;if(e){continue}break}}if(d){while(1){c=c+ -1|0;a=(d>>>0)/10|0;o[c|0]=d-w(a,10)|48;b=d>>>0>9;d=a;if(b){continue}break}}return c}function VU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(CU(a,q[b+8>>2],e)){QU(b,c,d);return}a:{if(!CU(a,q[b>>2],e)){break a}if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+20>>2]=c;q[b+32>>2]=d;q[b+40>>2]=q[b+40>>2]+1;if(!(q[b+36>>2]!=1|q[b+24>>2]!=2)){o[b+54|0]=1}q[b+44>>2]=4}}function PE(a,b){a=a|0;b=x(b);var c=0,d=0,e=0;b=x(u[a+20>>2]+b);a:{if(x(y(b))>2]=b-x(c|0);if((c|0)>=1){while(1){d=q[a>>2];n[q[q[d>>2]+340>>2]](d,x(1));e=e+1|0;if((c|0)!=(e|0)){continue}break}}b=x(x(b/x(60))+u[a+12>>2]);u[a+12>>2]=b;a=q[a+4>>2];n[q[q[a>>2]+188>>2]](a,b)}function EF(a,b,c,d,e){var f=0;if(!(q[a+172>>2]==(e|0)?q[a+168>>2]==(d|0):0)){f=q[a+164>>2];if(!f){f=a+164|0;Fa(1,f|0);f=q[f>>2]}Ca(3553,f|0);Ga(3553,0,6408,d|0,e|0,0,6408,5121,0);q[a+172>>2]=e;q[a+168>>2]=d}Ca(3553,q[a+164>>2]);Ha(3553,0,0,0,b|0,c|0,d|0,e|0);Ca(3553,0);b=q[a+4>>2];n[q[q[b>>2]+240>>2]](b,q[a+164>>2],0)}function by(a){var b=0;b=ue-16|0;ue=b;q[b+12>>2]=0;q[b>>2]=a;q[b+4>>2]=b+12;oy(b,191660);oy(b,191682);oy(b,191700);oy(b,191720);oy(b,191745);oy(b,191774);oy(b,191803);oy(b,191831);oy(b,191855);oy(b,191880);oy(b,191903);oy(b,191926);oy(b,191943);oy(b,191964);oy(b,191988);oy(b,192015);oy(b,192042);oy(b,192064);ue=b+16|0}function HL(a,b,c,d){var e=0,f=0;a:{if(!uL(a)|(c-b|0)<5){break a}uN(b,c);e=c+ -4|0;c=kM(a);f=c+uL(a)|0;while(1){b:{a=o[c|0];if(b>>>0>=e>>>0){break b}if(!((a|0)<1|(a|0)>=127|q[b>>2]==o[c|0])){q[d>>2]=4;return}c=(f-c|0)>1?c+1|0:c;b=b+4|0;continue}break}if((a|0)<1|(a|0)>=127|q[e>>2]+ -1>>>0>>0){break a}q[d>>2]=4}}function CT(a,b,c){var d=0,e=0,f=0,g=0,h=0;g=ue-16|0;ue=g;d=uL(a);if(d>>>0>=0){f=DL(a);a:{if(f-d>>>0>=c>>>0){if(!c){break a}e=kM(a);h=e;f=d;if(d){rT(c+e|0,e,f);b=e>>>0<=b>>>0?d+e>>>0>b>>>0?b+c|0:b:b}rT(h,b,c);b=c+d|0;nS(a,b);o[g+15|0]=0;XO(b+e|0,g+15|0);break a}sT(a,f,(c+d|0)-f|0,d,0,0,c,b)}ue=g+16|0;return a}lT();F()}function Ay(a,b){a=a|0;b=b|0;var c=0,d=0;d=ue-16|0;ue=d;q[d+12>>2]=0;cV(d+12|0,16,144);c=q[d+12>>2];q[c+24>>2]=0;q[c+28>>2]=0;q[c+20>>2]=b;q[c+12>>2]=0;q[c+16>>2]=0;q[c>>2]=337928;q[c+4>>2]=1;q[c+8>>2]=0;q[c+32>>2]=0;q[c+36>>2]=0;q[c+112>>2]=0;q[c+116>>2]=0;q[c+120>>2]=0;q[c+124>>2]=0;q[c+128>>2]=0;q[a>>2]=c;ue=d+16|0}function Gu(a){var b=0,c=0,d=0,e=0,f=0,g=0;b=ue-144|0;ue=b;g=b;f=q[a+8>>2];c=a+24|0;d=q[c>>2]+ -1|0;b=d+q[a+20>>2]|0;e=(b>>>0)/28|0;e=kV(g,q[f+(e<<2)>>2]+w(b-w(e,28)|0,144)|0,144);q[c>>2]=d;c=q[a+12>>2];d=c-f|0;if((d?w(d>>2,28)+ -1|0:0)-b>>>0>=56){_U(q[c+ -4>>2]);q[a+12>>2]=q[a+12>>2]+ -4}kV(a+176|0,e,144);ue=e+144|0}function yJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=ue-16|0;ue=b;f=b+16|0;a:{while(1){c=q[a+36>>2];d=n[q[q[c>>2]+20>>2]](c,q[a+40>>2],b+8|0,f,b+4|0)|0;c=-1;e=q[b+4>>2]-(b+8|0)|0;if((qV(b+8|0,1,e,q[a+32>>2])|0)!=(e|0)){break a}d=d+ -1|0;if(d>>>0<=1){if(d-1){continue}break a}break}c=TF(q[a+32>>2])?-1:0}ue=b+16|0;return c|0}function jk(a){var b=0,c=0,d=0,e=0;while(1){e=(a+d|0)+23040|0;a:{if(!r[e|0]){break a}b=w(d,1440)+a|0;c=q[b+820>>2];if((c|0)<=1){Xj(b,u[Ej(b)+60>>2]);break a}c=c+ -2|0;if(c>>>0>1){break a}if(c-1){q[b+820>>2]=3;break a}n[q[q[b>>2]>>2]](b)|0;o[e|0]=0;q[a+23056>>2]=q[a+23056>>2]+ -1}d=d+1|0;if((d|0)!=16){continue}break}}function zm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}if(!r[kl(a,d+12|0)+168|0]){f=1;break a}f=!r[kl(a,d+12|0)+19|0]}ue=d+16|0;return f|0}function oC(a){var b=0,c=0,d=0,e=0;b=ue-16|0;ue=b;if(q[a>>2]){c=q[a+4>>2];a:{b:{if(c){if(!SH(c,366320)){break b}break a}if(!(c|366320)){break a}}c=_S(80);q[b>>2]=c;q[b+4>>2]=71;q[b+8>>2]=-2147483568;d=kV(c,340088,71),e=0,o[d+71|0]=e;el(2,b);if(o[b+11|0]>-1){break a}_U(q[b>>2])}n[q[91775]](1,a)}ue=b+16|0;return a}function OH(a){var b=0;a:{b=q[a+4>>2];if(!q[(q[q[b>>2]+ -12>>2]+b|0)+24>>2]){break a}b=q[a+4>>2];if(!CH(q[q[b>>2]+ -12>>2]+b|0)){break a}b=q[a+4>>2];if(!(q[(q[q[b>>2]+ -12>>2]+b|0)+4>>2]&8192)){break a}b=q[a+4>>2];if((NH(q[(q[q[b>>2]+ -12>>2]+b|0)+24>>2])|0)!=-1){break a}a=q[a+4>>2];LH(q[q[a>>2]+ -12>>2]+a|0,1)}}function wC(a,b){var c=0,d=0,e=0;c=ue-16|0;ue=c;e=q[a+16>>2];d=q[a+20>>2]-e|0;a:{if(d>>>0>>0){Se(a+16|0,b-d|0);break a}if(d>>>0<=b>>>0){break a}q[a+20>>2]=b+e}Zv(a+12|0);q[c+12>>2]=0;ta(34964,c+12|0);Yv(34962,q[a+12>>2]);_v(34962,q[a+20>>2]-q[a+16>>2]|0,0,r[a+36|0]?35048:35044);Yv(34962,q[c+12>>2]);ue=c+16|0}function wj(a,b,c){var d=x(0),e=x(0),f=x(0),g=0,h=x(0);d=x(n[q[q[c>>2]+16>>2]](c,u[b+44>>2],u[b+40>>2]));e=x(n[q[q[c>>2]+16>>2]](c,u[b+88>>2],u[b+84>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[b+132>>2],u[b+128>>2]));g=a,h=x(n[q[q[c>>2]+16>>2]](c,u[b+176>>2],u[b+172>>2])),u[g+12>>2]=h;u[a+8>>2]=f;u[a+4>>2]=e;u[a>>2]=d}function NC(a){a=a|0;var b=0,c=0;q[a>>2]=340312;b=a+ -4|0;q[b>>2]=340288;c=a+56|0;a:{if(!r[q[a+68>>2]+8|0]){n[q[b+68>>2]](c);break a}if(q[b+44>>2]){a=b+44|0;Ea(1,a|0);q[a>>2]=0}if(!q[b+48>>2]){break a}}a=q[b+56>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+56>>2]=0}a=q[q[b+72>>2]+4>>2];if(a){n[a](q[c>>2])}return b|0}function wD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;b=_S(24);q[b+16>>2]=0;q[b+20>>2]=0;q[b+4>>2]=341768;q[b>>2]=341744;q[b+8>>2]=1;q[b+12>>2]=0;g=b+4|0;a:{if(!d){break a}e=b+12|0;TC(e,d);if((d|0)<1){break a}b=0;while(1){f=b<<5;UC(f+q[e>>2]|0,c+f|0);b=b+1|0;if((d|0)!=(b|0)){continue}break}}q[a>>2]=g}function Fs(a,b,c,d,e,f,g){var h=0,i=0;h=ue-48|0;ue=h;i=q[((f<<4)+c|0)+216>>2];u[h+40>>2]=u[c+8>>2]/x(60);g=q[g>>2];q[h+28>>2]=0;q[h+20>>2]=0;q[h+24>>2]=0;q[h+16>>2]=g;u[h+32>>2]=d?x(u[d+828>>2]/x(60)):x(0);b=q[b+260>>2]+w(f,60)|0;if(q[b+4>>2]==1){bl(h,b,c+40|0,h+40|0,h+16|0,e);i=q[h>>2]}q[a>>2]=i;ue=h+48|0}function _Q(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=ue-16|0;ue=f;q[e>>2]=c;a=WQ(f+12|0,0,q[a+8>>2]);c=2;a:{if(a+1>>>0<2){break a}b=a+ -1|0;c=1;if(b>>>0>d-q[e>>2]>>>0){break a}c=f+12|0;while(1){if(b){a=r[c|0];d=q[e>>2];q[e>>2]=d+1;o[d|0]=a;b=b+ -1|0;c=c+1|0;continue}break}c=0}ue=f+16|0;return c|0}function OJ(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=ue-16|0;ue=d;g=a;h=a;a:{if(!b){b=0;break a}c=b>>31;e=c+b^c;c=z(e);MJ(d,e,0,0,0,c+81|0);c=(q[d+12>>2]^65536)+(16414-c<<16)|0;e=0+q[d+8>>2]|0;if(e>>>0>>0){c=c+1|0}f=b&-2147483648|c;c=q[d+4>>2];b=q[d>>2]}q[h>>2]=b;q[g+4>>2]=c;q[a+8>>2]=e;q[a+12>>2]=f;ue=d+16|0}function dO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=ue-32|0;ue=g;h=q[88895];q[g+24>>2]=q[88894];q[g+28>>2]=h;h=q[88893];q[g+16>>2]=q[88892];q[g+20>>2]=h;h=q[88891];q[g+8>>2]=q[88890];q[g+12>>2]=h;h=q[88889];q[g>>2]=q[88888];q[g+4>>2]=h;a=bO(a,b,c,d,e,f,g,g+32|0);ue=g+32|0;return a|0}function $e(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a>>2]=1256;b=q[a+40>>2];if(b){q[a+44>>2]=b;_U(b)}b=q[a+24>>2];if(b){q[a+28>>2]=b;_U(b)}q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}b=q[a+16>>2];d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,d,b<<1);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}ue=c+16|0;return a|0}function wT(a,b,c,d,e){var f=0,g=0,h=0;f=ue-16|0;ue=f;if(-17-b>>>0>=c>>>0){g=kM(a);a:{if(2147483623>b>>>0){q[f+8>>2]=b<<1;q[f+12>>2]=b+c;c=yS(q[zI(f+12|0,f+8|0)>>2]);break a}c=-18}h=c+1|0;c=zS(h);if(e){kH(c,g,e)}d=d-e|0;if(d){kH(c+e|0,e+g|0,d)}if((b|0)!=10){_U(g)}AS(a,c);BS(a,h);ue=f+16|0;return}kT();F()}function hG(a){var b=0,c=0,d=0,e=0,f=0;b=q[a+40>>2];c=n[b](a,0,0,r[a|0]&128?t[a+20>>2]>t[a+28>>2]?2:1:1)|0;b=we;d=b;if((b|0)>0?1:(b|0)>=0?c>>>0<0?0:1:0){e=q[a+20>>2]-q[a+28>>2]|0;a=q[a+8>>2]-q[a+4>>2]|0;f=c-a|0;b=e+f|0;a=(d-((a>>31)+(c>>>0>>0)|0)|0)+(e>>31)|0;c=b;d=b>>>0>>0?a+1|0:a}we=d;return c}function mE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-32|0;ue=d;b=q[b+8>>2];n[q[q[b>>2]+20>>2]](d+24|0,b,c);b=q[d+24>>2];a:{if(!b){q[a>>2]=0;break a}n[q[q[b>>2]>>2]](b)|0;q[d+8>>2]=b;lE(d+16|0,d+8|0);c=q[d+16>>2];q[d+16>>2]=0;q[a>>2]=c;n[q[q[b>>2]+8>>2]](b)|0;q[d+8>>2]=0;n[q[q[b>>2]+8>>2]](b)|0}ue=d+32|0}function af(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a>>2]=1256;b=q[a+40>>2];if(b){q[a+44>>2]=b;_U(b)}b=q[a+24>>2];if(b){q[a+28>>2]=b;_U(b)}q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}b=q[a+16>>2];d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,d,b<<1);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}_U(a);ue=c+16|0}function MC(a){a=a|0;var b=0,c=0;q[a+4>>2]=340312;q[a>>2]=340288;c=a+60|0;a:{if(!r[q[a+72>>2]+8|0]){n[q[a+68>>2]](c);break a}if(q[a+44>>2]){b=a+44|0;Ea(1,b|0);q[b>>2]=0}if(!q[a+48>>2]){break a}}b=q[a+56>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+56>>2]=0}b=q[q[a+72>>2]+4>>2];if(b){n[b](q[c>>2])}return a|0}function nG(a,b){a=a|0;b=b|0;var c=0,d=0;c=o[b|0];if(!c){return a|0}a=mG(a,c);a:{if(!a){break a}if(!r[b+1|0]){return a|0}if(!r[a+1|0]){break a}if(!r[b+2|0]){return oG(a,b)|0}if(!r[a+2|0]){break a}if(!r[b+3|0]){return pG(a,b)|0}if(!r[a+3|0]){break a}if(!r[b+4|0]){return qG(a,b)|0}d=rG(a,b)}return d|0}function Cu(a){a=a|0;var b=0,c=0,d=0;q[a>>2]=26988;d=a+4|0;Du(d);b=q[a+8>>2];c=q[a+12>>2];a:{if((b|0)==(c|0)){break a}while(1){_U(q[b>>2]);b=b+4|0;if((c|0)!=(b|0)){continue}break}b=q[a+12>>2];c=q[a+8>>2];if((b|0)==(c|0)){break a}q[a+12>>2]=b+(((b-c|0)+ -4>>>2^-1)<<2)}b=q[d>>2];if(b){_U(b)}return a|0}function TT(a,b,c){var d=0,e=0,f=0,g=0,h=0;f=ue-16|0;ue=f;g=+c;d=uL(b);while(1){a:{e=vL(b,0);v[f>>3]=g;h=b;e=LK(e,d+1|0,361957,f);b:{if((e|0)>=0){if(e>>>0<=d>>>0){break a}d=e;break b}d=d<<1|1}EL(h,d);continue}break}EL(b,e);d=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=d;q[a+8>>2]=q[b+8>>2];hM(b);ue=f+16|0}function Ol(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;f=q[a+116>>2];if(!f){return 0}g=q[a+100>>2];h=a+112|0;e=q[h>>2];i=q[q[g+(e>>>8&16777212)>>2]+((e&1023)<<2)>>2];q[a+116>>2]=f+ -1;e=e+1|0;q[h>>2]=e;if(e>>>0>=2048){_U(q[g>>2]);q[a+100>>2]=q[a+100>>2]+4;q[a+112>>2]=q[a+112>>2]+ -1024}return Nk(i,a,b,c,d)}function uk(a){var b=0,c=0,d=0;b=q[a+36>>2];a:{if(!b){break a}while(1){c=b;if(!(r[b+308|0]|q[b+184>>2])){b=q[c+316>>2];Pl(q[a+12>>2],c);if(q[a+36>>2]==(c|0)){q[a+36>>2]=b}if(!d){d=0;if(!b){break a}continue}q[d+316>>2]=b;if(!b){break a}continue}d=c;b=q[c+316>>2];if(b){continue}break}}q[a+40>>2]=d}function nK(a){var b=0,c=0,d=0,e=0,f=0;e=sV(a);a:{b:{if(!q[92588]|!r[a|0]){break b}if(mG(a,61)){break b}b=q[q[92588]>>2];if(!b){break b}while(1){c=mK(a,b,e);b=q[92588];if(!c){c=q[b+(d<<2)>>2];f=c+e|0;if(r[f|0]==61){break a}}d=d+1|0;b=q[b+(d<<2)>>2];if(b){continue}break}}return 0}return c?f+1|0:0}function OC(a){a=a|0;var b=0,c=0;q[a+4>>2]=340312;q[a>>2]=340288;c=a+60|0;a:{if(!r[q[a+72>>2]+8|0]){n[q[a+68>>2]](c);break a}if(q[a+44>>2]){b=a+44|0;Ea(1,b|0);q[b>>2]=0}if(!q[a+48>>2]){break a}}b=q[a+56>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+56>>2]=0}b=q[q[a+72>>2]+4>>2];if(b){n[b](q[c>>2])}_U(a)}function yB(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;d=q[a+16>>2];n[q[q[d>>2]+44>>2]](c+8|0,d,b,0);b=q[c+8>>2];if(b){n[q[q[b>>2]>>2]](b)|0}d=b?b+ -4|0:0;b=q[a+36>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+36>>2]=0}q[a+36>>2]=d;a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function ar(a,b,c){var d=0,e=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=1;q[a+20>>2]=0;q[a+24>>2]=0;q[a>>2]=6180;q[a+16>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;p[a+36>>1]=0;d=a+24|0;br(d,1);e=c;a=q[a+24>>2];if((a|0)!=(b|0)){cr(a,q[b>>2],q[b+4>>2]);a=q[d>>2]}a=a+12|0;if((a|0)!=(e|0)){dr(a,q[c>>2],q[c+4>>2])}}function AB(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;d=q[a+16>>2];n[q[q[d>>2]+44>>2]](c+8|0,d,b,0);b=q[c+8>>2];if(b){n[q[q[b>>2]>>2]](b)|0}d=b?b+ -4|0:0;b=q[a+40>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+40>>2]=0}q[a+40>>2]=d;a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function zB(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;d=q[a+8>>2];n[q[q[d>>2]+44>>2]](c+8|0,d,b,0);b=q[c+8>>2];if(b){n[q[q[b>>2]>>2]](b)|0}d=b?b+ -4|0:0;b=q[a+28>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+28>>2]=0}q[a+28>>2]=d;a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function WJ(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=ue-16|0;ue=c;g=a;h=a;a:{if(!b){b=0;e=0;break a}d=b;b=z(b)^31;MJ(c,d,0,0,0,112-b|0);b=(q[c+12>>2]^65536)+(b+16383<<16)|0;d=0+q[c+8>>2]|0;if(d>>>0>>0){b=b+1|0}f=d;d=b;b=q[c+4>>2];e=q[c>>2]}q[h>>2]=e;q[g+4>>2]=b;q[a+8>>2]=f;q[a+12>>2]=d;ue=c+16|0}function BB(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;d=q[a+8>>2];n[q[q[d>>2]+44>>2]](c+8|0,d,b,0);b=q[c+8>>2];if(b){n[q[q[b>>2]>>2]](b)|0}d=b?b+ -4|0:0;b=q[a+32>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+32>>2]=0}q[a+32>>2]=d;a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function $m(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}g=q[kl(a,e+12|0)+8>>2],h=c,o[g+72|0]=h}ue=e+16|0}function pG(a,b){var c=0,d=0,e=0,f=0;d=a+2|0;c=r[a+2|0];e=(c|0)!=0;a=r[a+1|0]<<16|r[a|0]<<24|c<<8;f=r[b+1|0]<<16|r[b|0]<<24|r[b+2|0]<<8;a:{if(!(!c|(a|0)==(f|0))){while(1){b=d+1|0;c=r[d+1|0];e=(c|0)!=0;a=(a|c)<<8;if((f|0)==(a|0)){break a}d=b;if(c){continue}break}break a}b=d}return e?b+ -2|0:0}function Ji(a){var b=0,c=0;a:{if(q[a>>2]!=3){break a}c=q[a+4>>2];if(!c){break a}b=q[c+156>>2];if(b){q[c+160>>2]=b;_U(b)}b=q[c+112>>2];if(b){q[c+116>>2]=b;_U(b)}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+4>>2]=0}c=q[a+40>>2];q[a+40>>2]=0;if(c){_U(c)}}function IE(a,b){var c=0,d=0,e=0;c=ue-16|0;ue=c;d=a+8|0;a=q[a+12>>2];a:{if((d|0)!=(a|0)){while(1){b:{e=q[a+8>>2];if(q[e+4>>2]!=(b|0)){break b}q[c+12>>2]=0;Va(q[e>>2],4112,c+12|0);if((q[c+12>>2]&-2)!=4114){break b}a=1;break a}a=q[a+4>>2];if((d|0)!=(a|0)){continue}break}}a=0}ue=c+16|0;return a}function Sw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=q[b>>2];if(a){c=q[a+80>>2];d=q[a+76>>2];e=q[a+72>>2];a=q[a+68>>2];if(a){n[q[q[a>>2]+12>>2]](a)}if(e){n[q[q[e>>2]+12>>2]](e)}if(d){n[q[q[d>>2]+12>>2]](d)}if(c){n[q[q[c>>2]+12>>2]](c)}a=q[b>>2];q[a+68>>2]=0;q[a+72>>2]=0;q[a+76>>2]=0;q[a+80>>2]=0}}function gf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=ue-16|0;ue=e;q[c>>2]=0;q[d>>2]=0;a=q[a+8>>2];n[q[q[a>>2]+20>>2]](e+8|0,a,b);a=q[e+8>>2];if(a){b=n[q[q[a>>2]+32>>2]](a)|0;q[d>>2]=b;d=c;c=_S(b);q[d>>2]=c;n[q[q[a>>2]+20>>2]](a,c,b)|0;n[q[q[a>>2]+8>>2]](a)|0;f=1}ue=e+16|0;return f|0}function Qm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}a=kl(a,e+12|0);Mk(q[a+8>>2],c);o[a+20|0]=1}ue=e+16|0}function RF(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a>>2]=344712;b=q[a+20>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+20>>2]=0}q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}b=q[a+16>>2];d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,d,b<<1);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}ue=c+16|0;return a|0}function an(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=r[q[kl(a,d+12|0)+8>>2]+72|0]!=0}ue=d+16|0;return f|0}function Kv(a,b,c){var d=0;d=q[b>>2];if(d){n[q[q[d>>2]>>2]](d)|0}d=q[a+276>>2];if(d){n[q[q[d>>2]+8>>2]](d)|0;q[a+276>>2]=0}q[a+276>>2]=q[b>>2];b=q[c+4>>2];q[a+280>>2]=q[c>>2];q[a+284>>2]=b;b=q[c+12>>2];q[a+288>>2]=q[c+8>>2];q[a+292>>2]=b;b=q[c+20>>2];q[a+296>>2]=q[c+16>>2];q[a+300>>2]=b}function Dh(a){var b=0,c=0;a:{if(q[a>>2]!=4){break a}c=q[a+4>>2];if(c){b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+4>>2]=0}c=q[a+8>>2];if(!c){break a}b=q[c+68>>2];if(b){q[c+72>>2]=b;_U(b)}b=q[c+24>>2];if(b){q[c+28>>2]=b;_U(b)}_U(c);q[a+8>>2]=0}}function mn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}g=kl(a,e+12|0),h=c,o[g+18|0]=h}ue=e+16|0}function _m(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}g=kl(a,e+12|0),h=c,o[g+16|0]=h}ue=e+16|0}function Ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}g=kl(a,e+12|0),h=c,o[g+17|0]=h}ue=e+16|0}function Cm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=q[q[kl(a,d+12|0)+8>>2]+76>>2]}ue=d+16|0;return f|0}function Oy(a,b,c){var d=0;d=q[a+4>>2];q[d+304>>2]=q[d+304>>2]+1;q[d+308>>2]=q[d+308>>2]+(b<<2);d=q[a+204>>2]==4?5125:5123;if(!n[q[q[a>>2]+160>>2]](a)){Da(4,w(b,6)|0,d|0,w(w(q[a+204>>2],c>>>2|0),6)|0);return}if((n[q[q[a>>2]+160>>2]](a)|0)==1){Da(1,b<<3,d|0,w(q[a+204>>2],c>>>2|0)<<3)}}function Am(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=q[q[kl(a,d+12|0)+8>>2]+4>>2]}ue=d+16|0;return f|0}function YL(a,b,c){var d=0,e=x(0),f=0;d=ue-16|0;ue=d;a:{if((a|0)!=(b|0)){f=q[91802];q[91802]=0;fM();e=XK(a,d+12|0);a=q[91802];b:{if(a){if(q[d+12>>2]!=(b|0)){break b}if((a|0)!=68){break a}q[c>>2]=4;break a}q[91802]=f;if(q[d+12>>2]==(b|0)){break a}}}q[c>>2]=4;e=x(0)}ue=d+16|0;return e}function SF(a){a=a|0;var b=0,c=0,d=0;c=ue-16|0;ue=c;q[a>>2]=344712;b=q[a+20>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+20>>2]=0}q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}b=q[a+16>>2];d=q[a+8>>2];xt(c);n[q[c+8>>2]](c,d,b<<1);b=q[q[c+12>>2]+4>>2];if(!b){break a}n[b](q[c>>2])}_U(a);ue=c+16|0}function hL(a,b,c){var d=0,e=0,f=0,g=0;f=ue-16|0;ue=f;e=VG(b,c);if(e>>>0<=1073741807){a:{if(e>>>0<=1){YO(a,e);d=a;break a}g=PS(e)+1|0;d=QS(g);AS(a,d);BS(a,g);uo(a,e)}while(1){if((b|0)!=(c|0)){KI(d,b);d=d+4|0;b=b+4|0;continue}break}q[f+12>>2]=0;KI(d,f+12|0);ue=f+16|0;return}kT();F()}function dL(a,b,c){var d=0,e=0,f=0,g=0;f=ue-16|0;ue=f;e=OS(b,c);if(e>>>0<=4294967279){a:{if(e>>>0<=10){YO(a,e);d=a;break a}g=yS(e)+1|0;d=zS(g);AS(a,d);BS(a,g);uo(a,e)}while(1){if((b|0)!=(c|0)){XO(d,b);d=d+1|0;b=b+1|0;continue}break}o[f+15|0]=0;XO(d,f+15|0);ue=f+16|0;return}kT();F()}function ik(a){var b=0;b=a+23056|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;b=a+23048|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;o[b+4|0]=0;o[b+5|0]=0;o[b+6|0]=0;o[b+7|0]=0;b=a+23040|0;o[b|0]=0;o[b+1|0]=0;o[b+2|0]=0;o[b+3|0]=0;o[b+4|0]=0;o[b+5|0]=0;o[b+6|0]=0;o[b+7|0]=0;return a}function Vp(a,b){var c=0,d=0,e=0,f=0;p[a+832>>1]=257;d=_S(16);c=d;q[c>>2]=0;q[c+4>>2]=0;q[c+8>>2]=0;q[c+12>>2]=0;e=a+792|0;f=q[e>>2];q[e>>2]=c;if(f){_U(f);d=q[a+792>>2]}o[a+816|0]=1;c=q[b+12>>2];q[d+8>>2]=q[b+8>>2];q[d+12>>2]=c;c=q[b+4>>2];q[d>>2]=q[b>>2];q[d+4>>2]=c;o[a+769|0]=1}function Zm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=r[kl(a,d+12|0)+16|0]!=0}ue=d+16|0;return f|0}function Xm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=r[kl(a,d+12|0)+17|0]!=0}ue=d+16|0;return f|0}function sl(a,b){var c=0;c=ue-16|0;ue=c;a:{if(!b){break a}sl(a,q[b>>2]);sl(a,q[b+4>>2]);a=q[q[b+104>>2]+4>>2];if(a){n[a](q[b+92>>2])}a=q[b- -64>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+64>>2]=0}zt(c);n[q[c+8>>2]](c,b,352);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function jn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}uo(q[kl(a,e+12|0)+8>>2]+32|0,c)}ue=e+16|0}function xm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}f=kl(a,d+12|0),g=1,o[f+23|0]=g}ue=d+16|0}function vm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=ue-16|0;ue=d;q[d+12>>2]=b;c=q[a+468>>2];a:{if(!c){break a}a=a+464|0;while(1){b:{e=q[c+32>>2];if((e|0)<=(b|0)){if((e|0)>=(b|0)){break b}c=c+4|0}c=q[c>>2];if(c){continue}break a}break}a=kl(a,d+12|0);o[a+19|0]=1;o[a+22|0]=1}ue=d+16|0}function ul(a,b){var c=0,d=0,e=0,f=0;n[q[q[b>>2]>>2]](b)|0;c=q[a+140>>2];d=c+q[a+136>>2]|0;e=q[a+124>>2];f=q[a+128>>2]-e|0;if((d|0)==((f?(f<<8)+ -1|0:0)|0)){ql(a+120|0);e=q[a+124>>2];c=q[a+140>>2];d=c+q[a+136>>2]|0}q[q[(d>>>8&16777212)+e>>2]+((d&1023)<<2)>>2]=b;q[a+140>>2]=c+1}function $L(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;a:{if((a|0)!=(b|0)){f=q[91802];q[91802]=0;fM();e=ZK(a,d+12|0);a=q[91802];b:{if(a){if(q[d+12>>2]!=(b|0)){break b}if((a|0)!=68){break a}q[c>>2]=4;break a}q[91802]=f;if(q[d+12>>2]==(b|0)){break a}}}q[c>>2]=4;e=0}ue=d+16|0;return e}function lK(){var a=0,b=0,c=0;a=ue-16|0;ue=a;a:{if(hb(a+12|0,a+8|0)){break a}b=ZU((q[a+12>>2]<<2)+4|0);q[92588]=b;if(!b){break a}b:{b=ZU(q[a+8>>2]);if(b){c=q[92588];if(c){break b}}q[92588]=0;break a}q[(q[a+12>>2]<<2)+c>>2]=0;if(!ib(q[92588],b|0)){break a}q[92588]=0}ue=a+16|0}function Nq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=q[a+48>>2];e=q[a+44>>2];c=(d-e|0)/24|0;if(c>>>0>>0){Oq(a+44|0,b-c|0);return}if(c>>>0>b>>>0){c=w(b,24)+e|0;if((c|0)!=(d|0)){while(1){b=d+ -24|0;if(o[d+ -13|0]<=-1){_U(q[b>>2])}d=b;if((b|0)!=(c|0)){continue}break}}q[a+48>>2]=c}}function Tm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=ue-16|0;ue=e;q[e+12>>2]=b;d=q[a+468>>2];a:{if(!d){break a}a=a+464|0;while(1){b:{f=q[d+32>>2];if((f|0)<=(b|0)){if((f|0)>=(b|0)){break b}d=d+4|0}d=q[d>>2];if(d){continue}break a}break}Hk(q[kl(a,e+12|0)+8>>2],c)}ue=e+16|0}function KG(a,b){var c=0,d=0,e=0;c=ue-32|0;ue=c;a=LG(c+8|0,a);d=q[a>>2];e=q[a+4>>2];a=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=a;b=q[c+4>>2]+e|0;e=q[c>>2];d=d+e|0;if(d>>>0>>0){b=b+1|0}q[c+16>>2]=d;q[c+20>>2]=b;a=MG(c+24|0,c+16|0);b=q[a+4>>2];a=q[a>>2];ue=c+32|0;we=b;return a}function pk(a){a=a|0;var b=0,c=0;q[a>>2]=4020;qk(a,0);b=q[a+24>>2];if(b){while(1){ul(q[a+12>>2],b);b=q[b+8>>2];if(b){continue}break}b=q[a+24>>2]}if(b){while(1){q[b+4>>2]=0;c=b+8|0;b=q[c>>2];q[c>>2]=0;if(b){continue}break}}q[a+24>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;return a|0}function mU(a){var b=0;if(q[a+76>>2]<0){a:{if(o[a+75|0]==10){break a}b=q[a+20>>2];if(b>>>0>=t[a+16>>2]){break a}q[a+20>>2]=b+1;o[b|0]=10;return}oV(a);return}b:{c:{if(o[a+75|0]==10){break c}b=q[a+20>>2];if(b>>>0>=t[a+16>>2]){break c}q[a+20>>2]=b+1;o[b|0]=10;break b}oV(a)}}function kt(a,b){var c=0;c=q[b>>2];q[a+12>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=c;c=q[b+4>>2];q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=c;b=q[b+8>>2];q[a+60>>2]=1065353216;q[a+52>>2]=0;q[a+56>>2]=0;q[a+44>>2]=0;q[a+48>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=b}function Rm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=x(0);e=a+468|0;a=q[e>>2];a:{if(!a){break a}d=e;while(1){f=q[a+32>>2]<(b|0);d=f?d:a;a=q[(f<<2)+a>>2];if(a){continue}break}if((d|0)==(e|0)|c>>>0>3|q[d+32>>2]>(b|0)){break a}g=u[(q[d+72>>2]+(c<<2)|0)+40>>2]}return x(g)}function ko(a){var b=0;b=q[1322];q[a+40>>2]=q[1321];q[a+44>>2]=b;b=q[1320];q[a+32>>2]=q[1319];q[a+36>>2]=b;b=q[1318];q[a+24>>2]=q[1317];q[a+28>>2]=b;b=q[1316];q[a+16>>2]=q[1315];q[a+20>>2]=b;b=q[1314];q[a+8>>2]=q[1313];q[a+12>>2]=b;b=q[1312];q[a>>2]=q[1311];q[a+4>>2]=b}function RA(a,b,c,d){var e=0;if(!(!q[a+20>>2]|q[c>>2]<2)){e=q[q[q[q[a+8>>2]+72>>2]+36>>2]+ -148>>2]+ -1|0;if(e>>>0<=5){a:{switch(e-2|0){case 3:TA(a,b,c,d);return;case 1:case 2:UA(a,b,c,d);return;case 0:VA(a,b,c,d);return;default:break a}}WA(a,b,c,d);return}XA(a,b,c,d)}}function UF(a){var b=0,c=0;a:{if(t[a+20>>2]<=t[a+28>>2]){break a}n[q[a+36>>2]](a,0,0)|0;if(q[a+20>>2]){break a}return-1}b=q[a+4>>2];c=q[a+8>>2];if(b>>>0>>0){b=b-c|0;n[q[a+40>>2]](a,b,b>>31,1)|0}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;return 0}function Uq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=q[a+60>>2];e=q[a+56>>2];c=d-e>>4;if(c>>>0>>0){Vq(a+56|0,b-c|0);return}if(c>>>0>b>>>0){c=(b<<4)+e|0;if((c|0)!=(d|0)){while(1){b=d+ -16|0;if(o[d+ -5|0]<=-1){_U(q[b>>2])}d=b;if((b|0)!=(c|0)){continue}break}}q[a+60>>2]=c}}function MI(a,b){var c=0,d=0,e=0;c=-1;a:{if((a|0)==-1){break a}e=q[b+76>>2]>=0?1:e;b:{d=q[b+4>>2];c:{if(!d){jG(b);d=q[b+4>>2];if(!d){break c}}if(d>>>0>q[b+44>>2]+ -8>>>0){break b}}if(!e){break a}return-1}c=d+ -1|0;q[b+4>>2]=c;o[c|0]=a;q[b>>2]=q[b>>2]&-17;c=a}return c}function zJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:{if(!r[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if(((f=a,g=oH(o[b|0]),e=q[q[a>>2]+52>>2],n[e](f|0,g|0)|0)|0)==-1){return d|0}else{b=b+1|0;d=d+1|0;continue}}}c=qV(b,1,c,q[a+32>>2])}return c|0}function oG(a,b){var c=0,d=0,e=0,f=0;c=r[a+1|0];e=(c|0)!=0;a:{if(!c){break a}c=c|r[a|0]<<8;f=r[b+1|0]|r[b|0]<<8;if((c|0)==(f|0)){break a}b=a+1|0;while(1){a=b;d=r[a+1|0];e=(d|0)!=0;if(!d){break a}b=a+1|0;c=d|c<<8&65280;if((f|0)!=(c|0)){continue}break}}return e?a:0}function qp(a,b){var c=0;c=q[a+28>>2];a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]>>2]](a)|0}b=q[c+124>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+124>>2]=0}q[c+124>>2]=a;if(a){n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}}function gC(a){a=a|0;var b=0;Yv(34962,q[a+40>>2]);a:{if(r[a+36|0]){b=q[a+52>>2];if(b){oa(34962,b|0,q[a+20>>2],q[a+24>>2]);break a}_v(34962,q[a+16>>2],q[a+24>>2],35040);break a}_v(34962,q[a+20>>2],q[a+24>>2],35040)}Yv(34962,0);o[a+56|0]=0;o[a+28|0]=0;q[a+24>>2]=0}function nE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;b=_S(20);q[b+12>>2]=0;q[b>>2]=342732;q[b+4>>2]=1;q[b+16>>2]=d;q[b+8>>2]=c;q[b+4>>2]=q[b+4>>2]+1;q[e>>2]=b;lE(e+8|0,e);q[a>>2]=q[e+8>>2];n[q[q[b>>2]+8>>2]](b)|0;n[q[q[b>>2]+8>>2]](b)|0;ue=e+16|0}function iE(a,b){var c=0;q[a>>2]=342504;q[a+4>>2]=1;q[a+8>>2]=0;c=q[b>>2];a:{if(!c){break a}n[q[q[c>>2]>>2]](c)|0;c=q[a+8>>2];if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}b=q[b>>2];q[a+8>>2]=b;if(!b){b=_S(8);q[b>>2]=0;q[b+4>>2]=1;q[b>>2]=1768;q[a+8>>2]=b}}function bk(a,b,c,d){var e=0;a:{if(!r[q[a+148>>2]+28|0]){break a}e=q[a+148>>2];if(q[e+140>>2]&-3?0:!(q[e+136>>2]&q[q[q[a+152>>2]+20>>2]+76>>2])){break a}if(q[q[a+144>>2]+580>>2]!=q[a+1400>>2]){Mj(a,x(0))}e=q[a+148>>2];n[q[q[e>>2]+68>>2]](e,a,b,c,q[a+144>>2],d)}}function Pl(a,b){var c=0,d=0,e=0,f=0;Ok(b);c=q[a+116>>2];d=c+q[a+112>>2]|0;e=q[a+100>>2];f=q[a+104>>2]-e|0;if((d|0)==((f?(f<<8)+ -1|0:0)|0)){ql(a+96|0);e=q[a+100>>2];c=q[a+116>>2];d=c+q[a+112>>2]|0}q[q[(d>>>8&16777212)+e>>2]+((d&1023)<<2)>>2]=b;q[a+116>>2]=c+1}function op(a,b){var c=0;c=q[a+28>>2];a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]>>2]](a)|0}b=q[c+96>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+96>>2]=0}q[c+96>>2]=a;if(a){n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}}function mp(a,b){var c=0;c=q[a+28>>2];a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]>>2]](a)|0}b=q[c+68>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+68>>2]=0}q[c+68>>2]=a;if(a){n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}}function kp(a,b){var c=0;c=q[a+28>>2];a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]>>2]](a)|0}b=q[c+40>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+40>>2]=0}q[c+40>>2]=a;if(a){n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}}function ip(a,b){var c=0;c=q[a+28>>2];a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]>>2]](a)|0}b=q[c+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+12>>2]=0}q[c+12>>2]=a;if(a){n[q[q[a>>2]+8>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}}function df(a,b){var c=0;q[a>>2]=1380;q[a+4>>2]=1;q[a+8>>2]=0;c=q[b>>2];a:{if(!c){break a}n[q[q[c>>2]>>2]](c)|0;c=q[a+8>>2];if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}b=q[b>>2];q[a+8>>2]=b;if(!b){b=_S(8);q[b>>2]=0;q[b+4>>2]=1;q[b>>2]=1768;q[a+8>>2]=b}}function ZB(a,b,c){var d=0,e=0;d=ue-16|0;ue=d;e=_S(60);q[d+8>>2]=q[c>>2];c=q[c+4>>2];q[d+12>>2]=c;a:{if(!c){UB(e,a,b,d+8|0);break a}q[c+4>>2]=q[c+4>>2]+1;UB(e,a,b,d+8|0);a=q[c+4>>2];q[c+4>>2]=a+ -1;if(a){break a}n[q[q[c>>2]+8>>2]](c);WS(c)}ue=d+16|0;return e}function KU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(CU(a,q[b+8>>2],0)){GU(b,c,d);return}e=q[a+12>>2];f=a+16|0;JU(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){JU(a,b,c,d);if(r[b+54|0]){break a}a=a+8|0;if(a>>>0>>0){continue}break}}}function tK(a,b){var c=0,d=0,i=0;h(+a);c=e(1)|0;d=e(0)|0;i=c;c=c>>>20&2047;if((c|0)!=2047){if(!c){c=b;if(a==0){b=0}else{a=tK(a*0x10000000000000000,b);b=q[b>>2]+ -64|0}q[c>>2]=b;return a}q[b>>2]=c+ -1022;f(0,d|0);f(1,i&-2146435073|1071644672);a=+g()}return a}function Tx(a,b){var c=0;c=ue-16|0;ue=c;Bu(a);o[a+324|0]=1;q[a+320>>2]=b;q[a>>2]=191004;if((n[q[q[b>>2]+244>>2]](b)|0)!=1){a:{b=q[a+320>>2];if((n[q[q[b>>2]+244>>2]](b)|0)!=3){break a}}}q[c+12>>2]=0;ta(2886,c+12|0);if(q[c+12>>2]==2304){o[a+324|0]=0}ue=c+16|0}function TD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=341768;c=a+ -4|0;q[c>>2]=341744;a=a+8|0;a:{if(!q[a>>2]){break a}RD(a);a=q[c+12>>2];d=q[c+20>>2];xt(b);n[q[b+8>>2]](b,a,d-a|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}ue=b+16|0;return c|0}function fL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=q[b>>2];g=q[d>>2];if((f|0)<(g|0)){break a}if((g|0)<(f|0)){return 1}else{d=d+4|0;b=b+4|0;continue}}break}a=(b|0)!=(c|0)}return a|0}function en(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=a+468|0;a=q[d>>2];a:{if(!a){break a}c=d;while(1){e=q[a+32>>2]<(b|0);c=e?c:a;a=q[(e<<2)+a>>2];if(a){continue}break}if((c|0)==(d|0)|q[c+32>>2]>(b|0)){break a}f=q[c+256>>2];g=q[c+260>>2]}we=g;return f|0}function dn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:{if(c>>>0>31){break a}e=a+468|0;a=q[e>>2];if(!a){break a}d=e;while(1){f=q[a+32>>2]<(b|0);d=f?d:a;a=q[(f<<2)+a>>2];if(a){continue}break}if((d|0)==(e|0)|q[d+32>>2]>(b|0)){break a}q[q[d+72>>2]+64>>2]=c}}function lQ(a){var b=0,c=0;c=ue-32|0;ue=c;a:{if(q[tS(372176)>>2]-q[93045]>>2>>>0>=a>>>0){WP(a);break a}b=rS(372176);b=GS(c+8|0,FS(XP(372176)+a|0),XP(372176),b);HS(b,a);IS(b);MS(b,q[b+4>>2]);if(q[b>>2]){CS(JS(b),q[b>>2],q[jg(b)>>2]-q[b>>2]>>2)}}ue=c+32|0}function aL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=o[b|0];g=o[d|0];if((f|0)<(g|0)){break a}if((g|0)<(f|0)){return 1}else{d=d+1|0;b=b+1|0;continue}}break}a=(b|0)!=(c|0)}return a|0}function tA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=ue-128|0;ue=d;a:{if(!q[a+28>>2]){break a}e=q[a+20>>2];if((q[a+32>>2]+(q[b+16>>2]<<1)|0)>(n[q[q[e>>2]+64>>2]](e)|0)){break a}e=q[a+20>>2];n[q[q[e>>2]+76>>2]](d,e);uA(a,b,c,ht(d- -64|0,d))}ue=d+128|0}function tj(a,b,c){var d=x(0),e=x(0),f=x(0);d=x(n[q[q[c>>2]+16>>2]](c,u[b+44>>2],u[b+40>>2]));e=x(n[q[q[c>>2]+16>>2]](c,u[b+88>>2],u[b+84>>2]));f=x(n[q[q[c>>2]+16>>2]](c,u[b+132>>2],u[b+128>>2]));q[a+12>>2]=1065353216;u[a+8>>2]=f;u[a+4>>2]=e;u[a>>2]=d}function tW(a,b,c,d){var e=0,f=0,g=0,h=0;e=b;f=e>>31;e=e>>31;a=a^e;g=a-e|0;h=(b^f)-((a>>>0>>0)+f|0)|0;e=d;f=e>>31;e=e>>31;a=c^e;e=xW(g,h,a-e|0,(d^f)-((a>>>0>>0)+f|0)|0);b=b^d;c=b>>31;a=b>>31;b=e^a;d=b-a|0;we=(c^we)-((b>>>0>>0)+c|0)|0;return d}function jG(a){var b=0,c=0;b=r[a+74|0];o[a+74|0]=b+ -1|b;if(t[a+20>>2]>t[a+28>>2]){n[q[a+36>>2]](a,0,0)|0}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;b=q[a>>2];if(b&4){q[a>>2]=b|32;return-1}c=q[a+44>>2]+q[a+48>>2]|0;q[a+8>>2]=c;q[a+4>>2]=c;return b<<27>>31}function cE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;a=ue-48|0;ue=a;e=yp(a+32|0);Cp(a,c,b);Jp(e,a);q[a>>2]=q[e>>2];q[a+4>>2]=q[e+4>>2];q[a+8>>2]=q[e+8>>2];q[a+12>>2]=q[d>>2];q[a+16>>2]=q[d+4>>2];q[a+20>>2]=q[d+8>>2];La(4100,b|0);La(4111,a|0);ue=a+48|0}function UD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=341768;c=a+ -4|0;q[c>>2]=341744;a=a+8|0;a:{if(!q[a>>2]){break a}RD(a);a=q[c+12>>2];d=q[c+20>>2];xt(b);n[q[b+8>>2]](b,a,d-a|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}_U(c);ue=b+16|0}function Pk(a){var b=0,c=0,d=0,e=0;c=q[a+184>>2];if(c){while(1){b=q[a+176>>2];if(b){q[b+4>>2]=0;e=b+8|0;d=q[e>>2];q[e>>2]=0;if(d){q[d+4>>2]=0}q[a+176>>2]=d;q[a+184>>2]=c+ -1}Jk(q[a+12>>2]);if(q[b+820>>2]<=1){_j(b)}c=q[a+184>>2];if(c){continue}break}}}function JG(){var a=0,b=0,c=0,d=0,e=0,f=0;a=ue-48|0;ue=a;if(fb(1,a+32|0)){TG();F()}e=a,f=KG(IG(a+16|0,a+32|0),IG(a+8|0,a+32|4)),q[e+24>>2]=f;q[a+28>>2]=we;c=a+24|0;d=q[c+4>>2];b=a+40|0;q[b>>2]=q[c>>2];q[b+4>>2]=d;ue=a+48|0;we=q[b+4>>2];return q[b>>2]}function oV(a){var b=0,c=0,d=0;b=ue-16|0;ue=b;o[b+15|0]=10;c=q[a+16>>2];a:{if(!c){if(nV(a)){break a}c=q[a+16>>2]}d=q[a+20>>2];if(!(o[a+75|0]==10|d>>>0>=c>>>0)){q[a+20>>2]=d+1;o[d|0]=10;break a}if((n[q[a+36>>2]](a,b+15|0,1)|0)!=1){break a}}ue=b+16|0}function UG(a,b,c){var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;b=VG(a,b);while(1){if(b){q[d+12>>2]=a;e=d+12|0;f=e;g=q[e>>2];e=b>>>1|0;q[f>>2]=g+(e<<2);if(WG(q[d+12>>2],c)){a=q[d+12>>2]+4|0;q[d+12>>2]=a;b=(e^-1)+b|0}else{b=e}continue}break}ue=d+16|0;return a}function QD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a+4>>2]=341768;q[a>>2]=341744;a:{if(!q[a+12>>2]){break a}RD(a+12|0);d=q[a+20>>2];c=q[a+12>>2];xt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function OD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=341588;c=a+ -4|0;q[c>>2]=341564;a=q[a+8>>2];a:{if(!a){break a}q[c+16>>2]=a;d=q[c+20>>2];xt(b);n[q[b+8>>2]](b,a,d-a|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}ue=b+16|0;return c|0}function zC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;if(!(!b|!c)){q[e+12>>2]=0;ta(34964,e+12|0);Yv(34962,q[a+12>>2]);kV(q[a+16>>2]+d|0,b,c);b=q[a+16>>2];_v(34962,q[a+20>>2]-b|0,b,r[a+36|0]?35048:35044);Yv(34962,q[e+12>>2])}ue=e+16|0}function fn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;a:{f=a+468|0;a=q[f>>2];if(!a){break a}e=f;while(1){g=q[a+32>>2]<(b|0);e=g?e:a;a=q[(g<<2)+a>>2];if(a){continue}break}if((e|0)==(f|0)|q[e+32>>2]>(b|0)){break a}q[e+256>>2]=c;q[e+260>>2]=d}}function Rz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337712;Mr(a+120|0);Mr(a+36|0);c=q[a+24>>2];a:{if(!c){break a}q[a+28>>2]=c;d=q[a+32>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function Np(a){var b=0,c=0,d=0;c=ue-16|0;ue=c;d=_S(4);b=_S(24);gU(b);gU(b+12|0);q[d>>2]=b;b=_S(8);q[b+4>>2]=a;q[b>>2]=d;d=K(c+8|0,0,325,b|0)|0;a:{if(!d){if(q[a>>2]){break a}q[a>>2]=q[c+8>>2];q[c+8>>2]=0;YT(c+8|0);ue=c+16|0;return}TG();F()}vU();F()}function KD(a,b){a=a|0;b=b|0;q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;o[a+11|0]=6;b=r[341512]|r[341513]<<8|(r[341514]<<16|r[341515]<<24);o[a|0]=b;o[a+1|0]=b>>>8;o[a+2|0]=b>>>16;o[a+3|0]=b>>>24;b=r[341516]|r[341517]<<8;o[a+4|0]=b;o[a+5|0]=b>>>8;o[a+6|0]=0}function FD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;b=q[b>>2];if(!b){return 0}a=b+8|0;g=q[a>>2];f=q[b+12>>2]-g|0;a:{if(f>>>0>>0){LC(a,c-f|0);break a}if(f>>>0<=c>>>0){break a}q[(b+ -4|0)+16>>2]=c+g}if(e){kV(q[a>>2]+d|0,e,c)}return 1}function $M(a,b,c,d){var e=0;if(d&2048){o[a|0]=43;a=a+1|0}if(d&512){o[a|0]=35;a=a+1|0}while(1){e=r[b|0];if(e){o[a|0]=e;a=a+1|0;b=b+1|0;continue}break}e=d&74;b=111;a:{if((e|0)==64){break a}b=d&16384?88:120;if((e|0)==8){break a}b=c?100:117}o[a|0]=b}function $U(a,b){var c=0,d=0;if(!a){return ZU(b)}if(b>>>0>=4294967232){q[91802]=48;return 0}c=aV(a+ -8|0,b>>>0<11?16:b+11&-8);if(c){return c+8|0}c=ZU(b);if(!c){return 0}d=q[a+ -4>>2];d=(d&3?-4:-8)+(d&-8)|0;kV(c,a,d>>>0>>0?d:b);_U(a);return c}function gF(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0;f=ue-16|0;ue=f;if(b){n[q[q[b>>2]>>2]](b)|0}q[f+8>>2]=b;a=q[a>>2];b=n[q[q[a>>2]+392>>2]](a,f+8|0,c,d,e)|0;a=q[f+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[f+8>>2]=0}ue=f+16|0;return b|0}function UK(a,b,c,d,e){var f=0;f=ue-144|0;ue=f;q[f+44>>2]=a;q[f+4>>2]=a;q[f>>2]=0;q[f+76>>2]=-1;q[f+8>>2]=(a|0)<0?-1:a+2147483647|0;GJ(f,0,0);c=KJ(f,c,1,d,e);d=we;if(b){q[b>>2]=((q[f+4>>2]+q[f+120>>2]|0)-q[f+8>>2]|0)+a}ue=f+144|0;we=d;return c}function SD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a+4>>2]=341768;q[a>>2]=341744;a:{if(!q[a+12>>2]){break a}RD(a+12|0);d=q[a+20>>2];c=q[a+12>>2];xt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function PD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=341588;c=a+ -4|0;q[c>>2]=341564;a=q[a+8>>2];a:{if(!a){break a}q[c+16>>2]=a;d=q[c+20>>2];xt(b);n[q[b+8>>2]](b,a,d-a|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}_U(c);ue=b+16|0}function Hv(a,b,c){if(c>>>0<=1){if(c-1){q[a>>2]=0;c=q[b+264>>2];if(!c){q[a>>2]=c;return}n[q[q[c>>2]>>2]](c)|0;q[a>>2]=q[b+264>>2];return}q[a>>2]=0;c=q[b+268>>2];if(!c){q[a>>2]=c;return}n[q[q[c>>2]>>2]](c)|0;q[a>>2]=q[b+268>>2];return}q[a>>2]=0}function wV(a){a=a|0;var b=0;b=ZU(sV(a)+1|0);NK(b,a);a=nG(b,366296);if(a){o[a|0]=0}a=nG(b,366300);if(a){o[a|0]=0}a=nG(b,366304);if(a){o[a|0]=0}a=nG(b,366308);if(a){o[a|0]=0}a=nG(b,366314);if(a){o[a|0]=0}a=vV(b);if(!a){a=uV(b)}_U(b);return a|0}function fk(a,b,c){var d=0;d=a;a:{b:{if(c>>>0<=1){if(c-1){break b}a=b+48|0;c=q[b+148>>2]+2716|0;break a}q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;return}a=b+16|0;c=q[b+148>>2]+2668|0}gk(d,c,a,q[q[b+152>>2]+20>>2],u[b+828>>2],u[b+824>>2])}function Sz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337712;Mr(a+120|0);Mr(a+36|0);c=q[a+24>>2];a:{if(!c){break a}q[a+28>>2]=c;d=q[a+32>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function Rp(a,b,c,d,e,f){q[a+4>>2]=0;q[a+8>>2]=0;a:{if(b>>>0>1){break a}if(b-1){b=_S(2052);ss(b,c,d,f);c=q[a+8>>2];q[a+8>>2]=b;if(!c){break a}_U(c);u[a>>2]=e;return}b=_S(1556);Sp(b,c,d,f);c=q[a+4>>2];q[a+4>>2]=b;if(!c){break a}_U(c)}u[a>>2]=e}function fq(a){var b=0,c=0,d=0,e=0;b=q[a+4>>2];a:{if(!b){break a}c=a+4|0;a=c;while(1){d=q[b+16>>2]<10;a=d?a:b;b=q[(d<<2)+b>>2];if(b){continue}break}if((a|0)==(c|0)|q[a+16>>2]>10){break a}a=q[a+20>>2];e=(n[q[q[a>>2]+24>>2]](a,0)|0)>0}return e}function Pp(a,b){var c=0,d=0,e=0,f=0;d=q[b+8>>2];e=q[b+4>>2];c=q[b>>2];b=q[b+12>>2];f=q[b>>2];if(f){c=n[f](c)|0}q[a+12>>2]=d;d=q[a+4>>2];q[a+4>>2]=c;q[a+8>>2]=e;c=a+16|0;e=q[c>>2];q[c>>2]=b;b=q[e+4>>2];if(b){n[b](d)}o[a+144|0]=1;o[a+145|0]=0}function MD(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a+4>>2]=341588;q[a>>2]=341564;c=q[a+12>>2];a:{if(!c){break a}q[a+16>>2]=c;d=q[a+20>>2];xt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function cR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;while(1){a:{if((c|0)==(d|0)|g>>>0>=e>>>0){break a}f=dR(c,d-c|0,b,q[a+8>>2]);h=f+2|0;if(h>>>0<=2){f=1;if(h-2){break a}}g=g+1|0;i=f+i|0;c=c+f|0;continue}break}return i|0}function nn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=a+468|0;a=q[d>>2];a:{if(!a){break a}c=d;while(1){e=q[a+32>>2]<(b|0);c=e?c:a;a=q[(e<<2)+a>>2];if(a){continue}break}if((c|0)==(d|0)|q[c+32>>2]>(b|0)){break a}f=q[q[c+72>>2]+68>>2]}return f|0}function cn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=a+468|0;a=q[d>>2];a:{if(!a){break a}c=d;while(1){e=q[a+32>>2]<(b|0);c=e?c:a;a=q[(e<<2)+a>>2];if(a){continue}break}if((c|0)==(d|0)|q[c+32>>2]>(b|0)){break a}f=q[q[c+72>>2]+64>>2]}return f|0}function Wp(a,b,c,d,e){var f=0,g=0,h=0;p[a+832>>1]=257;f=_S(16);q[f>>2]=0;q[f+4>>2]=0;q[f+8>>2]=0;q[f+12>>2]=0;g=a+796|0;h=q[g>>2];q[g>>2]=f;if(h){_U(h);f=q[a+796>>2]}o[a+816|0]=1;u[f+12>>2]=e;u[f+8>>2]=d;u[f+4>>2]=c;u[f>>2]=b;o[a+769|0]=1}function NP(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;b=ue-32|0;ue=b;e=CL(b+16|0);c=b+8|0;QP(c);q[c>>2]=356724;OP(c,KP(e),kM(f),kM(f)+(uL(f)<<2)|0);c=kM(e);d=CL(a);a=b+8|0;QP(a);q[a>>2]=356820;PP(a,KP(d),c,sV(c)+c|0);oT(e);ue=b+32|0}function fE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;b=ue-16|0;ue=b;e=_S(12);q[b+8>>2]=0;f=b;d=q[c>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[c>>2]}q[f+8>>2]=d;iE(e,b+8|0);c=q[b+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[b+8>>2]=0}q[a>>2]=e;ue=b+16|0}function Qp(a){var b=0,c=0,d=0;b=ue-16|0;ue=b;q[b+8>>2]=a+20;o[b+12|0]=1;if(!(o[a+145|0]&1)){while(1){OG(b+8|0);if(!(o[a+145|0]&1)){continue}break}}q[a+12>>2]=194;c=a+16|0;d=q[c>>2];q[c>>2]=4896;c=q[d+4>>2];if(c){n[c](q[a+4>>2])}ue=b+16|0}function Ul(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=q[b+8>>2];f=q[b+4>>2];c=q[b>>2];b=q[b+12>>2];e=q[b>>2];if(e){c=n[e](c)|0}q[a+616>>2]=d;d=q[a+608>>2];q[a+608>>2]=c;q[a+612>>2]=f;a=a+620|0;c=q[a>>2];q[a>>2]=b;a=q[c+4>>2];if(a){n[a](d)}}function NT(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;if(1073741807>=b>>>0){a:{if(b>>>0<=1){YO(a,b);e=a;break a}f=PS(b)+1|0;e=QS(f);AS(a,e);BS(a,f);uo(a,b)}a=e;f=b;if(b){bT(a,c,f)}q[d+12>>2]=0;KI((b<<2)+e|0,d+12|0);ue=d+16|0;return}kT();F()}function ND(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a+4>>2]=341588;q[a>>2]=341564;c=q[a+12>>2];a:{if(!c){break a}q[a+16>>2]=c;d=q[a+20>>2];xt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function xk(a,b){var c=0;c=q[a+16>>2];a:{if((n[q[q[c>>2]+12>>2]](c)|0)==-1){break a}c=q[a+36>>2];if(!c){break a}while(1){Vk(c,b);c=q[c+316>>2];if(c){continue}break}}c=q[a+24>>2];if(c){while(1){xk(c,b);c=q[c+8>>2];if(c){continue}break}}}function gn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=x(0);d=a+468|0;a=q[d>>2];a:{if(!a){break a}c=d;while(1){e=q[a+32>>2]<(b|0);c=e?c:a;a=q[(e<<2)+a>>2];if(a){continue}break}if((c|0)==(d|0)|q[c+32>>2]>(b|0)){break a}f=u[c+224>>2]}return x(f)}function KC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;if(!(!b|!c)){kV(q[a+20>>2]+d|0,b,c);q[e+12>>2]=0;ta(34965,e+12|0);Yv(34963,q[a+16>>2]);b=q[a+24>>2];a=q[a+20>>2];_v(34963,b-a|0,a,35044);Yv(34963,q[e+12>>2])}ue=e+16|0}function JC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;if(!(!b|!c)){kV(q[a+24>>2]+d|0,b,c);q[e+12>>2]=0;ta(34965,e+12|0);Yv(34963,q[a+20>>2]);b=q[a+28>>2];a=q[a+24>>2];_v(34963,b-a|0,a,35044);Yv(34963,q[e+12>>2])}ue=e+16|0}function rB(a,b,c){var d=0,e=0,f=0;e=ue-16|0;ue=e;d=q[b>>2];a:{if(!d){b=0;break a}f=_S(76);n[q[q[d+4>>2]>>2]](d+4|0)|0;d=q[b>>2];q[e+8>>2]=d;b=qB(f,a,e+8|0,c);if(!d){break a}n[q[q[d+4>>2]+8>>2]](d+4|0)|0;q[e+8>>2]=0}ue=e+16|0;return b}function mK(a,b,c){var d=0,e=0,f=0;if(!c){return 0}d=r[a|0];a:{if(!d){break a}while(1){b:{e=r[b|0];if((e|0)!=(d|0)){break b}c=c+ -1|0;if(!c|!e){break b}b=b+1|0;d=r[a+1|0];a=a+1|0;if(d){continue}break a}break}f=d}return(f&255)-r[b|0]|0}function Rt(a){a=a|0;var b=0,c=0,d=0;c=q[a+44>>2];b=q[a+24>>2];if(c>>>0>>0){q[a+44>>2]=b;c=b}d=-1;a:{if(!(r[a+48|0]&8)){break a}b=q[a+16>>2];if(b>>>0>>0){q[a+16>>2]=c;b=c}a=q[a+12>>2];if(a>>>0>=b>>>0){break a}d=r[a|0]}return d|0}function up(a,b){var c=0;c=ue-16|0;ue=c;a:{if(!b){break a}up(a,q[b>>2]);up(a,q[b+4>>2]);a=q[b+584>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+584>>2]=0}xt(c);n[q[c+8>>2]](c,b,592);a=q[q[c+12>>2]+4>>2];if(!a){break a}n[a](q[c>>2])}ue=c+16|0}function qv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=ue-16|0;ue=d;e=q[a+4>>2];q[d+8>>2]=0;f=d;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[f+8>>2]=a;Kv(e,d+8|0,c);a=q[d+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d+8>>2]=0}ue=d+16|0}function on(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:{e=a+468|0;a=q[e>>2];if(!a){break a}d=e;while(1){f=q[a+32>>2]<(b|0);d=f?d:a;a=q[(f<<2)+a>>2];if(a){continue}break}if((d|0)==(e|0)|q[d+32>>2]>(b|0)){break a}q[q[d+72>>2]+68>>2]=c}}function Qe(a,b){var c=0;q[a>>2]=1032;q[a+4>>2]=1;q[a+8>>2]=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0;c=q[a+8>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}q[a+8>>2]=q[b>>2];return}b=_S(8);q[b>>2]=0;q[b+4>>2]=1;q[b>>2]=1768;q[a+8>>2]=b}function lj(a,b){var c=0,d=0,e=0;u[a+36>>2]=u[a+36>>2]*b;u[a+40>>2]=u[a+40>>2]*b;c=q[a+20>>2];a=q[a+24>>2];if((c|0)!=(a|0)){a=a-c>>2;e=a>>>0>1?a:1;a=0;while(1){d=(a<<2)+c|0;u[d>>2]=u[d>>2]*b;a=a+1|0;if((e|0)!=(a|0)){continue}break}}}function LT(a,b,c){var d=0,e=0,f=0;f=ue-16|0;ue=f;d=mS(a);e=uL(a);a:{if(d-e>>>0>=c>>>0){if(!c){break a}d=kM(a);vH(d+(e<<2)|0,b,c);b=a;a=c+e|0;nS(b,a);q[f+12>>2]=0;KI(d+(a<<2)|0,f+12|0);break a}JT(a,d,(c+e|0)-d|0,e,e,0,c,b)}ue=f+16|0}function GJ(a,b,c){var d=0,e=0,f=0,g=0;q[a+112>>2]=b;q[a+116>>2]=c;f=q[a+8>>2];g=q[a+4>>2];d=f-g|0;e=d>>31;q[a+120>>2]=d;q[a+124>>2]=e;if(!(!(b|c)|((e|0)<(c|0)?1:(e|0)<=(c|0)?d>>>0>b>>>0?0:1:0))){q[a+104>>2]=b+g;return}q[a+104>>2]=f}function $P(a,b){var c=0,d=0,e=0,f=0;c=ue-16|0;ue=c;dQ(a);a=eQ(c+8|0,a);if(XP(372176)>>>0<=b>>>0){fQ(b+1|0)}if(q[cQ(372176,b)>>2]){gQ(q[cQ(372176,b)>>2])}d=gP(a);e=cQ(372176,b),f=d,q[e>>2]=f;b=q[a>>2];q[a>>2]=0;if(b){gQ(b)}ue=c+16|0}function uv(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];a=q[a+4>>2];b=q[b+4>>2];if(b){q[b+4>>2]=q[b+4>>2]+1}q[a+332>>2]=c;c=a+336|0;a=q[c>>2];q[c>>2]=b;a:{if(!a){break a}b=q[a+4>>2];q[a+4>>2]=b+ -1;if(b){break a}n[q[q[a>>2]+8>>2]](a);WS(a)}}function pz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=ue-128|0;ue=d;a:{if(!q[a+16>>2]){break a}e=q[a+8>>2];if(q[a+12>>2]==(n[q[q[e>>2]+64>>2]](e)|0)){break a}e=q[a+8>>2];n[q[q[e>>2]+76>>2]](d,e);qz(a,b,c,ht(d- -64|0,d))}ue=d+128|0}function Js(a,b,c,d,e,f,g,h,i){var j=0,k=0;j=ue-32|0;ue=j;k=q[g+20>>2];q[j+24>>2]=q[g+16>>2];q[j+28>>2]=k;k=q[g+12>>2];q[j+16>>2]=q[g+8>>2];q[j+20>>2]=k;k=q[g+4>>2];q[j+8>>2]=q[g>>2];q[j+12>>2]=k;Ks(a,b,c,d,e,f,j+8|0,h,i);ue=j+32|0}function sw(a,b,c){var d=0,e=0,f=0,g=0,h=0;e=ue-16|0;ue=e;Zv(e+12|0);d=_S(36);f=q[e+12>>2];Tv(d,q[a>>2]);xu(d+8|0,b);q[d+32>>2]=f;q[d+8>>2]=27924;q[d>>2]=27892;q[d+28>>2]=c;g=d,h=_S(w(q[d+12>>2],c)),q[g+24>>2]=h;ue=e+16|0;return d}function DJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a:{if(!r[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if((n[q[q[a>>2]+52>>2]](a,q[b>>2])|0)==-1){return d|0}else{b=b+4|0;d=d+1|0;continue}}}c=qV(b,4,c,q[a+32>>2])}return c|0}function sP(a,b,c){var d=0;d=ue-32|0;ue=d;q[d+16>>2]=b;q[d+24>>2]=a;q[d+8>>2]=c;while(1){a:{a=1;b:{if(!XM(d+24|0,d+16|0)){break b}if(q[q[d+24>>2]>>2]==q[q[d+8>>2]>>2]){break a}a=0}ue=d+32|0;return a}qN(d+24|0);qN(d+8|0);continue}}function vO(a,b,c,d,e,f){a=n[q[q[a+8>>2]+8>>2]](a+8|0)|0;if((uL(a)|0)==(0-uL(a+12|0)|0)){q[e>>2]=q[e>>2]|4;return}a=qM(c,d,a,a+24|0,f,e,0)-a|0;c=q[b>>2];if(!(a|(c|0)!=12)){q[b>>2]=0;return}if(!((a|0)!=12|(c|0)>11)){q[b>>2]=c+12}}function ZN(a,b,c,d,e,f){a=n[q[q[a+8>>2]+8>>2]](a+8|0)|0;if((uL(a)|0)==(0-uL(a+12|0)|0)){q[e>>2]=q[e>>2]|4;return}a=oL(c,d,a,a+24|0,f,e,0)-a|0;c=q[b>>2];if(!(a|(c|0)!=12)){q[b>>2]=0;return}if(!((a|0)!=12|(c|0)>11)){q[b>>2]=c+12}}function FO(a,b,c,d,e,f){var g=0;g=ue-144|0;ue=g;q[g+28>>2]=g+132;AO(a,g+32|0,g+28|0,d,e,f);q[g+16>>2]=0;q[g+20>>2]=0;q[g+12>>2]=g+32;a=GO(b,g+12|0,XG(b,q[c>>2]),g+16|0,q[a>>2]);if((a|0)==-1){TG();F()}q[c>>2]=(a<<2)+b;ue=g+144|0}function uj(a,b,c){var d=0,e=0,f=0;d=a+48|0;if((c|0)>=15){q[a>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);f=4;b=b+4|0}c=hj(a+4|0,b);e=c+b|0;b=hj(d,e);d=b+(c+f|0)|0;b=b+e|0;c=hj(a+92|0,b);return(d+c|0)+hj(a+136|0,b+c|0)|0}function rk(a){a=a|0;var b=0,c=0;q[a>>2]=4020;qk(a,0);b=q[a+24>>2];if(b){while(1){ul(q[a+12>>2],b);b=q[b+8>>2];if(b){continue}break}b=q[a+24>>2]}if(b){while(1){q[b+4>>2]=0;c=b+8|0;b=q[c>>2];q[c>>2]=0;if(b){continue}break}}_U(a)}function kj(a){var b=0,c=0,d=0;u[a+36>>2]=-u[a+36>>2];u[a+40>>2]=-u[a+40>>2];b=q[a+20>>2];a=q[a+24>>2];if((b|0)!=(a|0)){a=a-b>>2;d=a>>>0>1?a:1;a=0;while(1){c=(a<<2)+b|0;u[c>>2]=-u[c>>2];a=a+1|0;if((d|0)!=(a|0)){continue}break}}}function jt(a){q[a+4>>2]=0;q[a+8>>2]=0;u[a>>2]=1;q[a+32>>2]=0;q[a+36>>2]=0;q[a+12>>2]=0;q[a+16>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;u[a+20>>2]=1;q[a+44>>2]=0;q[a+48>>2]=0;u[a+40>>2]=-1;q[a+52>>2]=0;q[a+56>>2]=0;q[a+60>>2]=1065353216}function yT(a,b,c){var d=0,e=0,f=0;f=ue-16|0;ue=f;d=DL(a);e=uL(a);a:{if(d-e>>>0>=c>>>0){if(!c){break a}d=kM(a);kH(d+e|0,b,c);b=c+e|0;nS(a,b);o[f+15|0]=0;XO(b+d|0,f+15|0);break a}sT(a,d,(c+e|0)-d|0,e,e,0,c,b)}ue=f+16|0;return a}function mD(a){var b=0;a=q[a- -64>>2];a:{b:{if(!a){break b}while(1){b=q[a+16>>2];if((b|0)>0){a=q[a>>2];if(a){continue}break b}if((b|0)<0){a=q[a+4>>2];if(a){continue}break b}break}if(a){break a}}kq(341529);F()}return q[a+20>>2]}function ln(a,b,c){a=a|0;b=b|0;c=x(c);var d=0,e=0,f=0;a:{e=a+468|0;a=q[e>>2];if(!a){break a}d=e;while(1){f=q[a+32>>2]<(b|0);d=f?d:a;a=q[(f<<2)+a>>2];if(a){continue}break}if((d|0)==(e|0)|q[d+32>>2]>(b|0)){break a}u[d+244>>2]=c}}function um(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;qp(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function sm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;op(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function qm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;kp(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function om(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;mp(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function ok(a,b,c,d){q[a+4>>2]=0;q[a+8>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+20>>2]=d;q[a+16>>2]=c;q[a+12>>2]=b;q[a>>2]=4020;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;b=q[c+3360>>2];if((b|0)>=0){q[q[d+472>>2]+(b<<2)>>2]=a}return a}function mm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;ip(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function km(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+568>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;gp(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function lz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337504;c=q[a+20>>2];a:{if(!c){break a}q[a+24>>2]=c;d=q[a+28>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function fz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337216;c=q[a+12>>2];a:{if(!c){break a}q[a+16>>2]=c;d=q[a+20>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function Gv(a,b){var c=0,d=0;d=a+264|0;n[q[q[b>>2]+208>>2]](b,d);c=a+268|0;n[q[q[b>>2]+208>>2]](b,c);a=q[a+264>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[d>>2]=0}q[d>>2]=0;a=q[c>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c>>2]=0}q[c>>2]=0}function sW(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=c>>>16|0;f=a>>>16|0;j=w(e,f);g=c&65535;h=a&65535;i=w(g,h);f=(i>>>16|0)+w(f,g)|0;e=(f&65535)+w(e,h)|0;a=(w(b,c)+j|0)+w(a,d)+(f>>>16)+(e>>>16)|0;b=i&65535|e<<16;we=a;return b}function lv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=ue-16|0;ue=c;d=q[a+4>>2];q[c+8>>2]=0;e=c;a=q[b>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b>>2]}q[e+8>>2]=a;Iv(d,c+8|0);a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function eP(a,b,c){var d=0;d=ue-32|0;ue=d;q[d+16>>2]=b;q[d+24>>2]=a;q[d+8>>2]=c;while(1){a:{a=1;b:{if(!XM(d+24|0,d+16|0)){break b}if(r[q[d+24>>2]]==r[q[d+8>>2]]){break a}a=0}ue=d+32|0;return a}YM(d+24|0);YM(d+8|0);continue}}function GS(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=ue-16|0;ue=e;q[e+12>>2]=0;g=a+12|0;sv(g,e+12|0);ZM(g+4|0,d);if(b){f=sS(JS(a),b)}q[a>>2]=f;c=(c<<2)+f|0;q[a+8>>2]=c;q[a+4>>2]=c;h=jg(a),i=(b<<2)+f|0,q[h>>2]=i;ue=e+16|0;return a}function Zf(a,b){var c=0,d=0,e=0,f=0;c=ue-16|0;ue=c;e=_S(12);q[c+8>>2]=0;f=c;d=q[b>>2];if(d){n[q[q[d>>2]>>2]](d)|0;d=q[b>>2]}q[f+8>>2]=d;df(e,c+8|0);b=q[c+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[c+8>>2]=0}q[a>>2]=e;ue=c+16|0}function HT(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;if(1073741807>=c>>>0){a:{if(c>>>0<=1){YO(a,c);e=a;break a}f=PS(c)+1|0;e=QS(f);AS(a,e);BS(a,f);uo(a,c)}vH(e,b,c);q[d+12>>2]=0;KI((c<<2)+e|0,d+12|0);ue=d+16|0;return}kT();F()}function XF(a,b){var c=0,d=0,e=0;c=ue-16|0;ue=c;a:{b:{if(!mG(344768,o[b|0])){q[91802]=28;break b}e=$F(b);q[c>>2]=438;a=WF($a(a|0,e|32768,c|0)|0);if((a|0)<0){break a}d=eG(a,b);if(d){break a}ab(a|0)|0}d=0}ue=c+16|0;return d}function mz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337504;c=q[a+20>>2];a:{if(!c){break a}q[a+24>>2]=c;d=q[a+28>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function gz(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=337216;c=q[a+12>>2];a:{if(!c){break a}q[a+16>>2]=c;d=q[a+20>>2];zt(b);n[q[b+8>>2]](b,c,d-c|0);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function VH(a){var b=0,c=0;b=ue-16|0;ue=b;if(q[(q[q[a>>2]+ -12>>2]+a|0)+24>>2]){c=aI(b+8|0,a);a:{if(!r[c|0]){break a}if((NH(q[(q[q[a>>2]+ -12>>2]+a|0)+24>>2])|0)!=-1){break a}LH(q[q[a>>2]+ -12>>2]+a|0,1)}OH(c)}ue=b+16|0}function DH(a){var b=0,c=0;b=ue-16|0;ue=b;if(q[(q[q[a>>2]+ -12>>2]+a|0)+24>>2]){c=MH(b+8|0,a);a:{if(!r[c|0]){break a}if((NH(q[(q[q[a>>2]+ -12>>2]+a|0)+24>>2])|0)!=-1){break a}LH(q[q[a>>2]+ -12>>2]+a|0,1)}OH(c)}ue=b+16|0}function kG(a){var b=0,c=0,d=0;d=q[a>>2]&1;if(!d){b=q[a+52>>2];if(b){q[b+56>>2]=q[a+56>>2]}c=q[a+56>>2];if(c){q[c+52>>2]=b}if(q[91805]==(a|0)){q[91805]=c}}TF(a);n[q[a+12>>2]](a)|0;b=q[a+96>>2];if(b){_U(b)}if(!d){_U(a)}}function nT(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;if(4294967279>=c>>>0){a:{if(c>>>0<=10){YO(a,c);e=a;break a}f=yS(c)+1|0;e=zS(f);AS(a,e);BS(a,f);uo(a,c)}kH(e,b,c);o[d+15|0]=0;XO(c+e|0,d+15|0);ue=d+16|0;return}kT();F()}function bf(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}c=q[a+16>>2];d=q[a+8>>2];xt(b);n[q[b+8>>2]](b,d,c<<1);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}ue=b+16|0;return a|0}function _P(a){var b=0,c=0,d=0;b=ue-32|0;ue=b;q[b+12>>2]=0;q[b+8>>2]=859;c=q[b+12>>2];q[b>>2]=q[b+8>>2];q[b+4>>2]=c;d=q[b+4>>2];c=b+16|0;q[c+4>>2]=q[b>>2];q[c+8>>2]=d;q[c>>2]=a;qQ(a,c);ue=b+32|0;return q[a+4>>2]+ -1|0}function wn(a){a=a|0;var b=0,c=0;c=q[a>>2];b=q[c+8>>2];a=q[c+4>>2];if(b>>>0>2]-q[a>>2]>>2>>>0){while(1){jk(q[q[a>>2]+(b<<2)>>2]);b=q[c+12>>2]+b|0;a=q[c+4>>2];if(b>>>0>2]-q[a>>2]>>2>>>0){continue}break}}}function gt(a,b){q[a+12>>2]=q[b>>2];q[a+8>>2]=0;q[a>>2]=1065353216;q[a+4>>2]=0;q[a+28>>2]=q[b+4>>2];q[a+24>>2]=0;q[a+16>>2]=0;q[a+20>>2]=1065353216;q[a+44>>2]=q[b+8>>2];q[a+40>>2]=1065353216;q[a+32>>2]=0;q[a+36>>2]=0}function gK(a,b,c,d){a:{if(!a){break a}b=b+2|0;if(b>>>0>5){break a}b:{switch(b-1|0){default:o[a|0]=c;return;case 0:p[a>>1]=c;return;case 1:case 2:q[a>>2]=c;return;case 3:break a;case 4:break b}}q[a>>2]=c;q[a+4>>2]=d}}function hQ(a){a=a|0;var b=0,c=0;q[a>>2]=355616;b=a+16|0;while(1){if(c>>>0>>0){if(q[cQ(b,c)>>2]){gQ(q[cQ(b,c)>>2])}c=c+1|0;continue}break}oT(a+176|0);jQ(b);if(q[b>>2]){YP(b);CS(rS(b),q[b>>2],wS(b))}return a|0}function FT(a,b,c,d){var e=0,f=0;e=ue-16|0;ue=e;if(4294967279>=d>>>0){a:{if(d>>>0<=10){YO(a,c);d=a;break a}f=yS(d)+1|0;d=zS(f);AS(a,d);BS(a,f);uo(a,c)}kH(d,b,c);o[e+15|0]=0;XO(c+d|0,e+15|0);ue=e+16|0;return}kT();F()}function rV(a){var b=0,c=0;b=q[87378];b;c=a;a=sV(a);a:{if((((qV(c,1,a,b)|0)!=(a|0)?-1:0)|0)<0){break a}b:{if(r[b+75|0]==10){break b}a=q[b+20>>2];if(a>>>0>=t[b+16>>2]){break b}q[b+20>>2]=a+1;o[a|0]=10;break a}oV(b)}}function Qy(a,b,c,d){var e=0,f=0;f=1;e=q[a+4>>2];q[e+304>>2]=q[e+304>>2]+1;q[e+308>>2]=q[e+308>>2]+w(b,d);a:{b:{if(!n[q[q[a>>2]+160>>2]](a)){f=4;break b}if((n[q[q[a>>2]+160>>2]](a)|0)!=1){break a}}jw(f,c,5125,0,d)}}function bN(a,b,c){var d=0;c=q[c+4>>2]&176;if((c|0)==32){return b}a:{if((c|0)!=16){break a}c=r[a|0];d=c+ -43|0;if(!(d>>>0>2|!(d-1))){return a+1|0}if((c|0)!=48|(b-a|0)<2|(r[a+1|0]|32)!=120){break a}a=a+2|0}return a}function BG(a,b){var c=0,d=0,e=0;c=a*a;d=c*a;e=d*(c*.13339200271297674+.3333313950307914)+a;a=c*c;a=e+d*a*(c*.024528318116654728+.05338123784456704+a*(c*.009465647849436732+.002974357433599673));return x(b?-1/a:a)}function cf(a){a=a|0;var b=0,c=0,d=0;b=ue-16|0;ue=b;q[a>>2]=1352;a:{if(o[a+19|0]>-1){break a}c=q[a+16>>2];d=q[a+8>>2];xt(b);n[q[b+8>>2]](b,d,c<<1);c=q[q[b+12>>2]+4>>2];if(!c){break a}n[c](q[b>>2])}_U(a);ue=b+16|0}function Kp(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=x(0);d=u[b+8>>2];e=u[c+8>>2];f=u[c+4>>2];g=u[b>>2];h=u[b+4>>2];i=u[c>>2];u[a+8>>2]=x(f*g)-x(h*i);u[a+4>>2]=x(d*i)-x(e*g);u[a>>2]=x(h*e)-x(d*f);return a}function Gg(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+132>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+148>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function Dg(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+120>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+208>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function Ag(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+108>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+184>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function xg(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+96>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+136>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function ug(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+84>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+112>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function IT(a,b,c){var d=0,e=0,f=0,g=0;e=ue-16|0;ue=e;d=mS(a);a:{if(d>>>0>=c>>>0){g=kM(a);d=g;f=c;if(c){cT(d,b,f)}q[e+12>>2]=0;KI(g+(c<<2)|0,e+12|0);nS(a,c);break a}f=a;a=uL(a);JT(f,d,c-d|0,a,0,a,c,b)}ue=e+16|0}function lg(a,b,c){a=a|0;b=b|0;c=c|0;a:{if((c|0)>=0){if((n[q[q[b>>2]+48>>2]](b)|0)>(c|0)){break a}}q[a>>2]=0;return}b=q[b+40>>2];q[a>>2]=0;c=b+(c<<2)|0;b=q[c>>2];if(b){n[q[q[b>>2]>>2]](b)|0;b=q[c>>2]}q[a>>2]=b}function cT(a,b,c){var d=0;a:{if(a-b>>2>>>0>>0){while(1){c=c+ -1|0;d=c<<2;q[d+a>>2]=q[b+d>>2];if(c){continue}break a}}if(!c){break a}while(1){q[a>>2]=q[b>>2];a=a+4|0;b=b+4|0;c=c+ -1|0;if(c){continue}break}}}function Py(a,b,c){var d=0,e=0;e=1;d=q[a+4>>2];q[d+304>>2]=q[d+304>>2]+1;q[d+308>>2]=q[d+308>>2]+b;a:{b:{if(!n[q[q[a>>2]+160>>2]](a)){e=4;break b}if((n[q[q[a>>2]+160>>2]](a)|0)!=1){break a}}Da(e|0,c|0,5125,0)}}function $s(a,b){var c=0;c=q[b>>2];q[a+12>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0;q[a>>2]=c;c=q[b+4>>2];q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=c;b=q[b+8>>2];q[a+32>>2]=0;q[a+36>>2]=0;q[a+44>>2]=0;q[a+40>>2]=b}function gq(a){var b=0,c=0,d=0,e=0;b=q[a+4>>2];a:{if(!b){break a}c=a+4|0;a=c;while(1){d=q[b+16>>2]<10;a=d?a:b;b=q[(d<<2)+b>>2];if(b){continue}break}if((a|0)==(c|0)|q[a+16>>2]>10){break a}e=q[a+20>>2]}return e}function GU(a,b,c){var d=0;d=q[a+16>>2];if(!d){q[a+36>>2]=1;q[a+24>>2]=c;q[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(q[a+24>>2]!=2){break a}q[a+24>>2]=c;return}o[a+54|0]=1;q[a+24>>2]=2;q[a+36>>2]=q[a+36>>2]+1}}function TF(a){var b=0;if(a){if(q[a+76>>2]<=-1){return UF(a)}return UF(a)}if(q[91710]){b=TF(q[91710])}a=q[91805];if(a){while(1){if(t[a+20>>2]>t[a+28>>2]){b=UF(a)|b}a=q[a+56>>2];if(a){continue}break}}return b}function HE(a,b,c){var d=0,e=0;e=a+8|0;a=q[a+12>>2];if((e|0)!=(a|0)){while(1){d=q[a+8>>2];a:{if(q[d+4>>2]!=(b|0)){break a}d=q[d>>2];if(c){Ua(d|0);break a}Sa(d|0)}a=q[a+4>>2];if((e|0)!=(a|0)){continue}break}}}function yz(a,b,c,d,e){d=q[d+800>>2]+ -1|0;if(d>>>0<=5){a:{switch(d-2|0){case 3:Az(a,c,b,e);return;case 1:case 2:Bz(a,c,b,e);return;case 0:Cz(a,c,b,e);return;default:break a}}Dz(a,c,b,e);return}Ez(a,c,b,e)}function vD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=_S(24);q[b+16>>2]=0;q[b+20>>2]=0;q[b+4>>2]=341588;q[b>>2]=341564;q[b+8>>2]=1;q[b+12>>2]=0;e=b+12|0;if(c){LC(e,c)}b=b+4|0;if(d){nv(e,d,c+d|0)}q[a>>2]=b}function Rk(a){var b=0,c=0;c=Nl(q[a>>2],q[a+4>>2],q[a+8>>2],a);if(c){b=q[a+180>>2];a:{if(b){q[c+4>>2]=b;b=b+8|0;break a}b=a+176|0}q[b>>2]=c;q[a+180>>2]=c;b=a+184|0;q[b>>2]=q[b>>2]+1;Ik(q[a+12>>2])}return c}function AO(a,b,c,d,e,f){var g=0,h=0,i=0;g=ue-16|0;ue=g;o[g+15|0]=0;o[g+14|0]=f;o[g+13|0]=e;o[g+12|0]=37;if(f){BO(g+13|0,g+14|0)}h=c,i=(lb(b|0,CO(b,q[c>>2])|0,g+12|0,d|0,q[a>>2])|0)+b|0,q[h>>2]=i;ue=g+16|0}function IK(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;q[d+12>>2]=c;q[d+8>>2]=c;e=-1;c=GK(0,0,b,c);a:{if((c|0)<0){break a}f=a;c=c+1|0;a=ZU(c);q[f>>2]=a;if(!a){break a}e=GK(a,c,b,q[d+12>>2])}ue=d+16|0;return e}function dl(a){var b=0,c=0,d=0,e=0;c=q[a+8>>2];e=q[a+4>>2];b=q[a>>2];a=q[a+12>>2];d=q[a>>2];if(d){b=n[d](b)|0}q[91754]=c;q[91753]=e;c=q[91755];q[91755]=a;a=q[91752];q[91752]=b;b=q[c+4>>2];if(b){n[b](a)}}function cy(a){var b=0;b=ue-16|0;ue=b;q[b+12>>2]=0;q[b>>2]=a;q[b+4>>2]=b+12;oy(b,192080);oy(b,192042);oy(b,191720);oy(b,191745);oy(b,191774);oy(b,191964);oy(b,191988);oy(b,192015);oy(b,192064);ue=b+16|0}function Jr(a,b,c){a=a|0;b=b|0;c=x(c);var d=x(0),e=x(0),f=x(0);b=q[b>>2];d=u[b>>2];e=u[b+4>>2];f=u[b+8>>2];q[a+8>>2]=0;q[a+12>>2]=1065353216;c=x(B(x(A(c,x(1))),x(0)));u[a+4>>2]=f*c;u[a>>2]=d+x(c*x(e-d))}function zK(a,b,c,d,e){var f=0;f=ue-256|0;ue=f;if(!(e&73728|(c|0)<=(d|0))){c=c-d|0;d=c>>>0<256;lV(f,b,d?c:256);if(!d){while(1){wK(a,f,256);c=c+ -256|0;if(c>>>0>255){continue}break}}wK(a,f,c)}ue=f+256|0}function nR(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=ue-16|0;ue=a;q[a+12>>2]=c;q[a+8>>2]=f;b=oR(c,d,a+12|0,f,g,a+8|0);q[e>>2]=q[a+12>>2];q[h>>2]=q[a+8>>2];ue=a+16|0;return b|0}function lR(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=ue-16|0;ue=a;q[a+12>>2]=c;q[a+8>>2]=f;b=mR(c,d,a+12|0,f,g,a+8|0);q[e>>2]=q[a+12>>2];q[h>>2]=q[a+8>>2];ue=a+16|0;return b|0}function hR(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=ue-16|0;ue=a;q[a+12>>2]=c;q[a+8>>2]=f;b=iR(c,d,a+12|0,f,g,a+8|0);q[e>>2]=q[a+12>>2];q[h>>2]=q[a+8>>2];ue=a+16|0;return b|0}function fR(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=ue-16|0;ue=a;q[a+12>>2]=c;q[a+8>>2]=f;b=gR(c,d,a+12|0,f,g,a+8|0);q[e>>2]=q[a+12>>2];q[h>>2]=q[a+8>>2];ue=a+16|0;return b|0}function WB(a){a=a|0;var b=0,c=0;q[a>>2]=339976;b=a+ -8|0;q[b>>2]=339936;Xv(a+32|0);a=q[a+40>>2];a:{if(!a){break a}c=q[a+4>>2];q[a+4>>2]=c+ -1;if(c){break a}n[q[q[a>>2]+8>>2]](a);WS(a)}Uv(b);return b|0}function ft(a,b,c,d){q[a+32>>2]=0;q[a+36>>2]=0;q[a+16>>2]=0;q[a+20>>2]=1065353216;u[a+12>>2]=b;q[a+8>>2]=0;q[a>>2]=1065353216;q[a+4>>2]=0;u[a+44>>2]=d;q[a+40>>2]=1065353216;u[a+28>>2]=c;q[a+24>>2]=0}function vj(a,b,c,d){var e=0,f=x(0),g=x(0),h=x(0),i=0,j=x(0);e=q[b>>2];f=ij(b+4|0,c,d,e);g=ij(b+48|0,c,d,e);h=ij(b+92|0,c,d,e);i=a,j=ij(b+136|0,c,d,e),u[i+12>>2]=j;u[a+8>>2]=h;u[a+4>>2]=g;u[a>>2]=f}function rj(a,b,c){var d=0,e=0,f=0;e=a+48|0;if((c|0)>=15){q[a>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);f=4;b=b+4|0}c=hj(a+4|0,b);d=c+b|0;b=hj(e,d);return hj(a+92|0,b+d|0)+(b+(c+f|0)|0)|0}function dj(a){a=a|0;var b=0;q[a>>2]=3624;Ji(a+4072|0);Ji(a+4028|0);Ji(a+3984|0);Ji(a+3940|0);Ji(a+3896|0);Ji(a+3852|0);b=q[a+3488>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+3488>>2]=0}Gh(a);return a|0}function YB(a){a=a|0;var b=0,c=0;q[a>>2]=339976;b=a+ -8|0;q[b>>2]=339936;Xv(a+32|0);a=q[a+40>>2];a:{if(!a){break a}c=q[a+4>>2];q[a+4>>2]=c+ -1;if(c){break a}n[q[q[a>>2]+8>>2]](a);WS(a)}Uv(b);_U(b)}function OI(a){var b=0;if(q[a+76>>2]<0){b=q[a+4>>2];if(b>>>0>2]){q[a+4>>2]=b+1;return r[b|0]}return NI(a)}b=q[a+4>>2];a:{if(b>>>0>2]){q[a+4>>2]=b+1;a=r[b|0];break a}a=NI(a)}return a}function qE(a,b){var c=0;q[a>>2]=342840;q[a+4>>2]=1;q[a+8>>2]=0;c=q[b>>2];a:{if(!c){break a}n[q[q[c>>2]>>2]](c)|0;c=q[a+8>>2];if(!c){break a}n[q[q[c>>2]+8>>2]](c)|0;q[a+8>>2]=0}q[a+8>>2]=q[b>>2]}function hz(a){a=a|0;var b=0,c=0;b=ue-16|0;ue=b;c=q[a+12>>2];a:{if(!c){break a}q[a+16>>2]=c;a=q[a+20>>2];zt(b);n[q[b+8>>2]](b,c,a-c|0);a=q[q[b+12>>2]+4>>2];if(!a){break a}n[a](q[b>>2])}ue=b+16|0}function Yi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;n[q[q[c>>2]+76>>2]](e+8|0,c);c=q[e+8>>2];if(c){n[q[q[c>>2]+36>>2]](c,a+3436|0,q[b+184>>2],d);n[q[q[c>>2]+8>>2]](c)|0}ue=e+16|0}function VB(a){a=a|0;var b=0,c=0;q[a+8>>2]=339976;q[a>>2]=339936;Xv(a+40|0);b=q[a+48>>2];a:{if(!b){break a}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(c){break a}n[q[q[b>>2]+8>>2]](b);WS(b)}Uv(a);return a|0}function Ty(a,b){var c=0;q[a+68>>2]=0;c=q[a+196>>2];if(c){if(!q[c+16>>2]){xB(b);Yv(34963,0);Yv(34962,0)}iw(0);q[a+196>>2]=0;ha(0);return}xB(b);Yv(34963,0);Yv(34962,0);if(q[a+76>>2]){iw(0)}ha(0)}function Kn(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0,g=0,h=0,i=0,j=0,k=0;f=ue-16|0;ue=f;a=(h=a,i=b,j=zp(f,c,d,e),k=0,g=q[q[a>>2]+396>>2],n[g](h|0,i|0,j|0,k|0)|0);ue=f+16|0;return a|0}function yk(a,b){var c=0;c=q[a+36>>2];if(c){while(1){Pk(c);c=q[c+316>>2];if(c){continue}break}}a:{if(!b){break a}c=q[a+24>>2];if(!c){break a}while(1){yk(c,1);c=q[c+8>>2];if(c){continue}break}}}function qj(a,b,c){var d=x(0),e=x(0);d=x(n[q[q[c>>2]+16>>2]](c,u[b+44>>2],u[b+40>>2]));e=x(n[q[q[c>>2]+16>>2]](c,u[b+88>>2],u[b+84>>2]));q[a+8>>2]=0;q[a+12>>2]=1065353216;u[a+4>>2]=e;u[a>>2]=d}function bF(a,b,c,d,e,f,g,h,i,j){a=a|0;b=x(b);c=x(c);d=x(d);e=x(e);f=x(f);g=x(g);h=x(h);i=x(i);j=x(j);var k=0;k=ue-48|0;ue=k;po(a+88|0,zp(k+32|0,b,c,d),zp(k+16|0,e,f,g),zp(k,h,i,j));ue=k+48|0}function xA(a,b,c,d,e){a:{d=q[d+800>>2]+ -1|0;if(d>>>0<=5){b:{switch(d-2|0){case 1:case 2:zA(a,c,b,e);return;case 0:break b;default:break a}}AA(a,c,b,e);return}BA(a,c,b,e);return}yA(a,c,b,e)}function uT(a,b){var c=0,d=0,e=0,f=0;e=ue-16|0;ue=e;if(b){d=DL(a);c=uL(a);f=c+b|0;if(d-c>>>0>>0){wT(a,d,f-d|0,c,c)}d=c;c=kM(a);xT(d+c|0,b,0);nS(a,f);o[e+15|0]=0;XO(c+f|0,e+15|0)}ue=e+16|0}function Tl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;d=q[b+612>>2];c=q[b+608>>2];q[a>>2]=c;q[a+4>>2]=d;q[a+8>>2]=q[b+616>>2];b=q[b+620>>2];q[a+12>>2]=b;b=q[b>>2];if(b){e=a,f=n[b](c)|0,q[e>>2]=f}}function nV(a){var b=0;b=r[a+74|0];o[a+74|0]=b+ -1|b;b=q[a>>2];if(b&8){q[a>>2]=b|32;return-1}q[a+4>>2]=0;q[a+8>>2]=0;b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];return 0}function lC(a){var b=0,c=0,d=0,e=0;b=q[a>>2];c=q[a+4>>2];if((b|0)!=(c|0)){while(1){e=q[(d<<2)+b>>2];if((e|0)>=0){ja(e|0);c=q[a+4>>2];b=q[a>>2]}d=d+1|0;if(d>>>0>2>>>0){continue}break}}}function XB(a){a=a|0;var b=0,c=0;q[a+8>>2]=339976;q[a>>2]=339936;Xv(a+40|0);b=q[a+48>>2];a:{if(!b){break a}c=q[b+4>>2];q[b+4>>2]=c+ -1;if(c){break a}n[q[q[b>>2]+8>>2]](b);WS(b)}Uv(a);_U(a)}function uO(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+8>>2]=b;while(1){a:{if(!XH(a,e+8|0)){break a}if(!ZH(d,8192,YH(a))){break a}_H(a);continue}break}if($H(a,e+8|0)){q[c>>2]=q[c>>2]|2}ue=e+16|0}function si(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=ue-16|0;ue=b;n[q[q[c>>2]+52>>2]](b+8|0,c);c=q[b+8>>2];if(c){n[q[q[c>>2]+36>>2]](c,a+3436|0,q[a+3488>>2],d);n[q[q[c>>2]+8>>2]](c)|0}ue=b+16|0}function nO(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+8>>2]=b;b=6;a:{b:{if($H(a,e+8|0)){break b}b=4;if((cO(d,YH(a))|0)!=37){break b}b=2;if(!$H(_H(a),e+8|0)){break a}}q[c>>2]=q[c>>2]|b}ue=e+16|0}function YN(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+8>>2]=b;while(1){a:{if(!GH(a,e+8|0)){break a}if(!IH(d,8192,HH(a))){break a}JH(a);continue}break}if(KH(a,e+8|0)){q[c>>2]=q[c>>2]|2}ue=e+16|0}function TI(a){var b=0,c=0;b=ue-16|0;ue=b;c=tH(370060);q[92525]=370116;q[92523]=a;q[92515]=349668;o[370112]=0;q[92527]=-1;_I(b+8|0,c);n[q[q[92515]+8>>2]](370060,b+8|0);kL(b+8|0);ue=b+16|0}function RN(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+8>>2]=b;b=6;a:{b:{if(KH(a,e+8|0)){break b}b=4;if((GN(d,HH(a))|0)!=37){break b}b=2;if(!KH(JH(a),e+8|0)){break a}}q[c>>2]=q[c>>2]|b}ue=e+16|0}function RI(a){var b=0,c=0;b=ue-16|0;ue=b;c=dH(369996);q[92509]=370052;q[92507]=a;q[92499]=349528;o[370048]=0;q[92511]=-1;_I(b+8|0,c);n[q[q[92499]+8>>2]](369996,b+8|0);kL(b+8|0);ue=b+16|0}function vA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;c=ue-128|0;ue=c;if(!(!q[a+28>>2]|(q[q[b+36>>2]+8>>2]?0:!q[a+32>>2]))){d=q[a+20>>2];n[q[q[d>>2]+76>>2]](c,d);wA(a,b,ht(c- -64|0,c))}ue=c+128|0}function qT(a,b,c){var d=0,e=0,f=0;e=ue-16|0;ue=e;d=DL(a);a:{if(d>>>0>=c>>>0){d=kM(a);rT(d,b,c);o[e+15|0]=0;XO(c+d|0,e+15|0);nS(a,c);break a}f=a;a=uL(a);sT(f,d,c-d|0,a,0,a,c,b)}ue=e+16|0}function eE(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;if(b){n[q[q[b>>2]>>2]](b)|0}q[c+8>>2]=b;b=_S(12);qE(b,c+8|0);q[a>>2]=b;a=q[c+8>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[c+8>>2]=0}ue=c+16|0}function kK(a,b){var c=0,d=0;c=r[a|0];d=r[b|0];a:{if(!c|(c|0)!=(d|0)){break a}while(1){d=r[b+1|0];c=r[a+1|0];if(!c){break a}b=b+1|0;a=a+1|0;if((c|0)==(d|0)){continue}break}}return c-d|0}function vk(a){var b=0,c=0;b=Ol(q[a+12>>2],q[a+16>>2],a,q[a+20>>2]);if(b){c=q[a+40>>2];q[(c?c+316|0:a+36|0)>>2]=b;q[a+40>>2]=b;c=q[a+16>>2];n[q[q[c>>2]+76>>2]](c,b,q[a+12>>2])}return b}function iD(a){a=a|0;var b=0;q[a>>2]=340632;mw(a+56|0);a:{if(!r[a+72|0]){break a}b=q[a+20>>2]+ -1|0;if(b>>>0>2|!(b-1)){break a}}jD(a+60|0,q[a- -64>>2]);kD(a+8|0,q[a+12>>2]);return a|0}function XJ(a,b,c,d,e,f,g,h,i){var j=0;j=ue-16|0;ue=j;RJ(j,b,c,d,e,f,g,h,i^-2147483648);b=q[j+4>>2];q[a>>2]=q[j>>2];q[a+4>>2]=b;b=q[j+12>>2];q[a+8>>2]=q[j+8>>2];q[a+12>>2]=b;ue=j+16|0}function XI(a,b,c){var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;e=tH(a);q[a+32>>2]=b;q[a>>2]=349872;_I(d+8|0,e);b=eJ(d+8|0);kL(d+8|0);q[a+40>>2]=c;q[a+36>>2]=b;f=a,g=dJ(b),o[f+44|0]=g;ue=d+16|0}function WR(){var a=0;a:{if(o[371832]&1){break a}if(!oU(371832)){break a}a=371808;while(1){a=CL(a)+12|0;if((a|0)!=371832){continue}break}sU(371832)}LR(371808,361384);LR(371820,361396)}function VI(a,b,c){var d=0,e=0,f=0,g=0;d=ue-16|0;ue=d;e=dH(a);q[a+32>>2]=b;q[a>>2]=349768;_I(d+8|0,e);b=cJ(d+8|0);kL(d+8|0);q[a+40>>2]=c;q[a+36>>2]=b;f=a,g=dJ(b),o[f+44|0]=g;ue=d+16|0}function TR(){var a=0;a:{if(o[371800]&1){break a}if(!oU(371800)){break a}a=371776;while(1){a=CL(a)+12|0;if((a|0)!=371800){continue}break}sU(371800)}ER(371776,361376);ER(371788,361379)}function us(a,b,c){a=a|0;b=b|0;c=x(c);var d=x(0);d=vs(a,q[a+60>>2],c);if(r[a+89|0]){d=vs(a,q[a+92>>2],c)}if(r[a+88|0]){return x(ws(b,d))}c=u[b>>2];return x(x(c+x(d*x(u[b+8>>2]-c))))}function Ms(a,b,c){var d=0,e=x(0),f=0,g=x(0);d=ue-16|0;ue=d;Ns(d,b,c);e=u[d+12>>2];u[a>>2]=u[d>>2]*e;u[a+4>>2]=e*u[d+4>>2];u[a+8>>2]=e*u[d+8>>2];f=a,g=Os(b,c),u[f+12>>2]=g;ue=d+16|0}function mT(a,b){var c=0,d=0,e=0;d=ue-16|0;ue=d;c=VS(a);a:{if(!iM(b)){q[c+8>>2]=q[b+8>>2];e=q[b+4>>2];q[c>>2]=q[b>>2];q[c+4>>2]=e;break a}nT(a,q[b>>2],q[b+4>>2])}ue=d+16|0;return a}function zO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;c=ue-128|0;ue=c;q[c+12>>2]=c+116;AO(a+8|0,c+16|0,c+12|0,e,f,g);a=DO(c+16|0,q[c+12>>2],b);ue=c+128|0;return a|0}function uB(a,b){a=a|0;b=b|0;var c=0;a=a+ -8|0;b=q[b>>2];if(b){n[q[q[b>>2]>>2]](b)|0}c=b?b+ -4|0:0;b=q[a+24>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+24>>2]=0}q[a+24>>2]=c;pB(a)}function eV(a){var b=0,c=0;b=q[93236];c=a+3&-4;a=b+c|0;a:{if(a>>>0<=b>>>0?(c|0)>=1:0){break a}if(a>>>0>xe()<<16>>>0){if(!qb(a|0)){break a}}q[93236]=a;return b}q[91802]=48;return-1}function JU(a,b,c,d){var e=0,f=0,g=0,h=0;f=q[a+4>>2];a=q[a>>2];g=a;h=b;e=0;a:{if(!c){break a}b=f>>8;e=b;if(!(f&1)){break a}e=q[b+q[c>>2]>>2]}n[q[q[a>>2]+28>>2]](g,h,e+c|0,f&2?d:2)}function HM(a,b,c,d,e){var f=0,g=0,h=0;f=ue-16|0;ue=f;EH(f+8|0,b);OM(WH(f+8|0),355328,355360,c);b=pM(f+8|0);g=d,h=QM(b),q[g>>2]=h;g=e,h=RM(b),q[g>>2]=h;SM(a,b);kL(f+8|0);ue=f+16|0}function FS(a){var b=0,c=0;b=ue-16|0;ue=b;q[b+12>>2]=a;c=qS();if(c>>>0>=a>>>0){a=wS(372176);if(a>>>0>>1>>>0){q[b+8>>2]=a<<1;c=q[zI(b+8|0,b+12|0)>>2]}ue=b+16|0;return c}kU();F()}function EO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;c=ue-416|0;ue=c;q[c+12>>2]=c+416;FO(a+8|0,c+16|0,c+12|0,e,f,g);a=HO(c+16|0,q[c+12>>2],b);ue=c+416|0;return a|0}function Dk(a){a=a|0;var b=0,c=0;b=ue-16|0;ue=b;q[a>>2]=4160;c=q[a+472>>2];if(c){q[a+476>>2]=c;_U(c)}zt(b);n[q[b+8>>2]](b,a,496);a=q[q[b+12>>2]+4>>2];if(a){n[a](q[b>>2])}ue=b+16|0}function lD(a){a=a|0;var b=0;q[a>>2]=340632;mw(a+56|0);a:{if(!r[a+72|0]){break a}b=q[a+20>>2]+ -1|0;if(b>>>0>2|!(b-1)){break a}}jD(a+60|0,q[a- -64>>2]);kD(a+8|0,q[a+12>>2]);_U(a)}function WL(a,b,c,d,e){var f=0,g=0,h=0;f=ue-16|0;ue=f;EH(f+8|0,b);eM(FH(f+8|0),355328,355360,c);b=lL(f+8|0);g=d,h=QM(b),o[g|0]=h;g=e,h=RM(b),o[g|0]=h;SM(a,b);kL(f+8|0);ue=f+16|0}function OU(a,b){var c=0;a:{if(!b){break a}b=FU(b,362740);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(!CU(q[a+12>>2],q[b+12>>2],0)){break a}c=CU(q[a+16>>2],q[b+16>>2],0)}return c}function HN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=ue-16|0;ue=g;q[g+8>>2]=624576549;q[g+12>>2]=1394948685;a=FN(a,b,c,d,e,f,g+8|0,g+16|0);ue=g+16|0;return a|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=_S(44);b=BC(f,b);e=(e|0)==1?4:2;q[f+40>>2]=e;q[f+16>>2]=c;GC(b,c,e);n[q[q[f>>2]+16>>2]](b,d,w(c,e),0);q[a>>2]=f+4}function zy(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;q[c+12>>2]=0;cV(c+12|0,16,220);d=q[c+12>>2];q[d+8>>2]=b;q[d>>2]=337712;q[d+4>>2]=1;lV(d+12|0,0,208);q[a>>2]=d;ue=c+16|0}function Cy(a,b){a=a|0;b=b|0;var c=0,d=0;c=ue-16|0;ue=c;q[c+12>>2]=0;cV(c+12|0,16,160);d=q[c+12>>2];q[d+8>>2]=b;q[d>>2]=338132;q[d+4>>2]=1;lV(d+12|0,0,148);q[a>>2]=d;ue=c+16|0}function ui(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+52>>2]](d+8|0,b);b=q[d+8>>2];if(b){n[q[q[b>>2]+28>>2]](b,a+3436|0,c);n[q[q[b>>2]+8>>2]](b)|0}ue=d+16|0}function ei(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+68>>2]](d+8|0,b);b=q[d+8>>2];if(b){n[q[q[b>>2]+28>>2]](b,a+3436|0,c);n[q[q[b>>2]+8>>2]](b)|0}ue=d+16|0}function Pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+44>>2]](d+8|0,b);b=q[d+8>>2];if(b){n[q[q[b>>2]+28>>2]](b,a+3436|0,c);n[q[q[b>>2]+8>>2]](b)|0}ue=d+16|0}function Di(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+60>>2]](d+8|0,b);b=q[d+8>>2];if(b){n[q[q[b>>2]+28>>2]](b,a+4020|0,c);n[q[q[b>>2]+8>>2]](b)|0}ue=d+16|0}function $i(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+76>>2]](d+8|0,b);b=q[d+8>>2];if(b){n[q[q[b>>2]+28>>2]](b,a+3436|0,c);n[q[q[b>>2]+8>>2]](b)|0}ue=d+16|0}function yQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=q[b>>2];if(a>>>0<=127){a=q[q[88056]+(q[b>>2]<<2)>>2]}q[d>>2]=a;b=b+4|0;continue}break}return c|0}function YS(){var a=0,b=0,c=0;a=ue-16|0;ue=a;b=mb(a+8|0)|0;a:{if(b){break a}b=nb(a+8|0,1)|0;if(b){ob(a+8|0)|0;break a}b=0;c=ob(a+8|0)|0;if(!c){break a}b=c}ue=a+16|0;return b}function Jt(a){a=a|0;a=q[q[a>>2]+ -12>>2]+a|0;q[a+64>>2]=7772;q[a>>2]=7732;q[a+12>>2]=8052;q[a+8>>2]=7752;if(o[a+55|0]<=-1){_U(q[a+44>>2])}bH(a+12|0);ZG(a- -64|0);return a|0}function Dt(){q[91759]=7328;q[91758]=399;q[91756]=400;q[91763]=7384;q[91762]=402;q[91760]=403;q[91767]=7440;q[91766]=405;q[91764]=406;q[91771]=7384;q[91770]=402;q[91768]=408}function AQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=q[b>>2];if(a>>>0<=127){a=q[q[88444]+(q[b>>2]<<2)>>2]}q[d>>2]=a;b=b+4|0;continue}break}return c|0}function ky(a){a=a|0;var b=0;b=q[a+16>>2];if(b){oD(b)}b=q[a+200>>2]+ -2|0;a:{if(b>>>0>2){break a}b:{switch(b-1|0){default:ly(a);return;case 0:break a;case 1:break b}}my(a)}}function $F(a){var b=0;b=2;if(!mG(a,43)){b=r[a|0]!=114}b=mG(a,120)?b|128:b;b=mG(a,101)?b|524288:b;a=r[a|0];b=(a|0)==114?b:b|64;b=(a|0)==119?b|512:b;return(a|0)==97?b|1024:b}function zo(a,b){a=a|0;b=x(b);b=x(x(b*x(1024))*x(8));a:{if(x(y(b))>>0)%32767|0))}function wQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:{while(1){if((c|0)==(d|0)){break a}if(!(!(s[q[87862]+(q[c>>2]<<1)>>1]&b)|t[c>>2]>127)){c=c+4|0;continue}break}d=c}return d|0}function cF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);var e=0;e=ue-16|0;ue=e;Lf(e+8|0,a,b,c,d);a=q[e+8>>2];if(a){n[q[q[a>>2]>>2]](a)|0;n[q[q[a>>2]+8>>2]](a)|0}ue=e+16|0;return a|0}function Ux(a){a=a|0;var b=0;q[a>>2]=191004;b=q[a+320>>2];if((n[q[q[b>>2]+244>>2]](b)|0)!=1){a:{b=q[a+320>>2];if((n[q[q[b>>2]+244>>2]](b)|0)!=3){break a}}}Cu(a);return a|0}function It(a){a=a|0;var b=0,c=0,d=0;q[a>>2]=7752;c=a+56|0;q[c>>2]=7772;b=a+ -8|0;q[b>>2]=7732;d=a+4|0;q[d>>2]=8052;if(o[a+47|0]<=-1){_U(q[b+44>>2])}bH(d);ZG(c);return b|0}function Ir(a,b,c){a=a|0;b=b|0;c=x(c);var d=x(0),e=x(0);e=u[b>>2];d=u[b+4>>2];q[a+8>>2]=0;q[a+12>>2]=1065353216;c=x(d*x(B(x(A(c,x(1))),x(0))));u[a+4>>2]=c;u[a>>2]=c*x(e/d)}function Em(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(b>>>0<=31){d=q[c+12>>2];a=(b<<4)+a|0;b=a;q[b+632>>2]=q[c+8>>2];q[b+636>>2]=d;b=q[c+4>>2];q[a+624>>2]=q[c>>2];q[a+628>>2]=b}}function PB(a){a=a|0;var b=0;q[a>>2]=339860;b=q[a+8>>2];q[a+8>>2]=0;if(!b){q[a+8>>2]=0;Uv(a);return a|0}_U(oC(b));b=q[a+8>>2];q[a+8>>2]=0;if(b){_U(oC(b))}Uv(a);return a|0}function vQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){a:{if((c|0)!=(d|0)){if(!(s[q[87862]+(q[c>>2]<<1)>>1]&b)|t[c>>2]>127){break a}}else{c=d}return c|0}c=c+4|0;continue}}function tB(a,b){a=a|0;b=b|0;var c=0;b=q[b>>2];if(b){n[q[q[b>>2]>>2]](b)|0}c=b?b+ -4|0:0;b=q[a+24>>2];if(b){n[q[q[b+4>>2]+8>>2]](b+4|0)|0;q[a+24>>2]=0}q[a+24>>2]=c;pB(a)}function hO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=ue-16|0;ue=g;q[g+8>>2]=b;EH(g,d);b=WH(g);kL(g);iO(a,f+16|0,g+8|0,c,e,b);ue=g+16|0;return q[g+8>>2]}function fO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=ue-16|0;ue=g;q[g+8>>2]=b;EH(g,d);b=WH(g);kL(g);gO(a,f+24|0,g+8|0,c,e,b);ue=g+16|0;return q[g+8>>2]}function LN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=ue-16|0;ue=g;q[g+8>>2]=b;EH(g,d);b=FH(g);kL(g);MN(a,f+16|0,g+8|0,c,e,b);ue=g+16|0;return q[g+8>>2]}function LG(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=ue-16|0;ue=d;b=NG(b);ue=d+16|0;q[c+8>>2]=b;q[c+12>>2]=we;b=c+8|0;d=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=d;ue=c+16|0;return a}function JN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=ue-16|0;ue=g;q[g+8>>2]=b;EH(g,d);b=FH(g);kL(g);KN(a,f+24|0,g+8|0,c,e,b);ue=g+16|0;return q[g+8>>2]}function sG(a,b,c){var d=0,e=0,f=0;a:{if(!c){break a}while(1){d=r[a|0];e=r[b|0];if((d|0)==(e|0)){b=b+1|0;a=a+1|0;c=c+ -1|0;if(c){continue}break a}break}f=d-e|0}return f}function QB(a){a=a|0;var b=0;q[a>>2]=339860;b=q[a+8>>2];q[a+8>>2]=0;a:{if(!b){q[a+8>>2]=0;break a}_U(oC(b));b=q[a+8>>2];q[a+8>>2]=0;if(!b){break a}_U(oC(b))}Uv(a);_U(a)}function Mt(a){a=a|0;a=q[q[a>>2]+ -12>>2]+a|0;q[a+64>>2]=7772;q[a>>2]=7732;q[a+12>>2]=8052;q[a+8>>2]=7752;if(o[a+55|0]<=-1){_U(q[a+44>>2])}bH(a+12|0);ZG(a- -64|0);_U(a)}function KQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=o[b|0];if((a|0)>=0){a=q[q[88444]+(o[b|0]<<2)>>2]}o[d|0]=a;b=b+1|0;continue}break}return c|0}function JP(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;b=ue-32|0;ue=b;c=CL(b+16|0);LP(KP(c),kM(f),kM(f)+uL(f)|0);d=kM(c);LP(KP(CL(a)),d,sV(d)+d|0);oT(c);ue=b+32|0}function IQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=o[b|0];if((a|0)>=0){a=q[q[88056]+(o[b|0]<<2)>>2]}o[d|0]=a;b=b+1|0;continue}break}return c|0}function pI(a,b){var c=0,d=0,e=0;c=ue-16|0;ue=c;d=MH(c+8|0,a);a:{if(!r[d|0]){break a}e=jI(c,a);oI(e,b);if(!lI(e)){break a}LH(q[q[a>>2]+ -12>>2]+a|0,1)}OH(d);ue=c+16|0}function Vx(a){a=a|0;var b=0;q[a>>2]=191004;b=q[a+320>>2];if((n[q[q[b>>2]+244>>2]](b)|0)!=1){a:{b=q[a+320>>2];if((n[q[q[b>>2]+244>>2]](b)|0)!=3){break a}}}Cu(a);_U(a)}function My(a,b){var c=0;b=q[b>>2];b=q[(b?b+ -4|0:0)+20>>2];a:{c=q[a+196>>2];if(c){c=q[c+20>>2];if(c){break a}}Yv(34963,b);q[a+204>>2]=4;return}q[a+204>>2]=q[c+28>>2]}function Lt(a){a=a|0;var b=0,c=0,d=0;q[a>>2]=7752;c=a+56|0;q[c>>2]=7772;b=a+ -8|0;q[b>>2]=7732;d=a+4|0;q[d>>2]=8052;if(o[a+47|0]<=-1){_U(q[b+44>>2])}bH(d);ZG(c);_U(b)}function GE(a,b){var c=0,d=0;c=a+8|0;a=q[a+12>>2];if((c|0)!=(a|0)){while(1){d=q[a+8>>2];if(q[d+4>>2]==(b|0)){Ta(q[d>>2])}a=q[a+4>>2];if((c|0)!=(a|0)){continue}break}}}function hK(a,b,c){var d=0,e=0,f=0;e=q[a+84>>2];d=c+256|0;f=tG(e,0,d);d=f?f-e|0:d;c=d>>>0>>0?d:c;kV(b,e,c);b=e+d|0;q[a+84>>2]=b;q[a+8>>2]=b;q[a+4>>2]=c+e;return c}function Jp(a,b){var c=x(0),d=x(0),e=x(0),f=x(0);c=u[b>>2];d=u[b+4>>2];e=u[b+8>>2];f=x(x(1)/x(E(x(x(x(c*c)+x(d*d))+x(e*e)))));u[a+8>>2]=e*f;u[a+4>>2]=d*f;u[a>>2]=c*f}function zt(a){var b=0,c=0,d=0,e=0;b=q[91769];c=q[91768];q[a>>2]=c;q[a+4>>2]=b;q[a+8>>2]=q[91770];b=q[91771];q[a+12>>2]=b;b=q[b>>2];if(b){d=a,e=n[b](c)|0,q[d>>2]=e}}function yt(a){var b=0,c=0,d=0,e=0;b=q[91765];c=q[91764];q[a>>2]=c;q[a+4>>2]=b;q[a+8>>2]=q[91766];b=q[91767];q[a+12>>2]=b;b=q[b>>2];if(b){d=a,e=n[b](c)|0,q[d>>2]=e}}function xt(a){var b=0,c=0,d=0,e=0;b=q[91761];c=q[91760];q[a>>2]=c;q[a+4>>2]=b;q[a+8>>2]=q[91762];b=q[91763];q[a+12>>2]=b;b=q[b>>2];if(b){d=a,e=n[b](c)|0,q[d>>2]=e}}function wt(a){var b=0,c=0,d=0,e=0;b=q[91757];c=q[91756];q[a>>2]=c;q[a+4>>2]=b;q[a+8>>2]=q[91758];b=q[91759];q[a+12>>2]=b;b=q[b>>2];if(b){d=a,e=n[b](c)|0,q[d>>2]=e}}function sj(a,b,c,d){var e=0,f=x(0),g=x(0);e=q[b>>2];f=ij(b+4|0,c,d,e);g=ij(b+48|0,c,d,e);c=ij(b+92|0,c,d,e);q[a+12>>2]=1065353216;u[a+8>>2]=c;u[a+4>>2]=g;u[a>>2]=f}function Pm(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);var f=0,g=0,h=0,i=0,j=0;f=ue-16|0;ue=f;h=a,i=b,j=zp(f,c,d,e),g=q[q[a>>2]+232>>2],n[g](h|0,i|0,j|0);ue=f+16|0}function uQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){p[d>>1]=t[b>>2]<=127?s[q[87862]+(q[b>>2]<<1)>>1]:0;d=d+2|0;b=b+4|0;continue}break}return c|0}function cV(a,b,c){a:{b:{if((b|0)==8){b=ZU(c);break b}if(b&3){break a}if((yW(b>>>2|0)|0)!=1|-64-b>>>0>>0){break a}b=bV(b>>>0>16?b:16,c)}if(!b){return}q[a>>2]=b}}function Yk(a){o[a+56|0]=0;q[a+4>>2]=1;q[a>>2]=4216;q[a+8>>2]=0;q[a+12>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+32>>2]=0;q[a+36>>2]=0;return a}function VT(a,b,c,d){var e=0,f=0,g=0,h=0;f=a;a:{b:{e=c-b|0;if((e|0)<=9){if((WT(d)|0)>(e|0)){break b}}g=a,h=dT(d,b),q[g>>2]=h;a=0;break a}q[a>>2]=c;a=61}q[f+4>>2]=a}function Pv(a){a=a|0;var b=0;q[a>>2]=27584;b=q[a+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function Nw(a){a=a|0;var b=0;q[a>>2]=28516;b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function Dj(a){var b=0,c=0;a:{if(q[a+820>>2]==3){break a}b=q[a+160>>2];if(!b){break a}c=a+168|0;while(1){Sk(b,u[a+828>>2],c,a);b=q[b+312>>2];if(b){continue}break}}}function aI(a,b){q[a+4>>2]=b;o[a|0]=0;if(CH(q[q[b>>2]+ -12>>2]+b|0)){if(q[(q[q[b>>2]+ -12>>2]+b|0)+72>>2]){VH(q[(q[q[b>>2]+ -12>>2]+b|0)+72>>2])}o[a|0]=1}return a}function TH(a,b){var c=0,d=0,e=0,f=0;c=q[a+24>>2];if((c|0)==q[a+28>>2]){return e=a,f=oH(b),d=q[q[a>>2]+52>>2],n[d](e|0,f|0)|0}q[a+24>>2]=c+1;o[c|0]=b;return oH(b)}function OF(a){a=a|0;var b=0;b=ue-16|0;ue=b;a=q[a>>2];Ea(1,a|0);OT(b,344577,a+4|0);if(r[367128]){rV(o[b+11|0]<0?q[b>>2]:b)}if(o[b+11|0]<=-1){_U(q[b>>2])}ue=b+16|0}function NG(a){var b=0,c=0,d=0,e=0;b=ue-16|0;ue=b;d=b,e=vW(q[a>>2],q[a+4>>2],1e9,0),q[d>>2]=e;q[b+4>>2]=we;c=MG(b+8|0,b);a=q[c>>2];ue=b+16|0;we=q[c+4>>2];return a}function MH(a,b){q[a+4>>2]=b;o[a|0]=0;if(CH(q[q[b>>2]+ -12>>2]+b|0)){if(q[(q[q[b>>2]+ -12>>2]+b|0)+72>>2]){DH(q[(q[q[b>>2]+ -12>>2]+b|0)+72>>2])}o[a|0]=1}return a}function mk(a,b){var c=0,d=0;while(1){a:{if(!r[(a+c|0)+23040|0]){break a}d=w(c,1440)+a|0;if((Ej(d)|0)!=(b|0)){break a}Dj(d)}c=c+1|0;if((c|0)!=16){continue}break}}function io(a){a=a|0;var b=0,c=0;b=_S(20);q[b+16>>2]=q[a+16>>2];c=q[a+12>>2];q[b+8>>2]=q[a+8>>2];q[b+12>>2]=c;c=q[a+4>>2];q[b>>2]=q[a>>2];q[b+4>>2]=c;return b|0}function IS(a){var b=0;jQ(372176);b=a+4|0;KS(rS(372176),q[93044],q[93045],b);DI(372176,b);DI(372180,a+8|0);DI(tS(372176),jg(a));q[a>>2]=q[a+4>>2];uS(XP(372176))}function jO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=ue-16|0;ue=a;q[a+8>>2]=b;EH(a,d);b=WH(a);kL(a);kO(f+20|0,a+8|0,c,e,b);ue=a+16|0;return q[a+8>>2]}function NN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=ue-16|0;ue=a;q[a+8>>2]=b;EH(a,d);b=FH(a);kL(a);ON(f+20|0,a+8|0,c,e,b);ue=a+16|0;return q[a+8>>2]}function vT(a,b){var c=0,d=0;c=ue-16|0;ue=c;a:{if(iM(a)){d=q[a>>2];o[c+15|0]=0;XO(b+d|0,c+15|0);uo(a,b);break a}o[c+14|0]=0;XO(a+b|0,c+14|0);YO(a,b)}ue=c+16|0}function iz(a){a=a|0;var b=0,c=0;q[a>>2]=337356;c=a+16|0;b=q[c>>2];q[c>>2]=0;if(b){_U(vy(b))}b=q[a+12>>2];q[a+12>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}return a|0}function iL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=q[b>>2]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+4|0;continue}break}return a|0}function Ii(a){a=a|0;var b=0;q[a>>2]=3344;b=q[a+4260>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+4260>>2]=0}Ji(a+3976|0);Ji(a+3932|0);Ji(a+3888|0);Gh(a);return a|0}function wG(a){var b=0,c=0;b=a*a;c=b*a;return x(c*(b*b)*(b*2718311493989822e-21+ -.00019839334836096632)+(c*(b*.008333329385889463+ -.16666666641626524)+a))}function eL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=o[b|0]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+1|0;continue}break}return a|0}function au(a){a=a|0;a=q[q[a>>2]+ -12>>2]+a|0;q[a+56>>2]=26260;q[a>>2]=26240;q[a+4>>2]=8052;if(o[a+47|0]<=-1){_U(q[a+36>>2])}bH(a+4|0);ZG(a+56|0);return a|0}function Fk(a){var b=x(0);b=u[a+60>>2];o[a+56|0]=0;o[a+57|0]=0;o[a+58|0]=0;o[a+59|0]=0;o[a+60|0]=0;o[a+61|0]=0;o[a+62|0]=0;o[a+63|0]=0;u[a+8>>2]=b+u[a+8>>2]}function vB(a,b){var c=0;c=q[b>>2];if(c){n[q[q[c+4>>2]>>2]](c+4|0)|0}c=q[a+28>>2];if(c){n[q[q[c+4>>2]+8>>2]](c+4|0)|0;q[a+28>>2]=0}q[a+28>>2]=q[b>>2];pB(a)}function pE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=q[a+16>>2];d=q[a+12>>2];c=c+d>>>0>e>>>0?e-d|0:c;kV(b,d+q[a+8>>2]|0,c);q[a+12>>2]=c+q[a+12>>2];return c|0}function eO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=n[q[q[a+8>>2]+20>>2]](a+8|0)|0;return bO(g,b,c,d,e,f,kM(a),kM(a)+(uL(a)<<2)|0)|0}function LF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=q[a+12>>2];d=q[a+16>>2];c=c+d>>>0>e>>>0?e-d|0:c;kV(b,d+q[a+8>>2]|0,c);q[a+16>>2]=c+q[a+16>>2];return c|0}function xK(a){var b=0,c=0,d=0;if(IJ(o[q[a>>2]])){while(1){b=q[a>>2];d=o[b|0];q[a>>2]=b+1;c=(w(c,10)+d|0)+ -48|0;if(IJ(o[b+1|0])){continue}break}}return c}function oj(a,b,c){var d=0;if((c|0)>=15){q[a>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);d=4;b=b+4|0}c=hj(a+4|0,b);return(c+d|0)+hj(a+48|0,b+c|0)|0}function iG(a){var b=0;a:{if(q[a+76>>2]<=-1){a=hG(a);b=we;break a}a=hG(a);b=we}if((b|0)>0?1:(b|0)>=0?a>>>0<2147483648?0:1:0){q[91802]=61;return-1}return a}function gj(a,b){q[a>>2]=0;q[a+4>>2]=0;q[a+36>>2]=0;q[a+40>>2]=0;u[a+32>>2]=b;q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0}function qV(a,b,c,d){var e=0,f=0;e=w(b,c);f=e;a:{if(q[d+76>>2]<=-1){a=pV(a,e,d);break a}a=pV(a,e,d)}if((f|0)==(a|0)){return b?c:0}return(a>>>0)/(b>>>0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=_S(40);b=pC(f,b);o[f+36|0]=e;q[f+32>>2]=c;wC(b,c);n[q[q[f>>2]+16>>2]](b,d,c,0);q[a>>2]=f+4}function jz(a){a=a|0;var b=0,c=0;q[a>>2]=337356;c=a+16|0;b=q[c>>2];q[c>>2]=0;if(b){_U(vy(b))}b=q[a+12>>2];q[a+12>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}_U(a)}function LU(a,b){var c=0,d=0,e=0;c=a;d=b;a:{if(r[a+8|0]&24){a=1}else{if(!b){break a}a=FU(b,362580);if(!a){break a}a=(r[a+8|0]&24)!=0}e=CU(c,d,a)}return e}function xv(a,b){var c=0;c=ue-16|0;ue=c;nt(c,b);b=q[c+12>>2];q[a+232>>2]=q[c+8>>2];q[a+236>>2]=b;b=q[c+4>>2];q[a+224>>2]=q[c>>2];q[a+228>>2]=b;ue=c+16|0}function im(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+568>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+568>>2]=0}q[a+568>>2]=q[b>>2]}function gm(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+604>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+604>>2]=0}q[a+604>>2]=q[b>>2]}function em(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+600>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+600>>2]=0}q[a+600>>2]=q[b>>2]}function cm(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+596>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+596>>2]=0}q[a+596>>2]=q[b>>2]}function am(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+592>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+592>>2]=0}q[a+592>>2]=q[b>>2]}function _l(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+588>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+588>>2]=0}q[a+588>>2]=q[b>>2]}function Yl(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+584>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+584>>2]=0}q[a+584>>2]=q[b>>2]}function TS(a,b,c){var d=0;d=ue-16|0;ue=d;$K(d,b,c,fM());b=q[d+4>>2];q[a>>2]=q[d>>2];q[a+4>>2]=b;b=q[d+12>>2];q[a+8>>2]=q[d+8>>2];q[a+12>>2]=b;ue=d+16|0}function Ki(a){a=a|0;var b=0;q[a>>2]=3344;b=q[a+4260>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+4260>>2]=0}Ji(a+3976|0);Ji(a+3932|0);Ji(a+3888|0);Gh(a);_U(a)}function cu(a){a=a|0;a=q[q[a>>2]+ -12>>2]+a|0;q[a+56>>2]=26260;q[a>>2]=26240;q[a+4>>2]=8052;if(o[a+47|0]<=-1){_U(q[a+36>>2])}bH(a+4|0);ZG(a+56|0);_U(a)}function EQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=q[b>>2];o[e|0]=a>>>0<128?a:d;e=e+1|0;b=b+4|0;continue}break}return c|0}function IN(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=n[q[q[a+8>>2]+20>>2]](a+8|0)|0;return FN(g,b,c,d,e,f,kM(a),kM(a)+uL(a)|0)|0}function Cp(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0);d=u[c>>2];e=u[b>>2];f=u[c+4>>2];g=u[b+4>>2];u[a+8>>2]=u[b+8>>2]-u[c+8>>2];u[a+4>>2]=g-f;u[a>>2]=e-d}function Bp(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0);d=u[c>>2];e=u[b>>2];f=u[c+4>>2];g=u[b+4>>2];u[a+8>>2]=u[b+8>>2]+u[c+8>>2];u[a+4>>2]=g+f;u[a>>2]=e+d}function pL(a,b){var c=0,d=0;a=q[a>>2];b=_P(b);c=b;d=a+16|0;if(XP(d)>>>0>b>>>0){c=q[cQ(d,c)>>2]!=0}else{c=0}if(!c){TG();F()}return q[cQ(a+16|0,b)>>2]}function fC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if((q[a+24>>2]+b|0)<=q[a+8>>2]){a=a+ -8|0;a=n[q[q[a>>2]+20>>2]](a,b,c,d,e)|0}else{a=0}return a|0}function bG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ue-16|0;ue=e;uG(se(q[a+60>>2],b|0,c|0,d&255,e+8|0)|0);ue=e+16|0;we=q[e+12>>2];return q[e+8>>2]}function _K(a,b,c){var d=0;d=ue-16|0;ue=d;YK(d,b,c,2);b=q[d+4>>2];q[a>>2]=q[d>>2];q[a+4>>2]=b;b=q[d+12>>2];q[a+8>>2]=q[d+8>>2];q[a+12>>2]=b;ue=d+16|0}function Wh(a,b){a=a|0;b=b|0;var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+24>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+24>>2]=0}q[a+24>>2]=q[b>>2]}function WE(a){a=a|0;var b=0;b=q[a+4>>2];n[q[q[b>>2]+72>>2]](b,a+24|0);b=q[a+4>>2];n[q[q[b>>2]+80>>2]](b,a+88|0);a=q[a+4>>2];n[q[q[a>>2]+32>>2]](a)|0}function NQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=o[b|0];o[e|0]=(a|0)>-1?a:d;e=e+1|0;b=b+1|0;continue}break}return c|0}function Kq(a,b){a=a|0;b=b|0;var c=0;c=q[a+48>>2];a=q[a+44>>2];if((c-a|0)/24>>>0>b>>>0){a=w(b,24)+a|0;if(o[a+11|0]<=-1){a=q[a>>2]}return a|0}lU();F()}function nP(a){var b=0,c=0;b=ue-16|0;ue=b;a:{if(iM(a)){c=q[a>>2];q[b+12>>2]=0;KI(c,b+12|0);uo(a,0);break a}q[b+8>>2]=0;KI(a,b+8|0);YO(a,0)}ue=b+16|0}function dT(a,b){var c=0,d=0;if(a>>>0<=99999999){return eT(b,a)}c=(a>>>0)/1e8|0;d=a-w(c,1e8)|0;a=(d>>>0)/1e4|0;return gT(gT(fT(b,c),a),d-w(a,1e4)|0)}function Xf(a,b){if(b){Xf(a,q[b>>2]);Xf(a,q[b+4>>2]);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}}function Wf(a,b){if(b){Wf(a,q[b>>2]);Wf(a,q[b+4>>2]);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}}function WO(a){var b=0,c=0;b=ue-16|0;ue=b;a:{if(iM(a)){c=q[a>>2];o[b+15|0]=0;XO(c,b+15|0);uo(a,0);break a}o[b+14|0]=0;XO(a,b+14|0);YO(a,0)}ue=b+16|0}function Vf(a,b){if(b){Vf(a,q[b>>2]);Vf(a,q[b+4>>2]);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}}function Uf(a,b){if(b){Uf(a,q[b>>2]);Uf(a,q[b+4>>2]);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}}function Tf(a,b){if(b){Tf(a,q[b>>2]);Tf(a,q[b+4>>2]);a=q[b+28>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b+28>>2]=0}if(o[b+27|0]<=-1){_U(q[b+16>>2])}_U(b)}}function Mk(a,b){var c=0;c=ue-16|0;ue=c;nt(c,b);b=q[c+12>>2];q[a+24>>2]=q[c+8>>2];q[a+28>>2]=b;b=q[c+4>>2];q[a+16>>2]=q[c>>2];q[a+20>>2]=b;ue=c+16|0}function Ht(a){a=a|0;q[a+64>>2]=7772;q[a>>2]=7732;q[a+12>>2]=8052;q[a+8>>2]=7752;if(o[a+55|0]<=-1){_U(q[a+44>>2])}bH(a+12|0);ZG(a- -64|0);return a|0}function tE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=q[a+8>>2];a:{if(r[a+16|0]|!q[c>>2]){break a}a=FE(q[a+12>>2]);if(!a){break a}BE(a,b,c);d=a}return d|0}function sJ(a,b){a=a|0;b=b|0;var c=0,d=0;b=eJ(b);q[a+36>>2]=b;c=a,d=NH(b),q[c+44>>2]=d;c=a,d=dJ(q[a+36>>2]),o[c+53|0]=d;if(q[a+44>>2]>=9){TG();F()}}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;b=cJ(b);q[a+36>>2]=b;c=a,d=NH(b),q[c+44>>2]=d;c=a,d=dJ(q[a+36>>2]),o[c+53|0]=d;if(q[a+44>>2]>=9){TG();F()}}function YE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=ue-112|0;ue=c;a=q[a>>2];e=a,f=b,g=fl(c+8|0),d=q[q[a>>2]+376>>2],n[d](e|0,f|0,g|0);ue=c+112|0}function HO(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+8>>2]=c;while(1){if((a|0)!=(b|0)){qI(d+8|0,q[a>>2]);a=a+4|0;continue}break}ue=d+16|0;return q[d+8>>2]}function Ye(a){a=a|0;var b=0;b=q[a+4>>2];q[a+4>>2]=b+ -1;a:{if((b|0)==1){b=0;if(!a){break a}n[q[q[a>>2]+16>>2]](a);return 0}b=q[a+4>>2]}return b|0}function XU(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(CU(a,q[b+8>>2],f)){PU(b,c,d,e);return}a=q[a+8>>2];n[q[q[a>>2]+20>>2]](a,b,c,d,e,f)}function RB(a,b,c,d){var e=0;if(r[367112]){e=_S(24);Tv(e,q[a>>2]);q[e+20>>2]=d;q[e+16>>2]=c;q[e+12>>2]=b;q[e+8>>2]=0;q[e>>2]=339860;OB(e)}return e}function Qv(a){a=a|0;var b=0;q[a>>2]=27584;b=q[a+12>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+12>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function Ow(a){a=a|0;var b=0;q[a>>2]=28516;b=q[a+16>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+16>>2]=0}b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function NE(a,b,c){a=a|0;b=b|0;c=c|0;a=ue-16|0;ue=a;OT(a,342997,c);if(r[367128]){rV(o[a+11|0]<0?q[a>>2]:a)}if(o[a+11|0]<=-1){_U(q[a>>2])}ue=a+16|0}function DO(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+8>>2]=c;while(1){if((a|0)!=(b|0)){oI(d+8|0,o[a|0]);a=a+1|0;continue}break}ue=d+16|0;return q[d+8>>2]}function xF(a,b,c){a=a|0;b=b|0;c=x(c);var d=0;a=q[a>>2];d=q[q[a>>2]+332>>2];if(x(y(c))>2];a=q[a+56>>2];if(c-a>>4>>>0>b>>>0){a=(b<<4)+a|0;if(o[a+11|0]<=-1){a=q[a>>2]}return a|0}lU();F()}function Fg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+120>>2]](a)|0)<=(b|0)){break a}c=q[q[a+196>>2]+(b<<2)>>2]}return c|0}function Cg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+108>>2]](a)|0)<=(b|0)){break a}c=q[q[a+172>>2]+(b<<2)>>2]}return c|0}function zg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+96>>2]](a)|0)<=(b|0)){break a}c=q[q[a+124>>2]+(b<<2)>>2]}return c|0}function wg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+84>>2]](a)|0)<=(b|0)){break a}c=q[q[a+100>>2]+(b<<2)>>2]}return c|0}function iK(a,b,c){var d=0;d=ue-144|0;ue=d;d=lV(d,0,144);q[d+76>>2]=-1;q[d+44>>2]=a;q[d+32>>2]=853;q[d+84>>2]=a;a=eK(d,b,c);ue=d+144|0;return a}function SE(a,b,c){a=a|0;b=b|0;c=x(c);var d=0;d=q[a>>2];n[q[q[d>>2]+356>>2]](d,b,c);if(r[a+16|0]){o[a+16|0]=0;u[a+12>>2]=x(c/x(60))+u[a+12>>2]}}function NI(a){var b=0,c=0;b=ue-16|0;ue=b;c=-1;a:{if(jG(a)){break a}if((n[q[a+32>>2]](a,b+15|0,1)|0)!=1){break a}c=r[b+15|0]}ue=b+16|0;return c}function Kt(a){a=a|0;q[a+64>>2]=7772;q[a>>2]=7732;q[a+12>>2]=8052;q[a+8>>2]=7752;if(o[a+55|0]<=-1){_U(q[a+44>>2])}bH(a+12|0);ZG(a- -64|0);_U(a)}function tg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+72>>2]](a)|0)<=(b|0)){break a}c=q[q[a+76>>2]+(b<<2)>>2]}return c|0}function qg(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+60>>2]](a)|0)<=(b|0)){break a}c=q[q[a+52>>2]+(b<<2)>>2]}return c|0}function ng(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+48>>2]](a)|0)<=(b|0)){break a}c=q[q[a+28>>2]+(b<<2)>>2]}return c|0}function ZD(a){var b=0,c=0;b=_S(20);o[b+16|0]=0;q[b+4>>2]=342368;q[b>>2]=342316;q[b+8>>2]=1;q[b+12>>2]=0;c=_S(20);DE(c);q[b+12>>2]=c;q[a>>2]=b}function SU(a,b,c,d,e,f){var g=0,h=0,i=0;g=q[a+4>>2];h=g>>8;a=q[a>>2];i=a;if(g&1){h=q[q[d>>2]+h>>2]}n[q[q[a>>2]+20>>2]](i,b,c,d+h|0,g&2?e:2,f)}function Ig(a,b){a=a|0;b=b|0;var c=0;a:{if((b|0)<0){break a}if((n[q[q[a>>2]+132>>2]](a)|0)<=(b|0)){break a}c=q[a+160>>2]+w(b,284)|0}return c|0}function Tz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=ue-128|0;ue=d;e=q[a+8>>2];n[q[q[e>>2]+76>>2]](d,e);Uz(a,b,c,ht(d- -64|0,d));ue=d+128|0}function QA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=ue-128|0;ue=d;e=q[a+8>>2];n[q[q[e>>2]+76>>2]](d,e);RA(a,b,c,ht(d- -64|0,d));ue=d+128|0}function HK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=q[a+20>>2];d=q[a+16>>2]-e|0;d=d>>>0>c>>>0?c:d;kV(e,b,d);q[a+20>>2]=d+q[a+20>>2];return c|0}function $K(a,b,c,d){d=ue-16|0;ue=d;_K(d,b,c);b=q[d+4>>2];q[a>>2]=q[d>>2];q[a+4>>2]=b;b=q[d+12>>2];q[a+8>>2]=q[d+8>>2];q[a+12>>2]=b;ue=d+16|0}function mj(a,b,c){var d=0,e=0;d=a+4|0;if((c|0)>=1600){q[a>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24);e=4;b=b+4|0}return hj(d,b)+e|0}function jV(a,b,c,d){var e=0,f=0;f=d&65535;d=d>>>16&32767;a:{if((d|0)!=32767){e=4;if(d){break a}return a|c|(b|f)?3:2}e=!(a|c|(b|f))}return e}function eC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if((q[a+32>>2]+b|0)<=q[a+16>>2]){a=n[q[q[a>>2]+20>>2]](a,b,c,d,e)|0}else{a=0}return a|0}function QQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=ue-16|0;ue=a;q[a+12>>2]=e;q[a+8>>2]=d-c;b=q[RQ(a+12|0,a+8|0)>>2];ue=a+16|0;return b|0}function Iv(a,b){var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+272>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+272>>2]=0}q[a+272>>2]=q[b>>2]}function ig(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=a+220|0;if(s[b>>1]){a=b;while(1){c=c+1|0;e=s[a+2>>1];a=a+2|0;if(e){continue}break}}Yf(d,b,c)}function vG(a){var b=0;a=a*a;b=a*a;return x(a*-.499999997251031+1+b*.04166662332373906+a*b*(a*2439044879627741e-20+ -.001388676377460993))}function qS(){var a=0,b=0;a=ue-16|0;ue=a;rS(372176);q[a+12>>2]=1073741823;q[a+8>>2]=2147483647;b=RQ(a+12|0,a+8|0);ue=a+16|0;return q[b>>2]}function pj(a,b,c,d){var e=0,f=x(0);e=q[b>>2];f=ij(b+4|0,c,d,e);c=ij(b+48|0,c,d,e);q[a+8>>2]=0;q[a+12>>2]=1065353216;u[a+4>>2]=c;u[a>>2]=f}function jo(a){a=a|0;var b=0,c=0;b=_S(16);c=q[a+12>>2];q[b+8>>2]=q[a+8>>2];q[b+12>>2]=c;c=q[a+4>>2];q[b>>2]=q[a>>2];q[b+4>>2]=c;return b|0}function TU(a,b,c,d,e){var f=0,g=0,h=0;f=q[a+4>>2];g=f>>8;a=q[a>>2];h=a;if(f&1){g=q[q[c>>2]+g>>2]}n[q[q[a>>2]+24>>2]](h,b,c+g|0,f&2?d:2,e)}function gp(a,b){var c=0;c=q[b>>2];if(c){n[q[q[c>>2]>>2]](c)|0}c=q[a+12>>2];if(c){n[q[q[c>>2]+8>>2]](c)|0;q[a+12>>2]=0}q[a+12>>2]=q[b>>2]}function FK(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b;b=q[b>>2]+15&-16;q[c>>2]=b+16;d=a,e=_J(q[b>>2],q[b+4>>2],q[b+8>>2],q[b+12>>2]),v[d>>3]=e}function BK(a,b,c,d){if(a|b){while(1){c=c+ -1|0;o[c|0]=r[(a&15)+351248|0]|d;a=(b&15)<<28|a>>>4;b=b>>>4|0;if(a|b){continue}break}}return c}function Ak(){var a=0,b=0,c=0;a=ue-16|0;ue=a;yt(a);c=n[q[a+8>>2]](a,496,16)|0;b=q[q[a+12>>2]+4>>2];if(b){n[b](q[a>>2])}ue=a+16|0;return c}function $y(a){a=a|0;var b=0,c=0;b=a+12|0;c=q[b>>2];q[b>>2]=c+ -1;if((c|0)==1){a=a+8|0;n[q[q[a>>2]+16>>2]](a);return 0}return q[a+12>>2]}function wl(){var a=0,b=0;b=vW(q[91800],q[91801],1284865837,1481765933)+1|0;a=we;a=b>>>0<1?a+1|0:a;q[91800]=b;q[91801]=a;return a>>>1|0}function ms(a){q[a+4>>2]=q[a>>2];q[a+16>>2]=q[a+12>>2];q[a+28>>2]=q[a+24>>2];q[a+40>>2]=q[a+36>>2];q[a- -64>>2]=0;q[a+52>>2]=q[a+48>>2]}function hT(a,b){var c=0;if(b>>>0<=99){return fT(a,b)}if(b>>>0<=999){c=a;a=(b>>>0)/100|0;return jT(iT(c,a),b-w(a,100)|0)}return gT(a,b)}function cz(a){a=a|0;var b=0,c=0;b=a+4|0;c=q[b>>2];q[b>>2]=c+ -1;if((c|0)==1){n[q[q[a>>2]+16>>2]](a);return 0}return q[(a+ -8|0)+12>>2]}function VP(){var a=0,b=0,c=0;if(qS()>>>0<28){kU();F()}a=sS(rS(372176),28);q[93044]=a;q[93045]=a;b=tS(372176),c=a+112|0,q[b>>2]=c;uS(0)}function JE(a){var b=0;b=a+8|0;a=q[a+12>>2];if((b|0)!=(a|0)){while(1){Ta(q[q[a+8>>2]>>2]);a=q[a+4>>2];if((b|0)!=(a|0)){continue}break}}}function fQ(a){var b=0;b=XP(372176);if(b>>>0>>0){lQ(a-b|0);return}if(b>>>0>a>>>0){a=q[93044]+(a<<2)|0;XP(372176);DS(372176,a);ZP()}}function dh(a){a=a|0;var b=0,c=0;b=a+4|0;c=q[b>>2];q[b>>2]=c+ -1;if((c|0)==1){n[q[q[a>>2]+16>>2]](a);return 0}return q[(a+ -4|0)+8>>2]}function bh(a){a=a|0;var b=0,c=0;b=a+8|0;c=q[b>>2];q[b>>2]=c+ -1;if((c|0)==1){a=a+4|0;n[q[q[a>>2]+16>>2]](a);return 0}return q[a+8>>2]}function _j(a){var b=0;if(q[a+820>>2]<=1){b=q[a+160>>2];if(b){while(1){o[b+308|0]=0;b=q[b+312>>2];if(b){continue}break}}q[a+820>>2]=2}}function sk(a,b){var c=0;c=q[a+28>>2];a:{if(c){q[b+4>>2]=c;c=c+8|0;break a}c=a+24|0}q[c>>2]=b;q[a+28>>2]=b;a=a+32|0;q[a>>2]=q[a>>2]+1}function kz(a){a=a|0;var b=0,c=0;c=a+16|0;b=q[c>>2];q[c>>2]=0;if(b){_U(vy(b))}b=q[a+12>>2];q[a+12>>2]=0;if(b){n[q[q[b>>2]+12>>2]](b)}}function cq(a,b,c){a=a|0;b=b|0;c=c|0;if(c>>>0>=4){return(r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24))==1162561093&c>>>0>7}return 0}function $G(a){var b=0,c=0;b=q[a+40>>2];while(1){if(b){b=b+ -1|0;c=b<<2;n[q[q[a+32>>2]+c>>2]](0,a,q[c+q[a+36>>2]>>2]);continue}break}}function aN(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;q[f+12>>2]=c;q[f+8>>2]=e;c=mM(f,f+12|0);a=GK(a,b,d,q[f+8>>2]);nM(c);ue=f+16|0;return a}function Nv(a,b){a=a|0;b=b|0;var c=0;c=b;b=q[a+12>>2];c=c+b|0;if((c|0)<=q[a+8>>2]){q[a+12>>2]=c;a=q[a+16>>2]+b|0}else{a=0}return a|0}function gM(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+12>>2]=b;q[d+8>>2]=c;b=mM(d,d+12|0);a=iK(a,355361,q[d+8>>2]);nM(b);ue=d+16|0;return a}function WP(a){var b=0;b=ue-16|0;ue=b;rS(372176);while(1){xS(q[93045]);q[93045]=q[93045]+4;a=a+ -1|0;if(a){continue}break}ue=b+16|0}function $t(a){a=a|0;q[a+56>>2]=26260;q[a>>2]=26240;q[a+4>>2]=8052;if(o[a+47|0]<=-1){_U(q[a+36>>2])}bH(a+4|0);ZG(a+56|0);return a|0}function Zj(a){var b=0;a=q[a+160>>2];a:{if(!a){break a}while(1){if(!Xk(a)){a=q[a+312>>2];if(a){continue}break a}break}b=1}return b}function Jq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=q[a+48>>2];a=q[a+44>>2];if((d-a|0)/24>>>0<=b>>>0){lU();F()}q[(w(b,24)+a|0)+12>>2]=c}function Hq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=q[a+48>>2];a=q[a+44>>2];if((d-a|0)/24>>>0<=b>>>0){lU();F()}q[(w(b,24)+a|0)+16>>2]=c}function fM(){var a=0,b=0;a:{if(o[370536]&1){break a}if(!oU(370536)){break a}a=370532,b=qK(),q[a>>2]=b;sU(370536)}return q[92633]}function wo(a){a=a|0;var b=0;b=a;a=w(q[a+4>>2],1103515245)+12345&2147483647;q[b+4>>2]=a;return x(x(x((a>>>0)%32767|0)/x(32766)))}function jN(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+12>>2]=b;q[e+8>>2]=d;b=mM(e,e+12|0);a=IK(a,c,q[e+8>>2]);nM(b);ue=e+16|0;return a}function bQ(){a:{if(o[370548]&1){break a}if(!oU(370548)){break a}SP();q[92635]=372160;q[92636]=370540;sU(370548)}return q[92636]}function tv(a,b){a=a|0;b=b|0;var c=0;b=q[b+4>>2];q[a>>2]=q[b+332>>2];c=a;a=q[b+336>>2];q[c+4>>2]=a;if(a){q[a+4>>2]=q[a+4>>2]+1}}function eI(a,b){var c=0;c=q[a+24>>2];if((c|0)==q[a+28>>2]){return n[q[q[a>>2]+52>>2]](a,b)|0}q[a+24>>2]=c+4;q[c>>2]=b;return b}function eF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(b){n[q[q[b>>2]>>2]](b)|0;n[q[q[b>>2]+172>>2]](b,c,d,0);n[q[q[b>>2]+8>>2]](b)|0}}function Zk(a){a=a|0;var b=0;q[a>>2]=4216;b=q[a+20>>2];if(b){q[a+24>>2]=b;_U(b)}b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}return a|0}function Sl(a,b){a=a|0;b=b|0;var c=0;c=q[a+16>>2];a=q[a+12>>2];if((c-a|0)/148>>>0>b>>>0){a=q[a+w(b,148)>>2]}else{a=0}return a|0}function Iq(a,b){a=a|0;b=b|0;var c=0;c=q[a+48>>2];a=q[a+44>>2];if((c-a|0)/24>>>0<=b>>>0){lU();F()}return q[(w(b,24)+a|0)+12>>2]}function Gq(a,b){a=a|0;b=b|0;var c=0;c=q[a+48>>2];a=q[a+44>>2];if((c-a|0)/24>>>0<=b>>>0){lU();F()}return q[(w(b,24)+a|0)+16>>2]}function Fq(a,b){a=a|0;b=b|0;var c=0;c=q[a+48>>2];a=q[a+44>>2];if((c-a|0)/24>>>0<=b>>>0){lU();F()}return q[(w(b,24)+a|0)+20>>2]}function DB(a){a=a|0;var b=0;b=a+ -8|0;a=q[a- -64>>2];if((a|0)>=0){bw(a,0)}mC(q[b+24>>2]?b+24|0:b+20|0,b+36|0,b+40|0,r[b+68|0])}function CQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){q[d>>2]=o[b|0];d=d+4|0;b=b+1|0;continue}break}return c|0}function iO(a,b,c,d,e,f){a=n[q[q[a+8>>2]+4>>2]](a+8|0)|0;a=qM(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){q[b>>2]=((a|0)/12|0)%12}}function bu(a){a=a|0;q[a+56>>2]=26260;q[a>>2]=26240;q[a+4>>2]=8052;if(o[a+47|0]<=-1){_U(q[a+36>>2])}bH(a+4|0);ZG(a+56|0);_U(a)}function Yn(a){a=a|0;var b=0,c=0;b=a+4|0;c=q[b>>2];q[b>>2]=c+ -1;if((c|0)==1){n[q[q[a>>2]+16>>2]](a);return 0}return q[a+4>>2]}function Rw(a,b){var c=0;if(b){Rw(a,q[b>>2]);Rw(a,q[b+4>>2]);c=b+20|0;a=q[c>>2];q[c>>2]=0;if(a){n[q[q[a>>2]+8>>2]](a)|0}_U(b)}}function MN(a,b,c,d,e,f){a=n[q[q[a+8>>2]+4>>2]](a+8|0)|0;a=oL(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){q[b>>2]=((a|0)/12|0)%12}}function LQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){o[d|0]=r[b|0];d=d+1|0;b=b+1|0;continue}break}return c|0}function tH(a){q[a>>2]=348400;oQ(a+4|0);q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;return a}function qW(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return n[a](b,c,d,e,f,g,h,i,j)|0}function dH(a){q[a>>2]=348336;oQ(a+4|0);q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;return a}function _S(a){var b=0,c=0;a=a?a:1;while(1){a:{b=ZU(a);if(b){break a}c=q[93109];if(!c){break a}n[c]();continue}break}return b}function Qq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=q[a+60>>2];a=q[a+56>>2];if(d-a>>4>>>0<=b>>>0){lU();F()}q[((b<<4)+a|0)+12>>2]=c}function $S(a,b){var c=0,d=0,e=0,f=0;c=sV(b);d=_S(c+13|0);q[d+8>>2]=0;q[d+4>>2]=c;q[d>>2]=c;e=a,f=kV(jg(d),b,c+1|0),q[e>>2]=f}function $D(a){a=a|0;var b=0;q[a>>2]=342368;b=a+ -4|0;q[b>>2]=342316;a=a+8|0;JE(q[a>>2]);a=q[a>>2];if(a){_U(EE(a))}return b|0}function $B(a){a=a|0;if(!q[a+40>>2]){Zv(a+40|0);Yv(34962,q[a+40>>2]);_v(34962,q[a+16>>2],q[q[a+44>>2]>>2],35040);Yv(34962,0)}}function nH(a){a=a|0;var b=0;if((n[q[q[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=q[a+12>>2];q[b+12>>2]=a+1;return oH(o[a|0])|0}function Yu(a,b){a=a|0;b=b|0;var c=0;b=q[b+4>>2];a=yp(a);q[a+8>>2]=q[b+200>>2];c=q[b+196>>2];q[a>>2]=q[b+192>>2];q[a+4>>2]=c}function Xu(a,b){a=a|0;b=b|0;var c=0;b=q[b+4>>2];a=yp(a);q[a+8>>2]=q[b+216>>2];c=q[b+212>>2];q[a>>2]=q[b+208>>2];q[a+4>>2]=c}function Mu(a,b){a=a|0;b=b|0;var c=0;b=q[b+4>>2];a=yp(a);q[a+8>>2]=q[b+232>>2];c=q[b+228>>2];q[a>>2]=q[b+224>>2];q[a+4>>2]=c}function IU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(CU(a,q[b+8>>2],0)){GU(b,c,d);return}a=q[a+8>>2];n[q[q[a>>2]+28>>2]](a,b,c,d)}function vM(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;EH(d+8|0,b);b=pM(d+8|0);e=c,f=RM(b),q[e>>2]=f;SM(a,b);kL(d+8|0);ue=d+16|0}function nQ(){a:{if(o[370560]&1){break a}if(!oU(370560)){break a}mQ(370552,bQ());q[92639]=370552;sU(370560)}return q[92639]}function gO(a,b,c,d,e,f){a=n[q[q[a+8>>2]>>2]](a+8|0)|0;a=qM(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){q[b>>2]=((a|0)/12|0)%7}}function dR(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+12>>2]=d;d=mM(e+8|0,e+12|0);a=LJ(0,a,b,c?c:370368);nM(d);ue=e+16|0;return a}function aR(a){var b=0,c=0;b=ue-16|0;ue=b;q[b+12>>2]=a;a=mM(b+8|0,b+12|0);c=ue-16|0;ue=c;ue=c+16|0;nM(a);ue=b+16|0;return 0}function _G(a){a=a|0;q[a>>2]=348744;$G(a);kL(a+28|0);_U(q[a+32>>2]);_U(q[a+36>>2]);_U(q[a+48>>2]);_U(q[a+60>>2]);return a|0}function Xs(a,b){var c=0,d=0;c=q[b+28>>2];d=q[b+44>>2];b=q[b+12>>2];q[a+12>>2]=1065353216;q[a+8>>2]=d;q[a+4>>2]=c;q[a>>2]=b}function Uv(a){a=a|0;var b=0;q[a>>2]=27672;sC(q[a+4>>2],a);b=q[a+4>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+4>>2]=0}return a|0}function Lq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=q[a+48>>2];a=q[a+44>>2];if((d-a|0)/24>>>0<=b>>>0){lU();F()}BT(w(b,24)+a|0,c)}function LP(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+8>>2]=a;while(1){if(b>>>0>>0){MP(d+8|0,b);b=b+1|0;continue}break}ue=d+16|0}function Ky(a,b){var c=0;c=q[a+196>>2];a:{if(c){c=q[c+20>>2];if(c){break a}}Yv(34963,q[b+32>>2]);c=b}q[a+204>>2]=q[c+28>>2]}function KN(a,b,c,d,e,f){a=n[q[q[a+8>>2]>>2]](a+8|0)|0;a=oL(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){q[b>>2]=((a|0)/12|0)%7}}function Dp(a,b,c){var d=x(0),e=x(0),f=x(0);e=u[b>>2];f=u[b+4>>2];d=u[c>>2];u[a+8>>2]=d*u[b+8>>2];u[a+4>>2]=d*f;u[a>>2]=e*d}function CI(a,b){q[a+20>>2]=0;q[a+24>>2]=b;q[a+12>>2]=0;q[a+4>>2]=4098;q[a+8>>2]=6;q[a+16>>2]=!b;lV(a+32|0,0,40);oQ(a+28|0)}function _k(a){a=a|0;var b=0;q[a>>2]=4216;b=q[a+20>>2];if(b){q[a+24>>2]=b;_U(b)}b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}_U(a)}function XK(a,b){var c=0,d=x(0);c=ue-16|0;ue=c;YK(c,a,b,0);d=dK(q[c>>2],q[c+4>>2],q[c+8>>2],q[c+12>>2]);ue=c+16|0;return d}function RH(a){var b=0;b=q[a+12>>2];if((b|0)==q[a+16>>2]){return n[q[q[a>>2]+40>>2]](a)|0}q[a+12>>2]=b+1;return oH(o[b|0])}function Pq(a,b){a=a|0;b=b|0;var c=0;c=q[a+60>>2];a=q[a+56>>2];if(c-a>>4>>>0<=b>>>0){lU();F()}return q[((b<<4)+a|0)+12>>2]}function Lp(a){q[a>>2]=0;q[a+16>>2]=4896;q[a+12>>2]=194;lV(a+20|0,0,124);o[a+146|0]=0;o[a+144|0]=256;o[a+145|0]=1;return a}function BL(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;EH(d+8|0,b);b=lL(d+8|0);e=c,f=RM(b),o[e|0]=f;SM(a,b);kL(d+8|0);ue=d+16|0}function rn(a,b){a=a|0;b=x(b);var c=0;c=ue-16|0;ue=c;q[c+4>>2]=0;u[c>>2]=b;o[c+8|0]=1;n[q[q[a>>2]+344>>2]](a,c);ue=c+16|0}function rU(a){var b=0;a:{a=q[a+8>>2];b=r[a|0];if((b|0)!=1){if(b&2){break a}o[a|0]=2;a=1}else{a=0}return a}nU(362077);F()}function PM(a,b,c){c=q[c>>2];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=q[a>>2]){break a}}else{a=b}return a}a=a+4|0;continue}}function OT(a,b,c){var d=0,e=0,f=0;d=ue-16|0;ue=d;VS(a);hM(a);f=b;b=sV(b);e=uL(c);FT(a,f,b,b+e|0);yT(a,kM(c),e);ue=d+16|0}function FF(a){a=a|0;var b=0;if(a){b=q[a+4>>2];if(q[a+164>>2]){a=a+164|0;Ea(1,a|0);q[a>>2]=0}n[q[q[b>>2]+240>>2]](b,0,0)}}function tk(a,b){var c=0;a=q[a+24>>2];if((b|0)>0){while(1){a=q[a+8>>2];c=c+1|0;if((c|0)!=(b|0)){continue}break}}return a}function bE(a){a=a|0;var b=0;q[a>>2]=342368;b=a+ -4|0;q[b>>2]=342316;a=a+8|0;JE(q[a>>2]);a=q[a>>2];if(a){_U(EE(a))}_U(b)}function YQ(a,b,c,d,e,f){var g=0;g=ue-16|0;ue=g;q[g+12>>2]=f;f=mM(g+8|0,g+12|0);a=SK(a,b,c,d,e);nM(f);ue=g+16|0;return a}function AK(a,b,c){if(a|b){while(1){c=c+ -1|0;o[c|0]=a&7|48;a=(b&7)<<29|a>>>3;b=b>>>3|0;if(a|b){continue}break}}return c}function wH(a){a=a|0;var b=0;if((n[q[q[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=q[a+12>>2];q[b+12>>2]=a+4;return q[a>>2]}function pw(a){a=a|0;var b=0;q[a>>2]=27924;b=a+ -8|0;q[b>>2]=27892;a=q[a+16>>2];if(a){_U(a)}Xv(b+32|0);Uv(b);return b|0}function lM(a,b,c){c=r[c|0];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=r[a|0]){break a}}else{a=b}return a}a=a+1|0;continue}}function dI(a){var b=0;b=q[a+12>>2];if((b|0)==q[a+16>>2]){return n[q[q[a>>2]+40>>2]](a)|0}q[a+12>>2]=b+4;return q[b>>2]}function bR(a){var b=0,c=0;b=ue-16|0;ue=b;q[b+12>>2]=a;a=mM(b+8|0,b+12|0);c=q[q[91624]>>2];nM(a);ue=b+16|0;return c?4:1}function ZK(a,b){var c=0,d=0;c=ue-16|0;ue=c;YK(c,a,b,1);d=_J(q[c>>2],q[c+4>>2],q[c+8>>2],q[c+12>>2]);ue=c+16|0;return d}function VR(a){a=a|0;a:{if(o[370676]&1){break a}if(!oU(370676)){break a}WR();q[92668]=371808;sU(370676)}return q[92668]}function SR(a){a=a|0;a:{if(o[370668]&1){break a}if(!oU(370668)){break a}TR();q[92666]=371776;sU(370668)}return q[92666]}function PR(a){a=a|0;a:{if(o[370660]&1){break a}if(!oU(370660)){break a}QR();q[92664]=371472;sU(370660)}return q[92664]}function MR(a){a=a|0;a:{if(o[370652]&1){break a}if(!oU(370652)){break a}NR();q[92662]=371168;sU(370652)}return q[92662]}function IR(a){a=a|0;a:{if(o[370644]&1){break a}if(!oU(370644)){break a}JR();q[92660]=370992;sU(370644)}return q[92660]}function FR(a){a=a|0;a:{if(o[370636]&1){break a}if(!oU(370636)){break a}GR();q[92658]=370816;sU(370636)}return q[92658]}function wf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;n[q[q[b>>2]+20>>2]](d+8|0,b,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function oE(a,b){a=a|0;b=b|0;a=q[b>>2];if(a){Oa(1,a+28|0);a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}q[b>>2]=0}}function nt(a,b){var c=0,d=0;c=q[b+4>>2];d=q[b>>2];b=q[b+8>>2];q[a+12>>2]=0;q[a+8>>2]=b;q[a>>2]=d;q[a+4>>2]=c;return a}function Xk(a){var b=0;b=1;a:{if(q[a+184>>2]>0){break a}b=0;if(q[a+16>>2]==2){break a}b=q[a+20>>2]>2]}return b}function Sq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=q[a+60>>2];a=q[a+56>>2];if(d-a>>4>>>0<=b>>>0){lU();F()}BT((b<<4)+a|0,c)}function xw(a){a=a|0;Yv(34963,q[a+32>>2]);_v(34963,w(q[a+28>>2],q[a+16>>2]),q[a+24>>2],35048);Yv(34963,0);o[a+21|0]=0}function pp(a,b){var c=0;c=q[b+28>>2];b=q[c+124>>2];if(!b){q[a>>2]=0;return}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[c+124>>2]}function HS(a,b){var c=0;JS(a);c=q[a+8>>2];while(1){xS(c);c=q[a+8>>2]+4|0;q[a+8>>2]=c;b=b+ -1|0;if(b){continue}break}}function yw(a){a=a|0;Yv(34963,q[a+24>>2]);_v(34963,w(q[a+20>>2],q[a+8>>2]),q[a+16>>2],35048);Yv(34963,0);o[a+13|0]=0}function gW(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;n[a](b,c,d,e,f,g,h,i,j)}function fm(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+604>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+604>>2]}q[c>>2]=a}function dm(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+600>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+600>>2]}q[c>>2]=a}function bm(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+596>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+596>>2]}q[c>>2]=a}function Zl(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+588>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+588>>2]}q[c>>2]=a}function ZQ(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;q[f+12>>2]=e;e=mM(f+8|0,f+12|0);a=LJ(a,b,c,d);nM(e);ue=f+16|0;return a}function Xl(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+584>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+584>>2]}q[c>>2]=a}function VQ(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;q[f+12>>2]=e;e=mM(f+8|0,f+12|0);a=QK(a,b,c,d);nM(e);ue=f+16|0;return a}function Lv(a,b){q[a+24>>2]=0;q[a+8>>2]=b;o[a+4|0]=1;q[a>>2]=27488;q[a+12>>2]=0;q[a+16>>2]=0;o[a+28|0]=1;o[a+20|0]=0}function GO(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;q[f+12>>2]=e;e=mM(f+8|0,f+12|0);a=RK(a,b,c,d);nM(e);ue=f+16|0;return a}function $l(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+592>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+592>>2]}q[c>>2]=a}function tP(a,b){var c=0;c=ue-16|0;ue=c;q[c+8>>2]=q[a>>2];a=c+8|0;q[a>>2]=q[a>>2]+(b<<2);ue=c+16|0;return q[c+8>>2]}function np(a,b){var c=0;c=q[b+28>>2];b=q[c+96>>2];if(!b){q[a>>2]=0;return}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[c+96>>2]}function lp(a,b){var c=0;c=q[b+28>>2];b=q[c+68>>2];if(!b){q[a>>2]=0;return}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[c+68>>2]}function jp(a,b){var c=0;c=q[b+28>>2];b=q[c+40>>2];if(!b){q[a>>2]=0;return}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[c+40>>2]}function hp(a,b){var c=0;c=q[b+28>>2];b=q[c+12>>2];if(!b){q[a>>2]=0;return}n[q[q[b>>2]>>2]](b)|0;q[a>>2]=q[c+12>>2]}function aW(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return n[a](b,c,d,e,f,g,h,i)|0}function _D(a){a=a|0;var b=0;q[a+4>>2]=342368;q[a>>2]=342316;JE(q[a+12>>2]);b=q[a+12>>2];if(b){_U(EE(b))}return a|0}function WS(a){var b=0;b=a+8|0;if(!q[b>>2]){n[q[q[a>>2]+16>>2]](a);return}if((iQ(b)|0)==-1){n[q[q[a>>2]+16>>2]](a)}}function VJ(a,b,c,d,e,f,g,h,i){q[a>>2]=b;q[a+4>>2]=c;q[a+8>>2]=d;q[a+12>>2]=e&65535|(i>>>16&32768|e>>>16&32767)<<16}function NS(a){var b=0,c=0,d=0;c=q[a+4>>2];b=q[a>>2];a=q[a+8>>2];b=b+(a>>1)|0;d=b;if(a&1){c=q[c+q[b>>2]>>2]}n[c](d)}function EN(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b+ -4|0;if(a>>>0>=b>>>0){break a}DI(a,b);a=a+4|0;continue}}}function DN(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b+ -1|0;if(a>>>0>=b>>>0){break a}BO(a,b);a=a+1|0;continue}}}function CB(a){a=a|0;var b=0;b=q[a+72>>2];if((b|0)>=0){bw(b,0)}mC(q[a+24>>2]?a+24|0:a+20|0,a+36|0,a+40|0,r[a+68|0])}function rw(a){a=a|0;var b=0;q[a>>2]=27924;b=a+ -8|0;q[b>>2]=27892;a=q[a+16>>2];if(a){_U(a)}Xv(b+32|0);Uv(b);_U(b)}function kS(a){a=a|0;a:{if(o[370804]&1){break a}if(!oU(370804)){break a}BR(370792,356084);sU(370804)}return 370792}function iS(a){a=a|0;a:{if(o[370788]&1){break a}if(!oU(370788)){break a}yI(370776,356072);sU(370788)}return 370776}function gS(a){a=a|0;a:{if(o[370772]&1){break a}if(!oU(370772)){break a}BR(370760,355988);sU(370772)}return 370760}function eS(a){a=a|0;a:{if(o[370756]&1){break a}if(!oU(370756)){break a}yI(370744,355964);sU(370756)}return 370744}function cS(a){a=a|0;a:{if(o[370740]&1){break a}if(!oU(370740)){break a}BR(370728,355928);sU(370740)}return 370728}function aS(a){a=a|0;a:{if(o[370724]&1){break a}if(!oU(370724)){break a}yI(370712,355916);sU(370724)}return 370712}function _R(a){a=a|0;a:{if(o[370708]&1){break a}if(!oU(370708)){break a}BR(370696,355880);sU(370708)}return 370696}function YR(a){a=a|0;a:{if(o[370692]&1){break a}if(!oU(370692)){break a}yI(370680,355868);sU(370692)}return 370680}function Vh(a,b){a=a|0;b=b|0;var c=0;q[a>>2]=0;c=a;a=q[b+24>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+24>>2]}q[c>>2]=a}function Hp(a){var b=x(0),c=x(0);b=u[a>>2];c=x(b*b);b=u[a+4>>2];c=x(c+x(b*b));b=u[a+8>>2];return x(E(x(c+x(b*b))))}function $Q(a){a=a|0;a:{if(aR(q[a+8>>2])){a=-1}else{a=q[a+8>>2];if(a){break a}a=1}return a|0}return(bR(a)|0)==1|0}function es(a){a=a|0;var b=0,c=0;b=_S(12);q[b+8>>2]=q[a+8>>2];c=q[a+4>>2];q[b>>2]=q[a>>2];q[b+4>>2]=c;return b|0}function CE(a){var b=0;b=ue-16|0;ue=b;q[b+12>>2]=0;Va(q[a>>2],4112,b+12|0);ue=b+16|0;return(q[b+12>>2]&-2)==4114}function tU(a){var b=0,c=0,d=0;b=ue-16|0;ue=b;c=q[ZM(b+8|0,q[a+4>>2])>>2],d=1,o[c|0]=d;o[q[a+8>>2]]=1;ue=b+16|0}function ow(a){a=a|0;var b=0;q[a+8>>2]=27924;q[a>>2]=27892;b=q[a+24>>2];if(b){_U(b)}Xv(a+32|0);Uv(a);return a|0}function of(a){a=a|0;var b=0,c=0;b=iG(q[a+8>>2]);_F(q[a+8>>2],0,2);c=iG(q[a+8>>2]);_F(q[a+8>>2],b,0);return c|0}function kI(a){var b=0;a:{if(!SH(-1,q[a+76>>2])){a=q[a+76>>2];break a}b=a;a=mI(a);q[b+76>>2]=a}return a<<24>>24}function UP(){var a=0;a=ue-16|0;ue=a;q[93044]=0;q[93045]=0;q[a+12>>2]=0;sv(372192,a+12|0);o[372320]=0;ue=a+16|0}function Jh(a,b){a=a|0;b=b|0;if((n[q[q[a>>2]+20>>2]](a)|0)>(b|0)){a=q[q[a+12>>2]+(b<<2)>>2]}else{a=0}return a|0}function Ep(a,b,c){u[a>>2]=u[b>>2]-u[c>>2];u[a+4>>2]=u[b+4>>2]-u[c+4>>2];u[a+8>>2]=u[b+8>>2]-u[c+8>>2];return a}function AL(a){a:{a=q[a+4>>2]&74;if(a){if((a|0)==64){return 8}if((a|0)!=8){break a}return 16}return 0}return 10}function xJ(a,b){a=a|0;b=b|0;var c=0,d=0;n[q[q[a>>2]+24>>2]](a)|0;b=cJ(b);q[a+36>>2]=b;c=a,d=dJ(b),o[c+44|0]=d}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(q[b+4>>2]==(c|0)){a:{a=q[b>>2];if(d){Ua(a|0);break a}Sa(a|0)}}}function kO(a,b,c,d,e){b=lO(b,c,d,e,4);if(!(r[d|0]&4)){q[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)+ -1900}}function fP(a,b){var c=0;c=ue-16|0;ue=c;q[c+8>>2]=q[a>>2];a=c+8|0;q[a>>2]=q[a>>2]+b;ue=c+16|0;return q[c+8>>2]}function aE(a){a=a|0;var b=0;q[a+4>>2]=342368;q[a>>2]=342316;JE(q[a+12>>2]);b=q[a+12>>2];if(b){_U(EE(b))}_U(a)}function TM(a,b){var c=0;c=ue-16|0;ue=c;EH(c+8|0,a);OM(WH(c+8|0),355328,355354,b);kL(c+8|0);ue=c+16|0;return b}function ON(a,b,c,d,e){b=PN(b,c,d,e,4);if(!(r[d|0]&4)){q[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)+ -1900}}function CU(a,b,c){if(!c){return q[a+4>>2]==q[b+4>>2]}if((a|0)==(b|0)){return 1}return!kK(q[a+4>>2],q[b+4>>2])}function CJ(a,b){a=a|0;b=b|0;var c=0,d=0;n[q[q[a>>2]+24>>2]](a)|0;b=eJ(b);q[a+36>>2]=b;c=a,d=dJ(b),o[c+44|0]=d}function vo(a){a=a|0;var b=0;b=a;a=w(q[a+4>>2],1103515245)+12345&2147483647;q[b+4>>2]=a;return(a>>>0)%32767|0}function fK(a,b){var c=0;c=ue-16|0;q[c+12>>2]=a;a=((b<<2)-(((b|0)!=0)<<2)|0)+a|0;q[c+8>>2]=a+4;return q[a>>2]}function _E(a,b,c,d,e){a=a|0;b=x(b);c=x(c);d=x(d);e=x(e);ro(a+24|0,x(x(b*x(3.141592502593994))/x(180)),c,d,e)}function RE(a){a=a|0;var b=0;b=q[a>>2];n[q[q[b>>2]+352>>2]](b);b=q[a+4>>2];n[q[q[b>>2]+188>>2]](b,u[a+12>>2])}function Co(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+12>>2]=d;Do(e+8|0,b+8|0,c,e+12|0);q[a>>2]=q[e+8>>2];ue=e+16|0}function rE(a){a=a|0;var b=0;q[a>>2]=342840;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function jE(a){a=a|0;var b=0;q[a>>2]=342504;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function WQ(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+12>>2]=c;c=mM(d+8|0,d+12|0);a=rK(a,b);nM(c);ue=d+16|0;return a}function qt(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;q[c+12>>2]=0;cV(c+12|0,b,a);ue=c+16|0;return q[c+12>>2]}function eT(a,b){var c=0;if(b>>>0<=9999){return hT(a,b)}c=a;a=(b>>>0)/1e4|0;return gT(hT(c,a),b-w(a,1e4)|0)}function XT(a){var b=0,c=0;b=ue-16|0;ue=b;c=b+8|0;o[c+4|0]=1;q[c>>2]=a+12;q[a+88>>2]=q[a+88>>2]|4;ue=b+16|0}function Vk(a,b){a=q[a+176>>2];if(a){while(1){if(q[a+820>>2]<=1){Jj(a,b)}a=q[a+8>>2];if(a){continue}break}}}function QH(a){var b=0;b=q[a+12>>2];if((b|0)==q[a+16>>2]){return n[q[q[a>>2]+36>>2]](a)|0}return oH(o[b|0])}function qw(a){a=a|0;var b=0;q[a+8>>2]=27924;q[a>>2]=27892;b=q[a+24>>2];if(b){_U(b)}Xv(a+32|0);Uv(a);_U(a)}function fW(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;n[a](b,c,d,e,f,g,h,i)}function ef(a){a=a|0;var b=0;q[a>>2]=1380;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function Ze(a){a=a|0;var b=0;q[a>>2]=1032;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0;q[a+8>>2]=0}return a|0}function Jy(a,b){a=a|0;b=b|0;var c=0;c=q[a+176>>2];if(c){n[q[q[c>>2]+4>>2]](c);q[a+176>>2]=0}q[a+176>>2]=b}function Fy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ue-16|0;ue=d;Gy(d+8|0,b+16|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function jU(a,b){var c=0;c=q[a+4>>2];while(1){if((b|0)!=(c|0)){eU(a);c=c+ -8|0;continue}break}q[a+4>>2]=b}function iU(a,b){var c=0;c=q[a+4>>2];while(1){if((b|0)!=(c|0)){eU(a);c=c+ -4|0;continue}break}q[a+4>>2]=b}function UI(){var a=0;a=bJ(369408);q[92350]=348516;q[a>>2]=348536;q[92351]=0;aJ(q[87126]+369400|0,370060)}function SI(){var a=0;a=$I(369320);q[92328]=348468;q[a>>2]=348488;q[92329]=0;aJ(q[87114]+369312|0,369996)}function OQ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;q[e>>2]=c;q[h>>2]=f;return 3}function MV(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return n[a](b,c,d,e,f,g,h)|0}function Ff(a,b,c){a=a|0;b=b|0;c=c|0;return(r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24))==1162234707|0}function DS(a,b){var c=0;c=q[a+4>>2];while(1){if((b|0)!=(c|0)){rS(a);c=c+ -4|0;continue}break}q[a+4>>2]=b}function qU(a){var b=0,c=0;b=ue-16|0;ue=b;if(r[q[ZM(b+8|0,q[a+4>>2])>>2]]!=1){c=rU(a)}ue=b+16|0;return c}function cI(a){var b=0;b=q[a+12>>2];if((b|0)==q[a+16>>2]){return n[q[q[a>>2]+36>>2]](a)|0}return q[b>>2]}function fl(a){oo(a);q[a+64>>2]=0;q[a+68>>2]=0;yp(a+72|0);yp(a+84|0);q[a+96>>2]=1;o[a+100|0]=0;return a}function DI(a,b){var c=0;c=ue-16|0;ue=c;q[c+12>>2]=q[a>>2];q[a>>2]=q[b>>2];q[b>>2]=q[c+12>>2];ue=c+16|0}function uw(a){a=a|0;var b=0;b=ue-16|0;ue=b;if(!q[a+32>>2]){Zv(b+12|0);q[a+32>>2]=q[b+12>>2]}ue=b+16|0}function nu(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(26720);F()}a=w(b,12)+a|0;return q[a- -64>>2]-q[a+60>>2]|0}function fp(a,b){var c=0;q[a>>2]=0;c=a;a=q[b+12>>2];if(a){n[q[q[a>>2]>>2]](a)|0;a=q[b+12>>2]}q[c>>2]=a}function Tv(a,b){q[a+4>>2]=b;q[a>>2]=27672;if(!b){qC(0,a);return}n[q[q[b>>2]>>2]](b)|0;qC(q[a+4>>2],a)}function yU(a){a=a|0;var b=0;q[a>>2]=362280;b=q[a+4>>2]+ -12|0;if((iQ(b+8|0)|0)<=-1){_U(b)}return a|0}function tm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;pp(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function sO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!((b|0)>12|c&4)){q[a>>2]=b+ -1;return}q[d>>2]=c|4}function rm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;np(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function qQ(a,b){var c=0,d=0;c=ue-16|0;ue=c;if(q[a>>2]!=-1){d=c+8|0;ZM(d,b);ZM(c,d);ZS(a,c)}ue=c+16|0}function qO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!(b+ -1>>>0>11|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function pm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;jp(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function oO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!(b+ -1>>>0>30|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function nq(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(5920);F()}a=w(b,12)+a|0;return q[a- -64>>2]-q[a+60>>2]|0}function nm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;lp(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function lm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;hp(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function jm(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;fp(c+8|0,q[b+568>>2]);q[a>>2]=q[c+8>>2];ue=c+16|0}function WN(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!((b|0)>12|c&4)){q[a>>2]=b+ -1;return}q[d>>2]=c|4}function UN(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!(b+ -1>>>0>11|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function SN(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!(b+ -1>>>0>30|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function Ap(a,b){var c=x(0),d=x(0);c=u[b>>2];d=u[b+4>>2];u[a+8>>2]=-u[b+8>>2];u[a+4>>2]=-d;u[a>>2]=-c}function $C(a){a=a|0;var b=0;b=q[a+16>>2];if(b){ba(b|0)}q[a+52>>2]=q[a+48>>2];q[a- -64>>2]=q[a+60>>2]}function lu(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(26720);F()}a=w(b,12)+a|0;return q[a+16>>2]-q[a+12>>2]|0}function ZS(a,b){while(1){if(q[a>>2]==1){continue}break}if(!q[a>>2]){q[a>>2]=1;n[860](b);q[a>>2]=-1}}function Ly(a,b){b=q[b>>2];b=q[(b?b+ -4|0:0)+12>>2];a=q[a+196>>2];if(!(q[a+16>>2]?a:0)){Yv(34962,b)}}function Fp(a,b){u[a>>2]=u[b>>2]+u[a>>2];u[a+4>>2]=u[b+4>>2]+u[a+4>>2];u[a+8>>2]=u[b+8>>2]+u[a+8>>2]}function lq(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(5920);F()}a=w(b,12)+a|0;return q[a+16>>2]-q[a+12>>2]|0}function gU(a){var b=0;b=ue-16|0;ue=b;q[a>>2]=0;q[a+4>>2]=0;q[b+12>>2]=0;sv(a+8|0,b+12|0);ue=b+16|0}function ck(a,b,c){dk(a,(w(c,48)+b|0)+848|0,(q[b+148>>2]+w(c,52)|0)+2804|0,u[b+828>>2],u[b+824>>2])}function Mp(a){var b=0;o[a+146|0]=1;ZT(a);b=q[q[a+16>>2]+4>>2];if(b){n[b](q[a+4>>2])}YT(a);return a}function rO(a,b,c,d,e){b=lO(b,c,d,e,3);c=q[d>>2];if(!((b|0)>365|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function rL(a,b,c){var d=0;d=ue-16|0;ue=d;q[d+12>>2]=b;KI(a,d+12|0);KI(a+4|0,c);ue=d+16|0;return a}function cv(a){a=a|0;a=q[a+4>>2];a:{if(!r[a+312|0]){rV(27449);a=0;break a}a=q[a+260>>2]}return a|0}function YG(a,b,c){if(c){while(1){q[a>>2]=q[b>>2];a=a+4|0;b=b+4|0;c=c+ -1|0;if(c){continue}break}}}function VN(a,b,c,d,e){b=PN(b,c,d,e,3);c=q[d>>2];if(!((b|0)>365|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function RT(a,b){var c=0;c=ue-32|0;ue=c;VT(c+8|0,c+21|0,c+32|0,b);cL(a,c+21|0,q[c+8>>2]);ue=c+32|0}function QT(a,b){var c=0;c=ue-32|0;ue=c;UT(c+8|0,c+21|0,c+32|0,b);cL(a,c+21|0,q[c+8>>2]);ue=c+32|0}function xn(a){a=a|0;o[a+564|0]=1;if(r[a+24|0]){n[q[q[a>>2]+336>>2]](a)}q[a+580>>2]=q[a+580>>2]+1}function wO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!((b|0)>60|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function tO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!((b|0)>59|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function tF(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);a=q[a>>2];n[q[q[a>>2]+228>>2]](a,b,c,d,e)}function pO(a,b,c,d,e){b=lO(b,c,d,e,2);c=q[d>>2];if(!((b|0)>23|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function nF(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);a=q[a>>2];n[q[q[a>>2]+220>>2]](a,b,c,d,e)}function mI(a){var b=0;b=ue-16|0;ue=b;EH(b+8|0,a);a=HI(FH(b+8|0),32);kL(b+8|0);ue=b+16|0;return a}function mF(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);a=q[a>>2];n[q[q[a>>2]+212>>2]](a,b,c,d,e)}function lF(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);a=q[a>>2];n[q[q[a>>2]+200>>2]](a,b,c,d,e)}function fg(a){if((n[q[q[a>>2]+36>>2]](a)|0)<=7){a=(n[q[q[a>>2]+36>>2]](a)|0)<2}else{a=1}return a}function _N(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!((b|0)>60|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function XN(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!((b|0)>59|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function TN(a,b,c,d,e){b=PN(b,c,d,e,2);c=q[d>>2];if(!((b|0)>23|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function BO(a,b){var c=0;c=ue-16|0;ue=c;o[c+15|0]=r[a|0];o[a|0]=r[b|0];o[b|0]=r[c+15|0];ue=c+16|0}function xO(a,b,c,d,e){b=lO(b,c,d,e,1);c=q[d>>2];if(!((b|0)>6|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function qP(a,b){var c=0;SS(a);q[a+8>>2]=q[b+8>>2];c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;hM(b)}function iW(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;n[a](b,c,d,e,f,g,h)}function bP(a,b){var c=0;RS(a);q[a+8>>2]=q[b+8>>2];c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;hM(b)}function IV(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=x(f);g=g|0;return n[a](b,c,d,e,f,g)|0}function Gp(a,b){u[a>>2]=u[b>>2]*u[a>>2];u[a+4>>2]=u[b>>2]*u[a+4>>2];u[a+8>>2]=u[b>>2]*u[a+8>>2]}function $N(a,b,c,d,e){b=PN(b,c,d,e,1);c=q[d>>2];if(!((b|0)>6|c&4)){q[a>>2]=b;return}q[d>>2]=c|4}function Yq(a){a=a|0;var b=0;b=q[a+40>>2];if(!b){return 0}return q[(q[a+4>>2]<(b|0)?40:4)+a>>2]}function YU(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(CU(a,q[b+8>>2],f)){PU(b,c,d,e)}}function Wq(a){a=a|0;var b=0;b=q[a+36>>2];if(!b){return 0}return q[(q[a+4>>2]<(b|0)?36:4)+a>>2]}function WT(a){var b=0;b=w(32-z(a|1)|0,1233)>>>12|0;return(b-(t[(b<<2)+361968>>2]>a>>>0)|0)+1|0}function Ru(a,b){a=a|0;b=b|0;q[q[a+4>>2]+244>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24)}function Pu(a,b){a=a|0;b=b|0;q[q[a+4>>2]+240>>2]=r[b|0]|r[b+1|0]<<8|(r[b+2|0]<<16|r[b+3|0]<<24)}function NV(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return n[a](b,c,d,e,f,g)|0}function GT(a){var b=0;b=ue-16|0;ue=b;YO(a,1);xT(a,1,45);o[b+15|0]=0;XO(a+1|0,b+15|0);ue=b+16|0}function bW(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;return n[a](b,c,d,e,f,g)|0}function Qt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;n[q[q[b>>2]+16>>2]](a,b,q[c+8>>2],q[c+12>>2],0,d)}function Ip(a,b){return x(x(x(u[a>>2]*u[b>>2])+x(u[a+4>>2]*u[b+4>>2]))+x(u[a+8>>2]*u[b+8>>2]))}function xu(a,b){q[a+16>>2]=0;q[a+20>>2]=2;p[a+12>>1]=0;q[a+8>>2]=0;q[a+4>>2]=b;q[a>>2]=26916}function pN(a){var b=0;b=ue-16|0;ue=b;a=q[ZM(b+8|0,kM(a)+(uL(a)<<2)|0)>>2];ue=b+16|0;return a}function mt(a,b){var c=0;c=q[b>>2];b=q[b+4>>2];q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=c;q[a+4>>2]=b}function hM(a){var b=0;b=a;a=0;while(1){if((a|0)!=3){q[(a<<2)+b>>2]=0;a=a+1|0;continue}break}}function Lu(a){a=a|0;var b=0;q[a>>2]=27124;b=q[a+4>>2];q[a+4>>2]=0;if(b){_U(vv(b))}return a|0}function FQ(a){a=a|0;var b=0;q[a>>2]=355636;b=q[a+8>>2];if(!(!b|!r[a+12|0])){_U(b)}return a|0}function FB(a,b){a=xj(q[(q[a+24>>2]?a+24|0:a+20|0)>>2]);return q[a+4>>2]-q[a>>2]>>2>>>0>b>>>0}function yS(a){var b=0;if(a>>>0>=11){b=a+16&-16;a=b+ -1|0;a=(a|0)==11?b:a}else{a=10}return a}function gG(a){var b=0;q[a+56>>2]=q[91805];b=q[91805];if(b){q[b+52>>2]=a}q[91805]=a;return a}function TK(a){var b=0;b=q[91624];if(a){q[91624]=(a|0)==-1?367172:a}return(b|0)==367172?-1:b}function OK(a){var b=0,c=0;c=a;while(1){b=c;c=b+4|0;if(q[b>>2]){continue}break}return b-a>>2}function MS(a,b){while(1){if(q[a+8>>2]!=(b|0)){JS(a);q[a+8>>2]=q[a+8>>2]+ -4;continue}break}}function Ck(a){a=a|0;var b=0;q[a>>2]=4160;b=q[a+472>>2];if(b){q[a+476>>2]=b;_U(b)}return a|0}function sE(a){a=a|0;var b=0;q[a>>2]=342840;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function qI(a,b){var c=0;a:{c=q[a>>2];if(!c){break a}if(!SH(eI(c,b),-1)){break a}q[a>>2]=0}}function pA(a){a=a|0;var b=0;q[a>>2]=337928;b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}return a|0}function oI(a,b){var c=0;a:{c=q[a>>2];if(!c){break a}if(!SH(TH(c,b),-1)){break a}q[a>>2]=0}}function kE(a){a=a|0;var b=0;q[a>>2]=342504;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function Lf(a,b,c,d,e){var f=0;f=ue-16|0;ue=f;Mf(f+8|0,b,c,d,e);q[a>>2]=q[f+8>>2];ue=f+16|0}function By(a,b){a=a|0;b=b|0;var c=0;c=ue-16|0;ue=c;ex(c+8|0,b);q[a>>2]=q[c+8>>2];ue=c+16|0}function zu(a,b){var c=0;c=b;b=q[a+8>>2];q[a+8>>2]=c+b;return q[a+16>>2]+w(b,q[a+20>>2])|0}function pW(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=n[a](b,c,d,e)|0;re(we|0);return a|0}function No(a,b,c){var d=0;d=ue-16|0;ue=d;Lo(d+8|0,b- -64|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function Jm(a,b,c){a=a|0;b=b|0;c=c|0;n[q[q[a>>2]+200>>2]](a,b,u[c>>2],u[c+4>>2],u[c+8>>2])}function GI(a){var b=0;b=q[a>>2];if(b){if(!SH(cI(b),-1)){return!q[a>>2]}q[a>>2]=0}return 1}function FI(a){var b=0;b=q[a>>2];if(b){if(!SH(QH(b),-1)){return!q[a>>2]}q[a>>2]=0}return 1}function xo(a,b,c){a=a|0;b=x(b);c=x(c);return x(x(x(x(c-b)*x(n[q[q[a>>2]+12>>2]](a)))+b))}function ff(a){a=a|0;var b=0;q[a>>2]=1380;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function az(a,b){a=a|0;b=b|0;q[a>>2]=0;b=q[b+16>>2];if(b){n[q[q[b>>2]>>2]](b)|0}q[a>>2]=b}function _e(a){a=a|0;var b=0;q[a>>2]=1032;b=q[a+8>>2];if(b){n[q[q[b>>2]+8>>2]](b)|0}_U(a)}function To(a,b,c){var d=0;d=ue-16|0;ue=d;Uo(d+8|0,b+148|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function ST(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=CL(c);EL(d,DL(d));TT(a,c,b);oT(c);ue=c+16|0}function Ro(a,b,c){var d=0;d=ue-16|0;ue=d;Lo(d+8|0,b+120|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function LK(a,b,c,d){var e=0;e=ue-16|0;ue=e;q[e+12>>2]=d;a=GK(a,b,c,d);ue=e+16|0;return a}function tQ(a,b,c){a=a|0;b=b|0;c=c|0;return(c>>>0<=127?(s[q[87862]+(c<<1)>>1]&b)!=0:0)|0}function XV(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=x(d);e=x(e);f=x(f);return n[a](b,c,d,e,f)|0}function WM(a){var b=0;b=ue-16|0;ue=b;a=q[ZM(b+8|0,kM(a)+uL(a)|0)>>2];ue=b+16|0;return a}function Po(a,b,c){var d=0;d=ue-16|0;ue=d;Lo(d+8|0,b+92|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function Me(){lK();PI();q[91755]=4896;q[91754]=198;Dt();q[91779]=0;q[91780]=0;q[91781]=0}function Ko(a,b,c){var d=0;d=ue-16|0;ue=d;Lo(d+8|0,b+36|0,c);q[a>>2]=q[d+8>>2];ue=d+16|0}function KK(a,b){var c=0;c=ue-16|0;ue=c;q[c+12>>2]=b;a=iK(a,355584,b);ue=c+16|0;return a}function JQ(a,b){a=a|0;b=b|0;if((b|0)>=0){b=q[q[88444]+((b&255)<<2)>>2]}return b<<24>>24}function HQ(a,b){a=a|0;b=b|0;if((b|0)>=0){b=q[q[88056]+((b&255)<<2)>>2]}return b<<24>>24}function Ao(a){q[a+8>>2]=1065353216;q[a+12>>2]=1065353216;q[a>>2]=0;q[a+4>>2]=0;return a}function zW(a,b){var c=0,d=0;c=b&31;d=(-1>>>c&a)<>>a}function pF(a,b,c){a=a|0;b=b|0;c=c|0;a=q[a>>2];return x(x(n[q[q[a>>2]+236>>2]](a,b,c)))}function XR(a){a=a|0;a=371832;while(1){a=oT(a+ -12|0);if((a|0)!=371808){continue}break}}function UT(a,b,c,d){if(!((b|0)==(c|0)|(d|0)>-1)){o[b|0]=45;d=0-d|0;b=b+1|0}VT(a,b,c,d)}function UR(a){a=a|0;a=371800;while(1){a=oT(a+ -12|0);if((a|0)!=371776){continue}break}}function RR(a){a=a|0;a=371760;while(1){a=oT(a+ -12|0);if((a|0)!=371472){continue}break}}function PS(a){var b=0;if(a>>>0>=2){b=a+4&-4;a=b+ -1|0;a=(a|0)==2?b:a}else{a=1}return a}function OR(a){a=a|0;a=371456;while(1){a=oT(a+ -12|0);if((a|0)!=371168){continue}break}}function KR(a){a=a|0;a=371160;while(1){a=oT(a+ -12|0);if((a|0)!=370992){continue}break}}function HR(a){a=a|0;a=370984;while(1){a=oT(a+ -12|0);if((a|0)!=370816){continue}break}}function qA(a){a=a|0;var b=0;q[a>>2]=337928;b=q[a+8>>2];if(b){q[a+12>>2]=b;_U(b)}_U(a)}function nU(a){var b=0;b=ue-16|0;ue=b;q[b+12>>2]=0;b=q[87379];DK(b,a,0);mU(b);gb();F()}function bC(a){a=a|0;q[a+44>>2]=0;q[a+12>>2]=0;o[a+20|0]=1;q[a+16>>2]=q[q[a+36>>2]>>2]}function aC(a){a=a|0;q[a+52>>2]=0;q[a+20>>2]=0;o[a+28|0]=1;q[a+24>>2]=q[q[a+44>>2]>>2]}function OV(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;n[a](b,c,d,e,f,g)}function yW(a){var b=0,c=0;while(1){c=b;if(a){a=a-1&a;b=b+1|0;continue}break}return c}function wE(a,b,c){a=a|0;b=b|0;c=c|0;if(q[b+4>>2]==(c|0)){a=CE(b)}else{a=0}return a|0}function qF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);a=q[a>>2];n[q[q[a>>2]+240>>2]](a,b,c,d)}function mu(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(26720);F()}return q[(w(b,12)+a|0)+60>>2]}function ku(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(26720);F()}return q[(w(b,12)+a|0)+12>>2]}function hs(a){a=a|0;var b=0;b=q[a+116>>2];if(b){q[a+120>>2]=b;_U(b)}Mr(a+32|0);_U(a)}function ZT(a){a:{b:{if(lI(a)){break b}if(!pb(q[a>>2],0)){break a}}TG();F()}q[a>>2]=0}function YI(a,b){var c=0;c=bJ(a+4|0);q[a>>2]=348612;q[c>>2]=348632;aJ(q[87150]+a|0,b)}function WI(a,b){var c=0;c=$I(a+4|0);q[a>>2]=348564;q[c>>2]=348584;aJ(q[87138]+a|0,b)}function LO(a,b){a=a|0;b=b|0;o[a|0]=67109634;o[a+1|0]=262147;o[a+2|0]=1024;o[a+3|0]=4}function $V(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return n[a](b,c,d,e,f)|0}function mq(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(5920);F()}return q[(w(b,12)+a|0)+60>>2]}function jq(a,b){a=a|0;b=b|0;if(b>>>0>=4){kq(5920);F()}return q[(w(b,12)+a|0)+12>>2]}function eQ(a,b){var c=0;c=ue-16|0;ue=c;q[c+12>>2]=b;KI(a,c+12|0);ue=c+16|0;return a}function cW(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return n[a](b,c,d,e,f)|0}function bT(a,b,c){if(c){while(1){q[a>>2]=b;a=a+4|0;c=c+ -1|0;if(c){continue}break}}}function RP(a){a=a|0;q[a>>2]=355688;if(q[a+8>>2]!=(fM()|0)){MK(q[a+8>>2])}return a|0}function zM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return AM(b,c,d,e,f)|0}function yL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return zL(b,c,d,e,f)|0}function xM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return yM(b,c,d,e,f)|0}function sM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return tM(b,c,d,e,f)|0}function ek(a,b,c,d,e){dk(a,(w(c,48)+b|0)+848|0,(q[b+148>>2]+w(c,52)|0)+2804|0,d,e)}function aM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return bM(b,c,d,e,f)|0}function ZL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return _L(b,c,d,e,f)|0}function UL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return VL(b,c,d,e,f)|0}function RL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return SL(b,c,d,e,f)|0}function OL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return PL(b,c,d,e,f)|0}function Nt(a){a=a|0;q[a>>2]=8052;if(o[a+43|0]<=-1){_U(q[a+32>>2])}bH(a);return a|0}function LM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return MM(b,c,d,e,f)|0}function LL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ML(b,c,d,e,f)|0}function JM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return KM(b,c,d,e,f)|0}function IL(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return JL(b,c,d,e,f)|0}function FM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return GM(b,c,d,e,f)|0}function DM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return EM(b,c,d,e,f)|0}function BM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return CM(b,c,d,e,f)|0}function yf(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=x(e);f=f|0;return zf(b,c,d,e)|0}function nC(a){q[a>>2]=0;q[a+4>>2]=0;if(r[367112]){hw(a);q[a+4>>2]=366320}return a}function vS(a,b){if(!(r[a+112|0]|b>>>0>28)){o[a+112|0]=1;return a}return _S(b<<2)}function vF(a,b,c){a=a|0;b=b|0;c=c|0;a=q[a>>2];n[q[q[a>>2]+264>>2]](a,b,(c|0)!=0)}function uF(a,b,c){a=a|0;b=b|0;c=c|0;a=q[a>>2];n[q[q[a>>2]+272>>2]](a,b,(c|0)!=0)}function pS(a){a=a|0;var b=0;b=a+8|0;if(q[b>>2]!=(fM()|0)){MK(q[b>>2])}return a|0}function aQ(){TP(371856);o[371868]=0;q[92966]=0;q[92964]=355636;q[92966]=q[87862]}function Hk(a,b){if(b>>>0<=3){b=(a+b|0)+56|0;a=r[b|0]+1|0;o[b|0]=a>>>0<255?a:255}}function BF(a){a=a|0;a=q[a+4>>2];if(!a){return 0}return n[q[q[a>>2]+248>>2]](a)|0}function mW(a,b,c,d,e,f){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);f=x(f);n[a](b,c,d,e,f)}function VM(a){var b=0;b=ue-16|0;ue=b;a=q[ZM(b+8|0,kM(a))>>2];ue=b+16|0;return a}function PF(a){a=a|0;var b=0;b=_S(16);q[b>>2]=q[a>>2];mT(b+4|0,a+4|0);return b|0}function ov(a,b){a=a|0;b=b|0;a=q[b>>2];if(a){n[q[q[a>>2]+8>>2]](a)|0;q[b>>2]=0}}function RV(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=x(d);e=x(e);f=x(f);n[a](b,c,d,e,f)}function EB(a,b){return q[q[xj(q[(q[a+24>>2]?a+24|0:a+20|0)>>2])>>2]+(b<<2)>>2]}function zQ(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=q[q[88444]+(b<<2)>>2]}return b|0}function xQ(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=q[q[88056]+(b<<2)>>2]}return b|0}function hg(a){a=a|0;var b=0;b=a+220|0;if(o[a+231|0]<=-1){b=q[b>>2]}return b|0}function Ot(a){a=a|0;q[a>>2]=8052;if(o[a+43|0]<=-1){_U(q[a+32>>2])}bH(a);_U(a)}function Ev(a,b,c){var d=0;d=ue-32|0;ue=d;wv(a,nt(d+16|0,b),nt(d,c));ue=d+32|0}function CF(a,b){a=a|0;b=b|0;a=q[a+4>>2];if(a){n[q[q[a>>2]+28>>2]](a,(b|0)>0)}}function Bo(a,b,c,d,e){u[a+12>>2]=e;u[a+8>>2]=d;u[a+4>>2]=c;u[a>>2]=b;return a}function dU(a){var b=0;if(q[a>>2]){iU(a,q[a>>2]);eU(a);b=q[a>>2];hU(a);_U(b)}}function cU(a){var b=0;if(q[a>>2]){jU(a,q[a>>2]);eU(a);b=q[a>>2];hU(a);_U(b)}}function Zs(a,b){q[a+12>>2]=q[b>>2];q[a+28>>2]=q[b+4>>2];q[a+44>>2]=q[b+8>>2]}function SS(a){var b=0;nP(a);if(iM(a)){b=q[a>>2];mS(a);_U(b);BS(a,0);YO(a,0)}}function RS(a){var b=0;WO(a);if(iM(a)){b=q[a>>2];DL(a);_U(b);BS(a,0);YO(a,0)}}function HU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(CU(a,q[b+8>>2],0)){GU(b,c,d)}}function pJ(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=EI(a,b);ue=c+16|0;return d?b:a}function or(a,b){a=q[a+24>>2]+w(b,36)|0;return(q[a+16>>2]-q[a+12>>2]|0)/12|0}function mH(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=EI(b,a);ue=c+16|0;return d?b:a}function hP(a,b){var c=0,d=0;sL(a,gP(b));b=q[lN(b)>>2];c=lN(a),d=b,q[c>>2]=d}function gT(a,b){var c=0;c=a;a=(b>>>0)/100|0;return jT(jT(c,a),b-w(a,100)|0)}function Yy(a){a=a|0;Au(Hu(q[a+80>>2]));a=q[a+80>>2];n[q[q[a>>2]+8>>2]](a,1)}function SQ(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=WG(b,a);ue=c+16|0;return d?b:a}function KS(a,b,c,d){c=c-b|0;a=q[d>>2]-c|0;q[d>>2]=a;if((c|0)>=1){kV(a,b,c)}}function KP(a){var b=0;b=ue-16|0;ue=b;a=q[ZM(b+8|0,a)>>2];ue=b+16|0;return a}function JV(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;n[a](b,c,d,e,f)}function GP(a){var b=0;b=ue-16|0;ue=b;q[b+8>>2]=a;ue=b+16|0;return q[b+8>>2]}function Bq(a){a=a|0;var b=0;b=a+16|0;if(o[a+27|0]<=-1){b=q[b>>2]}return b|0}function AI(a,b){var c=0,d=0;c=ue-16|0;ue=c;d=WG(a,b);ue=c+16|0;return d?b:a}function wF(a,b,c){a=a|0;b=b|0;c=x(c);a=q[a>>2];n[q[q[a>>2]+308>>2]](a,b,c)}function tT(a,b){var c=0;c=uL(a);if(c>>>0>>0){uT(a,b-c|0);return}vT(a,b)}function kF(a,b,c){a=a|0;b=b|0;c=x(c);a=q[a>>2];n[q[q[a>>2]+360>>2]](a,b,c)}function jT(a,b){b=s[(b<<1)+361744>>1];o[a|0]=b;o[a+1|0]=b>>>8;return a+2|0}function GV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return n[a](b,c,d,e)|0}function $E(a,b,c,d,e){a=a|0;b=x(b);c=x(c);d=x(d);e=x(e);so(a+24|0,b,c,d,e)}function rF(a,b,c){a=a|0;b=b|0;c=c|0;a=q[a>>2];n[q[q[a>>2]+244>>2]](a,b,c)}function pU(a,b){q[a+12>>2]=0;q[a+4>>2]=b;q[a>>2]=b;q[a+8>>2]=b+1;return a}function oJ(a,b,c,d,e,f,g,h){return n[q[q[a>>2]+16>>2]](a,b,c,d,e,f,g,h)|0}function mJ(a,b,c,d,e,f,g,h){return n[q[q[a>>2]+12>>2]](a,b,c,d,e,f,g,h)|0}function kq(a){var b=0;b=I(8)|0;aT(b,a);q[b>>2]=362380;J(b|0,362412,1);F()}function Ue(a){var b=0;b=I(8)|0;aT(b,a);q[b>>2]=362328;J(b|0,362360,1);F()}function QE(a){a=a|0;var b=0;b=q[a>>2];n[q[q[b>>2]+348>>2]](b);o[a+16|0]=1}function HP(a,b,c){var d=0;b=b-a|0;d=b>>2;if(b){mV(c,a,b)}return(d<<2)+c|0}function jF(a,b){a=a|0;b=b|0;a=q[a>>2];return n[q[q[a>>2]+164>>2]](a,b)|0}function RO(a,b){var c=0;c=RH(q[b>>2])<<24;q[a+4>>2]=q[b>>2];o[a|0]=c>>24}function Ne(a,b,c,d,e){o[a+3|0]=e;o[a+2|0]=d;o[a+1|0]=c;o[a|0]=b;return a}function MG(a,b){var c=0;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;return a}function Er(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=_S(40);ar(b,c,d);q[a>>2]=b}function DF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(a){EF(a,b,c,d,e)}}function yO(a,b,c,d,e){b=lO(b,c,d,e,4);if(!(r[d|0]&4)){q[a>>2]=b+ -1900}}function nr(a,b){a=q[a+24>>2]+w(b,36)|0;return(q[a+4>>2]-q[a>>2]|0)/60|0}function li(a,b){a=a|0;b=b|0;q[a>>2]=q[b+3512>>2];q[a+4>>2]=q[b+3520>>2]}function aO(a,b,c,d,e){b=PN(b,c,d,e,4);if(!(r[d|0]&4)){q[a>>2]=b+ -1900}}function _y(a){a=a|0;var b=0;b=a+12|0;a=q[b>>2]+1|0;q[b>>2]=a;return a|0}function Vy(a,b,c,d){a=q[a+68>>2];kV((n[q[q[a>>2]+32>>2]](a)|0)+d|0,b,c)}function Uy(a,b,c,d){a=q[a+68>>2];kV((n[q[q[a>>2]+28>>2]](a)|0)+d|0,b,c)}function UH(a,b){b=!q[a+24>>2]|b;q[a+16>>2]=b;if(b&q[a+20>>2]){TG();F()}}function SG(a,b,c){var d=0;d=ue-16|0;ue=d;a=UG(a,b,c);ue=d+16|0;return a}function BD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ia(b|0,c|0,d|0,e|0)}function pR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return qR(c,d,e)|0}function jj(a,b){return x(n[q[q[b>>2]+16>>2]](b,u[a+40>>2],u[a+36>>2]))}function jR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return kR(c,d,e)|0}function ch(a){a=a|0;var b=0;b=a+4|0;a=q[b>>2]+1|0;q[b>>2]=a;return a|0}function YV(a,b,c,d){a=a|0;b=b|0;c=x(c);d=x(d);return x(x(n[a](b,c,d)))}function We(a){a=a|0;var b=0;b=a;a=q[a+4>>2]+1|0;q[b+4>>2]=a;return a|0}function Sv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=_S(40);er(b,c);q[a>>2]=b}function PQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;q[e>>2]=c;return 3}function Mv(a,b,c){a=a|0;b=b|0;c=c|0;kV(n[q[q[a>>2]+36>>2]](a,c)|0,b,c)}function IH(a,b,c){return(c|0)>=0?(s[q[a+8>>2]+((c&255)<<1)>>1]&b)!=0:0}function $g(a){a=a|0;var b=0;b=a+8|0;a=q[b>>2]+1|0;q[b>>2]=a;return a|0}function uE(a,b,c){a=a|0;b=b|0;c=c|0;if(q[b+4>>2]==(c|0)){Ta(q[b>>2])}}function rz(a,b,c){a=a|0;b=b|0;c=c|0;if(q[a+16>>2]){sz(a,q[a+8>>2],b)}}function oU(a){var b=0;b=ue-16|0;ue=b;a=qU(pU(b,a));ue=b+16|0;return a}function nW(a,b,c){a=a|0;b=b|0;c=c|0;a=n[a](b,c)|0;re(we|0);return a|0}function dW(a,b,c,d,e){a=a|0;b=x(b);c=x(c);d=x(d);e=x(e);n[a](b,c,d,e)}function ZV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);return x(x(n[a](b,c,d)))}function ZF(a,b,c,d){if(q[a+76>>2]<=-1){YF(a,b,c,d);return}YF(a,b,c,d)}function QU(a,b,c){if(!(q[a+28>>2]==1|q[a+4>>2]!=(b|0))){q[a+28>>2]=c}}function JD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;q[a>>2]=0}function Dm(a,b){a=a|0;b=b|0;a=a+624|0;return(b>>>0<32?a+(b<<4)|0:a)|0}function sy(a){return q[q[q[a+20>>2]+(q[q[a+4>>2]+324>>2]<<3)>>2]>>2]}function sL(a,b){var c=0;c=q[a>>2];q[a>>2]=b;if(c){n[q[lN(a)>>2]](c)}}function lW(a,b,c,d,e){a=a|0;b=b|0;c=x(c);d=x(d);e=x(e);n[a](b,c,d,e)}function TV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return x(x(n[a](b,c,d)))}function SB(a){a=a|0;var b=0;b=q[a+8>>2];q[a+8>>2]=0;if(b){_U(oC(b))}}function zP(a,b,c){a=GP(a);b=GP(b)-a|0;if(b){mV(c,a,b)}return b+c|0}function rA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;sA(a,q[a+20>>2],c,b,d)}function jI(a,b){q[a>>2]=q[(q[q[b>>2]+ -12>>2]+b|0)+24>>2];return a}function Zn(){var a=0;a=I(4)|0;q[a>>2]=347864;J(a|0,347904,197);F()}function SV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=x(e);n[a](b,c,d,e)}function NB(a){a=a|0;a=q[a+32>>2];if(!a){return 0}return q[a+12>>2]}function MB(a){a=a|0;a=q[a+28>>2];if(!a){return 0}return q[a+12>>2]}function JB(a){a=a|0;a=q[a+40>>2];if(!a){return 0}return q[a+12>>2]}function IB(a){a=a|0;a=q[a+36>>2];if(!a){return 0}return q[a+12>>2]}function pQ(a){a=a|0;var b=0;b=q[92641]+1|0;q[92641]=b;q[a+4>>2]=b}function nz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;oz(a,q[a+8>>2],c,b,d)}function lP(a,b){var c=0;c=dI(q[b>>2]);q[a+4>>2]=q[b>>2];q[a>>2]=c}function jx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kx(a,q[a+492>>2],b,c)}function fH(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;gH(a)}function Vw(a){a=a|0;q[a>>2]=28756;Jw(a+20|0);Kw(a+8|0);return a|0}function QS(a){if(1073741823>>0){Ue(361408);F()}return _S(a<<2)}function EV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n[a](b,c,d,e)}function DQ(a,b,c){a=a|0;b=b|0;c=c|0;return(b>>>0<128?b:c)<<24>>24}function CS(a,b,c){a:{if((a|0)==(b|0)){o[a+112|0]=0;break a}_U(b)}}function tV(a,b){a=a|0;b=b|0;if(!q[93234]){q[93235]=b;q[93234]=a}}function rf(a,b,c){a=a|0;b=b|0;c=c|0;return qV(b,1,c,q[a+8>>2])|0}function mM(a,b){var c=0,d=0;c=a,d=TK(q[b>>2]),q[c>>2]=d;return a}function HV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return n[a](b,c,d)|0}function iF(a,b){a=a|0;b=b|0;a=q[a>>2];n[q[q[a>>2]+156>>2]](a,b)}function hF(a,b){a=a|0;b=b|0;a=q[a>>2];n[q[q[a>>2]+148>>2]](a,b)}function fx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;gx(a,q[a+492>>2],b)}function QI(a){a=a|0;DH(369488);VH(369572);DH(369824);VH(369908)}function $j(a){var b=0;b=a;a=q[a+148>>2]+2804|0;return ak(b,a,a)}function zp(a,b,c,d){u[a+8>>2]=d;u[a+4>>2]=c;u[a>>2]=b;return a}function zS(a){if(4294967295>>0){Ue(361408);F()}return _S(a)}function zF(a){a=a|0;a=q[a>>2];return n[q[q[a>>2]+404>>2]](a)|0}function yF(a){a=a|0;a=q[a>>2];return n[q[q[a>>2]+412>>2]](a)|0}function yE(a,b,c){a=a|0;b=b|0;c=c|0;HE(q[q[a+8>>2]+12>>2],b,c)}function ot(a){a=a|0;return _S((a&1073741823)!=(a|0)?-1:a<<2)|0}function oT(a){var b=0;if(iM(a)){b=q[a>>2];jM(a);_U(b)}return a}function lf(a,b,c){a=a|0;b=b|0;c=c|0;return aG(b,c,q[a+8>>2])|0}function gH(a){q[a+8>>2]=-1;q[a+12>>2]=-1;q[a>>2]=0;q[a+4>>2]=0}function eR(a){a=a|0;a=q[a+8>>2];if(!a){return 1}return bR(a)|0}function WF(a){if(a>>>0>=4294963201){q[91802]=0-a;a=-1}return a}function AF(a){a=a|0;a=q[a>>2];return n[q[q[a>>2]+408>>2]](a)|0}function zE(a,b){a=a|0;b=b|0;return IE(q[q[a+8>>2]+12>>2],b)|0}function el(a,b){if(!r[q[91755]+8|0]){n[q[91754]](367008,a,b)}}function ID(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;q[a>>2]=0}function AC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;zC(a+ -4|0,b,c,d)}function xC(a){a=a|0;if(q[a+12>>2]){a=a+12|0;Xv(a);q[a>>2]=0}}function vt(a){a=a|0;a=q[q[91771]+4>>2];if(a){n[a](q[91768])}}function ut(a){a=a|0;a=q[q[91767]+4>>2];if(a){n[a](q[91764])}}function tt(a){a=a|0;a=q[q[91763]+4>>2];if(a){n[a](q[91760])}}function st(a){a=a|0;a=q[q[91759]+4>>2];if(a){n[a](q[91756])}}function iQ(a){var b=0;b=a;a=q[a>>2]+ -1|0;q[b>>2]=a;return a}function cl(a){a=a|0;a=q[q[91755]+4>>2];if(a){n[a](q[91752])}}function Ww(a){a=a|0;q[a>>2]=28756;Jw(a+20|0);Kw(a+8|0);_U(a)}function IG(a,b){b=q[b>>2];q[a>>2]=b;q[a+4>>2]=b>>31;return a}function HD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function HC(a){a=a|0;if(q[a+20>>2]){a=a+20|0;Xv(a);q[a>>2]=0}}function Eq(a,b,c){a=a|0;b=b|0;c=c|0;q[a+8>>2]=b;q[a+12>>2]=c}function Ct(a,b,c){a=a|0;b=b|0;c=c|0;return n[q[a>>2]](b,c)|0}function oW(a,b){a=a|0;b=b|0;a=n[a](b)|0;re(we|0);return a|0}function gL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;JI(a);hL(a,c,d)}function Qh(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0}function QV(a,b,c){a=a|0;b=b|0;c=x(c);return x(x(n[a](b,c)))}function JF(a){a=a|0;q[a>>2]=343552;_U(q[a+8>>2]);return a|0}function Hg(a){a=a|0;return(q[a+164>>2]-q[a+160>>2]|0)/284|0}function un(a){a=a|0;a=q[a>>2];tn(q[a>>2],a+4|0,q[a+16>>2])}function sU(a){var b=0;b=ue-16|0;ue=b;tU(pU(b,a));ue=b+16|0}function kD(a,b){if(b){kD(a,q[b>>2]);kD(a,q[b+4>>2]);_U(b)}}function jD(a,b){if(b){jD(a,q[b>>2]);jD(a,q[b+4>>2]);_U(b)}}function gQ(a){if((iQ(a+4|0)|0)==-1){n[q[q[a>>2]+8>>2]](a)}}function fT(a,b){if(b>>>0<=9){return iT(a,b)}return jT(a,b)}function dF(a,b){a=a|0;b=b|0;if(b){n[q[q[b>>2]+8>>2]](b)|0}}function UV(a,b,c){a=a|0;b=b|0;c=c|0;return x(x(n[a](b,c)))}function Tk(a){if(!q[a+184>>2]){return 0}return q[a+176>>2]}function Ny(a,b){a=q[a+196>>2];if(!(q[a+16>>2]?a:0)){wB(b)}}function MQ(a,b,c){a=a|0;b=b|0;c=c|0;return((b|0)>-1?b:c)|0}function uL(a){if(iM(a)){return q[a+4>>2]}return r[a+11|0]}function pf(a){a=a|0;q[a>>2]=1548;kG(q[a+8>>2]);return a|0}function kW(a,b,c,d){a=a|0;b=b|0;c=x(c);d=x(d);n[a](b,c,d)}function jf(a){a=a|0;q[a>>2]=1504;kG(q[a+8>>2]);return a|0}function aT(a,b){q[a>>2]=362236;q[a>>2]=362280;$S(a+4|0,b)}function QF(a){a=a|0;if(o[a+15|0]<=-1){_U(q[a+4>>2])}_U(a)}function LI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;we=0;return 0}function yp(a){q[a+8>>2]=0;q[a>>2]=0;q[a+4>>2]=0;return a}function tR(a){a=a|0;q[a>>2]=355776;oT(a+16|0);return a|0}function rR(a){a=a|0;q[a>>2]=355736;oT(a+12|0);return a|0}function pK(a){return(a|0)!=0&(a|0)!=350592&(a|0)!=350616}function fU(a){var b=0;b=q[a>>2];if(b){_U($T(b))}return a}function XE(a){a=a|0;a=q[a+4>>2];n[q[q[a>>2]+36>>2]](a)|0}function VV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=x(d);n[a](b,c,d)}function Mq(a){a=a|0;return(q[a+48>>2]-q[a+44>>2]|0)/24|0}function DL(a){if(iM(a)){a=jM(a)+ -1|0}else{a=10}return a}function AW(a){if(a){return 31-z(a+ -1^a)|0}return 32} + + + +function zH(a){a=a|0;return yH(q[q[a>>2]+ -12>>2]+a|0)|0}function yo(a){a=a|0;return x(x(n[q[q[a>>2]+12>>2]](a)))}function uI(a){a=a|0;return sI(q[q[a>>2]+ -12>>2]+a|0)|0}function rH(a){a=a|0;q[a>>2]=348400;kL(a+4|0);return a|0}function mS(a){if(iM(a)){a=jM(a)+ -1|0}else{a=1}return a}function gI(a){a=a|0;return fI(q[q[a>>2]+ -12>>2]+a|0)|0}function bH(a){a=a|0;q[a>>2]=348336;kL(a+4|0);return a|0}function TP(a){q[a+4>>2]=0;q[a>>2]=361556;q[a>>2]=356140}function DV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;n[a](b,c,d)}function oQ(a){var b=0;b=a;a=q[nQ()>>2];q[b>>2]=a;dQ(a)}function jK(a,b,c){a=a|0;b=b|0;c=c|0;return hK(a,b,c)|0}function WK(a,b,c,d){a=UK(a,b,c,0,-2147483648);return a}function LV(a,b,c){a=a|0;b=b|0;c=c|0;return n[a](b,c)|0}function KF(a){a=a|0;q[a>>2]=343552;_U(q[a+8>>2]);_U(a)}function BU(a,b,c){a=a|0;b=b|0;c=c|0;return CU(a,b,0)|0}function AE(a){a=a|0;a=q[a+8>>2];n[q[q[a>>2]+36>>2]](a)}function yg(a){a=a|0;return q[a+140>>2]-q[a+136>>2]>>2}function vg(a){a=a|0;return q[a+116>>2]-q[a+112>>2]>>2}function rI(a,b,c){return n[q[q[a>>2]+48>>2]](a,b,c)|0}function pv(a,b,c){a=a|0;b=b|0;c=c|0;Jv(q[a+4>>2],b,c)}function mQ(a,b){var c=0;c=a;a=q[b>>2];q[c>>2]=a;dQ(a)}function fF(a){a=a|0;a=q[a>>2];n[q[q[a>>2]+152>>2]](a)}function bL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cL(a,c,d)}function Zu(a,b,c){a=a|0;b=b|0;c=c|0;Ev(q[a+4>>2],b,c)}function ZH(a,b,c){return n[q[q[a>>2]+12>>2]](a,b,c)|0}function Nh(a,b,c){a=a|0;b=b|0;c=c|0;q[b>>2]=q[b>>2]+4}function Eg(a){a=a|0;return q[a+212>>2]-q[a+208>>2]>>2}function Bg(a){a=a|0;return q[a+188>>2]-q[a+184>>2]>>2}function xE(a,b){a=a|0;b=b|0;GE(q[q[a+8>>2]+12>>2],b)}function qf(a){a=a|0;q[a>>2]=1548;kG(q[a+8>>2]);_U(a)}function mG(a,b){a=lG(a,b);return r[a|0]==(b&255)?a:0}function ll(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Zn();F()}function kf(a){a=a|0;q[a>>2]=1504;kG(q[a+8>>2]);_U(a)}function Nr(a,b,c){a=a|0;b=b|0;c=x(c);fs(a,q[b>>2],c)}function JK(a,b){return(IJ(a)|0)!=0|(a|32)+ -97>>>0<6}function sg(a){a=a|0;return q[a+92>>2]-q[a+88>>2]>>2}function pg(a){a=a|0;return q[a+68>>2]-q[a+64>>2]>>2}function pT(a,b){if((a|0)!=(b|0)){qT(a,kM(b),uL(b))}}function mg(a){a=a|0;return q[a+44>>2]-q[a+40>>2]>>2}function cO(a,b){return n[q[q[a>>2]+52>>2]](a,b,0)|0}function Tq(a){a=a|0;return q[a+60>>2]-q[a+56>>2]>>4}function Oh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0}function KE(a){a=a|0;if(o[367127]<=-1){_U(q[91779])}}function Ih(a){a=a|0;return q[a+16>>2]-q[a+12>>2]>>2}function Gs(a,b,c,d,e,f,g,h,i){Hs(a,b,c,d,e,f,g,h,i)}function GN(a,b){return n[q[q[a>>2]+36>>2]](a,b,0)|0}function Bt(a,b,c){a=a|0;b=b|0;c=c|0;n[q[a>>2]](b,c)}function pr(a){return(q[a+28>>2]-q[a+24>>2]|0)/36|0}function jv(a,b){a=a|0;b=x(b);u[q[a+4>>2]+256>>2]=b}function gP(a){var b=0;b=q[a>>2];q[a>>2]=0;return b}function eM(a,b,c,d){n[q[q[a>>2]+32>>2]](a,b,c,d)|0}function aJ(a,b){CI(a,b);q[a+72>>2]=0;q[a+76>>2]=-1}function OM(a,b,c,d){n[q[q[a>>2]+48>>2]](a,b,c,d)|0}function IP(a,b,c){a=a|0;b=b|0;c=c|0;kM(b);return-1}function Dq(a){a=a|0;we=q[a+12>>2];return q[a+8>>2]}function At(a,b){a=a|0;b=b|0;return n[q[a>>2]](b)|0}function uG(a){if(!a){return 0}q[91802]=a;return-1}function tL(a,b){return n[q[q[a>>2]+12>>2]](a,b)|0}function mr(a,b){return(q[a+24>>2]+w(b,36)|0)+32|0}function lr(a,b){return(q[a+24>>2]+w(b,36)|0)+28|0}function kr(a,b){return(q[a+24>>2]+w(b,36)|0)+24|0}function iv(a){a=a|0;return x(u[q[a+4>>2]+256>>2])}function hv(a,b){a=a|0;b=b|0;q[q[a+4>>2]+252>>2]=b}function hH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;gH(a)}function fv(a,b){a=a|0;b=b|0;q[q[a+4>>2]+248>>2]=b}function dv(a,b){a=a|0;b=b|0;q[q[a+4>>2]+260>>2]=b}function Wl(a,b){a=a|0;b=b|0;q[q[a+568>>2]+8>>2]=b}function US(a,b,c){return a>>>0>>0&b>>>0<=a>>>0}function Mh(a,b){a=a|0;b=b|0;q[a>>2]=0;q[a+4>>2]=0}function II(a,b){return n[q[q[a>>2]+44>>2]](a,b)|0}function HI(a,b){return n[q[q[a>>2]+28>>2]](a,b)|0}function Gk(a,b){return b>>>0<=3?r[(a+b|0)+56|0]:0}function rv(a,b){a=a|0;b=b|0;o[q[a+4>>2]+340|0]=b}function rQ(a){a=a|0;if(a){n[q[q[a>>2]+4>>2]](a)}}function nS(a,b){if(iM(a)){uo(a,b);return}YO(a,b)}function hf(a,b,c){a=a|0;b=b|0;c=c|0;if(b){_U(b)}}function KV(a,b){a=a|0;b=b|0;return x(x(n[a](b)))}function kM(a){if(iM(a)){return q[a>>2]}return a}function hW(a,b,c){a=a|0;b=x(b);c=x(c);n[a](b,c)}function JI(a){q[a>>2]=0;q[a+4>>2]=0;q[a+8>>2]=0}function IC(a){a=a|0;GC(a,q[a+16>>2],q[a+40>>2])}function yV(a){a=a|0;a=ue-a&-16;ue=a;return a|0}function xI(a){a=a|0;vI(q[q[a>>2]+ -12>>2]+a|0)}function sK(a,b){if(!a){return 0}return rK(a,b)}function nj(a,b,c){return ij(a+4|0,b,c,q[a>>2])}function jW(a,b,c){a=a|0;b=x(b);c=c|0;n[a](b,c)}function is(a){a=a|0;return kV(_S(288),a,288)|0}function iI(a){a=a|0;hI(q[q[a>>2]+ -12>>2]+a|0)}function gv(a){a=a|0;return q[q[a+4>>2]+252>>2]}function ev(a){a=a|0;return q[q[a+4>>2]+248>>2]}function eH(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function _u(a){a=a|0;return q[q[a+4>>2]+304>>2]}function WV(a,b,c){a=a|0;b=b|0;c=x(c);n[a](b,c)}function Vl(a){a=a|0;return q[q[a+568>>2]+8>>2]}function VK(a,b,c,d){a=UK(a,b,c,-1,-1);return a}function ES(a){var b=0,c=0;b=a,c=fM(),q[b>>2]=c}function BH(a){a=a|0;AH(q[q[a>>2]+ -12>>2]+a|0)}function $u(a){a=a|0;return q[q[a+4>>2]+308>>2]}function zD(a,b,c){a=a|0;b=b|0;c=c|0;q[a>>2]=0}function wK(a,b,c){if(!(r[a|0]&32)){pV(b,c,a)}}function rp(a){return q[a+20>>2]-q[a+16>>2]>>2}function mf(a,b){a=a|0;b=b|0;_F(q[a+8>>2],b,0)}function jy(a){a=a|0;a=q[a+16>>2];if(a){nD(a)}}function dJ(a){return n[q[q[a>>2]+28>>2]](a)|0}function cP(a){return n[q[q[a>>2]+36>>2]](a)|0}function RM(a){return n[q[q[a>>2]+16>>2]](a)|0}function QM(a){return n[q[q[a>>2]+12>>2]](a)|0}function NH(a){return n[q[q[a>>2]+24>>2]](a)|0}function Gr(a,b,c){a=a|0;b=b|0;c=x(c);Zn();F()}function FV(a,b,c){a=a|0;b=b|0;c=c|0;n[a](b,c)}function xp(a){q[a>>2]=0;q[a+4>>2]=0;return a}function vw(a){a=a|0;q[a+16>>2]=0;o[a+21|0]=1}function jw(a,b,c,d,e){n[q[91777]](a,b,c,d,e)}function _n(a,b,c){a=a|0;b=b|0;c=c|0;Zn();F()}function DU(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function BV(a,b){a=a|0;b=b|0;return n[a](b)|0}function ww(a){a=a|0;q[a+8>>2]=0;o[a+13|0]=1}function wS(a){return q[tS(a)>>2]-q[a>>2]>>2}function tw(a){a=a|0;Xv(a+32|0);q[a+32>>2]=0}function dG(a){a=a|0;return ab(q[a+60>>2])|0}function dE(a){a=a|0;n[q[q[a>>2]+8>>2]](a)|0}function bJ(a){qJ(a);q[a>>2]=348876;return a}function _B(a){a=a|0;Xv(a+40|0);q[a+40>>2]=0}function Wu(a,b){a=a|0;b=b|0;Dv(a,q[b+4>>2])}function Vu(a,b){a=a|0;b=b|0;Cv(q[a+4>>2],b)}function Uu(a,b){a=a|0;b=b|0;Bv(a,q[b+4>>2])}function Tu(a,b){a=a|0;b=b|0;Av(q[a+4>>2],b)}function Su(a,b){a=a|0;b=b|0;zv(a,q[b+4>>2])}function Ph(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0}function Nu(a,b){a=a|0;b=b|0;xv(q[a+4>>2],b)}function Cj(a){a=a|0;q[a>>2]=3832;return a|0}function $I(a){qJ(a);q[a>>2]=348804;return a}function xW(a,b,c,d){a=uW(a,b,c,d);return a}function wW(a,b,c,d){a=tW(a,b,c,d);return a}function vW(a,b,c,d){a=sW(a,b,c,d);return a}function vN(a,b,c){JI(a);NT(a,b,c);return a}function nf(a){a=a|0;return iG(q[a+8>>2])|0}function kv(a){a=a|0;return q[a+4>>2]+272|0}function fu(a,b){a=a|0;b=b|0;return du(b)|0}function Qu(a){a=a|0;return q[a+4>>2]+244|0}function Ou(a){a=a|0;return q[a+4>>2]+240|0}function OG(a){if(r[a+4|0]){return}TG();F()}function EP(a,b,c){return HP(GP(a),GP(b),c)}function vU(){n[q[91748]]();nU(362143);F()}function vC(a){a=a|0;a=a+ -4|0;rC(a);_U(a)}function sI(a){a=a|0;ZG(a+12|0);return a|0}function pu(a){a=a|0;a=a+ -4|0;iu(a);_U(a)}function pq(a){a=a|0;a=a+ -4|0;hq(a);_U(a)}function jM(a){return q[a+8>>2]&2147483647}function iy(a){a=a|0;a=a+ -8|0;fy(a);_U(a)}function fD(a){a=a|0;a=a+ -4|0;cD(a);_U(a)}function eg(a){a=a|0;return x(u[a+280>>2])}function cg(a){a=a|0;a=a+ -4|0;_f(a);_U(a)}function bv(a){a=a|0;q[q[a+4>>2]+308>>2]=0}function av(a){a=a|0;q[q[a+4>>2]+304>>2]=0}function YD(a){a=a|0;a=a+ -4|0;VD(a);_U(a)}function YC(a){a=a|0;a=a+ -4|0;VC(a);_U(a)}function XP(a){return q[a+4>>2]-q[a>>2]>>2}function XM(a,b){return q[a>>2]==q[b>>2]^1}function Ml(a){a=a|0;a=a+ -4|0;Hl(a);_U(a)}function LB(a){a=a|0;a=a+ -8|0;GB(a);_U(a)}function FJ(a){return(a|0)==32|a+ -9>>>0<5}function FC(a){a=a|0;a=a+ -4|0;CC(a);_U(a)}function Ej(a){return q[q[a+152>>2]+20>>2]}function Dl(a){a=a|0;return n[q[a>>2]]()|0}function zR(a,b){a=a|0;b=b|0;yI(a,355808)}function yR(a,b){a=a|0;b=b|0;mT(a,b+16|0)}function yP(a,b){n[q[q[b>>2]+40>>2]](a,b)}function yH(a){a=a|0;ZG(a+8|0);return a|0}function xR(a,b){a=a|0;b=b|0;mT(a,b+12|0)}function wq(a,b){a=a|0;b=b|0;q[a+32>>2]=b}function tI(a){a=a|0;return sI(a+ -8|0)|0}function tC(a){a=a|0;return rC(a+ -4|0)|0}function py(a,b){a=a|0;b=b|0;o[a+172|0]=b}function pt(a,b){a=a|0;b=b|0;if(a){_U(a)}}function ou(a){a=a|0;return iu(a+ -4|0)|0}function oq(a){a=a|0;return hq(a+ -4|0)|0}function nw(a,b){sa(36160,a|0,3553,b|0,0)}function nL(a,b){n[q[q[b>>2]+28>>2]](a,b)}function mL(a,b){n[q[q[b>>2]+24>>2]](a,b)}function iT(a,b){o[a|0]=b+48;return a+1|0}function gy(a){a=a|0;return fy(a+ -8|0)|0}function fI(a){a=a|0;ZG(a+4|0);return a|0}function dD(a){a=a|0;return cD(a+ -4|0)|0}function ag(a){a=a|0;return _f(a+ -4|0)|0}function aP(a,b){n[q[q[b>>2]+32>>2]](a,b)}function Zq(a,b){a=a|0;b=b|0;q[a+40>>2]=b}function Xq(a,b){a=a|0;b=b|0;q[a+36>>2]=b}function XD(a){a=a|0;return VD(a+ -4|0)|0}function WC(a){a=a|0;return VC(a+ -4|0)|0}function Tn(a){a=a|0;return q[a+92>>2]<<4}function SO(a,b){q[a>>2]=q[b>>2];return a}function SM(a,b){n[q[q[b>>2]+20>>2]](a,b)}function MF(a,b){a=a|0;b=b|0;q[a+16>>2]=b}function Lk(a,b){a=a|0;b=b|0;q[a+12>>2]=b}function Kl(a){a=a|0;return Hl(a+ -4|0)|0}function KB(a){a=a|0;return GB(a+ -8|0)|0}function HH(a){return QH(q[a>>2])<<24>>24}function DR(a,b){a=a|0;b=b|0;BR(a,355844)}function DC(a){a=a|0;return CC(a+ -4|0)|0}function Cq(a,b){a=a|0;b=b|0;BT(a+16|0,b)}function CR(a,b){a=a|0;b=b|0;yI(a,355836)}function AR(a,b){a=a|0;b=b|0;BR(a,355816)}function $O(a,b){n[q[q[b>>2]+44>>2]](a,b)}function yq(a,b){a=a|0;b=b|0;o[a+29|0]=b}function jh(a,b){return q[a>>2]==q[b>>2]}function hE(a,b){a=a|0;b=b|0;o[a+16|0]=b}function dQ(a){a=a+4|0;q[a>>2]=q[a>>2]+1}function cQ(a,b){return q[a>>2]+(b<<2)|0}function KO(a,b){a=a|0;b=b|0;JI(a);GT(a)}function BS(a,b){q[a+8>>2]=b|-2147483648}function BJ(a){if(SH(a,-1)){a=0}return a}function Aq(a,b){a=a|0;b=b|0;o[a+28|0]=b}function xT(a,b,c){if(b){lV(a,oH(c),b)}}function gg(a){a=a|0;return q[a+336>>2]}function fJ(a){q[a+4>>2]=q[a+4>>2]|8192}function dg(a){a=a|0;return q[a+292>>2]}function cw(a,b,c,d){Y(a|0,b|0,c|0,d|0)}function aw(a,b,c,d){U(a|0,b|0,c|0,d|0)}function _v(a,b,c,d){S(a|0,b|0,c|0,d|0)}function _T(a){a=a|0;if(a){fU(a);_U(a)}}function WG(a,b){return t[a>>2]>2]}function Sn(a){a=a|0;return q[a+576>>2]}function Rn(a){a=a|0;return q[a+572>>2]}function NO(a,b){a=a|0;b=b|0;vN(a,1,45)}function Kf(a){q[a>>2]=1904;q[a+4>>2]=1}function Iy(a){a=a|0;return q[a+176>>2]}function EI(a,b){return q[a>>2]>2]}function BQ(a,b){a=a|0;b=b|0;return b|0}function vq(a){a=a|0;return q[a+32>>2]}function ty(a){a=a|0;return q[a+40>>2]}function sv(a,b){a=a|0;b=b|0;q[a>>2]=0}function sQ(a){a=a|0;NS(q[q[a>>2]>>2])}function rM(a,b){return kM(a)+(b<<2)|0}function kg(a){a=a|0;return q[a+24>>2]}function jC(a){a=a|0;return q[a+16>>2]}function bz(a){a=a|0;return q[a+84>>2]}function MO(a){a=a|0;return 2147483647}function Kk(a){a=a|0;return q[a+12>>2]}function Jk(a){q[a+4>>2]=q[a+4>>2]+ -1}function GF(a){a=a|0;o[367128]=(a|0)>0}function zq(a){a=a|0;return r[a+28|0]}function zT(a,b){return yT(a,b,sV(b))}function yC(a){a=a|0;wC(a,q[a+32>>2])}function xq(a){a=a|0;return r[a+29|0]}function vJ(a){a=a|0;return uJ(a,1)|0}function tJ(a){a=a|0;return uJ(a,0)|0}function pH(a,b){a=a|0;b=b|0;return-1}function nM(a){a=q[a>>2];if(a){TK(a)}}function kJ(a){a=a|0;return jJ(a,1)|0}function iJ(a){a=a|0;return jJ(a,0)|0}function gw(a,b){return ga(a|0,b|0)|0}function fw(a,b){return fa(a|0,b|0)|0}function eW(a,b){a=a|0;b=x(b);n[a](b)}function bI(a,b){return GI(a)^GI(b)^1}function ah(a){a=a|0;return q[a+8>>2]}function Zy(a){a=a|0;return r[367112]}function ZG(a){a=a|0;_G(a);return a|0}function Xe(a){a=a|0;return q[a+4>>2]}function XS(a,b){a=a|0;b=b|0;return 0}function PH(a,b){return FI(a)^FI(b)^1}function LS(a){a=a|0;return q[a+4>>2]}function DT(a,b){return CT(a,b,sV(b))}function AV(a){a=a|0;return ye(a|0)|0}function yI(a,b){JI(a);nT(a,b,sV(b))}function wR(a){a=a|0;return o[a+9|0]}function vR(a){a=a|0;return o[a+8|0]}function uS(a){wS(372176);wS(372176)}function Rh(a,b,c){a=a|0;b=b|0;c=c|0}function PV(a){a=a|0;return n[a]()|0}function Ik(a){q[a+4>>2]=q[a+4>>2]+1}function CV(a,b){a=a|0;b=b|0;n[a](b)}function BR(a,b){JI(a);HT(a,b,OK(b))}function vH(a,b,c){if(c){YG(a,b,c)}}function rT(a,b,c){if(c){mV(a,b,c)}}function qL(a,b){return(b-a|0)/12|0}function kH(a,b,c){if(c){kV(a,b,c)}}function hm(a){a=a|0;return a+568|0}function gu(a){a=a|0;return a+ -4|0}function gE(a){a=a|0;JE(q[a+12>>2])}function bU(a){return KP(q[a+4>>2])}function _H(a){dI(q[a>>2]);return a}function ZP(){wS(372176);XP(372176)}function ZM(a,b){q[a>>2]=b;return a}function YT(a){if(!lI(a)){vU();F()}}function SH(a,b){return(a|0)==(b|0)}function RG(a,b,c){return SG(a,b,c)}function QP(a){TP(a);q[a>>2]=356608}function MP(a,b){AT(q[a>>2],o[b|0])}function LH(a,b){UH(a,q[a+16>>2]|b)}function JH(a){RH(q[a>>2]);return a}function IJ(a){return a+ -48>>>0<10}function DK(a,b,c){return uK(a,b,c)}function CL(a){JI(a);hM(a);return a}function xU(a){a=a|0;return 362213}function vP(a){return q[a>>2]!=0^1}function sf(a){a=a|0;TF(q[a+8>>2])}function rt(a,b){a=a|0;b=b|0;_U(a)}function rP(a){return pL(a,370468)}function pP(a){return pL(a,370476)}function pM(a){return pL(a,370624)}function lL(a){return pL(a,370616)}function jg(a){a=a|0;return a+12|0}function eJ(a){return pL(a,370592)}function dP(a){return pL(a,370452)}function cL(a,b,c){JI(a);dL(a,b,c)}function cJ(a){return pL(a,370584)}function _O(a){return pL(a,370460)}function _F(a,b,c){ZF(a,b,b>>31,c)}function WH(a){return pL(a,370568)}function PG(a){a=a|0;return 347832}function JO(a,b){a=a|0;b=b|0;CL(a)}function FH(a){return pL(a,370576)}function vL(a,b){return kM(a)+b|0}function iM(a){return o[a+11|0]<0}function dw(a,b){_(a|0,35713,b|0)}function aU(a){return KP(q[a>>2])}function YH(a){return cI(q[a>>2])}function XH(a,b){return bI(a,b)^1}function GH(a,b){return PH(a,b)^1}function wI(a){a=a|0;vI(a+ -8|0)}function wB(a){kC(a+28|0,a+56|0)}function rJ(a){a=a|0;rH(a);_U(a)}function qN(a){q[a>>2]=q[a>>2]+4}function jQ(a){wS(a);XP(a);wS(a)}function hu(a){a=a|0;_U(a+ -4|0)}function hC(a){a=a|0;gC(a+ -8|0)}function gJ(a){a=a|0;bH(a);_U(a)}function Zh(a){a=a|0;Gh(a);_U(a)}function YM(a){q[a>>2]=q[a>>2]+1}function PC(a){a=a|0;OC(a+ -4|0)}function KI(a,b){q[a>>2]=q[b>>2]}function Jf(a){a=a|0;return 1888}function JS(a){return LS(a+12|0)}function CH(a){return!q[a+16>>2]}function AU(a){a=a|0;yU(a);_U(a)}function zI(a,b){return AI(a,b)}function xf(a){a=a|0;return a|0}function uM(a,b){return TM(a,b)}function sS(a,b){return vS(a,b)}function nJ(a,b){return pJ(a,b)}function lS(a){a=a|0;oT(370792)}function lH(a){return a<<24>>24}function jS(a){a=a|0;oT(370776)}function jH(a,b){return mH(a,b)}function hw(a){n[q[91774]](1,a)}function hS(a){a=a|0;oT(370760)}function fS(a){a=a|0;oT(370744)}function dS(a){a=a|0;oT(370728)}function bS(a){a=a|0;oT(370712)}function ZR(a){a=a|0;oT(370680)}function VG(a,b){return XG(a,b)}function RQ(a,b){return SQ(a,b)}function Oo(a,b){Io(a- -64|0,b)}function OS(a,b){return CO(a,b)}function MK(a){if(pK(a)){_U(a)}}function KH(a,b){return PH(a,b)}function IO(a){a=a|0;return 127}function $R(a){a=a|0;oT(370696)}function $H(a,b){return bI(a,b)}function zU(a){a=a|0;_U(yU(a))}function yi(a){a=a|0;_U(xi(a))}function wp(a){a=a|0;_U(tp(a))}function vI(a){a=a|0;_U(sI(a))}function ux(a){a=a|0;_U(cx(a))}function uR(a){a=a|0;_U(tR(a))}function uC(a){a=a|0;_U(rC(a))}function sR(a){a=a|0;_U(rR(a))}function sH(a){a=a|0;_U(rH(a))}function oS(a){a=a|0;_U(pS(a))}function ni(a){a=a|0;_U(mi(a))}function kQ(a){a=a|0;_U(hQ(a))}function ju(a){a=a|0;_U(iu(a))}function jr(a){a=a|0;_U(hr(a))}function iq(a){a=a|0;_U(hq(a))}function hy(a){a=a|0;_U(fy(a))}function hI(a){a=a|0;_U(fI(a))}function ez(a){a=a|0;_U(dz(a))}function ep(a){a=a|0;_U(dp(a))}function ej(a){a=a|0;_U(dj(a))}function eD(a){a=a|0;_U(cD(a))}function dx(a){a=a|0;_U(bx(a))}function cH(a){a=a|0;_U(bH(a))}function bg(a){a=a|0;_U(_f(a))}function aH(a){a=a|0;_U(ZG(a))}function Xo(a,b){Yo(a+148|0,b)}function XO(a,b){o[a|0]=r[b|0]}function XG(a,b){return b-a>>2}function XC(a){a=a|0;_U(VC(a))}function WD(a){a=a|0;_U(VD(a))}function Ti(a){a=a|0;_U(Si(a))}function TQ(a){a=a|0;_U(RP(a))}function So(a,b){Io(a+120|0,b)}function PA(a){a=a|0;_U(OA(a))}function Ll(a){a=a|0;_U(Hl(a))}function LR(a,b){IT(a,b,OK(b))}function HB(a){a=a|0;_U(GB(a))}function Gj(a){return a+1296|0}function GQ(a){a=a|0;_U(FQ(a))}function Fj(a){return a+1184|0}function Fh(a){a=a|0;_U(Gh(a))}function EC(a){a=a|0;_U(CC(a))}function BT(a,b){qT(a,b,sV(b))}function BI(a){a=a|0;_U(_G(a))}function AH(a){a=a|0;_U(yH(a))}function $q(a){a=a|0;_U(_q(a))}function zi(a){a=a|0;return 3}function qJ(a){q[a>>2]=348744}function oi(a){a=a|0;return 5}function lI(a){return!q[a>>2]}function iw(a){n[q[91776]](a)}function ho(a){a=a|0;Zn();F()}function fj(a){a=a|0;return 6}function _h(a){a=a|0;return-1}function ZI(a,b){q[a+72>>2]=b}function VS(a){JI(a);return a}function Ui(a){a=a|0;return 2}function Uh(a){a=a|0;return 0}function Qo(a,b){Io(a+92|0,b)}function Mo(a,b){Io(a+36|0,b)}function Li(a){a=a|0;return 4}function Hu(a){return a+176|0}function Gf(a){a=a|0;return 1}function Ek(a,b){u[a+60>>2]=b}function EH(a,b){mQ(a,b+28|0)}function Cl(a){a=a|0;Zn();F()}function CO(a,b){return b-a|0}function xj(a){return a+48|0}function wU(){nU(362183);F()}function uo(a,b){q[a+4>>2]=b}function uU(){nU(362131);F()}function tS(a){return a+16|0}function sp(a){return a+28|0}function rS(a){return a+32|0}function lw(a){qa(36160,a|0)}function lU(){kq(362070);F()}function lT(){kq(361944);F()}function kU(){Ue(362070);F()}function kT(){Ue(361944);F()}function ew(a,b){aa(a|0,b|0)}function _I(a,b){mQ(a,b+4|0)}function YP(a){DS(a,q[a>>2])}function YO(a,b){o[a+11|0]=b}function Ve(a,b){a=a|0;b=b|0}function Ho(a,b){Io(a+8|0,b)}function xL(a){return!uL(a)}function rW(a,b){i(a|0,b|0)}function oH(a){return a&255}function lN(a){return a+4|0}function eU(a){return a+8|0}function bw(a,b){X(a|0,b|0)}function _V(a){a=a|0;n[a]()}function Yv(a,b){Q(a|0,b|0)}function VF(){return 367208}function $v(a,b){T(a|0,b|0)}function vf(a){a=a|0;_U(a)}function sB(a){a=a|0;pB(a)}function kL(a){gQ(q[a>>2])}function hU(a){q[eU(a)>>2]}function aD(a){a=a|0;ZC(a)}function Yg(a){a=a|0;Vg(a)}function TE(a){a=a|0;UE(a)}function TB(a){a=a|0;OB(a)}function ED(a){a=a|0;lw(0)}function AS(a,b){q[a>>2]=b}function zV(a){a=a|0;ue=a}function xV(){return ue|0}function xB(a){lC(a+56|0)}function yu(a){a=a|0;F()}function xS(a){q[a>>2]=0}function uN(a,b){EN(a,b)}function mw(a){ra(1,a|0)}function kw(a){pa(1,a|0)}function dN(a,b){DN(a,b)}function PT(a,b){QT(a,b)}function ER(a,b){BT(a,b)}function EL(a,b){tT(a,b)}function Zv(a){R(1,a|0)}function Xv(a){O(1,a|0)}function wL(a){sL(a,0)}function TG(){gb();F()}function Xh(a){a=a|0}function Wv(){} +// EMSCRIPTEN_END_FUNCS +n[1]=yU;n[2]=We;n[3]=Xe;n[4]=Ye;n[5]=Ze;n[6]=_e;n[7]=Re;n[8]=Te;n[9]=Ve;n[10]=$e;n[11]=af;n[12]=bf;n[13]=cf;n[14]=ef;n[15]=ff;n[16]=gf;n[17]=hf;n[18]=jf;n[19]=kf;n[20]=lf;n[21]=mf;n[22]=nf;n[23]=of;n[24]=pf;n[25]=qf;n[26]=rf;n[27]=sf;n[28]=mf;n[29]=nf;n[30]=of;n[31]=xf;n[32]=vf;n[33]=tf;n[34]=wf;n[35]=uf;n[36]=_g;n[37]=xf;n[38]=vf;n[39]=Ff;n[40]=Gf;n[41]=yf;n[42]=Hf;n[43]=If;n[44]=Jf;n[45]=Gf;n[46]=$g;n[47]=ah;n[48]=bh;n[49]=_f;n[50]=bg;n[51]=hg;n[52]=ig;n[53]=jg;n[54]=eg;n[55]=kg;n[56]=gg;n[57]=lg;n[58]=mg;n[59]=ng;n[60]=og;n[61]=pg;n[62]=qg;n[63]=rg;n[64]=sg;n[65]=tg;n[66]=ug;n[67]=vg;n[68]=wg;n[69]=xg;n[70]=yg;n[71]=zg;n[72]=Ag;n[73]=Bg;n[74]=Cg;n[75]=Dg;n[76]=Eg;n[77]=Fg;n[78]=Gg;n[79]=Hg;n[80]=Ig;n[81]=Jg;n[82]=Kg;n[83]=Lg;n[84]=Mg;n[85]=Ng;n[86]=Og;n[87]=Pg;n[88]=Qg;n[89]=Rg;n[90]=Yg;n[91]=dg;n[92]=Zg;n[93]=xf;n[94]=xf;n[95]=ch;n[96]=Xe;n[97]=dh;n[98]=ag;n[99]=cg;n[100]=Gh;n[101]=Fh;n[102]=Xe;n[103]=Uh;n[104]=ah;n[105]=Ih;n[106]=Jh;n[107]=Kh;n[108]=Lh;n[109]=Mh;n[110]=Th;n[111]=Vh;n[112]=Wh;n[113]=Nh;n[114]=Oh;n[115]=Ph;n[116]=Ph;n[117]=Qh;n[118]=Rh;n[119]=Rh;n[120]=Ph;n[121]=Ph;n[122]=xf;n[123]=vf;n[124]=Xh;n[125]=XS;n[126]=vf;n[127]=Zh;n[128]=_h;n[129]=mi;n[130]=ni;n[131]=oi;n[132]=li;n[133]=$h;n[134]=bi;n[135]=di;n[136]=ei;n[137]=fi;n[138]=ki;n[139]=xi;n[140]=yi;n[141]=zi;n[142]=pi;n[143]=qi;n[144]=ri;n[145]=si;n[146]=ti;n[147]=ui;n[148]=vi;n[149]=wi;n[150]=Ii;n[151]=Ki;n[152]=Li;n[153]=Ai;n[154]=Bi;n[155]=Ci;n[156]=Di;n[157]=Ei;n[158]=Gi;n[159]=Si;n[160]=Ti;n[161]=Ui;n[162]=Mi;n[163]=Ni;n[164]=Oi;n[165]=Pi;n[166]=Qi;n[167]=Ri;n[168]=dj;n[169]=ej;n[170]=fj;n[171]=Vi;n[172]=Wi;n[173]=Xi;n[174]=Yi;n[175]=Zi;n[176]=$i;n[177]=aj;n[178]=bj;n[179]=cj;n[180]=Cj;n[181]=vf;n[182]=pk;n[183]=rk;n[184]=Ck;n[185]=Dk;n[186]=Zk;n[187]=_k;n[188]=Cl;n[189]=Dl;n[190]=wl;n[191]=ll;n[192]=yo;n[193]=zo;n[194]=ho;n[195]=un;n[196]=wn;n[197]=xf;n[198]=_n;n[199]=cl;n[200]=$g;n[201]=ah;n[202]=bh;n[203]=Hl;n[204]=Ll;n[205]=Ql;n[206]=Sl;n[207]=Tl;n[208]=Ul;n[209]=Vl;n[210]=Wl;n[211]=Xl;n[212]=Yl;n[213]=Zl;n[214]=_l;n[215]=$l;n[216]=am;n[217]=bm;n[218]=cm;n[219]=dm;n[220]=em;n[221]=hm;n[222]=im;n[223]=jm;n[224]=km;n[225]=lm;n[226]=mm;n[227]=fm;n[228]=gm;n[229]=nm;n[230]=om;n[231]=pm;n[232]=qm;n[233]=rm;n[234]=sm;n[235]=tm;n[236]=um;n[237]=vm;n[238]=wm;n[239]=xm;n[240]=ym;n[241]=zm;n[242]=Am;n[243]=Bm;n[244]=Cm;n[245]=Dm;n[246]=Em;n[247]=Fm;n[248]=Gm;n[249]=Hm;n[250]=Im;n[251]=Jm;n[252]=Km;n[253]=Lm;n[254]=Mm;n[255]=Nm;n[256]=Om;n[257]=Pm;n[258]=Qm;n[259]=Rm;n[260]=Sm;n[261]=Tm;n[262]=Um;n[263]=Vm;n[264]=Wm;n[265]=Xm;n[266]=Ym;n[267]=Zm;n[268]=_m;n[269]=bn;n[270]=$m;n[271]=an;n[272]=cn;n[273]=dn;n[274]=en;n[275]=fn;n[276]=gn;n[277]=hn;n[278]=kn;n[279]=ln;n[280]=mn;n[281]=nn;n[282]=on;n[283]=jn;n[284]=pn;n[285]=rn;n[286]=sn;n[287]=xn;n[288]=yn;n[289]=zn;n[290]=An;n[291]=En;n[292]=Hn;n[293]=In;n[294]=Nn;n[295]=On;n[296]=Pn;n[297]=Qn;n[298]=Kn;n[299]=Ln;n[300]=Mn;n[301]=Rn;n[302]=Sn;n[303]=Tn;n[304]=Xh;n[305]=Xh;n[306]=xf;n[307]=ch;n[308]=Xe;n[309]=Yn;n[310]=Kl;n[311]=Ml;n[312]=io;n[313]=vf;n[314]=jo;n[315]=vf;n[316]=xf;n[317]=vf;n[318]=vo;n[319]=wo;n[320]=xo;n[321]=dp;n[322]=ep;n[323]=tp;n[324]=wp;n[325]=Op;n[326]=vf;n[327]=cq;n[328]=bq;n[329]=$g;n[330]=ah;n[331]=bh;n[332]=hq;n[333]=iq;n[334]=jq;n[335]=lq;n[336]=mq;n[337]=nq;n[338]=ch;n[339]=Xe;n[340]=dh;n[341]=oq;n[342]=pq;n[343]=_q;n[344]=$q;n[345]=qq;n[346]=vq;n[347]=wq;n[348]=xq;n[349]=yq;n[350]=zq;n[351]=Aq;n[352]=Bq;n[353]=Cq;n[354]=Dq;n[355]=Eq;n[356]=Fq;n[357]=Gq;n[358]=Hq;n[359]=Iq;n[360]=Jq;n[361]=Kq;n[362]=Lq;n[363]=Mq;n[364]=Nq;n[365]=Pq;n[366]=Qq;n[367]=Rq;n[368]=Sq;n[369]=Tq;n[370]=Uq;n[371]=Wq;n[372]=Xq;n[373]=Yq;n[374]=Zq;n[375]=hr;n[376]=jr;n[377]=Gr;n[378]=Hr;n[379]=Ir;n[380]=Jr;n[381]=Nr;n[382]=_n;n[383]=Or;n[384]=vf;n[385]=Fr;n[386]=Ve;n[387]=Dr;n[388]=Er;n[389]=es;n[390]=vf;n[391]=es;n[392]=vf;n[393]=gs;n[394]=hs;n[395]=is;n[396]=vf;n[397]=us;n[398]=zs;n[399]=At;n[400]=ot;n[401]=st;n[402]=Bt;n[403]=pt;n[404]=tt;n[405]=Ct;n[406]=qt;n[407]=ut;n[408]=rt;n[409]=vt;n[410]=Ht;n[411]=Kt;n[412]=It;n[413]=Lt;n[414]=Jt;n[415]=Mt;n[416]=sI;n[417]=vI;n[418]=tI;n[419]=wI;n[420]=uI;n[421]=xI;n[422]=yH;n[423]=AH;n[424]=zH;n[425]=BH;n[426]=fI;n[427]=hI;n[428]=gI;n[429]=iI;n[430]=Nt;n[431]=Ot;n[432]=Ve;n[433]=eH;n[434]=Pt;n[435]=Qt;n[436]=Uh;n[437]=Uh;n[438]=iH;n[439]=Rt;n[440]=nH;n[441]=St;n[442]=qH;n[443]=Tt;n[444]=$t;n[445]=bu;n[446]=au;n[447]=cu;n[448]=$g;n[449]=ah;n[450]=bh;n[451]=xf;n[452]=vf;n[453]=fu;n[454]=ch;n[455]=Xe;n[456]=dh;n[457]=gu;n[458]=hu;n[459]=$g;n[460]=ah;n[461]=bh;n[462]=iu;n[463]=ju;n[464]=ku;n[465]=lu;n[466]=mu;n[467]=nu;n[468]=ch;n[469]=Xe;n[470]=dh;n[471]=ou;n[472]=pu;n[473]=xf;n[474]=yu;n[475]=wU;n[476]=Cu;n[477]=yu;n[478]=Lu;n[479]=yu;n[480]=Mu;n[481]=Nu;n[482]=Ou;n[483]=Pu;n[484]=Qu;n[485]=Ru;n[486]=Su;n[487]=Tu;n[488]=Uu;n[489]=Vu;n[490]=Wu;n[491]=Xu;n[492]=Yu;n[493]=Zu;n[494]=_u;n[495]=$u;n[496]=av;n[497]=bv;n[498]=cv;n[499]=dv;n[500]=ev;n[501]=fv;n[502]=gv;n[503]=hv;n[504]=iv;n[505]=jv;n[506]=Ve;n[507]=kv;n[508]=lv;n[509]=mv;n[510]=ov;n[511]=pv;n[512]=qv;n[513]=rv;n[514]=sv;n[515]=tv;n[516]=uv;n[517]=xf;n[518]=yu;n[519]=Mv;n[520]=ah;n[521]=Kk;n[522]=Nv;n[523]=Pv;n[524]=Qv;n[525]=Rv;n[526]=Sv;n[527]=Ve;n[528]=Uv;n[529]=yu;n[530]=tw;n[531]=uw;n[532]=ow;n[533]=qw;n[534]=vw;n[535]=xw;n[536]=pw;n[537]=rw;n[538]=ww;n[539]=yw;n[540]=Nw;n[541]=Ow;n[542]=Pw;n[543]=Qw;n[544]=Sw;n[545]=cf;n[546]=Vw;n[547]=Ww;n[548]=bx;n[549]=dx;n[550]=fx;n[551]=jx;n[552]=lx;n[553]=cx;n[554]=ux;n[555]=Ph;n[556]=Ph;n[557]=Rh;n[558]=Ux;n[559]=Vx;n[560]=Wx;n[561]=_y;n[562]=Kk;n[563]=$y;n[564]=fy;n[565]=hy;n[566]=jy;n[567]=ky;n[568]=py;n[569]=qy;n[570]=ry;n[571]=ty;n[572]=xy;n[573]=zy;n[574]=Ay;n[575]=By;n[576]=Cy;n[577]=Dy;n[578]=Ey;n[579]=Fy;n[580]=Yy;n[581]=Iy;n[582]=Jy;n[583]=az;n[584]=uy;n[585]=Hy;n[586]=bz;n[587]=Zy;n[588]=ch;n[589]=Xe;n[590]=cz;n[591]=gy;n[592]=iy;n[593]=dz;n[594]=ez;n[595]=fz;n[596]=gz;n[597]=hz;n[598]=vf;n[599]=iz;n[600]=jz;n[601]=kz;n[602]=vf;n[603]=lz;n[604]=mz;n[605]=nz;n[606]=pz;n[607]=rz;n[608]=Rz;n[609]=Sz;n[610]=Ph;n[611]=Tz;n[612]=Rh;n[613]=Vz;n[614]=Ph;n[615]=pA;n[616]=qA;n[617]=rA;n[618]=tA;n[619]=vA;n[620]=OA;n[621]=PA;n[622]=Ph;n[623]=QA;n[624]=Rh;n[625]=SA;n[626]=Ph;n[627]=Xh;n[628]=sB;n[629]=GB;n[630]=HB;n[631]=tB;n[632]=yB;n[633]=AB;n[634]=IB;n[635]=JB;n[636]=CB;n[637]=KB;n[638]=LB;n[639]=uB;n[640]=zB;n[641]=BB;n[642]=MB;n[643]=NB;n[644]=DB;n[645]=SB;n[646]=TB;n[647]=PB;n[648]=QB;n[649]=_B;n[650]=$B;n[651]=VB;n[652]=XB;n[653]=aC;n[654]=cC;n[655]=eC;n[656]=gC;n[657]=WB;n[658]=YB;n[659]=bC;n[660]=dC;n[661]=fC;n[662]=hC;n[663]=xC;n[664]=yC;n[665]=rC;n[666]=uC;n[667]=zC;n[668]=tC;n[669]=vC;n[670]=AC;n[671]=HC;n[672]=IC;n[673]=CC;n[674]=EC;n[675]=JC;n[676]=DC;n[677]=FC;n[678]=KC;n[679]=Xh;n[680]=Xh;n[681]=MC;n[682]=OC;n[683]=NC;n[684]=PC;n[685]=$C;n[686]=aD;n[687]=VC;n[688]=XC;n[689]=WC;n[690]=YC;n[691]=cD;n[692]=eD;n[693]=dD;n[694]=fD;n[695]=iD;n[696]=lD;n[697]=pD;n[698]=qD;n[699]=HD;n[700]=HD;n[701]=FD;n[702]=wD;n[703]=vD;n[704]=yD;n[705]=ID;n[706]=xD;n[707]=rD;n[708]=sD;n[709]=tD;n[710]=uD;n[711]=zD;n[712]=AD;n[713]=JD;n[714]=CD;n[715]=BD;n[716]=DD;n[717]=ED;n[718]=KD;n[719]=MD;n[720]=ND;n[721]=OD;n[722]=PD;n[723]=QD;n[724]=SD;n[725]=TD;n[726]=UD;n[727]=VD;n[728]=WD;n[729]=XD;n[730]=YD;n[731]=$g;n[732]=ah;n[733]=bh;n[734]=_D;n[735]=aE;n[736]=dE;n[737]=cE;n[738]=eE;n[739]=fE;n[740]=gE;n[741]=hE;n[742]=ch;n[743]=Xe;n[744]=dh;n[745]=$D;n[746]=bE;n[747]=jE;n[748]=kE;n[749]=mE;n[750]=nE;n[751]=oE;n[752]=cf;n[753]=vf;n[754]=pE;n[755]=Lk;n[756]=Kk;n[757]=jC;n[758]=rE;n[759]=sE;n[760]=tE;n[761]=uE;n[762]=vE;n[763]=wE;n[764]=xE;n[765]=yE;n[766]=zE;n[767]=AE;n[768]=NE;n[769]=OF;n[770]=KE;n[771]=vf;n[772]=HF;n[773]=IF;n[774]=zD;n[775]=JF;n[776]=KF;n[777]=LF;n[778]=MF;n[779]=jC;n[780]=Kk;n[781]=vf;n[782]=NF;n[783]=JD;n[784]=Ve;n[785]=PF;n[786]=QF;n[787]=RF;n[788]=SF;n[789]=bG;n[790]=cG;n[791]=fG;n[792]=dG;n[793]=vf;n[794]=PG;n[795]=bH;n[796]=cH;n[797]=fH;n[798]=hH;n[799]=_h;n[800]=pH;n[801]=pH;n[802]=rH;n[803]=sH;n[804]=Ve;n[805]=eH;n[806]=fH;n[807]=hH;n[808]=Uh;n[809]=Uh;n[810]=uH;n[811]=_h;n[812]=wH;n[813]=pH;n[814]=xH;n[815]=pH;n[816]=yH;n[817]=AH;n[818]=zH;n[819]=BH;n[820]=fI;n[821]=hI;n[822]=gI;n[823]=iI;n[824]=_G;n[825]=BI;n[826]=ZG;n[827]=aH;n[828]=ZG;n[829]=aH;n[830]=Uh;n[831]=LI;n[832]=QI;n[833]=gJ;n[834]=hJ;n[835]=iJ;n[836]=kJ;n[837]=lJ;n[838]=rJ;n[839]=sJ;n[840]=tJ;n[841]=vJ;n[842]=wJ;n[843]=gJ;n[844]=xJ;n[845]=yJ;n[846]=zJ;n[847]=AJ;n[848]=rJ;n[849]=CJ;n[850]=yJ;n[851]=DJ;n[852]=EJ;n[853]=jK;n[854]=EK;n[855]=FK;n[856]=HK;n[857]=_U;n[858]=Xh;n[859]=pQ;n[860]=sQ;n[861]=HR;n[862]=KR;n[863]=OR;n[864]=RR;n[865]=UR;n[866]=XR;n[867]=ZR;n[868]=$R;n[869]=bS;n[870]=dS;n[871]=fS;n[872]=hS;n[873]=jS;n[874]=lS;n[875]=hQ;n[876]=kQ;n[877]=rQ;n[878]=FQ;n[879]=GQ;n[880]=HQ;n[881]=IQ;n[882]=JQ;n[883]=KQ;n[884]=BQ;n[885]=LQ;n[886]=MQ;n[887]=NQ;n[888]=RP;n[889]=TQ;n[890]=UQ;n[891]=XQ;n[892]=_Q;n[893]=$Q;n[894]=Uh;n[895]=cR;n[896]=eR;n[897]=rR;n[898]=sR;n[899]=vR;n[900]=wR;n[901]=xR;n[902]=zR;n[903]=CR;n[904]=tR;n[905]=uR;n[906]=ah;n[907]=Kk;n[908]=yR;n[909]=AR;n[910]=DR;n[911]=xf;n[912]=vf;n[913]=vf;n[914]=tQ;n[915]=uQ;n[916]=vQ;n[917]=wQ;n[918]=xQ;n[919]=yQ;n[920]=zQ;n[921]=AQ;n[922]=BQ;n[923]=CQ;n[924]=DQ;n[925]=EQ;n[926]=vf;n[927]=OQ;n[928]=OQ;n[929]=PQ;n[930]=Gf;n[931]=Gf;n[932]=QQ;n[933]=Gf;n[934]=vf;n[935]=fR;n[936]=hR;n[937]=PQ;n[938]=Uh;n[939]=Uh;n[940]=jR;n[941]=Li;n[942]=vf;n[943]=lR;n[944]=nR;n[945]=PQ;n[946]=Uh;n[947]=Uh;n[948]=pR;n[949]=Li;n[950]=vf;n[951]=vf;n[952]=xf;n[953]=vf;n[954]=aL;n[955]=bL;n[956]=eL;n[957]=xf;n[958]=vf;n[959]=fL;n[960]=gL;n[961]=iL;n[962]=vf;n[963]=jL;n[964]=yL;n[965]=IL;n[966]=LL;n[967]=OL;n[968]=OL;n[969]=RL;n[970]=UL;n[971]=ZL;n[972]=aM;n[973]=dM;n[974]=vf;n[975]=oM;n[976]=sM;n[977]=xM;n[978]=zM;n[979]=BM;n[980]=BM;n[981]=DM;n[982]=FM;n[983]=JM;n[984]=LM;n[985]=NM;n[986]=vf;n[987]=UM;n[988]=_M;n[989]=eN;n[990]=fN;n[991]=gN;n[992]=hN;n[993]=mN;n[994]=nN;n[995]=vf;n[996]=oN;n[997]=rN;n[998]=wN;n[999]=xN;n[1e3]=yN;n[1001]=zN;n[1002]=BN;n[1003]=CN;n[1004]=xf;n[1005]=vf;n[1006]=Ui;n[1007]=HN;n[1008]=IN;n[1009]=JN;n[1010]=LN;n[1011]=NN;n[1012]=QN;n[1013]=FR;n[1014]=MR;n[1015]=SR;n[1016]=eS;n[1017]=iS;n[1018]=YR;n[1019]=aS;n[1020]=xf;n[1021]=vf;n[1022]=Ui;n[1023]=dO;n[1024]=eO;n[1025]=fO;n[1026]=hO;n[1027]=jO;n[1028]=mO;n[1029]=IR;n[1030]=PR;n[1031]=VR;n[1032]=gS;n[1033]=kS;n[1034]=_R;n[1035]=cS;n[1036]=pS;n[1037]=oS;n[1038]=zO;n[1039]=pS;n[1040]=oS;n[1041]=EO;n[1042]=vf;n[1043]=IO;n[1044]=IO;n[1045]=JO;n[1046]=JO;n[1047]=JO;n[1048]=KO;n[1049]=Uh;n[1050]=LO;n[1051]=LO;n[1052]=vf;n[1053]=IO;n[1054]=IO;n[1055]=JO;n[1056]=JO;n[1057]=JO;n[1058]=KO;n[1059]=Uh;n[1060]=LO;n[1061]=LO;n[1062]=vf;n[1063]=MO;n[1064]=MO;n[1065]=JO;n[1066]=JO;n[1067]=JO;n[1068]=NO;n[1069]=Uh;n[1070]=LO;n[1071]=LO;n[1072]=vf;n[1073]=MO;n[1074]=MO;n[1075]=JO;n[1076]=JO;n[1077]=JO;n[1078]=NO;n[1079]=Uh;n[1080]=LO;n[1081]=LO;n[1082]=vf;n[1083]=OO;n[1084]=VO;n[1085]=vf;n[1086]=iP;n[1087]=mP;n[1088]=vf;n[1089]=uP;n[1090]=AP;n[1091]=vf;n[1092]=BP;n[1093]=FP;n[1094]=vf;n[1095]=IP;n[1096]=JP;n[1097]=Ve;n[1098]=vf;n[1099]=IP;n[1100]=NP;n[1101]=Ve;n[1102]=yu;n[1103]=Xh;n[1104]=_T;n[1105]=uU;n[1106]=xf;n[1107]=vf;n[1108]=xU;n[1109]=zU;n[1110]=LS;n[1111]=AU;n[1112]=AU;n[1113]=xf;n[1114]=vf;n[1115]=Xh;n[1116]=Xh;n[1117]=BU;n[1118]=vf;n[1119]=DU;n[1120]=vf;n[1121]=EU;n[1122]=YU;n[1123]=VU;n[1124]=HU;n[1125]=vf;n[1126]=XU;n[1127]=UU;n[1128]=IU;n[1129]=vf;n[1130]=WU;n[1131]=RU;n[1132]=KU;n[1133]=vf;n[1134]=MU;n[1135]=sb;n[1136]=tb;n[1137]=ub;n[1138]=vb;n[1139]=wb;n[1140]=xb;n[1141]=yb;n[1142]=zb;n[1143]=Ab;n[1144]=Bb;n[1145]=Cb;n[1146]=Db;n[1147]=Eb;n[1148]=Fb;n[1149]=Gb;n[1150]=Hb;n[1151]=Ib;n[1152]=Jb;n[1153]=Kb;n[1154]=Lb;n[1155]=Mb;n[1156]=Nb;n[1157]=Ob;n[1158]=Pb;n[1159]=Qb;n[1160]=Rb;n[1161]=Sb;n[1162]=Tb;n[1163]=Ub;n[1164]=Vb;n[1165]=Wb;n[1166]=Xb;n[1167]=Yb;n[1168]=Zb;n[1169]=_b;n[1170]=$b;n[1171]=ac;n[1172]=bc;n[1173]=cc;n[1174]=dc;n[1175]=ec;n[1176]=fc;n[1177]=gc;n[1178]=hc;n[1179]=ic;n[1180]=jc;n[1181]=kc;n[1182]=lc;n[1183]=mc;n[1184]=nc;n[1185]=oc;n[1186]=pc;n[1187]=qc;n[1188]=rc;n[1189]=sc;n[1190]=tc;n[1191]=uc;n[1192]=vc;n[1193]=wc;n[1194]=xc;n[1195]=yc;n[1196]=zc;n[1197]=Ac;n[1198]=Bc;n[1199]=Cc;n[1200]=Dc;n[1201]=Ec;n[1202]=Fc;n[1203]=Gc;n[1204]=Hc;n[1205]=Ic;n[1206]=Jc;n[1207]=Kc;n[1208]=Lc;n[1209]=Mc;n[1210]=Nc;n[1211]=Oc;n[1212]=Pc;n[1213]=Qc;n[1214]=Rc;n[1215]=Sc;n[1216]=Tc;n[1217]=Uc;n[1218]=Vc;n[1219]=Wc;n[1220]=Xc;n[1221]=Yc;n[1222]=Zc;n[1223]=_c;n[1224]=$c;n[1225]=ad;n[1226]=bd;n[1227]=cd;n[1228]=dd;n[1229]=ed;n[1230]=fd;n[1231]=gd;n[1232]=hd;n[1233]=id;n[1234]=jd;n[1235]=kd;n[1236]=ld;n[1237]=md;n[1238]=nd;n[1239]=od;n[1240]=pd;n[1241]=qd;n[1242]=rd;n[1243]=sd;n[1244]=td;n[1245]=ud;n[1246]=vd;n[1247]=wd;n[1248]=xd;n[1249]=yd;n[1250]=zd;n[1251]=Ad;n[1252]=Bd;n[1253]=Cd;n[1254]=Dd;n[1255]=Ed;n[1256]=Fd;n[1257]=Gd;n[1258]=Hd;n[1259]=Id;n[1260]=Jd;n[1261]=Kd;n[1262]=Ld;n[1263]=Md;n[1264]=Nd;n[1265]=Od;n[1266]=Pd;n[1267]=Qd;n[1268]=Rd;n[1269]=Sd;n[1270]=Td;n[1271]=Ud;n[1272]=Vd;n[1273]=Wd;n[1274]=Xd;n[1275]=Yd;n[1276]=Zd;n[1277]=_d;n[1278]=$d;n[1279]=ae;n[1280]=be;n[1281]=ce;n[1282]=de;n[1283]=ee;n[1284]=fe;n[1285]=ge;n[1286]=he;n[1287]=ie;n[1288]=je;n[1289]=ke;n[1290]=le;n[1291]=me;n[1292]=ne;n[1293]=oe;n[1294]=pe;n[1295]=qe;function xe(){return buffer.byteLength/65536|0}function ye(pagesToAdd){pagesToAdd=pagesToAdd|0;var ze=xe()|0;var Ae=ze+pagesToAdd|0;if(ze=0;--Ee){De[48+Ee]=52+Ee;De[65+Ee]=Ee;De[97+Ee]=26+Ee}De[43]=62;De[47]=63;function Fe(uint8Array,offset,b64){var Ge,He,Ee=0,Ie=offset,Je=b64.length,Ke=offset+(Je*3>>2);if(b64[Je-2]=="=")--Ke;if(b64[Je-1]=="=")--Ke;for(;Ee>4;if(Ie+1>2;if(Ie+2>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":1296,"maximum":1296+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr){var endPtr=ptr;var idx=endPtr>>1;while(HEAP16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5615984,DYNAMIC_BASE=5615984,DYNAMICTOP_PTR=372944;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="effekseer.core.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;var ASM_CONSTS={343260:function($0,$1){return Module._loadBinary(UTF16ToString($0),$1)!=null},343325:function($0,$1,$2,$3){var buffer=Module._loadBinary(UTF16ToString($0),$3);var memptr=_malloc(buffer.byteLength);HEAP8.set(new Uint8Array(buffer),memptr);setValue($1,memptr,"i32");setValue($2,buffer.byteLength,"i32")},343768:function($0){return Module._loadImage(UTF16ToString($0))!=null},343827:function($0,$1){var binding=GLctx.getParameter(GLctx.TEXTURE_BINDING_2D);var img=Module._loadImage(UTF16ToString($0));GLctx.bindTexture(GLctx.TEXTURE_2D,GL.textures[$1]);var pa=gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);var oldFlipY=gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);GLctx.pixelStorei(GLctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL,false);GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL,false);GLctx.texImage2D(GLctx.TEXTURE_2D,0,GLctx.RGBA,GLctx.RGBA,GLctx.UNSIGNED_BYTE,img);if(Module._isPowerOfTwo(img)){GLctx.generateMipmap(GLctx.TEXTURE_2D)}GLctx.pixelStorei(GLctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL,pa);GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL,oldFlipY);GLctx.bindTexture(GLctx.TEXTURE_2D,binding)}};function _emscripten_asm_const_iii(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function ___cxa_allocate_exception(size){return _malloc(size)}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(a0,a1){return _atexit(a0,a1)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;return 0}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;return 0}function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){return syscallMunmap(addr,len)}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs}function _abort(){abort()}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){noExitRuntime=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h0?AL.freeIds.pop():AL._nextId++},freeIds:[],scheduleContextAudio:function(ctx){if(Browser.mainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}for(var i in ctx.sources){AL.scheduleSourceAudio(ctx.sources[i])}},scheduleSourceAudio:function(src,lookahead){if(Browser.mainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}if(src.state!==4114){return}var currentTime=AL.updateSourceTime(src);var startTime=src.bufStartTime;var startOffset=src.bufOffset;var bufCursor=src.bufsProcessed;for(var i=0;i=src.bufQueue.length){if(src.looping){bufCursor%=src.bufQueue.length}else{break}}var buf=src.bufQueue[bufCursor%src.bufQueue.length];if(buf.length===0){skipCount++;if(skipCount===src.bufQueue.length){break}}else{var audioSrc=src.context.audioCtx.createBufferSource();audioSrc.buffer=buf.audioBuf;audioSrc.playbackRate.value=src.playbackRate;if(buf.audioBuf._loopStart||buf.audioBuf._loopEnd){audioSrc.loopStart=buf.audioBuf._loopStart;audioSrc.loopEnd=buf.audioBuf._loopEnd}var duration=0;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY;audioSrc.loop=true;if(buf.audioBuf._loopStart){audioSrc.loopStart=buf.audioBuf._loopStart}if(buf.audioBuf._loopEnd){audioSrc.loopEnd=buf.audioBuf._loopEnd}}else{duration=(buf.audioBuf.duration-startOffset)/src.playbackRate}audioSrc._startOffset=startOffset;audioSrc._duration=duration;audioSrc._skipCount=skipCount;skipCount=0;audioSrc.connect(src.gain);if(typeof audioSrc.start!=="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.start(startTime,startOffset)}else if(typeof audioSrc.noteOn!=="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.noteOn(startTime)}audioSrc._startTime=startTime;src.audioQueue.push(audioSrc);startTime+=duration}startOffset=0;bufCursor++}},updateSourceTime:function(src){var currentTime=src.context.audioCtx.currentTime;if(src.state!==4114){return currentTime}if(!isFinite(src.bufStartTime)){src.bufStartTime=currentTime-src.bufOffset/src.playbackRate;src.bufOffset=0}var nextStartTime=0;while(src.audioQueue.length){var audioSrc=src.audioQueue[0];src.bufsProcessed+=audioSrc._skipCount;nextStartTime=audioSrc._startTime+audioSrc._duration;if(currentTime=src.bufQueue.length&&!src.looping){AL.setSourceState(src,4116)}else if(src.type===4136&&src.looping){var buf=src.bufQueue[0];if(buf.length===0){src.bufOffset=0}else{var delta=(currentTime-src.bufStartTime)*src.playbackRate;var loopStart=buf.audioBuf._loopStart||0;var loopEnd=buf.audioBuf._loopEnd||buf.audioBuf.duration;if(loopEnd<=loopStart){loopEnd=buf.audioBuf.duration}if(delta0){src.bufStartTime+=Math.floor((currentTime-src.bufStartTime)/srcDuration)*srcDuration}}for(var i=0;i=src.bufQueue.length){if(src.looping){src.bufsProcessed%=src.bufQueue.length}else{AL.setSourceState(src,4116);break}}var buf=src.bufQueue[src.bufsProcessed];if(buf.length>0){nextStartTime=src.bufStartTime+buf.audioBuf.duration/src.playbackRate;if(currentTime1){src.audioQueue.length=1}},stopSourceAudio:function(src){for(var i=0;isrc.bufQueue[src.bufsProcessed].audioBuf.duration){offset-=src.bufQueue[src.bufsProcessed].audiobuf.duration;src.bufsProcessed++}src.bufOffset=offset}if(playing){AL.setSourceState(src,4114)}},getGlobalParam:function(funcname,param){if(!AL.currentCtx){return null}switch(param){case 49152:return AL.currentCtx.dopplerFactor;case 49155:return AL.currentCtx.speedOfSound;case 53248:return AL.currentCtx.distanceModel;default:AL.currentCtx.err=40962;return null}},setGlobalParam:function(funcname,param,value){if(!AL.currentCtx){return}switch(param){case 49152:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.dopplerFactor=value;AL.updateListenerSpace(AL.currentCtx);break;case 49155:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}AL.currentCtx.speedOfSound=value;AL.updateListenerSpace(AL.currentCtx);break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:AL.currentCtx.distanceModel=value;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},getListenerParam:function(funcname,param){if(!AL.currentCtx){return null}switch(param){case 4100:return AL.currentCtx.listener.position;case 4102:return AL.currentCtx.listener.velocity;case 4111:return AL.currentCtx.listener.direction.concat(AL.currentCtx.listener.up);case 4106:return AL.currentCtx.gain.gain.value;default:AL.currentCtx.err=40962;return null}},setListenerParam:function(funcname,param,value){if(!AL.currentCtx){return}if(value===null){AL.currentCtx.err=40962;return}var listener=AL.currentCtx.listener;switch(param){case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.position[0]=value[0];listener.position[1]=value[1];listener.position[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.velocity[0]=value[0];listener.velocity[1]=value[1];listener.velocity[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.gain.gain.value=value;break;case 4111:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])||!Number.isFinite(value[3])||!Number.isFinite(value[4])||!Number.isFinite(value[5])){AL.currentCtx.err=40963;return}listener.direction[0]=value[0];listener.direction[1]=value[1];listener.direction[2]=value[2];listener.up[0]=value[3];listener.up[1]=value[4];listener.up[2]=value[5];AL.updateListenerSpace(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}},getBufferParam:function(funcname,bufferId,param){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}switch(param){case 8193:return buf.frequency;case 8194:return buf.bytesPerSample*8;case 8195:return buf.channels;case 8196:return buf.length*buf.bytesPerSample*buf.channels;case 8213:if(buf.length===0){return[0,0]}else{return[(buf.audioBuf._loopStart||0)*buf.frequency,(buf.audioBuf._loopEnd||buf.length)*buf.frequency]}default:AL.currentCtx.err=40962;return null}},setBufferParam:function(funcname,bufferId,param,value){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 8196:if(value!==0){AL.currentCtx.err=40963;return}break;case 8213:if(value[0]<0||value[0]>buf.length||value[1]<0||value[1]>buf.Length||value[0]>=value[1]){AL.currentCtx.err=40963;return}if(buf.refCount>0){AL.currentCtx.err=40964;return}if(buf.audioBuf){buf.audioBuf._loopStart=value[0]/buf.frequency;buf.audioBuf._loopEnd=value[1]/buf.frequency}break;default:AL.currentCtx.err=40962;return}},getSourceParam:function(funcname,sourceId,param){if(!AL.currentCtx){return null}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return null}switch(param){case 514:return src.relative;case 4097:return src.coneInnerAngle;case 4098:return src.coneOuterAngle;case 4099:return src.pitch;case 4100:return src.position;case 4101:return src.direction;case 4102:return src.velocity;case 4103:return src.looping;case 4105:if(src.type===4136){return src.bufQueue[0].id}else{return 0}case 4106:return src.gain.gain.value;case 4109:return src.minGain;case 4110:return src.maxGain;case 4112:return src.state;case 4117:if(src.bufQueue.length===1&&src.bufQueue[0].id===0){return 0}else{return src.bufQueue.length}case 4118:if(src.bufQueue.length===1&&src.bufQueue[0].id===0||src.looping){return 0}else{return src.bufsProcessed}case 4128:return src.refDistance;case 4129:return src.rolloffFactor;case 4130:return src.coneOuterGain;case 4131:return src.maxDistance;case 4132:return AL.sourceTell(src);case 4133:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency}return offset;case 4134:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency*src.bufQueue[0].bytesPerSample}return offset;case 4135:return src.type;case 4628:return src.spatialize;case 8201:var length=0;var bytesPerFrame=0;for(var i=0;i0){var audioSrc=src.audioQueue[0];audioSrc.loop=true;audioSrc._duration=Number.POSITIVE_INFINITY}}else if(value===0){src.looping=false;var currentTime=AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=false;audioSrc._duration=src.bufQueue[0].audioBuf.duration/src.playbackRate;audioSrc._startTime=currentTime-src.bufOffset/src.playbackRate}}else{AL.currentCtx.err=40963;return}break;case 4105:if(src.state===4114||src.state===4115){AL.currentCtx.err=40964;return}if(value===0){for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=1;src.bufQueue[0]=AL.buffers[0];src.bufsProcessed=0;src.type=4144}else{var buf=AL.buffers[value];if(!buf){AL.currentCtx.err=40963;return}for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=0;buf.refCount++;src.bufQueue=[buf];src.bufsProcessed=0;src.type=4136}AL.initSourcePanner(src);AL.scheduleSourceAudio(src);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.gain.gain.value=value;break;case 4109:if(!Number.isFinite(value)||value<0||value>Math.min(src.maxGain,1)){AL.currentCtx.err=40963;return}src.minGain=value;break;case 4110:if(!Number.isFinite(value)||value1){AL.currentCtx.err=40963;return}src.maxGain=value;break;case 4128:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.refDistance=value;if(src.panner){src.panner.refDistance=value}break;case 4129:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.rolloffFactor=value;if(src.panner){src.panner.rolloffFactor=value}break;case 4130:if(!Number.isFinite(value)||value<0||value>1){AL.currentCtx.err=40963;return}src.coneOuterGain=value;if(src.panner){src.panner.coneOuterGain=value}break;case 4131:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.maxDistance=value;if(src.panner){src.panner.maxDistance=value}break;case 4132:if(value<0||value>AL.sourceDuration(src)){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4133:var srcLen=AL.sourceDuration(src);if(srcLen>0){var frequency;for(var bufId in src.bufQueue){if(bufId){frequency=src.bufQueue[bufId].frequency;break}}value/=frequency}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4134:var srcLen=AL.sourceDuration(src);if(srcLen>0){var bytesPerSec;for(var bufId in src.bufQueue){if(bufId){var buf=src.bufQueue[bufId];bytesPerSec=buf.frequency*buf.bytesPerSample*buf.channels;break}}value/=bytesPerSec}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4628:if(value!==0&&value!==1&&value!==2){AL.currentCtx.err=40963;return}src.spatialize=value;AL.initSourcePanner(src);break;case 8201:case 8202:case 8203:AL.currentCtx.err=40964;break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:src.distanceModel=value;if(AL.currentCtx.sourceDistanceModel){AL.updateContextGlobal(AL.currentCtx)}break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},captures:{},sharedCaptureAudioCtx:null,requireValidCaptureDevice:function(deviceId,funcname){if(deviceId===0){AL.alcErr=40961;return null}var c=AL.captures[deviceId];if(!c){AL.alcErr=40961;return null}var err=c.mediaStreamError;if(err){AL.alcErr=40961;return null}return c}};function _alBufferData(bufferId,format,pData,size,freq){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf){AL.currentCtx.err=40963;return}if(freq<=0){AL.currentCtx.err=40963;return}var audioBuf=null;try{switch(format){case 4352:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size,freq);var channel0=audioBuf.getChannelData(0);for(var i=0;i0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>1,freq);var channel0=audioBuf.getChannelData(0);pData>>=1;for(var i=0;i>1;++i){channel0[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=1;buf.length=size>>1;break;case 4354:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>1,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);for(var i=0;i>1;++i){channel0[i]=HEAPU8[pData++]*.0078125-1;channel1[i]=HEAPU8[pData++]*.0078125-1}}buf.bytesPerSample=1;buf.channels=2;buf.length=size>>1;break;case 4355:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>2,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=1;for(var i=0;i>2;++i){channel0[i]=HEAP16[pData++]*30517578125e-15;channel1[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=2;buf.length=size>>2;break;case 65552:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>2,freq);var channel0=audioBuf.getChannelData(0);pData>>=2;for(var i=0;i>2;++i){channel0[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=1;buf.length=size>>2;break;case 65553:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>3,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=2;for(var i=0;i>3;++i){channel0[i]=HEAPF32[pData++];channel1[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=2;buf.length=size>>3;break;default:AL.currentCtx.err=40963;return}buf.frequency=freq;buf.audioBuf=audioBuf}catch(e){AL.currentCtx.err=40963;return}}function _alDeleteBuffers(count,pBufferIds){if(!AL.currentCtx){return}for(var i=0;i>2];if(bufId===0){continue}if(!AL.buffers[bufId]){AL.currentCtx.err=40961;return}if(AL.buffers[bufId].refCount){AL.currentCtx.err=40964;return}}for(var i=0;i>2];if(bufId===0){continue}AL.deviceRefCounts[AL.buffers[bufId].deviceId]--;delete AL.buffers[bufId];AL.freeIds.push(bufId)}}function _alSourcei(sourceId,param,value){switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4628:case 8201:case 8202:case 53248:AL.setSourceParam("alSourcei",sourceId,param,value);break;default:AL.setSourceParam("alSourcei",sourceId,param,null);break}}function _alDeleteSources(count,pSourceIds){if(!AL.currentCtx){return}for(var i=0;i>2];if(!AL.currentCtx.sources[srcId]){AL.currentCtx.err=40961;return}}for(var i=0;i>2];AL.setSourceState(AL.currentCtx.sources[srcId],4116);_alSourcei(srcId,4105,0);delete AL.currentCtx.sources[srcId];AL.freeIds.push(srcId)}}function _alGenBuffers(count,pBufferIds){if(!AL.currentCtx){return}for(var i=0;i>2]=buf.id}}function _alGenSources(count,pSourceIds){if(!AL.currentCtx){return}for(var i=0;i>2]=src.id}}function _alGetSourcei(sourceId,param,pValue){var val=AL.getSourceParam("alGetSourcei",sourceId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4112:case 4117:case 4118:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4135:case 4628:case 8201:case 8202:case 53248:HEAP32[pValue>>2]=val;break;default:AL.currentCtx.err=40962;return}}function _alListenerfv(param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;case 4111:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.paramArray[3]=HEAPF32[pValues+12>>2];AL.paramArray[4]=HEAPF32[pValues+16>>2];AL.paramArray[5]=HEAPF32[pValues+20>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;default:AL.setListenerParam("alListenerfv",param,null);break}}function _alSourcePause(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4115)}function _alSourcePlay(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4114)}function _alSourceStop(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4116)}function _alSourcef(sourceId,param,value){switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:AL.setSourceParam("alSourcef",sourceId,param,value);break;default:AL.setSourceParam("alSourcef",sourceId,param,null);break}}function _alSourcefv(sourceId,param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:var val=HEAPF32[pValues>>2];AL.setSourceParam("alSourcefv",sourceId,param,val);break;case 4100:case 4101:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setSourceParam("alSourcefv",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSourcefv",sourceId,param,null);break}}function _alcCreateContext(deviceId,pAttrList){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}var options=null;var attrs=[];var hrtf=null;pAttrList>>=2;if(pAttrList){var attr=0;var val=0;while(true){attr=HEAP32[pAttrList++];attrs.push(attr);if(attr===0){break}val=HEAP32[pAttrList++];attrs.push(val);switch(attr){case 4103:if(!options){options={}}options.sampleRate=val;break;case 4112:case 4113:break;case 6546:switch(val){case 0:hrtf=false;break;case 1:hrtf=true;break;case 2:break;default:AL.alcErr=40964;return 0}break;case 6550:if(val!==0){AL.alcErr=40964;return 0}break;default:AL.alcErr=40964;return 0}}}var AudioContext=window.AudioContext||window.webkitAudioContext;var ac=null;try{if(options){ac=new AudioContext(options)}else{ac=new AudioContext}}catch(e){if(e.name==="NotSupportedError"){AL.alcErr=40964}else{AL.alcErr=40961}return 0}if(typeof ac.createGain==="undefined"){ac.createGain=ac.createGainNode}var gain=ac.createGain();gain.connect(ac.destination);var ctx={deviceId:deviceId,id:AL.newId(),attrs:attrs,audioCtx:ac,listener:{position:[0,0,0],velocity:[0,0,0],direction:[0,0,0],up:[0,0,0]},sources:[],interval:setInterval(function(){AL.scheduleContextAudio(ctx)},AL.QUEUE_INTERVAL),gain:gain,distanceModel:53250,speedOfSound:343.3,dopplerFactor:1,sourceDistanceModel:false,hrtf:hrtf||false,_err:0,get err(){return this._err},set err(val){if(this._err===0||val===0){this._err=val}}};AL.deviceRefCounts[deviceId]++;AL.contexts[ctx.id]=ctx;if(hrtf!==null){for(var ctxId in AL.contexts){var c=AL.contexts[ctxId];if(c.deviceId===deviceId){c.hrtf=hrtf;AL.updateContextGlobal(c)}}}return ctx.id}function _alcMakeContextCurrent(contextId){if(contextId===0){AL.currentCtx=null;return 0}else{AL.currentCtx=AL.contexts[contextId];return 1}}function _alcOpenDevice(pDeviceName){if(pDeviceName){var name=UTF8ToString(pDeviceName);if(name!==AL.DEVICE_NAME){return 0}}if(typeof AudioContext!=="undefined"||typeof webkitAudioContext!=="undefined"){var deviceId=AL.newId();AL.deviceRefCounts[deviceId]=0;return deviceId}else{return 0}}var _emscripten_get_now_is_monotonic=true;function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}function _emscripten_get_sbrk_ptr(){return 372944}function __webgl_acquireInstancedArraysExtension(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}}function __webgl_acquireVertexArrayObjectExtension(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)}}}function __webgl_acquireDrawBuffersExtension(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)}}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){__webgl_acquireInstancedArraysExtension(GLctx);__webgl_acquireVertexArrayObjectExtension(GLctx);__webgl_acquireDrawBuffersExtension(GLctx)}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","EXT_texture_norm16","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2","WEBKIT_WEBGL_compressed_texture_pvrtc"];var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;var numBytesWrittenExclNull=bufSize>0&&name?stringToUTF8(info.name,name,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;var numBytesWrittenExclNull=bufSize>0&&name?stringToUTF8(info.name,name,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Native code calling glGet"+type+"v("+name_+") and it returns "+result+" of type "+typeof result+"!");return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case 2:HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function __heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function __heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=__heapObjectForWebGLType(type);var shift=__heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){return 0}function _fd_read(fd,iov,iovcnt,pnum){var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendEquation(x0){GLctx["blendEquation"](x0)}function _glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDepthMask(flag){GLctx.depthMask(!!flag)}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _pthread_create(){return 6}function _pthread_join(){}function _pthread_mutexattr_destroy(){}function _pthread_mutexattr_init(){}function _pthread_mutexattr_settype(){}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function readAsmConstArgs(sigPtr,buf){if(!readAsmConstArgs.array){readAsmConstArgs.array=[]}var args=readAsmConstArgs.array;args.length=0;var ch;while(ch=HEAPU8[sigPtr++]){if(ch===100||ch===102){buf=buf+7&~7;args.push(HEAPF64[buf>>3]);buf+=8}else{buf=buf+3&~3;args.push(HEAP32[buf>>2]);buf+=4}}return args}Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run();Module["GL"]=GL; + + + return effekseer +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = effekseer; + else if (typeof define === 'function' && define['amd']) + define([], function() { return effekseer; }); + else if (typeof exports === 'object') + exports["effekseer"] = effekseer; + "use strict";var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i0){for(var i=0;i>2);Core.SetMatrix(this.context.nativeptr,this.native,arrmem);Module.stackRestore(stack);} +},{key:"setAllColor",value:function setAllColor(r,g,b,a){Core.SetAllColor(this.context.nativeptr,this.native,r,g,b,a);} +},{key:"setTargetLocation",value:function setTargetLocation(x,y,z){Core.SetTargetLocation(this.context.nativeptr,this.native,x,y,z);} +},{key:"getDynamicInput",value:function getDynamicInput(index){return Core.GetDynamicInput(this.context.nativeptr,this.native,index);} +},{key:"setDynamicInput",value:function setDynamicInput(index,value){Core.SetDynamicInput(this.context.nativeptr,this.native,index,value);} +},{key:"sendTrigger",value:function sendTrigger(index){Core.SendTrigger(this.context.nativeptr,this.native,index);} +},{key:"setPaused",value:function setPaused(paused){Core.SetPaused(this.context.nativeptr,this.native,paused);} +},{key:"setShown",value:function setShown(shown){Core.SetShown(this.context.nativeptr,this.native,shown);} +},{key:"setSpeed",value:function setSpeed(speed){Core.SetSpeed(this.context.nativeptr,this.native,speed);} +},{key:"setRandomSeed",value:function setRandomSeed(seed){Core.SetRandomSeed(this.context.nativeptr,this.native,seed);}},{key:"exists",get:function get(){return!!Core.Exists(this.context.nativeptr,this.native);}}]);return EffekseerHandle;}();var _isImagePowerOfTwo=function _isImagePowerOfTwo(image){return!(image.width&image.width-1)&&!(image.height&image.height-1);};var calcNextPowerOfTwo=function calcNextPowerOfTwo(v){var sizes=[2,4,8,16,32,64,128,256,512,1024,2048];var foundInd=-1;for(var i=0;i=v){return sizes[i];}} +for(var i=sizes.length-1;i>=0;i--){if(sizes[i]<=v){return sizes[i];}} +return 1;};var _convertPowerOfTwoImage=function _convertPowerOfTwoImage(image){if(!_isImagePowerOfTwo(image)){var canvas=document.createElement("canvas");canvas.width=calcNextPowerOfTwo(image.width);canvas.height=calcNextPowerOfTwo(image.height);var context2d=canvas.getContext("2d");context2d.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);image=canvas;} +return image;};var _loadBinFile=function _loadBinFile(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open('GET',url,true);xhr.responseType="arraybuffer";xhr.onload=function(){onload(xhr.response);};xhr.onerror=function(){if(!(typeof onerror==="undefined"))onerror('not found',url);};xhr.send(null);};var _loadResource=function _loadResource(path,onload,onerror){splitted_path=path.split('?');var ext_path=path;if(splitted_path.length>=2){ext_path=splitted_path[0];} +var extindex=ext_path.lastIndexOf(".");var ext=extindex>=0?ext_path.slice(extindex):"";if(ext==".png"||ext==".jpg"){var image=new Image();image.onload=function(){var converted_image=_convertPowerOfTwoImage(image);onload(converted_image);};image.onerror=function(){if(!(typeof onerror==="undefined"))onerror('not found',path);};image.crossOrigin=_imageCrossOrigin;image.src=path;}else if(ext==".tga"){if(!(typeof onerror==="undefined"))onerror('not supported',path);}else{_loadBinFile(path,function(buffer){onload(buffer);},onerror);}};var loadingEffect=null;var ContextStates=function(){function ContextStates(gl){_classCallCheck(this,ContextStates);this.restore_texture_slot_max=8;this._gl=gl;this.ext_vao=null;this.isWebGL2VAOEnabled=false;this.effekseer_vao=null;this.current_vao=null;this.current_vbo=null;this.current_ibo=null;this.current_textures=[];this.current_textures.length=this.restore_texture_slot_max;this.current_active_texture_id=null;this.ext_vao=this._gl.getExtension('OES_vertex_array_object');if(this.ext_vao!=null){this.effekseer_vao=this.ext_vao.createVertexArrayOES();}else if('createVertexArray'in this._gl){this.isWebGL2VAOEnabled=true;this.effekseer_vao=this._gl.createVertexArray();}} +_createClass(ContextStates,[{key:"release",value:function release(){if(this.effekseer_vao){if(this.ext_vao){this.ext_vao.deleteVertexArrayOES(this.effekseer_vao);}else if(this.isWebGL2VAOEnabled){this._gl.deleteVertexArray(this.effekseer_vao);} +this.effekseer_vao=null;} +this._gl=null;}},{key:"save",value:function save(){this.current_vbo=this._gl.getParameter(this._gl.ARRAY_BUFFER_BINDING);this.current_ibo=this._gl.getParameter(this._gl.ELEMENT_ARRAY_BUFFER_BINDING);if(this.ext_vao!=null){this.current_vao=this._gl.getParameter(this.ext_vao.VERTEX_ARRAY_BINDING_OES);this.ext_vao.bindVertexArrayOES(this.effekseer_vao);}else if(this.isWebGL2VAOEnabled){this.current_vao=this._gl.getParameter(this._gl.VERTEX_ARRAY_BINDING);this._gl.bindVertexArray(this.effekseer_vao);} +this.current_active_texture_id=this._gl.getParameter(this._gl.ACTIVE_TEXTURE);for(var i=0;i>2);Core.SetProjectionMatrix(this.nativeptr,arrmem);Module.stackRestore(stack);} +},{key:"setProjectionPerspective",value:function setProjectionPerspective(fov,aspect,near,far){Core.SetProjectionPerspective(this.nativeptr,fov,aspect,near,far);} +},{key:"setProjectionOrthographic",value:function setProjectionOrthographic(width,height,near,far){Core.SetProjectionOrthographic(this.nativeptr,width,height,near,far);} +},{key:"setCameraMatrix",value:function setCameraMatrix(matrixArray){var stack=Module.stackSave();var arrmem=Module.stackAlloc(4*16);Module.HEAPF32.set(matrixArray,arrmem>>2);Core.SetCameraMatrix(this.nativeptr,arrmem);Module.stackRestore(stack);} +},{key:"setCameraLookAt",value:function setCameraLookAt(positionX,positionY,positionZ,targetX,targetY,targetZ,upvecX,upvecY,upvecZ){Core.SetCameraLookAt(this.nativeptr,positionX,positionY,positionZ,targetX,targetY,targetZ,upvecX,upvecY,upvecZ);} +},{key:"setCameraLookAtFromVector",value:function setCameraLookAtFromVector(position,target,upvec){upvecVector=(typeof upvecVector==="undefined"?"undefined":_typeof(upvecVector))==="object"?upvecVector:{x:0,y:1,z:0};Core.SetCameraLookAt(this.nativeptr,position.x,position.y,position.z,target.x,target.y,target.z,upvec.x,upvec.y,upvec.z);} +},{key:"loadEffect",value:function loadEffect(data){var scale=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1.0;var onload=arguments[2];var onerror=arguments[3];var redirect=arguments[4];this._makeContextCurrent();var effect=new EffekseerEffect(this);if(typeof scale==="function"){console.log("Error : second arguments is number from version 1.5");effect.scale=1.0;effect.onload=scale;effect.onerror=onload;effect.redirect=redirect;}else{effect.scale=scale;effect.onload=onload;effect.onerror=onerror;effect.redirect=redirect;} +if(typeof data==="string"){var dirIndex=data.lastIndexOf("/");effect.baseDir=dirIndex>=0?data.slice(0,dirIndex+1):"";_loadBinFile(data,function(buffer){effect._load(buffer);},effect.onerror);}else if(data instanceof ArrayBuffer){var buffer=data;effect._load(buffer);} +return effect;} +},{key:"loadEffectPackage",value:function loadEffectPackage(path,Unzip){var scale=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1.0;var onload=arguments[3];var onerror=arguments[4];if(Unzip==null)this._makeContextCurrent();var effect=new EffekseerEffect(this);effect.scale=scale;effect.onload=onload;effect.onerror=onerror;if(typeof path==="string"){var dirIndex=path.lastIndexOf("/");effect.baseDir=dirIndex>=0?path.slice(0,dirIndex+1):"";_loadBinFile(path,function(buffer){effect._loadFromPackage(buffer,Unzip);},effect.onerror);}else if(path instanceof ArrayBuffer){var buffer=path;effect._loadFromPackage(buffer,Unzip);} +return effect;} +},{key:"releaseEffect",value:function releaseEffect(effect){this._makeContextCurrent();if(effect==null){console.warn("the effect is null.");return;} +if(!effect.isLoaded){console.warn("the effect has not be loaded yet.");return;} +if(effect.nativeptr==null){console.warn("the effect has been released.");return;} +Core.ReleaseEffect(this.nativeptr,effect.nativeptr);effect.nativeptr=null;} +},{key:"play",value:function play(effect,x,y,z){if(!effect||!effect.isLoaded){return null;} +if(x===undefined)x=0;if(y===undefined)y=0;if(z===undefined)z=0;var handle=Core.PlayEffect(this.nativeptr,effect.nativeptr,x,y,z);return handle>=0?new EffekseerHandle(this,handle):null;} +},{key:"stopAll",value:function stopAll(){Core.StopAllEffects(this.nativeptr);} +},{key:"setResourceLoader",value:function setResourceLoader(loader){_loadResource=loader;} +},{key:"getRestInstancesCount",value:function getRestInstancesCount(){return Core.GetRestInstancesCount(this.nativeptr);} +},{key:"getUpdateTime",value:function getUpdateTime(){return Core.GetUpdateTime(this.nativeptr);} +},{key:"getDrawTime",value:function getDrawTime(){return Core.GetDrawTime(this.nativeptr);} +},{key:"isVertexArrayObjectSupported",value:function isVertexArrayObjectSupported(){return Core.IsVertexArrayObjectSupported(this.nativeptr);} +},{key:"setRestorationOfStatesFlag",value:function setRestorationOfStatesFlag(flag){this._restorationOfStatesFlag=flag;Core.SetRestorationOfStatesFlag(this.nativeptr,flag);} +},{key:"captureBackground",value:function captureBackground(x,y,width,height){return Core.CaptureBackground(this.nativeptr,x,y,width,height);} +},{key:"resetBackground",value:function resetBackground(){return Core.ResetBackground(this.nativeptr);}}]);return EffekseerContext;}();var Effekseer=function(){function Effekseer(){_classCallCheck(this,Effekseer);} +_createClass(Effekseer,[{key:"initRuntime",value:function initRuntime(path,onload,onerror){if(typeof effekseer_native==="undefined"){onload();return;} +_onloadAssembly=onload;_onerrorAssembly=onerror;_initalize_wasm(path);} +},{key:"createContext",value:function createContext(){if(!_is_runtime_initialized){return null;} +return new EffekseerContext();} +},{key:"releaseContext",value:function releaseContext(context){if(context.contextStates){context.contextStates.release();} +if(context._gl){context._gl=null;} +if(context.nativeptr==null){return;} +Core.Terminate(context.nativeptr);context.nativeptr=null;} +},{key:"setLogEnabled",value:function setLogEnabled(flag){Core.SetLogEnabled(flag);} +},{key:"setImageCrossOrigin",value:function setImageCrossOrigin(crossOrigin){_imageCrossOrigin=crossOrigin;} +},{key:"init",value:function init(webglContext,settings){console.warn('deprecated : please use through createContext.');this.defaultContext=new EffekseerContext();this.defaultContext.init(webglContext,settings);} +},{key:"update",value:function update(deltaFrames){console.warn('deprecated : please use through createContext.');this.defaultContext.update(deltaFrames);}},{key:"beginUpdate",value:function beginUpdate(){console.warn('deprecated : please use through createContext.');this.defaultContext.beginUpdate();}},{key:"endUpdate",value:function endUpdate(){console.warn('deprecated : please use through createContext.');this.defaultContext.endUpdate();}},{key:"updateHandle",value:function updateHandle(handle,deltaFrames){console.warn('deprecated : please use through createContext.');this.defaultContext.updateHandle(handle,deltaFrames);} +},{key:"draw",value:function draw(){console.warn('deprecated : please use through createContext.');this.defaultContext.draw();}},{key:"beginDraw",value:function beginDraw(){console.warn('deprecated : please use through createContext.');this.defaultContext.beginDraw();}},{key:"endDraw",value:function endDraw(){console.warn('deprecated : please use through createContext.');this.defaultContext.endDraw();}},{key:"drawHandle",value:function drawHandle(handle){console.warn('deprecated : please use through createContext.');this.defaultContext.drawHandle(handle);} +},{key:"setProjectionMatrix",value:function setProjectionMatrix(matrixArray){console.warn('deprecated : please use through createContext.');this.defaultContext.setProjectionMatrix(matrixArray);} +},{key:"setProjectionPerspective",value:function setProjectionPerspective(fov,aspect,near,far){console.warn('deprecated : please use through createContext.');this.defaultContext.SetProjectionPerspective(fov,aspect,near,far);} +},{key:"setProjectionOrthographic",value:function setProjectionOrthographic(width,height,near,far){console.warn('deprecated : please use through createContext.');this.defaultContext.setProjectionOrthographic(width,height,near,far);} +},{key:"setCameraMatrix",value:function setCameraMatrix(matrixArray){console.warn('deprecated : please use through createContext.');this.defaultContext.setCameraMatrix(matrixArray);} +},{key:"setCameraLookAt",value:function setCameraLookAt(positionX,positionY,positionZ,targetX,targetY,targetZ,upvecX,upvecY,upvecZ){console.warn('deprecated : please use through createContext.');this.defaultContext.setCameraLookAt(positionX,positionY,positionZ,targetX,targetY,targetZ,upvecX,upvecY,upvecZ);} +},{key:"setCameraLookAtFromVector",value:function setCameraLookAtFromVector(position,target,upvec){console.warn('deprecated : please use through createContext.');this.defaultContext.setCameraLookAtFromVector(position,target,upvec);} +},{key:"loadEffect",value:function loadEffect(path){var scale=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1.0;var onload=arguments[2];var onerror=arguments[3];console.warn('deprecated : please use through createContext.');return this.defaultContext.loadEffect(path,scale,onload,onerror);} +},{key:"releaseEffect",value:function releaseEffect(effect){console.warn('deprecated : please use through createContext.');this.defaultContext.releaseEffect(effect);} +},{key:"play",value:function play(effect,x,y,z){console.warn('deprecated : please use through createContext.');return this.defaultContext.play(effect,x,y,z);} +},{key:"stopAll",value:function stopAll(){console.warn('deprecated : please use through createContext.');this.defaultContext.stopAll();} +},{key:"setResourceLoader",value:function setResourceLoader(loader){console.warn('deprecated : please use through createContext.');this.defaultContext.setResourceLoader(loader);} +},{key:"isVertexArrayObjectSupported",value:function isVertexArrayObjectSupported(){console.warn('deprecated : please use through createContext.');return this.defaultContext.isVertexArrayObjectSupported();}}]);return Effekseer;}();return new Effekseer();}();if(typeof exports!=='undefined'){exports=effekseer;} \ No newline at end of file diff --git a/app/src/main/assets/webgl-bootstrap.js b/app/src/main/assets/webgl-bootstrap.js new file mode 100644 index 0000000..02d7211 --- /dev/null +++ b/app/src/main/assets/webgl-bootstrap.js @@ -0,0 +1,203 @@ +// Runestone: WebGL/WebGL2 renderer bootstrap for RPG Maker MV/MZ (and HTML). +// +// Injected by `WebViewEngine` in `onPageFinished` after the page has loaded. +// Runs *after* PIXI is on the page (since it loads via the game's own +// index.html → rpg_managers.js / rmmz_managers.js). +// +// Responsibilities: +// 1. Probe the WebView for WebGL2 / WebGL1 / no-WebGL support. +// 2. If the target is "webgl2" and WebGL2 is available, force +// `PIXI.WebGLRenderer` to ask for a WebGL2 context (PIXI v5.2+). +// 3. Apply mobile-friendly PIXI renderer defaults (antialias off, round +// pixels, high-performance, resolution clamp). +// 4. Post a single `RunestoneBridge.bootDetailed(...)` message so the +// Kotlin side can log the actual renderer + version that won out. +// +// The Kotlin side injects this template with `__TARGET_RENDERER__` already +// substituted to one of "webgl2" | "webgl" | "canvas". +// +// All steps are wrapped in try/catch and degrade silently on failure. + +(function() { + 'use strict'; + + var target = '__TARGET_RENDERER__'; + + function probe() { + var c = document.createElement('canvas'); + var hasWebgl2 = false; + var hasWebgl1 = false; + var unmasked = null; + try { + var gl2 = c.getContext('webgl2'); + if (gl2) { + hasWebgl2 = true; + try { + var dbg = gl2.getExtension('WEBGL_debug_renderer_info'); + if (dbg) unmasked = gl2.getParameter(dbg.UNMASKED_RENDERER_WEBGL); + } catch (e) { /* ignore */ } + } + if (!hasWebgl2) { + var gl1 = c.getContext('webgl') || c.getContext('experimental-webgl'); + if (gl1) { + hasWebgl1 = true; + if (!unmasked) { + try { + var dbg1 = gl1.getExtension('WEBGL_debug_renderer_info'); + if (dbg1) unmasked = gl1.getParameter(dbg1.UNMASKED_RENDERER_WEBGL); + } catch (e) { /* ignore */ } + } + } + } + } catch (e) { + // No WebGL at all. + } + return { hasWebgl2: hasWebgl2, hasWebgl1: hasWebgl1, unmasked: unmasked }; + } + + function effectiveVersion(target, caps) { + if (target === 'canvas') return 'canvas'; + if (target === 'webgl2') { + return caps.hasWebgl2 ? 'webgl2' : (caps.hasWebgl1 ? 'webgl' : 'canvas'); + } + // target === 'webgl' + return caps.hasWebgl1 ? 'webgl' : (caps.hasWebgl2 ? 'webgl2' : 'canvas'); + } + + function pickPixiCtor(eff) { + if (typeof PIXI === 'undefined') return null; + // Order matters: PIXI v5 ships BOTH WebGLRenderer and WebGL2Renderer + // on the same page. We must check the v5-only WebGL2Renderer FIRST + // when the effective target is webgl2, otherwise we'd return the + // generic WebGLRenderer and report "webgl" even though the runtime + // would have created a WebGL2 context. + if (eff === 'webgl2') { + if (PIXI.WebGL2Renderer) return PIXI.WebGL2Renderer; + if (PIXI.WebGLRenderer) return PIXI.WebGLRenderer; + } else if (eff === 'webgl') { + if (PIXI.WebGLRenderer) return PIXI.WebGLRenderer; + } else { + // canvas + if (PIXI.CanvasRenderer) return PIXI.CanvasRenderer; + } + // Last-resort fallbacks. + if (PIXI.WebGLRenderer) return PIXI.WebGLRenderer; + if (PIXI.CanvasRenderer) return PIXI.CanvasRenderer; + return null; + } + + function effectiveRendererName(pixiCtor) { + if (!pixiCtor) return 'none'; + try { + if (pixiCtor === PIXI.WebGL2Renderer) return 'webgl2'; + if (pixiCtor === PIXI.WebGLRenderer) return 'webgl'; + if (pixiCtor === PIXI.CanvasRenderer) return 'canvas'; + } catch (e) { /* ignore */ } + return 'unknown'; + } + + // Map the chosen constructor to the actual GL context version it + // creates. A PIXI.WebGLRenderer always creates a WebGL1 context + // (PIXI v5 will not auto-upgrade to WebGL2 even if the WebView + // supports it, because autoDetectRenderer has to be called with + // specific options to ask for v2). A PIXI.WebGL2Renderer creates a + // WebGL2 context. Canvas is 0. + function actualVersion(eff, ctor) { + if (eff === 'canvas' || ctor === PIXI.CanvasRenderer) return 0; + if (ctor === PIXI.WebGL2Renderer) return 2; + if (ctor === PIXI.WebGLRenderer) return 1; + return 0; + } + + function patchPIXI(eff, opts) { + // Force autoDetectRenderer to choose the constructor we want. + if (typeof PIXI === 'undefined') return; + try { + if (PIXI.utils) { + if (eff === 'webgl2' && PIXI.WebGL2Renderer) { + // v5.2+: redirect autoDetect to WebGL2Renderer. + PIXI.utils._canUseWebGL2 = function() { return true; }; + } + } + if (PIXI.settings) { + if ('SCALE_MODE' in PIXI.settings) { + PIXI.settings.SCALE_MODE = 0; // NEAREST + } + } + if (PIXI.BaseTexture && PIXI.BaseTexture.defaultOptions) { + PIXI.BaseTexture.defaultOptions.scaleMode = 0; + // Only override resolution if the game hasn't set one. + // Forcing resolution=2 on a 3x-DPR phone has been observed + // to black-screen MZ games that compute texture coordinates + // in absolute pixel space. + if ( + opts && typeof opts.resolution === 'number' && + (typeof PIXI.BaseTexture.defaultOptions.resolution !== 'number' || + PIXI.BaseTexture.defaultOptions.resolution <= 0) + ) { + PIXI.BaseTexture.defaultOptions.resolution = opts.resolution; + } + } + } catch (e) { /* ignore */ } + } + + function postBoot(eff, caps, pixiCtor) { + try { + if (typeof window.RunestoneBridge === 'undefined') return; + // Legacy two-arg form so old logs stay readable. + if (typeof window.RunestoneBridge.boot === 'function') { + window.RunestoneBridge.boot(eff !== 'canvas', true); + } + // Richer form for the new path. webglVersion is the *actual* + // context version (2 for WebGL2Renderer, 1 for WebGLRenderer + // on a WebGL1-only WebView, 0 for canvas). + if (typeof window.RunestoneBridge.bootDetailed === 'function') { + window.RunestoneBridge.bootDetailed( + eff !== 'canvas', + true, + effectiveRendererName(pixiCtor), + actualVersion(eff, pixiCtor), + ); + } + + // Diagnostic: report cross-origin isolation state. If the + // local HTTP server is up with COOP/COEP, this should be + // true. If false, WASM shared-memory modules will fail to + // instantiate. + try { + console.log('[Runestone] iso=' + window.crossOriginIsolated + + ' sab=' + (typeof SharedArrayBuffer) + + ' wasm=' + (typeof WebAssembly) + + ' ist=' + (typeof WebAssembly?.instantiateStreaming)); + } catch (e) { /* ignore */ } + + // Diagnostic: fetch the page itself and dump the response + // headers it sees. Lets us see if COOP/COEP are reaching + // the page or being stripped. + try { + fetch(location.href, { method: 'HEAD' }).then(function(r) { + var h = {}; + r.headers.forEach(function(v, k) { h[k] = v; }); + console.log('[Runestone] HEAD: ' + JSON.stringify(h)); + }).catch(function(e) { + console.log('[Runestone] HEAD failed: ' + e); + }); + } catch (e) { /* ignore */ } + } catch (e) { /* ignore */ } + } + + try { + var caps = probe(); + var eff = effectiveVersion(target, caps); + var opts = (typeof window.__runestonePixiOpts === 'object' && window.__runestonePixiOpts) || null; + patchPIXI(eff, opts); + var ctor = pickPixiCtor(eff); + // Defer the post a tick so the game's own manager script can finish + // instantiating PIXI first (it overrides the prototype we just set). + setTimeout(function() { + postBoot(eff, caps, ctor); + }, 0); + } catch (e) { + // Never break the page over a tuning bootstrap. + } +})(); diff --git a/app/src/main/java/com/runestone/app/GameActivity.kt b/app/src/main/java/com/runestone/app/GameActivity.kt index 994fd13..b63788c 100644 --- a/app/src/main/java/com/runestone/app/GameActivity.kt +++ b/app/src/main/java/com/runestone/app/GameActivity.kt @@ -1,77 +1,43 @@ -/* - * Runestone - Multi-engine RPG Maker game launcher for Android - * Copyright (C) 2026 Gerson (KleirRampage45) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - package com.runestone.app import android.app.Activity -import android.app.AlertDialog -import android.content.Context import android.content.Intent -import android.graphics.Color -import android.graphics.Typeface -import android.graphics.drawable.GradientDrawable import android.os.Build import android.os.Bundle import android.os.SystemClock import android.util.Log -import android.view.Gravity import android.view.InputDevice import android.view.KeyEvent import android.view.MotionEvent import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.LinearLayout -import android.widget.TextView import android.widget.Toast import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat -import androidx.core.view.ViewCompat import com.runestone.app.data.ControllerShortcut -import com.runestone.app.data.EngineType import com.runestone.app.data.DisplayCutoutMode +import com.runestone.app.data.EngineType import com.runestone.app.data.GameConfigService import com.runestone.app.data.LayoutMode import com.runestone.app.data.RunnerSettings -import com.runestone.app.engine.EngineDetector -import com.runestone.app.engine.UnavailableEngine -import com.runestone.app.engine.WebViewEngine -import com.runestone.app.input.ControlButtonProfile -import com.runestone.app.input.ControlProfile -import com.runestone.app.input.ControlProfileScope -import com.runestone.app.input.ControllerMapper +import com.runestone.app.engine.EngineRegistry +import com.runestone.app.engine.NativeGameLauncher +import com.runestone.app.engine.WebglConfigBuilder import com.runestone.app.input.ControlProfileStore -import com.runestone.app.input.RunestoneKeyboardView -import com.runestone.app.input.TouchOverlayView +import com.runestone.app.input.InputDispatcher +import com.runestone.app.runtime.WebViewGameSession import com.runestone.app.workspace.WorkspaceManager -import org.json.JSONObject import java.io.File class GameActivity : Activity() { - private var webViewEngine: WebViewEngine? = null + private var webSession: WebViewGameSession? = null + private var nativeLauncher: NativeGameLauncher? = null + private var inputDispatcher: InputDispatcher? = null private var engineType: EngineType = EngineType.UNKNOWN private var gamePath: String = "" private var storageName: String? = null private var settings = RunnerSettings() - private var overlayView: TouchOverlayView? = null - private var overlayContainer: ViewGroup? = null - private var rootView: FrameLayout? = null - private var keyboardView: RunestoneKeyboardView? = null - private var controllerPresetId: String? = null - private val activeControllerAxisButtons = mutableSetOf() - private val pressedControllerKeys = mutableSetOf() - private var triggerHomeComboDown = false - private var runtimeActionsOverlay: View? = null - private var menuBtn: TextView? = null private var immersiveDecorConfigured = false private var lastImmersiveApplyAt = 0L private var lastAppliedCutoutMode: DisplayCutoutMode? = null @@ -97,6 +63,9 @@ class GameActivity : Activity() { private const val EXTRA_DISPLAY_CUTOUT_MODE = "display_cutout_mode" private const val EXTRA_USE_HTTP_SERVER = "use_http_server" private const val EXTRA_WEBGL = "webgl" + private const val EXTRA_USE_WEBGL2 = "use_webgl2" + private const val EXTRA_FORCE_CANVAS = "force_canvas" + private const val EXTRA_ENGINE_FAMILY = "engine_family" private const val EXTRA_DESKTOP_MODE = "desktop_mode" private const val EXTRA_ALLOW_EXTERNAL = "allow_external" private const val EXTRA_DIALOG_LOGS = "dialog_logs" @@ -109,6 +78,16 @@ class GameActivity : Activity() { private const val EXTRA_CONTROLLER_RUNTIME_MENU_SHORTCUT = "controller_runtime_menu_shortcut" private const val EXTRA_CONTROLLER_RESUME_SHORTCUT = "controller_resume_shortcut" + private fun engineTypeToFamily(type: EngineType): WebglConfigBuilder.EngineFamily = when (type) { + EngineType.MV -> WebglConfigBuilder.EngineFamily.MV + EngineType.MZ -> WebglConfigBuilder.EngineFamily.MZ + else -> WebglConfigBuilder.EngineFamily.HTML + } + + private fun parseEngineTypeOrUnknown(name: String?): EngineType = + if (name == null) EngineType.UNKNOWN + else runCatching { EngineType.valueOf(name) }.getOrDefault(EngineType.UNKNOWN) + fun start(activity: Activity, gamePath: String, engineType: String? = null, settings: RunnerSettings = RunnerSettings(), storageName: String? = null) { val intent = Intent(activity, GameActivity::class.java).apply { putExtra(EXTRA_GAME_PATH, gamePath) @@ -130,6 +109,9 @@ class GameActivity : Activity() { putExtra(EXTRA_DISPLAY_CUTOUT_MODE, settings.displayCutoutMode.name) putExtra(EXTRA_USE_HTTP_SERVER, settings.useHttpServer) putExtra(EXTRA_WEBGL, settings.webgl) + putExtra(EXTRA_USE_WEBGL2, settings.useWebgl2) + putExtra(EXTRA_FORCE_CANVAS, settings.forceCanvas) + putExtra(EXTRA_ENGINE_FAMILY, engineTypeToFamily(parseEngineTypeOrUnknown(engineType)).name) putExtra(EXTRA_DESKTOP_MODE, settings.desktopMode) putExtra(EXTRA_ALLOW_EXTERNAL, settings.allowExternalModules) putExtra(EXTRA_DIALOG_LOGS, settings.dialogLogs) @@ -146,936 +128,226 @@ class GameActivity : Activity() { } } + private val sessionCallbacks = object : WebViewGameSession.Callbacks { + override fun onGoHomePaused() = goHomePaused() + override fun onOpenSettings() = showRuntimeActions() + override fun onToggleKeyboard() = toggleKeyboard() + override fun onPersistInputSettings(layoutMode: LayoutMode, hideGamepad: Boolean) = persistRuntimeInputSettings() + override fun onPersistControlProfile(buttons: List) = persistRuntimeControlProfile(buttons) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) applyImmersiveMode() gamePath = intent.getStringExtra(EXTRA_GAME_PATH) ?: run { - Toast.makeText(this, "No game path provided", Toast.LENGTH_SHORT).show() - finish() - return + Toast.makeText(this, "No game path provided", Toast.LENGTH_SHORT).show(); finish(); return } storageName = intent.getStringExtra(EXTRA_STORAGE_NAME) - val gameDir = File(gamePath) if (!gameDir.exists() || !gameDir.isDirectory) { - Toast.makeText(this, "Game directory not found", Toast.LENGTH_SHORT).show() - finish() - return + Toast.makeText(this, "Game directory not found", Toast.LENGTH_SHORT).show(); finish(); return } val typeStr = intent.getStringExtra(EXTRA_ENGINE_TYPE) engineType = if (typeStr != null) { - try { EngineType.valueOf(typeStr) } catch (e: Exception) { EngineDetector.detect(gameDir) } - } else { - EngineDetector.detect(gameDir) - } + runCatching { EngineType.valueOf(typeStr) }.getOrDefault(detectEngine(gameDir)) + } else detectEngine(gameDir) - // Load settings from extras - val defaults = RunnerSettings() - settings = RunnerSettings( - layoutMode = runCatching { - LayoutMode.valueOf(intent.getStringExtra(EXTRA_LAYOUT_MODE) ?: LayoutMode.PORTRAIT_CONSOLE.name) - }.getOrDefault(LayoutMode.PORTRAIT_CONSOLE), - touchOpacity = intent.getFloatExtra(EXTRA_TOUCH_OPACITY, defaults.touchOpacity), - touchScale = intent.getFloatExtra(EXTRA_TOUCH_SCALE, defaults.touchScale), - hapticsEnabled = intent.getBooleanExtra(EXTRA_HAPTICS, defaults.hapticsEnabled), - hapticIntensity = intent.getFloatExtra(EXTRA_HAPTIC_INTENSITY, defaults.hapticIntensity), - showExtraButtons = intent.getBooleanExtra(EXTRA_SHOW_EXTRA_BTNS, defaults.showExtraButtons), - forceAudioExt = intent.getStringExtra(EXTRA_AUDIO_EXT) ?: defaults.forceAudioExt, - smoothScaling = intent.getBooleanExtra(EXTRA_SMOOTH_SCALING, defaults.smoothScaling), - integerScaling = intent.getBooleanExtra(EXTRA_INTEGER_SCALING, defaults.integerScaling), - textScale = intent.getFloatExtra(EXTRA_TEXT_SCALE, defaults.textScale), - hideVirtualGamepad = intent.getBooleanExtra(EXTRA_HIDE_GAMEPAD, defaults.hideVirtualGamepad), - diagonalMovement = intent.getBooleanExtra(EXTRA_DIAGONAL, defaults.diagonalMovement), - keepScreenOn = intent.getBooleanExtra(EXTRA_KEEP_SCREEN_ON, defaults.keepScreenOn), - displayCutoutMode = runCatching { - DisplayCutoutMode.valueOf(intent.getStringExtra(EXTRA_DISPLAY_CUTOUT_MODE) ?: defaults.displayCutoutMode.name) - }.getOrDefault(defaults.displayCutoutMode), - useHttpServer = intent.getBooleanExtra(EXTRA_USE_HTTP_SERVER, defaults.useHttpServer), - webgl = intent.getBooleanExtra(EXTRA_WEBGL, defaults.webgl), - desktopMode = intent.getBooleanExtra(EXTRA_DESKTOP_MODE, defaults.desktopMode), - allowExternalModules = intent.getBooleanExtra(EXTRA_ALLOW_EXTERNAL, defaults.allowExternalModules), - dialogLogs = intent.getBooleanExtra(EXTRA_DIALOG_LOGS, defaults.dialogLogs), - useRuby18 = intent.getBooleanExtra(EXTRA_USE_RUBY18, defaults.useRuby18), - vsync = intent.getBooleanExtra(EXTRA_VSYNC, defaults.vsync), - frameSkip = intent.getBooleanExtra(EXTRA_FRAME_SKIP, defaults.frameSkip), - shaders = intent.getBooleanExtra(EXTRA_SHADERS, defaults.shaders), - controllerHomeShortcut = controllerShortcut(EXTRA_CONTROLLER_HOME_SHORTCUT, defaults.controllerHomeShortcut), - controllerKeyboardShortcut = controllerShortcut(EXTRA_CONTROLLER_KEYBOARD_SHORTCUT, defaults.controllerKeyboardShortcut), - controllerRuntimeMenuShortcut = controllerShortcut(EXTRA_CONTROLLER_RUNTIME_MENU_SHORTCUT, defaults.controllerRuntimeMenuShortcut), - controllerResumeShortcut = controllerShortcut(EXTRA_CONTROLLER_RESUME_SHORTCUT, defaults.controllerResumeShortcut), - ) + migrateOverlayPrefs() + settings = loadSettingsFromExtras() if (settings.layoutMode == LayoutMode.GAMEPAD) { - settings = settings.copy( - layoutMode = LayoutMode.LANDSCAPE, - hideVirtualGamepad = true, - ) - } - - if (settings.keepScreenOn) { - window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + settings = settings.copy(layoutMode = LayoutMode.LANDSCAPE, hideVirtualGamepad = true) } + if (settings.keepScreenOn) window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) ControlProfileStore(this).ensureDefaults(engineType, storageName, settings) applyImmersiveMode() - // Force orientation based on layout mode - if ( - engineType == EngineType.RENPY || - settings.layoutMode == LayoutMode.LANDSCAPE - ) { - requestedOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE - } else { - requestedOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + requestedOrientation = when { + engineType == EngineType.RENPY -> android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + settings.layoutMode == LayoutMode.LANDSCAPE -> android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + else -> android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT } - // Debug: show received settings - android.util.Log.d("Runestone", "GameActivity: layoutMode=${settings.layoutMode}, path=$gamePath") - - if (engineType == EngineType.RENPY) { - requestedOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE - } + nativeLauncher = NativeGameLauncher(this, settings, engineType) when (engineType) { - // WebView engines (bundled) - EngineType.MV, EngineType.MZ, - EngineType.TYRANO, EngineType.CONSTRUCT, - EngineType.HTML, EngineType.TWINE, EngineType.VNMAKER, - EngineType.RUFFLE -> launchWebViewGame(gameDir) - - // Native engines (bundled) - EngineType.RGSS_XP, EngineType.RGSS_VX, EngineType.RGSS_VX_ACE -> launchRgssGame(gameDir) - EngineType.RGSS_2000, EngineType.RGSS_2003, EngineType.EASYRPG -> launchEasyRpgGame(gameDir) - - // Bundlable engines (native-first, fallback download) - EngineType.RENPY -> launchRenpyGame(gameDir) - EngineType.GODOT, EngineType.GODOT3, EngineType.GODOT4 -> launchGodotGame(gameDir) - EngineType.NSCRIPTER -> launchNScripterGame(gameDir) - - // Legacy / unsupported - EngineType.RM95, EngineType.DANTE98, - EngineType.WOLF, EngineType.KIRIKIRI, EngineType.UNITY, - EngineType.UNREAL, EngineType.GAMEMAKER, EngineType.AGS -> showLegacyDialog(engineType) - EngineType.ELECTRON -> showElectronDialog() + EngineType.MV, EngineType.MZ, EngineType.TYRANO, EngineType.CONSTRUCT, + EngineType.HTML, EngineType.TWINE, EngineType.VNMAKER, EngineType.RUFFLE, EngineType.UNKNOWN -> { - Toast.makeText(this, "Unknown engine, trying WebView", Toast.LENGTH_SHORT).show() - launchWebViewGame(gameDir) - } - } - } - - private fun launchWebViewGame(gameDir: File) { - val root = FrameLayout(this).apply { - id = View.generateViewId() - setBackgroundColor(Color.BLACK) - } - rootView = root - installSafeAreaInsets(root) - setContentView(root) - - val engine = WebViewEngine(this) - webViewEngine = engine - rebuildWebViewRuntimeLayout(engine) - engine.loadGame(gameDir.absolutePath, WebViewEngine.WebViewGameConfig( - title = gameDir.name, - addGamepad = false, - fakeGreenworks = true, - showFps = true, - forceAudioExt = settings.forceAudioExt, - smoothScaling = settings.smoothScaling, - integerScaling = settings.integerScaling, - textScale = settings.textScale, - webgl = settings.webgl, - desktopMode = settings.desktopMode, - allowExternalModules = settings.allowExternalModules, - dialogLogs = settings.dialogLogs, - )) - engine.isFocusable = true - engine.isFocusableInTouchMode = true - } - - private fun rebuildWebViewRuntimeLayout(engine: WebViewEngine) { - val root = rootView ?: return - (engine.parent as? ViewGroup)?.removeView(engine) - root.removeAllViews() - overlayView = null - overlayContainer = null - - val isLandscape = settings.layoutMode == LayoutMode.LANDSCAPE - val isPortraitConsole = settings.layoutMode == LayoutMode.PORTRAIT_CONSOLE - val hideOverlay = settings.hideVirtualGamepad - - if (isPortraitConsole && !hideOverlay) { - val splitLayout = LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - } - root.addView(splitLayout) - - val gameArea = FrameLayout(this).apply { - layoutParams = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - 0, - 0.52f, - ) - } - splitLayout.addView(gameArea) - - gameArea.addView(engine, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - )) - - val controlPanel = FrameLayout(this).apply { - layoutParams = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - 0, - 0.48f, - ) - setBackgroundColor(Color.rgb(10, 10, 12)) - } - splitLayout.addView(controlPanel) - - setupTouchOverlay(controlPanel, engine, 0f, 0f, 0f, 0f) - } else if (isPortraitConsole && hideOverlay) { - root.addView(engine, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - )) - } else { - if (isLandscape) { - // Landscape: 4:3 centered game viewport with side gutters for controls - val targetGameRatio = 4f / 3f - val screenW = root.width.coerceAtLeast(1) - val screenH = root.height.coerceAtLeast(1) - val gameH = screenH - val gameW = minOf(screenW, (gameH * targetGameRatio).toInt()) - val marginLeft = (screenW - gameW) / 2 - val marginRight = marginLeft - - root.addView(engine, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ).apply { - leftMargin = marginLeft - rightMargin = marginRight - }) - - if (!hideOverlay) { - val overlayContainer = FrameLayout(this).apply { - setBackgroundColor(Color.TRANSPARENT) - layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - } - root.addView(overlayContainer) - setupTouchOverlay(overlayContainer, engine, marginLeft.toFloat(), 0f, (screenW - marginRight).toFloat(), screenH.toFloat()) - } - } else { - root.addView(engine, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - )) - - if (!hideOverlay) { - val overlayContainer = FrameLayout(this).apply { - setBackgroundColor(Color.TRANSPARENT) - layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - } - root.addView(overlayContainer) - setupTouchOverlay(overlayContainer, engine, 0f, 0f, 0f, 0f) - } - } - } - - addWebRuntimeChrome(root) - } - - private fun addWebRuntimeChrome(root: FrameLayout) { - val homeBtn = TextView(this).apply { - text = "HOME" - textSize = 11f; gravity = Gravity.CENTER - setTextColor(Color.rgb(220, 210, 190)) - typeface = Typeface.DEFAULT_BOLD - background = GradientDrawable().apply { - setColor(Color.argb(200, 12, 11, 16)) - setStroke(dp(1), Color.argb(70, 160, 140, 110)) - cornerRadius = dp(16).toFloat() - } - setPadding(dp(12), dp(6), dp(12), dp(6)) - setOnClickListener { - goHomePaused() - } - val ph = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) - ph.gravity = Gravity.BOTTOM or Gravity.START - ph.bottomMargin = dp(8); ph.leftMargin = dp(8) - layoutParams = ph - } - root.addView(homeBtn) - - // Keyboard toggle - val kbBtn = TextView(this).apply { - text = "KBD" - textSize = 11f; gravity = Gravity.CENTER - setTextColor(Color.rgb(220, 210, 190)) - typeface = Typeface.DEFAULT_BOLD - background = GradientDrawable().apply { - setColor(Color.argb(200, 12, 11, 16)) - setStroke(dp(1), Color.argb(70, 160, 140, 110)) - cornerRadius = dp(16).toFloat() - } - setPadding(dp(12), dp(6), dp(12), dp(6)) - setOnClickListener { toggleKeyboard() } - val pk = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) - pk.gravity = Gravity.BOTTOM or Gravity.END - pk.bottomMargin = dp(8); pk.rightMargin = dp(8) - layoutParams = pk - } - root.addView(kbBtn) - - val menuBtn = TextView(this).apply { - text = "" - textSize = 0f - gravity = Gravity.CENTER - setTextColor(Color.rgb(220, 210, 190)) - typeface = Typeface.DEFAULT_BOLD - background = null - setPadding(dp(18), dp(10), dp(18), dp(10)) - setCompoundDrawablesWithIntrinsicBounds(0, com.runestone.app.R.drawable.ic_runtime_dropdown, 0, 0) - setOnClickListener { showRuntimeActions() } - layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT, - Gravity.TOP or Gravity.CENTER_HORIZONTAL, - ).apply { - topMargin = dp(8) - } - } - this@GameActivity.menuBtn = menuBtn - root.addView(menuBtn) - } - - private fun setupTouchOverlay(container: ViewGroup, engine: WebViewEngine, gameLeft: Float, gameTop: Float, gameRight: Float, gameBottom: Float) { - val overlay = TouchOverlayView(this).apply { - layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - alpha = settings.touchOpacity - scale = settings.touchScale - hapticsEnabled = settings.hapticsEnabled - hapticIntensity = settings.hapticIntensity - controllerPreset = runCatching { - TouchOverlayView.ControllerPreset.valueOf(settings.controllerPreset) - }.getOrDefault(TouchOverlayView.ControllerPreset.SIMPLIFIED) - diagonalMovement = settings.diagonalMovement - controlsOnly = (settings.layoutMode == LayoutMode.PORTRAIT_CONSOLE) - gameViewportLeft = gameLeft - gameViewportTop = gameTop - gameViewportRight = gameRight - gameViewportBottom = gameBottom - onToggleControls = { setVirtualControlsVisible(false) } - onRotateLayout = { rotateRuntimeLayout() } - onProfileLayoutChanged = { buttons -> - persistRuntimeControlProfile(buttons) - } - - onInput = inputHandler@{ zone, pressed -> - if (zone == TouchOverlayView.Zone.SETTINGS && pressed) { - openSettings() - return@inputHandler - } - if (zone == TouchOverlayView.Zone.HOME && pressed) { - goHomePaused() - return@inputHandler - } - val keyCode = zoneToKeyCode(zone) - val action = if (pressed) KeyEvent.ACTION_DOWN else KeyEvent.ACTION_UP - engine.dispatchKeyEvent(KeyEvent(action, keyCode)) - - val js = when { - pressed && zone == TouchOverlayView.Zone.DPAD_UP -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('up');" - pressed && zone == TouchOverlayView.Zone.DPAD_DOWN -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('down');" - pressed && zone == TouchOverlayView.Zone.DPAD_LEFT -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('left');" - pressed && zone == TouchOverlayView.Zone.DPAD_RIGHT -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('right');" - pressed && zone == TouchOverlayView.Zone.BTN_CONFIRM -> "if(TouchInput&&TouchInput._onOk)TouchInput._onOk();" - pressed && zone == TouchOverlayView.Zone.BTN_BACK -> "if(TouchInput&&TouchInput._onCancel)TouchInput._onCancel();" - pressed && zone == TouchOverlayView.Zone.BTN_DASH -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:16});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_A -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:65});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_S -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:83});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_D -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:68});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_Z -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:90});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_X -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:88});" - pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_C -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:67});" - pressed && zone == TouchOverlayView.Zone.BTN_CTRL -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:17});" - pressed && zone == TouchOverlayView.Zone.BTN_ALT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:18});" - pressed && zone == TouchOverlayView.Zone.BTN_SHIFT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:16});" - pressed && zone == TouchOverlayView.Zone.SELECT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:27});" - pressed && zone == TouchOverlayView.Zone.START -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:13});" - pressed && zone == TouchOverlayView.Zone.L1 -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:33});" - pressed && zone == TouchOverlayView.Zone.R1 -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:34});" - else -> "" - } - if (js.isNotEmpty()) { - engine.evaluateJavascript("(function(){try{$js}catch(e){}})();", null) - } - } - } - this@GameActivity.overlayView = overlay - this@GameActivity.overlayContainer = container - container.addView(overlay) - } - - private fun openSettings() { - showRuntimeActions() + if (engineType == EngineType.UNKNOWN) Toast.makeText(this, "Unknown engine, trying WebView", Toast.LENGTH_SHORT).show() + launchWebView(gameDir) + } + EngineType.RGSS_XP, EngineType.RGSS_VX, EngineType.RGSS_VX_ACE -> nativeLauncher!!.launchRgssGame(gameDir) + EngineType.RGSS_2000, EngineType.RGSS_2003, EngineType.EASYRPG -> nativeLauncher!!.launchEasyRpgGame(gameDir) + EngineType.RENPY -> nativeLauncher!!.launchRenpyGame(gameDir) + EngineType.GODOT, EngineType.GODOT3, EngineType.GODOT4 -> nativeLauncher!!.launchGodotGame(gameDir) + EngineType.NSCRIPTER -> nativeLauncher!!.launchNScripterGame(gameDir) + EngineType.RM95, EngineType.DANTE98, EngineType.WOLF, EngineType.KIRIKIRI, + EngineType.UNITY, EngineType.UNREAL, EngineType.GAMEMAKER, EngineType.AGS -> + nativeLauncher!!.showLegacyDialog(engineType) + EngineType.ELECTRON -> nativeLauncher!!.showElectronDialog() + } + } + + private fun launchWebView(gameDir: File) { + val session = WebViewGameSession(this, gameDir, settings, engineType, sessionCallbacks) + webSession = session + inputDispatcher = InputDispatcher(session.webViewEngine) + session.launch() + } + + private fun loadSettingsFromExtras(): RunnerSettings { + val d = RunnerSettings() + return RunnerSettings( + layoutMode = runCatching { LayoutMode.valueOf(intent.getStringExtra(EXTRA_LAYOUT_MODE) ?: LayoutMode.PORTRAIT_CONSOLE.name) }.getOrDefault(LayoutMode.PORTRAIT_CONSOLE), + touchOpacity = intent.getFloatExtra(EXTRA_TOUCH_OPACITY, d.touchOpacity), + touchScale = intent.getFloatExtra(EXTRA_TOUCH_SCALE, d.touchScale), + hapticsEnabled = intent.getBooleanExtra(EXTRA_HAPTICS, d.hapticsEnabled), + hapticIntensity = intent.getFloatExtra(EXTRA_HAPTIC_INTENSITY, d.hapticIntensity), + showExtraButtons = intent.getBooleanExtra(EXTRA_SHOW_EXTRA_BTNS, d.showExtraButtons), + forceAudioExt = intent.getStringExtra(EXTRA_AUDIO_EXT) ?: d.forceAudioExt, + smoothScaling = intent.getBooleanExtra(EXTRA_SMOOTH_SCALING, d.smoothScaling), + integerScaling = intent.getBooleanExtra(EXTRA_INTEGER_SCALING, d.integerScaling), + textScale = intent.getFloatExtra(EXTRA_TEXT_SCALE, d.textScale), + hideVirtualGamepad = intent.getBooleanExtra(EXTRA_HIDE_GAMEPAD, d.hideVirtualGamepad), + diagonalMovement = intent.getBooleanExtra(EXTRA_DIAGONAL, d.diagonalMovement), + keepScreenOn = intent.getBooleanExtra(EXTRA_KEEP_SCREEN_ON, d.keepScreenOn), + displayCutoutMode = runCatching { DisplayCutoutMode.valueOf(intent.getStringExtra(EXTRA_DISPLAY_CUTOUT_MODE) ?: d.displayCutoutMode.name) }.getOrDefault(d.displayCutoutMode), + useHttpServer = intent.getBooleanExtra(EXTRA_USE_HTTP_SERVER, d.useHttpServer), + webgl = intent.getBooleanExtra(EXTRA_WEBGL, d.webgl), + useWebgl2 = intent.getBooleanExtra(EXTRA_USE_WEBGL2, d.useWebgl2), + forceCanvas = intent.getBooleanExtra(EXTRA_FORCE_CANVAS, d.forceCanvas), + desktopMode = intent.getBooleanExtra(EXTRA_DESKTOP_MODE, d.desktopMode), + allowExternalModules = intent.getBooleanExtra(EXTRA_ALLOW_EXTERNAL, d.allowExternalModules), + dialogLogs = intent.getBooleanExtra(EXTRA_DIALOG_LOGS, d.dialogLogs), + useRuby18 = intent.getBooleanExtra(EXTRA_USE_RUBY18, d.useRuby18), + vsync = intent.getBooleanExtra(EXTRA_VSYNC, d.vsync), + frameSkip = intent.getBooleanExtra(EXTRA_FRAME_SKIP, d.frameSkip), + shaders = intent.getBooleanExtra(EXTRA_SHADERS, d.shaders), + controllerHomeShortcut = shortcut(EXTRA_CONTROLLER_HOME_SHORTCUT, d.controllerHomeShortcut), + controllerKeyboardShortcut = shortcut(EXTRA_CONTROLLER_KEYBOARD_SHORTCUT, d.controllerKeyboardShortcut), + controllerRuntimeMenuShortcut = shortcut(EXTRA_CONTROLLER_RUNTIME_MENU_SHORTCUT, d.controllerRuntimeMenuShortcut), + controllerResumeShortcut = shortcut(EXTRA_CONTROLLER_RESUME_SHORTCUT, d.controllerResumeShortcut), + ) } - private fun showRuntimeActions() { - val root = rootView ?: return - runtimeActionsOverlay?.let { - root.removeView(it) - runtimeActionsOverlay = null - // Rotate arrow back to original - menuBtn?.rotation = 0f - return - } - // Rotate arrow 180 degrees - menuBtn?.rotation = 180f + private fun shortcut(extra: String, default: ControllerShortcut): ControllerShortcut = + runCatching { ControllerShortcut.valueOf(intent.getStringExtra(extra) ?: default.name) }.getOrDefault(default) - val overlay = FrameLayout(this).apply { - setBackgroundColor(Color.argb(95, 0, 0, 0)) - isClickable = true - isFocusable = true - setOnClickListener { dismissRuntimeActions() } - setOnKeyListener { _, keyCode, event -> - if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BUTTON_B) { - dismissRuntimeActions() - true - } else { - false - } - } - } - val panel = LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - setPadding(dp(10), dp(8), dp(10), dp(10)) - background = GradientDrawable().apply { - setColor(Color.argb(222, 12, 11, 16)) - setStroke(dp(1), Color.argb(85, 200, 180, 140)) - cornerRadius = dp(12).toFloat() - } - isClickable = true - } - val topRow = LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - gravity = Gravity.CENTER - } - topRow.addView(runtimeActionButton("RESUME", com.runestone.app.R.drawable.ic_runtime_resume) { dismissRuntimeActions() }, - LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { rightMargin = dp(6) }) - topRow.addView(runtimeActionButton("HOME", com.runestone.app.R.drawable.ic_runtime_home) { - dismissRuntimeActions() - goHomePaused() - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6) }) - panel.addView(topRow) - - panel.addView(runtimeToggleButton(!settings.hideVirtualGamepad) { - setVirtualControlsVisible(settings.hideVirtualGamepad) - dismissRuntimeActions() - }) - - // Controller mode toggle row - val modeRow = LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - gravity = Gravity.CENTER - } - val isFull = overlayView?.controllerPreset == TouchOverlayView.ControllerPreset.FULL - modeRow.addView(runtimeActionButton( - if (isFull) "BASIC" else "FULL", - com.runestone.app.R.drawable.ic_runtime_controls, - ) { - dismissRuntimeActions() - toggleControllerPreset() - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { - rightMargin = dp(6) + private fun goHomePaused() { + getSharedPreferences("runestone", MODE_PRIVATE).edit() + .putBoolean("game_minimized", true).putString("paused_game", gamePath).apply() + startActivity(Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT or Intent.FLAG_ACTIVITY_SINGLE_TOP) }) - modeRow.addView(runtimeActionButton( - if (settings.layoutMode == LayoutMode.LANDSCAPE) "PORTRAIT" else "LANDSCAPE", - com.runestone.app.R.drawable.ic_runtime_rotate, - ) { - dismissRuntimeActions() - rotateRuntimeLayout() - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6); rightMargin = dp(6) }) - modeRow.addView(runtimeActionButton("EDIT", com.runestone.app.R.drawable.ic_runtime_edit) { - dismissRuntimeActions() - openControlLayoutEditor() - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6); rightMargin = dp(6) }) - modeRow.addView(runtimeActionButton("KEYBOARD", com.runestone.app.R.drawable.ic_runtime_keyboard) { - dismissRuntimeActions() - toggleKeyboard() - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6) }) - panel.addView(modeRow) - - overlay.addView(panel, FrameLayout.LayoutParams( - (resources.displayMetrics.widthPixels * 0.72f).toInt().coerceIn(dp(260), dp(480)), - ViewGroup.LayoutParams.WRAP_CONTENT, - Gravity.CENTER, - )) - root.addView(overlay, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - )) - runtimeActionsOverlay = overlay - overlay.requestFocus() - } - - private fun toggleControllerPreset() { - val overlay = overlayView - if (overlay == null) return - val next = if (overlay.controllerPreset == TouchOverlayView.ControllerPreset.SIMPLIFIED) - TouchOverlayView.ControllerPreset.FULL - else - TouchOverlayView.ControllerPreset.SIMPLIFIED - overlay.setPreset(next) - settings = settings.copy( - controllerPreset = next.name, - showExtraButtons = (next == TouchOverlayView.ControllerPreset.FULL) - ) - persistRuntimeInputSettings() - Toast.makeText(this, "Controller: ${next.name}", Toast.LENGTH_SHORT).show() } - private fun setVirtualControlsVisible(visible: Boolean) { - settings = settings.copy(hideVirtualGamepad = !visible) - webViewEngine?.let { engine -> - rebuildWebViewRuntimeLayout(engine) - persistRuntimeInputSettings() - Toast.makeText(this, if (visible) "Controls shown" else "Controls hidden", Toast.LENGTH_SHORT).show() - return - } - persistRuntimeInputSettings() - Toast.makeText(this, "Controls will update next launch", Toast.LENGTH_SHORT).show() - } + private fun showRuntimeActions() { webSession?.showRuntimeActions() } - private fun rotateRuntimeLayout() { - val next = if (settings.layoutMode == LayoutMode.LANDSCAPE) { - LayoutMode.PORTRAIT_CONSOLE - } else { - LayoutMode.LANDSCAPE - } - settings = settings.copy(layoutMode = next) - requestedOrientation = if (next == LayoutMode.LANDSCAPE) { - android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE - } else { - android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT - } - webViewEngine?.let { engine -> - rootView?.post { rebuildWebViewRuntimeLayout(engine) } - } - persistRuntimeInputSettings() - val note = if (webViewEngine != null) { - "Layout rotated" - } else { - "Saved. Native runtime applies it next launch." - } - Toast.makeText(this, note, Toast.LENGTH_SHORT).show() - } - - private fun openControlLayoutEditor() { - val overlay = overlayView - if (overlay != null) { - overlay.openLayoutEditor() - return - } - if (webViewEngine != null) { - setVirtualControlsVisible(true) - rootView?.post { - overlayView?.openLayoutEditor() - } - } else { - Toast.makeText(this, "Control editor opens in WebView sessions for now", Toast.LENGTH_SHORT).show() - } - } + private fun toggleKeyboard() { webSession?.toggleKeyboard() } private fun persistRuntimeInputSettings() { val name = storageName ?: return runCatching { val service = GameConfigService(this, WorkspaceManager(this)) val current = service.loadPerGame(name) - service.savePerGame( - name, - current.copy( - input = current.input.copy( - layoutMode = settings.layoutMode.name.lowercase(), - hideVirtualGamepad = settings.hideVirtualGamepad, - ), - ), - ) - }.onFailure { - Log.w(TAG, "Failed to persist runtime input settings", it) - } + service.savePerGame(name, current.copy(input = current.input.copy( + layoutMode = settings.layoutMode.name.lowercase(), hideVirtualGamepad = settings.hideVirtualGamepad, + ))) + }.onFailure { Log.w(TAG, "Failed to persist runtime input settings", it) } } - private fun persistRuntimeControlProfile(buttons: List) { + private fun persistRuntimeControlProfile(buttons: List) { if (buttons.isEmpty()) return runCatching { - val store = ControlProfileStore(this) + val store = com.runestone.app.input.ControlProfileStore(this) val existing = store.loadEffective(engineType, storageName, settings) val editedLayout = buttons.first().layout - val mergedButtons = existing.buttons.filterNot { it.layout == editedLayout } + buttons - val name = storageName - val scope = if (name != null) ControlProfileScope.GAME else ControlProfileScope.ENGINE - store.save( - ControlProfile( - id = if (name != null) "custom-$name" else "custom-${engineType.name.lowercase()}", - name = "Custom Layout", - scope = scope, - engineType = engineType, - storageName = name, - buttons = mergedButtons, - ), - ) + val merged = existing.buttons.filterNot { it.layout == editedLayout } + buttons + val scope = if (storageName != null) com.runestone.app.input.ControlProfileScope.GAME else com.runestone.app.input.ControlProfileScope.ENGINE + store.save(com.runestone.app.input.ControlProfile( + id = if (storageName != null) "custom-$storageName" else "custom-${engineType.name.lowercase()}", + name = "Custom Layout", scope = scope, engineType = engineType, storageName = storageName, buttons = merged, + )) Toast.makeText(this, "Control layout saved", Toast.LENGTH_SHORT).show() - }.onFailure { - Log.w(TAG, "Failed to persist control profile", it) - } - } - - private fun goHomePaused() { - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .putBoolean("game_minimized", true) - .putString("paused_game", gamePath) - .apply() - val intent = Intent(this@GameActivity, MainActivity::class.java).apply { - addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT or Intent.FLAG_ACTIVITY_SINGLE_TOP) - } - startActivity(intent) + }.onFailure { Log.w(TAG, "Failed to persist control profile", it) } } override fun dispatchKeyEvent(event: KeyEvent): Boolean { - if (keyboardVisible && event.isControllerEvent()) { - keyboardView?.handleControllerKey(event)?.let { handled -> - if (handled) return true - } - } - if (webViewEngine != null && event.isControllerEvent()) { - if (handleControllerCombo(event)) return true - val mapped = mapControllerKey(event) - if (mapped != null) { - dispatchMappedGameKey(mapped, event.action) - return true - } - } - - // Forward keyboard events to the game's JS input system - if (event.action == KeyEvent.ACTION_DOWN || event.action == KeyEvent.ACTION_UP) { - val engine = webViewEngine - if (engine != null) { - val isDown = event.action == KeyEvent.ACTION_DOWN - val keyChar = event.unicodeChar - val keyCode = event.keyCode - - // Forward as Android key event for WebView - engine.dispatchKeyEvent(event) - - // Also inject into RPG Maker's Input system via JS - val jsAction = if (isDown) "_onKeyDown" else "_onKeyUp" - val js = """(function(){ - try { - if (window.Input && window.Input.$jsAction) - window.Input.$jsAction({which:$keyCode, keyCode:$keyCode}); - if (window.TouchInput && window.TouchInput.$jsAction) - window.TouchInput.$jsAction({which:$keyCode, keyCode:$keyCode}); - // Also forward character-based keys for chat mods - if ($isDown && $keyChar > 31) { - var c = String.fromCharCode($keyChar).toLowerCase(); - window.dispatchEvent(new CustomEvent('rune_key', {detail:{key:c,code:$keyCode}})); - } - } catch(e){} - })();""".trimIndent() - engine.evaluateJavascript(js, null) + if (webSession?.keyboardVisible == true && InputDispatcher.isControllerEvent(event)) { + webSession?.keyboardView?.handleControllerKey(event)?.let { if (it) return true } + } + val dispatcher = inputDispatcher + if (dispatcher != null) { + if (dispatcher.dispatchKeyEvent(event)) return true + if (InputDispatcher.isControllerEvent(event) && event.action == KeyEvent.ACTION_DOWN && event.repeatCount == 0) { + when { + dispatcher.shortcutPressed(settings.controllerHomeShortcut, settings.controllerHomeShortcut) -> { goHomePaused(); return true } + dispatcher.shortcutPressed(settings.controllerKeyboardShortcut, settings.controllerKeyboardShortcut) -> { toggleKeyboard(); return true } + dispatcher.shortcutPressed(settings.controllerRuntimeMenuShortcut, settings.controllerRuntimeMenuShortcut) -> { showRuntimeActions(); return true } + } } } return super.dispatchKeyEvent(event) } - private fun handleControllerCombo(event: KeyEvent): Boolean { - if (event.action == KeyEvent.ACTION_UP) { - pressedControllerKeys.remove(event.keyCode) - return false - } - if (event.action != KeyEvent.ACTION_DOWN) return false - pressedControllerKeys.add(event.keyCode) - if (event.repeatCount > 0) return false - - return when { - shortcutPressed(settings.controllerHomeShortcut) -> { - goHomePaused() - true - } - shortcutPressed(settings.controllerKeyboardShortcut) -> { - toggleKeyboard() - true - } - shortcutPressed(settings.controllerRuntimeMenuShortcut) -> { - openSettings() - true - } - else -> false - } - } - override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean { - if (webViewEngine != null && event.isControllerEvent()) { - if (handleTriggerHomeCombo(event)) return true - if (keyboardVisible) return true - val preset = controllerPresetFor(event.device) - val activeButtons = ControllerMapper.mapAxisToButtons(event, preset).toSet() - val released = activeControllerAxisButtons - activeButtons - val pressed = activeButtons - activeControllerAxisButtons - - released.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_UP) } - pressed.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_DOWN) } - - activeControllerAxisButtons.clear() - activeControllerAxisButtons.addAll(activeButtons) - if (pressed.isNotEmpty() || released.isNotEmpty()) return true + val dispatcher = inputDispatcher + if (dispatcher != null && InputDispatcher.isControllerMotionEvent(event)) { + if (webSession?.keyboardVisible == true) return true + if (settings.controllerHomeShortcut == ControllerShortcut.L2_R2) { + if (maxOf(event.getAxisValue(MotionEvent.AXIS_LTRIGGER), event.getAxisValue(MotionEvent.AXIS_BRAKE)) > 0.55f && + maxOf(event.getAxisValue(MotionEvent.AXIS_RTRIGGER), event.getAxisValue(MotionEvent.AXIS_GAS)) > 0.55f) { + goHomePaused(); return true + } + } + return dispatcher.dispatchGenericMotionEvent(event) } return super.dispatchGenericMotionEvent(event) } - private fun mapControllerKey(event: KeyEvent): Int? { - if (event.action != KeyEvent.ACTION_DOWN && event.action != KeyEvent.ACTION_UP) return null - if (event.repeatCount > 0 && event.action == KeyEvent.ACTION_DOWN) return null - - val directDpad = when (event.keyCode) { - KeyEvent.KEYCODE_DPAD_UP, - KeyEvent.KEYCODE_DPAD_DOWN, - KeyEvent.KEYCODE_DPAD_LEFT, - KeyEvent.KEYCODE_DPAD_RIGHT -> event.keyCode - else -> null + override fun onBackPressed() { + if (webSession?.handleBack() != true) { + getSharedPreferences("runestone", MODE_PRIVATE).edit().remove("paused_game").remove("game_minimized").apply() + super.onBackPressed() } - if (directDpad != null) return directDpad - - val preset = controllerPresetFor(event.device) - val button = ControllerMapper.mapKeyToButton(event, preset) ?: return null - return ControllerMapper.toKeyCode(button) - } - - private fun dispatchMappedGameButton(button: ControllerMapper.GameButton, action: Int) { - dispatchMappedGameKey(ControllerMapper.toKeyCode(button), action) - } - - private fun dispatchMappedGameKey(keyCode: Int, action: Int) { - if (keyCode == KeyEvent.KEYCODE_UNKNOWN) return - val engine = webViewEngine ?: return - val keyEvent = KeyEvent(action, keyCode) - engine.dispatchKeyEvent(keyEvent) - val jsAction = if (action == KeyEvent.ACTION_DOWN) "_onKeyDown" else "_onKeyUp" - val js = """(function(){ - try { - var ev = {which:$keyCode, keyCode:$keyCode}; - if (window.Input && window.Input.$jsAction) window.Input.$jsAction(ev); - if (window.TouchInput && window.TouchInput.$jsAction) window.TouchInput.$jsAction(ev); - window.dispatchEvent(new KeyboardEvent('${if (action == KeyEvent.ACTION_DOWN) "keydown" else "keyup"}', { - keyCode:$keyCode, - which:$keyCode, - bubbles:true - })); - } catch(e) {} - })();""".trimIndent() - engine.evaluateJavascript(js, null) - } - - private fun controllerPresetFor(device: android.view.InputDevice?): ControllerMapper.ControllerPreset { - if (device == null) return ControllerMapper.getPreset("generic") - val current = controllerPresetId - if (current != null) return ControllerMapper.getPreset(current) - val detected = ControllerMapper.detectPreset(device) - controllerPresetId = detected - return ControllerMapper.getPreset(detected) } - private fun android.view.InputEvent.isControllerEvent(): Boolean { - val controllerSources = InputDevice.SOURCE_GAMEPAD or InputDevice.SOURCE_JOYSTICK or InputDevice.SOURCE_DPAD - return source and controllerSources != 0 - } + override fun onPause() { super.onPause(); inputDispatcher?.releaseControllerAxes(); webSession?.onPause() } - private var keyboardVisible = false - - private fun toggleKeyboard() { - val root = rootView ?: return - val existing = keyboardView - if (existing != null) { - root.removeView(existing) - keyboardView = null - keyboardVisible = false - return - } - - keyboardView = RunestoneKeyboardView.attachTo(root).apply { - onText = { text -> sendKeyboardText(text) } - onKeyCode = { keyCode -> sendKeyboardKey(keyCode) } - onHide = { toggleKeyboard() } - } - keyboardVisible = true - } - - private fun dismissRuntimeActions() { - val overlay = runtimeActionsOverlay ?: return - rootView?.removeView(overlay) - runtimeActionsOverlay = null - menuBtn?.rotation = 0f - } - - private fun runtimeActionButton(label: String, iconRes: Int, action: () -> Unit): TextView = - TextView(this).apply { - text = label - setTextColor(Color.rgb(230, 220, 200)) - textSize = 11f - typeface = Typeface.DEFAULT_BOLD - gravity = Gravity.CENTER - isClickable = true - isFocusable = true - setPadding(dp(8), dp(8), dp(8), dp(8)) - setCompoundDrawablesWithIntrinsicBounds(0, iconRes, 0, 0) - compoundDrawablePadding = dp(4) - background = GradientDrawable().apply { - setColor(Color.argb(70, 200, 170, 130)) - setStroke(dp(1), Color.argb(85, 210, 185, 145)) - cornerRadius = dp(10).toFloat() - } - setOnClickListener { action() } - } - - private fun runtimeToggleButton(enabled: Boolean, action: () -> Unit): TextView = - TextView(this).apply { - text = if (enabled) "CONTROLS ON" else "CONTROLS OFF" - setTextColor(if (enabled) Color.rgb(245, 228, 190) else Color.rgb(170, 160, 145)) - textSize = 12f - typeface = Typeface.DEFAULT_BOLD - gravity = Gravity.CENTER - isClickable = true - isFocusable = true - setPadding(dp(12), dp(9), dp(12), dp(9)) - setCompoundDrawablesWithIntrinsicBounds(0, com.runestone.app.R.drawable.ic_runtime_controls, 0, 0) - compoundDrawablePadding = dp(4) - background = GradientDrawable().apply { - setColor(if (enabled) Color.argb(105, 120, 95, 62) else Color.argb(55, 80, 75, 70)) - setStroke(dp(1), if (enabled) Color.argb(120, 225, 195, 140) else Color.argb(70, 160, 150, 130)) - cornerRadius = dp(11).toFloat() - } - setOnClickListener { action() } - layoutParams = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT, - ).apply { - setMargins(0, dp(10), 0, dp(10)) - } - } - - private fun sendKeyboardText(text: String) { - val engine = webViewEngine ?: return - text.forEach { char -> - val keyCode = keyCodeForChar(char) - val js = """(function(){ - try { - var key = ${JSONObject.quote(char.toString())}; - var code = $keyCode; - window.dispatchEvent(new KeyboardEvent('keydown', {key:key, keyCode:code, which:code, bubbles:true})); - if (window.Input && window.Input._onKeyDown) window.Input._onKeyDown({key:key, keyCode:code, which:code}); - window.dispatchEvent(new KeyboardEvent('keypress', {key:key, keyCode:code, which:code, bubbles:true})); - window.dispatchEvent(new InputEvent('input', {data:key, inputType:'insertText', bubbles:true})); - window.dispatchEvent(new KeyboardEvent('keyup', {key:key, keyCode:code, which:code, bubbles:true})); - if (window.Input && window.Input._onKeyUp) window.Input._onKeyUp({key:key, keyCode:code, which:code}); - } catch(e) {} - })();""".trimIndent() - if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { - engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode)) - engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) - } - engine.evaluateJavascript(js, null) + override fun onResume() { + super.onResume(); applyImmersiveMode() + val killPath = getSharedPreferences("runestone", MODE_PRIVATE).getString("kill_game", null) + if (killPath != null && gamePath != null && (killPath == gamePath || killPath == gamePath.substringAfterLast("/"))) { + getSharedPreferences("runestone", MODE_PRIVATE).edit().remove("kill_game").apply() + Log.i(TAG, "kill_game signal received for $killPath — finishing"); finish(); return } + webSession?.onResume() } - private fun sendKeyboardKey(keyCode: Int) { - val engine = webViewEngine ?: return - engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode)) - engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) - val key = when (keyCode) { - KeyEvent.KEYCODE_DEL -> "Backspace" - KeyEvent.KEYCODE_ENTER -> "Enter" - else -> "" - } - val inputType = if (keyCode == KeyEvent.KEYCODE_DEL) "deleteContentBackward" else "insertLineBreak" - val js = """(function(){ - try { - var key = ${JSONObject.quote(key)}; - var code = $keyCode; - window.dispatchEvent(new KeyboardEvent('keydown', {key:key, keyCode:code, which:code, bubbles:true})); - if (window.Input && window.Input._onKeyDown) window.Input._onKeyDown({key:key, keyCode:code, which:code}); - window.dispatchEvent(new InputEvent('input', {data:null, inputType:'$inputType', bubbles:true})); - window.dispatchEvent(new KeyboardEvent('keyup', {key:key, keyCode:code, which:code, bubbles:true})); - if (window.Input && window.Input._onKeyUp) window.Input._onKeyUp({key:key, keyCode:code, which:code}); - } catch(e) {} - })();""".trimIndent() - engine.evaluateJavascript(js, null) - } + override fun onWindowFocusChanged(hasFocus: Boolean) { super.onWindowFocusChanged(hasFocus); if (hasFocus) applyImmersiveMode() } - private fun dp(value: Int): Int = (value * resources.displayMetrics.density).toInt() + override fun onDestroy() { super.onDestroy(); webSession?.onDestroy(); webSession = null } - private fun controllerShortcut(extra: String, default: ControllerShortcut): ControllerShortcut = + private fun migrateOverlayPrefs() { + val prefs = getSharedPreferences("runestone", MODE_PRIVATE) + val version = prefs.getInt("overlay_layout_version", 0) + if (version >= 3) return + prefs.edit().putInt("overlay_layout_version", 3).apply { + if (prefs.getBoolean("hide_virtual_gamepad", false)) putBoolean("hide_virtual_gamepad", false) + prefs.all.keys.filter { it.startsWith("landscape_SIMPLIFIED_") || it.startsWith("portrait_SIMPLIFIED_") }.forEach { remove(it) } + }.apply() runCatching { - ControllerShortcut.valueOf(intent.getStringExtra(extra) ?: default.name) - }.getOrDefault(default) - - private fun shortcutPressed(shortcut: ControllerShortcut): Boolean = when (shortcut) { - ControllerShortcut.OFF -> false - ControllerShortcut.L2_R2 -> - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L2) && - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R2) - ControllerShortcut.L1_R1 -> - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L1) && - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R1) - ControllerShortcut.START_SELECT -> - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) && - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_SELECT) - ControllerShortcut.L2_START -> - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L2) && - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) - ControllerShortcut.R2_START -> - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R2) && - pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) - } - - private fun handleTriggerHomeCombo(event: MotionEvent): Boolean { - if (settings.controllerHomeShortcut != ControllerShortcut.L2_R2) { - triggerHomeComboDown = false - return false - } - val left = maxOf( - event.getAxisValue(MotionEvent.AXIS_LTRIGGER), - event.getAxisValue(MotionEvent.AXIS_BRAKE), - ) - val right = maxOf( - event.getAxisValue(MotionEvent.AXIS_RTRIGGER), - event.getAxisValue(MotionEvent.AXIS_GAS), - ) - val bothPressed = left > 0.55f && right > 0.55f - if (!bothPressed) { - triggerHomeComboDown = false - return false + val lp = getSharedPreferences("controller-layout-v2", MODE_PRIVATE).edit() + getSharedPreferences("controller-layout-v2", MODE_PRIVATE).all.forEach { (k, v) -> + if (v is Float) when { + k.endsWith("_x") || k.endsWith("_y") -> if (v < 0f || v > 1f) lp.remove(k) + k.endsWith("_size") -> if (v < 0.02f || v > 0.5f) lp.remove(k) + } + } + lp.apply() } - if (triggerHomeComboDown) return true - triggerHomeComboDown = true - goHomePaused() - return true } private fun applyImmersiveMode(force: Boolean = false) { @@ -1083,336 +355,24 @@ class GameActivity : Activity() { val cutoutChanged = lastAppliedCutoutMode != settings.displayCutoutMode if (!force && !cutoutChanged && now - lastImmersiveApplyAt < 350L) return lastImmersiveApplyAt = now - if (!immersiveDecorConfigured) { WindowCompat.setDecorFitsSystemWindows(window, false) - WindowCompat.getInsetsController(window, window.decorView).systemBarsBehavior = - WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + WindowCompat.getInsetsController(window, window.decorView).systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE immersiveDecorConfigured = true } - WindowCompat.getInsetsController(window, window.decorView) - .hide(WindowInsetsCompat.Type.systemBars()) - + WindowCompat.getInsetsController(window, window.decorView).hide(WindowInsetsCompat.Type.systemBars()) if (Build.VERSION.SDK_INT >= 28 && cutoutChanged) { window.attributes = window.attributes.apply { - layoutInDisplayCutoutMode = if (settings.displayCutoutMode == DisplayCutoutMode.EDGE_TO_EDGE) { + layoutInDisplayCutoutMode = if (settings.displayCutoutMode == DisplayCutoutMode.EDGE_TO_EDGE) android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - } else { - android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - } + else android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT } } lastAppliedCutoutMode = settings.displayCutoutMode } - private fun installSafeAreaInsets(root: View) { - ViewCompat.setOnApplyWindowInsetsListener(root) { view, insets -> - if (settings.displayCutoutMode == DisplayCutoutMode.SAFE_AREA) { - val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - val cutout = insets.getInsets(WindowInsetsCompat.Type.displayCutout()) - val left = maxOf(bars.left, cutout.left) - val top = maxOf(bars.top, cutout.top) - val right = maxOf(bars.right, cutout.right) - val bottom = maxOf(0, cutout.bottom) - if ( - view.paddingLeft != left || - view.paddingTop != top || - view.paddingRight != right || - view.paddingBottom != bottom - ) { - view.setPadding(left, top, right, bottom) - } - } else { - if ( - view.paddingLeft != 0 || - view.paddingTop != 0 || - view.paddingRight != 0 || - view.paddingBottom != 0 - ) { - view.setPadding(0, 0, 0, 0) - } - } - insets - } - ViewCompat.requestApplyInsets(root) - } - - private fun zoneToKeyCode(zone: TouchOverlayView.Zone): Int = when (zone) { - TouchOverlayView.Zone.DPAD_UP -> KeyEvent.KEYCODE_DPAD_UP - TouchOverlayView.Zone.DPAD_DOWN -> KeyEvent.KEYCODE_DPAD_DOWN - TouchOverlayView.Zone.DPAD_LEFT -> KeyEvent.KEYCODE_DPAD_LEFT - TouchOverlayView.Zone.DPAD_RIGHT -> KeyEvent.KEYCODE_DPAD_RIGHT - TouchOverlayView.Zone.BTN_CONFIRM -> KeyEvent.KEYCODE_ENTER - TouchOverlayView.Zone.BTN_BACK -> KeyEvent.KEYCODE_ESCAPE - TouchOverlayView.Zone.BTN_DASH -> KeyEvent.KEYCODE_SHIFT_LEFT - TouchOverlayView.Zone.BTN_EXTRA_A -> KeyEvent.KEYCODE_A - TouchOverlayView.Zone.BTN_EXTRA_S -> KeyEvent.KEYCODE_S - TouchOverlayView.Zone.BTN_EXTRA_D -> KeyEvent.KEYCODE_D - TouchOverlayView.Zone.BTN_EXTRA_Z -> KeyEvent.KEYCODE_Z - TouchOverlayView.Zone.BTN_EXTRA_X -> KeyEvent.KEYCODE_X - TouchOverlayView.Zone.BTN_EXTRA_C -> KeyEvent.KEYCODE_C - TouchOverlayView.Zone.BTN_CTRL -> KeyEvent.KEYCODE_CTRL_LEFT - TouchOverlayView.Zone.BTN_ALT -> KeyEvent.KEYCODE_ALT_LEFT - TouchOverlayView.Zone.BTN_SHIFT -> KeyEvent.KEYCODE_SHIFT_LEFT - TouchOverlayView.Zone.SELECT -> KeyEvent.KEYCODE_ESCAPE - TouchOverlayView.Zone.START -> KeyEvent.KEYCODE_ENTER - TouchOverlayView.Zone.MENU -> KeyEvent.KEYCODE_F2 - TouchOverlayView.Zone.SETTINGS -> KeyEvent.KEYCODE_F8 - TouchOverlayView.Zone.HOME -> KeyEvent.KEYCODE_HOME - TouchOverlayView.Zone.L1 -> KeyEvent.KEYCODE_PAGE_UP - TouchOverlayView.Zone.R1 -> KeyEvent.KEYCODE_PAGE_DOWN - TouchOverlayView.Zone.OVERLAY_MENU -> KeyEvent.KEYCODE_MENU - TouchOverlayView.Zone.BTN_A -> KeyEvent.KEYCODE_ENTER - TouchOverlayView.Zone.BTN_B -> KeyEvent.KEYCODE_ESCAPE - TouchOverlayView.Zone.BTN_X -> KeyEvent.KEYCODE_Q - TouchOverlayView.Zone.BTN_Y -> KeyEvent.KEYCODE_W - } - - private fun keyNameToCode(name: String): Int = when (name) { - "ENTER" -> KeyEvent.KEYCODE_ENTER - "ESCAPE" -> KeyEvent.KEYCODE_ESCAPE - "SPACE" -> KeyEvent.KEYCODE_SPACE - "TAB" -> KeyEvent.KEYCODE_TAB - "Z" -> KeyEvent.KEYCODE_Z - "X" -> KeyEvent.KEYCODE_X - "Q" -> KeyEvent.KEYCODE_Q - "B" -> KeyEvent.KEYCODE_B - "A" -> KeyEvent.KEYCODE_A - "S" -> KeyEvent.KEYCODE_S - "D" -> KeyEvent.KEYCODE_D - "W" -> KeyEvent.KEYCODE_W - "V" -> KeyEvent.KEYCODE_V - "C" -> KeyEvent.KEYCODE_C - "F2" -> KeyEvent.KEYCODE_F2 - "F8" -> KeyEvent.KEYCODE_F8 - "CTRL_LEFT" -> KeyEvent.KEYCODE_CTRL_LEFT - "SHIFT_LEFT" -> KeyEvent.KEYCODE_SHIFT_LEFT - "ALT_LEFT" -> KeyEvent.KEYCODE_ALT_LEFT - else -> KeyEvent.KEYCODE_UNKNOWN - } - - private fun keyCodeForChar(char: Char): Int = when (char) { - in 'a'..'z' -> KeyEvent.KEYCODE_A + (char - 'a') - in 'A'..'Z' -> KeyEvent.KEYCODE_A + (char - 'A') - in '0'..'9' -> KeyEvent.KEYCODE_0 + (char - '0') - ' ' -> KeyEvent.KEYCODE_SPACE - else -> KeyEvent.KEYCODE_UNKNOWN - } - - private fun launchRgssGame(gameDir: File) { - Log.i(TAG, "launchRgssGame: $gameDir (engine=$engineType)") - - // Write a per-game mkxp.json that lists all installed RTPs as - // additional search paths. mkxp-z reads this from its customDataPath - // (= SDL_GetPrefPath on Android) at startup. Without this, a game - // that doesn't bundle the official RTP tilesets/sounds crashes with - // 'no such file or directory' the moment it tries to load a map. - try { - val rtpManager = com.runestone.app.rtp.RtpManager(this) - val gameTitle = readGameTitle(gameDir) ?: gameDir.name - com.runestone.app.runtime.RuntimeConfigWriter() - .writeMkxpConfig(this, gameDir, gameTitle, rtpManager) - } catch (t: Throwable) { - Log.w(TAG, "Failed to write mkxp.json; launching without RTP support", t) - } - - val intent = Intent().apply { - setClassName(this@GameActivity, "com.hatkid.mkxpz.MainActivity") - putExtra("com.runestone.app.extra.GAME_PATH", gameDir.absolutePath) - putExtra("com.runestone.app.extra.LAYOUT_MODE", settings.layoutMode.name) - putExtra("com.runestone.app.extra.TOUCH_OPACITY", settings.touchOpacity) - putExtra("com.runestone.app.extra.TOUCH_SCALE", settings.touchScale) - putExtra("com.runestone.app.extra.HAPTICS_ENABLED", settings.hapticsEnabled) - putExtra("com.runestone.app.extra.HAPTIC_INTENSITY", settings.hapticIntensity) - putExtra("com.runestone.app.extra.HIDE_VIRTUAL_GAMEPAD", settings.hideVirtualGamepad) - putExtra("com.runestone.app.extra.TEXT_SCALE", settings.textScale) - putExtra("com.runestone.app.extra.INTEGER_SCALING", settings.integerScaling) - putExtra("com.runestone.app.extra.DISPLAY_CUTOUT_MODE", settings.displayCutoutMode.name) - putExtra("com.runestone.app.extra.CONTROLLER_HOME_SHORTCUT", settings.controllerHomeShortcut.name) - putExtra("com.runestone.app.extra.CONTROLLER_PRESET", settings.controllerPreset) - } - startActivity(intent) - finish() - } - - /** Reads the game's title from Game.ini's `[Game] Title=` line. */ - private fun readGameTitle(gameDir: File): String? { - val ini = File(gameDir, "Game.ini") - if (!ini.isFile) return null - return runCatching { - ini.readLines() - .firstOrNull { it.trim().startsWith("Title=", ignoreCase = true) } - ?.substringAfter("Title=") - ?.trim() - ?.takeIf { it.isNotEmpty() } - }.getOrNull() - } - - // ── EasyRPG (GPLv3 — bundled native, no download needed) ───── - - private fun launchEasyRpgGame(gameDir: File) { - Log.i(TAG, "EasyRPG bundled: launching ${gameDir.name}") - val configDir = File(filesDir, "easyrpg").apply { mkdirs() } - val saveDir = File(configDir, "saves").apply { mkdirs() } - val logFile = File(configDir, "easyrpg-player.log") - val commandLine = arrayOf( - "--project-path", gameDir.absolutePath, - "--config-path", configDir.absolutePath, - "--save-path", saveDir.absolutePath, - "--log-file", logFile.absolutePath, - ) - val intent = Intent().apply { - setClassName(packageName, "org.easyrpg.player.player.EasyRpgPlayerActivity") - putExtra("project_path", gameDir.absolutePath) - putExtra("command_line", commandLine) - putExtra("save_path", saveDir.absolutePath) - putExtra("log_file", logFile.absolutePath) - putExtra("com.runestone.app.extra.GAME_PATH", gameDir.absolutePath) - putExtra("com.runestone.app.extra.LAYOUT_MODE", settings.layoutMode.name) - putExtra("com.runestone.app.extra.TOUCH_OPACITY", settings.touchOpacity) - putExtra("com.runestone.app.extra.TOUCH_SCALE", settings.touchScale) - putExtra("com.runestone.app.extra.HAPTICS_ENABLED", settings.hapticsEnabled) - putExtra("com.runestone.app.extra.HAPTIC_INTENSITY", settings.hapticIntensity) - putExtra("com.runestone.app.extra.HIDE_VIRTUAL_GAMEPAD", settings.hideVirtualGamepad) - putExtra("com.runestone.app.extra.DISPLAY_CUTOUT_MODE", settings.displayCutoutMode.name) - putExtra("com.runestone.app.extra.CONTROLLER_HOME_SHORTCUT", settings.controllerHomeShortcut.name) - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - startActivity(intent) - finish() - } - - // ── Godot (MIT — native wrapper not integrated) ────────────── - - private fun launchGodotGame(gameDir: File) { - Log.i(TAG, "Godot unavailable: ${gameDir.name}") - UnavailableEngine.show(this, "Godot") - } - - // ── NScripter / ONScripter (GPLv2+ — bundled native wrapper) ─ - - private fun launchNScripterGame(gameDir: File) { - Log.i(TAG, "ONScripter bundled: launching ${gameDir.name}") - val saveDir = File(gameDir, "saves").apply { mkdirs() } - val intent = Intent(this, com.runestone.app.engine.onscripter.OnscripterActivity::class.java).apply { - putExtra("game_path", gameDir.absolutePath) - putExtra("save_path", saveDir.absolutePath) - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - startActivity(intent) - finish() - } - - // ── Ren'Py (MIT — bundled native wrapper) ──────────────────── - - private fun launchRenpyGame(gameDir: File) { - Log.i(TAG, "Ren'Py bundled: launching ${gameDir.name}") - val saveDir = File(gameDir, "saves").apply { mkdirs() } - val intent = Intent(this, org.renpy.android.PythonSDLActivity::class.java).apply { - putExtra("game_path", gameDir.absolutePath) - putExtra("save_path", saveDir.absolutePath) - putExtra("engine_version", "8.3.4") - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - startActivity(intent) - finish() - } - - private fun showLegacyDialog(type: EngineType) { - val title: String - val message: String - when (type) { - EngineType.WOLF -> { - title = "Unsupported Engine — ${type.label}" - message = "This game uses Wolf RPG Editor.\n\nRunestone can detect these games, but it does not bundle a Wolf RPG runtime yet. The game files are installed correctly, but this engine cannot be played here yet." - } - EngineType.KIRIKIRI -> { - title = "Unsupported Engine — ${type.label}" - message = "This game uses KiriKiri/KAG.\n\nRunestone can detect these games, but it does not bundle a KiriKiri runtime. The game files are installed correctly, but this engine cannot be played here yet." - } - EngineType.UNITY, EngineType.UNREAL, EngineType.GAMEMAKER, EngineType.AGS -> { - title = "Unsupported Engine — ${type.label}" - message = "Runestone can identify this engine, but it does not bundle a compatible Android runtime for it. The game files are installed correctly, but this engine cannot be played here yet." - } - else -> { - title = "Legacy Engine — ${type.label}" - message = "This is a legacy engine from ${if (type == EngineType.DANTE98) "1992" else "1997"}.\n\nNo open-source runtime exists. These games require the original PC software." - } - } - AlertDialog.Builder(this) - .setTitle(title) - .setMessage(message) - .setPositiveButton("OK") { _, _ -> finish() } - .setCancelable(false) - .show() - } - - private fun showElectronDialog() { - AlertDialog.Builder(this) - .setTitle("Electron Not Supported") - .setMessage("Electron apps bundle a full Chromium browser.\n\nThey cannot run on Android and require a desktop PC.") - .setPositiveButton("OK") { _, _ -> finish() } - .setCancelable(false) - .show() - } - - override fun onBackPressed() { - val engine = webViewEngine - if (engine != null) { - val shouldQuit = engine.handleBack() - if (shouldQuit) { - // Clear paused state — game is done - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .remove("paused_game") - .remove("game_minimized") - .apply() - super.onBackPressed() - } - } else { - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .remove("paused_game") - .remove("game_minimized") - .apply() - super.onBackPressed() - } - } - - override fun onPause() { - super.onPause() - releaseControllerAxes() - webViewEngine?.onPause() - } - - override fun onResume() { - super.onResume() - applyImmersiveMode() - // Check if we should self-destruct from STOP dialog - val killPath = getSharedPreferences("runestone", MODE_PRIVATE) - .getString("kill_game", null) - if (killPath != null && gamePath != null && - (killPath == gamePath || killPath == gamePath.substringAfterLast("/"))) { - getSharedPreferences("runestone", MODE_PRIVATE).edit().remove("kill_game").apply() - Log.i(TAG, "kill_game signal received for $killPath — finishing") - finish() - return - } - webViewEngine?.resumeTimers() - webViewEngine?.onResume() - } - - private fun releaseControllerAxes() { - activeControllerAxisButtons.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_UP) } - activeControllerAxisButtons.clear() - } - - override fun onWindowFocusChanged(hasFocus: Boolean) { - super.onWindowFocusChanged(hasFocus) - if (hasFocus) applyImmersiveMode() - } - - override fun onDestroy() { - super.onDestroy() - webViewEngine?.destroy() - webViewEngine = null + private fun detectEngine(gameDir: java.io.File): EngineType { + val engine = com.runestone.app.engine.EngineRegistry.detect(gameDir) + return engine?.let { com.runestone.app.data.EngineType.fromEngineId(it.id) } ?: com.runestone.app.data.EngineType.UNKNOWN } } diff --git a/app/src/main/java/com/runestone/app/MainActivity.kt b/app/src/main/java/com/runestone/app/MainActivity.kt index 3b3e190..be19c94 100644 --- a/app/src/main/java/com/runestone/app/MainActivity.kt +++ b/app/src/main/java/com/runestone/app/MainActivity.kt @@ -11,184 +11,117 @@ package com.runestone.app import android.Manifest -import android.app.Activity -import android.app.AlertDialog -import android.content.BroadcastReceiver -import android.content.Context +import androidx.activity.ComponentActivity import android.content.Intent -import android.content.IntentFilter -import android.net.Uri import android.graphics.Color -import android.graphics.Typeface +import android.os.Build import android.os.Bundle +import android.os.SystemClock import android.util.Log -import android.view.Gravity import android.view.InputDevice import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import android.widget.TextView import android.widget.Toast -import android.app.Notification +import android.app.Application import android.app.NotificationChannel import android.app.NotificationManager -import android.os.Build -import android.os.SystemClock +import androidx.activity.viewModels +import androidx.lifecycle.ViewModelProvider +import com.runestone.app.ui.GameListViewModel import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import com.runestone.app.data.ControllerShortcut import com.runestone.app.data.DisplayCutoutMode -import com.runestone.app.data.EngineType import com.runestone.app.data.RunnerSettings -import com.runestone.app.data.UIMode -import com.runestone.app.engine.EngineRegistry -import com.runestone.app.ui.SortMode -import com.runestone.app.importer.SafGameImporter -import com.runestone.app.importer.SafImportResult -import com.runestone.app.importer.SafStorageBrowser -import com.runestone.app.ui.AvailableGamesScreen -import com.runestone.app.ui.GameFolderBrowserScreen -import com.runestone.app.ui.GameCardInfo +import com.runestone.app.session.GameSessionManager +import com.runestone.app.importer.ImportManager +import com.runestone.app.store.StoreCoordinator +import com.runestone.app.navigation.OverlayNavigationController import com.runestone.app.ui.HomeCardLayout import com.runestone.app.ui.HomeScreen -import com.runestone.app.ui.ImportProgressScreen -import com.runestone.app.ui.ImportProgressView -import com.runestone.app.ui.ManageFilesScreen -import com.runestone.app.ui.PerGameSettingsScreen -import com.runestone.app.ui.ProviderSettingsScreen -import com.runestone.app.ui.SettingsScreen import com.runestone.app.ui.SettingsStore import com.runestone.app.ui.Theme -import com.runestone.app.ui.SourcesScreen import com.runestone.app.services.GameMetadataService -import com.runestone.app.services.StoreDownloadService -import com.runestone.app.provider.AvailableGame import com.runestone.app.provider.DownloadManager import com.runestone.app.provider.ExtractionManager import com.runestone.app.provider.SourcesManager -import com.runestone.app.workspace.GameInstallState -import com.runestone.app.workspace.InstallStateStore +import com.runestone.app.util.AppScope import com.runestone.app.workspace.SaveManager import com.runestone.app.workspace.WorkspaceManager -import com.runestone.app.workspace.WorkspaceStorage import com.runestone.app.workspace.WorkspaceStorageReporter -import org.json.JSONObject -import java.io.File -import java.security.MessageDigest -import java.util.concurrent.atomic.AtomicBoolean -import java.util.zip.ZipFile +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch -class MainActivity : Activity() { +class MainActivity : ComponentActivity() { private lateinit var settingsStore: SettingsStore private lateinit var workspaceManager: WorkspaceManager - private lateinit var installStateStore: InstallStateStore private lateinit var saveManager: SaveManager private lateinit var storageReporter: WorkspaceStorageReporter private lateinit var sourcesManager: SourcesManager private lateinit var downloadManager: DownloadManager private lateinit var extractionManager: ExtractionManager private lateinit var metadataService: GameMetadataService + private lateinit var sessionManager: GameSessionManager + private lateinit var storeCoordinator: StoreCoordinator + private lateinit var importManager: ImportManager + private lateinit var navController: OverlayNavigationController private var settings = RunnerSettings() private var games: List = emptyList() - private var gameMetadataCache: MutableMap = mutableMapOf() - private var importMessage: String? = null - private var activeImportProgressView: ImportProgressView? = null - private var manageFilesVisible = false - private var storageCache: Map = emptyMap() - private var pendingImportStorage: String? = null - private var pendingCoverStorage: String? = null - private var pendingCoverCallback: ((String) -> Unit)? = null - private var pendingPatchStorage: String? = null - private var pendingPatchCallback: ((String) -> Unit)? = null - private var pendingSaveExportStorage: String? = null - private var pendingSaveImportStorage: String? = null - private var splashView: FrameLayout? = null - private val importBrowserStack = mutableListOf() - private var importBrowserShowLocations = false - private var downloadProgressMap = mutableMapOf() - private var installProgressMap = mutableMapOf() - private val lastStoreProgressRenderAt = mutableMapOf() - private val lastStoreProgressPercent = mutableMapOf() + var gameMetadataCache: MutableMap = mutableMapOf() - data class InstallProgress( - val filesExtracted: Int, - val totalFiles: Int, - val currentFile: String, - ) - - // Overlay navigation - root container set once, overlays added on top - private lateinit var rootContainer: FrameLayout - private var activeOverlay: View? = null - private var homeContentView: View? = null - private lateinit var persistentDock: View + lateinit var rootContainer: FrameLayout + var activeOverlay: View? = null + var homeContentView: View? = null + var persistentDock: View? = null companion object { - private const val REQUEST_IMPORT_FOLDER = 9001 - private const val REQUEST_COVER_IMAGE = 9002 - private const val REQUEST_PATCH_ZIP = 9003 - private const val REQUEST_SAVE_EXPORT_ZIP = 9004 - private const val REQUEST_SAVE_IMPORT_ZIP = 9005 private const val TAG = "Runestone" private const val NOTIFICATION_CHANNEL = "runestone_downloads" - private const val NOTIFICATION_ID_DOWNLOAD = 2001 private const val EXTRA_ADB_COMMAND = "runestone_adb_command" private const val ADB_OPEN_FIRST_GAME = "first_game" private const val ADB_OPEN_HOME = "home" private const val ADB_OPEN_MANAGE = "manage" private const val ADB_OPEN_SETTINGS = "settings" private const val ADB_OPEN_STORE = "store" + private const val ADB_OPEN_GAME_PREFIX = "game:" } + lateinit var gameListViewModel: com.runestone.app.ui.GameListViewModel + private var pausedGamePath: String? = null private var initialLaunch = true - private var activeEngineFilter: EngineType? = null - private var currentSort: SortMode = SortMode.DATE_ADDED - private var searchQuery: String = "" private var homeCardLayout = HomeCardLayout.GRID_2 - private var availableGames: List = emptyList() - private val storeMetadataInFlight = mutableSetOf() - private var storeMetadataLoading = false - private var storeMetadataRenderScheduled = false - private var availableGamesScrollY = 0 - private var isLoadingGames = false - private var gamesErrorMessage: String? = null - private var downloadReceiverRegistered = false private val pressedControllerKeys = mutableSetOf() private var triggerResumeComboDown = false - private var controllerNavigationEnabled = false + var controllerNavigationEnabled = false private var immersiveDecorConfigured = false private var lastImmersiveApplyAt = 0L private var lastAppliedCutoutMode: DisplayCutoutMode? = null - private val gameSizeCache = mutableMapOf() - private val gameSizeInFlight = mutableSetOf() - private val metadataWarmupInFlight = mutableSetOf() + val gameSizeCache = mutableMapOf() + val gameSizeInFlight = mutableSetOf() + val metadataWarmupInFlight = mutableSetOf() - private val downloadReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { - val gameId = intent.getStringExtra(StoreDownloadService.EXTRA_GAME_ID) ?: return - val stateName = intent.getStringExtra(StoreDownloadService.EXTRA_STATE) ?: DownloadManager.DownloadState.IDLE.name - val state = runCatching { DownloadManager.DownloadState.valueOf(stateName) }.getOrDefault(DownloadManager.DownloadState.IDLE) - val progress = DownloadManager.DownloadProgress( - bytesDownloaded = intent.getLongExtra(StoreDownloadService.EXTRA_BYTES, downloadManager.getDownloadedBytes(gameId)), - totalBytes = intent.getLongExtra(StoreDownloadService.EXTRA_TOTAL, downloadManager.getTotalBytes(gameId)), - speed = intent.getFloatExtra(StoreDownloadService.EXTRA_SPEED, 0f), - state = state, - error = intent.getStringExtra(StoreDownloadService.EXTRA_ERROR), - ) - downloadProgressMap[gameId] = progress - when (intent.action) { - StoreDownloadService.ACTION_COMPLETE -> { - val path = intent.getStringExtra(StoreDownloadService.EXTRA_FILE_PATH) - if (path != null) startExtraction(gameId, path) - } - StoreDownloadService.ACTION_ERROR -> showErrorNotification(gameId, progress.error ?: "Download failed") + private val navCallbacks = object : OverlayNavigationController.Callbacks { + override fun playGame(storageName: String) = this@MainActivity.playGame(storageName) + override fun performDeleteGame(storageName: String, gameTitle: String, keepSaves: Boolean) = + this@MainActivity.performDeleteGame(storageName, gameTitle, keepSaves) + override fun refreshGames() = this@MainActivity.refreshGames() + override fun applyImmersiveMode(force: Boolean) = this@MainActivity.applyImmersiveMode(force) + override fun onSettingsChanged(newSettings: RunnerSettings) { + val cutoutChanged = settings.displayCutoutMode != newSettings.displayCutoutMode + settings = newSettings + navController.settings = newSettings + settingsStore.save(newSettings) + applyImmersiveMode(force = cutoutChanged) + if (cutoutChanged) { + ViewCompat.requestApplyInsets(rootContainer) } - renderAvailableGamesProgress("download:$gameId", progressPercent(progress.bytesDownloaded, progress.totalBytes), force = state != DownloadManager.DownloadState.DOWNLOADING) } } @@ -196,19 +129,20 @@ class MainActivity : Activity() { super.onCreate(savedInstanceState) Log.i(TAG, "onCreate") applyImmersiveMode() - // A fresh MainActivity means there is no live GameActivity to resume. - // Resume state is only valid when GameActivity intentionally returns - // to an already-running hub through goHomePaused(). - clearRuntimeResumeState(reason = "fresh_on_create") + pausedGamePath = null settingsStore = SettingsStore(this) workspaceManager = WorkspaceManager(this) - installStateStore = InstallStateStore(workspaceManager) saveManager = SaveManager(workspaceManager) storageReporter = WorkspaceStorageReporter(workspaceManager) sourcesManager = SourcesManager(this) downloadManager = DownloadManager(this) extractionManager = ExtractionManager(this) metadataService = GameMetadataService(this) + sessionManager = GameSessionManager(this) + sessionManager.clearResumeState("fresh_on_create") + storeCoordinator = StoreCoordinator(this, workspaceManager, downloadManager, extractionManager, sourcesManager, metadataService, storeCallbacks) + importManager = ImportManager(this, workspaceManager, saveManager, importCallbacks) + gameListViewModel = ViewModelProvider(this, GameListViewModel.Factory(application as Application, workspaceManager, sessionManager, metadataService)).get(GameListViewModel::class.java) settings = settingsStore.load() applyImmersiveMode() Theme.active = Theme.byName(settings.colorPalette) @@ -220,16 +154,19 @@ class MainActivity : Activity() { }.getOrDefault(HomeCardLayout.GRID_2) createNotificationChannel() requestNotificationPermissionIfNeeded() - registerDownloadReceiver() - setupDownloadCallbacks() + storeCoordinator.registerDownloadReceiver() + storeCoordinator.setupDownloadCallbacks() + + // Check onboarding + val onboardingComplete = getSharedPreferences("runestone-settings-v1", MODE_PRIVATE) + .getBoolean("onboarding_complete", false) - // Create permanent root frame - setContentView ONCE rootContainer = FrameLayout(this).apply { layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) - setBackgroundColor(Color.rgb(3, 3, 4)) + setBackgroundColor(Color.argb(255, 3, 3, 4)) } ViewCompat.setOnApplyWindowInsetsListener(rootContainer) { v, insets -> if (settings.displayCutoutMode == DisplayCutoutMode.SAFE_AREA) { @@ -238,7 +175,7 @@ class MainActivity : Activity() { val left = maxOf(bars.left, cutout.left) val top = maxOf(bars.top, cutout.top) val right = maxOf(bars.right, cutout.right) - val bottom = maxOf(0, cutout.bottom) + val bottom = maxOf(bars.bottom, cutout.bottom) if (v.paddingLeft != left || v.paddingTop != top || v.paddingRight != right || v.paddingBottom != bottom) { v.setPadding(left, top, right, bottom) } @@ -250,1867 +187,308 @@ class MainActivity : Activity() { insets } setContentView(rootContainer) - showSplash() - rootContainer.post { refreshGames() } - persistentDock = HomeScreen(this).createDockBar( - onHome = { dismissOverlay() }, - onAdd = { startFolderImport() }, - onBrowse = { showAvailableGames() }, - onManage = { showManageFiles() }, - onSettings = { showSettings() }, - ) - rootContainer.addView(persistentDock, FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, dp(58), Gravity.BOTTOM).apply { - setMargins(dp(10), 0, dp(10), dp(8)) - }) - handleAdbCommand(intent) - } - - private fun registerDownloadReceiver() { - if (downloadReceiverRegistered) return - val filter = IntentFilter().apply { - addAction(StoreDownloadService.ACTION_PROGRESS) - addAction(StoreDownloadService.ACTION_COMPLETE) - addAction(StoreDownloadService.ACTION_ERROR) - } - if (Build.VERSION.SDK_INT >= 33) { - registerReceiver(downloadReceiver, filter, Context.RECEIVER_NOT_EXPORTED) - } else { - registerReceiver(downloadReceiver, filter) - } - downloadReceiverRegistered = true - } - - private fun requestNotificationPermissionIfNeeded() { - if (Build.VERSION.SDK_INT >= 33 && - checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != android.content.pm.PackageManager.PERMISSION_GRANTED - ) { - requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS), 9104) - } - } - - private fun refreshGames() { - games = workspaceManager.scanInstalledGames() - Log.i(TAG, "refreshGames: found ${games.size} games") - dismissSplash() - } - - private fun startPlaySession(storageName: String, gamePath: String) { - val now = System.currentTimeMillis() - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .putString("active_game_storage", storageName) - .putString("active_game_path", gamePath) - .putLong("active_game_started_at", now) - .putLong("active_game_last_seen_at", now) - .remove("paused_game") - .remove("game_minimized") - .apply() - - getSharedPreferences("play_stats", MODE_PRIVATE).edit() - .putLong("session_start_${storageName}", now) - .apply() - } - - private fun finalizeActivePlaySession(reason: String) { - val runestonePrefs = getSharedPreferences("runestone", MODE_PRIVATE) - val storageName = runestonePrefs.getString("active_game_storage", null) ?: return - val startedAt = runestonePrefs.getLong("active_game_started_at", 0L) - if (startedAt <= 0L) return - - val now = System.currentTimeMillis() - val elapsedSeconds = ((now - startedAt) / 1000L).coerceAtLeast(0L) - if (elapsedSeconds > 0L) { - val playStats = getSharedPreferences("play_stats", MODE_PRIVATE) - val total = playStats.getLong("total_${storageName}", 0L) - playStats.edit() - .putLong("total_${storageName}", total + elapsedSeconds) - .putLong("last_played_${storageName}", now) - .remove("session_start_${storageName}") - .apply() - Log.i(TAG, "Play session finalized: $storageName +${elapsedSeconds}s ($reason)") - } - - runestonePrefs.edit() - .remove("active_game_storage") - .remove("active_game_path") - .remove("active_game_started_at") - .remove("active_game_last_seen_at") - .remove("paused_game") - .remove("game_minimized") - .remove("kill_game") - .apply() - pausedGamePath = null - } - - private fun clearRuntimeResumeState(reason: String) { - finalizeActivePlaySession(reason) - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .remove("paused_game") - .remove("game_minimized") - .remove("kill_game") - .apply() - pausedGamePath = null - } - - private fun createNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val channel = NotificationChannel( - NOTIFICATION_CHANNEL, - "Downloads", - NotificationManager.IMPORTANCE_LOW - ).apply { - description = "Game download progress" - } - val notificationManager = getSystemService(NotificationManager::class.java) - notificationManager.createNotificationChannel(channel) - } - } - - private fun setupDownloadCallbacks() { - downloadManager.setCallback(object : DownloadManager.DownloadCallback { - override fun onProgress(gameId: String, progress: DownloadManager.DownloadProgress) { - runOnUiThread { - downloadProgressMap[gameId] = progress - showDownloadNotification(gameId, progress) - renderAvailableGamesProgress( - key = "download:$gameId", - percent = progressPercent(progress.bytesDownloaded, progress.totalBytes), - ) - } - } - - override fun onComplete(gameId: String, filePath: String) { - runOnUiThread { - downloadProgressMap[gameId] = DownloadManager.DownloadProgress( - bytesDownloaded = 0, totalBytes = 0, speed = 0f, - state = DownloadManager.DownloadState.COMPLETED - ) - renderAvailableGamesProgress("download:$gameId", 100, force = true) - showInstallNotification(gameId) - startExtraction(gameId, filePath) - } - } - - override fun onError(gameId: String, message: String) { - runOnUiThread { - downloadProgressMap[gameId] = DownloadManager.DownloadProgress( - bytesDownloaded = 0, totalBytes = 0, speed = 0f, - state = DownloadManager.DownloadState.FAILED, error = message - ) - showErrorNotification(gameId, message) - renderAvailableGamesProgress("download:$gameId", 0, force = true) - } - } - }) - } - - private fun showDownloadNotification(gameId: String, progress: DownloadManager.DownloadProgress) { - val percent = if (progress.totalBytes > 0) { - (progress.bytesDownloaded * 100 / progress.totalBytes).toInt() - } else 0 - - val game = availableGames.find { it.id == gameId } - val title = game?.title ?: gameId - - val notification = Notification.Builder(this, NOTIFICATION_CHANNEL) - .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle("Downloading $title") - .setContentText("$percent%") - .setOngoing(true) - .build() - - val nm = getSystemService(NotificationManager::class.java) - nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) - } - - private fun showInstallNotification(gameId: String) { - val game = availableGames.find { it.id == gameId } - val title = game?.title ?: gameId - - val notification = Notification.Builder(this, NOTIFICATION_CHANNEL) - .setSmallIcon(android.R.drawable.stat_sys_download_done) - .setContentTitle("Download complete") - .setContentText("$title — extracting...") - .setAutoCancel(true) - .build() - - val nm = getSystemService(NotificationManager::class.java) - nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) - } - - private fun showErrorNotification(gameId: String, error: String) { - val game = availableGames.find { it.id == gameId } - val title = game?.title ?: gameId - - val notification = Notification.Builder(this, NOTIFICATION_CHANNEL) - .setSmallIcon(android.R.drawable.stat_notify_error) - .setContentTitle("Download failed") - .setContentText("$title: $error") - .setAutoCancel(true) - .build() - - val nm = getSystemService(NotificationManager::class.java) - nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) - } - - private fun startExtraction(gameId: String, zipPath: String) { - val game = availableGames.find { it.id == gameId } ?: return - val outputDir = workspaceManager.allocateGameDir(game.title) - installProgressMap[gameId] = InstallProgress(0, 0, "Preparing archive") - renderAvailableGamesProgress("install:$gameId", 0, force = true) - - extractionManager.extract(zipPath, outputDir, object : ExtractionManager.ExtractionCallback { - override fun onProgress(progress: ExtractionManager.ExtractionProgress) { - Log.d(TAG, "Extracting: ${progress.currentFile} (${progress.filesExtracted}/${progress.totalFiles})") - runOnUiThread { - installProgressMap[gameId] = InstallProgress( - filesExtracted = progress.filesExtracted, - totalFiles = progress.totalFiles, - currentFile = progress.currentFile, - ) - renderAvailableGamesProgress( - key = "install:$gameId", - percent = progressPercent(progress.filesExtracted.toLong(), progress.totalFiles.toLong()), - ) - val notification = Notification.Builder(this@MainActivity, NOTIFICATION_CHANNEL) - .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle("Extracting ${game.title}") - .setContentText("${progress.filesExtracted}/${progress.totalFiles} files") - .setOngoing(true) - .build() - val nm = getSystemService(NotificationManager::class.java) - nm.notify(NOTIFICATION_ID_DOWNLOAD, notification) - } - } - - override fun onComplete(result: ExtractionManager.ExtractionResult) { - runOnUiThread { - try { - val gameDir = finalizeDownloadedGame(result, game) - val zipFile = File(zipPath) - if (settings.preserveFiles) { - Log.i(TAG, "Preserved ZIP: $zipPath") - } else if (zipFile.delete()) { - Log.i(TAG, "Deleted ZIP: $zipPath") - } - - downloadManager.cleanup(gameId) - downloadProgressMap.remove(gameId) - installProgressMap.remove(gameId) - clearStoreProgress(gameId) - refreshGames() - dismissOverlay { showHome() } - val zipStatus = if (settings.preserveFiles) "ZIP kept" else "ZIP deleted" - Toast.makeText(this@MainActivity, "${gameDir.name} installed. $zipStatus.", Toast.LENGTH_SHORT).show() - } catch (e: Exception) { - Log.e(TAG, "Installation failed", e) - discardFailedInstall(gameId, zipPath, result.outputDir, e.message ?: "Installation failed") - } - } - } - - override fun onError(message: String) { - runOnUiThread { - Log.e(TAG, "Extraction failed: $message") - discardFailedInstall(gameId, zipPath, outputDir, "Extraction failed: $message") - } - } - }) - } - - private fun finalizeDownloadedGame(result: ExtractionManager.ExtractionResult, sourceGame: AvailableGame): File { - val engine = EngineRegistry.detect(result.gameRoot) - val detectedType = engine?.let { EngineType.fromEngineId(it.id) } ?: EngineType.UNKNOWN - val declaredType = sourceGame.engine?.let { EngineType.fromEngineId(it) } ?: EngineType.UNKNOWN - val engineType = when { - detectedType != EngineType.UNKNOWN -> detectedType - declaredType != EngineType.UNKNOWN -> declaredType - else -> EngineType.UNKNOWN - } - require(engineType != EngineType.UNKNOWN) { "Could not detect a supported game engine" } - Log.i(TAG, "Install engine: $engineType for ${result.gameRoot.name} detected=${engine?.id} declared=${sourceGame.engine}") - - val gameDir = result.outputDir - val originalDir = File(gameDir, "original") - require(!originalDir.exists()) { "Install workspace already contains original files" } - - if (result.gameRoot.canonicalFile == gameDir.canonicalFile) { - val extractedFiles = gameDir.listFiles()?.toList().orEmpty() - originalDir.mkdirs() - extractedFiles.forEach { file -> - require(file.renameTo(File(originalDir, file.name))) { - "Could not move ${file.name} into the installed game" - } - } - } else { - require(result.gameRoot.renameTo(originalDir)) { - "Could not move extracted game files into the install workspace" - } - } - - val fileCount = originalDir.walkTopDown().count { it.isFile } - require(fileCount > 0) { "Archive did not contain game files" } - - workspaceManager.ensureWorkspace(gameDir.name) - workspaceManager.ensureNoMedia(gameDir.name) - - File(gameDir, "manifest.json").writeText(JSONObject().apply { - put("storageName", gameDir.name) - put("engineType", engineType.name) - put("engineLabel", engineType.label) - put("fileCount", fileCount) - put("importedAt", System.currentTimeMillis()) - }.toString(2)) - - return gameDir - } - - private fun discardFailedInstall(gameId: String, zipPath: String, outputDir: File, message: String) { - outputDir.deleteRecursively() - File(zipPath).delete() - installProgressMap.remove(gameId) - clearStoreProgress(gameId) - downloadManager.cleanup(gameId) - downloadProgressMap[gameId] = DownloadManager.DownloadProgress( - bytesDownloaded = 0, totalBytes = 0, speed = 0f, - state = DownloadManager.DownloadState.FAILED, error = message, - ) - renderAvailableGamesProgress("download:$gameId", 0, force = true) - Toast.makeText(this, message, Toast.LENGTH_SHORT).show() - } - - private fun handleDownload(game: AvailableGame) { - val url = game.downloadUrl ?: return - val fileName = "${sha256(game.id).take(32)}.zip" - downloadManager.setFileName(game.id, fileName) - val cachedFile = File(downloadManager.getDownloadDir(), fileName) - if (isReadableZip(cachedFile)) { - downloadProgressMap[game.id] = DownloadManager.DownloadProgress( - bytesDownloaded = cachedFile.length(), - totalBytes = cachedFile.length(), - speed = 0f, - state = DownloadManager.DownloadState.COMPLETED, - ) - startExtraction(game.id, cachedFile.absolutePath) - renderAvailableGamesProgress("download:${game.id}", 100, force = true) - return - } - val state = downloadManager.getState(game.id) - val action = if (state == DownloadManager.DownloadState.PAUSED) { - StoreDownloadService.ACTION_RESUME - } else { - StoreDownloadService.ACTION_START - } - startForegroundService(Intent(this, StoreDownloadService::class.java).apply { - this.action = action - putExtra(StoreDownloadService.EXTRA_GAME_ID, game.id) - putExtra(StoreDownloadService.EXTRA_TITLE, game.title) - putExtra(StoreDownloadService.EXTRA_URL, url) - putExtra(StoreDownloadService.EXTRA_FILE_NAME, fileName) - }) - downloadProgressMap[game.id] = DownloadManager.DownloadProgress( - bytesDownloaded = downloadManager.getDownloadedBytes(game.id), - totalBytes = downloadManager.getTotalBytes(game.id), - speed = 0f, - state = DownloadManager.DownloadState.DOWNLOADING - ) - renderAvailableGamesProgress("download:${game.id}", 0, force = true) - } - - private fun progressPercent(done: Long, total: Long): Int { - if (total <= 0L) return 0 - return ((done * 100L) / total).coerceIn(0L, 100L).toInt() - } - - private fun renderAvailableGamesProgress(key: String, percent: Int, force: Boolean = false) { - if (activeOverlay == null) return - - val now = System.currentTimeMillis() - val lastAt = lastStoreProgressRenderAt[key] ?: 0L - val lastPercent = lastStoreProgressPercent[key] - val shouldRender = force || - lastPercent == null || - percent >= 100 || - percent != lastPercent || - now - lastAt >= 10_000L - - if (!shouldRender) return - - lastStoreProgressRenderAt[key] = now - lastStoreProgressPercent[key] = percent - renderAvailableGamesScreen() - } - - private fun clearStoreProgress(gameId: String) { - listOf("download:$gameId", "install:$gameId").forEach { key -> - lastStoreProgressRenderAt.remove(key) - lastStoreProgressPercent.remove(key) - } - } - - private fun sha256(value: String): String = - MessageDigest.getInstance("SHA-256") - .digest(value.toByteArray()) - .joinToString("") { "%02x".format(it) } - - private fun isReadableZip(file: File): Boolean { - if (!file.isFile || file.length() < 16L * 1024L) return false - return runCatching { - ZipFile(file).use { zip -> zip.entries().hasMoreElements() } - }.getOrDefault(false) - } - - private fun handlePauseDownload(gameId: String) { - startService(Intent(this, StoreDownloadService::class.java).apply { - action = StoreDownloadService.ACTION_PAUSE - putExtra(StoreDownloadService.EXTRA_GAME_ID, gameId) - putExtra(StoreDownloadService.EXTRA_TITLE, availableGames.find { it.id == gameId }?.title ?: gameId) - }) - downloadProgressMap[gameId] = DownloadManager.DownloadProgress( - bytesDownloaded = downloadManager.getDownloadedBytes(gameId), - totalBytes = downloadManager.getTotalBytes(gameId), - speed = 0f, - state = DownloadManager.DownloadState.PAUSED - ) - renderAvailableGamesScreen() - } - - private fun toCardInfo(g: WorkspaceManager.GameInfo): GameCardInfo { - val perGame = runCatching { - com.runestone.app.data.GameConfigService(this, workspaceManager).loadPerGame(g.storageName) - }.getOrNull() - val metadata = perGame?.metadata?.takeIf { - it.gameTitle.isBlank() || metadataTitleMatches(g.displayName, it.gameTitle) - } - - // Priority: custom cover > metadata local cover > nothing (will be filled by pipeline) - val customCoverPath = perGame?.game?.customCoverPath?.let { path -> - if (File(path).exists()) return@let "local:$path" - null - } - val metadataCoverPath = metadata?.localCoverPath?.takeIf { it.isNotEmpty() }?.let { path -> - if (File(path).exists()) return@let "local:$path" - null - } - val coverUrl = customCoverPath ?: metadataCoverPath - - return GameCardInfo( - storageName = g.storageName, - displayName = metadata?.gameTitle?.takeIf { it.isNotEmpty() } ?: g.displayName, - engineType = g.engineType, - fileCount = g.fileCount, - fileSize = cachedGameSize(g), - totalPlayTime = getSharedPreferences("play_stats", MODE_PRIVATE).getLong("total_${g.storageName}", 0L), - lastPlayedTimestamp = getSharedPreferences("play_stats", MODE_PRIVATE).getLong("last_played_${g.storageName}", 0L), - isReady = true, - isPaused = pausedGamePath == g.originalPath, - coverUrl = coverUrl, - metadataDeveloper = metadata?.developer ?: "", - metadataGenres = metadata?.genres ?: "", - metadataYear = metadata?.releaseYear ?: "", - ) - } - - private fun cachedGameSize(g: WorkspaceManager.GameInfo): Long { - gameSizeCache[g.storageName]?.let { return it } - getSharedPreferences("game_size_cache", MODE_PRIVATE) - .getLong(g.storageName, -1L) - .takeIf { it >= 0L } - ?.let { - gameSizeCache[g.storageName] = it - return it - } - warmGameSize(g) - return 0L - } - - private fun warmGameSize(g: WorkspaceManager.GameInfo) { - if (!gameSizeInFlight.add(g.storageName)) return - Thread { - val size = runCatching { - val dir = File(g.originalPath) - if (dir.isDirectory) dir.walkTopDown().filter { it.isFile }.sumOf { it.length() } else dir.length() - }.getOrDefault(0L) - getSharedPreferences("game_size_cache", MODE_PRIVATE) - .edit() - .putLong(g.storageName, size) - .apply() - runOnUiThread { - gameSizeCache[g.storageName] = size - gameSizeInFlight.remove(g.storageName) - } - }.start() - } - - private fun metadataTitleMatches(installedTitle: String, metadataTitle: String): Boolean { - val installed = normalizedTitle(installedTitle) - val metadata = normalizedTitle(metadataTitle) - if (installed.isBlank() || metadata.isBlank()) return false - if (installed == metadata) return true - if (installed.length >= 6 && (installed.contains(metadata) || metadata.contains(installed))) return true - val installedTokens = installed.split(" ").filter { it.length > 1 }.toSet() - val metadataTokens = metadata.split(" ").filter { it.length > 1 }.toSet() - if (installedTokens.isEmpty()) return false - return installedTokens.intersect(metadataTokens).size >= minOf(2, installedTokens.size) - } - - private fun normalizedTitle(value: String): String = - value.lowercase() - .replace("&", " and ") - .replace(Regex("\\[[^]]*]"), " ") - .replace(Regex("\\([^)]*\\)"), " ") - .replace(Regex("[^a-z0-9]+"), " ") - .trim() - .replace(Regex("\\s+"), " ") - - // ═══════════════════════════════════════════════════════ - // Overlay system — dimmed panels over home screen - // ═══════════════════════════════════════════════════════ - - /** - * Adds a dim overlay on top of the home screen containing [panel]. - * [panel] fills the available area with margins so the dock stays visible. - * [dismissOnBgClick] controls whether tapping the dim background dismisses. - */ - private fun showOverlay(panel: View, dismissOnBgClick: Boolean = true) { - // Remove any existing overlay - activeOverlay?.let { rootContainer.removeView(it); activeOverlay = null } - if (android.os.Build.VERSION.SDK_INT >= 31) { - homeContentView?.setRenderEffect( - android.graphics.RenderEffect.createBlurEffect( - 10f, - 10f, - android.graphics.Shader.TileMode.CLAMP, - ), - ) - } - - val wrapper = FrameLayout(this).apply { - // Semi-transparent black dims the home screen underneath - setBackgroundColor(Color.argb(218, 0, 0, 0)) - - // Start below final position so it slides up while fading in - alpha = 0f - translationY = resources.displayMetrics.heightPixels * 0.08f - animate().alpha(1f).translationY(0f).setDuration(250).start() - - // Panel fills available space with margins so the dock peeks through - val lp = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - lp.setMargins(dp(8), dp(20), dp(8), dp(74)) - addView(panel, lp) - - // Prevent clicks on the panel from reaching the dim bg - panel.isClickable = true - - // Tap on dim background to dismiss overlay - if (dismissOnBgClick) { - setOnClickListener { dismissOverlay() } - } - } - rootContainer.addView(wrapper, - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT) - persistentDock.bringToFront() - activeOverlay = wrapper - if (controllerNavigationEnabled) { - rootContainer.post { enableControllerNavigation(wrapper) } - } - } - - /** - * Fades out the active overlay, removes it, then runs [onDismissed]. - * Default callback refreshes the home screen. - */ - private fun dismissOverlay(onDismissed: () -> Unit = {}) { - activeOverlay?.let { overlay -> - overlay.animate().alpha(0f).translationY(resources.displayMetrics.heightPixels * 0.08f).setDuration(200).withEndAction { - rootContainer.removeView(overlay) - activeOverlay = null - if (android.os.Build.VERSION.SDK_INT >= 31) { - homeContentView?.setRenderEffect(null) - } - onDismissed() - }.start() - } - } - - /** Density-independent pixels helper. */ - private fun dp(v: Int): Int = (v * resources.displayMetrics.density).toInt() - - private fun applyImmersiveMode(force: Boolean = false) { - val now = SystemClock.uptimeMillis() - val cutoutChanged = lastAppliedCutoutMode != settings.displayCutoutMode - if (!force && !cutoutChanged && now - lastImmersiveApplyAt < 350L) return - lastImmersiveApplyAt = now - - if (!immersiveDecorConfigured) { - WindowCompat.setDecorFitsSystemWindows(window, false) - WindowCompat.getInsetsController(window, window.decorView).systemBarsBehavior = - WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - immersiveDecorConfigured = true - } - WindowCompat.getInsetsController(window, window.decorView) - .hide(WindowInsetsCompat.Type.systemBars()) - - if (Build.VERSION.SDK_INT >= 28 && cutoutChanged) { - window.attributes = window.attributes.apply { - layoutInDisplayCutoutMode = if (settings.displayCutoutMode == DisplayCutoutMode.EDGE_TO_EDGE) { - android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - } else { - android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - } - } - } - lastAppliedCutoutMode = settings.displayCutoutMode - } - - private fun enableControllerNavigation(root: View) { - val clickables = mutableListOf() - fun visit(view: View) { - if (view.isClickable && view.visibility == View.VISIBLE) { - view.isFocusable = true - view.isFocusableInTouchMode = false - clickables += view - } - if (view is ViewGroup) { - for (i in 0 until view.childCount) visit(view.getChildAt(i)) - } - } - visit(root) - if (currentFocus == null || currentFocus == rootContainer) { - clickables.firstOrNull()?.requestFocus() - } - } - - private fun ensureControllerNavigation() { - if (!controllerNavigationEnabled) { - controllerNavigationEnabled = true - } - enableControllerNavigation(activeOverlay ?: rootContainer) - } - - private fun disableControllerNavigation(root: View) { - fun visit(view: View) { - if (view.isClickable && view !is android.widget.EditText) { - view.isFocusable = false - view.isFocusableInTouchMode = false - } - if (view is ViewGroup) { - for (i in 0 until view.childCount) visit(view.getChildAt(i)) - } - } - visit(root) - controllerNavigationEnabled = false - } - - private fun performFocusedClick(): Boolean { - val target = currentFocus?.takeIf { it.isClickable && it.visibility == View.VISIBLE } - ?: firstClickable(rootContainer) - return if (target != null) { - target.performClick() - true - } else false - } - - private fun firstClickable(view: View): View? { - if (view.isClickable && view.visibility == View.VISIBLE) return view - if (view is ViewGroup) { - for (i in 0 until view.childCount) { - firstClickable(view.getChildAt(i))?.let { return it } - } - } - return null - } - - private fun cycleSortMode() { - currentSort = when (currentSort) { - SortMode.DATE_ADDED -> SortMode.NAME_ASC - SortMode.NAME_ASC -> SortMode.NAME_DESC - SortMode.NAME_DESC -> SortMode.RECENT - SortMode.RECENT -> SortMode.DATE_ADDED - } - Toast.makeText(this, "Sort: ${sortLabel(currentSort)}", Toast.LENGTH_SHORT).show() - showHome() - } - - private fun cycleEngineFilter() { - val installedEngines = games.map { it.engineType } - .filter { it != EngineType.UNKNOWN } - .distinct() - .sortedBy { it.label } - activeEngineFilter = if (installedEngines.isEmpty()) { - null - } else { - val currentIndex = installedEngines.indexOf(activeEngineFilter) - if (currentIndex < 0) installedEngines.first() - else installedEngines.getOrNull(currentIndex + 1) - } - Toast.makeText(this, "Filter: ${activeEngineFilter?.label ?: "All games"}", Toast.LENGTH_SHORT).show() - showHome() - } - - private fun cycleCardLayout() { - homeCardLayout = homeCardLayout.next() - getSharedPreferences("runestone-settings-v1", MODE_PRIVATE) - .edit() - .putString("homeCardLayout", homeCardLayout.name) - .apply() - Toast.makeText(this, "Layout: ${homeCardLayout.name.lowercase().replace('_', ' ')}", Toast.LENGTH_SHORT).show() - showHome() - } - - private fun sortLabel(sort: SortMode): String = when (sort) { - SortMode.NAME_ASC -> "Name A-Z" - SortMode.NAME_DESC -> "Name Z-A" - SortMode.RECENT -> "Recently played" - SortMode.DATE_ADDED -> "Date added" - } - - private fun showSplash() { - val splash = FrameLayout(this).apply { - setBackgroundColor(Color.rgb(3, 3, 4)) - layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - - val titleText = TextView(this@MainActivity).apply { - text = "RUNESTONE" - setTextColor(Theme.active.accent) // ACCENT color - textSize = 32f - typeface = Typeface.create("serif", Typeface.BOLD) - letterSpacing = 0.3f - gravity = Gravity.CENTER - } - addView(titleText, FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER)) - - // Subtitle - val sub = TextView(this@MainActivity).apply { - text = "Multi-Engine Game Launcher" - setTextColor(Color.argb(140, 180, 160, 130)) - textSize = 13f - letterSpacing = 0.2f - gravity = Gravity.CENTER - } - val subLp = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER) - subLp.topMargin = dp(60) - addView(sub, subLp) - - alpha = 0f - } - rootContainer.addView(splash, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - splashView = splash - - // Fade in quickly, stay visible as loading mask - splash.animate().alpha(1f).setDuration(300).start() - } - - private fun dismissSplash() { - val splash = splashView ?: return - splashView = null - splash.post { - splash.animate().alpha(0f).setDuration(300).withEndAction { - rootContainer.removeView(splash) - showHome() - }.start() - } - } - - // ═══════════════════════════════════════════════════════ - // Screen navigation - // ═══════════════════════════════════════════════════════ - - private fun showHome() { - Log.i(TAG, "showHome") - manageFilesVisible = false - activeImportProgressView = null - - // Remove any displayed overlay - activeOverlay?.let { - rootContainer.removeView(it) - activeOverlay = null - } - - // Remove old home content - homeContentView?.let { rootContainer.removeView(it) } - - var filtered = if (activeEngineFilter != null) { - games.filter { it.engineType == activeEngineFilter } - } else games - if (searchQuery.isNotEmpty()) { - filtered = filtered.filter { it.displayName.contains(searchQuery, ignoreCase = true) } - } - filtered = when (currentSort) { - SortMode.NAME_ASC -> filtered.sortedBy { it.displayName.lowercase() } - SortMode.NAME_DESC -> filtered.sortedByDescending { it.displayName.lowercase() } - SortMode.RECENT -> filtered // TODO: Track play history for sorting - SortMode.DATE_ADDED -> filtered.sortedByDescending { java.io.File(it.originalPath).parentFile?.lastModified() ?: 0L } - } - val cards = filtered.map { toCardInfo(it) }.map { card -> - // Keep custom cover if already set - if (card.coverUrl != null) return@map card - // First try to find matching cover from available games by title - val availableCoverUrl = availableGames.firstOrNull { - it.title.equals(card.displayName, ignoreCase = true) || - it.title.contains(card.displayName, ignoreCase = true) || - card.displayName.contains(it.title, ignoreCase = true) - }?.coverUrl - - // If not found in available games, check metadata cache - val coverUrl = availableCoverUrl ?: gameMetadataCache[card.displayName]?.coverUrl - - card.copy(coverUrl = coverUrl) - } - - val pausedGame = cards.find { it.isPaused } - - val homeView = HomeScreen(this).create( - games = cards, - onPlay = { playGame(it) }, - onManage = { showPerGameSettings(it) }, - onAddGame = { startFolderImport() }, - onBrowse = { showAvailableGames() }, - onManageAll = { showManageFiles() }, - onSettings = { showSettings() }, - onApplyFilters = { engine, search, sort -> - activeEngineFilter = engine - searchQuery = search - currentSort = sort - showHome() - }, - activeFilter = activeEngineFilter, - activeSearch = searchQuery, - currentSort = currentSort, - pausedGame = pausedGame, - uiMode = settings.uiMode, - cardLayout = homeCardLayout, - showGameName = settings.showGameName, - onLongPress = { game -> - HomeScreen(this).showInspectOverlay(game, { playGame(it) }, { showPerGameSettings(it) }) - }, - onCardLayoutChanged = { layout -> - homeCardLayout = layout - getSharedPreferences("runestone-settings-v1", MODE_PRIVATE) - .edit() - .putString("homeCardLayout", layout.name) - .apply() - showHome() - }, - onResume = if (pausedGame != null) {{ playGame(pausedGame.storageName) }} else null, - onStop = if (pausedGame != null) {{ storageName -> - val game = games.find { it.storageName == storageName } - if (game != null) { - Log.i(TAG, "STOP game: $storageName path=${game.originalPath}") - // Record play session - val playStats = getSharedPreferences("play_stats", MODE_PRIVATE) - val sessionStart = playStats.getLong("session_start_${storageName}", 0L) - if (sessionStart > 0L) { - val elapsed = (System.currentTimeMillis() - sessionStart) / 1000 - val total = playStats.getLong("total_${storageName}", 0L) - playStats.edit() - .putLong("total_${storageName}", total + elapsed) - .putLong("last_played_${storageName}", System.currentTimeMillis()) - .remove("session_start_${storageName}") - .apply() - } - pausedGamePath = null - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .remove("paused_game").apply() - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .putString("kill_game", storageName).apply() - refreshGames() - // Small delay to let game activity finish before showing home - rootContainer.postDelayed({ - showHome() - }, 100) - } - }} else null, - ) - // Add at index 0 so overlays (added later) sit on top - rootContainer.addView(homeView, 0, - ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)) - homeContentView = homeView - if (controllerNavigationEnabled) { - rootContainer.post { enableControllerNavigation(rootContainer) } - } - scheduleMetadataWarmup(cards) - } - - private fun scheduleMetadataWarmup(cards: List) { - val targets = cards - .asSequence() - .filter { it.coverUrl == null } - .filter { !gameMetadataCache.containsKey(it.displayName) } - .filter { it.storageName !in metadataWarmupInFlight } - .take(3) - .toList() - if (targets.isEmpty()) return - targets.forEach { metadataWarmupInFlight.add(it.storageName) } - rootContainer.postDelayed({ - val configService = com.runestone.app.data.GameConfigService(this, workspaceManager) - targets.forEach { card -> - metadataService.fetchAndApplyMetadata( - gameTitle = card.displayName, - storageName = card.storageName, - configService = configService, - ) { section -> - runOnUiThread { - metadataWarmupInFlight.remove(card.storageName) - section?.let { - gameMetadataCache[card.displayName] = GameMetadataService.GameMetadata( - title = it.gameTitle, - description = it.description, - coverUrl = it.coverUrl, - localCoverPath = it.localCoverPath, - screenshots = emptyList(), - releaseDate = it.releaseYear, - developer = it.developer, - publisher = it.publisher, - genres = it.genres.split(",").map { genre -> genre.trim() }.filter { genre -> genre.isNotEmpty() }, - rating = null, - source = it.metadataSource, - ) - } - } - } - } - }, 750L) - } - - private fun showManageFiles(storageName: String? = null) { - Log.i(TAG, "showManageFiles: focused=$storageName") - manageFilesVisible = true - val allGames = games.map { ManageFilesScreen.GameInfo(it.storageName, it.displayName, it.engineType, it.fileCount) } - val mgGames = if (storageName != null) { - allGames.filter { it.storageName == storageName } - } else allGames - showOverlay( - ManageFilesScreen(this).create( - games = mgGames, - storageByGame = storageCache, - isStorageRefreshing = false, - importMessage = importMessage, - onImport = { sName -> startFolderImport(sName) }, - onDelete = { sName -> confirmRemoveGameData(sName) }, - onViewSaves = { sName -> viewSaves(sName) }, - onChangeEngine = { sName -> showEnginePicker(sName) }, - onPerGameSettings = { sName -> showPerGameSettings(sName) }, - onBack = { dismissOverlay() }, - ), - ) - if (storageName == null) refreshStorageReport() - } - - private fun refreshStorageReport() { - val snapshot = games.map { it.storageName } - Thread { - val report = snapshot.associateWith { storageReporter.collect(it) } - runOnUiThread { - storageCache = report - if (manageFilesVisible) { - val mgGames = games.map { ManageFilesScreen.GameInfo(it.storageName, it.displayName, it.engineType, it.fileCount) } - showOverlay( - ManageFilesScreen(this).create( - games = mgGames, - storageByGame = storageCache, - isStorageRefreshing = false, - importMessage = importMessage, - onImport = { sName -> startFolderImport(sName) }, - onDelete = { sName -> confirmRemoveGameData(sName) }, - onViewSaves = { sName -> viewSaves(sName) }, - onChangeEngine = { sName -> showEnginePicker(sName) }, - onPerGameSettings = { sName -> showPerGameSettings(sName) }, - onBack = { dismissOverlay() }, - ), - ) - } - } - }.start() - } - - private fun clearRuntimeCache() { - val runtimeDir = java.io.File(filesDir, "runtime") - if (runtimeDir.exists()) { - runtimeDir.deleteRecursively() - } - val cacheDir = java.io.File(filesDir, "cache") - if (cacheDir.exists()) { - cacheDir.deleteRecursively() - } - } - - private fun showSettings() { - manageFilesVisible = false - showOverlay( - SettingsScreen(this).create( - settings = settings, - onSettingsChanged = { newSettings -> - val cutoutChanged = settings.displayCutoutMode != newSettings.displayCutoutMode - settings = newSettings - settingsStore.save(newSettings) - applyImmersiveMode(force = cutoutChanged) - if (cutoutChanged) { - ViewCompat.requestApplyInsets(rootContainer) - } - }, - onBack = { dismissOverlay() }, - onResetDefaults = { - settings = RunnerSettings() - settingsStore.save(settings) - showSettings() - }, - onClearRuntimeCache = { - clearRuntimeCache() - }, - ), - ) - } - - private fun showPerGameSettings(storageName: String) { - manageFilesVisible = false - val game = games.find { it.storageName == storageName } ?: return - val configService = com.runestone.app.data.GameConfigService(this, workspaceManager) - val config = configService.loadPerGame(storageName) - - showOverlay( - PerGameSettingsScreen(this).create( - gameTitle = game.displayName, - config = config, - storageName = storageName, - onConfigChanged = { newConfig -> - configService.savePerGame(storageName, newConfig) - }, - onBack = { dismissOverlay() }, - onPickCover = { resultCallback -> - pendingCoverStorage = storageName - pendingCoverCallback = resultCallback - val intent = android.content.Intent(android.content.Intent.ACTION_OPEN_DOCUMENT).apply { - addCategory(android.content.Intent.CATEGORY_OPENABLE) - type = "image/*" - putExtra(android.content.Intent.EXTRA_ALLOW_MULTIPLE, false) - } - startActivityForResult(intent, REQUEST_COVER_IMAGE) - }, - onFetchMetadata = { resultCallback -> - val fetched = AtomicBoolean(false) - metadataService.fetchAndApplyMetadata( - gameTitle = game.displayName, - storageName = storageName, - configService = configService, - forceFresh = true, - ) { section -> - if (section != null && !fetched.getAndSet(true)) { - resultCallback(true) - runOnUiThread { - gameMetadataCache.remove(game.displayName) - dismissOverlay { - refreshGames() - showPerGameSettings(storageName) - } - } - } else if (!fetched.getAndSet(true)) { - resultCallback(false) - } - } - }, - onInstallPatch = { zipCallback -> - pendingPatchStorage = storageName - pendingPatchCallback = zipCallback - val intent = android.content.Intent(android.content.Intent.ACTION_OPEN_DOCUMENT).apply { - addCategory(android.content.Intent.CATEGORY_OPENABLE) - type = "application/zip" - putExtra(android.content.Intent.EXTRA_ALLOW_MULTIPLE, false) - } - startActivityForResult(intent, REQUEST_PATCH_ZIP) - }, - ), - ) - } - private fun showAvailableGames() { - manageFilesVisible = false - availableGamesScrollY = 0 - isLoadingGames = true - gamesErrorMessage = null - val installedTitles = installedStoreKeys() - renderAvailableGamesScreen(installedGameTitles = installedTitles) - - sourcesManager.fetchGamesFromSources { games, error -> - runOnUiThread { - availableGames = games - hydrateStoreDownloadStates() - isLoadingGames = false - gamesErrorMessage = error - val installedTitles = installedStoreKeys() - renderAvailableGamesScreen(installedGameTitles = installedTitles) - enrichStoreMetadata() - } - } - } - - private fun enrichStoreMetadata() { - val targets = availableGames - .filter { it.coverUrl == null && it.title.isNotBlank() && it.id !in storeMetadataInFlight } - .take(6) - if (targets.isEmpty()) { - storeMetadataLoading = false + if (!onboardingComplete) { + showOnboarding() return } - storeMetadataLoading = true - renderAvailableGamesScreen() - targets.forEach { game -> - storeMetadataInFlight.add(game.id) - metadataService.fetchMetadataAsync(game.rawgQuery ?: game.title, game.engine) { metadata -> - runOnUiThread { - storeMetadataInFlight.remove(game.id) - if (storeMetadataInFlight.isEmpty()) { - storeMetadataLoading = false - scheduleStoreMetadataRender() - } - } - if (metadata == null) return@fetchMetadataAsync - val cover = metadata.localCoverPath?.let { "local:$it" } ?: metadata.coverUrl - if (cover.isNullOrBlank()) return@fetchMetadataAsync - runOnUiThread { - availableGames = availableGames.map { - if (it.id == game.id) it.copy( - coverUrl = cover, - description = it.description ?: metadata.description, - tags = if (it.tags.isNotEmpty()) it.tags else metadata.genres, - ) else it - } - scheduleStoreMetadataRender() - } - } - } - } - private fun hydrateStoreDownloadStates() { - availableGames.forEach { game -> - val state = downloadManager.getState(game.id) - when (state) { - DownloadManager.DownloadState.IDLE -> Unit - DownloadManager.DownloadState.COMPLETED -> { - val outputFile = downloadManager.getOutputFile(game.id) - if (outputFile.isFile && game.id !in installProgressMap) { - downloadProgressMap[game.id] = DownloadManager.DownloadProgress( - bytesDownloaded = outputFile.length(), - totalBytes = outputFile.length(), - speed = 0f, - state = state, - ) - startExtraction(game.id, outputFile.absolutePath) - } - } - else -> downloadProgressMap[game.id] = DownloadManager.DownloadProgress( - bytesDownloaded = downloadManager.getDownloadedBytes(game.id), - totalBytes = downloadManager.getTotalBytes(game.id), - speed = 0f, - state = state, - ) - } - } - } - - private fun scheduleStoreMetadataRender() { - if (storeMetadataRenderScheduled) return - storeMetadataRenderScheduled = true - rootContainer.postDelayed({ - storeMetadataRenderScheduled = false - if (activeOverlay != null) renderAvailableGamesScreen() - }, 250L) - } - - private fun renderAvailableGamesScreen(installedGameTitles: Set? = null) { - val titles = installedGameTitles ?: installedStoreKeys() - showOverlay( - AvailableGamesScreen(this).create( - games = availableGames, - isLoading = isLoadingGames, - isMetadataLoading = storeMetadataLoading || storeMetadataInFlight.isNotEmpty(), - errorMessage = gamesErrorMessage, - downloadStates = downloadProgressMap, - installStates = installProgressMap, - installedGameTitles = titles, - initialScrollY = availableGamesScrollY, - onScrollYChanged = { availableGamesScrollY = it }, - onRefresh = { showAvailableGames() }, - onManageSources = { showSources() }, - onProviderSettings = { showProviderSettings() }, - onDownload = { handleDownload(it) }, - onPauseDownload = { handlePauseDownload(it) }, - onBack = { dismissOverlay() }, - ), + navController = OverlayNavigationController( + activity = this, + callbacks = navCallbacks, + settingsStore = settingsStore, + workspaceManager = workspaceManager, + metadataService = metadataService, + downloadManager = downloadManager, + sourcesManager = sourcesManager, + saveManager = saveManager, + storageReporter = storageReporter, + installStateStore = com.runestone.app.workspace.InstallStateStore(workspaceManager), + storeCoordinator = storeCoordinator, + importManager = importManager, + sessionManager = sessionManager, ) - } - private fun installedStoreKeys(): Set { - return games.flatMap { game -> - listOf(game.displayName, game.storageName) - }.toSet() - } + navController.rootContainer = rootContainer + navController.homeCardLayout = homeCardLayout + navController.gameMetadataCache = gameMetadataCache + navController.games = games + navController.settings = settings + sessionManager.warmCache() - private fun showSources() { - manageFilesVisible = false - showOverlay( - SourcesScreen(this).create( - sources = sourcesManager.getSources(), - onAddSource = { url -> - runCatching { sourcesManager.addSource(url) } - .onFailure { Toast.makeText(this, it.message ?: "Invalid source URL", Toast.LENGTH_SHORT).show() } - showSources() - }, - onRemoveSource = { id -> - sourcesManager.removeSource(id) - showSources() - }, - onBack = { dismissOverlay() }, - ), - ) - } + navController.showSplash() - private fun showProviderSettings() { - manageFilesVisible = false - showOverlay( - ProviderSettingsScreen(this).create( - sources = sourcesManager.getSources(), - onBack = { dismissOverlay() }, - onUsePublicCatalogue = { - runCatching { sourcesManager.addPublicCatalogue() } - .onFailure { - Toast.makeText( - this, - it.message ?: "Invalid catalogue URL", - Toast.LENGTH_SHORT, - ).show() - } - showProviderSettings() - }, - onManageSources = { showSources() }, - onClearAll = { - sourcesManager.clearSources() - showProviderSettings() - }, - ), - ) - } - - private fun showImportProgress(message: String) { - Log.i(TAG, "showImportProgress: $message") - importMessage = message - val progressView = ImportProgressScreen(this).create(title = message) - activeImportProgressView = progressView - // No bg-click dismiss — an active import must not be dismissed - showOverlay(progressView.root, dismissOnBgClick = false) - } - - // ═══════════════════════════════════════════════════════ - // Game operations - // ═══════════════════════════════════════════════════════ - - private fun playGame(storageName: String) { - val game = games.find { it.storageName == storageName } ?: return - - val isMinimized = getSharedPreferences("runestone", MODE_PRIVATE) - .getBoolean("game_minimized", false) - if (isMinimized && pausedGamePath != null && pausedGamePath == game.originalPath) { - Log.i(TAG, "RESUME: $storageName") - pausedGamePath = null - getSharedPreferences("runestone", MODE_PRIVATE).edit() - .remove("paused_game") - .remove("game_minimized") - .apply() - // Just finish this activity to bring GameActivity back to front - finish() - return - } - - Log.i(TAG, "playGame: $storageName path=${game.originalPath}") - pausedGamePath = game.originalPath - startPlaySession(storageName, game.originalPath) - - val effectiveSettings = com.runestone.app.data.GameConfigService(this, workspaceManager) - .resolveRunnerSettings(storageName) - GameActivity.start(this, game.originalPath, game.engineType.name, effectiveSettings, storageName) - } - - private fun startFolderImport(requestedName: String? = null) { - Log.i(TAG, "startFolderImport: requestedName=$requestedName") - importMessage = null - pendingImportStorage = requestedName - importBrowserStack.clear() - importBrowserShowLocations = false - showGameFolderBrowser() - } - - private fun requestStorageAccess() { - val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply { - addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) - addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) - } - startActivityForResult(intent, REQUEST_IMPORT_FOLDER) - } + rootContainer.post { refreshGames() } - private fun showGameFolderBrowser() { - val browser = SafStorageBrowser(contentResolver) - val roots = browser.listRoots() - if (!importBrowserShowLocations && importBrowserStack.isEmpty() && roots.isNotEmpty()) { - val preferred = roots.firstOrNull { it.name.equals(settings.defaultGameFolder, ignoreCase = true) } - ?: roots.first() - importBrowserStack += browser.describeFolder(preferred.documentUri) - } - val current = importBrowserStack.lastOrNull() - val entries = current?.let { runCatching { browser.listEntries(it.uri) }.getOrDefault(emptyList()) } ?: emptyList() - showOverlay( - GameFolderBrowserScreen(this).create( - roots = roots, - currentFolder = current, - entries = entries, - pathSegments = importBrowserStack.map { it.name }, - canNavigateUp = importBrowserStack.size > 1, - onBack = { - if (current == null) { - importBrowserShowLocations = false - dismissOverlay() - } else if (importBrowserStack.size > 1) { - importBrowserStack.removeAt(importBrowserStack.lastIndex) - showGameFolderBrowser() - } else { - importBrowserShowLocations = true - importBrowserStack.clear() - showGameFolderBrowser() - } - }, - onUp = { - if (importBrowserStack.size > 1) { - importBrowserStack.removeAt(importBrowserStack.lastIndex) - showGameFolderBrowser() - } else { - importBrowserShowLocations = true - importBrowserStack.clear() - showGameFolderBrowser() - } - }, - onOpenRoot = { storageRoot -> - importBrowserShowLocations = false - importBrowserStack.clear() - importBrowserStack += browser.describeFolder(storageRoot.documentUri) - showGameFolderBrowser() - }, - onOpenFolder = { folder -> - importBrowserStack += folder - showGameFolderBrowser() - }, - onImportFolder = { folder -> importSelectedFolder(folder.uri) }, - onGrantStorage = { requestStorageAccess() }, - ), + persistentDock = HomeScreen(this).createDockBar( + onHome = { navController.dismissOverlay() }, + onAdd = { importManager.startFolderImport() }, + onBrowse = { storeCoordinator.showAvailableGames() }, + onManage = { navController.showManageFiles() }, + onSettings = { navController.showSettings(settings) }, ) - } - - private fun importSelectedFolder(folderUri: Uri) { - if (pendingImportStorage != null) { - val backedUp = saveManager.syncFromActive(pendingImportStorage!!) - Log.i(TAG, "Backed up $backedUp saves for $pendingImportStorage before import") - } - - showImportProgress("Importing game") - Log.i(TAG, "importSelectedFolder: progress screen shown, starting thread uri=$folderUri") - - Thread { - val importer = SafGameImporter( - contentResolver = contentResolver, - workspaceManager = workspaceManager, - rtpManager = com.runestone.app.rtp.RtpManager(this@MainActivity), - onProgress = { msg -> - runOnUiThread { - Log.d(TAG, "import progress: $msg") - val pv = activeImportProgressView - if (pv != null) { - when { - msg.startsWith("Copying game") -> { pv.phaseView.text = msg; pv.fileView.text = ""; pv.countView.text = "" } - msg.startsWith("Copying ") -> pv.fileView.text = msg.removePrefix("Copying ") - else -> { pv.phaseView.text = msg; pv.fileView.text = "" } - } - } - importMessage = msg - } - }, - ) - val result = importer.importTree(folderUri, pendingImportStorage) - Log.i(TAG, "import finished: $result") - - runOnUiThread { - pendingImportStorage = null - importBrowserStack.clear() - when (result) { - is SafImportResult.Success -> { - Log.i(TAG, "Import OK: ${result.storageName} (${result.fileCount} files)") - importMessage = null - saveManager.restoreToActive(result.storageName) - activeImportProgressView = null - workspaceManager.invalidateGameScanCache() - refreshGames() - dismissOverlay { - showHome() - if (result.missingRtps.isNotEmpty()) { - showRtpDownloadDialog(result.storageName, result.missingRtps) - } - } - } - is SafImportResult.Failure -> { - Log.e(TAG, "Import FAILED: ${result.reason}") - val pv = activeImportProgressView - if (pv != null) { pv.phaseView.text = "[FAIL] Import failed"; pv.fileView.text = result.reason; pv.countView.text = "" } - importMessage = "Import failed: ${result.reason}" - android.os.Handler(mainLooper).postDelayed({ - refreshGames(); activeImportProgressView = null - dismissOverlay { showManageFiles() } - }, 3000) - } - } - } - }.start() - } - - private fun showRtpDownloadDialog(storageName: String, missing: List) { - if (missing.isEmpty()) return - - val pack = missing.first() - val totalBytes = pack.approxBytes - val sizeMb = totalBytes / 1024 / 1024 - - val eulaMessage = buildString { - append("This game uses the ").append(pack.displayName).append(",\n") - append("which isn't installed on your device.\n\n") - append("Size: ~").append(sizeMb).append(" MB (downloaded once, shared with all games)\n\n") - append("By tapping DOWNLOAD, you confirm that you have read and agree to the ") - .append("Enterbrain/Kadokawa End User License Agreement for the ") - .append("RPG Maker Runtime Packages.\n\n") - append("Source: ").append(pack.sourceAttribution).append("\n") - append("URL: ").append(pack.sourceUrl) - } - - val dialog = android.app.AlertDialog.Builder(this) - .setTitle("Runtime Package Required") - .setMessage(eulaMessage) - .setPositiveButton("DOWNLOAD") { _, _ -> - startRtpDownload(storageName, pack) - } - .setNegativeButton("LATER") { d, _ -> - d.dismiss() - showHome() - } - .setCancelable(true) - .create() - dialog.show() - } - - private fun startRtpDownload(storageName: String, pack: com.runestone.app.rtp.RtpPack) { - Log.i(TAG, "Starting RTP download: ${pack.id} for game=$storageName") - val installer = com.runestone.app.rtp.RtpInstaller(this@MainActivity) - showRtpDownloadProgressOverlay(pack) - installer.install(pack, object : com.runestone.app.rtp.RtpInstaller.Listener { - override fun onStatus(status: com.runestone.app.rtp.RtpInstaller.Status) { - runOnUiThread { handleRtpStatus(pack, status) } - } + rootContainer.addView(persistentDock, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, dp(58), android.view.Gravity.BOTTOM).apply { + setMargins(dp(10), 0, dp(10), dp(8)) }) + navController.persistentDock = persistentDock + handleAdbCommand(intent) } - private fun handleRtpStatus(pack: com.runestone.app.rtp.RtpPack, status: com.runestone.app.rtp.RtpInstaller.Status) { - when (status) { - is com.runestone.app.rtp.RtpInstaller.Status.Downloading -> { - val pct = if (status.total > 0) (status.bytes.toFloat() / status.total * 100).toInt() else 0 - rtpOverlayStatusText?.text = "Downloading ${pack.displayName}\n${pct}% (${status.bytes / 1024 / 1024} MB / ${status.total / 1024 / 1024} MB)" - rtpOverlayProgressBar?.progress = pct - } - is com.runestone.app.rtp.RtpInstaller.Status.Extracting -> { - rtpOverlayStatusText?.text = "Extracting ${pack.displayName}..." - rtpOverlayProgressBar?.progress = 100 - } - is com.runestone.app.rtp.RtpInstaller.Status.Installed -> { - rtpOverlayStatusText?.text = "${pack.displayName} ready." - rtpOverlayProgressBar?.progress = 100 - android.widget.Toast.makeText( - this, - "RTP installed. You can now launch the game.", - android.widget.Toast.LENGTH_LONG, - ).show() - dismissRtpDownloadOverlay() - } - is com.runestone.app.rtp.RtpInstaller.Status.Error -> { - rtpOverlayStatusText?.text = "RTP download failed:\n${status.message}" - rtpOverlayProgressBar?.progress = 0 - android.widget.Toast.makeText( - this, - "RTP download failed: ${status.message}", - android.widget.Toast.LENGTH_LONG, - ).show() - } - else -> Unit - } - } - - private var rtpOverlayStatusText: android.widget.TextView? = null - private var rtpOverlayProgressBar: android.widget.ProgressBar? = null - - private fun showRtpDownloadProgressOverlay(pack: com.runestone.app.rtp.RtpPack) { - // Tear down any existing overlay - dismissRtpDownloadOverlay() - - val container = android.widget.LinearLayout(this).apply { - orientation = android.widget.LinearLayout.VERTICAL - setPadding(40, 40, 40, 40) - } - val title = android.widget.TextView(this).apply { - text = "Runtime Package" - textSize = 18f - setTypeface(typeface, android.graphics.Typeface.BOLD) - } - val status = android.widget.TextView(this).apply { - text = "Downloading ${pack.displayName}..." - setPadding(0, 16, 0, 16) - } - val progress = android.widget.ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal).apply { - isIndeterminate = false - max = 100 - } - container.addView(title) - container.addView(status) - container.addView(progress) - rtpOverlayStatusText = status - rtpOverlayProgressBar = progress - - val dialog = android.app.AlertDialog.Builder(this) - .setView(container) - .setCancelable(false) - .setNegativeButton("HIDE") { d, _ -> d.dismiss() } - .create() - dialog.show() - activeRtpDialog = dialog - } - - private var activeRtpDialog: android.app.AlertDialog? = null - - private fun dismissRtpDownloadOverlay() { - activeRtpDialog?.dismiss() - activeRtpDialog = null - rtpOverlayStatusText = null - rtpOverlayProgressBar = null - } - - private fun confirmRemoveGameData(storageName: String) { - val game = games.find { it.storageName == storageName } - val name = game?.displayName ?: storageName - AlertDialog.Builder(this) - .setTitle("Remove $name data?") - .setMessage("This deletes the game files. Saves are kept in protected storage.") - .setNegativeButton("Cancel", null) - .setPositiveButton("Remove data") { _, _ -> - saveManager.syncFromActive(storageName) - workspaceManager.removeGame(storageName, keepSaves = true) - importMessage = "Removed $name game data. Saves were kept." - refreshGames() - showManageFiles() - } - .show() - } + private fun showOnboarding() { + val screen = com.runestone.app.ui.OnboardingScreen(this) + val onboardingView = screen.create { result -> + // Save settings + getSharedPreferences("runestone-settings-v1", MODE_PRIVATE).edit() + .putBoolean("onboarding_complete", true) + .putString("locale", result.locale) + .putString("rawgApiKey", result.rawgApiKey) + .apply() - private fun viewSaves(storageName: String) { - val saves = saveManager.listSaves(storageName) - val gameTitle = games.find { it.storageName == storageName }?.displayName ?: storageName - val message = if (saves.isEmpty()) { - "No save files were detected yet." - } else { - saves.joinToString("\n") { "${it.name} (${formatBytes(it.length())})" } - } - AlertDialog.Builder(this) - .setTitle("Save Files - $gameTitle") - .setMessage(message) - .setNegativeButton("Close", null) - .setPositiveButton("Actions") { _, _ -> - showSaveActions(storageName, gameTitle) + // Disable unselected optional engines + val allOptional = setOf("godot", "renpy") + for (engine in allOptional) { + com.runestone.app.engine.EngineRegistry.setOptionalEnabled(this, engine, engine in result.selectedEngines) } - .show() - } - private fun showSaveActions(storageName: String, gameTitle: String) { - val actions = arrayOf( - "Sync protected copy", - "Backup now", - "Restore protected saves", - "Export ZIP", - "Import ZIP", - "View backups", - ) - AlertDialog.Builder(this) - .setTitle("Save Actions - $gameTitle") - .setItems(actions) { _, which -> - when (which) { - 0 -> { - val count = saveManager.syncFromActive(storageName) - Toast.makeText(this, "Synced $count save files into protected storage", Toast.LENGTH_SHORT).show() - } - 1 -> { - val result = saveManager.backupSaves(storageName, "manual") - val message = if (result.count > 0) { - "Backed up ${result.count} save files" - } else { - "No save files detected" - } - Toast.makeText(this, message, Toast.LENGTH_SHORT).show() - } - 2 -> confirmRestoreSaves(storageName, gameTitle) - 3 -> showSaveExportPicker(storageName) - 4 -> showSaveImportPicker(storageName) - 5 -> showSaveBackups(storageName, gameTitle) - } + // Save RAWG key to settings + if (result.rawgApiKey.isNotEmpty()) { + settings = settings.copy(rawgApiKey = result.rawgApiKey) + settingsStore.save(settings) } - .setNegativeButton("Cancel", null) - .show() - } - private fun confirmRestoreSaves(storageName: String, gameTitle: String) { - AlertDialog.Builder(this) - .setTitle("Restore saves to $gameTitle?") - .setMessage("Protected saves will be copied back into the installed game folder and may overwrite matching live save files.") - .setNegativeButton("Cancel", null) - .setPositiveButton("Restore") { _, _ -> - val count = saveManager.restoreToActive(storageName) - Toast.makeText(this, "Restored $count save files", Toast.LENGTH_SHORT).show() + // Trigger RTP install if requested + if (result.installRtp) { + Toast.makeText(this@MainActivity, "RTP will be downloaded when you launch a game that needs it.", Toast.LENGTH_LONG).show() } - .show() - } - private fun showSaveExportPicker(storageName: String) { - pendingSaveExportStorage = storageName - val stamp = java.text.SimpleDateFormat("yyyyMMdd-HHmm", java.util.Locale.US) - .format(java.util.Date()) - val filename = "${storageName}-saves-$stamp.zip" - val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "application/zip" - putExtra(Intent.EXTRA_TITLE, filename) + // Recreate activity to start normal flow + recreate() } - startActivityForResult(intent, REQUEST_SAVE_EXPORT_ZIP) + rootContainer.addView(onboardingView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) } - private fun showSaveImportPicker(storageName: String) { - pendingSaveImportStorage = storageName - val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "application/zip" - putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false) + private fun requestNotificationPermissionIfNeeded() { + if (Build.VERSION.SDK_INT >= 33 && + checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != android.content.pm.PackageManager.PERMISSION_GRANTED + ) { + requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS), 9104) } - startActivityForResult(intent, REQUEST_SAVE_IMPORT_ZIP) } - private fun showSaveBackups(storageName: String, gameTitle: String) { - val backups = saveManager.listSaveBackups(storageName) - val message = if (backups.isEmpty()) { - "No save backups have been created yet." - } else { - backups.joinToString("\n") { - "${it.name}: ${it.fileCount} files (${formatBytes(it.bytes)})" + private var gamesCollected = false + + private fun refreshGames() { + gameListViewModel.refreshGames() + if (gamesCollected) return + gamesCollected = true + AppScope.main.launch { + gameListViewModel.uiState.collectLatest { state -> + games = gameListViewModel.games.value + navController.games = games + navController.controllerNavigationEnabled = controllerNavigationEnabled + Log.i(TAG, "refreshGames: found ${state.cards.size} games") + if (!state.isLoading) navController.dismissSplash() } } - AlertDialog.Builder(this) - .setTitle("Save Backups - $gameTitle") - .setMessage(message) - .setPositiveButton("OK", null) - .show() } - private fun showEnginePicker(storageName: String) { - val game = games.find { it.storageName == storageName } - val currentEngine = game?.engineType - val engines = EngineType.values().filter { it != EngineType.UNKNOWN } - val items = engines.map { "${it.label} (${it.name})" }.toTypedArray() + private fun showHome() { + navController.showHome( + uiMode = settings.uiMode, + showGameName = settings.showGameName, + ) + } - AlertDialog.Builder(this) - .setTitle("Change Engine — ${game?.displayName ?: storageName}") - .setSingleChoiceItems(items, engines.indexOf(currentEngine)) { dialog, which -> - val selected = engines[which] - Log.i(TAG, "Engine override: $storageName -> $selected") - val state = installStateStore.load(storageName) ?: GameInstallState( - storageName = storageName, - engineType = selected, - fileCount = game?.fileCount ?: 0, - importedAtMillis = System.currentTimeMillis(), - ) - installStateStore.save(state.copy(engineOverride = selected)) - importMessage = "Engine set to ${selected.label}. Relaunch to apply." - refreshGames() - showManageFiles() - dialog.dismiss() + private fun createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + NOTIFICATION_CHANNEL, + "Downloads", + NotificationManager.IMPORTANCE_LOW + ).apply { + description = "Game download progress" } - .setNegativeButton("Reset to Auto", null) - .show() + val notificationManager = getSystemService(NotificationManager::class.java) + notificationManager.createNotificationChannel(channel) + } } - private fun handleCoverImageResult(resultCode: Int, data: Intent?) { - val callback = pendingCoverCallback - pendingCoverCallback = null - val storageName = pendingCoverStorage - pendingCoverStorage = null + private val storeCallbacks = object : StoreCoordinator.Callbacks { + override fun refreshGames() = this@MainActivity.refreshGames() + override fun refreshStoreUI() { + navController.renderAvailableGamesScreen() + } + override fun pushDetailOverlayUpdate(gameId: String) { + val overlay = navController.detailOverlay ?: return + val game = storeCoordinator.availableGames.firstOrNull { it.id == gameId } ?: return + overlay.update( + game = game, + progress = storeCoordinator.downloadProgressMap[gameId], + installProgress = storeCoordinator.installProgressMap[gameId], + installedGameTitles = installedStoreKeys(), + ) + } + override fun installedStoreKeys(): Set = this@MainActivity.installedStoreKeys() + override fun getAvailableGames(): List = storeCoordinator.availableGames + override fun getGames(): List = games + override fun getDetailOverlay(): Any? = navController.detailOverlay + } - if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + private val importCallbacks = object : ImportManager.Callbacks { + override fun showOverlay(panel: View, dismissOnBgClick: Boolean) = navController.showOverlay(panel, dismissOnBgClick) + override fun dismissOverlay(onDismissed: () -> Unit) = navController.dismissOverlay(onDismissed) + override fun showHome() = this@MainActivity.showHome() + override fun showManageFiles(storageName: String?) = navController.showManageFiles(storageName) + override fun refreshGames() = this@MainActivity.refreshGames() + override fun showRtpDownloadDialog(storageName: String, missing: List) = + navController.showRtpDownloadDialog(storageName, missing) + override fun showImportProgress(message: String) = navController.showImportProgress(message) + override fun getGames(): List = games + override fun getSettingsDefaultGameFolder(): String = settings.defaultGameFolder + } - val uri = data.data!! - val coverDir = File(filesDir, "game_covers").apply { mkdirs() } - val destFile = File(coverDir, "${storageName}.jpg") - try { - val inputStream = contentResolver.openInputStream(uri) - ?: throw IllegalStateException("Unable to open selected cover image") - inputStream.use { input -> - destFile.outputStream().use { output -> - input.copyTo(output) - } - } - callback?.invoke(destFile.absolutePath) - runOnUiThread { showHome() } - } catch (e: Exception) { - android.util.Log.w(TAG, "Failed to save cover image", e) - runOnUiThread { - android.widget.Toast.makeText(this, "Failed to set cover image", android.widget.Toast.LENGTH_SHORT).show() - } - } + private fun installedStoreKeys(): Set { + return games.flatMap { game -> + listOf(game.displayName, game.storageName) + }.toSet() } - private fun handlePatchZipResult(resultCode: Int, data: Intent?) { - val callback = pendingPatchCallback - pendingPatchCallback = null - val storageName = pendingPatchStorage - pendingPatchStorage = null + private fun dp(v: Int): Int = (v * resources.displayMetrics.density).toInt() - if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + fun applyImmersiveMode(force: Boolean = false) { + val now = SystemClock.uptimeMillis() + val cutoutChanged = lastAppliedCutoutMode != settings.displayCutoutMode + if (!force && !cutoutChanged && now - lastImmersiveApplyAt < 350L) return + lastImmersiveApplyAt = now - val uri = data.data!! - val patchDir = File(cacheDir, "patch_zips").apply { mkdirs() } - val destFile = File(patchDir, "${storageName}_patch_${System.currentTimeMillis()}.zip") - try { - val inputStream = contentResolver.openInputStream(uri) - ?: throw IllegalStateException("Unable to open ZIP file") - inputStream.use { input -> - destFile.outputStream().use { output -> - input.copyTo(output) + if (!immersiveDecorConfigured) { + WindowCompat.setDecorFitsSystemWindows(window, false) + WindowCompat.getInsetsController(window, window.decorView).systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + immersiveDecorConfigured = true + } + WindowCompat.getInsetsController(window, window.decorView) + .hide(WindowInsetsCompat.Type.systemBars()) + + if (Build.VERSION.SDK_INT >= 28 && cutoutChanged) { + window.attributes = window.attributes.apply { + layoutInDisplayCutoutMode = if (settings.displayCutoutMode == DisplayCutoutMode.EDGE_TO_EDGE) { + android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES + } else { + android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT } } - callback?.invoke(destFile.absolutePath) - } catch (e: Exception) { - android.util.Log.w(TAG, "Failed to copy patch ZIP", e) - callback?.invoke("") - runOnUiThread { - android.widget.Toast.makeText(this, "Failed to read patch file", android.widget.Toast.LENGTH_SHORT).show() - } } + lastAppliedCutoutMode = settings.displayCutoutMode } - private fun handleSaveExportResult(resultCode: Int, data: Intent?) { - val storageName = pendingSaveExportStorage - pendingSaveExportStorage = null - - if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + private fun playGame(storageName: String) { + val game = games.find { it.storageName == storageName } ?: return - val uri = data.data!! - try { - val outputStream = contentResolver.openOutputStream(uri) - ?: throw IllegalStateException("Unable to open export destination") - val count = outputStream.use { output -> - saveManager.exportAllSavesZip(storageName, output) - } - Toast.makeText(this, "Exported $count save files", Toast.LENGTH_LONG).show() - } catch (e: Exception) { - Log.w(TAG, "Failed to export saves", e) - Toast.makeText(this, "Failed to export saves", Toast.LENGTH_SHORT).show() + val isMinimized = getSharedPreferences("runestone", MODE_PRIVATE) + .getBoolean("game_minimized", false) + if (isMinimized && pausedGamePath != null && pausedGamePath == game.originalPath) { + Log.i(TAG, "RESUME: $storageName") + pausedGamePath = null + getSharedPreferences("runestone", MODE_PRIVATE).edit() + .remove("paused_game") + .remove("game_minimized") + .apply() + finish() + return } - } - private fun handleSaveImportResult(resultCode: Int, data: Intent?) { - val storageName = pendingSaveImportStorage - pendingSaveImportStorage = null + Log.i(TAG, "playGame: $storageName path=${game.originalPath}") + pausedGamePath = game.originalPath + sessionManager.start(storageName, game.originalPath) - if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + val effectiveSettings = com.runestone.app.data.GameConfigService(this, workspaceManager) + .resolveRunnerSettings(storageName) + GameActivity.start(this, game.originalPath, game.engineType.name, effectiveSettings, storageName) + } - val uri = data.data!! - val importDir = File(cacheDir, "save_import_zips").apply { mkdirs() } - val destFile = File(importDir, "${storageName}_saves_${System.currentTimeMillis()}.zip") + private fun performDeleteGame(storageName: String, gameTitle: String, keepSaves: Boolean) { + Log.i(TAG, "performDeleteGame: storageName=$storageName keepSaves=$keepSaves") try { - val inputStream = contentResolver.openInputStream(uri) - ?: throw IllegalStateException("Unable to open selected save ZIP") - inputStream.use { input -> - destFile.outputStream().use { output -> - input.copyTo(output) - } - } - val count = saveManager.importSavesZip(storageName, destFile) - if (count > 0) { - Toast.makeText(this, "Imported $count save files", Toast.LENGTH_LONG).show() - } else { - Toast.makeText(this, "No save files found in the selected archive", Toast.LENGTH_LONG).show() - } + workspaceManager.removeGame(storageName, keepSaves = keepSaves) + Log.i(TAG, "performDeleteGame: removeGame returned for $storageName") } catch (e: Exception) { - Log.w(TAG, "Failed to import saves", e) - Toast.makeText(this, "Failed to import saves", Toast.LENGTH_SHORT).show() - } finally { - destFile.delete() + Log.e(TAG, "performDeleteGame: removeGame threw", e) } + refreshGames() + showHome() + val msg = if (keepSaves) "$gameTitle reinstalled. Saves kept." else "$gameTitle deleted." + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() } - private fun formatBytes(bytes: Long): String { - val gb = 1024.0 * 1024.0 * 1024.0 - val mb = 1024.0 * 1024.0 - val kb = 1024.0 - return when { - bytes >= gb -> String.format("%.2f GB", bytes / gb) - bytes >= mb -> String.format("%.1f MB", bytes / mb) - bytes >= kb -> String.format("%.1f KB", bytes / kb) - else -> "$bytes B" + override fun onResume() { + super.onResume() + applyImmersiveMode() + Log.i(TAG, "onResume importActive=${importManager.activeImportProgressView != null} initial=$initialLaunch overlay=${navController.activeOverlay != null}") + if (importManager.activeImportProgressView != null) return + if (initialLaunch) { + initialLaunch = false + return } - } - - // ═══════════════════════════════════════════════════════ - // Activity lifecycle - // ═══════════════════════════════════════════════════════ - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - Log.i(TAG, "onActivityResult: requestCode=$requestCode resultCode=$resultCode data=$data") - if (requestCode != REQUEST_IMPORT_FOLDER) { - if (requestCode == REQUEST_COVER_IMAGE) { - handleCoverImageResult(resultCode, data) - } else if (requestCode == REQUEST_PATCH_ZIP) { - handlePatchZipResult(resultCode, data) - } else if (requestCode == REQUEST_SAVE_EXPORT_ZIP) { - handleSaveExportResult(resultCode, data) - } else if (requestCode == REQUEST_SAVE_IMPORT_ZIP) { - handleSaveImportResult(resultCode, data) + if (navController.activeOverlay != null) return + val runestonePrefs = getSharedPreferences("runestone", MODE_PRIVATE) + if (runestonePrefs.getBoolean("game_minimized", false)) { + val minimizedPath = runestonePrefs.getString("paused_game", null) + val activePath = runestonePrefs.getString("active_game_path", null) + if (minimizedPath != null && minimizedPath == activePath) { + pausedGamePath = minimizedPath + refreshGames() + showHome() + return } + sessionManager.clearResumeState("invalid_minimized_state") + pausedGamePath = null + refreshGames() + showHome() return } - if (resultCode != Activity.RESULT_OK) { - Log.w(TAG, "onActivityResult: result not OK") + if (!runestonePrefs.contains("active_game_storage")) { return } - val treeUri = data?.data ?: run { - Log.w(TAG, "onActivityResult: no data URI"); return + sessionManager.finalize("hub_resumed") + pausedGamePath = null + refreshGames() + showHome() + } + + override fun onBackPressed() { + if (importManager.activeImportProgressView != null) { + Toast.makeText(this, "Operation still running.", Toast.LENGTH_SHORT).show() + } else if (navController.activeOverlay != null) { + navController.dismissOverlay() + } else if (navController.activeEngineFilter != null) { + navController.activeEngineFilter = null + showHome() + } else { + super.onBackPressed() } - Log.i(TAG, "onActivityResult: treeUri=$treeUri pending=$pendingImportStorage") + } + + override fun onDestroy() { + storeCoordinator.unregisterDownloadReceiver() + super.onDestroy() + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + handleAdbCommand(intent) + } - runCatching { contentResolver.takePersistableUriPermission( - treeUri, data.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) - ) } - val browser = SafStorageBrowser(contentResolver) - importBrowserStack.clear() - runCatching { - importBrowserStack += browser.describeFolder(browser.rootFromTreeUri(treeUri).documentUri) - }.onFailure { error -> - Log.w(TAG, "Could not open authorized storage location", error) - Toast.makeText(this, "Could not open that storage location", Toast.LENGTH_SHORT).show() + override fun onWindowFocusChanged(hasFocus: Boolean) { + super.onWindowFocusChanged(hasFocus) + if (hasFocus) { + applyImmersiveMode() + if (controllerNavigationEnabled) { + rootContainer.post { navController.enableControllerNavigation(rootContainer) } + } } - showGameFolderBrowser() } override fun dispatchKeyEvent(event: KeyEvent): Boolean { @@ -2130,31 +508,31 @@ class MainActivity : Activity() { return true } KeyEvent.KEYCODE_BUTTON_START -> { - startFolderImport() + importManager.startFolderImport() return true } KeyEvent.KEYCODE_BUTTON_SELECT -> { - showManageFiles() + navController.showManageFiles() return true } KeyEvent.KEYCODE_BUTTON_X -> { - showAvailableGames() + storeCoordinator.showAvailableGames() return true } KeyEvent.KEYCODE_BUTTON_Y -> { - cycleEngineFilter() + navController.cycleEngineFilter() return true } KeyEvent.KEYCODE_BUTTON_L1 -> { - cycleCardLayout() + navController.cycleCardLayout() return true } KeyEvent.KEYCODE_BUTTON_R1 -> { - cycleSortMode() + navController.cycleSortMode() return true } KeyEvent.KEYCODE_BUTTON_MODE -> { - showSettings() + navController.showSettings(settings) return true } } @@ -2162,8 +540,8 @@ class MainActivity : Activity() { return super.dispatchKeyEvent(event) } - override fun dispatchTouchEvent(event: android.view.MotionEvent): Boolean { - if (event.action == android.view.MotionEvent.ACTION_DOWN && controllerNavigationEnabled) { + override fun dispatchTouchEvent(event: MotionEvent): Boolean { + if (event.action == MotionEvent.ACTION_DOWN && controllerNavigationEnabled) { disableControllerNavigation(rootContainer) } return super.dispatchTouchEvent(event) @@ -2174,20 +552,64 @@ class MainActivity : Activity() { return super.dispatchGenericMotionEvent(event) } - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - setIntent(intent) - handleAdbCommand(intent) + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + Log.i(TAG, "onActivityResult: requestCode=$requestCode resultCode=$resultCode") + if (requestCode == ImportManager.REQUEST_IMPORT_FOLDER) { + importManager.handleImportFolderResult(resultCode, data) + } else if (requestCode == ImportManager.REQUEST_COVER_IMAGE) { + importManager.handleCoverImageResult(resultCode, data) + } else if (requestCode == ImportManager.REQUEST_PATCH_ZIP) { + importManager.handlePatchZipResult(resultCode, data) + } else if (requestCode == ImportManager.REQUEST_SAVE_EXPORT_ZIP) { + importManager.handleSaveExportResult(resultCode, data) + } else if (requestCode == ImportManager.REQUEST_SAVE_IMPORT_ZIP) { + importManager.handleSaveImportResult(resultCode, data) + } } - override fun onWindowFocusChanged(hasFocus: Boolean) { - super.onWindowFocusChanged(hasFocus) - if (hasFocus) { - applyImmersiveMode() - if (controllerNavigationEnabled) { - rootContainer.post { enableControllerNavigation(rootContainer) } + // ═══════════════════════════════════════════════════════ + // Controller navigation + // ═══════════════════════════════════════════════════════ + + private fun ensureControllerNavigation() { + if (!controllerNavigationEnabled) { + controllerNavigationEnabled = true + } + navController.enableControllerNavigation(navController.activeOverlay ?: rootContainer) + } + + private fun disableControllerNavigation(root: View) { + fun visit(view: View) { + if (view.isClickable && view !is android.widget.EditText) { + view.isFocusable = false + view.isFocusableInTouchMode = false + } + if (view is ViewGroup) { + for (i in 0 until view.childCount) visit(view.getChildAt(i)) + } + } + visit(root) + controllerNavigationEnabled = false + } + + private fun performFocusedClick(): Boolean { + val target = currentFocus?.takeIf { it.isClickable && it.visibility == View.VISIBLE } + ?: firstClickable(rootContainer) + return if (target != null) { + target.performClick() + true + } else false + } + + private fun firstClickable(view: View): View? { + if (view.isClickable && view.visibility == View.VISIBLE) return view + if (view is ViewGroup) { + for (i in 0 until view.childCount) { + firstClickable(view.getChildAt(i))?.let { return it } } } + return null } private fun KeyEvent.isControllerShortcut(): Boolean { @@ -2291,65 +713,18 @@ class MainActivity : Activity() { ?: Toast.makeText(this, "No installed games to launch", Toast.LENGTH_SHORT).show() } ADB_OPEN_HOME -> showHome() - ADB_OPEN_MANAGE -> showManageFiles() - ADB_OPEN_SETTINGS -> showSettings() - ADB_OPEN_STORE -> showAvailableGames() + ADB_OPEN_MANAGE -> navController.showManageFiles() + ADB_OPEN_SETTINGS -> navController.showSettings(settings) + ADB_OPEN_STORE -> storeCoordinator.showAvailableGames() + else -> { + refreshGames() + val storageName = command.removePrefix(ADB_OPEN_GAME_PREFIX).takeIf { it != command } + ?: command.takeIf { candidate -> games.any { it.storageName == candidate } } + if (storageName != null) { + playGame(storageName) + } + } } }, 650) } - - override fun onResume() { - super.onResume() - applyImmersiveMode() - Log.i(TAG, "onResume importActive=${activeImportProgressView != null} initial=$initialLaunch overlay=${activeOverlay != null}") - if (activeImportProgressView != null) return - if (initialLaunch) { - initialLaunch = false - return - } - if (activeOverlay != null) return - val runestonePrefs = getSharedPreferences("runestone", MODE_PRIVATE) - if (runestonePrefs.getBoolean("game_minimized", false)) { - val minimizedPath = runestonePrefs.getString("paused_game", null) - val activePath = runestonePrefs.getString("active_game_path", null) - if (minimizedPath != null && minimizedPath == activePath) { - pausedGamePath = minimizedPath - refreshGames() - showHome() - return - } - clearRuntimeResumeState(reason = "invalid_minimized_state") - refreshGames() - showHome() - return - } - if (!runestonePrefs.contains("active_game_storage")) { - return - } - finalizeActivePlaySession(reason = "hub_resumed") - pausedGamePath = null - refreshGames() - showHome() - } - - override fun onBackPressed() { - if (activeImportProgressView != null) { - Toast.makeText(this, "Operation still running.", Toast.LENGTH_SHORT).show() - } else if (activeOverlay != null) { - dismissOverlay() - } else if (activeEngineFilter != null) { - activeEngineFilter = null - showHome() - } else { - super.onBackPressed() - } - } - - override fun onDestroy() { - if (downloadReceiverRegistered) { - unregisterReceiver(downloadReceiver) - downloadReceiverRegistered = false - } - super.onDestroy() - } } diff --git a/app/src/main/java/com/runestone/app/RunestoneApplication.kt b/app/src/main/java/com/runestone/app/RunestoneApplication.kt index acca8af..a12b624 100644 --- a/app/src/main/java/com/runestone/app/RunestoneApplication.kt +++ b/app/src/main/java/com/runestone/app/RunestoneApplication.kt @@ -17,6 +17,7 @@ import android.os.Process import android.util.Log import android.content.Context import com.runestone.app.engine.EngineRegistry +import com.runestone.app.util.I18n /** * Application class for Runestone. @@ -31,6 +32,16 @@ class RunestoneApplication : Application() { private const val TAG = "Runestone" } + override fun attachBaseContext(base: Context) { + val locale = base.getSharedPreferences("runestone-settings-v1", MODE_PRIVATE) + .getString("locale", "en") ?: "en" + val localeObj = java.util.Locale(locale) + java.util.Locale.setDefault(localeObj) + val config = android.content.res.Configuration(base.resources.configuration) + config.setLocale(localeObj) + super.attachBaseContext(base.createConfigurationContext(config)) + } + override fun onCreate() { super.onCreate() @@ -52,6 +63,8 @@ class RunestoneApplication : Application() { // Initialize all built-in engine plugins EngineRegistry.initDefaults(this) + com.runestone.app.ui.theme.ThemeProvider.init(this) + com.runestone.app.ui.Theme.bind(com.runestone.app.ui.theme.ThemeProvider.getInstance(this)) val engineCount = EngineRegistry.all().size Log.i(TAG, "Initialized $engineCount engine plugins") diff --git a/app/src/main/java/com/runestone/app/data/GameConfigService.kt b/app/src/main/java/com/runestone/app/data/GameConfigService.kt index d5fcaf2..56572bc 100644 --- a/app/src/main/java/com/runestone/app/data/GameConfigService.kt +++ b/app/src/main/java/com/runestone/app/data/GameConfigService.kt @@ -77,6 +77,8 @@ class GameConfigService( json.optJSONObject("performance")?.let { perf -> result = result.copy( frameSkip = if (perf.has("frameSkip")) perf.optInt("frameSkip", if (result.frameSkip) 1 else 0) > 0 else result.frameSkip, + useWebgl2 = if (perf.has("useWebgl2")) perf.optBoolean("useWebgl2", result.useWebgl2) else result.useWebgl2, + forceCanvas = if (perf.has("forceCanvas")) perf.optBoolean("forceCanvas", result.forceCanvas) else result.forceCanvas, ) } json.optJSONObject("fonts")?.let { fonts -> @@ -146,6 +148,10 @@ class GameConfigService( resolutionScale = override(o.resolutionScale, 1.0f, b.resolutionScale), brightness = override(o.brightness, 1.0f, b.brightness), contrast = override(o.contrast, 1.0f, b.contrast), + gamma = override(o.gamma, 1.0f, b.gamma), + saturation = override(o.saturation, 1.0f, b.saturation), + sharpness = override(o.sharpness, 0.0f, b.sharpness), + aspectMode = override(o.aspectMode, "fit_4_3", b.aspectMode), ) } diff --git a/app/src/main/java/com/runestone/app/data/PerGameConfig.kt b/app/src/main/java/com/runestone/app/data/PerGameConfig.kt index d288966..e113b11 100644 --- a/app/src/main/java/com/runestone/app/data/PerGameConfig.kt +++ b/app/src/main/java/com/runestone/app/data/PerGameConfig.kt @@ -214,6 +214,10 @@ data class VideoSection( val resolutionScale: Float = 1.0f, val brightness: Float = 1.0f, val contrast: Float = 1.0f, + val gamma: Float = 1.0f, + val saturation: Float = 1.0f, + val sharpness: Float = 0.0f, + val aspectMode: String = "fit_4_3", ) { companion object { fun fromJson(j: JSONObject?): VideoSection { @@ -227,6 +231,10 @@ data class VideoSection( resolutionScale = j.optDouble("resolutionScale", 1.0).toFloat(), brightness = j.optDouble("brightness", 1.0).toFloat(), contrast = j.optDouble("contrast", 1.0).toFloat(), + gamma = j.optDouble("gamma", 1.0).toFloat(), + saturation = j.optDouble("saturation", 1.0).toFloat(), + sharpness = j.optDouble("sharpness", 0.0).toFloat(), + aspectMode = j.optString("aspectMode", "fit_4_3"), ) } } @@ -239,6 +247,10 @@ data class VideoSection( put("resolutionScale", resolutionScale.toDouble()) put("brightness", brightness.toDouble()) put("contrast", contrast.toDouble()) + put("gamma", gamma.toDouble()) + put("saturation", saturation.toDouble()) + put("sharpness", sharpness.toDouble()) + put("aspectMode", aspectMode) } } @@ -289,6 +301,9 @@ data class PerformanceSection( val reduceShadows: Boolean = false, val reduceParticles: Boolean = false, val backgroundLoading: Boolean = true, + // WebGL rendering overrides (MV/MZ only). null = inherit from global. + val useWebgl2: Boolean? = null, + val forceCanvas: Boolean? = null, ) { companion object { fun fromJson(j: JSONObject?): PerformanceSection { @@ -303,6 +318,8 @@ data class PerformanceSection( reduceShadows = j.optBoolean("reduceShadows", false), reduceParticles = j.optBoolean("reduceParticles", false), backgroundLoading = j.optBoolean("backgroundLoading", true), + useWebgl2 = if (j.has("useWebgl2")) j.optBoolean("useWebgl2") else null, + forceCanvas = if (j.has("forceCanvas")) j.optBoolean("forceCanvas") else null, ) } } @@ -316,6 +333,8 @@ data class PerformanceSection( put("reduceShadows", reduceShadows) put("reduceParticles", reduceParticles) put("backgroundLoading", backgroundLoading) + if (useWebgl2 != null) put("useWebgl2", useWebgl2) + if (forceCanvas != null) put("forceCanvas", forceCanvas) } } diff --git a/app/src/main/java/com/runestone/app/data/RunnerSettings.kt b/app/src/main/java/com/runestone/app/data/RunnerSettings.kt index 99498e9..99ee633 100644 --- a/app/src/main/java/com/runestone/app/data/RunnerSettings.kt +++ b/app/src/main/java/com/runestone/app/data/RunnerSettings.kt @@ -82,12 +82,14 @@ data class RunnerSettings( val cropLeftY: Boolean = false, // RPG / MV-MZ (WebView) - val useWebgl2: Boolean = false, + val useWebgl2: Boolean = true, + val forceCanvas: Boolean = false, val decrypterAndReadfiles: Boolean = true, val usePreloadJs: Boolean = false, // HTML (WebView) - val useHttpServer: Boolean = false, + val useHttpServer: Boolean = true, + val useAsmjsEffekseer: Boolean = true, val preload: Boolean = true, val webgl: Boolean = true, val desktopMode: Boolean = false, diff --git a/app/src/main/java/com/runestone/app/data/db/Daos.kt b/app/src/main/java/com/runestone/app/data/db/Daos.kt new file mode 100644 index 0000000..5332384 --- /dev/null +++ b/app/src/main/java/com/runestone/app/data/db/Daos.kt @@ -0,0 +1,60 @@ +package com.runestone.app.data.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query + +@Dao +interface PlayStatsDao { + @Query("SELECT * FROM play_stats WHERE storageName = :storageName") + suspend fun get(storageName: String): PlayStatsEntity? + + @Query("SELECT * FROM play_stats") + suspend fun getAll(): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun upsert(stats: PlayStatsEntity) + + @Query("DELETE FROM play_stats WHERE storageName = :storageName") + suspend fun delete(storageName: String) + + @Query("UPDATE play_stats SET totalSeconds = totalSeconds + :seconds, sessionStartedAt = 0 WHERE storageName = :storageName") + suspend fun addPlayTime(storageName: String, seconds: Long) + + @Query("UPDATE play_stats SET lastPlayedAt = :now, sessionStartedAt = :now WHERE storageName = :storageName") + suspend fun touchLastPlayed(storageName: String, now: Long = System.currentTimeMillis()) + + @Query("UPDATE play_stats SET sessionStartedAt = :now WHERE storageName = :storageName") + suspend fun startSession(storageName: String, now: Long = System.currentTimeMillis()) +} + +@Dao +interface GameSizeCacheDao { + @Query("SELECT * FROM game_size_cache WHERE storageName = :storageName") + suspend fun get(storageName: String): GameSizeCacheEntity? + + @Query("SELECT * FROM game_size_cache") + suspend fun getAll(): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun upsert(cache: GameSizeCacheEntity) + + @Query("DELETE FROM game_size_cache WHERE storageName = :storageName") + suspend fun delete(storageName: String) +} + +@Dao +interface GameMetadataCacheDao { + @Query("SELECT * FROM game_metadata_cache WHERE cacheKey = :cacheKey") + suspend fun get(cacheKey: String): GameMetadataCacheEntity? + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun upsert(cache: GameMetadataCacheEntity) + + @Query("DELETE FROM game_metadata_cache WHERE cacheKey = :cacheKey") + suspend fun delete(cacheKey: String) + + @Query("DELETE FROM game_metadata_cache WHERE cachedAt < :expiredBefore") + suspend fun deleteOlderThan(expiredBefore: Long) +} diff --git a/app/src/main/java/com/runestone/app/data/db/Entities.kt b/app/src/main/java/com/runestone/app/data/db/Entities.kt new file mode 100644 index 0000000..fe7e09a --- /dev/null +++ b/app/src/main/java/com/runestone/app/data/db/Entities.kt @@ -0,0 +1,33 @@ +package com.runestone.app.data.db + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "play_stats") +data class PlayStatsEntity( + @PrimaryKey val storageName: String, + val totalSeconds: Long = 0, + val lastPlayedAt: Long = 0, + val sessionStartedAt: Long = 0, +) + +@Entity(tableName = "game_size_cache") +data class GameSizeCacheEntity( + @PrimaryKey val storageName: String, + val totalBytes: Long = 0, +) + +@Entity(tableName = "game_metadata_cache") +data class GameMetadataCacheEntity( + @PrimaryKey val cacheKey: String, + val title: String = "", + val description: String = "", + val coverUrl: String = "", + val localCoverPath: String = "", + val developer: String = "", + val publisher: String = "", + val genres: String = "", + val releaseYear: String = "", + val metadataSource: String = "", + val cachedAt: Long = System.currentTimeMillis(), +) diff --git a/app/src/main/java/com/runestone/app/data/db/RunestoneDatabase.kt b/app/src/main/java/com/runestone/app/data/db/RunestoneDatabase.kt new file mode 100644 index 0000000..07c4139 --- /dev/null +++ b/app/src/main/java/com/runestone/app/data/db/RunestoneDatabase.kt @@ -0,0 +1,35 @@ +package com.runestone.app.data.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase + +@Database( + entities = [PlayStatsEntity::class, GameSizeCacheEntity::class, GameMetadataCacheEntity::class], + version = 1, + exportSchema = false, +) +abstract class RunestoneDatabase : RoomDatabase() { + abstract fun playStatsDao(): PlayStatsDao + abstract fun gameSizeCacheDao(): GameSizeCacheDao + abstract fun gameMetadataCacheDao(): GameMetadataCacheDao + + companion object { + @Volatile + private var instance: RunestoneDatabase? = null + + fun getInstance(context: Context): RunestoneDatabase { + return instance ?: synchronized(this) { + instance ?: Room.databaseBuilder( + context.applicationContext, + RunestoneDatabase::class.java, + "runestone.db" + ) + .fallbackToDestructiveMigration() + .build() + .also { instance = it } + } + } + } +} diff --git a/app/src/main/java/com/runestone/app/engine/EasyRpgEngine.kt b/app/src/main/java/com/runestone/app/engine/EasyRpgEngine.kt index 9ecfa37..23e22eb 100644 --- a/app/src/main/java/com/runestone/app/engine/EasyRpgEngine.kt +++ b/app/src/main/java/com/runestone/app/engine/EasyRpgEngine.kt @@ -46,26 +46,37 @@ class EasyRpgEngine : GameEngine { } override fun canRun(gameFolder: File): Boolean { - if (!gameFolder.isDirectory) return false + return findProjectRoot(gameFolder) != null + } + + private fun hasEasyRpgSignature(folder: File): Boolean { + if (!folder.isDirectory) return false + val names = folder.listFiles()?.map { it.name.lowercase() }?.toSet() ?: return false + + return names.contains("rpg_rt.exe") && + (names.contains("rpg_rt.lmt") || names.contains("rpg_rt.ldb")) + } - val files = gameFolder.listFiles() ?: return false - val names = files.map { it.name }.toSet() + private fun findProjectRoot(gameFolder: File, maxDepth: Int = 3): File? { + if (hasEasyRpgSignature(gameFolder)) return gameFolder + if (maxDepth <= 0 || !gameFolder.isDirectory) return null - // RPG Maker 2000/2003 must have RPG_RT.exe and either .lmt or .ldb - return names.contains("RPG_RT.exe") && - (names.contains("RPG_RT.lmt") || names.contains("RPG_RT.ldb")) + return gameFolder.listFiles() + ?.filter { it.isDirectory } + ?.sortedWith(compareBy { if (it.name.equals("Data", ignoreCase = true)) 0 else 1 }.thenBy { it.name.length }) + ?.firstNotNullOfOrNull { child -> findProjectRoot(child, maxDepth - 1) } } override fun detect(gameFolder: File): EngineMetadata? { - if (!canRun(gameFolder)) return null + val projectRoot = findProjectRoot(gameFolder) ?: return null - val version = detectVersion(gameFolder) + val version = detectVersion(projectRoot) val engineVersion = when { version.contains("2003") -> "RGSS 2003" version.contains("2000") -> "RGSS 2000" else -> "EasyRPG" } - val title = detectTitleFromLdb(gameFolder) ?: gameFolder.name + val title = detectTitleFromLdb(projectRoot) ?: gameFolder.name return EngineMetadata( engine = id, diff --git a/app/src/main/java/com/runestone/app/engine/EngineRegistry.kt b/app/src/main/java/com/runestone/app/engine/EngineRegistry.kt index 76abe1a..a61ecec 100644 --- a/app/src/main/java/com/runestone/app/engine/EngineRegistry.kt +++ b/app/src/main/java/com/runestone/app/engine/EngineRegistry.kt @@ -109,12 +109,28 @@ object EngineRegistry { register(RenpyEngine()) // Ren'Py MIT // Optional engines (disabled by default, enable in Settings > Addons) - if (isOptionalEnabled(context, "godot")) register(GodotEngine()) // Godot MIT + if (isOptionalEnabled(context, "godot")) { + if (isPluginInstalled(context, "com.runestone.plugin.godot")) { + register(GodotEngine()) // Godot MIT + } else { + Log.w(TAG, "Godot plugin APK not installed. Download from GitHub releases.") + } + } register(UnityEngine()) // Unity desktop exports — detect-only register(UnrealEngine()) // Unreal desktop exports — detect-only register(ElectronEngine()) // Electron (desktop only) } + /** Check if a plugin APK is installed on the device */ + fun isPluginInstalled(context: Context, pluginPackage: String): Boolean { + return try { + context.packageManager.getPackageInfo(pluginPackage, 0) + true + } catch (e: android.content.pm.PackageManager.NameNotFoundException) { + false + } + } + /** Check if an optional engine is enabled in settings */ fun isOptionalEnabled(context: Context, engineId: String): Boolean { val prefs = context.getSharedPreferences("runestone-optional-engines", Context.MODE_PRIVATE) diff --git a/app/src/main/java/com/runestone/app/engine/GodotEngine.kt b/app/src/main/java/com/runestone/app/engine/GodotEngine.kt index 8f5d2ab..c5ee404 100644 --- a/app/src/main/java/com/runestone/app/engine/GodotEngine.kt +++ b/app/src/main/java/com/runestone/app/engine/GodotEngine.kt @@ -44,6 +44,19 @@ class GodotEngine : GameEngine { } override fun launch(context: Context, gameFolder: File, config: GameConfig) { + if (EngineRegistry.isPluginInstalled(context, "com.runestone.plugin.godot")) { + Log.i(TAG, "Launching Godot via plugin: ${gameFolder.name}") + val intent = android.content.Intent("com.runestone.plugin.LAUNCH_GAME").apply { + putExtra("game_path", gameFolder.absolutePath) + addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK) + } + try { + context.startActivity(intent) + return + } catch (e: android.content.ActivityNotFoundException) { + Log.w(TAG, "Godot plugin not found, falling back to unavailable dialog") + } + } Log.i(TAG, "Godot unavailable: ${gameFolder.name}") UnavailableEngine.show(context, "Godot") } diff --git a/app/src/main/java/com/runestone/app/engine/LocalServer.kt b/app/src/main/java/com/runestone/app/engine/LocalServer.kt new file mode 100644 index 0000000..b6ba135 --- /dev/null +++ b/app/src/main/java/com/runestone/app/engine/LocalServer.kt @@ -0,0 +1,287 @@ +package com.runestone.app.engine + +import java.io.BufferedReader +import java.io.File +import java.io.FileInputStream +import java.io.InputStream +import java.io.InputStreamReader +import java.io.OutputStream +import java.net.InetAddress +import java.net.ServerSocket +import java.net.Socket +import java.net.URLDecoder +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicLong + +/** + * Tiny single-purpose HTTP server for serving one game directory over + * `http://127.0.0.1:PORT/` with the COOP/COEP headers required for + * cross-origin isolation. + * + * Why this exists: the Android system WebView treats `file://` as a + * null origin and refuses to set COOP/COEP on the main document, which + * means `crossOriginIsolated` is false and `SharedArrayBuffer` is + * unavailable. WebAssembly modules that use shared memory (Effekseer's + * WASM runtime, in particular) silently fail to instantiate, which + * hangs the game's main loop on a loading spinner with no console + * error. + * + * Serving the game over `http://127.0.0.1:PORT/` from a single + * configured root gives the WebView a real origin. We then set + * `Cross-Origin-Opener-Policy: same-origin` and + * `Cross-Origin-Embedder-Policy: require-corp` on every response, + * which enables `crossOriginIsolated` and unlocks `SharedArrayBuffer`. + * The CORP header is also added so cross-origin-isolated subresource + * requests from the page's own scripts succeed. + * + * Security: the server binds to `127.0.0.1` only. It serves exactly + * one configured root directory. Path traversal is rejected (any URL + * with `..` segments returns 404). There is no way for a remote + * network host to reach it. + * + * Lifecycle: the owning activity should call [start] in onCreate and + * [stop] in onDestroy. The server runs on daemon threads and exits + * cleanly when the socket is closed. + */ +class LocalServer(private val rootDir: File) { + + private var serverSocket: ServerSocket? = null + private val running = AtomicLong(0) + private val connectionCounter = AtomicLong(0) + + /** Local port the server is listening on. 0 before [start] or after [stop]. */ + val port: Int get() = serverSocket?.localPort ?: 0 + + /** Bind and start accepting connections. Idempotent. */ + fun start() { + if (running.getAndSet(1L) == 1L) return + // We bind to all interfaces (0.0.0.0), not just 127.0.0.1, because + // the Android WebView treats 127.0.0.1 / localhost as a "null + // origin" and refuses to enable cross-origin isolation (COOP+COEP) + // for responses from there. Binding to the device's Wi-Fi IP + // gives the WebView a real origin and the isolation works. + // The server only serves the configured root directory and is + // reachable only from the device itself or the same LAN. + val sock = ServerSocket(0, BACKLOG, InetAddress.getByName("0.0.0.0")) + serverSocket = sock + val acceptThread = Thread({ acceptLoop(sock) }, "Runestone-LocalServer-accept") + acceptThread.isDaemon = true + acceptThread.start() + } + + /** Stop the server. Safe to call from any thread. */ + fun stop() { + if (running.getAndSet(0L) == 0L) return + try { serverSocket?.close() } catch (_: Exception) {} + serverSocket = null + } + + private fun acceptLoop(sock: ServerSocket) { + while (running.get() == 1L) { + val client = try { sock.accept() } catch (_: Exception) { return } + val id = connectionCounter.incrementAndGet() + val handler = Thread({ handleClient(client, id) }, "Runestone-LocalServer-$id") + handler.isDaemon = true + handler.start() + } + } + + private fun handleClient(socket: Socket, id: Long) { + try { + socket.use { s -> + val input = s.getInputStream() + val output = s.getOutputStream() + + // Read request line + headers (cap at 16 KB to avoid + // malicious clients flooding us with headers). + val headerBytes = readHeaders(input) + if (headerBytes.isEmpty()) { + writeEmpty(output, 400, "Bad Request") + return + } + val headerText = String(headerBytes, Charsets.ISO_8859_1) + val firstLine = headerText.lineSequence().firstOrNull() ?: run { + writeEmpty(output, 400, "Bad Request") + return + } + val parts = firstLine.split(' ') + if (parts.size < 2) { + writeEmpty(output, 400, "Bad Request") + return + } + val method = parts[0] + val rawPath = parts[1] + if (method != "GET" && method != "HEAD") { + writeEmpty(output, 405, "Method Not Allowed") + return + } + + val file = resolveFile(rawPath) ?: run { + writeEmpty(output, 404, "Not Found") + return + } + if (!file.exists() || !file.isFile) { + writeEmpty(output, 404, "Not Found") + return + } + + val mime = mimeFor(file.name) + val headers = buildResponseHeaders(mime, file.length()) + writeResponse(output, method == "HEAD", 200, "OK", headers, file) + } + } catch (e: Exception) { + // Don't crash the thread on a single bad request. + try { + writeEmpty(socket.getOutputStream(), 500, "Internal Server Error") + } catch (_: Exception) { } + } + } + + private fun readHeaders(input: InputStream): ByteArray { + val buf = ByteArray(4096) + val out = java.io.ByteArrayOutputStream() + var total = 0 + while (total < MAX_HEADER_BYTES) { + val n = try { input.read(buf) } catch (_: Exception) { return out.toByteArray() } + if (n < 0) break + out.write(buf, 0, n) + total += n + val cur = out.toByteArray() + if (cur.size >= 4) { + // Look for end-of-headers CRLF CRLF + val needle = "\r\n\r\n".toByteArray(Charsets.ISO_8859_1) + if (endsWith(cur, needle)) { + return cur + } + } + } + return out.toByteArray() + } + + private fun endsWith(haystack: ByteArray, needle: ByteArray): Boolean { + if (haystack.size < needle.size) return false + for (i in 0 until needle.size) { + if (haystack[haystack.size - needle.size + i] != needle[i]) return false + } + return true + } + + /** + * Resolve a request path to a file under [rootDir]. Rejects path + * traversal (any segment equal to `..` or absolute paths). + */ + internal fun resolveFile(rawPath: String): File? { + val noQuery = rawPath.substringBefore('?') + val noFrag = noQuery.substringBefore('#') + if (noFrag.contains("..")) return null + if (noFrag.startsWith("/")) { + val rel = noFrag.substring(1) + if (rel.startsWith("/") || rel.startsWith("\\")) return null + val f = File(rootDir, rel) + // Double-check the resolved file is still under rootDir. + val canonicalRoot = try { rootDir.canonicalPath } catch (_: Exception) { rootDir.absolutePath } + val canonicalFile = try { f.canonicalPath } catch (_: Exception) { f.absolutePath } + if (!canonicalFile.startsWith(canonicalRoot)) return null + return f + } + return null + } + + private fun mimeFor(name: String): String = when { + name.endsWith(".html", true) || name.endsWith(".htm", true) -> "text/html" + name.endsWith(".js", true) || name.endsWith(".mjs", true) -> "application/javascript" + name.endsWith(".css", true) -> "text/css" + name.endsWith(".json", true) -> "application/json" + name.endsWith(".wasm", true) -> "application/wasm" + name.endsWith(".png", true) -> "image/png" + name.endsWith(".jpg", true) || name.endsWith(".jpeg", true) -> "image/jpeg" + name.endsWith(".gif", true) -> "image/gif" + name.endsWith(".webp", true) -> "image/webp" + name.endsWith(".svg", true) -> "image/svg+xml" + name.endsWith(".ico", true) -> "image/x-icon" + name.endsWith(".ogg", true) -> "audio/ogg" + name.endsWith(".opus", true) -> "audio/ogg" + name.endsWith(".mp3", true) -> "audio/mpeg" + name.endsWith(".wav", true) -> "audio/wav" + name.endsWith(".m4a", true) -> "audio/mp4" + name.endsWith(".mp4", true) -> "video/mp4" + name.endsWith(".webm", true) -> "video/webm" + name.endsWith(".txt", true) -> "text/plain" + name.endsWith(".xml", true) -> "application/xml" + name.endsWith(".ttf", true) -> "font/ttf" + name.endsWith(".otf", true) -> "font/otf" + name.endsWith(".woff", true) -> "font/woff" + name.endsWith(".woff2", true) -> "font/woff2" + else -> "application/octet-stream" + } + + private fun buildResponseHeaders(mime: String, length: Long): List> { + val headers = mutableListOf( + "Content-Type" to mime, + "Content-Length" to length.toString(), + "Connection" to "close", + "Cache-Control" to "no-store", + // COOP + COEP: enable cross-origin isolation. Without these, + // the page cannot use SharedArrayBuffer, which is required + // by Effekseer's WASM runtime and any other WASM module + // that needs shared memory. + // + // COOP `same-origin-allow-popups` is needed (not + // `same-origin`) because the WebView opens the page from + // a null origin (about:blank), and `same-origin` rejects + // that opener. `same-origin-allow-popups` accepts null-origin + // openers but still isolates the document. + // + // COEP `require-corp` requires every subresource to have + // CORP. We set CORP on every response from this server, so + // this works. `credentialless` is a less-strict alternative + // for cross-origin subresources without CORP, but in our + // case every subresource is same-origin and has CORP, so + // `require-corp` is the correct value. + "Cross-Origin-Opener-Policy" to "same-origin-allow-popups", + "Cross-Origin-Embedder-Policy" to "require-corp", + // CORP: allow our own subresources to be loaded by a + // cross-origin-isolated page. We set this on every + // response so even subresources pulled in by Service + // Workers / Workers / SharedWorkers succeed. + "Cross-Origin-Resource-Policy" to "cross-origin", + ) + return headers + } + + private fun writeResponse( + output: OutputStream, + headOnly: Boolean, + status: Int, + reason: String, + headers: List>, + body: File, + ) { + writeStatusLine(output, status, reason) + for ((k, v) in headers) { + output.write("$k: $v\r\n".toByteArray(Charsets.ISO_8859_1)) + } + output.write("\r\n".toByteArray(Charsets.ISO_8859_1)) + output.flush() + if (headOnly) return + FileInputStream(body).use { it.copyTo(output) } + output.flush() + } + + private fun writeEmpty(output: OutputStream, status: Int, reason: String) { + writeStatusLine(output, status, reason) + output.write("Content-Length: 0\r\n".toByteArray(Charsets.ISO_8859_1)) + output.write("Connection: close\r\n".toByteArray(Charsets.ISO_8859_1)) + output.write("\r\n".toByteArray(Charsets.ISO_8859_1)) + output.flush() + } + + private fun writeStatusLine(output: OutputStream, status: Int, reason: String) { + output.write("HTTP/1.1 $status $reason\r\n".toByteArray(Charsets.ISO_8859_1)) + } + + companion object { + private const val BACKLOG = 50 + private const val MAX_HEADER_BYTES = 16 * 1024 + } +} diff --git a/app/src/main/java/com/runestone/app/engine/NativeGameLauncher.kt b/app/src/main/java/com/runestone/app/engine/NativeGameLauncher.kt new file mode 100644 index 0000000..240b155 --- /dev/null +++ b/app/src/main/java/com/runestone/app/engine/NativeGameLauncher.kt @@ -0,0 +1,191 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.engine + +import android.app.Activity +import android.app.AlertDialog +import android.content.Intent +import android.util.Log +import com.runestone.app.data.EngineType +import com.runestone.app.data.RunnerSettings +import java.io.File + +class NativeGameLauncher( + private val activity: Activity, + private val settings: RunnerSettings, + private val engineType: EngineType, +) { + companion object { + private const val TAG = "Runestone" + } + + fun launchRgssGame(gameDir: File) { + Log.i(TAG, "launchRgssGame: $gameDir (engine=$engineType)") + + try { + val rtpManager = com.runestone.app.rtp.RtpManager(activity) + val gameTitle = readGameTitle(gameDir) ?: gameDir.name + com.runestone.app.runtime.RuntimeConfigWriter() + .writeMkxpConfig(activity, gameDir, gameTitle, rtpManager) + } catch (t: Throwable) { + Log.w(TAG, "Failed to write mkxp.json; launching without RTP support", t) + } + + val intent = Intent().apply { + setClassName(activity, "com.hatkid.mkxpz.MainActivity") + putExtra("com.runestone.app.extra.GAME_PATH", gameDir.absolutePath) + putExtra("com.runestone.app.extra.LAYOUT_MODE", settings.layoutMode.name) + putExtra("com.runestone.app.extra.TOUCH_OPACITY", settings.touchOpacity) + putExtra("com.runestone.app.extra.TOUCH_SCALE", settings.touchScale) + putExtra("com.runestone.app.extra.HAPTICS_ENABLED", settings.hapticsEnabled) + putExtra("com.runestone.app.extra.HAPTIC_INTENSITY", settings.hapticIntensity) + putExtra("com.runestone.app.extra.HIDE_VIRTUAL_GAMEPAD", settings.hideVirtualGamepad) + putExtra("com.runestone.app.extra.TEXT_SCALE", settings.textScale) + putExtra("com.runestone.app.extra.INTEGER_SCALING", settings.integerScaling) + putExtra("com.runestone.app.extra.DISPLAY_CUTOUT_MODE", settings.displayCutoutMode.name) + putExtra("com.runestone.app.extra.CONTROLLER_HOME_SHORTCUT", settings.controllerHomeShortcut.name) + putExtra("com.runestone.app.extra.CONTROLLER_PRESET", settings.controllerPreset) + putExtra("com.runestone.app.extra.CONTROLLER_BACKEND", "RunestoneCanvasV2") + } + activity.startActivity(intent) + activity.finish() + } + + fun launchEasyRpgGame(gameDir: File) { + val projectDir = findEasyRpgProjectRoot(gameDir) ?: gameDir + Log.i(TAG, "EasyRPG bundled: launching ${gameDir.name} project=${projectDir.absolutePath}") + val configDir = File(activity.filesDir, "easyrpg").apply { mkdirs() } + val saveDir = File(configDir, "saves").apply { mkdirs() } + val logFile = File(configDir, "easyrpg-player.log") + val commandLine = arrayOf( + "--project-path", projectDir.absolutePath, + "--config-path", configDir.absolutePath, + "--save-path", saveDir.absolutePath, + "--log-file", logFile.absolutePath, + ) + val intent = Intent().apply { + setClassName(activity.packageName, "org.easyrpg.player.player.EasyRpgPlayerActivity") + putExtra("project_path", projectDir.absolutePath) + putExtra("command_line", commandLine) + putExtra("save_path", saveDir.absolutePath) + putExtra("log_file", logFile.absolutePath) + putExtra("com.runestone.app.extra.GAME_PATH", projectDir.absolutePath) + putExtra("com.runestone.app.extra.LAYOUT_MODE", settings.layoutMode.name) + putExtra("com.runestone.app.extra.TOUCH_OPACITY", settings.touchOpacity) + putExtra("com.runestone.app.extra.TOUCH_SCALE", settings.touchScale) + putExtra("com.runestone.app.extra.HAPTICS_ENABLED", settings.hapticsEnabled) + putExtra("com.runestone.app.extra.HAPTIC_INTENSITY", settings.hapticIntensity) + putExtra("com.runestone.app.extra.HIDE_VIRTUAL_GAMEPAD", settings.hideVirtualGamepad) + putExtra("com.runestone.app.extra.DISPLAY_CUTOUT_MODE", settings.displayCutoutMode.name) + putExtra("com.runestone.app.extra.CONTROLLER_HOME_SHORTCUT", settings.controllerHomeShortcut.name) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + activity.startActivity(intent) + activity.finish() + } + + fun launchGodotGame(gameDir: File) { + Log.i(TAG, "Godot unavailable: ${gameDir.name}") + UnavailableEngine.show(activity, "Godot") + } + + fun launchNScripterGame(gameDir: File) { + Log.i(TAG, "ONScripter bundled: launching ${gameDir.name}") + val saveDir = File(gameDir, "saves").apply { mkdirs() } + val intent = Intent(activity, com.runestone.app.engine.onscripter.OnscripterActivity::class.java).apply { + putExtra("game_path", gameDir.absolutePath) + putExtra("save_path", saveDir.absolutePath) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + activity.startActivity(intent) + activity.finish() + } + + fun launchRenpyGame(gameDir: File) { + Log.i(TAG, "Ren'Py bundled: launching ${gameDir.name}") + val saveDir = File(gameDir, "saves").apply { mkdirs() } + val intent = Intent(activity, org.renpy.android.PythonSDLActivity::class.java).apply { + putExtra("game_path", gameDir.absolutePath) + putExtra("save_path", saveDir.absolutePath) + putExtra("engine_version", "8.3.4") + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + activity.startActivity(intent) + activity.finish() + } + + fun showLegacyDialog(type: EngineType) { + val title: String + val message: String + when (type) { + EngineType.WOLF -> { + title = "Unsupported Engine — ${type.label}" + message = "This game uses Wolf RPG Editor.\n\nRunestone can detect these games, but it does not bundle a Wolf RPG runtime yet. The game files are installed correctly, but this engine cannot be played here yet." + } + EngineType.KIRIKIRI -> { + title = "Unsupported Engine — ${type.label}" + message = "This game uses KiriKiri/KAG.\n\nRunestone can detect these games, but it does not bundle a KiriKiri runtime. The game files are installed correctly, but this engine cannot be played here yet." + } + EngineType.UNITY, EngineType.UNREAL, EngineType.GAMEMAKER, EngineType.AGS -> { + title = "Unsupported Engine — ${type.label}" + message = "Runestone can identify this engine, but it does not bundle a compatible Android runtime for it. The game files are installed correctly, but this engine cannot be played here yet." + } + else -> { + title = "Legacy Engine — ${type.label}" + message = "This is a legacy engine from ${if (type == EngineType.DANTE98) "1992" else "1997"}.\n\nNo open-source runtime exists. These games require the original PC software." + } + } + AlertDialog.Builder(activity) + .setTitle(title) + .setMessage(message) + .setPositiveButton("OK") { _, _ -> activity.finish() } + .setCancelable(false) + .show() + } + + fun showElectronDialog() { + AlertDialog.Builder(activity) + .setTitle("Electron Not Supported") + .setMessage("Electron apps bundle a full Chromium browser.\n\nThey cannot run on Android and require a desktop PC.") + .setPositiveButton("OK") { _, _ -> activity.finish() } + .setCancelable(false) + .show() + } + + fun readGameTitle(gameDir: File): String? { + val ini = File(gameDir, "Game.ini") + if (!ini.isFile) return null + return runCatching { + ini.readLines() + .firstOrNull { it.trim().startsWith("Title=", ignoreCase = true) } + ?.substringAfter("Title=") + ?.trim() + ?.takeIf { it.isNotEmpty() } + }.getOrNull() + } + + fun findEasyRpgProjectRoot(dir: File, maxDepth: Int = 3): File? { + if (hasEasyRpgSignature(dir)) return dir + if (maxDepth <= 0 || !dir.isDirectory) return null + + return dir.listFiles() + ?.filter { it.isDirectory } + ?.sortedWith(compareBy { if (it.name.equals("Data", ignoreCase = true)) 0 else 1 }.thenBy { it.name.length }) + ?.firstNotNullOfOrNull { child -> findEasyRpgProjectRoot(child, maxDepth - 1) } + } + + fun hasEasyRpgSignature(dir: File): Boolean { + if (!dir.isDirectory) return false + val names = dir.listFiles()?.map { it.name.lowercase() }?.toSet() ?: return false + return names.contains("rpg_rt.exe") && + (names.contains("rpg_rt.ldb") || names.contains("rpg_rt.lmt")) + } +} diff --git a/app/src/main/java/com/runestone/app/engine/WebViewEngine.kt b/app/src/main/java/com/runestone/app/engine/WebViewEngine.kt index b47282b..c1b76fe 100644 --- a/app/src/main/java/com/runestone/app/engine/WebViewEngine.kt +++ b/app/src/main/java/com/runestone/app/engine/WebViewEngine.kt @@ -54,6 +54,52 @@ class WebViewEngine(context: Context) : WebView(context) { private var gameDir: File? = null private var config: WebViewGameConfig = WebViewGameConfig() private val externalHostCache = mutableMapOf() + private var localServer: LocalServer? = null + private var serverIp: String? = null + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + stopLocalServer() + } + + private fun stopLocalServer() { + localServer?.stop() + localServer = null + serverIp = null + } + + /** + * Pick a non-loopback IPv4 address to use as the server's bind + * address / page origin. The Android WebView treats 127.0.0.1 / + * localhost as a null origin and refuses to enable cross-origin + * isolation (COOP+COEP) on responses from there. A real LAN IP + * gives the WebView a proper origin and crossOriginIsolated + * becomes true. + * + * Returns null if no suitable IP is found; callers should fall + * back to file:// loading in that case. + */ + private fun pickServerIp(): String? { + val interfaces = try { + java.net.NetworkInterface.getNetworkInterfaces() + } catch (_: Exception) { + return null + } ?: return null + val candidates = mutableListOf() + while (interfaces.hasMoreElements()) { + val ni = interfaces.nextElement() + if (!ni.isUp || ni.isLoopback || ni.isPointToPoint) continue + val addrs = ni.inetAddresses + while (addrs.hasMoreElements()) { + val addr = addrs.nextElement() + if (addr is java.net.Inet4Address && !addr.isLoopbackAddress) { + candidates.add(addr.hostAddress ?: continue) + } + } + } + // Prefer Wi-Fi-ish names but accept any. + return candidates.firstOrNull() + } data class WebViewGameConfig( val fixLocalStorage: Boolean = true, @@ -69,10 +115,18 @@ class WebViewEngine(context: Context) : WebView(context) { val textScale: Float = 1.0f, val useHttpServer: Boolean = false, val webgl: Boolean = true, + val useWebgl2: Boolean = true, + val forceCanvas: Boolean = false, + val engineFamily: WebglConfigBuilder.EngineFamily = WebglConfigBuilder.EngineFamily.HTML, val desktopMode: Boolean = false, val allowExternalModules: Boolean = false, val allowedExternalHosts: List = emptyList(), val dialogLogs: Boolean = false, + // When true, the WebView's request for js/libs/effekseer.min.js + // is intercepted and served from our bundled + // effekseer_asmjs.min.js. Required for any MZ game whose + // main.js calls effekseer.initRuntime() on Android WebView. + val useAsmjsEffekseer: Boolean = true, ) init { @@ -101,7 +155,15 @@ class WebViewEngine(context: Context) : WebView(context) { webSettings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK webSettings.textZoom = (config.textScale * 100).toInt().coerceIn(50, 200) webSettings.setSupportZoom(false) - webSettings.setOffscreenPreRaster(true) + // OffscreenPreRaster pre-rasterises the entire viewport at the + // WebView's native resolution. On hi-DPI phones with games that + // allocate a WebGL canvas at full viewport size (e.g. RPG Maker + // MZ with Effekseer particles), this is what exhausts the + // WebView's tile memory pool and produces a black canvas with + // Chromium's "tile memory limits exceeded" warning. Disabling + // it is the difference between a black screen and a working + // game on devices we've tested. + webSettings.setOffscreenPreRaster(false) isVerticalScrollBarEnabled = false isHorizontalScrollBarEnabled = false overScrollMode = OVER_SCROLL_NEVER @@ -158,6 +220,28 @@ class WebViewEngine(context: Context) : WebView(context) { addJavascriptInterface(Bootstrapper(), "RunestoneBridge") + // Local HTTP server. When enabled, the game is served from + // http://:PORT/ with COOP/COEP headers, which unlocks + // SharedArrayBuffer / shared-memory WebAssembly on the system + // WebView. This is required for Effekseer-based MZ games + // (look-outside, haven) to boot, and is harmless for games + // that don't need it. + // + // We bind to 0.0.0.0 and load via the device's Wi-Fi IP, not + // 127.0.0.1, because the Android WebView treats 127.0.0.1 as + // a null origin and refuses to enable cross-origin isolation + // (crossOriginIsolated stays false). Using the device's LAN + // IP gives the WebView a real origin. + if (config.useHttpServer) { + stopLocalServer() + val server = LocalServer(wwwDir).also { it.start() } + localServer = server + serverIp = pickServerIp() + } else { + stopLocalServer() + serverIp = null + } + webViewClient = object : WebViewClient() { override fun shouldInterceptRequest( view: WebView, @@ -188,6 +272,42 @@ class WebViewEngine(context: Context) : WebView(context) { } } + // Intercept effekseer.min.js requests — swap in the + // asm.js runtime so initRuntime() takes the immediate + // fallback path (no WASM, no SharedArrayBuffer). + // + // Background: Android system WebView does not enable + // cross-origin isolation, so SharedArrayBuffer is + // permanently unavailable. The WASM Effekseer runtime + // needs shared-memory WebAssembly and silently hangs + // forever in initRuntime() on Android WebView. The + // asm.js runtime is a 2.5 MB plain-JS port of the same + // API; its initRuntime() short-circuits to onload() + // when effekseer_native is undefined, which it always + // is in the asm.js build. + // + // Trade-off: particle effects don't render. The MZ + // runtime's Graphics.effekseer calls into the loaded + // module but gets a no-op. Scenes, maps, battles, + // menus, saves — everything else works. + if (config.useAsmjsEffekseer && url.endsWith("/effekseer.min.js", ignoreCase = true)) { + val asmjs = readAssetFile("effekseer_asmjs.min.js") + if (asmjs != null) { + android.util.Log.d( + "Runestone", + "effekseer intercept: url=$url -> serving asm.js runtime", + ) + return WebResourceResponse( + "application/javascript", + "utf-8", + 200, + "OK", + mapOf("Content-Type" to "application/javascript"), + java.io.ByteArrayInputStream(asmjs.toByteArray()), + ) + } + } + // Intercept .m4a audio requests — serve .ogg instead if available if (config.forceAudioExt.isNotEmpty() && url.contains(".m4a")) { val oggUrl = url.replace(Regex("\\.m4a(\\?.*)?$"), config.forceAudioExt) @@ -197,6 +317,58 @@ class WebViewEngine(context: Context) : WebView(context) { } } + // Intercept .wasm asset requests — serve from the game + // directory with the correct MIME type, an explicit 200 + // status, and the headers required for the page to be + // cross-origin-isolated (Effekseer's WASM runtime needs + // SharedArrayBuffer, which requires both COOP/COEP on + // the main document and CORP on every subresource). + // + // The 3-arg WebResourceResponse constructor is unreliable + // for .wasm on some Android WebView versions: the response + // is returned to the XHR but the WASM fails to instantiate + // because the response is missing CORS / CORP headers. + // The 6-arg constructor with explicit status + headers + // is the supported path. + if (url.endsWith(".wasm", ignoreCase = true) || + url.contains(".wasm?", ignoreCase = true) || + url.contains(".wasm#", ignoreCase = true) + ) { + // When the local HTTP server is serving the game, + // its response already includes COOP/COEP/CORP and + // is what enables cross-origin-isolation. Don't + // override it with our simpler response or the + // page loses its isolation. + val fromLocalServer = url.startsWith("http://127.0.0.1:") || + url.startsWith("http://localhost:") || + (serverIp != null && url.startsWith("http://$serverIp:")) + if (!fromLocalServer) { + val wasmFile = resolveGameFile(url) + if (wasmFile != null && wasmFile.exists()) { + val headers = mapOf( + "Content-Type" to "application/wasm", + "Content-Length" to wasmFile.length().toString(), + "Cross-Origin-Resource-Policy" to "cross-origin", + "Access-Control-Allow-Origin" to "*", + "Cache-Control" to "no-store", + ) + android.util.Log.d( + "Runestone", + "wasm intercept: url=$url size=${wasmFile.length()} " + + "headers=$headers", + ) + return WebResourceResponse( + "application/wasm", + "utf-8", + 200, + "OK", + headers, + FileInputStream(wasmFile), + ) + } + } + } + return super.shouldInterceptRequest(view, request) } @@ -239,7 +411,25 @@ class WebViewEngine(context: Context) : WebView(context) { if (scalingJs.isNotEmpty()) { view.evaluateJavascript(scalingJs, null) } - // Fix PIXI tile bleeding — force NEAREST scale mode + // Renderer-pick + PIXI options: this is the one injection that + // runs only when webgl is enabled. It probes the actual context, + // forces WebGL2 on MZ when available, tunes mobile-friendly PIXI + // options, and reports back via RunestoneBridge.bootDetailed(...). + if (config.webgl) { + val targetRenderer = WebglConfigBuilder + .pick(config.engineFamily, config.useWebgl2, config.forceCanvas) + .name.lowercase() + val bootstrapJs = readAssetFile("webgl-bootstrap.js") + if (bootstrapJs != null) { + val tpl = bootstrapJs.replace("__TARGET_RENDERER__", targetRenderer) + view.evaluateJavascript(tpl, null) + } + } + // Fix PIXI tile bleeding — force NEAREST scale mode. + // Kept as the only post-load PIXI patch; the previous + // PIXI_RENDER_OPTS_JS plus devicePixelRatio override have + // been removed because they were observed to black-screen + // some MZ games (look-outside, haven) on hi-DPI phones. view.evaluateJavascript(PIXI_TILE_FIX_JS, null) } } @@ -251,13 +441,39 @@ class WebViewEngine(context: Context) : WebView(context) { // Game tried to close via window.close() — ignore return true } + // Mirror all page-side console output to Runestone-tagged + // logcat so we can debug game issues without attaching + // chrome://inspect. Format: "page-console(level): " + // plus the source URL and line number, when available. + val level = when (msg.messageLevel()) { + ConsoleMessage.MessageLevel.ERROR -> "E" + ConsoleMessage.MessageLevel.WARNING -> "W" + else -> "I" + } + android.util.Log.println( + android.util.Log.INFO, + "Runestone", + "page-console[$level] ${msg.lineNumber()}: $log", + ) return super.onConsoleMessage(msg) } } - // Load the game — pass webgl query param only if WebGL is enabled - val query = if (config.webgl) "?webgl" else "" - loadUrl("file://${indexHtml.absolutePath}$query") + // Load the game — compose the renderer-hint query string via the + // shared, unit-tested builder. The string may be empty (when webgl + // is disabled) or carry `?webgl=1&renderer=...` discriminator flags. + val query = WebglConfigBuilder.buildQuery( + engineFamily = config.engineFamily, + useWebgl2 = config.useWebgl2, + forceCanvas = config.forceCanvas, + webglEnabled = config.webgl, + ) + val url = if (config.useHttpServer && localServer != null && serverIp != null) { + "http://$serverIp:${localServer!!.port}/index.html$query" + } else { + "file://${indexHtml.absolutePath}$query" + } + loadUrl(url) } private fun findWwwDir(gameDir: File): File { @@ -375,25 +591,51 @@ class WebViewEngine(context: Context) : WebView(context) { } /** - * Bootstrapper interface - called from injected JS to signal readiness + * Bootstrapper interface - called from injected JS to signal readiness. + * + * Accepts both the legacy two-arg form (webgl, webaudio) and the richer + * form used by `webgl-bootstrap.js` (webgl, webaudio, renderer, webglVersion). + * Older games that only post the two-arg shape keep working without changes. */ inner class Bootstrapper { @JavascriptInterface fun boot(webgl: Boolean, webaudio: Boolean) { android.util.Log.d("Runestone", "Game booted: WebGL=$webgl, WebAudio=$webaudio") } + + @JavascriptInterface + fun bootDetailed( + webgl: Boolean, + webaudio: Boolean, + renderer: String?, + webglVersion: Int, + ) { + android.util.Log.d( + "Runestone", + "Game booted: WebGL=$webgl WebAudio=$webaudio renderer=$renderer webglVersion=$webglVersion", + ) + } } /** * Resolve a URL path to a file in the game directory. - * Handles file:// URLs, relative paths, and paths with query strings. + * Handles file:// URLs, our own http://127.0.0.1:PORT/ URLs (when + * useHttpServer is on), and relative paths with query strings. */ private fun resolveGameFile(url: String): File? { val gameDir = gameDir ?: return null - // Strip file:// prefix and query params + // Strip file:// prefix var path = url if (path.startsWith("file://")) { path = path.removePrefix("file://") + } else if (path.startsWith("http://127.0.0.1:") || path.startsWith("http://localhost:") + || (serverIp != null && path.startsWith("http://$serverIp:")) + ) { + // The local server is up; strip the origin so we're left + // with the same path we would have used under file://. + val schemeEnd = path.indexOf("://") + 3 + val pathStart = path.indexOf('/', schemeEnd) + path = if (pathStart >= 0) path.substring(pathStart) else "/" } // Strip query string val queryIdx = path.indexOf('?') @@ -451,19 +693,6 @@ class WebViewEngine(context: Context) : WebView(context) { })(); """ - // JS injected into the game to listen for a boot message - private const val BOOT_JS = """ - (function() { - window.addEventListener('message', function(e) { - if (e.data && e.data.boot === 'ok') { - if (window.RunestoneBridge) { - RunestoneBridge.boot(!!e.data.webgl, !!e.data.webaudio); - } - } - }); - })(); - """ - // JS to inject gamepad support private const val GAMEPAD_INJECT_JS = """ (function() { @@ -559,6 +788,49 @@ class WebViewEngine(context: Context) : WebView(context) { })(); """ + // JS to apply mobile-friendly PIXI renderer options. Runs BEFORE the + // tile-bleeding fix so that __runestonePixiOpts is in place by the + // time the webgl-bootstrap (if injected) reads it. + // + // Conservative defaults: only touch the things that are universal + // wins on mobile. We do NOT force roundPixels, antialias, or + // resolution globally — those interact with PIXI v5 shaders in ways + // that have produced black screens on real games. The game is + // allowed to set them itself; we just nudge the bits that are + // never wrong. + // + // - PRECISION_FRAGMENT = 'mediump' → cheaper fragment math on mobile GPUs + // - scaleMode = 0 (NEAREST) → duplicated in PIXI_TILE_FIX_JS; + // kept here in case that injection is skipped + // - resolution cap via opts hint → only consumed by the bootstrap + private const val PIXI_RENDER_OPTS_JS = """ + (function() { + try { + if (typeof PIXI === 'undefined') return; + if (PIXI.settings) { + if ('PRECISION_FRAGMENT' in PIXI.settings) { + PIXI.settings.PRECISION_FRAGMENT = 'mediump'; + } + } + if (PIXI.BaseTexture && PIXI.BaseTexture.defaultOptions) { + if ('scaleMode' in PIXI.BaseTexture.defaultOptions) { + PIXI.BaseTexture.defaultOptions.scaleMode = 0; + } + } + // Stash a resolution hint for the bootstrap to read. The + // bootstrap is the only place that actually forwards + // resolution to the renderer constructor, and only when the + // game has not already set one. + var dpr = window.devicePixelRatio || 1; + window.__runestonePixiOpts = { + resolution: Math.max(1, Math.min(2, dpr)), + }; + } catch (e) { + // Best-effort: never break the game over a tuning patch. + } + })(); + """ + /** Check if an IP is in a private/local network range */ private fun isPrivateIp(host: String): Boolean { // Try IPv4 private ranges diff --git a/app/src/main/java/com/runestone/app/engine/WebViewMzEngine.kt b/app/src/main/java/com/runestone/app/engine/WebViewMzEngine.kt index 970231e..304d619 100644 --- a/app/src/main/java/com/runestone/app/engine/WebViewMzEngine.kt +++ b/app/src/main/java/com/runestone/app/engine/WebViewMzEngine.kt @@ -40,7 +40,7 @@ class WebViewMzEngine : GameEngine { override fun canRun(gameFolder: File): Boolean { if (!gameFolder.isDirectory) return false - // Check for MZ project file + // Check for MZ project file at the root. val files = gameFolder.listFiles() ?: return false val names = files.map { it.name }.toSet() @@ -48,33 +48,45 @@ class WebViewMzEngine : GameEngine { return true } - // Check www structure - val wwwDir = File(gameFolder, "www") - if (!wwwDir.exists() || !wwwDir.isDirectory) return false - - val indexHtml = File(wwwDir, "index.html") - if (!indexHtml.exists()) return false - - // MZ-specific: check for rmmz_*.js files - val jsDir = File(wwwDir, "js") - if (jsDir.exists() && jsDir.isDirectory) { - val hasRmmzJs = jsDir.listFiles()?.any { file -> + // MZ-specific: rmmz_*.js files at the root (some MZ exports ship + // index.html at the root instead of inside www/, e.g. Look Outside). + val rootJsDir = File(gameFolder, "js") + if (rootJsDir.exists() && rootJsDir.isDirectory) { + val hasRootRmmzJs = rootJsDir.listFiles()?.any { file -> file.name.startsWith("rmmz_") && file.name.endsWith(".js") } ?: false - - if (hasRmmzJs) return true + if (hasRootRmmzJs) return true } - // Check package.json for MZ mention - val packageJson = File(wwwDir, "package.json") - if (packageJson.exists()) { - val content = try { - packageJson.readText() - } catch (e: Exception) { - return false + // Check www structure + val wwwDir = File(gameFolder, "www") + if (wwwDir.exists() && wwwDir.isDirectory) { + + val indexHtml = File(wwwDir, "index.html") + if (indexHtml.exists()) { + + // MZ-specific: check for rmmz_*.js files inside www/js + val jsDir = File(wwwDir, "js") + if (jsDir.exists() && jsDir.isDirectory) { + val hasRmmzJs = jsDir.listFiles()?.any { file -> + file.name.startsWith("rmmz_") && file.name.endsWith(".js") + } ?: false + + if (hasRmmzJs) return true + } + + // Check package.json for MZ mention + val packageJson = File(wwwDir, "package.json") + if (packageJson.exists()) { + val content = try { + packageJson.readText() + } catch (e: Exception) { + return false + } + + if (content.contains("MZ", ignoreCase = true)) return true + } } - - if (content.contains("MZ", ignoreCase = true)) return true } return false @@ -96,18 +108,23 @@ class WebViewMzEngine : GameEngine { override fun launch(context: Context, gameFolder: File, config: GameConfig) { Log.i(TAG, "Launching ${gameFolder.name} via WebView (MZ)") - val wwwDir = File(gameFolder, "www") - val indexHtml = File(wwwDir, "index.html") - - if (!indexHtml.exists()) { - throw RuntimeException("index.html not found in $wwwDir") + // MZ exports ship in two layouts: + // 1. Standard: www/index.html + www/js/rmmz_*.js + // 2. Flat: index.html + js/rmmz_*.js (some games, e.g. Look Outside) + // Pick whichever exists. + val (entryPoint, assetRoot) = when { + File(gameFolder, "www/index.html").exists() -> "www/index.html" to File(gameFolder, "www") + File(gameFolder, "index.html").exists() -> "index.html" to gameFolder + else -> throw RuntimeException("MZ game: no index.html found in $gameFolder or ${gameFolder}/www") } + Log.i(TAG, "MZ entry point: $entryPoint (assetRoot=${assetRoot.absolutePath})") + // Launch GameActivity which will create a WebViewEngine instance val intent = Intent(context, Class.forName("com.runestone.app.GameActivity")).apply { putExtra("game_path", gameFolder.absolutePath) putExtra("engine_type", id) - putExtra("entry_point", "www/index.html") + putExtra("entry_point", entryPoint) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } @@ -115,9 +132,12 @@ class WebViewMzEngine : GameEngine { } override fun getSaves(gameFolder: File): List { - // MZ saves are in www/save/ as .rmmzsave files (JSON) - val saveDir = File(gameFolder, "www/save") - if (!saveDir.exists() || !saveDir.isDirectory) return emptyList() + // MZ saves are in /save/ as .rmmzsave files (JSON). + // Check both layouts. + val saveDir = sequenceOf( + File(gameFolder, "www/save"), + File(gameFolder, "save"), + ).firstOrNull { it.exists() && it.isDirectory } ?: return emptyList() val saves = mutableListOf() diff --git a/app/src/main/java/com/runestone/app/engine/WebglConfigBuilder.kt b/app/src/main/java/com/runestone/app/engine/WebglConfigBuilder.kt new file mode 100644 index 0000000..7e3cfc5 --- /dev/null +++ b/app/src/main/java/com/runestone/app/engine/WebglConfigBuilder.kt @@ -0,0 +1,99 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.engine + +/** + * Pure-Kotlin decision + query-string composer for the WebView-based + * WebGL/WebGL2/canvas renderer selection. + * + * Kept free of Android types so it can be unit-tested on the JVM + * (`./gradlew :app:testDebugUnitTest`). + */ +object WebglConfigBuilder { + + enum class WebglVersion { + /** No WebGL at all. Game renders to a 2D canvas. */ + CANVAS, + /** WebGL 1.0 context. Universal PIXI compatibility (v4 + v5). */ + WEBGL1, + /** WebGL 2.0 context. PIXI v5.2+ only; PIXI v4 ignores this. */ + WEBGL2, + } + + enum class EngineFamily { + /** RPG Maker MV. Bundles PIXI v4. WebGL1 only. */ + MV, + /** RPG Maker MZ. Bundles PIXI v5. WebGL2 supported in 5.2+. */ + MZ, + /** Other HTML5 engines (Tyrano, Construct, Twine, Ruffle, etc.). */ + HTML, + } + + /** + * Pick the target WebGL version for a given engine and settings. + * + * Rules: + * - [forceCanvas] always wins → CANVAS. + * - MV is always WEBGL1 (PIXI v4 has no WebGL2 path; forcing it breaks MV games). + * - MZ + [useWebgl2] → WEBGL2 (the JS-side probe may still downgrade to WEBGL1 + * if the WebView lacks WebGL2 support — the query string advertises intent, + * not a guarantee). + * - Otherwise → WEBGL1. + */ + fun pick( + engineFamily: EngineFamily, + useWebgl2: Boolean, + forceCanvas: Boolean, + ): WebglVersion = when { + forceCanvas -> WebglVersion.CANVAS + engineFamily == EngineFamily.MV -> WebglVersion.WEBGL1 + engineFamily == EngineFamily.MZ && useWebgl2 -> WebglVersion.WEBGL2 + else -> WebglVersion.WEBGL1 + } + + /** + * Compose the query string appended to the game's `index.html` URL. + * + * - Returns `""` when [webglEnabled] is false (the game will not see a hint + * and may fall back to canvas on its own). + * - Otherwise emits `?webgl=1` plus, for WebGL2, a `&renderer=webgl2` + * discriminator. We deliberately do NOT emit `&webgl2=1` — some MZ + * games built against pre-5.2 PIXI read that flag via + * `Utils.isOptionValid('webgl2')` and try a WebGL2 path the bundled + * PIXI does not actually support, producing a black screen. The + * Kotlin-side decision is what we want the JS bootstrap to honour; + * the URL hint is intentionally minimal. + */ + fun queryParams( + version: WebglVersion, + webglEnabled: Boolean, + ): String = if (!webglEnabled) { + "" + } else when (version) { + WebglVersion.CANVAS -> "?webgl=0&renderer=canvas" + WebglVersion.WEBGL1 -> "?webgl=1&renderer=webgl" + WebglVersion.WEBGL2 -> "?webgl=1&renderer=webgl2" + } + + /** + * Combine [pick] + [queryParams] in one call. The single entry point used + * by `WebViewEngine` and exercised by the unit tests. + */ + fun buildQuery( + engineFamily: EngineFamily, + useWebgl2: Boolean, + forceCanvas: Boolean, + webglEnabled: Boolean, + ): String = queryParams( + version = pick(engineFamily, useWebgl2, forceCanvas), + webglEnabled = webglEnabled, + ) +} diff --git a/app/src/main/java/com/runestone/app/filters/FilterConfigWriter.kt b/app/src/main/java/com/runestone/app/filters/FilterConfigWriter.kt new file mode 100644 index 0000000..956a814 --- /dev/null +++ b/app/src/main/java/com/runestone/app/filters/FilterConfigWriter.kt @@ -0,0 +1,58 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright 2026 Gerson (KleirRampage45) + * + * Writes the resolved filter config JSON to the game directory + * before launching a native engine. Native code reads this file + * at startup and checks for updates each frame. + */ + +package com.runestone.app.filters + +import android.util.Log +import com.runestone.app.data.VideoSection +import java.io.File + +object FilterConfigWriter { + + private const val TAG = "FilterCfg" + const val FILTER_CONFIG_FILE = "runestone-filters.json" + + /** + * Resolve the video settings into a filter config and write it + * to the game directory. + * + * @param gameDir The game's root directory on disk. + * @param video Per-game video settings with preset ID and overrides. + * @return The written config file, or null if write fails. + */ + fun write(gameDir: File, video: VideoSection): File? { + return try { + val config = FilterManager.resolve(video) + val file = File(gameDir, FILTER_CONFIG_FILE) + file.writeText(config.toJson().toString(2)) + Log.i(TAG, "Wrote $FILTER_CONFIG_FILE: preset=${config.preset}, " + + "enabled=${config.enabled}, passes=${config.passes.size}") + file + } catch (e: Exception) { + Log.w(TAG, "Failed to write filter config: ${e.message}") + null + } + } + + /** + * Write a disabled config (used when no per-game config exists + * or filter is set to "off"). + */ + fun writeDisabled(gameDir: File): File? { + return try { + val file = File(gameDir, FILTER_CONFIG_FILE) + file.writeText(ResolvedFilterConfig.DISABLED.toJson().toString(2)) + Log.i(TAG, "Wrote disabled filter config") + file + } catch (e: Exception) { + Log.w(TAG, "Failed to write disabled filter config: ${e.message}") + null + } + } +} diff --git a/app/src/main/java/com/runestone/app/filters/FilterManager.kt b/app/src/main/java/com/runestone/app/filters/FilterManager.kt new file mode 100644 index 0000000..14e371b --- /dev/null +++ b/app/src/main/java/com/runestone/app/filters/FilterManager.kt @@ -0,0 +1,142 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright 2026 Gerson (KleirRampage45) + * + * Central filter manager: holds preset definitions, resolves overrides, + * produces ResolvedFilterConfig for the native renderer. + */ + +package com.runestone.app.filters + +import com.runestone.app.data.VideoSection + +object FilterManager { + + private val presets = mutableMapOf() + + init { + registerDefaults() + } + + private fun registerDefaults() { + register(FilterPreset( + id = "off", + displayName = "Off / Original", + description = "No extra filtering. Shows the game as-is.", + tags = listOf("Fast"), + performanceTier = PerfTier.FREE, + passes = emptyList(), + defaultParams = emptyMap(), + )) + + register(FilterPreset( + id = "clean_sharp", + displayName = "Clean Sharp", + description = "Recommended for most games. Sharp pixels without harsh edges. Improves text readability on phone screens.", + tags = listOf("Recommended", "Fast", "Readable"), + performanceTier = PerfTier.LOW, + passes = listOf( + FilterPassTemplate( + shader = "sharp_bilinear", + params = mapOf("sharpness" to 0.15f), + ), + FilterPassTemplate( + shader = "brightness_contrast", + params = mapOf( + "brightness" to 0.0f, + "contrast" to 1.05f, + "gamma" to 1.0f, + "saturation" to 1.0f, + ), + ), + FilterPassTemplate( + shader = "sharpen", + params = mapOf("strength" to 0.15f), + ), + ), + defaultParams = mapOf( + "brightness" to 1.0f, + "contrast" to 1.05f, + "gamma" to 1.0f, + "saturation" to 1.0f, + "sharpness" to 0.15f, + ), + )) + } + + fun register(preset: FilterPreset) { + presets[preset.id] = preset + } + + fun getPreset(id: String): FilterPreset? = presets[id] + + fun getAllPresets(): List = presets.values.toList() + + fun getPresetsForEngine(engineId: String): List { + return presets.values.filter { + it.compatibleEngines.isEmpty() || it.compatibleEngines.contains(engineId) + } + } + + /** + * Resolve a preset + per-game video overrides into a final config + * that the native renderer can consume directly. + * + * Override semantics: user slider values are absolute. + * If a slider differs from the preset default, it overrides. + * The preset default is used for parameters the user hasn't touched. + */ + fun resolve(video: VideoSection): ResolvedFilterConfig { + val presetId = video.screenFilter + if (presetId == "none" || presetId == "off") { + return ResolvedFilterConfig.DISABLED + } + + val preset = presets[presetId] ?: return ResolvedFilterConfig.DISABLED + + if (preset.passes.isEmpty()) { + return ResolvedFilterConfig( + enabled = true, + preset = presetId, + aspectMode = video.aspectMode, + passes = emptyList(), + ) + } + + // Build override map from video section. + // Only include values that differ from neutral/identity defaults. + val overrides = mutableMapOf() + if (video.brightness != 1.0f) overrides["brightness"] = video.brightness + if (video.contrast != 1.0f) overrides["contrast"] = video.contrast + if (video.gamma != 1.0f) overrides["gamma"] = video.gamma + if (video.saturation != 1.0f) overrides["saturation"] = video.saturation + if (video.sharpness != 0.0f) overrides["sharpness"] = video.sharpness + + // Resolve each pass: merge preset defaults with overrides. + val resolvedPasses = preset.passes.map { template -> + val mergedParams = template.params.toMutableMap() + + // Apply overrides that are relevant to this pass's shader. + for ((key, value) in overrides) { + if (mergedParams.containsKey(key)) { + mergedParams[key] = value + } + } + + ResolvedPass( + shader = template.shader, + params = mergedParams, + ) + } + + return ResolvedFilterConfig( + enabled = true, + preset = presetId, + aspectMode = video.aspectMode, + passes = resolvedPasses, + ) + } + + /** Default preset ID for new installs. */ + const val DEFAULT_PRESET = "clean_sharp" +} diff --git a/app/src/main/java/com/runestone/app/filters/FilterModels.kt b/app/src/main/java/com/runestone/app/filters/FilterModels.kt new file mode 100644 index 0000000..d8d15f7 --- /dev/null +++ b/app/src/main/java/com/runestone/app/filters/FilterModels.kt @@ -0,0 +1,146 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright 2026 Gerson (KleirRampage45) + * + * Visual filter data model: presets, passes, and parameter definitions. + */ + +package com.runestone.app.filters + +import org.json.JSONArray +import org.json.JSONObject + +/** + * A named collection of filter passes with default parameters. + * Resolved by FilterManager into a concrete [ResolvedFilterConfig]. + */ +data class FilterPreset( + val id: String, + val displayName: String, + val description: String, + val tags: List = emptyList(), + val performanceTier: Int = 1, + val compatibleEngines: List = emptyList(), // empty = all + val passes: List = emptyList(), + val defaultParams: Map = emptyMap(), +) { + fun toJson(): JSONObject = JSONObject().apply { + put("id", id) + put("displayName", displayName) + put("description", description) + put("tags", JSONArray(tags)) + put("performanceTier", performanceTier) + put("compatibleEngines", JSONArray(compatibleEngines)) + put("passes", JSONArray(passes.map { it.toJson() })) + put("defaultParams", JSONObject().apply { + defaultParams.forEach { (k, v) -> put(k, v.toDouble()) } + }) + } + + companion object { + fun fromJson(j: JSONObject): FilterPreset = FilterPreset( + id = j.getString("id"), + displayName = j.getString("displayName"), + description = j.optString("description", ""), + tags = j.optJSONArray("tags")?.let { arr -> + (0 until arr.length()).map { arr.getString(it) } + } ?: emptyList(), + performanceTier = j.optInt("performanceTier", 1), + compatibleEngines = j.optJSONArray("compatibleEngines")?.let { arr -> + (0 until arr.length()).map { arr.getString(it) } + } ?: emptyList(), + passes = j.optJSONArray("passes")?.let { arr -> + (0 until arr.length()).map { FilterPassTemplate.fromJson(arr.getJSONObject(it)) } + } ?: emptyList(), + defaultParams = j.optJSONObject("defaultParams")?.let { obj -> + obj.keys().asSequence().associateWith { obj.getDouble(it).toFloat() } + } ?: emptyMap(), + ) + } +} + +/** + * Template for a single shader pass within a preset. + * Contains default parameter values that can be overridden per-game. + */ +data class FilterPassTemplate( + val shader: String, + val params: Map = emptyMap(), +) { + fun toJson(): JSONObject = JSONObject().apply { + put("shader", shader) + put("params", JSONObject().apply { + params.forEach { (k, v) -> put(k, v.toDouble()) } + }) + } + + companion object { + fun fromJson(j: JSONObject): FilterPassTemplate = FilterPassTemplate( + shader = j.getString("shader"), + params = j.optJSONObject("params")?.let { obj -> + obj.keys().asSequence().associateWith { obj.getDouble(it).toFloat() } + } ?: emptyMap(), + ) + } +} + +/** + * A fully resolved filter configuration ready to be written as JSON + * for the native renderer. All values are absolute — no presets or overrides. + */ +data class ResolvedFilterConfig( + val enabled: Boolean, + val preset: String, + val aspectMode: String, + val passes: List, +) { + fun toJson(): JSONObject = JSONObject().apply { + put("enabled", enabled) + put("preset", preset) + put("aspectMode", aspectMode) + put("passes", JSONArray(passes.map { it.toJson() })) + } + + companion object { + val DISABLED = ResolvedFilterConfig( + enabled = false, + preset = "off", + aspectMode = "fit_4_3", + passes = emptyList(), + ) + } +} + +/** + * A single resolved pass with final parameter values. + */ +data class ResolvedPass( + val shader: String, + val params: Map, +) { + fun toJson(): JSONObject = JSONObject().apply { + put("shader", shader) + put("params", JSONObject().apply { + params.forEach { (k, v) -> put(k, v.toDouble()) } + }) + } +} + +/** Aspect mode constants. */ +object AspectMode { + const val FIT_4_3 = "fit_4_3" + const val FIT_ORIGINAL = "fit_original" + const val FILL = "fill" + const val CROP = "crop" + const val STRETCH = "stretch" + const val INTEGER_CENTER = "integer_center" +} + +/** Performance tier constants. */ +object PerfTier { + const val FREE = 0 // passthrough + const val LOW = 1 // single-pass color + const val MEDIUM = 2 // multi-pass CRT Lite + const val HIGH = 3 // heavy multi-pass + const val EXPERIMENTAL = 4 +} diff --git a/app/src/main/java/com/runestone/app/importer/ImportManager.kt b/app/src/main/java/com/runestone/app/importer/ImportManager.kt new file mode 100644 index 0000000..bbfe946 --- /dev/null +++ b/app/src/main/java/com/runestone/app/importer/ImportManager.kt @@ -0,0 +1,326 @@ +package com.runestone.app.importer + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import android.util.Log +import android.widget.Toast +import com.runestone.app.util.AppScope +import com.runestone.app.workspace.SaveManager +import com.runestone.app.workspace.WorkspaceManager +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + +class ImportManager( + private val activity: Activity, + private val workspaceManager: WorkspaceManager, + private val saveManager: SaveManager, + private val callbacks: Callbacks, +) { + companion object { + private const val TAG = "ImportManager" + const val REQUEST_IMPORT_FOLDER = 9001 + const val REQUEST_COVER_IMAGE = 9002 + const val REQUEST_PATCH_ZIP = 9003 + const val REQUEST_SAVE_EXPORT_ZIP = 9004 + const val REQUEST_SAVE_IMPORT_ZIP = 9005 + } + + interface Callbacks { + fun showOverlay(panel: android.view.View, dismissOnBgClick: Boolean) + fun dismissOverlay(onDismissed: () -> Unit = {}) + fun showHome() + fun showManageFiles(storageName: String? = null) + fun refreshGames() + fun showRtpDownloadDialog(storageName: String, missing: List) + fun showImportProgress(message: String) + fun getGames(): List + fun getSettingsDefaultGameFolder(): String + } + + var importMessage: String? = null + var activeImportProgressView: com.runestone.app.ui.ImportProgressView? = null + var pendingImportStorage: String? = null + var pendingCoverStorage: String? = null + var pendingCoverCallback: ((String) -> Unit)? = null + var pendingPatchStorage: String? = null + var pendingPatchCallback: ((String) -> Unit)? = null + var pendingSaveExportStorage: String? = null + var pendingSaveImportStorage: String? = null + + val importBrowserStack = mutableListOf() + var importBrowserShowLocations = false + + fun startFolderImport(requestedName: String? = null) { + Log.i(TAG, "startFolderImport: requestedName=$requestedName") + importMessage = null + pendingImportStorage = requestedName + importBrowserStack.clear() + importBrowserShowLocations = false + showGameFolderBrowser() + } + + fun requestStorageAccess() { + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply { + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) + addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) + } + activity.startActivityForResult(intent, REQUEST_IMPORT_FOLDER) + } + + fun showGameFolderBrowser() { + val browser = SafStorageBrowser(activity.contentResolver) + val roots = browser.listRoots() + if (!importBrowserShowLocations && importBrowserStack.isEmpty() && roots.isNotEmpty()) { + val preferred = roots.firstOrNull { it.name.equals(callbacks.getSettingsDefaultGameFolder(), ignoreCase = true) } + ?: roots.first() + importBrowserStack += browser.describeFolder(preferred.documentUri) + } + val current = importBrowserStack.lastOrNull() + val entries = current?.let { runCatching { browser.listEntries(it.uri) }.getOrDefault(emptyList()) } ?: emptyList() + val screen = com.runestone.app.ui.GameFolderBrowserScreen(activity).create( + roots = roots, + currentFolder = current, + entries = entries, + pathSegments = importBrowserStack.map { it.name }, + canNavigateUp = importBrowserStack.size > 1, + onBack = { + if (current == null) { + importBrowserShowLocations = false + callbacks.dismissOverlay() + } else if (importBrowserStack.size > 1) { + importBrowserStack.removeAt(importBrowserStack.lastIndex) + showGameFolderBrowser() + } else { + importBrowserShowLocations = true + importBrowserStack.clear() + showGameFolderBrowser() + } + }, + onUp = { + if (importBrowserStack.size > 1) { + importBrowserStack.removeAt(importBrowserStack.lastIndex) + showGameFolderBrowser() + } else { + importBrowserShowLocations = true + importBrowserStack.clear() + showGameFolderBrowser() + } + }, + onOpenRoot = { storageRoot -> + importBrowserShowLocations = false + importBrowserStack.clear() + importBrowserStack += browser.describeFolder(storageRoot.documentUri) + showGameFolderBrowser() + }, + onOpenFolder = { folder -> + importBrowserStack += folder + showGameFolderBrowser() + }, + onImportFolder = { folder -> importSelectedFolder(folder.uri) }, + onGrantStorage = { requestStorageAccess() }, + ) + callbacks.showOverlay(screen, true) + } + + private fun importSelectedFolder(folderUri: Uri) { + if (pendingImportStorage != null) { + val backedUp = saveManager.syncFromActive(pendingImportStorage!!) + Log.i(TAG, "Backed up $backedUp saves for $pendingImportStorage before import") + } + + callbacks.showImportProgress("Importing game") + Log.i(TAG, "importSelectedFolder: progress screen shown, starting coroutine uri=$folderUri") + + AppScope.io.launch { + val importer = SafGameImporter( + contentResolver = activity.contentResolver, + workspaceManager = workspaceManager, + rtpManager = com.runestone.app.rtp.RtpManager(activity), + onProgress = { msg -> + activity.runOnUiThread { + Log.d(TAG, "import progress: $msg") + val pv = activeImportProgressView + if (pv != null) { + when { + msg.startsWith("Copying game") -> { pv.phaseView.text = msg; pv.fileView.text = ""; pv.countView.text = "" } + msg.startsWith("Copying ") -> pv.fileView.text = msg.removePrefix("Copying ") + else -> { pv.phaseView.text = msg; pv.fileView.text = "" } + } + } + importMessage = msg + } + }, + ) + val result = importer.importTree(folderUri, pendingImportStorage) + Log.i(TAG, "import finished: $result") + + withContext(Dispatchers.Main) { + pendingImportStorage = null + importBrowserStack.clear() + when (result) { + is SafImportResult.Success -> { + Log.i(TAG, "Import OK: ${result.storageName} (${result.fileCount} files)") + importMessage = null + saveManager.restoreToActive(result.storageName) + activeImportProgressView = null + workspaceManager.invalidateGameScanCache() + callbacks.refreshGames() + callbacks.dismissOverlay { + callbacks.showHome() + if (result.missingRtps.isNotEmpty()) { + callbacks.showRtpDownloadDialog(result.storageName, result.missingRtps) + } + } + } + is SafImportResult.Failure -> { + Log.e(TAG, "Import FAILED: ${result.reason}") + val pv = activeImportProgressView + if (pv != null) { pv.phaseView.text = "[FAIL] Import failed"; pv.fileView.text = result.reason; pv.countView.text = "" } + importMessage = "Import failed: ${result.reason}" + android.os.Handler(activity.mainLooper).postDelayed({ + callbacks.refreshGames(); activeImportProgressView = null + callbacks.dismissOverlay { callbacks.showManageFiles() } + }, 3000) + } + } + } + } + } + + fun handleCoverImageResult(resultCode: Int, data: Intent?) { + val callback = pendingCoverCallback + pendingCoverCallback = null + val storageName = pendingCoverStorage + pendingCoverStorage = null + + if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + + val uri = data.data!! + val coverDir = File(activity.filesDir, "game_covers").apply { mkdirs() } + val destFile = File(coverDir, "${storageName}.jpg") + try { + val inputStream = activity.contentResolver.openInputStream(uri) + ?: throw IllegalStateException("Unable to open selected cover image") + inputStream.use { input -> + destFile.outputStream().use { output -> + input.copyTo(output) + } + } + callback?.invoke(destFile.absolutePath) + activity.runOnUiThread { callbacks.showHome() } + } catch (e: Exception) { + Log.w(TAG, "Failed to save cover image", e) + activity.runOnUiThread { + Toast.makeText(activity, "Failed to set cover image", Toast.LENGTH_SHORT).show() + } + } + } + + fun handlePatchZipResult(resultCode: Int, data: Intent?) { + val callback = pendingPatchCallback + pendingPatchCallback = null + val storageName = pendingPatchStorage + pendingPatchStorage = null + + if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + + val uri = data.data!! + val patchDir = File(activity.cacheDir, "patch_zips").apply { mkdirs() } + val destFile = File(patchDir, "${storageName}_patch_${System.currentTimeMillis()}.zip") + try { + val inputStream = activity.contentResolver.openInputStream(uri) + ?: throw IllegalStateException("Unable to open ZIP file") + inputStream.use { input -> + destFile.outputStream().use { output -> + input.copyTo(output) + } + } + callback?.invoke(destFile.absolutePath) + } catch (e: Exception) { + Log.w(TAG, "Failed to copy patch ZIP", e) + callback?.invoke("") + activity.runOnUiThread { + Toast.makeText(activity, "Failed to read patch file", Toast.LENGTH_SHORT).show() + } + } + } + + fun handleSaveExportResult(resultCode: Int, data: Intent?) { + val storageName = pendingSaveExportStorage + pendingSaveExportStorage = null + + if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + + val uri = data.data!! + try { + val outputStream = activity.contentResolver.openOutputStream(uri) + ?: throw IllegalStateException("Unable to open export destination") + val count = outputStream.use { output -> + saveManager.exportAllSavesZip(storageName, output) + } + Toast.makeText(activity, "Exported $count save files", Toast.LENGTH_LONG).show() + } catch (e: Exception) { + Log.w(TAG, "Failed to export saves", e) + Toast.makeText(activity, "Failed to export saves", Toast.LENGTH_SHORT).show() + } + } + + fun handleSaveImportResult(resultCode: Int, data: Intent?) { + val storageName = pendingSaveImportStorage + pendingSaveImportStorage = null + + if (resultCode != Activity.RESULT_OK || data?.data == null || storageName == null) return + + val uri = data.data!! + val importDir = File(activity.cacheDir, "save_import_zips").apply { mkdirs() } + val destFile = File(importDir, "${storageName}_saves_${System.currentTimeMillis()}.zip") + try { + val inputStream = activity.contentResolver.openInputStream(uri) + ?: throw IllegalStateException("Unable to open selected save ZIP") + inputStream.use { input -> + destFile.outputStream().use { output -> + input.copyTo(output) + } + } + val count = saveManager.importSavesZip(storageName, destFile) + if (count > 0) { + Toast.makeText(activity, "Imported $count save files", Toast.LENGTH_LONG).show() + } else { + Toast.makeText(activity, "No save files found in the selected archive", Toast.LENGTH_LONG).show() + } + } catch (e: Exception) { + Log.w(TAG, "Failed to import saves", e) + Toast.makeText(activity, "Failed to import saves", Toast.LENGTH_SHORT).show() + } finally { + destFile.delete() + } + } + + fun handleImportFolderResult(resultCode: Int, data: Intent?) { + if (resultCode != Activity.RESULT_OK) { + Log.w(TAG, "onActivityResult: result not OK") + return + } + val treeUri = data?.data ?: run { + Log.w(TAG, "onActivityResult: no data URI"); return + } + Log.i(TAG, "onActivityResult: treeUri=$treeUri pending=$pendingImportStorage") + + runCatching { activity.contentResolver.takePersistableUriPermission( + treeUri, data.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) + ) } + val browser = SafStorageBrowser(activity.contentResolver) + importBrowserStack.clear() + runCatching { + importBrowserStack += browser.describeFolder(browser.rootFromTreeUri(treeUri).documentUri) + }.onFailure { error -> + Log.w(TAG, "Could not open authorized storage location", error) + Toast.makeText(activity, "Could not open that storage location", Toast.LENGTH_SHORT).show() + } + showGameFolderBrowser() + } +} diff --git a/app/src/main/java/com/runestone/app/importer/SafGameImporter.kt b/app/src/main/java/com/runestone/app/importer/SafGameImporter.kt index cbb7fcb..96a0e4a 100644 --- a/app/src/main/java/com/runestone/app/importer/SafGameImporter.kt +++ b/app/src/main/java/com/runestone/app/importer/SafGameImporter.kt @@ -15,7 +15,7 @@ import android.net.Uri import android.provider.DocumentsContract import android.util.Log import com.runestone.app.data.EngineType -import com.runestone.app.engine.EngineDetector +import com.runestone.app.engine.EngineRegistry import com.runestone.app.workspace.WorkspaceManager import org.json.JSONObject import java.io.File @@ -74,7 +74,7 @@ class SafGameImporter( } onProgress("Checking game files...") - val engineType = EngineDetector.detect(incoming) + val engineType = EngineRegistry.detect(incoming)?.let { EngineType.fromEngineId(it.id) } ?: EngineType.UNKNOWN if (engineType == EngineType.UNKNOWN) { incoming.deleteRecursively() gameDir.deleteRecursively() diff --git a/app/src/main/java/com/runestone/app/input/CanvasGlassStyle.kt b/app/src/main/java/com/runestone/app/input/CanvasGlassStyle.kt new file mode 100644 index 0000000..7bb08ab --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/CanvasGlassStyle.kt @@ -0,0 +1,114 @@ +package com.runestone.app.input + +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.Typeface + +object CanvasGlassStyle { + + private val shadowPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val fillPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val fillPressedPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE; strokeWidth = 1.8f } + private val highlightPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val labelPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { textAlign = Paint.Align.CENTER; isFakeBoldText = true; typeface = Typeface.DEFAULT_BOLD } + + fun dp(context: android.content.Context, value: Int): Float = value * context.resources.displayMetrics.density + + fun drawCircle(canvas: Canvas, cx: Float, cy: Float, r: Float, pressed: Boolean, a: Float, label: String, labelSize: Float = 0f) { + shadowPaint.color = Color.argb((55 * a).toInt().coerceIn(0, 255), 0, 0, 0) + canvas.drawCircle(cx + 1.5f, cy + 2.5f, r, shadowPaint) + fillPaint.color = Color.argb((if (pressed) 80 else 38).coerceIn(0, 255), 255, 255, 255) + canvas.drawCircle(cx, cy, r, fillPaint) + borderPaint.alpha = (if (pressed) 160 else 90).coerceIn(0, 255) + canvas.drawCircle(cx, cy, r - 0.9f, borderPaint) + if (!pressed) { + highlightPaint.color = Color.argb((40 * a).toInt().coerceIn(0, 255), 255, 255, 255) + canvas.drawArc(RectF(cx - r, cy - r, cx + r, cy + r), 225f, 90f, true, highlightPaint) + } + if (label.isNotEmpty()) { + val size = if (labelSize > 0f) labelSize else r * 0.9f + labelPaint.textSize = size + labelPaint.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((230 * a).toInt().coerceIn(0, 255), 232, 229, 220) + canvas.drawText(label, cx, cy + size * 0.35f, labelPaint) + } + } + + fun drawRoundRect(canvas: Canvas, rect: RectF, r: Float, pressed: Boolean, a: Float, label: String, labelSize: Float = 0f) { + shadowPaint.color = Color.argb((50 * a).toInt().coerceIn(0, 255), 0, 0, 0) + canvas.drawRoundRect(rect.left + 1f, rect.top + 2.5f, rect.right + 1f, rect.bottom + 2.5f, r, r, shadowPaint) + fillPaint.color = Color.argb((if (pressed) 75 else 35).coerceIn(0, 255), 255, 255, 255) + canvas.drawRoundRect(rect, r, r, fillPaint) + borderPaint.alpha = (if (pressed) 150 else 80).coerceIn(0, 255) + canvas.drawRoundRect(rect, r, r, borderPaint) + if (!pressed) { + highlightPaint.color = Color.argb((35 * a).toInt().coerceIn(0, 255), 255, 255, 255) + val hl = RectF(rect.left, rect.top, rect.right, rect.top + rect.height() * 0.4f) + canvas.drawRoundRect(hl, r, r, highlightPaint) + } + if (label.isNotEmpty()) { + val size = if (labelSize > 0f) labelSize else rect.height() * 0.55f + labelPaint.textSize = size + labelPaint.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((225 * a).toInt().coerceIn(0, 255), 232, 229, 220) + canvas.drawText(label, rect.centerX(), rect.centerY() + size * 0.35f, labelPaint) + } + } + + fun drawIcon(canvas: Canvas, cx: Float, cy: Float, s: Float, a: Float, draw: (Canvas, Float, Float, Float, Paint) -> Unit) { + val p = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE; strokeCap = Paint.Cap.ROUND; strokeJoin = Paint.Join.ROUND; strokeWidth = 2.2f + color = Color.argb((220 * a).toInt().coerceIn(0, 255), 232, 229, 220) + } + draw(canvas, cx, cy, s, p) + } + + fun drawArrow(canvas: Canvas, cx: Float, cy: Float, dir: String, size: Float, pressed: Boolean, a: Float) { + val ap = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL; textAlign = Paint.Align.CENTER; isFakeBoldText = true; typeface = Typeface.DEFAULT_BOLD + textSize = size * 1.6f + color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((230 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + val arrow = when (dir) { "up" -> "\u25B2"; "down" -> "\u25BC"; "left" -> "\u25C0"; else -> "\u25B6" } + canvas.drawText(arrow, cx, cy + ap.textSize * 0.35f, ap) + } + + fun drawVectorIcon(canvas: Canvas, cx: Float, cy: Float, s: Float, a: Float, paint: Paint) { + paint.alpha = (220 * a).toInt().coerceIn(0, 255) + } + + object Icons { + fun gamepad(canvas: Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.8f, cy - s * 0.55f, cx + s * 0.8f, cy + s * 0.55f), s * 0.2f, s * 0.2f, p) + canvas.drawCircle(cx - s * 0.45f, cy + s * 0.5f, s * 0.18f, p) + canvas.drawCircle(cx + s * 0.45f, cy + s * 0.5f, s * 0.18f, p) + canvas.drawCircle(cx - s * 0.35f, cy, s * 0.08f, p) + canvas.drawCircle(cx, cy, s * 0.08f, p) + canvas.drawCircle(cx + s * 0.35f, cy, s * 0.08f, p) + } + fun sliders(canvas: Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val bar = s * 0.6f; val gap = s * 0.35f + for (i in 0..2) { val y = cy - gap + i * gap + canvas.drawLine(cx - bar, y, cx + bar, y, p) + val knob = if (i == 0) cx - bar * 0.4f else if (i == 1) cx + bar * 0.3f else cx + canvas.drawCircle(knob, y, s * 0.12f, p) + } + } + fun keyboard(canvas: Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.75f, cy - s * 0.5f, cx + s * 0.75f, cy + s * 0.5f), s * 0.15f, s * 0.15f, p) + for (row in 0..2) { val cols = if (row == 2) 4 else 5; val kw = s * 0.2f; val kh = s * 0.18f + val sx = cx - ((cols - 1) * (kw + 2f)) / 2f + for (col in 0 until cols) { val kx = sx + col * (kw + 2f); val ky = cy - s * 0.35f + row * (kh + 2f) + canvas.drawRoundRect(RectF(kx - kw / 2, ky - kh / 2, kx + kw / 2, ky + kh / 2), 2f, 2f, p) } + } + } + fun touchPointer(canvas: Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + p.style = Paint.Style.STROKE; canvas.drawCircle(cx, cy, s * 0.5f, p) + p.style = Paint.Style.FILL; canvas.drawCircle(cx, cy, s * 0.15f, p) + canvas.drawLine(cx + s * 0.5f, cy, cx + s * 0.8f, cy, p) + canvas.drawLine(cx, cy - s * 0.5f, cx, cy - s * 0.8f, p) + p.style = Paint.Style.STROKE + } + } +} diff --git a/app/src/main/java/com/runestone/app/input/InputDispatcher.kt b/app/src/main/java/com/runestone/app/input/InputDispatcher.kt new file mode 100644 index 0000000..f46ac67 --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/InputDispatcher.kt @@ -0,0 +1,333 @@ +package com.runestone.app.input + +import android.view.InputDevice +import android.view.InputEvent +import android.view.KeyEvent +import android.view.MotionEvent +import com.runestone.app.data.ControllerShortcut +import com.runestone.app.engine.WebViewEngine +import org.json.JSONObject + +class InputDispatcher(private val webViewEngine: WebViewEngine?) { + + private val pressedControllerKeys = mutableSetOf() + private val activeControllerAxisButtons = mutableSetOf() + private var triggerHomeComboDown = false + private var controllerPresetId: String? = null + + fun dispatchKeyEvent(event: KeyEvent): Boolean { + if (isControllerEvent(event)) { + if (handleControllerCombo(event)) return true + val mapped = mapControllerKey(event) ?: return false + dispatchMappedGameKey(mapped, event.action) + return true + } + + if (event.action == KeyEvent.ACTION_DOWN || event.action == KeyEvent.ACTION_UP) { + val engine = webViewEngine ?: return false + val isDown = event.action == KeyEvent.ACTION_DOWN + val keyChar = event.unicodeChar + val keyCode = event.keyCode + + engine.dispatchKeyEvent(event) + + val jsAction = if (isDown) "_onKeyDown" else "_onKeyUp" + val js = """(function(){ + try { + if (window.Input && window.Input.$jsAction) + window.Input.$jsAction({which:$keyCode, keyCode:$keyCode}); + if (window.TouchInput && window.TouchInput.$jsAction) + window.TouchInput.$jsAction({which:$keyCode, keyCode:$keyCode}); + if ($isDown && $keyChar > 31) { + var c = String.fromCharCode($keyChar).toLowerCase(); + window.dispatchEvent(new CustomEvent('rune_key', {detail:{key:c,code:$keyCode}})); + } + } catch(e){} + })();""".trimIndent() + engine.evaluateJavascript(js, null) + } + return false + } + + fun dispatchGenericMotionEvent(event: MotionEvent): Boolean { + if (!isControllerMotionEvent(event)) return false + if (handleTriggerHomeCombo(event)) return true + val preset = controllerPresetFor(event.device) + val activeButtons = ControllerMapper.mapAxisToButtons(event, preset).toSet() + val released = activeControllerAxisButtons - activeButtons + val pressed = activeButtons - activeControllerAxisButtons + + released.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_UP) } + pressed.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_DOWN) } + + activeControllerAxisButtons.clear() + activeControllerAxisButtons.addAll(activeButtons) + return pressed.isNotEmpty() || released.isNotEmpty() + } + + fun releaseControllerAxes() { + activeControllerAxisButtons.forEach { dispatchMappedGameButton(it, KeyEvent.ACTION_UP) } + activeControllerAxisButtons.clear() + } + + fun resetControllerState() { + pressedControllerKeys.clear() + activeControllerAxisButtons.clear() + triggerHomeComboDown = false + } + + fun sendKeyboardText(text: String) { + val engine = webViewEngine ?: return + text.forEach { char -> + val keyCode = keyCodeForChar(char) + val js = """(function(){ + try { + var key = ${JSONObject.quote(char.toString())}; + var code = $keyCode; + window.dispatchEvent(new KeyboardEvent('keydown', {key:key, keyCode:code, which:code, bubbles:true})); + if (window.Input && window.Input._onKeyDown) window.Input._onKeyDown({key:key, keyCode:code, which:code}); + window.dispatchEvent(new KeyboardEvent('keypress', {key:key, keyCode:code, which:code, bubbles:true})); + window.dispatchEvent(new InputEvent('input', {data:key, inputType:'insertText', bubbles:true})); + window.dispatchEvent(new KeyboardEvent('keyup', {key:key, keyCode:code, which:code, bubbles:true})); + if (window.Input && window.Input._onKeyUp) window.Input._onKeyUp({key:key, keyCode:code, which:code}); + } catch(e) {} + })();""".trimIndent() + if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { + engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode)) + engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) + } + engine.evaluateJavascript(js, null) + } + } + + fun sendKeyboardKey(keyCode: Int) { + val engine = webViewEngine ?: return + engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode)) + engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) + val key = when (keyCode) { + KeyEvent.KEYCODE_DEL -> "Backspace" + KeyEvent.KEYCODE_ENTER -> "Enter" + else -> "" + } + val inputType = if (keyCode == KeyEvent.KEYCODE_DEL) "deleteContentBackward" else "insertLineBreak" + val js = """(function(){ + try { + var key = ${JSONObject.quote(key)}; + var code = $keyCode; + window.dispatchEvent(new KeyboardEvent('keydown', {key:key, keyCode:code, which:code, bubbles:true})); + if (window.Input && window.Input._onKeyDown) window.Input._onKeyDown({key:key, keyCode:code, which:code}); + window.dispatchEvent(new InputEvent('input', {data:null, inputType:'$inputType', bubbles:true})); + window.dispatchEvent(new KeyboardEvent('keyup', {key:key, keyCode:code, which:code, bubbles:true})); + if (window.Input && window.Input._onKeyUp) window.Input._onKeyUp({key:key, keyCode:code, which:code}); + } catch(e) {} + })();""".trimIndent() + engine.evaluateJavascript(js, null) + } + + fun sendKeyboardKeyUp(keyCode: Int) { + val engine = webViewEngine ?: return + engine.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) + val js = """(function(){ + try { + window.dispatchEvent(new KeyboardEvent('keyup', {keyCode:$keyCode, which:$keyCode, bubbles:true})); + if (window.Input && window.Input._onKeyUp) window.Input._onKeyUp({keyCode:$keyCode, which:$keyCode}); + } catch(e) {} + })();""".trimIndent() + engine.evaluateJavascript(js, null) + } + + fun shortcutPressed(shortcut: ControllerShortcut, settingsShortcut: ControllerShortcut): Boolean { + if (settingsShortcut != shortcut) return false + return when (shortcut) { + ControllerShortcut.OFF -> false + ControllerShortcut.L2_R2 -> + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L2) && + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R2) + ControllerShortcut.L1_R1 -> + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L1) && + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R1) + ControllerShortcut.START_SELECT -> + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) && + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_SELECT) + ControllerShortcut.L2_START -> + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_L2) && + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) + ControllerShortcut.R2_START -> + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_R2) && + pressedControllerKeys.contains(KeyEvent.KEYCODE_BUTTON_START) + } + } + + private fun handleControllerCombo(event: KeyEvent): Boolean { + if (event.action == KeyEvent.ACTION_UP) { + pressedControllerKeys.remove(event.keyCode) + return false + } + if (event.action != KeyEvent.ACTION_DOWN) return false + pressedControllerKeys.add(event.keyCode) + return event.repeatCount > 0 + } + + private fun handleTriggerHomeCombo(event: MotionEvent): Boolean { + val left = maxOf( + event.getAxisValue(MotionEvent.AXIS_LTRIGGER), + event.getAxisValue(MotionEvent.AXIS_BRAKE), + ) + val right = maxOf( + event.getAxisValue(MotionEvent.AXIS_RTRIGGER), + event.getAxisValue(MotionEvent.AXIS_GAS), + ) + val bothPressed = left > 0.55f && right > 0.55f + if (!bothPressed) { + triggerHomeComboDown = false + return false + } + if (triggerHomeComboDown) return true + triggerHomeComboDown = true + return true + } + + private fun mapControllerKey(event: KeyEvent): Int? { + if (event.action != KeyEvent.ACTION_DOWN && event.action != KeyEvent.ACTION_UP) return null + if (event.repeatCount > 0 && event.action == KeyEvent.ACTION_DOWN) return null + + val directDpad = when (event.keyCode) { + KeyEvent.KEYCODE_DPAD_UP, + KeyEvent.KEYCODE_DPAD_DOWN, + KeyEvent.KEYCODE_DPAD_LEFT, + KeyEvent.KEYCODE_DPAD_RIGHT -> event.keyCode + else -> null + } + if (directDpad != null) return directDpad + + val preset = controllerPresetFor(event.device) + val button = ControllerMapper.mapKeyToButton(event, preset) ?: return null + return ControllerMapper.toKeyCode(button) + } + + private fun dispatchMappedGameButton(button: ControllerMapper.GameButton, action: Int) { + dispatchMappedGameKey(ControllerMapper.toKeyCode(button), action) + } + + private fun dispatchMappedGameKey(keyCode: Int, action: Int) { + if (keyCode == KeyEvent.KEYCODE_UNKNOWN) return + val engine = webViewEngine ?: return + val keyEvent = KeyEvent(action, keyCode) + engine.dispatchKeyEvent(keyEvent) + val jsAction = if (action == KeyEvent.ACTION_DOWN) "_onKeyDown" else "_onKeyUp" + val js = """(function(){ + try { + var ev = {which:$keyCode, keyCode:$keyCode}; + if (window.Input && window.Input.$jsAction) window.Input.$jsAction(ev); + if (window.TouchInput && window.TouchInput.$jsAction) window.TouchInput.$jsAction(ev); + window.dispatchEvent(new KeyboardEvent('${if (action == KeyEvent.ACTION_DOWN) "keydown" else "keyup"}', { + keyCode:$keyCode, + which:$keyCode, + bubbles:true + })); + } catch(e) {} + })();""".trimIndent() + engine.evaluateJavascript(js, null) + } + + private fun controllerPresetFor(device: android.view.InputDevice?): ControllerMapper.ControllerPreset { + if (device == null) return ControllerMapper.getPreset("generic") + val current = controllerPresetId + if (current != null) return ControllerMapper.getPreset(current) + val detected = ControllerMapper.detectPreset(device) + controllerPresetId = detected + return ControllerMapper.getPreset(detected) + } + + companion object { + fun zoneToKeyCode(zone: TouchOverlayView.Zone): Int = when (zone) { + TouchOverlayView.Zone.DPAD_UP -> KeyEvent.KEYCODE_DPAD_UP + TouchOverlayView.Zone.DPAD_DOWN -> KeyEvent.KEYCODE_DPAD_DOWN + TouchOverlayView.Zone.DPAD_LEFT -> KeyEvent.KEYCODE_DPAD_LEFT + TouchOverlayView.Zone.DPAD_RIGHT -> KeyEvent.KEYCODE_DPAD_RIGHT + TouchOverlayView.Zone.BTN_CONFIRM -> KeyEvent.KEYCODE_ENTER + TouchOverlayView.Zone.BTN_BACK -> KeyEvent.KEYCODE_ESCAPE + TouchOverlayView.Zone.BTN_DASH -> KeyEvent.KEYCODE_SHIFT_LEFT + TouchOverlayView.Zone.BTN_EXTRA_A -> KeyEvent.KEYCODE_A + TouchOverlayView.Zone.BTN_EXTRA_S -> KeyEvent.KEYCODE_S + TouchOverlayView.Zone.BTN_EXTRA_D -> KeyEvent.KEYCODE_D + TouchOverlayView.Zone.BTN_EXTRA_Z -> KeyEvent.KEYCODE_Z + TouchOverlayView.Zone.BTN_EXTRA_X -> KeyEvent.KEYCODE_X + TouchOverlayView.Zone.BTN_EXTRA_C -> KeyEvent.KEYCODE_C + TouchOverlayView.Zone.BTN_CTRL -> KeyEvent.KEYCODE_CTRL_LEFT + TouchOverlayView.Zone.BTN_ALT -> KeyEvent.KEYCODE_ALT_LEFT + TouchOverlayView.Zone.BTN_SHIFT -> KeyEvent.KEYCODE_SHIFT_LEFT + TouchOverlayView.Zone.SELECT -> KeyEvent.KEYCODE_ESCAPE + TouchOverlayView.Zone.START -> KeyEvent.KEYCODE_ENTER + TouchOverlayView.Zone.MENU -> KeyEvent.KEYCODE_F2 + TouchOverlayView.Zone.SETTINGS -> KeyEvent.KEYCODE_F8 + TouchOverlayView.Zone.HOME -> KeyEvent.KEYCODE_HOME + TouchOverlayView.Zone.L1 -> KeyEvent.KEYCODE_PAGE_UP + TouchOverlayView.Zone.R1 -> KeyEvent.KEYCODE_PAGE_DOWN + TouchOverlayView.Zone.OVERLAY_MENU -> KeyEvent.KEYCODE_MENU + TouchOverlayView.Zone.BTN_A -> KeyEvent.KEYCODE_ENTER + TouchOverlayView.Zone.BTN_B -> KeyEvent.KEYCODE_ESCAPE + TouchOverlayView.Zone.BTN_X -> KeyEvent.KEYCODE_Q + TouchOverlayView.Zone.BTN_Y -> KeyEvent.KEYCODE_W + TouchOverlayView.Zone.ZL -> KeyEvent.KEYCODE_PAGE_UP + TouchOverlayView.Zone.ZR -> KeyEvent.KEYCODE_PAGE_DOWN + TouchOverlayView.Zone.L3 -> KeyEvent.KEYCODE_F5 + TouchOverlayView.Zone.R3 -> KeyEvent.KEYCODE_F6 + TouchOverlayView.Zone.GUIDE -> KeyEvent.KEYCODE_F2 + TouchOverlayView.Zone.PLUS -> KeyEvent.KEYCODE_EQUALS + TouchOverlayView.Zone.MINUS -> KeyEvent.KEYCODE_MINUS + TouchOverlayView.Zone.LEFT_STICK -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.RIGHT_STICK -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.TOOLBAR_TOGGLE -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.TOOLBAR_SETTINGS -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.TOOLBAR_KEYBOARD -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.TOOLBAR_POINTER -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.MENU_CHEATS -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.MENU_MUTE -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.MENU_ROTATE -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.MENU_REMAP -> KeyEvent.KEYCODE_UNKNOWN + TouchOverlayView.Zone.MENU_QUIT -> KeyEvent.KEYCODE_UNKNOWN + } + + fun keyNameToCode(name: String): Int = when (name) { + "ENTER" -> KeyEvent.KEYCODE_ENTER + "ESCAPE" -> KeyEvent.KEYCODE_ESCAPE + "SPACE" -> KeyEvent.KEYCODE_SPACE + "TAB" -> KeyEvent.KEYCODE_TAB + "Z" -> KeyEvent.KEYCODE_Z + "X" -> KeyEvent.KEYCODE_X + "Q" -> KeyEvent.KEYCODE_Q + "B" -> KeyEvent.KEYCODE_B + "A" -> KeyEvent.KEYCODE_A + "S" -> KeyEvent.KEYCODE_S + "D" -> KeyEvent.KEYCODE_D + "W" -> KeyEvent.KEYCODE_W + "V" -> KeyEvent.KEYCODE_V + "C" -> KeyEvent.KEYCODE_C + "F2" -> KeyEvent.KEYCODE_F2 + "F8" -> KeyEvent.KEYCODE_F8 + "CTRL_LEFT" -> KeyEvent.KEYCODE_CTRL_LEFT + "SHIFT_LEFT" -> KeyEvent.KEYCODE_SHIFT_LEFT + "ALT_LEFT" -> KeyEvent.KEYCODE_ALT_LEFT + else -> KeyEvent.KEYCODE_UNKNOWN + } + + fun keyCodeForChar(char: Char): Int = when (char) { + in 'a'..'z' -> KeyEvent.KEYCODE_A + (char - 'a') + in 'A'..'Z' -> KeyEvent.KEYCODE_A + (char - 'A') + in '0'..'9' -> KeyEvent.KEYCODE_0 + (char - '0') + ' ' -> KeyEvent.KEYCODE_SPACE + else -> KeyEvent.KEYCODE_UNKNOWN + } + + fun isControllerEvent(event: KeyEvent): Boolean { + val controllerSources = InputDevice.SOURCE_GAMEPAD or InputDevice.SOURCE_JOYSTICK or InputDevice.SOURCE_DPAD + return event.source and controllerSources != 0 + } + + fun isControllerMotionEvent(event: MotionEvent): Boolean { + val controllerSources = InputDevice.SOURCE_GAMEPAD or InputDevice.SOURCE_JOYSTICK or InputDevice.SOURCE_DPAD + return event.source and controllerSources != 0 + } + } +} diff --git a/app/src/main/java/com/runestone/app/input/OverlayStyle.kt b/app/src/main/java/com/runestone/app/input/OverlayStyle.kt new file mode 100644 index 0000000..a4351ae --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/OverlayStyle.kt @@ -0,0 +1,278 @@ +package com.runestone.app.input + +import android.content.Context +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Path +import android.graphics.RectF +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable + +object OverlayStyle { + const val FILL_ALPHA_IDLE = 0.14f + const val FILL_ALPHA_PRESSED = 0.28f + const val BORDER_ALPHA_IDLE = 0.35f + const val BORDER_ALPHA_PRESSED = 0.58f + const val HIGHLIGHT_ALPHA = 0.18f + const val SHADOW_ALPHA = 0.30f + const val LABEL_ALPHA = 0.90f + const val MUTED_LABEL_ALPHA = 0.60f + const val CORNER_KEY = 10f + const val CORNER_BUTTON = 16f + const val CORNER_PANEL = 24f + const val CORNER_TOOLBAR = 14f + const val MIN_TOUCH = 48f + + fun fillPaint(alpha: Float = FILL_ALPHA_IDLE): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + + fun borderPaint(alpha: Float = BORDER_ALPHA_IDLE, width: Float = 1.8f): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = width + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + + fun highlightPaint(alpha: Float = HIGHLIGHT_ALPHA): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + + fun shadowPaint(alpha: Float = SHADOW_ALPHA): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 0, 0, 0) + } + + fun labelPaint(size: Float = 26f, alpha: Float = LABEL_ALPHA): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER + textSize = size + isFakeBoldText = true + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + + fun smallLabelPaint(size: Float = 16f, alpha: Float = MUTED_LABEL_ALPHA): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER + textSize = size + color = Color.argb((alpha * 255).toInt().coerceIn(0, 255), 232, 229, 220) + } + + fun accentLabelPaint(size: Float = 24f): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER + textSize = size + isFakeBoldText = true + color = Color.rgb(238, 207, 158) + } + + fun createArrowPath(direction: String, size: Float): Path { + val path = Path() + when (direction) { + "up" -> { path.moveTo(0f, -size); path.lineTo(-size, size * 0.7f); path.lineTo(size, size * 0.7f); path.close() } + "down" -> { path.moveTo(0f, size); path.lineTo(-size, -size * 0.7f); path.lineTo(size, -size * 0.7f); path.close() } + "left" -> { path.moveTo(-size, 0f); path.lineTo(size * 0.7f, -size); path.lineTo(size * 0.7f, size); path.close() } + "right" -> { path.moveTo(size, 0f); path.lineTo(-size * 0.7f, -size); path.lineTo(-size * 0.7f, size); path.close() } + } + return path + } + + fun drawGlassCircle(canvas: android.graphics.Canvas, cx: Float, cy: Float, r: Float, pressed: Boolean, a: Float, label: String = "", labelSize: Float = 26f, accentColor: Int = Color.rgb(238, 207, 158), showLabel: Boolean = true) { + val fillAlpha = if (pressed) FILL_ALPHA_PRESSED else FILL_ALPHA_IDLE + val borderAlpha = if (pressed) BORDER_ALPHA_PRESSED else BORDER_ALPHA_IDLE + canvas.drawCircle(cx + 2f, cy + 3f, r, shadowPaint(SHADOW_ALPHA * a)) + fillPaint(fillAlpha * a).let { p -> canvas.drawCircle(cx, cy, r, p) } + borderPaint(borderAlpha * a).let { p -> canvas.drawCircle(cx, cy, r, p) } + if (!pressed) { + canvas.drawArc(RectF(cx - r, cy - r, cx + r, cy + r), 225f, 90f, true, highlightPaint(HIGHLIGHT_ALPHA * a)) + } + if (label.isNotEmpty() && showLabel) { + val lp = labelPaint(labelSize, LABEL_ALPHA * a) + lp.color = if (pressed) accentColor else Color.argb((LABEL_ALPHA * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + canvas.drawText(label, cx, cy + labelSize * 0.3f, lp) + } + } + + fun drawGlassRoundRect(canvas: android.graphics.Canvas, rect: RectF, r: Float, pressed: Boolean, a: Float, label: String = "", labelSize: Float = 18f) { + val fillAlpha = if (pressed) FILL_ALPHA_PRESSED else FILL_ALPHA_IDLE + val borderAlpha = if (pressed) BORDER_ALPHA_PRESSED else BORDER_ALPHA_IDLE + canvas.drawRoundRect(rect.left + 1f, rect.top + 3f, rect.right + 1f, rect.bottom + 3f, r, r, shadowPaint(SHADOW_ALPHA * a)) + fillPaint(fillAlpha * a).let { p -> canvas.drawRoundRect(rect, r, r, p) } + borderPaint(borderAlpha * a).let { p -> canvas.drawRoundRect(rect, r, r, p) } + if (!pressed) { + val hl = RectF(rect.left, rect.top, rect.right, rect.top + rect.height() * 0.45f) + canvas.drawRoundRect(hl, r, r, highlightPaint(HIGHLIGHT_ALPHA * a)) + } + if (label.isNotEmpty()) { + val lp = labelPaint(labelSize, LABEL_ALPHA * a) + lp.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((LABEL_ALPHA * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + canvas.drawText(label, rect.centerX(), rect.centerY() + labelSize * 0.35f, lp) + } + } + + fun arrowPaint(pressed: Boolean, a: Float): Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((LABEL_ALPHA * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + + fun glassBgDrawable(context: Context, radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = + GradientDrawable().apply { + setColor(Color.argb(alpha, if (accent) 48 else 14, if (accent) 38 else 14, if (accent) 28 else 18)) + cornerRadius = radius.toFloat() + setStroke(dp(context, 1), Color.argb(if (accent) 80 else 45, if (accent) 180 else 100, if (accent) 140 else 90, if (accent) 100 else 80)) + } + + fun dp(context: Context, value: Int): Int = (value * context.resources.displayMetrics.density).toInt() + + fun dpf(context: Context, value: Int): Float = value * context.resources.displayMetrics.density + + fun drawVectorIcon(canvas: android.graphics.Canvas, cx: Float, cy: Float, size: Float, a: Float, paint: Paint, draw: (Canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, Paint: Paint) -> Unit) { + paint.alpha = (LABEL_ALPHA * 255 * a).toInt().coerceIn(0, 255) + draw(canvas, cx, cy, size, paint) + } + + object Icons { + fun gamepad(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.8f, cy - s * 0.55f, cx + s * 0.8f, cy + s * 0.55f), s * 0.2f, s * 0.2f, p) + canvas.drawCircle(cx - s * 0.45f, cy + s * 0.5f, s * 0.18f, p) + canvas.drawCircle(cx + s * 0.45f, cy + s * 0.5f, s * 0.18f, p) + canvas.drawCircle(cx - s * 0.35f, cy, s * 0.08f, p) + canvas.drawCircle(cx, cy, s * 0.08f, p) + canvas.drawCircle(cx + s * 0.35f, cy, s * 0.08f, p) + } + + fun sliders(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val bar = s * 0.6f + val gap = s * 0.35f + for (i in 0..2) { + val y = cy - gap + i * gap + canvas.drawLine(cx - bar, y, cx + bar, y, p) + val knob = if (i == 0) cx - bar * 0.4f else if (i == 1) cx + bar * 0.3f else cx + canvas.drawCircle(knob, y, s * 0.12f, p) + } + } + + fun keyboard(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.75f, cy - s * 0.5f, cx + s * 0.75f, cy + s * 0.5f), s * 0.15f, s * 0.15f, p) + for (row in 0..2) { + val cols = if (row == 2) 4 else 5 + val keyW = s * 0.2f + val keyH = s * 0.18f + val startX = cx - ((cols - 1) * (keyW + 2f)) / 2f + for (col in 0 until cols) { + val kx = startX + col * (keyW + 2f) + val ky = cy - s * 0.35f + row * (keyH + 2f) + canvas.drawRoundRect(RectF(kx - keyW / 2, ky - keyH / 2, kx + keyW / 2, ky + keyH / 2), 2f, 2f, p) + } + } + } + + fun touchPointer(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + p.style = Paint.Style.STROKE + canvas.drawCircle(cx, cy, s * 0.5f, p) + p.style = Paint.Style.FILL + canvas.drawCircle(cx, cy, s * 0.15f, p) + canvas.drawLine(cx + s * 0.5f, cy, cx + s * 0.8f, cy, p) + canvas.drawLine(cx, cy - s * 0.5f, cx, cy - s * 0.8f, p) + p.style = Paint.Style.STROKE + } + + fun close(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawLine(cx - s * 0.5f, cy - s * 0.5f, cx + s * 0.5f, cy + s * 0.5f, p) + canvas.drawLine(cx + s * 0.5f, cy - s * 0.5f, cx - s * 0.5f, cy + s * 0.5f, p) + } + + fun check(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val path = Path() + path.moveTo(cx - s * 0.5f, cy) + path.lineTo(cx - s * 0.15f, cy + s * 0.4f) + path.lineTo(cx + s * 0.5f, cy - s * 0.4f) + canvas.drawPath(path, p) + } + + fun undo(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val path = Path() + path.arcTo(RectF(cx - s * 0.3f, cy - s * 0.4f, cx + s * 0.4f, cy + s * 0.4f), 0f, -270f, true) + canvas.drawPath(path, p) + canvas.drawLine(cx + s * 0.4f, cy - s * 0.4f, cx + s * 0.5f, cy - s * 0.1f, p) + } + + fun rotate(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawArc(RectF(cx - s * 0.5f, cy - s * 0.5f, cx + s * 0.5f, cy + s * 0.5f), 0f, 300f, false, p) + val path = Path() + path.moveTo(cx + s * 0.45f, cy - s * 0.6f) + path.lineTo(cx + s * 0.7f, cy - s * 0.3f) + path.lineTo(cx + s * 0.25f, cy - s * 0.3f) + canvas.drawPath(path, p) + } + + fun info(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + p.style = Paint.Style.STROKE + canvas.drawCircle(cx, cy, s * 0.5f, p) + p.style = Paint.Style.FILL + canvas.drawCircle(cx, cy - s * 0.15f, s * 0.08f, p) + canvas.drawLine(cx, cy, cx, cy + s * 0.35f, p) + p.style = Paint.Style.STROKE + } + + fun speakerMute(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val path = Path() + path.moveTo(cx + s * 0.2f, cy - s * 0.3f) + path.lineTo(cx - s * 0.1f, cy - s * 0.3f) + path.lineTo(cx - s * 0.3f, cy - s * 0.15f) + path.lineTo(cx - s * 0.3f, cy + s * 0.15f) + path.lineTo(cx - s * 0.1f, cy + s * 0.3f) + path.lineTo(cx + s * 0.2f, cy + s * 0.3f) + path.close() + canvas.drawPath(path, p) + p.style = Paint.Style.STROKE + canvas.drawLine(cx + s * 0.3f, cy - s * 0.45f, cx + s * 0.3f, cy + s * 0.45f, p) + canvas.drawLine(cx + s * 0.45f, cy - s * 0.3f, cx + s * 0.45f, cy + s * 0.3f, p) + p.style = Paint.Style.FILL + } + + fun exitDoor(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.4f, cy - s * 0.6f, cx + s * 0.4f, cy + s * 0.6f), s * 0.1f, s * 0.1f, p) + canvas.drawCircle(cx + s * 0.15f, cy - s * 0.1f, s * 0.08f, p) + canvas.drawLine(cx - s * 0.3f, cy, cx - s * 0.6f, cy, p) + val arrow = Path() + arrow.moveTo(cx - s * 0.6f, cy) + arrow.lineTo(cx - s * 0.45f, cy - s * 0.2f) + arrow.lineTo(cx - s * 0.45f, cy + s * 0.2f) + arrow.close() + canvas.drawPath(arrow, p) + } + + fun wand(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawLine(cx - s * 0.5f, cy + s * 0.5f, cx + s * 0.3f, cy - s * 0.3f, p) + val star = Path() + val r = s * 0.2f + for (i in 0..4) { + val a = i * 144f - 90f + val x = cx + s * 0.5f + Math.cos(Math.toRadians(a.toDouble())).toFloat() * r + val y = cy - s * 0.5f + Math.sin(Math.toRadians(a.toDouble())).toFloat() * r + if (i == 0) star.moveTo(x, y) else star.lineTo(x, y) + } + star.close() + canvas.drawPath(star, p) + } + + fun grid(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + val lines = 3 + val step = s * 0.45f / lines + for (i in 1 until lines) { + val off = -s * 0.45f + i * step + canvas.drawLine(cx - s * 0.45f, cy + off, cx + s * 0.45f, cy + off, p) + canvas.drawLine(cx + off, cy - s * 0.45f, cx + off, cy + s * 0.45f, p) + } + canvas.drawRoundRect(RectF(cx - s * 0.45f, cy - s * 0.45f, cx + s * 0.45f, cy + s * 0.45f), 3f, 3f, p) + } + + fun phoneRotate(canvas: android.graphics.Canvas, cx: Float, cy: Float, s: Float, p: Paint) { + canvas.drawRoundRect(RectF(cx - s * 0.3f, cy - s * 0.55f, cx + s * 0.3f, cy + s * 0.55f), s * 0.08f, s * 0.08f, p) + val path = Path() + path.moveTo(cx + s * 0.45f, cy - s * 0.1f) + path.lineTo(cx + s * 0.65f, cy + s * 0.1f) + path.lineTo(cx + s * 0.45f, cy + s * 0.3f) + canvas.drawPath(path, p) + } + } +} diff --git a/app/src/main/java/com/runestone/app/input/RunestoneCanvasOverlayV2.kt b/app/src/main/java/com/runestone/app/input/RunestoneCanvasOverlayV2.kt new file mode 100644 index 0000000..e543e1c --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/RunestoneCanvasOverlayV2.kt @@ -0,0 +1,396 @@ +package com.runestone.app.input + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.Typeface +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.view.KeyEvent +import kotlin.math.sqrt + +class RunestoneCanvasOverlayV2(context: Context) : View(context) { + + enum class Preset { SIMPLIFIED, FULL } + enum class ButtonId { + DPAD_UP, DPAD_DOWN, DPAD_LEFT, DPAD_RIGHT, + BTN_ENTER, BTN_ESC, BTN_Z, BTN_B, + BTN_Y, BTN_X, BTN_A, + BTN_L, BTN_R, BTN_ZL, BTN_ZR, + BTN_L3, BTN_R3, + BTN_SELECT, BTN_START, BTN_HOME, + LEFT_STICK, RIGHT_STICK, + TOOLBAR_TOGGLE, TOOLBAR_SETTINGS, TOOLBAR_KEYBOARD, TOOLBAR_POINTER, + RECOVERY, + } + + var preset: Preset = Preset.SIMPLIFIED + var controllerOpacity: Float = 0.75f + var controllerScale: Float = 1.0f + var controllerVisible: Boolean = true + var toolbarVisible: Boolean = true + + var onKeyDown: ((Int) -> Unit)? = null + var onKeyUp: ((Int) -> Unit)? = null + var onToggleControls: (() -> Unit)? = null + var onOpenMenu: (() -> Unit)? = null + var onRotateLayout: (() -> Unit)? = null + + private var keyboardView: VirtualKeyboardOverlay? = null + + fun toggleKeyboard(ctx: Context) { + val existing = keyboardView + if (existing != null) { + val parent = existing.parent as? ViewGroup + parent?.removeView(existing) + keyboardView = null + return + } + val kb = VirtualKeyboardOverlay(ctx) + kb.landscapeKeys = true + kb.dockMode = VirtualKeyboardOverlay.DockMode.BOTTOM + kb.onKeyDown = onKeyDown + kb.onKeyUp = onKeyUp + kb.onDockModeChanged = { toggleKeyboard(ctx) } + val vg = parent as? ViewGroup + if (vg != null) { + vg.addView(kb, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) + } + keyboardView = kb + } + + private val activeButtons = mutableSetOf() + private val buttonRects = mutableMapOf() + private val recoveryRect = RectF() + private val toolbarRects = arrayOfNulls(4) + + private val labelPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER; isFakeBoldText = true; typeface = Typeface.DEFAULT_BOLD + } + + private fun d(v: Int): Float = v * resources.displayMetrics.density + + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + super.onLayout(changed, left, top, right, bottom) + if (changed) layoutControls() + } + + private fun layoutControls() { + buttonRects.clear() + toolbarRects.fill(null) + val w = width.toFloat() + val h = height.toFloat() + val s = controllerScale + val isLandscape = w > h + + if (isLandscape) { + layoutLandscape(w, h, s) + } else { + layoutPortrait(w, h, s) + } + } + + private fun layoutLandscape(w: Float, h: Float, s: Float) { + val dpadS = (h * 0.13f * s).coerceIn(d(48), d(90)) + val gap = dpadS * 0.08f + val btnW = dpadS * 0.44f + val btnH = dpadS * 0.40f + val dpadCx = w * 0.13f + val dpadCy = h * 0.60f + + val corner = 8f * s + buttonRects[ButtonId.DPAD_UP] = RectF(dpadCx - btnW / 2f, dpadCy - btnH - gap / 2f, dpadCx + btnW / 2f, dpadCy - gap / 2f) + buttonRects[ButtonId.DPAD_DOWN] = RectF(dpadCx - btnW / 2f, dpadCy + gap / 2f, dpadCx + btnW / 2f, dpadCy + btnH + gap / 2f) + buttonRects[ButtonId.DPAD_LEFT] = RectF(dpadCx - btnW - gap / 2f, dpadCy - btnH / 2f, dpadCx - gap / 2f, dpadCy + btnH / 2f) + buttonRects[ButtonId.DPAD_RIGHT] = RectF(dpadCx + gap / 2f, dpadCy - btnH / 2f, dpadCx + btnW + gap / 2f, dpadCy + btnH / 2f) + + val actionR = (h * 0.05f * s).coerceIn(d(22), d(40)) + val actionCx = w * 0.87f + val actionCy = h * 0.56f + val aSpread = actionR * 2.6f + + if (preset == Preset.SIMPLIFIED) { + val gridR = actionR * 0.9f + val gx = actionCx + val gy = actionCy + buttonRects[ButtonId.BTN_ENTER] = RectF(gx - gridR, gy - gridR, gx + gridR, gy + gridR) + buttonRects[ButtonId.BTN_ESC] = RectF(gx + aSpread * 0.5f - gridR, gy - gridR, gx + aSpread * 0.5f + gridR, gy + gridR) + buttonRects[ButtonId.BTN_Z] = RectF(gx - gridR, gy + aSpread * 0.55f - gridR, gx + gridR, gy + aSpread * 0.55f + gridR) + buttonRects[ButtonId.BTN_B] = RectF(gx + aSpread * 0.5f - gridR, gy + aSpread * 0.55f - gridR, gx + aSpread * 0.5f + gridR, gy + aSpread * 0.55f + gridR) + } else { + buttonRects[ButtonId.BTN_Y] = RectF(actionCx - actionR, actionCy - aSpread * 0.6f - actionR, actionCx + actionR, actionCy - aSpread * 0.6f + actionR) + buttonRects[ButtonId.BTN_X] = RectF(actionCx - aSpread * 0.5f - actionR, actionCy - actionR, actionCx - aSpread * 0.5f + actionR, actionCy + actionR) + buttonRects[ButtonId.BTN_B] = RectF(actionCx + aSpread * 0.5f - actionR, actionCy - actionR, actionCx + aSpread * 0.5f + actionR, actionCy + actionR) + buttonRects[ButtonId.BTN_A] = RectF(actionCx - actionR, actionCy + aSpread * 0.6f - actionR, actionCx + actionR, actionCy + aSpread * 0.6f + actionR) + buttonRects[ButtonId.BTN_ENTER] = RectF(actionCx - actionR, actionCy + aSpread * 1.5f - actionR, actionCx + actionR, actionCy + aSpread * 1.5f + actionR) + buttonRects[ButtonId.BTN_ESC] = RectF(actionCx - actionR, actionCy + aSpread * 2.5f - actionR, actionCx + actionR, actionCy + aSpread * 2.5f + actionR) + + val stickS = (h * 0.07f * s).coerceIn(d(36), d(65)) + buttonRects[ButtonId.LEFT_STICK] = RectF(w * 0.13f - stickS, h * 0.28f - stickS, w * 0.13f + stickS, h * 0.28f + stickS) + buttonRects[ButtonId.RIGHT_STICK] = RectF(w * 0.87f - stickS, h * 0.18f - stickS, w * 0.87f + stickS, h * 0.18f + stickS) + buttonRects[ButtonId.BTN_L] = RectF(w * 0.05f, h * 0.04f, w * 0.05f + d(44), h * 0.04f + d(28)) + buttonRects[ButtonId.BTN_R] = RectF(w * 0.85f, h * 0.04f, w * 0.85f + d(44), h * 0.04f + d(28)) + buttonRects[ButtonId.BTN_ZL] = RectF(w * 0.05f, h * 0.04f + d(32), w * 0.05f + d(44), h * 0.04f + d(28) + d(32)) + buttonRects[ButtonId.BTN_ZR] = RectF(w * 0.85f, h * 0.04f + d(32), w * 0.85f + d(44), h * 0.04f + d(28) + d(32)) + buttonRects[ButtonId.BTN_L3] = RectF(w * 0.13f - d(16), h * 0.36f, w * 0.13f + d(16), h * 0.36f + d(24)) + buttonRects[ButtonId.BTN_R3] = RectF(w * 0.87f - d(16), h * 0.26f, w * 0.87f + d(16), h * 0.26f + d(24)) + buttonRects[ButtonId.BTN_SELECT] = RectF(w * 0.30f - d(24), h * 0.92f - d(14), w * 0.30f + d(24), h * 0.92f + d(14)) + buttonRects[ButtonId.BTN_START] = RectF(w * 0.50f - d(24), h * 0.92f - d(14), w * 0.50f + d(24), h * 0.92f + d(14)) + buttonRects[ButtonId.BTN_HOME] = RectF(w * 0.70f - d(24), h * 0.92f - d(14), w * 0.70f + d(24), h * 0.92f + d(14)) + } + + layoutToolbar(w, h, s) + val rSize = d(22) + recoveryRect.set(w - rSize - d(8), d(8), w - d(8), d(8) + rSize * 2) + } + + private fun layoutPortrait(w: Float, h: Float, s: Float) { + val panelTop = h * 0.50f + val ch = h - panelTop + val dpadS = (ch * 0.22f * s).coerceIn(d(40), d(76)) + val gap = dpadS * 0.08f + val btnW = dpadS * 0.44f + val btnH = dpadS * 0.40f + val dpadCx = w * 0.22f + val dpadCy = panelTop + ch * 0.50f + + val corner = 7f * s + buttonRects[ButtonId.DPAD_UP] = RectF(dpadCx - btnW / 2f, dpadCy - btnH - gap / 2f, dpadCx + btnW / 2f, dpadCy - gap / 2f) + buttonRects[ButtonId.DPAD_DOWN] = RectF(dpadCx - btnW / 2f, dpadCy + gap / 2f, dpadCx + btnW / 2f, dpadCy + btnH + gap / 2f) + buttonRects[ButtonId.DPAD_LEFT] = RectF(dpadCx - btnW - gap / 2f, dpadCy - btnH / 2f, dpadCx - gap / 2f, dpadCy + btnH / 2f) + buttonRects[ButtonId.DPAD_RIGHT] = RectF(dpadCx + gap / 2f, dpadCy - btnH / 2f, dpadCx + btnW + gap / 2f, dpadCy + btnH / 2f) + + val actionR = (ch * 0.09f * s).coerceIn(d(20), d(36)) + val actionCx = w * 0.78f + val actionCy = panelTop + ch * 0.50f + val aSpread = actionR * 2.4f + + if (preset == Preset.SIMPLIFIED) { + val gridR = actionR * 0.9f + buttonRects[ButtonId.BTN_ENTER] = RectF(actionCx - aSpread * 0.3f - gridR, actionCy - aSpread * 0.3f - gridR, actionCx - aSpread * 0.3f + gridR, actionCy - aSpread * 0.3f + gridR) + buttonRects[ButtonId.BTN_ESC] = RectF(actionCx + aSpread * 0.3f - gridR, actionCy - aSpread * 0.3f - gridR, actionCx + aSpread * 0.3f + gridR, actionCy - aSpread * 0.3f + gridR) + buttonRects[ButtonId.BTN_Z] = RectF(actionCx - aSpread * 0.3f - gridR, actionCy + aSpread * 0.3f - gridR, actionCx - aSpread * 0.3f + gridR, actionCy + aSpread * 0.3f + gridR) + buttonRects[ButtonId.BTN_B] = RectF(actionCx + aSpread * 0.3f - gridR, actionCy + aSpread * 0.3f - gridR, actionCx + aSpread * 0.3f + gridR, actionCy + aSpread * 0.3f + gridR) + } else { + buttonRects[ButtonId.BTN_Y] = RectF(actionCx - actionR, actionCy - aSpread * 0.6f - actionR, actionCx + actionR, actionCy - aSpread * 0.6f + actionR) + buttonRects[ButtonId.BTN_X] = RectF(actionCx - aSpread * 0.5f - actionR, actionCy - actionR, actionCx - aSpread * 0.5f + actionR, actionCy + actionR) + buttonRects[ButtonId.BTN_B] = RectF(actionCx + aSpread * 0.5f - actionR, actionCy - actionR, actionCx + aSpread * 0.5f + actionR, actionCy + actionR) + buttonRects[ButtonId.BTN_A] = RectF(actionCx - actionR, actionCy + aSpread * 0.6f - actionR, actionCx + actionR, actionCy + aSpread * 0.6f + actionR) + buttonRects[ButtonId.BTN_SELECT] = RectF(w * 0.25f - d(22), panelTop + ch * 0.85f - d(12), w * 0.25f + d(22), panelTop + ch * 0.85f + d(12)) + buttonRects[ButtonId.BTN_START] = RectF(w * 0.50f - d(22), panelTop + ch * 0.85f - d(12), w * 0.50f + d(22), panelTop + ch * 0.85f + d(12)) + buttonRects[ButtonId.BTN_HOME] = RectF(w * 0.75f - d(22), panelTop + ch * 0.85f - d(12), w * 0.75f + d(22), panelTop + ch * 0.85f + d(12)) + } + layoutToolbarPortrait(w, h, s, panelTop) + val rSize = d(20) + recoveryRect.set(w - rSize - d(6), panelTop + d(6), w - d(6), panelTop + d(6) + rSize * 2) + } + + private fun layoutToolbar(w: Float, h: Float, s: Float) { + val btnS = (d(44) * s).coerceIn(d(40), d(56)) + val gap = d(8) * s + val totalH = btnS * 4 + gap * 3 + val tbLeft = w - btnS - d(6) + val tbTop = (h - totalH) / 2f + repeat(4) { i -> toolbarRects[i] = RectF(tbLeft, tbTop + i * (btnS + gap), tbLeft + btnS, tbTop + i * (btnS + gap) + btnS) } + } + + private fun layoutToolbarPortrait(w: Float, h: Float, s: Float, panelTop: Float) { + val btnS = (d(40) * s).coerceIn(d(36), d(50)) + val gap = d(6) * s + val tbLeft = w - btnS - d(6) + val tbTop = panelTop + d(8) + repeat(4) { i -> toolbarRects[i] = RectF(tbLeft, tbTop + i * (btnS + gap), tbLeft + btnS, tbTop + i * (btnS + gap) + btnS) } + } + + override fun onDraw(canvas: Canvas) { + val a = controllerOpacity + + if (controllerVisible) { + drawDPad(canvas, a) + drawActionButtons(canvas, a) + if (preset == Preset.FULL) drawFullExtras(canvas, a) + if (toolbarVisible) drawToolbar(canvas, a) + } + drawRecovery(canvas, a) + } + + private fun drawDPad(canvas: Canvas, a: Float) { + val dirs = listOf(ButtonId.DPAD_UP to "up", ButtonId.DPAD_DOWN to "down", ButtonId.DPAD_LEFT to "left", ButtonId.DPAD_RIGHT to "right") + dirs.forEach { (id, dir) -> + val rect = buttonRects[id] ?: return@forEach + val pressed = id in activeButtons + val r = 8f + CanvasGlassStyle.drawRoundRect(canvas, rect, r, pressed, a, "") + val cx = rect.centerX(); val cy = rect.centerY(); val sz = rect.width() * 0.3f + CanvasGlassStyle.drawArrow(canvas, cx, cy, dir, sz, pressed, a) + } + } + + private fun drawActionButtons(canvas: Canvas, a: Float) { + if (preset == Preset.SIMPLIFIED) { + drawCircleBtn(canvas, ButtonId.BTN_ENTER, "ENTER", a) + drawCircleBtn(canvas, ButtonId.BTN_ESC, "ESC", a) + drawCircleBtn(canvas, ButtonId.BTN_Z, "Z", a) + drawCircleBtn(canvas, ButtonId.BTN_B, "B", a) + } else { + drawCircleBtn(canvas, ButtonId.BTN_Y, "Y", a) + drawCircleBtn(canvas, ButtonId.BTN_X, "X", a) + drawCircleBtn(canvas, ButtonId.BTN_B, "B", a) + drawCircleBtn(canvas, ButtonId.BTN_A, "A", a) + drawCircleBtn(canvas, ButtonId.BTN_ENTER, "ENTER", a) + drawCircleBtn(canvas, ButtonId.BTN_ESC, "ESC", a) + } + } + + private fun drawCircleBtn(canvas: Canvas, id: ButtonId, label: String, a: Float) { + val rect = buttonRects[id] ?: return + val r = rect.width() / 2f + val pressed = id in activeButtons + val ls = r * 0.7f + CanvasGlassStyle.drawCircle(canvas, rect.centerX(), rect.centerY(), r, pressed, a, label, if (label.length > 1) ls * 0.7f else ls) + } + + private fun drawFullExtras(canvas: Canvas, a: Float) { + fun drawShoulder(id: ButtonId, label: String) { + val rect = buttonRects[id] ?: return + CanvasGlassStyle.drawRoundRect(canvas, rect, 6f, id in activeButtons, a, label, rect.height() * 0.5f) + } + drawShoulder(ButtonId.BTN_L, "L") + drawShoulder(ButtonId.BTN_R, "R") + drawShoulder(ButtonId.BTN_ZL, "ZL") + drawShoulder(ButtonId.BTN_ZR, "ZR") + drawShoulder(ButtonId.BTN_L3, "L3") + drawShoulder(ButtonId.BTN_R3, "R3") + + fun drawStick(id: ButtonId) { + val rect = buttonRects[id] ?: return + val cx = rect.centerX(); val cy = rect.centerY(); val r = rect.width() / 2f + CanvasGlassStyle.drawCircle(canvas, cx, cy, r, id in activeButtons, a, "", 0f) + CanvasGlassStyle.drawCircle(canvas, cx, cy, r * 0.4f, false, a, "", 0f) + } + drawStick(ButtonId.LEFT_STICK) + drawStick(ButtonId.RIGHT_STICK) + + fun drawPill(id: ButtonId, label: String) { + val rect = buttonRects[id] ?: return + CanvasGlassStyle.drawRoundRect(canvas, rect, rect.height() / 2f, id in activeButtons, a, label, rect.height() * 0.5f) + } + drawPill(ButtonId.BTN_SELECT, "SELECT") + drawPill(ButtonId.BTN_START, "START") + drawPill(ButtonId.BTN_HOME, "HOME") + } + + private fun drawToolbar(canvas: Canvas, a: Float) { + data class TbIcon(val id: ButtonId, val draw: (Canvas, Float, Float, Float, Paint) -> Unit) + val icons = listOf( + TbIcon(ButtonId.TOOLBAR_TOGGLE, { c, cx, cy, s, p -> CanvasGlassStyle.Icons.gamepad(c, cx, cy, s, p) }), + TbIcon(ButtonId.TOOLBAR_SETTINGS, { c, cx, cy, s, p -> CanvasGlassStyle.Icons.sliders(c, cx, cy, s, p) }), + TbIcon(ButtonId.TOOLBAR_KEYBOARD, { c, cx, cy, s, p -> CanvasGlassStyle.Icons.keyboard(c, cx, cy, s, p) }), + TbIcon(ButtonId.TOOLBAR_POINTER, { c, cx, cy, s, p -> CanvasGlassStyle.Icons.touchPointer(c, cx, cy, s, p) }), + ) + icons.forEachIndexed { i, icon -> + val rect = toolbarRects[i] ?: return@forEachIndexed + val pressed = icon.id in activeButtons + CanvasGlassStyle.drawRoundRect(canvas, rect, 10f, pressed, a, "", 0f) + CanvasGlassStyle.drawIcon(canvas, rect.centerX(), rect.centerY(), rect.width() * 0.3f, a, icon.draw) + } + } + + private fun drawRecovery(canvas: Canvas, a: Float) { + val r = recoveryRect.height() / 2f + val pressed = ButtonId.RECOVERY in activeButtons + CanvasGlassStyle.drawRoundRect(canvas, recoveryRect, r, pressed, a, "\u2022\u2022\u2022", r * 0.8f) + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + when (event.actionMasked) { + MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN -> { + val id = hitTest(event.x, event.y) + if (id != null) { + activeButtons.add(id) + dispatchInput(id, true) + invalidate() + return true + } + } + MotionEvent.ACTION_MOVE -> { + val prev = activeButtons.toSet() + val curr = mutableSetOf() + for (i in 0 until event.pointerCount) { + val hit = hitTest(event.getX(i), event.getY(i)) + if (hit != null) curr.add(hit) + } + val released = prev - curr + val pressed = curr - prev + released.forEach { dispatchInput(it, false); activeButtons.remove(it) } + pressed.forEach { dispatchInput(it, true); activeButtons.add(it) } + if (released.isNotEmpty() || pressed.isNotEmpty()) invalidate() + return true + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_POINTER_UP, MotionEvent.ACTION_CANCEL -> { + val upIdx = event.actionIndex + val curr = mutableSetOf() + for (i in 0 until event.pointerCount) { + if (event.actionMasked == MotionEvent.ACTION_POINTER_UP && i == upIdx) continue + val hit = hitTest(event.getX(i), event.getY(i)) + if (hit != null) curr.add(hit) + } + if (event.actionMasked == MotionEvent.ACTION_UP || event.actionMasked == MotionEvent.ACTION_CANCEL) curr.clear() + val released = activeButtons - curr + released.forEach { dispatchInput(it, false); activeButtons.remove(it) } + if (released.isNotEmpty()) invalidate() + return true + } + } + return false + } + + private fun hitTest(x: Float, y: Float): ButtonId? { + if (recoveryRect.contains(x, y)) return ButtonId.RECOVERY + if (!controllerVisible) return null + toolbarRects.forEachIndexed { i, rect -> + if (rect != null && rect.contains(x, y)) return when (i) { 0 -> ButtonId.TOOLBAR_TOGGLE; 1 -> ButtonId.TOOLBAR_SETTINGS; 2 -> ButtonId.TOOLBAR_KEYBOARD; else -> ButtonId.TOOLBAR_POINTER } + } + return buttonRects.entries.firstOrNull { (_, rect) -> rect.contains(x, y) }?.key + } + + private fun dispatchInput(id: ButtonId, pressed: Boolean) { + when (id) { + ButtonId.DPAD_UP -> sendKey(KeyEvent.KEYCODE_DPAD_UP, pressed) + ButtonId.DPAD_DOWN -> sendKey(KeyEvent.KEYCODE_DPAD_DOWN, pressed) + ButtonId.DPAD_LEFT -> sendKey(KeyEvent.KEYCODE_DPAD_LEFT, pressed) + ButtonId.DPAD_RIGHT -> sendKey(KeyEvent.KEYCODE_DPAD_RIGHT, pressed) + ButtonId.BTN_ENTER -> sendKey(KeyEvent.KEYCODE_ENTER, pressed) + ButtonId.BTN_ESC -> sendKey(KeyEvent.KEYCODE_ESCAPE, pressed) + ButtonId.BTN_Z -> sendKey(KeyEvent.KEYCODE_Z, pressed) + ButtonId.BTN_B -> sendKey(KeyEvent.KEYCODE_B, pressed) + ButtonId.BTN_Y -> sendKey(KeyEvent.KEYCODE_W, pressed) + ButtonId.BTN_X -> sendKey(KeyEvent.KEYCODE_Q, pressed) + ButtonId.BTN_A -> sendKey(KeyEvent.KEYCODE_ENTER, pressed) + ButtonId.BTN_L -> sendKey(KeyEvent.KEYCODE_PAGE_UP, pressed) + ButtonId.BTN_R -> sendKey(KeyEvent.KEYCODE_PAGE_DOWN, pressed) + ButtonId.BTN_ZL -> sendKey(KeyEvent.KEYCODE_PAGE_UP, pressed) + ButtonId.BTN_ZR -> sendKey(KeyEvent.KEYCODE_PAGE_DOWN, pressed) + ButtonId.BTN_L3 -> sendKey(KeyEvent.KEYCODE_Z, pressed) + ButtonId.BTN_R3 -> sendKey(KeyEvent.KEYCODE_X, pressed) + ButtonId.BTN_SELECT -> sendKey(KeyEvent.KEYCODE_ESCAPE, pressed) + ButtonId.BTN_START -> sendKey(KeyEvent.KEYCODE_ENTER, pressed) + ButtonId.BTN_HOME -> if (pressed) onKeyDown?.invoke(KeyEvent.KEYCODE_HOME) + ButtonId.LEFT_STICK -> sendKey(KeyEvent.KEYCODE_DPAD_UP, pressed) + ButtonId.RIGHT_STICK -> sendKey(KeyEvent.KEYCODE_DPAD_DOWN, pressed) + ButtonId.TOOLBAR_TOGGLE -> if (pressed) onToggleControls?.invoke() + ButtonId.TOOLBAR_SETTINGS -> if (pressed) onOpenMenu?.invoke() + ButtonId.TOOLBAR_KEYBOARD -> if (pressed) toggleKeyboard(context) + ButtonId.TOOLBAR_POINTER -> if (pressed) {} + ButtonId.RECOVERY -> if (pressed) onOpenMenu?.invoke() + } + } + + private fun sendKey(code: Int, pressed: Boolean) { + if (code == KeyEvent.KEYCODE_UNKNOWN) return + if (pressed) onKeyDown?.invoke(code) else onKeyUp?.invoke(code) + } +} diff --git a/app/src/main/java/com/runestone/app/input/RunestoneOverlayV2View.kt b/app/src/main/java/com/runestone/app/input/RunestoneOverlayV2View.kt new file mode 100644 index 0000000..b4cf75b --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/RunestoneOverlayV2View.kt @@ -0,0 +1,74 @@ +package com.runestone.app.input + +import android.content.Context +import android.graphics.Color +import android.view.ViewGroup +import android.widget.FrameLayout + +class RunestoneOverlayV2View(context: Context) : FrameLayout(context) { + + @JvmField + val controllerView: TouchOverlayView + + @JvmField + var keyboardView: VirtualKeyboardOverlay? = null + + var controllerVisible: Boolean = true + + @JvmField + var keyboardVisible: Boolean = false + + init { + setBackgroundColor(Color.TRANSPARENT) + controllerView = TouchOverlayView(context) + controllerView.layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + controllerView.toolbarVisible = true + addView(controllerView) + } + + fun setOpacity(a: Float) { controllerView.opacity = a } + fun setScale(s: Float) { controllerView.scale = s } + fun setPreset(preset: TouchOverlayView.ControllerPreset) { controllerView.controllerPreset = preset } + fun toggleMenuOverlay() { controllerView.toggleMenuOverlay() } + + fun toggleKeyboard(ctx: Context, landscapeKeys: Boolean, keyDown: (Int) -> Unit, keyUp: (Int) -> Unit) { + if (keyboardView != null) { + removeView(keyboardView) + keyboardView = null + keyboardVisible = false + return + } + val kb = VirtualKeyboardOverlay(ctx) + kb.landscapeKeys = landscapeKeys + kb.dockMode = VirtualKeyboardOverlay.DockMode.BOTTOM + kb.onKeyDown = { keyDown(it) } + kb.onKeyUp = { keyUp(it) } + kb.onDockModeChanged = { mode -> + toggleKeyboard(ctx, landscapeKeys, keyDown, keyUp) + toggleKeyboard(ctx, landscapeKeys, keyDown, keyUp) + } + addView(kb, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + keyboardView = kb + keyboardVisible = true + } + + fun closeKeyboard() { + keyboardView?.let { removeView(it); keyboardView = null } + keyboardVisible = false + } + + fun toggleControllerVisibility() { + controllerVisible = !controllerVisible + controllerView.visibility = if (controllerVisible) VISIBLE else INVISIBLE + } + + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + super.onLayout(changed, left, top, right, bottom) + } +} diff --git a/app/src/main/java/com/runestone/app/input/TouchOverlayView.kt b/app/src/main/java/com/runestone/app/input/TouchOverlayView.kt index 56c699d..a385b3b 100644 --- a/app/src/main/java/com/runestone/app/input/TouchOverlayView.kt +++ b/app/src/main/java/com/runestone/app/input/TouchOverlayView.kt @@ -8,9 +8,7 @@ import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.RectF -import android.graphics.RenderEffect -import android.graphics.Shader -import android.graphics.LinearGradient +import android.graphics.DashPathEffect import android.os.VibrationEffect import android.os.Vibrator import android.os.VibratorManager @@ -32,8 +30,11 @@ class TouchOverlayView(context: Context) : View(context) { BTN_EXTRA_A, BTN_EXTRA_S, BTN_EXTRA_D, BTN_EXTRA_Z, BTN_EXTRA_X, BTN_EXTRA_C, SELECT, START, MENU, SETTINGS, HOME, - L1, R1, - OVERLAY_MENU, + L1, R1, ZL, ZR, L3, R3, + GUIDE, PLUS, MINUS, + LEFT_STICK, RIGHT_STICK, + TOOLBAR_TOGGLE, TOOLBAR_SETTINGS, TOOLBAR_KEYBOARD, TOOLBAR_POINTER, + OVERLAY_MENU, MENU_CHEATS, MENU_MUTE, MENU_ROTATE, MENU_REMAP, MENU_QUIT, } var opacity: Float = 0.72f @@ -54,6 +55,11 @@ class TouchOverlayView(context: Context) : View(context) { var onRotateLayout: (() -> Unit)? = null var onProfileLayoutChanged: ((List) -> Unit)? = null var onOverlayMenu: (() -> Unit)? = null + var onToggleKeyboard: (() -> Unit)? = null + var onTogglePointer: (() -> Unit)? = null + var toolbarVisible: Boolean = true + var menuOverlayVisible: Boolean = false + var pointerMode: Boolean = false // Game viewport safe area (set by GameActivity) var gameViewportLeft: Float = 0f @@ -110,6 +116,39 @@ class TouchOverlayView(context: Context) : View(context) { private val r1Rect = RectF() private val shoulderRadius = 20f + // Full mode additions + private val leftStickRect = RectF() + private val rightStickRect = RectF() + private val leftStickThumb = PointF(0f, 0f) + private val rightStickThumb = PointF(0f, 0f) + private val zlRect = RectF() + private val zrRect = RectF() + private val l3Rect = RectF() + private val r3Rect = RectF() + private val guideRect = RectF() + private val plusRect = RectF() + private val minusRect = RectF() + private var stickRadius = 32f + private var innerStickRadius = 14f + private var leftStickActive = false + private var rightStickActive = false + + // Toolbar + private val toolbarButtons = arrayOfNulls(4) + private val toolbarRect = RectF() + private var toolbarButtonSize = 48f + + // Menu overlay + private val menuOverlayRect = RectF() + private val menuItems = mutableListOf>() + + // Editor right toolbar + private val editorCheckRect = RectF() + private val editorUndoRect = RectF() + private val editorRotateRect = RectF() + private val editorCloseRect = RectF() + private val editorHeaderRect = RectF() + // Bitmaps private val buttonBitmap: Bitmap? by lazy { bitmapOrNull(R.drawable.controller_button_circle) } private val buttonHighlightBitmap: Bitmap? by lazy { bitmapOrNull(R.drawable.controller_button_circle_highlight) } @@ -162,11 +201,17 @@ class TouchOverlayView(context: Context) : View(context) { private val safeAreaPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE strokeWidth = 2f - pathEffect = android.graphics.DashPathEffect(floatArrayOf(10f, 10f), 0f) + pathEffect = DashPathEffect(floatArrayOf(10f, 10f), 0f) } private val touchZonePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val editorIconPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeJoin = Paint.Join.ROUND + strokeWidth = 2.5f + } private val vibrator: Vibrator? by lazy { if (android.os.Build.VERSION.SDK_INT >= 31) { @@ -200,6 +245,12 @@ class TouchOverlayView(context: Context) : View(context) { selectedStrokePaint.color = Color.rgb(210, 180, 134) } + private fun orientationPrefix(): String = when { + controlsOnly -> "portrait_console" + width > height -> "landscape" + else -> "portrait" + } + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { super.onLayout(changed, left, top, right, bottom) val w = width.toFloat() @@ -223,7 +274,6 @@ class TouchOverlayView(context: Context) : View(context) { } private fun layoutLandscape(w: Float, h: Float, s: Float, shortSide: Float) { - // Calculate 4:3 game viewport (set by GameActivity, but recalculate fallback) val targetGameRatio = 4f / 3f val gameW = if (gameViewportRight > gameViewportLeft) { gameViewportRight - gameViewportLeft @@ -256,12 +306,16 @@ class TouchOverlayView(context: Context) : View(context) { val actionSpread = 56f * s if (controllerPreset == ControllerPreset.SIMPLIFIED) { - btnConfirm.x = rightGutterCenter - btnConfirm.y = actionBaseY - btnBack.x = rightGutterCenter - btnBack.y = actionBaseY + actionSpread * 1.3f - btnDash.x = rightGutterCenter - btnDash.y = actionBaseY + actionSpread * 2.6f + // 2x2 grid: Confirm tl, Back tr, Dash bl, ExtraS br + val gridSize = actionSpread * 0.9f + btnConfirm.x = rightGutterCenter - gridSize + btnConfirm.y = actionBaseY - gridSize + btnBack.x = rightGutterCenter + gridSize + btnBack.y = actionBaseY - gridSize + btnDash.x = rightGutterCenter - gridSize + btnDash.y = actionBaseY + gridSize + btnExtraS.x = rightGutterCenter + gridSize + btnExtraS.y = actionBaseY + gridSize } else { // Full mode: compact cluster btnExtraA.x = rightGutterCenter - actionSpread * 0.8f @@ -289,6 +343,13 @@ class TouchOverlayView(context: Context) : View(context) { l1Rect.set(leftGutterW * 0.5f - shoulderW / 2f, 24f * s, leftGutterW * 0.5f + shoulderW / 2f, 24f * s + shoulderH) r1Rect.set(gameRight + rightGutterW * 0.5f - shoulderW / 2f, 24f * s, gameRight + rightGutterW * 0.5f + shoulderW / 2f, 24f * s + shoulderH) + // ZL/ZR below L1/R1 + val zlH = 26f * s + val zlW = 44f * s + val zlY = l1Rect.bottom + 8f * s + zlRect.set(l1Rect.centerX() - zlW / 2f, zlY, l1Rect.centerX() + zlW / 2f, zlY + zlH) + zrRect.set(r1Rect.centerX() - zlW / 2f, zlY, r1Rect.centerX() + zlW / 2f, zlY + zlH) + // Modifier buttons in left gutter (Full mode only) if (controllerPreset == ControllerPreset.FULL) { val modX = gameLeft * 0.5f @@ -297,6 +358,41 @@ class TouchOverlayView(context: Context) : View(context) { btnCtrl.x = modX; btnCtrl.y = modY btnAlt.x = modX; btnAlt.y = modY + modSpread btnShift.x = modX; btnShift.y = modY + modSpread * 2f + + // Analog sticks (left in left gutter, right in right gutter) + val stickOuter = 36f * s + stickRadius = stickOuter / s + innerStickRadius = stickRadius * 0.44f + leftStickRect.set( + leftGutterW * 0.5f - stickOuter, h * 0.46f - stickOuter, + leftGutterW * 0.5f + stickOuter, h * 0.46f + stickOuter, + ) + rightStickRect.set( + rightGutterCenter - stickOuter, h * 0.46f - stickOuter, + rightGutterCenter + stickOuter, h * 0.46f + stickOuter, + ) + leftStickThumb.x = leftStickRect.centerX(); leftStickThumb.y = leftStickRect.centerY() + rightStickThumb.x = rightStickRect.centerX(); rightStickThumb.y = rightStickRect.centerY() + + // L3/R3 below sticks + val l3H = 24f * s + val l3W = 40f * s + l3Rect.set( + leftStickRect.centerX() - l3W / 2f, leftStickRect.bottom + 6f * s, + leftStickRect.centerX() + l3W / 2f, leftStickRect.bottom + 6f * s + l3H, + ) + r3Rect.set( + rightStickRect.centerX() - l3W / 2f, rightStickRect.bottom + 6f * s, + rightStickRect.centerX() + l3W / 2f, rightStickRect.bottom + 6f * s + l3H, + ) + + // Guide/Plus/Minus — between SELECT/START/MENU in bottom bar area + val miniW = 36f * s + val miniH = 24f * s + val miniY = h - 48f * s + guideRect.set(w * 0.5f - miniW / 2f, miniY - miniH / 2f, w * 0.5f + miniW / 2f, miniY + miniH / 2f) + plusRect.set(w * 0.5f - miniW / 2f - w * 0.08f, miniY - miniH / 2f, w * 0.5f + miniW / 2f - w * 0.08f, miniY + miniH / 2f) + minusRect.set(w * 0.5f - miniW / 2f + w * 0.08f, miniY - miniH / 2f, w * 0.5f + miniW / 2f + w * 0.08f, miniY + miniH / 2f) } // Bottom bar (small, in gutters or below) @@ -309,6 +405,29 @@ class TouchOverlayView(context: Context) : View(context) { // Overlay menu button — top corner, outside game area overlayMenuRect.set(8f * s, 8f * s, 56f * s, 56f * s) editButtonRect.set(w - 76f * s, h - 76f * s, w - 8f * s, h - 8f * s) + + // Toolbar on right edge + layoutToolbar(w, h, s) + } + + private fun layoutToolbar(w: Float, h: Float, s: Float) { + val btnSize = 48f * s + toolbarButtonSize = btnSize + val gap = 8f * s + val panelW = btnSize + gap * 2f + val panelH = btnSize * 4f + gap * 5f + val panelL = w - panelW - 4f * s + val panelT = (h - panelH) / 2f + toolbarRect.set(panelL, panelT, panelL + panelW, panelT + panelH) + + for (i in 0..3) { + val b = RectF() + b.set( + panelL + gap, panelT + gap + i * (btnSize + gap), + panelL + gap + btnSize, panelT + gap + i * (btnSize + gap) + btnSize, + ) + toolbarButtons[i] = b + } } private fun layoutPortrait(w: Float, h: Float, s: Float, shortSide: Float) { @@ -330,9 +449,16 @@ class TouchOverlayView(context: Context) : View(context) { val spread = if (controlsOnly) (actionRadius * s * 1.75f).coerceAtLeast(150f) else 52f * s if (controllerPreset == ControllerPreset.SIMPLIFIED) { - btnConfirm.x = actionCenterX; btnConfirm.y = actionCenterY - spread - btnBack.x = actionCenterX; btnBack.y = actionCenterY - btnDash.x = actionCenterX; btnDash.y = actionCenterY + spread + // 2x2 grid: Confirm tl, Back tr, Dash bl, ExtraS br + val gridSize = spread * 0.45f + btnConfirm.x = actionCenterX - gridSize + btnConfirm.y = actionCenterY - gridSize + btnBack.x = actionCenterX + gridSize + btnBack.y = actionCenterY - gridSize + btnDash.x = actionCenterX - gridSize + btnDash.y = actionCenterY + gridSize + btnExtraS.x = actionCenterX + gridSize + btnExtraS.y = actionCenterY + gridSize } else { btnExtraA.x = actionCenterX - spread * 0.8f; btnExtraA.y = actionCenterY - spread btnExtraS.x = actionCenterX; btnExtraS.y = actionCenterY - spread @@ -356,6 +482,12 @@ class TouchOverlayView(context: Context) : View(context) { l1Rect.set(10f, shoulderY, 10f + shoulderW, shoulderY + shoulderH) r1Rect.set(w - 10f - shoulderW, shoulderY, w - 10f, shoulderY + shoulderH) + // ZL/ZR beside L1/R1 + val zlH = 24f * s + val zlW = 38f * s + zlRect.set(l1Rect.right + 4f * s, shoulderY, l1Rect.right + 4f * s + zlW, shoulderY + zlH) + zrRect.set(r1Rect.left - 4f * s - zlW, shoulderY, r1Rect.left - 4f * s, shoulderY + zlH) + if (controllerPreset == ControllerPreset.FULL) { val modX = w * 0.12f val modY = panelTop + controlsHeight * 0.15f @@ -363,10 +495,68 @@ class TouchOverlayView(context: Context) : View(context) { btnCtrl.x = modX; btnCtrl.y = modY btnAlt.x = modX; btnAlt.y = modY + modSpread btnShift.x = modX; btnShift.y = modY + modSpread * 2f + + // Analog sticks + val stickOuter = 34f * s + stickRadius = stickOuter / s + innerStickRadius = stickRadius * 0.44f + leftStickRect.set( + w * 0.35f - stickOuter, panelTop + controlsHeight * 0.20f - stickOuter, + w * 0.35f + stickOuter, panelTop + controlsHeight * 0.20f + stickOuter, + ) + rightStickRect.set( + w * 0.65f - stickOuter, panelTop + controlsHeight * 0.20f - stickOuter, + w * 0.65f + stickOuter, panelTop + controlsHeight * 0.20f + stickOuter, + ) + leftStickThumb.x = leftStickRect.centerX(); leftStickThumb.y = leftStickRect.centerY() + rightStickThumb.x = rightStickRect.centerX(); rightStickThumb.y = rightStickRect.centerY() + + // L3/R3 + val l3H = 22f * s + val l3W = 36f * s + l3Rect.set( + leftStickRect.centerX() - l3W / 2f, leftStickRect.bottom + 4f * s, + leftStickRect.centerX() + l3W / 2f, leftStickRect.bottom + 4f * s + l3H, + ) + r3Rect.set( + rightStickRect.centerX() - l3W / 2f, rightStickRect.bottom + 4f * s, + rightStickRect.centerX() + l3W / 2f, rightStickRect.bottom + 4f * s + l3H, + ) + + // Guide/Plus/Minus + val miniW = 32f * s + val miniH = 20f * s + val miniY = barY - 4f * s + val miniGap = 20f * s + guideRect.set(w * 0.5f - miniW / 2f, miniY - miniH / 2f, w * 0.5f + miniW / 2f, miniY + miniH / 2f) + plusRect.set(guideRect.centerX() - miniGap - miniW, miniY - miniH / 2f, guideRect.centerX() - miniGap, miniY + miniH / 2f) + minusRect.set(guideRect.centerX() + miniGap, miniY - miniH / 2f, guideRect.centerX() + miniGap + miniW, miniY + miniH / 2f) } overlayMenuRect.set(8f * s, panelTop + 8f * s, 56f * s, panelTop + 56f * s) editButtonRect.set(w - 76f * s, h - 76f * s, w - 8f * s, h - 8f * s) + + layoutToolbarPortrait(w, h, s, panelTop) + } + + private fun layoutToolbarPortrait(w: Float, h: Float, s: Float, panelTop: Float) { + val btnSize = 44f * s + toolbarButtonSize = btnSize + val gap = 6f * s + val panelW = btnSize + gap * 2f + val panelH = btnSize * 4f + gap * 5f + val panelL = w - panelW - 4f * s + val panelT = panelTop + 16f * s + toolbarRect.set(panelL, panelT, panelL + panelW, panelT + panelH) + + for (i in 0..3) { + val b = RectF() + b.set( + panelL + gap, panelT + gap + i * (btnSize + gap), + panelL + gap + btnSize, panelT + gap + i * (btnSize + gap) + btnSize, + ) + toolbarButtons[i] = b + } } override fun onDraw(canvas: Canvas) { @@ -393,7 +583,8 @@ class TouchOverlayView(context: Context) : View(context) { if (controllerPreset == ControllerPreset.SIMPLIFIED) { drawGlassButton(canvas, btnConfirm.x, btnConfirm.y, radiusFor(Control.CONFIRM), getConfirmLabel(), a, Zone.BTN_CONFIRM, Control.CONFIRM) drawGlassButton(canvas, btnBack.x, btnBack.y, radiusFor(Control.BACK), getBackLabel(), a, Zone.BTN_BACK, Control.BACK) - drawGlassButton(canvas, btnDash.x, btnDash.y, radiusFor(Control.DASH), "Dash", a, Zone.BTN_DASH, Control.DASH) + drawGlassButton(canvas, btnDash.x, btnDash.y, radiusFor(Control.DASH), "Z", a, Zone.BTN_DASH, Control.DASH) + drawGlassButton(canvas, btnExtraS.x, btnExtraS.y, radiusFor(Control.EXTRA_S), "B", a, Zone.BTN_EXTRA_S, Control.EXTRA_S) } else { drawGlassButton(canvas, btnExtraA.x, btnExtraA.y, radiusFor(Control.EXTRA_A), "A", a, Zone.BTN_EXTRA_A, Control.EXTRA_A) drawGlassButton(canvas, btnExtraS.x, btnExtraS.y, radiusFor(Control.EXTRA_S), "S", a, Zone.BTN_EXTRA_S, Control.EXTRA_S) @@ -413,14 +604,41 @@ class TouchOverlayView(context: Context) : View(context) { } // Bottom bar - drawGlassBarButton(canvas, selectRect, "SELECT", a, Zone.SELECT) - drawGlassBarButton(canvas, startRect, "START", a, Zone.START) - drawGlassBarButton(canvas, menuRect, "HOME", a, Zone.HOME) + drawGlassRoundRect(canvas, selectRect, "SELECT", a, Zone.SELECT, Control.SELECT) + drawGlassRoundRect(canvas, startRect, "START", a, Zone.START, Control.START) + drawGlassRoundRect(canvas, menuRect, "HOME", a, Zone.HOME, Control.MENU) // L1/R1 drawShoulderButton(canvas, l1Rect, "L", a, Zone.L1) drawShoulderButton(canvas, r1Rect, "R", a, Zone.R1) + // ZL/ZR in FULL mode + if (controllerPreset == ControllerPreset.FULL) { + drawShoulderButton(canvas, zlRect, "ZL", a, Zone.ZL) + drawShoulderButton(canvas, zrRect, "ZR", a, Zone.ZR) + } + + // Analog sticks + L3/R3 in FULL mode + if (controllerPreset == ControllerPreset.FULL) { + drawAnalogStick(canvas, leftStickRect, leftStickActive, a, true) + drawAnalogStick(canvas, rightStickRect, rightStickActive, a, false) + drawShoulderButton(canvas, l3Rect, "L3", a, Zone.L3) + drawShoulderButton(canvas, r3Rect, "R3", a, Zone.R3) + drawShoulderButton(canvas, guideRect, "GUIDE", a, Zone.GUIDE) + drawGlassBarButton(canvas, plusRect, "+", a, Zone.PLUS) + drawGlassBarButton(canvas, minusRect, "-", a, Zone.MINUS) + } + + // Toolbar + if (toolbarVisible) { + drawToolbar(canvas, a) + } + + // Menu overlay + if (menuOverlayVisible) { + drawMenuOverlay(canvas, a) + } + // Overlay menu drawOverlayMenuButton(canvas, a) if (quickSettingsOpen) drawQuickSettings(canvas, a) @@ -432,25 +650,244 @@ class TouchOverlayView(context: Context) : View(context) { } } - private fun getConfirmLabel(): String = when { - showIcons && !showLabels -> "" - else -> "Confirm" + private fun drawAnalogStick(canvas: Canvas, rect: RectF, pressed: Boolean, a: Float, isLeft: Boolean) { + val cx = rect.centerX() + val cy = rect.centerY() + val r = rect.width() / 2f + val sr = r * 0.45f + val isr = r * 0.20f + + // Outer shadow + shadowPaint.alpha = (0.30f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawCircle(cx + 2f, cy + 3f, r, shadowPaint) + + // Outer ring + val ringPaint = if (pressed) pressedGlassPaint else glassFillPaint + ringPaint.alpha = if (pressed) (0.22f * 255 * a).toInt().coerceIn(0, 255) else (0.12f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawCircle(cx, cy, r, ringPaint) + + glassBorderPaint.alpha = if (pressed) (0.50f * 255 * a).toInt().coerceIn(0, 255) else (0.32f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawCircle(cx, cy, r, glassBorderPaint) + + // Top highlight on ring + if (!pressed) { + glassHighlightPaint.alpha = (0.18f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawArc(RectF(cx - r, cy - r, cx + r, cy + r), 225f, 90f, true, glassHighlightPaint) + } + + // Crosshair lines + val linePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeWidth = 1.5f * scale + color = Color.argb((0.25f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + val crossExtent = r * 0.55f + canvas.drawLine(cx - crossExtent, cy, cx + crossExtent, cy, linePaint) + canvas.drawLine(cx, cy - crossExtent, cx, cy + crossExtent, linePaint) + + // Center dot + val dotPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((0.20f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawCircle(cx, cy, r * 0.08f, dotPaint) + + // Thumb circle + val thumbPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + } + val thumbAlpha = if (pressed) (0.30f * 255 * a).toInt().coerceIn(0, 255) else (0.18f * 255 * a).toInt().coerceIn(0, 255) + thumbPaint.color = Color.argb(thumbAlpha, 255, 255, 255) + val thumbX = if (isLeft) leftStickThumb.x else rightStickThumb.x + val thumbY = if (isLeft) leftStickThumb.y else rightStickThumb.y + canvas.drawCircle(thumbX, thumbY, sr, thumbPaint) + + val tp = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 2f + color = Color.argb((0.40f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawCircle(thumbX, thumbY, sr, tp) + + // Inner thumb dot + if (!pressed) { + glassHighlightPaint.alpha = (0.15f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawCircle(thumbX, thumbY, sr * 0.5f, glassHighlightPaint) + } } - private fun getBackLabel(): String = when { - showIcons && !showLabels -> "" - else -> "Back" + private fun drawToolbar(canvas: Canvas, a: Float) { + if (!toolbarVisible || toolbarButtons[0] == null) return + + // Panel background + val panelPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((0.10f * 255 * a).toInt().coerceIn(0, 255), 0, 0, 0) + } + canvas.drawRoundRect(toolbarRect, 12f * scale, 12f * scale, panelPaint) + + val borderP = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.5f + color = Color.argb((0.20f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawRoundRect(toolbarRect, 12f * scale, 12f * scale, borderP) + + val iconLabelAlpha = (0.85f * 255 * a).toInt().coerceIn(0, 255) + val iconPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeJoin = Paint.Join.ROUND + strokeWidth = 2f * scale + color = Color.argb(iconLabelAlpha, 232, 229, 220) + } + + val zones = listOf( + Zone.TOOLBAR_TOGGLE to "Toggle", + Zone.TOOLBAR_SETTINGS to "Settings", + Zone.TOOLBAR_KEYBOARD to "Keys", + Zone.TOOLBAR_POINTER to "Pointer", + ) + + for (i in 0..3) { + val rect = toolbarButtons[i] ?: continue + val zone = zones[i].first + val label = zones[i].second + val pressed = zone in activeZones + + val btnFill = if (pressed) pressedGlassPaint else glassFillPaint + btnFill.alpha = if (pressed) (0.22f * 255 * a).toInt().coerceIn(0, 255) else (0.12f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect, 8f * scale, 8f * scale, btnFill) + + if (pressed) { + val bdr = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.5f + color = Color.argb((0.50f * 255 * a).toInt().coerceIn(0, 255), 210, 180, 134) + } + canvas.drawRoundRect(rect, 8f * scale, 8f * scale, bdr) + } + + val cx = rect.centerX() + val cy = rect.centerY() + val s = rect.width() * 0.30f + + iconPaint.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb(iconLabelAlpha, 232, 229, 220) + + when (i) { + 0 -> OverlayStyle.Icons.gamepad(canvas, cx, cy, s, iconPaint) + 1 -> OverlayStyle.Icons.sliders(canvas, cx, cy, s, iconPaint) + 2 -> OverlayStyle.Icons.keyboard(canvas, cx, cy, s, iconPaint) + 3 -> OverlayStyle.Icons.touchPointer(canvas, cx, cy, s, iconPaint) + } + } + } + + private fun drawMenuOverlay(canvas: Canvas, a: Float) { + // Dimmed background + val dimPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((0.55f * 255).toInt().coerceIn(0, 255), 0, 0, 0) + } + canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), dimPaint) + + // Centered glass panel + val panelW = (260f * scale).coerceAtLeast(220f) + val itemH = (52f * scale).coerceAtLeast(44f) + val gap = (8f * scale).coerceAtLeast(4f) + val panelItems = 5 + val panelPad = 20f * scale + val panelH = panelPad * 2f + itemH * panelItems + gap * (panelItems - 1) + val panelL = (width - panelW) / 2f + val panelT = (height - panelH) / 2f + menuOverlayRect.set(panelL, panelT, panelL + panelW, panelT + panelH) + + val panelFill = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((0.15f * 255).toInt().coerceIn(0, 255), 14, 14, 18) + } + canvas.drawRoundRect(menuOverlayRect, 20f * scale, 20f * scale, panelFill) + + val panelBorder = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.5f + color = Color.argb((0.35f * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawRoundRect(menuOverlayRect, 20f * scale, 20f * scale, panelBorder) + + menuItems.clear() + val entries = listOf( + Zone.MENU_CHEATS to "Cheats", + Zone.MENU_MUTE to "Mute", + Zone.MENU_ROTATE to "Rotate", + Zone.MENU_REMAP to "Remap", + Zone.MENU_QUIT to "Quit", + ) + + val iconPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeJoin = Paint.Join.ROUND + strokeWidth = 2f * scale + color = Color.argb((0.85f * 255).toInt().coerceIn(0, 255), 232, 229, 220) + } + + for ((index, entry) in entries.withIndex()) { + val (zone, name) = entry + val itemRect = RectF( + menuOverlayRect.left + panelPad, + menuOverlayRect.top + panelPad + index * (itemH + gap), + menuOverlayRect.right - panelPad, + menuOverlayRect.top + panelPad + index * (itemH + gap) + itemH, + ) + menuItems.add(itemRect to zone) + + val pressed = zone in activeZones + + // Item background + if (pressed) { + val itemBg = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb((0.20f * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawRoundRect(itemRect, 10f * scale, 10f * scale, itemBg) + } + + // Icon + val iconCx = itemRect.left + itemH * 0.5f + val iconCy = itemRect.centerY() + val iconS = itemH * 0.30f + + when (index) { + 0 -> OverlayStyle.Icons.wand(canvas, iconCx, iconCy, iconS, iconPaint) + 1 -> OverlayStyle.Icons.speakerMute(canvas, iconCx, iconCy, iconS, iconPaint) + 2 -> OverlayStyle.Icons.phoneRotate(canvas, iconCx, iconCy, iconS, iconPaint) + 3 -> OverlayStyle.Icons.grid(canvas, iconCx, iconCy, iconS, iconPaint) + 4 -> OverlayStyle.Icons.exitDoor(canvas, iconCx, iconCy, iconS, iconPaint) + } + + // Label + val lp = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.LEFT + textSize = 15f * scale + isFakeBoldText = true + color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((0.85f * 255).toInt().coerceIn(0, 255), 255, 255, 255) + } + canvas.drawText(name, iconCx + iconS + 12f * scale, itemRect.centerY() + 5f * scale, lp) + } } + private fun getConfirmLabel(): String = "ENTER" + private fun getBackLabel(): String = if (showIcons && !showLabels) "" else "ESC" + private fun drawGlassButton(canvas: Canvas, x: Float, y: Float, r: Float, label: String, a: Float, zone: Zone, control: Control) { val zonePressed = zone in activeZones val baseRadius = r - // Shadow shadowPaint.alpha = (0.35f * 255 * a).toInt().coerceIn(0, 255) canvas.drawCircle(x + 2f, y + 4f, baseRadius, shadowPaint) - // Fill val fillPaint = if (zonePressed) pressedGlassPaint else glassFillPaint fillPaint.alpha = if (zonePressed) { (0.22f * 255 * a).toInt().coerceIn(0, 255) @@ -459,7 +896,6 @@ class TouchOverlayView(context: Context) : View(context) { } canvas.drawCircle(x, y, baseRadius, fillPaint) - // Border glassBorderPaint.alpha = if (zonePressed) { (0.50f * 255 * a).toInt().coerceIn(0, 255) } else { @@ -467,20 +903,17 @@ class TouchOverlayView(context: Context) : View(context) { } canvas.drawCircle(x, y, baseRadius, glassBorderPaint) - // Top highlight if (!zonePressed) { glassHighlightPaint.alpha = (0.18f * 255 * a).toInt().coerceIn(0, 255) canvas.drawArc(RectF(x - baseRadius, y - baseRadius, x + baseRadius, y + baseRadius), 225f, 90f, true, glassHighlightPaint) } - // Pressed scale effect val scaleDown = if (zonePressed) 0.96f else 1.0f if (zonePressed) { canvas.save() canvas.scale(scaleDown, scaleDown, x, y) } - // Label if (label.isNotEmpty()) { labelPaint.alpha = if (zonePressed) 255 else (0.85f * 255 * a).toInt().coerceIn(0, 255) labelPaint.color = if (zonePressed) Color.rgb(200, 170, 130) else Color.argb((0.85f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) @@ -490,7 +923,6 @@ class TouchOverlayView(context: Context) : View(context) { if (zonePressed) canvas.restore() - // Debug control bounds if (showControlBounds) { glassBorderPaint.alpha = (0.60f * 255 * a).toInt().coerceIn(0, 255) glassBorderPaint.color = Color.argb(glassBorderPaint.alpha, 0, 255, 200) @@ -502,6 +934,34 @@ class TouchOverlayView(context: Context) : View(context) { controlRects[control] = RectF(x - baseRadius, y - baseRadius, x + baseRadius, y + baseRadius) } + private fun drawGlassRoundRect(canvas: Canvas, rect: RectF, label: String, a: Float, zone: Zone, control: Control) { + val pressed = zone in activeZones + val r = rect.height() * 0.35f + + shadowPaint.alpha = (0.30f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect.left + 1f, rect.top + 3f, rect.right + 1f, rect.bottom + 3f, r, r, shadowPaint) + + val fillPaint = if (pressed) pressedGlassPaint else glassFillPaint + fillPaint.alpha = if (pressed) (0.22f * 255 * a).toInt().coerceIn(0, 255) else (0.12f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect, r, r, fillPaint) + + glassBorderPaint.alpha = if (pressed) (0.45f * 255 * a).toInt().coerceIn(0, 255) else (0.32f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect, r, r, glassBorderPaint) + + if (!pressed) { + glassHighlightPaint.alpha = (0.15f * 255 * a).toInt().coerceIn(0, 255) + val hlRect = RectF(rect.left, rect.top, rect.right, rect.top + rect.height() * 0.45f) + canvas.drawRoundRect(hlRect, r, r, glassHighlightPaint) + } + + labelPaint.alpha = if (pressed) 255 else (0.85f * 255 * a).toInt().coerceIn(0, 255) + labelPaint.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((0.85f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + labelPaint.textSize = 14f * scale + canvas.drawText(label, rect.centerX(), rect.centerY() + 5f, labelPaint) + + drawSelection(canvas, control) + } + private fun drawGlassBarButton(canvas: Canvas, rect: RectF, label: String, a: Float, zone: Zone) { val pressed = zone in activeZones val r = rect.height() * 0.35f @@ -579,7 +1039,6 @@ class TouchOverlayView(context: Context) : View(context) { glassBorderPaint.alpha = (0.35f * 255 * a).toInt().coerceIn(0, 255) canvas.drawRoundRect(overlayMenuRect, r, r, glassBorderPaint) - // Draw three horizontal lines (hamburger) val linePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE strokeCap = Paint.Cap.ROUND @@ -598,93 +1057,43 @@ class TouchOverlayView(context: Context) : View(context) { private fun drawDPad(canvas: Canvas, a: Float) { val cx = dpadCenter.x val cy = dpadCenter.y - val outer = dpadRadius * scale - val inner = dpadInnerRadius * scale - val pressed = activeZones.any { it.name.startsWith("DPAD") } - - // Shadow - shadowPaint.alpha = (0.35f * 255 * a).toInt().coerceIn(0, 255) - canvas.drawCircle(cx + 2f, cy + 4f, outer, shadowPaint) - - // Base fill - val fillPaint = if (pressed) pressedGlassPaint else glassFillPaint - fillPaint.alpha = if (pressed) { - (0.22f * 255 * a).toInt().coerceIn(0, 255) - } else { - (0.12f * 255 * a).toInt().coerceIn(0, 255) - } - canvas.drawCircle(cx, cy, outer, fillPaint) - - // Border - glassBorderPaint.alpha = if (pressed) { - (0.50f * 255 * a).toInt().coerceIn(0, 255) - } else { - (0.32f * 255 * a).toInt().coerceIn(0, 255) - } - canvas.drawCircle(cx, cy, outer, glassBorderPaint) - - // Top highlight - if (!pressed) { - glassHighlightPaint.alpha = (0.18f * 255 * a).toInt().coerceIn(0, 255) - canvas.drawArc(RectF(cx - outer, cy - outer, cx + outer, cy + outer), 225f, 90f, true, glassHighlightPaint) - } - - // Center dot - glassFillPaint.alpha = (0.08f * 255 * a).toInt().coerceIn(0, 255) - canvas.drawCircle(cx, cy, inner * 0.35f, glassFillPaint) - glassBorderPaint.alpha = (0.20f * 255 * a).toInt().coerceIn(0, 255) - canvas.drawCircle(cx, cy, inner * 0.35f, glassBorderPaint) - - // Directional arrows - drawDpadArrow(canvas, cx, cy - inner * 0.72f, outer * 0.18f, Direction.UP, Zone.DPAD_UP, a) - drawDpadArrow(canvas, cx, cy + inner * 0.72f, outer * 0.18f, Direction.DOWN, Zone.DPAD_DOWN, a) - drawDpadArrow(canvas, cx - inner * 0.72f, cy, outer * 0.18f, Direction.LEFT, Zone.DPAD_LEFT, a) - drawDpadArrow(canvas, cx + inner * 0.72f, cy, outer * 0.18f, Direction.RIGHT, Zone.DPAD_RIGHT, a) - - drawSelection(canvas, Control.DPAD) + val totalSize = dpadRadius * scale * 1.6f + val gap = totalSize * 0.06f + val btnW = totalSize * 0.34f + val btnH = totalSize * 0.32f + val corner = 8f * scale + + drawDpadBtn(canvas, RectF(cx - btnW / 2f, cy - btnH - gap / 2f, cx + btnW / 2f, cy - gap / 2f), corner, a, Zone.DPAD_UP, "\u25B2") + drawDpadBtn(canvas, RectF(cx - btnW / 2f, cy + gap / 2f, cx + btnW / 2f, cy + btnH + gap / 2f), corner, a, Zone.DPAD_DOWN, "\u25BC") + drawDpadBtn(canvas, RectF(cx - btnW - gap / 2f, cy - btnH / 2f, cx - gap / 2f, cy + btnH / 2f), corner, a, Zone.DPAD_LEFT, "\u25C0") + drawDpadBtn(canvas, RectF(cx + gap / 2f, cy - btnH / 2f, cx + btnW + gap / 2f, cy + btnH / 2f), corner, a, Zone.DPAD_RIGHT, "\u25B6") + + val outer = totalSize / 2f + gap controlRects[Control.DPAD] = RectF(cx - outer, cy - outer, cx + outer, cy + outer) - - // Debug touch zone - if (showTouchZones) { - touchZonePaint.alpha = (0.15f * 255 * a).toInt().coerceIn(0, 255) - canvas.drawCircle(cx, cy, outer * 1.15f, touchZonePaint) - } } - private enum class Direction { UP, DOWN, LEFT, RIGHT } - - private fun drawDpadArrow(canvas: Canvas, x: Float, y: Float, size: Float, direction: Direction, zone: Zone, a: Float) { + private fun drawDpadBtn(canvas: Canvas, rect: RectF, corner: Float, a: Float, zone: Zone, arrow: String) { val pressed = zone in activeZones - val path = Path() - when (direction) { - Direction.UP -> { - path.moveTo(x, y - size) - path.lineTo(x - size, y + size * 0.7f) - path.lineTo(x + size, y + size * 0.7f) - } - Direction.DOWN -> { - path.moveTo(x, y + size) - path.lineTo(x - size, y - size * 0.7f) - path.lineTo(x + size, y - size * 0.7f) - } - Direction.LEFT -> { - path.moveTo(x - size, y) - path.lineTo(x + size * 0.7f, y - size) - path.lineTo(x + size * 0.7f, y + size) - } - Direction.RIGHT -> { - path.moveTo(x + size, y) - path.lineTo(x - size * 0.7f, y - size) - path.lineTo(x - size * 0.7f, y + size) - } + val r = corner + shadowPaint.alpha = (0.30f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect.left + 1f, rect.top + 2f, rect.right + 1f, rect.bottom + 2f, r, r, shadowPaint) + val fillA = if (pressed) 0.22f else 0.10f + glassFillPaint.color = Color.argb((fillA * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + canvas.drawRoundRect(rect, r, r, glassFillPaint) + glassBorderPaint.alpha = if (pressed) (0.45f * 255 * a).toInt().coerceIn(0, 255) else (0.30f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect, r, r, glassBorderPaint) + if (!pressed) { + glassHighlightPaint.alpha = (0.12f * 255 * a).toInt().coerceIn(0, 255) + val hl = RectF(rect.left, rect.top, rect.right, rect.top + rect.height() * 0.4f) + canvas.drawRoundRect(hl, r, r, glassHighlightPaint) } - path.close() - - val arrowPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { - style = Paint.Style.FILL - color = if (pressed) Color.rgb(200, 170, 130) else Color.argb((0.85f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + val ap = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL; textAlign = Paint.Align.CENTER; isFakeBoldText = true + textSize = rect.height() * 0.6f + color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((0.85f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) } - canvas.drawPath(path, arrowPaint) + canvas.drawText(arrow, rect.centerX(), rect.centerY() + ap.textSize * 0.35f, ap) + drawSelection(canvas, Control.DPAD) } private fun drawTouchZones(canvas: Canvas) { @@ -810,7 +1219,6 @@ class TouchOverlayView(context: Context) : View(context) { } private fun showExtraButtonsLegacyToggle() { - // Toggle between SIMPLIFIED and FULL controllerPreset = if (controllerPreset == ControllerPreset.SIMPLIFIED) ControllerPreset.FULL else ControllerPreset.SIMPLIFIED loadLayout() applySavedLayout() @@ -830,6 +1238,7 @@ class TouchOverlayView(context: Context) : View(context) { val zones = hitTestMulti(event.getX(idx), event.getY(idx)) if (zones.isNotEmpty()) { val newZones = zones - activeZones + handleSpecialZones(newZones) activeZones.addAll(zones) newZones.forEach { onInput?.invoke(it, true) } if (newZones.isNotEmpty()) vibrate() @@ -846,6 +1255,7 @@ class TouchOverlayView(context: Context) : View(context) { val released = activeZones - newActive val pressed = newActive - activeZones released.forEach { onInput?.invoke(it, false) } + handleSpecialZones(pressed) pressed.forEach { onInput?.invoke(it, true) vibrate() @@ -878,6 +1288,52 @@ class TouchOverlayView(context: Context) : View(context) { return false } + private fun handleSpecialZones(zones: Set) { + for (zone in zones) { + when (zone) { + Zone.TOOLBAR_TOGGLE -> { + onToggleControls?.invoke() + } + Zone.TOOLBAR_SETTINGS -> { + onOverlayMenu?.invoke() + } + Zone.TOOLBAR_KEYBOARD -> { + onToggleKeyboard?.invoke() + } + Zone.TOOLBAR_POINTER -> { + onTogglePointer?.invoke() + } + Zone.MENU_CHEATS -> { + menuOverlayVisible = false + invalidate() + } + Zone.MENU_MUTE -> { + menuOverlayVisible = false + invalidate() + } + Zone.MENU_ROTATE -> { + menuOverlayVisible = false + onRotateLayout?.invoke() + } + Zone.MENU_REMAP -> { + menuOverlayVisible = false + invalidate() + } + Zone.MENU_QUIT -> { + menuOverlayVisible = false + onOverlayMenu?.invoke() + } + Zone.LEFT_STICK -> { + leftStickActive = true + } + Zone.RIGHT_STICK -> { + rightStickActive = true + } + else -> {} + } + } + } + private fun handleOverlayMenuTouch(event: MotionEvent): Boolean { if (editing || quickSettingsOpen) return false val action = event.actionMasked @@ -890,6 +1346,11 @@ class TouchOverlayView(context: Context) : View(context) { return false } + fun toggleMenuOverlay() { + menuOverlayVisible = !menuOverlayVisible + invalidate() + } + private fun hitTestMulti(x: Float, y: Float): Set { return if (diagonalMovement) hitTestZones(x, y) else { val single = hitTest(x, y) @@ -901,22 +1362,47 @@ class TouchOverlayView(context: Context) : View(context) { val s = scale val isLandscape = width > height && !controlsOnly - // In landscape, ignore touches inside the game viewport unless in edit mode if (isLandscape && !editing && gameViewportRight > gameViewportLeft) { if (x > gameViewportLeft && x < gameViewportRight && y > gameViewportTop && y < gameViewportBottom) { return null } } - // In portrait, ignore touches above control panel unless in edit mode if (!isLandscape && !editing && !controlsOnly) { val panelTop = height * 0.55f if (y < panelTop) return null } + // Menu items (highest priority) + for ((rect, zone) in menuItems) { + if (rect.contains(x, y)) return zone + } + + // Toolbar buttons + if (toolbarVisible) { + for (i in 0..3) { + val rect = toolbarButtons[i] ?: continue + if (rect.contains(x, y)) { + return when (i) { + 0 -> Zone.TOOLBAR_TOGGLE + 1 -> Zone.TOOLBAR_SETTINGS + 2 -> Zone.TOOLBAR_KEYBOARD + 3 -> Zone.TOOLBAR_POINTER + else -> null + } + } + } + } + // Overlay menu if (overlayMenuRect.contains(x, y)) return Zone.OVERLAY_MENU + // ZL/ZR in FULL mode + if (controllerPreset == ControllerPreset.FULL) { + if (zlRect.contains(x, y)) return Zone.ZL + if (zrRect.contains(x, y)) return Zone.ZR + } + // L1/R1 if (l1Rect.contains(x, y)) return Zone.L1 if (r1Rect.contains(x, y)) return Zone.R1 @@ -926,11 +1412,33 @@ class TouchOverlayView(context: Context) : View(context) { if (startRect.contains(x, y)) return Zone.START if (menuRect.contains(x, y)) return Zone.HOME + // FULL mode extras + if (controllerPreset == ControllerPreset.FULL) { + // Analog sticks + if (leftStickRect.contains(x, y)) return Zone.LEFT_STICK + if (rightStickRect.contains(x, y)) return Zone.RIGHT_STICK + + // L3/R3 + if (l3Rect.contains(x, y)) return Zone.L3 + if (r3Rect.contains(x, y)) return Zone.R3 + + // Guide/Plus/Minus + if (guideRect.contains(x, y)) return Zone.GUIDE + if (plusRect.contains(x, y)) return Zone.PLUS + if (minusRect.contains(x, y)) return Zone.MINUS + + // Modifiers + if (dist(x, y, btnCtrl.x, btnCtrl.y) < radiusFor(Control.CTRL) * 0.85f) return Zone.BTN_CTRL + if (dist(x, y, btnAlt.x, btnAlt.y) < radiusFor(Control.ALT) * 0.85f) return Zone.BTN_ALT + if (dist(x, y, btnShift.x, btnShift.y) < radiusFor(Control.SHIFT) * 0.85f) return Zone.BTN_SHIFT + } + // Action buttons based on preset if (controllerPreset == ControllerPreset.SIMPLIFIED) { if (dist(x, y, btnConfirm.x, btnConfirm.y) < radiusFor(Control.CONFIRM)) return Zone.BTN_CONFIRM if (dist(x, y, btnBack.x, btnBack.y) < radiusFor(Control.BACK)) return Zone.BTN_BACK if (dist(x, y, btnDash.x, btnDash.y) < radiusFor(Control.DASH)) return Zone.BTN_DASH + if (dist(x, y, btnExtraS.x, btnExtraS.y) < radiusFor(Control.EXTRA_S)) return Zone.BTN_EXTRA_S } else { if (dist(x, y, btnExtraA.x, btnExtraA.y) < radiusFor(Control.EXTRA_A)) return Zone.BTN_EXTRA_A if (dist(x, y, btnExtraS.x, btnExtraS.y) < radiusFor(Control.EXTRA_S)) return Zone.BTN_EXTRA_S @@ -940,9 +1448,6 @@ class TouchOverlayView(context: Context) : View(context) { if (dist(x, y, btnExtraC.x, btnExtraC.y) < radiusFor(Control.EXTRA_C)) return Zone.BTN_EXTRA_C if (dist(x, y, btnConfirm.x, btnConfirm.y) < radiusFor(Control.CONFIRM)) return Zone.BTN_CONFIRM if (dist(x, y, btnBack.x, btnBack.y) < radiusFor(Control.BACK)) return Zone.BTN_BACK - if (dist(x, y, btnCtrl.x, btnCtrl.y) < radiusFor(Control.CTRL) * 0.85f) return Zone.BTN_CTRL - if (dist(x, y, btnAlt.x, btnAlt.y) < radiusFor(Control.ALT) * 0.85f) return Zone.BTN_ALT - if (dist(x, y, btnShift.x, btnShift.y) < radiusFor(Control.SHIFT) * 0.85f) return Zone.BTN_SHIFT } // D-pad @@ -980,7 +1485,44 @@ class TouchOverlayView(context: Context) : View(context) { val result = mutableSetOf() + // Menu items (highest priority) + for ((rect, zone) in menuItems) { + if (rect.contains(x, y)) return setOf(zone) + } + + // Toolbar buttons + if (toolbarVisible) { + for (i in 0..3) { + val rect = toolbarButtons[i] ?: continue + if (rect.contains(x, y)) { + return setOf( + when (i) { + 0 -> Zone.TOOLBAR_TOGGLE + 1 -> Zone.TOOLBAR_SETTINGS + 2 -> Zone.TOOLBAR_KEYBOARD + 3 -> Zone.TOOLBAR_POINTER + else -> null + }!! + ) + } + } + } + if (overlayMenuRect.contains(x, y)) return setOf(Zone.OVERLAY_MENU) + + // FULL mode extras + if (controllerPreset == ControllerPreset.FULL) { + if (zlRect.contains(x, y)) return setOf(Zone.ZL) + if (zrRect.contains(x, y)) return setOf(Zone.ZR) + if (leftStickRect.contains(x, y)) result.add(Zone.LEFT_STICK) + if (rightStickRect.contains(x, y)) result.add(Zone.RIGHT_STICK) + if (l3Rect.contains(x, y)) return setOf(Zone.L3) + if (r3Rect.contains(x, y)) return setOf(Zone.R3) + if (guideRect.contains(x, y)) return setOf(Zone.GUIDE) + if (plusRect.contains(x, y)) return setOf(Zone.PLUS) + if (minusRect.contains(x, y)) return setOf(Zone.MINUS) + } + if (l1Rect.contains(x, y)) return setOf(Zone.L1) if (r1Rect.contains(x, y)) return setOf(Zone.R1) if (selectRect.contains(x, y)) return setOf(Zone.SELECT) @@ -991,6 +1533,7 @@ class TouchOverlayView(context: Context) : View(context) { if (dist(x, y, btnConfirm.x, btnConfirm.y) < radiusFor(Control.CONFIRM)) result.add(Zone.BTN_CONFIRM) if (dist(x, y, btnBack.x, btnBack.y) < radiusFor(Control.BACK)) result.add(Zone.BTN_BACK) if (dist(x, y, btnDash.x, btnDash.y) < radiusFor(Control.DASH)) result.add(Zone.BTN_DASH) + if (dist(x, y, btnExtraS.x, btnExtraS.y) < radiusFor(Control.EXTRA_S)) result.add(Zone.BTN_EXTRA_S) } else { if (dist(x, y, btnExtraA.x, btnExtraA.y) < radiusFor(Control.EXTRA_A)) result.add(Zone.BTN_EXTRA_A) if (dist(x, y, btnExtraS.x, btnExtraS.y) < radiusFor(Control.EXTRA_S)) result.add(Zone.BTN_EXTRA_S) @@ -1000,9 +1543,11 @@ class TouchOverlayView(context: Context) : View(context) { if (dist(x, y, btnExtraC.x, btnExtraC.y) < radiusFor(Control.EXTRA_C)) result.add(Zone.BTN_EXTRA_C) if (dist(x, y, btnConfirm.x, btnConfirm.y) < radiusFor(Control.CONFIRM)) result.add(Zone.BTN_CONFIRM) if (dist(x, y, btnBack.x, btnBack.y) < radiusFor(Control.BACK)) result.add(Zone.BTN_BACK) - if (dist(x, y, btnCtrl.x, btnCtrl.y) < radiusFor(Control.CTRL) * 0.85f) result.add(Zone.BTN_CTRL) - if (dist(x, y, btnAlt.x, btnAlt.y) < radiusFor(Control.ALT) * 0.85f) result.add(Zone.BTN_ALT) - if (dist(x, y, btnShift.x, btnShift.y) < radiusFor(Control.SHIFT) * 0.85f) result.add(Zone.BTN_SHIFT) + if (controllerPreset == ControllerPreset.FULL) { + if (dist(x, y, btnCtrl.x, btnCtrl.y) < radiusFor(Control.CTRL) * 0.85f) result.add(Zone.BTN_CTRL) + if (dist(x, y, btnAlt.x, btnAlt.y) < radiusFor(Control.ALT) * 0.85f) result.add(Zone.BTN_ALT) + if (dist(x, y, btnShift.x, btnShift.y) < radiusFor(Control.SHIFT) * 0.85f) result.add(Zone.BTN_SHIFT) + } } if (result.isNotEmpty()) return result @@ -1069,7 +1614,25 @@ class TouchOverlayView(context: Context) : View(context) { Zone.HOME -> Control.MENU Zone.L1 -> Control.L1 Zone.R1 -> Control.R1 + Zone.ZL -> Control.ZL + Zone.ZR -> Control.ZR + Zone.L3 -> Control.L3 + Zone.R3 -> Control.R3 + Zone.GUIDE -> Control.GUIDE + Zone.PLUS -> Control.PLUS + Zone.MINUS -> Control.MINUS + Zone.LEFT_STICK -> Control.LEFT_STICK + Zone.RIGHT_STICK -> Control.RIGHT_STICK + Zone.TOOLBAR_TOGGLE -> Control.MENU + Zone.TOOLBAR_SETTINGS -> Control.MENU + Zone.TOOLBAR_KEYBOARD -> Control.MENU + Zone.TOOLBAR_POINTER -> Control.MENU Zone.OVERLAY_MENU -> Control.MENU + Zone.MENU_CHEATS -> Control.MENU + Zone.MENU_MUTE -> Control.MENU + Zone.MENU_ROTATE -> Control.MENU + Zone.MENU_REMAP -> Control.MENU + Zone.MENU_QUIT -> Control.MENU Zone.BTN_X, Zone.BTN_Y -> Control.DASH } @@ -1087,13 +1650,13 @@ class TouchOverlayView(context: Context) : View(context) { when (action) { MotionEvent.ACTION_DOWN -> { when { - doneRect.contains(x, y) -> { + editorCheckRect.contains(x, y) -> { saveLayout() editing = false selectedControl = null invalidate() } - revertRect.contains(x, y) -> { + editorUndoRect.contains(x, y) -> { layout.clear() layout.putAll(savedLayoutBeforeEdit.mapValues { it.value.copy() }) applySavedLayout() @@ -1101,9 +1664,17 @@ class TouchOverlayView(context: Context) : View(context) { selectedControl = null invalidate() } - presetRect.contains(x, y) -> { + editorRotateRect.contains(x, y) -> { resetToPreset() } + editorCloseRect.contains(x, y) -> { + layout.clear() + layout.putAll(savedLayoutBeforeEdit.mapValues { it.value.copy() }) + applySavedLayout() + editing = false + selectedControl = null + invalidate() + } else -> { draggingControl = hitTestControl(x, y) selectedControl = draggingControl @@ -1154,16 +1725,22 @@ class TouchOverlayView(context: Context) : View(context) { editing = true selectedControl = null activeZones.clear() - // Position editor buttons at top center - val btnW = (120f * scale).coerceAtLeast(100f) - val btnH = (48f * scale).coerceAtLeast(40f) - val gap = (16f * scale).coerceAtLeast(10f) - val totalW = btnW * 3f + gap * 2f - val startX = (width - totalW) / 2f - val btnY = (40f * scale).coerceAtLeast(24f) - doneRect.set(startX, btnY, startX + btnW, btnY + btnH) - revertRect.set(startX + btnW + gap, btnY, startX + btnW * 2f + gap, btnY + btnH) - presetRect.set(startX + (btnW + gap) * 2f, btnY, startX + (btnW + gap) * 2f + btnW, btnY + btnH) + + // Layout Editor header at top + val headerH = (44f * scale).coerceAtLeast(36f) + editorHeaderRect.set(0f, 0f, width.toFloat(), headerH) + + // Right toolbar buttons + val btnSize = (48f * scale).coerceAtLeast(40f) + val btnGap = (8f * scale).coerceAtLeast(4f) + val tbX = width - btnSize - 12f * scale + val tbStartY = headerH + 16f * scale + + editorCheckRect.set(tbX, tbStartY, tbX + btnSize, tbStartY + btnSize) + editorUndoRect.set(tbX, tbStartY + btnSize + btnGap, tbX + btnSize, tbStartY + (btnSize + btnGap) * 2) + editorRotateRect.set(tbX, tbStartY + (btnSize + btnGap) * 2, tbX + btnSize, tbStartY + (btnSize + btnGap) * 3) + editorCloseRect.set(tbX, tbStartY + (btnSize + btnGap) * 3, tbX + btnSize, tbStartY + (btnSize + btnGap) * 4) + invalidate() } @@ -1185,14 +1762,169 @@ class TouchOverlayView(context: Context) : View(context) { } private fun drawEditorChrome(canvas: Canvas) { - editorPaint.alpha = 150 - canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), editorPaint) - drawEditorButton(canvas, doneRect, "DONE") - drawEditorButton(canvas, revertRect, "REVERT") - drawEditorButton(canvas, presetRect, "PRESET") - smallLabelPaint.alpha = 230 - smallLabelPaint.color = Color.rgb(232, 229, 220) - canvas.drawText("Drag controls. Pinch selected control to resize.", width / 2f, height - 20f, smallLabelPaint) + // Grid overlay + val gridPatternPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1f + color = Color.argb(30, 255, 255, 255) + } + val gridSpacing = 48f * scale + var gy = editorHeaderRect.bottom + gridSpacing + while (gy < height) { + canvas.drawLine(0f, gy, width.toFloat(), gy, gridPatternPaint) + gy += gridSpacing + } + var gx = gridSpacing + while (gx < width) { + canvas.drawLine(gx, 0f, gx, height.toFloat(), gridPatternPaint) + gx += gridSpacing + } + + // Header bar + editorPaint.alpha = 200 + editorPaint.color = Color.argb(200, 14, 14, 18) + canvas.drawRect(editorHeaderRect, editorPaint) + + val headerLinePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.5f + color = Color.argb(60, 255, 255, 255) + } + canvas.drawLine(editorHeaderRect.left, editorHeaderRect.bottom, editorHeaderRect.right, editorHeaderRect.bottom, headerLinePaint) + + val headerTextPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER + textSize = 16f * scale + isFakeBoldText = true + color = Color.argb(220, 232, 229, 220) + } + canvas.drawText("Layout Editor", editorHeaderRect.centerX(), editorHeaderRect.centerY() + 6f * scale, headerTextPaint) + + // Right toolbar (check/undo/rotate/close) + val toolbarBgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb(180, 14, 14, 18) + } + val toolBarL = editorCheckRect.left - 8f * scale + val toolBarR = editorCheckRect.right + 8f * scale + val toolBarT = editorCheckRect.top - 8f * scale + val toolBarB = editorCloseRect.bottom + 8f * scale + canvas.drawRoundRect(RectF(toolBarL, toolBarT, toolBarR, toolBarB), 12f * scale, 12f * scale, toolbarBgPaint) + + val toolBorderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.2f + color = Color.argb(50, 255, 255, 255) + } + canvas.drawRoundRect(RectF(toolBarL, toolBarT, toolBarR, toolBarB), 12f * scale, 12f * scale, toolBorderPaint) + + drawEditorToolButton(canvas, editorCheckRect, OverlayStyle.Icons::check, "Done") + drawEditorToolButton(canvas, editorUndoRect, OverlayStyle.Icons::undo, "Undo") + drawEditorToolButton(canvas, editorRotateRect, OverlayStyle.Icons::rotate, "Reset") + drawEditorToolButton(canvas, editorCloseRect, OverlayStyle.Icons::close, "Cancel") + + // Dashed bounding boxes + circular handles on selected control + selectedControl?.let { control -> + controlRects[control]?.let { rect -> + val dashPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 2f + pathEffect = DashPathEffect(floatArrayOf(6f, 4f), 0f) + color = Color.rgb(210, 180, 134) + } + canvas.drawRoundRect(rect, 12f, 12f, dashPaint) + + // Corner handles (small circles at each corner) + val handleR = 6f * scale + val handlePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.rgb(210, 180, 134) + } + val corners = listOf( + rect.left to rect.top, + rect.right to rect.top, + rect.left to rect.bottom, + rect.right to rect.bottom, + ) + for ((hx, hy) in corners) { + canvas.drawCircle(hx, hy, handleR, handlePaint) + handlePaint.color = Color.argb(180, 210, 180, 134) + canvas.drawCircle(hx, hy, handleR, handlePaint) + handlePaint.color = Color.rgb(210, 180, 134) + } + } + } + + // Bottom hint pill with info icon + val hintText = "Drag · Resize · Pinch" + val hintPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.LEFT + textSize = 12f * scale + color = Color.argb(160, 232, 229, 220) + } + val hintW = hintPaint.measureText(hintText) + 40f * scale + val hintH = 28f * scale + val hintX = (width - hintW) / 2f + val hintY = height - hintH - 16f * scale + + val hintBgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb(140, 0, 0, 0) + } + val hintRect = RectF(hintX, hintY, hintX + hintW, hintY + hintH) + canvas.drawRoundRect(hintRect, hintH / 2f, hintH / 2f, hintBgPaint) + + val hintBorderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1f + color = Color.argb(60, 255, 255, 255) + } + canvas.drawRoundRect(hintRect, hintH / 2f, hintH / 2f, hintBorderPaint) + + // Info icon + val iconPs = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeWidth = 1.5f + color = Color.argb(160, 232, 229, 220) + } + val infoCx = hintX + 14f * scale + val infoCy = hintY + hintH / 2f + iconPs.style = Paint.Style.STROKE + canvas.drawCircle(infoCx, infoCy, 5f * scale, iconPs) + iconPs.style = Paint.Style.FILL + canvas.drawCircle(infoCx, infoCy - 1.5f * scale, 1.5f * scale, iconPs) + canvas.drawLine(infoCx, infoCy + 1f * scale, infoCx, infoCy + 4f * scale, iconPs) + iconPs.style = Paint.Style.STROKE + + canvas.drawText(hintText, hintX + 22f * scale, hintY + hintH / 2f + 4f * scale, hintPaint) + } + + private fun drawEditorToolButton(canvas: Canvas, rect: RectF, icon: (Canvas: Canvas, cx: Float, cy: Float, s: Float, paint: Paint) -> Unit, label: String) { + val bgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb(80, 255, 255, 255) + } + canvas.drawRoundRect(rect, 10f * scale, 10f * scale, bgPaint) + + val bdrPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 1.2f + color = Color.argb(100, 255, 255, 255) + } + canvas.drawRoundRect(rect, 10f * scale, 10f * scale, bdrPaint) + + val iconPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeCap = Paint.Cap.ROUND + strokeJoin = Paint.Join.ROUND + strokeWidth = 2f * scale + color = Color.argb(200, 232, 229, 220) + } + val cx = rect.centerX() + val cy = rect.centerY() + val s = rect.width() * 0.32f + icon(canvas, cx, cy, s, iconPaint) } private fun drawEditorButton(canvas: Canvas, rect: RectF, label: String) { @@ -1222,7 +1954,9 @@ class TouchOverlayView(context: Context) : View(context) { private fun isControlVisible(control: Control): Boolean { return when (control) { - Control.DPAD, Control.CONFIRM, Control.BACK, Control.DASH, Control.L1, Control.R1 -> true + Control.DPAD, Control.CONFIRM, Control.BACK, Control.DASH, Control.L1, Control.R1, + Control.ZL, Control.ZR, Control.L3, Control.R3, Control.GUIDE, Control.PLUS, Control.MINUS, + Control.LEFT_STICK, Control.RIGHT_STICK -> true Control.CTRL, Control.ALT, Control.SHIFT, Control.EXTRA_A, Control.EXTRA_S, Control.EXTRA_D, Control.EXTRA_Z, Control.EXTRA_X, Control.EXTRA_C -> controllerPreset == ControllerPreset.FULL @@ -1241,6 +1975,15 @@ class TouchOverlayView(context: Context) : View(context) { Control.DPAD to ControlPlacement(dpadCenter.x / width, dpadCenter.y / height, (dpadRadius * scale) / shortSide), Control.L1 to ControlPlacement(l1Rect.centerX() / width, l1Rect.centerY() / height, (l1Rect.height() * scale) / shortSide), Control.R1 to ControlPlacement(r1Rect.centerX() / width, r1Rect.centerY() / height, (r1Rect.height() * scale) / shortSide), + Control.ZL to ControlPlacement(zlRect.centerX() / width, zlRect.centerY() / height, (zlRect.height() * scale) / shortSide), + Control.ZR to ControlPlacement(zrRect.centerX() / width, zrRect.centerY() / height, (zrRect.height() * scale) / shortSide), + Control.L3 to ControlPlacement(l3Rect.centerX() / width, l3Rect.centerY() / height, (l3Rect.height() * scale) / shortSide), + Control.R3 to ControlPlacement(r3Rect.centerX() / width, r3Rect.centerY() / height, (r3Rect.height() * scale) / shortSide), + Control.GUIDE to ControlPlacement(guideRect.centerX() / width, guideRect.centerY() / height, (guideRect.height() * scale) / shortSide), + Control.PLUS to ControlPlacement(plusRect.centerX() / width, plusRect.centerY() / height, (plusRect.height() * scale) / shortSide), + Control.MINUS to ControlPlacement(minusRect.centerX() / width, minusRect.centerY() / height, (minusRect.height() * scale) / shortSide), + Control.LEFT_STICK to ControlPlacement(leftStickRect.centerX() / width, leftStickRect.centerY() / height, (leftStickRect.width() * scale) / shortSide), + Control.RIGHT_STICK to ControlPlacement(rightStickRect.centerX() / width, rightStickRect.centerY() / height, (rightStickRect.width() * scale) / shortSide), Control.CONFIRM to ControlPlacement(btnConfirm.x / width, btnConfirm.y / height, (actionRadius * scale) / shortSide), Control.BACK to ControlPlacement(btnBack.x / width, btnBack.y / height, (actionRadius * scale) / shortSide), Control.DASH to ControlPlacement(btnDash.x / width, btnDash.y / height, (actionRadius * scale) / shortSide), @@ -1267,13 +2010,14 @@ class TouchOverlayView(context: Context) : View(context) { controllerPreset = savedPreset layout.clear() + val prefix = orientationPrefix() Control.entries.forEach { control -> val default = defaultLayout[control] ?: return@forEach - val prefix = "${if (controlsOnly) "portrait" else "landscape"}_${controllerPreset.name}_${control.name}" + val key = "${prefix}_${controllerPreset.name}_${control.name}" layout[control] = ControlPlacement( - x = prefs.getFloat("${prefix}_x", default.x), - y = prefs.getFloat("${prefix}_y", default.y), - size = prefs.getFloat("${prefix}_size", default.size), + x = prefs.getFloat("${key}_x", default.x), + y = prefs.getFloat("${key}_y", default.y), + size = prefs.getFloat("${key}_size", default.size), ) } } @@ -1281,11 +2025,12 @@ class TouchOverlayView(context: Context) : View(context) { private fun saveLayout() { val prefs = context.getSharedPreferences("controller-layout-v2", Context.MODE_PRIVATE).edit() prefs.putString("preset", controllerPreset.name) + val prefix = orientationPrefix() layout.forEach { (control, placement) -> - val prefix = "${if (controlsOnly) "portrait" else "landscape"}_${controllerPreset.name}_${control.name}" - prefs.putFloat("${prefix}_x", placement.x) - prefs.putFloat("${prefix}_y", placement.y) - prefs.putFloat("${prefix}_size", placement.size) + val key = "${prefix}_${controllerPreset.name}_${control.name}" + prefs.putFloat("${key}_x", placement.x) + prefs.putFloat("${key}_y", placement.y) + prefs.putFloat("${key}_size", placement.size) } prefs.apply() onProfileLayoutChanged?.invoke(exportProfileButtons()) @@ -1301,7 +2046,7 @@ class TouchOverlayView(context: Context) : View(context) { } private fun exportProfileButtons(): List { - val layoutName = if (controlsOnly) "portrait" else "landscape" + val layoutName = orientationPrefix() return layout.mapNotNull { (control, placement) -> if (!isControlVisible(control)) return@mapNotNull null val label = when (control) { @@ -1309,6 +2054,15 @@ class TouchOverlayView(context: Context) : View(context) { Control.CONFIRM -> "Confirm" Control.BACK -> "Back" Control.DASH -> "Dash" + Control.ZL -> "ZL" + Control.ZR -> "ZR" + Control.L3 -> "L3" + Control.R3 -> "R3" + Control.GUIDE -> "Guide" + Control.PLUS -> "Plus" + Control.MINUS -> "Minus" + Control.LEFT_STICK -> "Left Stick" + Control.RIGHT_STICK -> "Right Stick" else -> control.name.lowercase().replaceFirstChar { it.uppercase() } } val key = when (control) { @@ -1316,6 +2070,15 @@ class TouchOverlayView(context: Context) : View(context) { Control.CONFIRM -> "ENTER" Control.BACK -> "ESCAPE" Control.DASH -> "SHIFT" + Control.ZL -> "ZL" + Control.ZR -> "ZR" + Control.L3 -> "L3" + Control.R3 -> "R3" + Control.GUIDE -> "GUIDE" + Control.PLUS -> "PLUS" + Control.MINUS -> "MINUS" + Control.LEFT_STICK -> "LEFT_STICK" + Control.RIGHT_STICK -> "RIGHT_STICK" else -> control.name } ControlButtonProfile( @@ -1358,6 +2121,51 @@ class TouchOverlayView(context: Context) : View(context) { val w = h * 1.6f r1Rect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) } + point(Control.ZL).also { + val h = layout.getValue(Control.ZL).size * shortSide + val w = h * 1.5f + zlRect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.ZR).also { + val h = layout.getValue(Control.ZR).size * shortSide + val w = h * 1.5f + zrRect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.L3).also { + val h = layout.getValue(Control.L3).size * shortSide + val w = h * 1.5f + l3Rect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.R3).also { + val h = layout.getValue(Control.R3).size * shortSide + val w = h * 1.5f + r3Rect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.GUIDE).also { + val h = layout.getValue(Control.GUIDE).size * shortSide + val w = h * 1.5f + guideRect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.PLUS).also { + val h = layout.getValue(Control.PLUS).size * shortSide + val w = h * 1.5f + plusRect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.MINUS).also { + val h = layout.getValue(Control.MINUS).size * shortSide + val w = h * 1.5f + minusRect.set(it.x - w / 2f, it.y - h / 2f, it.x + w / 2f, it.y + h / 2f) + } + point(Control.LEFT_STICK).also { + val size = layout.getValue(Control.LEFT_STICK).size * shortSide + leftStickRect.set(it.x - size / 2f, it.y - size / 2f, it.x + size / 2f, it.y + size / 2f) + leftStickThumb.x = it.x; leftStickThumb.y = it.y + } + point(Control.RIGHT_STICK).also { + val size = layout.getValue(Control.RIGHT_STICK).size * shortSide + rightStickRect.set(it.x - size / 2f, it.y - size / 2f, it.x + size / 2f, it.y + size / 2f) + rightStickThumb.x = it.x; rightStickThumb.y = it.y + } point(Control.CONFIRM).also { btnConfirm.x = it.x; btnConfirm.y = it.y } point(Control.BACK).also { btnBack.x = it.x; btnBack.y = it.y } @@ -1414,6 +2222,15 @@ class TouchOverlayView(context: Context) : View(context) { controlRects[Control.MENU] = RectF(menuRect) controlRects[Control.L1] = RectF(l1Rect) controlRects[Control.R1] = RectF(r1Rect) + controlRects[Control.ZL] = RectF(zlRect) + controlRects[Control.ZR] = RectF(zrRect) + controlRects[Control.L3] = RectF(l3Rect) + controlRects[Control.R3] = RectF(r3Rect) + controlRects[Control.GUIDE] = RectF(guideRect) + controlRects[Control.PLUS] = RectF(plusRect) + controlRects[Control.MINUS] = RectF(minusRect) + controlRects[Control.LEFT_STICK] = RectF(leftStickRect) + controlRects[Control.RIGHT_STICK] = RectF(rightStickRect) } private fun radiusFor(control: Control): Float = @@ -1422,11 +2239,12 @@ class TouchOverlayView(context: Context) : View(context) { private enum class Control { DPAD, CONFIRM, BACK, DASH, - L1, R1, + L1, R1, ZL, ZR, L3, R3, EXTRA_A, EXTRA_S, EXTRA_D, EXTRA_Z, EXTRA_X, EXTRA_C, CTRL, ALT, SHIFT, - SELECT, START, MENU, + SELECT, START, MENU, GUIDE, PLUS, MINUS, + LEFT_STICK, RIGHT_STICK, } private data class ControlPlacement( diff --git a/app/src/main/java/com/runestone/app/input/VirtualKeyboardOverlay.kt b/app/src/main/java/com/runestone/app/input/VirtualKeyboardOverlay.kt new file mode 100644 index 0000000..374a5c7 --- /dev/null +++ b/app/src/main/java/com/runestone/app/input/VirtualKeyboardOverlay.kt @@ -0,0 +1,774 @@ +package com.runestone.app.input + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.Typeface +import android.os.Handler +import android.os.Looper +import android.os.SystemClock +import android.view.MotionEvent +import android.view.View +import android.view.KeyEvent +import kotlin.math.abs +import kotlin.math.min + +class VirtualKeyboardOverlay(context: Context) : View(context) { + + enum class DockMode { BOTTOM, TOP, SPLIT } + + var dockMode: DockMode = DockMode.BOTTOM + var kbOpacity: Float = 0.75f + var kbScale: Float = 1.0f + var landscapeKeys: Boolean = false + var onKeyDown: ((Int) -> Unit)? = null + var onKeyUp: ((Int) -> Unit)? = null + var onDockModeChanged: ((DockMode) -> Unit)? = null + var onHide: (() -> Unit)? = null + + private var safeTop = 0f + private var safeBottom = 0f + private var safeLeft = 0f + private var safeRight = 0f + + private val glassFill = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val glassBorder = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE; strokeWidth = 1.5f } + private val keyFill = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val keyBorder = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE; strokeWidth = 1.2f } + private val keyPressedFill = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + private val keyLabelPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER; isFakeBoldText = true; typeface = Typeface.DEFAULT_BOLD + } + private val keySmallPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + textAlign = Paint.Align.CENTER; isFakeBoldText = true; typeface = Typeface.DEFAULT_BOLD + } + + private val shadowPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL } + + data class KeyDef( + val label: String, + val code: Int, + val wide: Float = 1f, + val small: Boolean = false, + ) + + data class KeyRect(val def: KeyDef, val rect: RectF) + + private val allKeys = mutableListOf() + private val activeKeys = mutableSetOf() + private val kbRect = RectF() + private val handleRect = RectF() + private val dockHandleRect = RectF() + private var leftPanelRect = RectF() + private var rightPanelRect = RectF() + + private val repeatHandler = Handler(Looper.getMainLooper()) + private var repeatCode = -1 + private var repeatStartMs = 0L + + fun setSafeInsets(top: Float, bottom: Float, left: Float, right: Float) { + safeTop = top; safeBottom = bottom; safeLeft = left; safeRight = right + requestLayout() + } + + override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { + super.onLayout(changed, l, t, r, b) + if (changed) rebuildKeys() + } + + private fun rebuildKeys() { + allKeys.clear() + kbRect.setEmpty() + leftPanelRect.setEmpty() + rightPanelRect.setEmpty() + + val w = width.toFloat() + val h = height.toFloat() + val s = kbScale + val gap = (4f * s).coerceAtLeast(2f) + val bottomGap = (8f + safeBottom).coerceAtLeast(8f) + val topGap = (8f + safeTop).coerceAtLeast(8f) + val sidePad = (6f * s).coerceAtLeast(4f) + + if (landscapeKeys) { + if (dockMode == DockMode.SPLIT) { + layoutSplitLandscape(w, h, s, gap, bottomGap, topGap, sidePad) + } else { + layoutFullLandscape(w, h, s, gap, bottomGap, topGap, sidePad) + } + } else { + if (dockMode == DockMode.SPLIT) { + layoutSplitPortrait(w, h, s, gap, bottomGap, topGap, sidePad) + } else { + layoutFullPortrait(w, h, s, gap, bottomGap, topGap, sidePad) + } + } + invalidate() + } + + private fun layoutFullLandscape(w: Float, h: Float, s: Float, gap: Float, bottomGap: Float, topGap: Float, sidePad: Float) { + val docked = if (dockMode == DockMode.BOTTOM) h - bottomGap else topGap + val totalRows = 8 + val availH = if (dockMode == DockMode.BOTTOM) docked - topGap else h - docked - bottomGap + val keyH = ((availH - gap * (totalRows + 1)) / totalRows).coerceIn(18f, 36f) + val rowH = keyH + gap + val kbH = totalRows * rowH + gap + val kbTop = if (dockMode == DockMode.BOTTOM) docked - kbH else docked + val kbW = (w - sidePad * 2f - safeLeft - safeRight).coerceAtMost(w * 0.92f) + val kbLeft = (w - kbW) / 2f + val kbRight = kbLeft + kbW + val fontScale = (keyH / 28f).coerceIn(0.55f, 1.2f) + currentLabelSize = (12f * fontScale).coerceAtLeast(7f) + currentSmallLabelSize = (10f * fontScale).coerceAtLeast(6f) + + kbRect.set(kbLeft, kbTop, kbRight, kbTop + kbH) + + val rowY = { row: Int -> kbTop + gap + row * rowH + 2f } + val keyW = { cols: Int -> (kbW - gap * (cols + 1)) / cols } + + fun addRow(row: Int, labels: List, codes: List, wide: List = emptyList(), small: List = emptyList()) { + val cols = labels.size + val totalW = keyW(cols) * cols + gap * (cols - 1) + val startX = kbLeft + (kbW - totalW) / 2f + var x = startX + val y = rowY(row) + labels.forEachIndexed { i, label -> + val wf = wide.getOrElse(i) { 1f } + val cw = keyW(cols) * wf + gap * (wf - 1f) * 0.5f + addKey(KeyDef(label, codes.getOrElse(i) { 0 }, wf, small.getOrElse(i) { false }), x, y, cw, keyH, gap) + x += cw + gap + } + } + + addKey(KeyDef("Esc", KeyEvent.KEYCODE_ESCAPE, 1.2f, true), kbLeft + gap, rowY(0), keyW(14) * 1.2f, keyH, gap) + addRow(0, listOf("F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10"), + listOf(KeyEvent.KEYCODE_F1, KeyEvent.KEYCODE_F2, KeyEvent.KEYCODE_F3, KeyEvent.KEYCODE_F4, KeyEvent.KEYCODE_F5, + KeyEvent.KEYCODE_F6, KeyEvent.KEYCODE_F7, KeyEvent.KEYCODE_F8, KeyEvent.KEYCODE_F9, KeyEvent.KEYCODE_F10), small = listOf(true, true, true, true, true, true, true, true, true, true)) + + val numRow = listOf("`~", "1!", "2@", "3#", "4$", "5%", "6^", "7&", "8*", "9(", "0)", "-_", "=+", "Bksp") + val numCodes = listOf(KeyEvent.KEYCODE_GRAVE, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_2, KeyEvent.KEYCODE_3, KeyEvent.KEYCODE_4, + KeyEvent.KEYCODE_5, KeyEvent.KEYCODE_6, KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_0, + KeyEvent.KEYCODE_MINUS, KeyEvent.KEYCODE_EQUALS, KeyEvent.KEYCODE_DEL) + addRow(1, numRow, numCodes, wide = listOf(0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.5f), small = listOf(false, false, false, false, false, false, false, false, false, false, false, false, false, true)) + + addRow(2, listOf("Tab", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[{", "]}", "\\|"), + listOf(KeyEvent.KEYCODE_TAB, KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_R, + KeyEvent.KEYCODE_T, KeyEvent.KEYCODE_Y, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_I, KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_P, + KeyEvent.KEYCODE_LEFT_BRACKET, KeyEvent.KEYCODE_RIGHT_BRACKET, KeyEvent.KEYCODE_BACKSLASH), + wide = listOf(1.3f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.2f)) + + addRow(3, listOf("Caps", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";:", "'\"", "Enter"), + listOf(KeyEvent.KEYCODE_CAPS_LOCK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_F, + KeyEvent.KEYCODE_G, KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L, + KeyEvent.KEYCODE_SEMICOLON, KeyEvent.KEYCODE_APOSTROPHE, KeyEvent.KEYCODE_ENTER), + wide = listOf(1.5f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.7f)) + + addRow(4, listOf("Shift", "Z", "X", "C", "V", "B", "N", "M", ",<", ".>", "/?", "Shift"), + listOf(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_Z, KeyEvent.KEYCODE_X, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_V, + KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_N, KeyEvent.KEYCODE_M, KeyEvent.KEYCODE_COMMA, KeyEvent.KEYCODE_PERIOD, + KeyEvent.KEYCODE_SLASH, KeyEvent.KEYCODE_SHIFT_RIGHT), + wide = listOf(1.8f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.8f)) + + // Row 5: Ctrl Meta Alt Space AltGr Fn Ctrl + nav cluster + val modKeys = listOf( + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_LEFT, 1.2f, small = true), + KeyDef("Meta", KeyEvent.KEYCODE_META_LEFT, 1.2f, small = true), + KeyDef("Alt", KeyEvent.KEYCODE_ALT_LEFT, 1.0f, small = true), + KeyDef("Space", KeyEvent.KEYCODE_SPACE, 3.5f), + KeyDef("AltGr", KeyEvent.KEYCODE_ALT_RIGHT, 1.0f, small = true), + KeyDef("Fn", -1, 1.0f, small = true), + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_RIGHT, 1.2f, small = true), + KeyDef("Ins", KeyEvent.KEYCODE_INSERT, 0.8f, small = true), + KeyDef("Del", KeyEvent.KEYCODE_FORWARD_DEL, 0.8f, small = true), + ) + val modTotalW = modKeys.sumOf { (it.wide * keyW(14)).toDouble() } + gap * (modKeys.size - 1) + var modX = kbLeft + (kbW - modTotalW.toFloat()) / 2f + modKeys.forEach { kd -> + val cw = kd.wide * keyW(14) + addKey(kd, modX, rowY(5), cw, keyH, gap) + modX += cw + gap + } + + // Row 6: Home End PgUp PgDn + arrows + val navKeys = listOf( + KeyDef("Home", KeyEvent.KEYCODE_MOVE_HOME, 1.0f, small = true), + KeyDef("End", KeyEvent.KEYCODE_MOVE_END, 1.0f, small = true), + KeyDef("PgUp", KeyEvent.KEYCODE_PAGE_UP, 1.0f, small = true), + KeyDef("PgDn", KeyEvent.KEYCODE_PAGE_DOWN, 1.0f, small = true), + ) + var navX = kbLeft + gap + navKeys.forEach { kd -> + val cw = kd.wide * keyW(12) + addKey(kd, navX, rowY(6), cw, keyH, gap) + navX += cw + gap + } + + // Arrow cluster on the right of row 6 + val arrowW = keyW(12) * 0.9f + val arGap = gap * 0.5f + val ax = kbRight - arrowW * 3f - arGap * 2f - gap + addKey(KeyDef("\u25B2", KeyEvent.KEYCODE_DPAD_UP, 0.85f, small = true), ax + arrowW + arGap, rowY(6), arrowW, keyH, gap) + addKey(KeyDef("\u25C0", KeyEvent.KEYCODE_DPAD_LEFT, 0.85f, small = true), ax, rowY(7), arrowW, keyH, gap) + addKey(KeyDef("\u25BC", KeyEvent.KEYCODE_DPAD_DOWN, 0.85f, small = true), ax + arrowW + arGap, rowY(7), arrowW, keyH, gap) + addKey(KeyDef("\u25B6", KeyEvent.KEYCODE_DPAD_RIGHT, 0.85f, small = true), ax + (arrowW + arGap) * 2f, rowY(7), arrowW, keyH, gap) + + setupHandle(kbLeft, kbTop, kbRight, kbH) + } + + private var currentLabelSize = 12f + private var currentSmallLabelSize = 10f + + private fun layoutFullPortrait(w: Float, h: Float, s: Float, gap: Float, bottomGap: Float, topGap: Float, sidePad: Float) { + val docked = if (dockMode == DockMode.BOTTOM) h - bottomGap else topGap + val totalRows = 8 + val availH = if (dockMode == DockMode.BOTTOM) docked - topGap else h - docked - bottomGap + val keyH = ((availH - gap * (totalRows + 1)) / totalRows).coerceIn(16f, 32f) + val rowH = keyH + gap + val kbH = totalRows * rowH + gap + val kbTop = if (dockMode == DockMode.BOTTOM) docked - kbH else docked + val kbW = (w - sidePad * 2f).coerceAtMost(w * 0.96f) + val kbLeft = (w - kbW) / 2f + val fontScale = (keyH / 26f).coerceIn(0.5f, 1.1f) + currentLabelSize = (11f * fontScale).coerceAtLeast(6f) + currentSmallLabelSize = (9f * fontScale).coerceAtLeast(5f) + kbRect.set(kbLeft, kbTop, kbLeft + kbW, kbTop + kbH) + + val rowY = { row: Int -> kbTop + gap + row * rowH + 2f } + val keyW = { cols: Int -> (kbW - gap * (cols + 1)) / cols } + + fun addRow(row: Int, labels: List, codes: List, wide: List = emptyList(), small: List = emptyList()) { + val cols = labels.size + val totalW = keyW(cols) * cols + gap * (cols - 1) + val startX = kbLeft + (kbW - totalW) / 2f + var x = startX + val y = rowY(row) + labels.forEachIndexed { i, label -> + val wf = wide.getOrElse(i) { 1f } + val cw = keyW(cols) * wf + gap * (wf - 1f) * 0.5f + addKey(KeyDef(label, codes.getOrElse(i) { 0 }, wf, small.getOrElse(i) { false }), x, y, cw, keyH, gap) + x += cw + gap + } + } + + addRow(0, listOf("Esc", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10"), + listOf(KeyEvent.KEYCODE_ESCAPE, KeyEvent.KEYCODE_F1, KeyEvent.KEYCODE_F2, KeyEvent.KEYCODE_F3, KeyEvent.KEYCODE_F4, + KeyEvent.KEYCODE_F5, KeyEvent.KEYCODE_F6, KeyEvent.KEYCODE_F7, KeyEvent.KEYCODE_F8, KeyEvent.KEYCODE_F9, KeyEvent.KEYCODE_F10), + small = listOf(true, true, true, true, true, true, true, true, true, true, true)) + + addRow(1, listOf("`~", "1!", "2@", "3#", "4$", "5%", "6^", "7&", "8*", "9(", "0)", "-_", "=+", "Bksp"), + listOf(KeyEvent.KEYCODE_GRAVE, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_2, KeyEvent.KEYCODE_3, KeyEvent.KEYCODE_4, + KeyEvent.KEYCODE_5, KeyEvent.KEYCODE_6, KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_0, + KeyEvent.KEYCODE_MINUS, KeyEvent.KEYCODE_EQUALS, KeyEvent.KEYCODE_DEL), + wide = listOf(0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.6f)) + + addRow(2, listOf("Tab", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[{", "]}", "\\|"), + listOf(KeyEvent.KEYCODE_TAB, KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_R, + KeyEvent.KEYCODE_T, KeyEvent.KEYCODE_Y, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_I, KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_P, + KeyEvent.KEYCODE_LEFT_BRACKET, KeyEvent.KEYCODE_RIGHT_BRACKET, KeyEvent.KEYCODE_BACKSLASH), + wide = listOf(1.3f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.2f)) + + addRow(3, listOf("Caps", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";:", "'\"", "Enter"), + listOf(KeyEvent.KEYCODE_CAPS_LOCK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_F, + KeyEvent.KEYCODE_G, KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L, + KeyEvent.KEYCODE_SEMICOLON, KeyEvent.KEYCODE_APOSTROPHE, KeyEvent.KEYCODE_ENTER), + wide = listOf(1.5f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.7f)) + + addRow(4, listOf("Shift", "Z", "X", "C", "V", "B", "N", "M", ",<", ".>", "/?", "Shift"), + listOf(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_Z, KeyEvent.KEYCODE_X, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_V, + KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_N, KeyEvent.KEYCODE_M, KeyEvent.KEYCODE_COMMA, KeyEvent.KEYCODE_PERIOD, + KeyEvent.KEYCODE_SLASH, KeyEvent.KEYCODE_SHIFT_RIGHT), + wide = listOf(1.8f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 1.8f)) + + // Row 5: modifiers + val modKeys = listOf( + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_LEFT, 1.2f, small = true), + KeyDef("Meta", KeyEvent.KEYCODE_META_LEFT, 1.2f, small = true), + KeyDef("Alt", KeyEvent.KEYCODE_ALT_LEFT, 1f, small = true), + KeyDef("Space", KeyEvent.KEYCODE_SPACE, 3f), + KeyDef("AltGr", KeyEvent.KEYCODE_ALT_RIGHT, 1f, small = true), + KeyDef("Fn", -1, 1f, small = true), + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_RIGHT, 1.2f, small = true), + ) + val modTotalW = modKeys.sumOf { (it.wide * keyW(13)).toDouble() } + gap * (modKeys.size - 1) + var modX = kbLeft + (kbW - modTotalW.toFloat()) / 2f + modKeys.forEach { kd -> + val cw = kd.wide * keyW(13) + addKey(kd, modX, rowY(5), cw, keyH, gap) + modX += cw + gap + } + + // Row 6: nav + arrows + val navKeys = listOf(KeyDef("Ins", KeyEvent.KEYCODE_INSERT, 0.9f, small = true), + KeyDef("Del", KeyEvent.KEYCODE_FORWARD_DEL, 0.9f, small = true), + KeyDef("Home", KeyEvent.KEYCODE_MOVE_HOME, 0.9f, small = true), + KeyDef("End", KeyEvent.KEYCODE_MOVE_END, 0.9f, small = true), + KeyDef("PgUp", KeyEvent.KEYCODE_PAGE_UP, 0.9f, small = true), + KeyDef("PgDn", KeyEvent.KEYCODE_PAGE_DOWN, 0.9f, small = true)) + var navX = kbLeft + gap + navKeys.forEach { kd -> + val cw = kd.wide * keyW(12) + addKey(kd, navX, rowY(6), cw, keyH, gap) + navX += cw + gap + } + + val arrowW = keyW(12) * 0.9f + val arGap = gap * 0.5f + val ax = kbLeft + kbW - arrowW * 3f - arGap * 2f - gap + addKey(KeyDef("\u25B2", KeyEvent.KEYCODE_DPAD_UP, 0.85f, small = true), ax + arrowW + arGap, rowY(6), arrowW, keyH, gap) + addKey(KeyDef("\u25C0", KeyEvent.KEYCODE_DPAD_LEFT, 0.85f, small = true), ax, rowY(7), arrowW, keyH, gap) + addKey(KeyDef("\u25BC", KeyEvent.KEYCODE_DPAD_DOWN, 0.85f, small = true), ax + arrowW + arGap, rowY(7), arrowW, keyH, gap) + addKey(KeyDef("\u25B6", KeyEvent.KEYCODE_DPAD_RIGHT, 0.85f, small = true), ax + (arrowW + arGap) * 2f, rowY(7), arrowW, keyH, gap) + + setupHandle(kbLeft, kbTop, kbLeft + kbW, kbH) + } + + private fun layoutSplitLandscape(w: Float, h: Float, s: Float, gap: Float, bottomGap: Float, topGap: Float, sidePad: Float) { + val keyH = (32f * s).coerceIn(24f, 40f) + val rowH = keyH + gap + val totalRows = 5 + val panelH = totalRows * rowH + gap * 4f + bottomGap + val panelTop = if (dockMode == DockMode.BOTTOM) h - bottomGap - panelH else topGap + + val leftW = (w * 0.40f).coerceIn(w * 0.30f, w * 0.48f) + val rightW = (w * 0.40f).coerceIn(w * 0.30f, w * 0.48f) + val centerGap = w - leftW - rightW - sidePad * 2f + val leftX = sidePad + val rightX = w - sidePad - rightW + + leftPanelRect.set(leftX, panelTop, leftX + leftW, panelTop + panelH) + rightPanelRect.set(rightX, panelTop, rightX + rightW, panelTop + panelH) + + val keyW = { panelW: Float, cols: Int -> (panelW - gap * (cols + 1)) / cols } + val rowY = { row: Int -> panelTop + gap + row * rowH + 2f } + + // Left half + fun addLeftRow(row: Int, labels: List, codes: List, wide: List = emptyList()) { + val cols = labels.size + val pw = leftW + val kw = keyW(pw, cols) + val totalW = kw * cols + gap * (cols - 1) + var x = leftX + (pw - totalW) / 2f + val y = rowY(row) + labels.forEachIndexed { i, label -> + val wf = wide.getOrElse(i) { 1f } + val cw = kw * wf + gap * (wf - 1f) * 0.5f + addKey(KeyDef(label, codes.getOrElse(i) { 0 }, wf), x, y, cw, keyH, gap) + x += cw + gap + } + } + + val leftPw = leftW + val leftKw = keyW(leftPw, 6) + addLeftRow(0, listOf("Esc", "F1", "F2", "F3", "F4", "F5"), + listOf(KeyEvent.KEYCODE_ESCAPE, KeyEvent.KEYCODE_F1, KeyEvent.KEYCODE_F2, KeyEvent.KEYCODE_F3, KeyEvent.KEYCODE_F4, KeyEvent.KEYCODE_F5)) + addLeftRow(1, listOf("`~", "1!", "2@", "3#", "4$", "5%", "6^"), + listOf(KeyEvent.KEYCODE_GRAVE, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_2, KeyEvent.KEYCODE_3, KeyEvent.KEYCODE_4, KeyEvent.KEYCODE_5, KeyEvent.KEYCODE_6)) + addLeftRow(2, listOf("Tab", "Q", "W", "E", "R", "T"), + listOf(KeyEvent.KEYCODE_TAB, KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_T), + wide = listOf(1.3f, 1f, 1f, 1f, 1f, 1f)) + addLeftRow(3, listOf("Caps", "A", "S", "D", "F", "G"), + listOf(KeyEvent.KEYCODE_CAPS_LOCK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_F, KeyEvent.KEYCODE_G), + wide = listOf(1.3f, 1f, 1f, 1f, 1f, 1f)) + addLeftRow(4, listOf("Shift", "Z", "X", "C", "V", "B"), + listOf(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_Z, KeyEvent.KEYCODE_X, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_V, KeyEvent.KEYCODE_B), + wide = listOf(1.5f, 1f, 1f, 1f, 1f, 1f)) + + // Left modifiers + val leftMods = listOf(KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_LEFT, 1.2f, small = true), + KeyDef("Meta", KeyEvent.KEYCODE_META_LEFT, 1.2f, small = true), + KeyDef("Alt", KeyEvent.KEYCODE_ALT_LEFT, 1f, small = true), + KeyDef("Space", KeyEvent.KEYCODE_SPACE, 2f)) + var lmx = leftX + gap + leftMods.forEach { kd -> + val cw = kd.wide * leftKw + addKey(kd, lmx, rowY(5), cw, keyH, gap) + lmx += cw + gap + } + + // Right half + fun addRightRow(row: Int, labels: List, codes: List, wide: List = emptyList()) { + val cols = labels.size + val pw = rightW + val kw = keyW(pw, cols) + val totalW = kw * cols + gap * (cols - 1) + var x = rightX + (pw - totalW) / 2f + val y = rowY(row) + labels.forEachIndexed { i, label -> + val wf = wide.getOrElse(i) { 1f } + val cw = kw * wf + gap * (wf - 1f) * 0.5f + addKey(KeyDef(label, codes.getOrElse(i) { 0 }, wf), x, y, cw, keyH, gap) + x += cw + gap + } + } + + val rightPw = rightW + val rightKw = keyW(rightPw, 6) + addRightRow(0, listOf("F6", "F7", "F8", "F9", "F10", "Ins", "Home", "PgUp"), + listOf(KeyEvent.KEYCODE_F6, KeyEvent.KEYCODE_F7, KeyEvent.KEYCODE_F8, KeyEvent.KEYCODE_F9, KeyEvent.KEYCODE_F10, + KeyEvent.KEYCODE_INSERT, KeyEvent.KEYCODE_MOVE_HOME, KeyEvent.KEYCODE_PAGE_UP), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f)) + addRightRow(1, listOf("7&", "8*", "9(", "0)", "-_", "=+", "Bksp", "Del"), + listOf(KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_0, KeyEvent.KEYCODE_MINUS, + KeyEvent.KEYCODE_EQUALS, KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_FORWARD_DEL), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1f, 1.3f, 1f)) + addRightRow(2, listOf("Y", "U", "I", "O", "P", "[{", "]}", "\\|"), + listOf(KeyEvent.KEYCODE_Y, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_I, KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_P, + KeyEvent.KEYCODE_LEFT_BRACKET, KeyEvent.KEYCODE_RIGHT_BRACKET, KeyEvent.KEYCODE_BACKSLASH)) + addRightRow(3, listOf("H", "J", "K", "L", ";:", "'\"", "Enter", "End", "PgDn"), + listOf(KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_SEMICOLON, + KeyEvent.KEYCODE_APOSTROPHE, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_MOVE_END, KeyEvent.KEYCODE_PAGE_DOWN), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1f, 1.3f, 1f, 1f)) + addRightRow(4, listOf("N", "M", ",<", ".>", "/?", "Shift"), + listOf(KeyEvent.KEYCODE_N, KeyEvent.KEYCODE_M, KeyEvent.KEYCODE_COMMA, KeyEvent.KEYCODE_PERIOD, KeyEvent.KEYCODE_SLASH, KeyEvent.KEYCODE_SHIFT_RIGHT), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1.5f)) + + val rightMods = listOf(KeyDef("Space", KeyEvent.KEYCODE_SPACE, 2f), + KeyDef("AltGr", KeyEvent.KEYCODE_ALT_RIGHT, 1f, small = true), + KeyDef("Fn", -1, 1f, small = true), + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_RIGHT, 1.2f, small = true)) + var rmx = rightX + gap + rightMods.forEach { kd -> + val cw = kd.wide * rightKw + addKey(kd, rmx, rowY(5), cw, keyH, gap) + rmx += cw + gap + } + + // Arrows on right bottom + val arrowRowY = rowY(5) + rowH + val arrowW = rightKw * 0.85f + val ax = rightX + rightW * 0.15f + addKey(KeyDef("\u25B2", KeyEvent.KEYCODE_DPAD_UP, 0.85f, small = true), ax + arrowW + gap, arrowRowY, arrowW, keyH, gap) + addKey(KeyDef("\u25C0", KeyEvent.KEYCODE_DPAD_LEFT, 0.85f, small = true), ax, arrowRowY + rowH, arrowW, keyH, gap) + addKey(KeyDef("\u25BC", KeyEvent.KEYCODE_DPAD_DOWN, 0.85f, small = true), ax + arrowW + gap, arrowRowY + rowH, arrowW, keyH, gap) + addKey(KeyDef("\u25B6", KeyEvent.KEYCODE_DPAD_RIGHT, 0.85f, small = true), ax + (arrowW + gap) * 2f, arrowRowY + rowH, arrowW, keyH, gap) + + val ctrX = leftX + leftW + (rightX - leftX - leftW) / 2f + dockHandleRect.set(ctrX - dp(22), panelTop + dp(4), ctrX + dp(22), panelTop + dp(32)) + } + + private fun layoutSplitPortrait(w: Float, h: Float, s: Float, gap: Float, bottomGap: Float, topGap: Float, sidePad: Float) { + val keyH = (26f * s).coerceIn(20f, 34f) + val rowH = keyH + gap + val totalRows = 5 + val panelH = totalRows * rowH + gap * 4f + bottomGap + val panelTop = if (dockMode == DockMode.BOTTOM) h - bottomGap - panelH else topGap + + val leftW = (w * 0.44f).coerceAtMost(w * 0.48f) + val rightW = (w * 0.44f).coerceAtMost(w * 0.48f) + val leftX = sidePad + val rightX = w - sidePad - rightW + + leftPanelRect.set(leftX, panelTop, leftX + leftW, panelTop + panelH) + rightPanelRect.set(rightX, panelTop, rightX + rightW, panelTop + panelH) + + val rowY = { row: Int -> panelTop + gap + row * rowH + 2f } + val kw = { pw: Float, cols: Int -> (pw - gap * (cols + 1)) / cols } + + fun addTo(panelX: Float, panelW: Float, row: Int, labels: List, codes: List, wide: List = emptyList()) { + val cols = labels.size + val kk = kw(panelW, cols) + val totalW = kk * cols + gap * (cols - 1) + var x = panelX + (panelW - totalW) / 2f + val y = rowY(row) + labels.forEachIndexed { i, label -> + val wf = wide.getOrElse(i) { 1f } + val cw = kk * wf + gap * (wf - 1f) * 0.5f + addKey(KeyDef(label, codes.getOrElse(i) { 0 }, wf), x, y, cw, keyH, gap) + x += cw + gap + } + } + + addTo(leftX, leftW, 0, listOf("Esc", "F1", "F2", "F3", "F4", "F5"), + listOf(KeyEvent.KEYCODE_ESCAPE, KeyEvent.KEYCODE_F1, KeyEvent.KEYCODE_F2, KeyEvent.KEYCODE_F3, KeyEvent.KEYCODE_F4, KeyEvent.KEYCODE_F5)) + addTo(leftX, leftW, 1, listOf("`~", "1!", "2@", "3#", "4$", "5%", "6^"), + listOf(KeyEvent.KEYCODE_GRAVE, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_2, KeyEvent.KEYCODE_3, KeyEvent.KEYCODE_4, KeyEvent.KEYCODE_5, KeyEvent.KEYCODE_6)) + addTo(leftX, leftW, 2, listOf("Tab", "Q", "W", "E", "R", "T"), + listOf(KeyEvent.KEYCODE_TAB, KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_T), + wide = listOf(1.2f, 1f, 1f, 1f, 1f, 1f)) + addTo(leftX, leftW, 3, listOf("Caps", "A", "S", "D", "F", "G"), + listOf(KeyEvent.KEYCODE_CAPS_LOCK, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_F, KeyEvent.KEYCODE_G), + wide = listOf(1.2f, 1f, 1f, 1f, 1f, 1f)) + addTo(leftX, leftW, 4, listOf("Shift", "Z", "X", "C", "V", "B"), + listOf(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_Z, KeyEvent.KEYCODE_X, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_V, KeyEvent.KEYCODE_B), + wide = listOf(1.3f, 1f, 1f, 1f, 1f, 1f)) + + val leftMods = listOf(KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_LEFT, 1.2f, small = true), + KeyDef("Meta", KeyEvent.KEYCODE_META_LEFT, 1.2f, small = true), + KeyDef("Alt", KeyEvent.KEYCODE_ALT_LEFT, 1f, small = true), + KeyDef("Space", KeyEvent.KEYCODE_SPACE, 1.8f)) + var lmx = leftX + gap + val lk = kw(leftW, 6) + leftMods.forEach { kd -> + val cw = kd.wide * lk + addKey(kd, lmx, rowY(5), cw, keyH, gap) + lmx += cw + gap + } + + addTo(rightX, rightW, 0, listOf("F6", "F7", "F8", "F9", "F10", "Ins", "Home", "PgUp"), + listOf(KeyEvent.KEYCODE_F6, KeyEvent.KEYCODE_F7, KeyEvent.KEYCODE_F8, KeyEvent.KEYCODE_F9, KeyEvent.KEYCODE_F10, + KeyEvent.KEYCODE_INSERT, KeyEvent.KEYCODE_MOVE_HOME, KeyEvent.KEYCODE_PAGE_UP)) + addTo(rightX, rightW, 1, listOf("7&", "8*", "9(", "0)", "-_", "=+", "Bksp", "Del"), + listOf(KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_0, KeyEvent.KEYCODE_MINUS, + KeyEvent.KEYCODE_EQUALS, KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_FORWARD_DEL), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1f, 1.2f, 1f)) + addTo(rightX, rightW, 2, listOf("Y", "U", "I", "O", "P", "[{", "]}", "\\|"), + listOf(KeyEvent.KEYCODE_Y, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_I, KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_P, + KeyEvent.KEYCODE_LEFT_BRACKET, KeyEvent.KEYCODE_RIGHT_BRACKET, KeyEvent.KEYCODE_BACKSLASH)) + addTo(rightX, rightW, 3, listOf("H", "J", "K", "L", ";:", "'\"", "Enter", "End", "PgDn"), + listOf(KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_SEMICOLON, + KeyEvent.KEYCODE_APOSTROPHE, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_MOVE_END, KeyEvent.KEYCODE_PAGE_DOWN), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1f, 1.2f, 1f, 1f)) + addTo(rightX, rightW, 4, listOf("N", "M", ",<", ".>", "/?", "Shift"), + listOf(KeyEvent.KEYCODE_N, KeyEvent.KEYCODE_M, KeyEvent.KEYCODE_COMMA, KeyEvent.KEYCODE_PERIOD, KeyEvent.KEYCODE_SLASH, KeyEvent.KEYCODE_SHIFT_RIGHT), + wide = listOf(1f, 1f, 1f, 1f, 1f, 1.3f)) + + val rightMods = listOf(KeyDef("Space", KeyEvent.KEYCODE_SPACE, 1.4f), + KeyDef("AltGr", KeyEvent.KEYCODE_ALT_RIGHT, 1f, small = true), + KeyDef("Fn", -1, 1f, small = true), + KeyDef("Ctrl", KeyEvent.KEYCODE_CTRL_RIGHT, 1.2f, small = true)) + var rmx = rightX + gap + val rk = kw(rightW, 6) + rightMods.forEach { kd -> + val cw = kd.wide * rk + addKey(kd, rmx, rowY(5), cw, keyH, gap) + rmx += cw + gap + } + + val arrowRowY = rowY(5) + rowH + val arrowW = rk * 0.85f + val ax = rightX + rightW * 0.12f + addKey(KeyDef("\u25B2", KeyEvent.KEYCODE_DPAD_UP, 0.85f, small = true), ax + arrowW + gap, arrowRowY, arrowW, keyH, gap) + addKey(KeyDef("\u25C0", KeyEvent.KEYCODE_DPAD_LEFT, 0.85f, small = true), ax, arrowRowY + rowH, arrowW, keyH, gap) + addKey(KeyDef("\u25BC", KeyEvent.KEYCODE_DPAD_DOWN, 0.85f, small = true), ax + arrowW + gap, arrowRowY + rowH, arrowW, keyH, gap) + addKey(KeyDef("\u25B6", KeyEvent.KEYCODE_DPAD_RIGHT, 0.85f, small = true), ax + (arrowW + gap) * 2f, arrowRowY + rowH, arrowW, keyH, gap) + + val ctrX = leftX + leftW + (rightX - leftX - leftW) / 2f + dockHandleRect.set(ctrX - dp(22), panelTop + dp(4), ctrX + dp(22), panelTop + dp(32)) + } + + private fun addKey(def: KeyDef, x: Float, y: Float, w: Float, h: Float, gap: Float) { + val r = RectF(x, y, x + w, y + h) + if (w > 0 && h > 0) { + allKeys.add(KeyRect(def, r)) + } + } + + private fun rowEnd(rowY: Float, usedW: Float, kbLeft: Float, kbW: Float, gap: Float): Float { + return kbLeft + kbW - gap - usedW + } + + private fun setupHandle(kbLeft: Float, kbTop: Float, kbRight: Float, kbH: Float) { + val handleW = dp(48) + val handleH = dp(6) + val handleY = if (dockMode == DockMode.BOTTOM) kbTop - handleH - dp(2) else kbTop + kbH + dp(2) + handleRect.set(kbRight - kbRight / 2f - handleW / 2f, handleY, kbRight - kbRight / 2f + handleW / 2f, handleY + handleH) + dockHandleRect.set(kbRight - kbRight / 2f - dp(30), handleY - dp(6), kbRight - kbRight / 2f + dp(30), handleY + handleH + dp(6)) + } + + override fun onDraw(canvas: Canvas) { + val a = kbOpacity + if (!landscapeKeys && dockMode != DockMode.SPLIT && !kbRect.isEmpty()) { + drawPanel(canvas, kbRect, a) + } + if (dockMode == DockMode.SPLIT) { + if (!leftPanelRect.isEmpty()) drawPanel(canvas, leftPanelRect, a) + if (!rightPanelRect.isEmpty()) drawPanel(canvas, rightPanelRect, a) + } + + allKeys.forEach { kr -> + val pressed = kr.def.code in activeKeys + drawKey(canvas, kr, pressed, a) + } + + drawDockHandle(canvas, a) + } + + private fun drawPanel(canvas: Canvas, rect: RectF, a: Float) { + val r = dp(12) + shadowPaint.alpha = (0.25f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(rect.left + 2f, rect.top + 4f, rect.right + 2f, rect.bottom + 4f, r.toFloat(), r.toFloat(), shadowPaint) + glassFill.color = Color.argb((0.10f * 255 * a).toInt().coerceIn(0, 255), 8, 8, 10) + canvas.drawRoundRect(rect, r.toFloat(), r.toFloat(), glassFill) + glassBorder.color = Color.argb((0.25f * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + canvas.drawRoundRect(rect, r.toFloat(), r.toFloat(), glassBorder) + } + + private fun drawKey(canvas: Canvas, kr: KeyRect, pressed: Boolean, a: Float) { + val r = dp(if (kr.def.small) 6 else 8).toFloat() + val krR = kr.rect + val fillA = if (pressed) 0.25f else 0.08f + val borderA = if (pressed) 0.45f else 0.22f + + shadowPaint.alpha = (0.20f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(krR.left + 1f, krR.top + 2f, krR.right + 1f, krR.bottom + 2f, r, r, shadowPaint) + + keyFill.color = Color.argb((fillA * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + canvas.drawRoundRect(krR, r, r, keyFill) + + keyBorder.color = Color.argb((borderA * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + canvas.drawRoundRect(krR, r, r, keyBorder) + + if (!pressed) { + keyFill.color = Color.argb((0.10f * 255 * a).toInt().coerceIn(0, 255), 255, 255, 255) + val hl = RectF(krR.left, krR.top, krR.right, krR.top + krR.height() * 0.4f) + canvas.drawRoundRect(hl, r, r, keyFill) + } + + val label = kr.def.label + if (label.isNotEmpty()) { + val p = if (kr.def.small) keySmallPaint else keyLabelPaint + p.textSize = if (kr.def.small) currentSmallLabelSize else currentLabelSize + p.color = if (pressed) Color.rgb(238, 207, 158) else Color.argb((0.88f * 255 * a).toInt().coerceIn(0, 255), 232, 229, 220) + val textY = krR.centerY() + p.textSize * 0.35f + canvas.drawText(label, krR.centerX(), textY, p) + } + } + + private fun drawDockHandle(canvas: Canvas, a: Float) { + if (dockMode == DockMode.SPLIT) { + if (dockHandleRect.width() > 0) { + val r = dp(16).toFloat() + shadowPaint.alpha = (0.20f * 255 * a).toInt().coerceIn(0, 255) + canvas.drawRoundRect(dockHandleRect, r, r, shadowPaint) + glassFill.color = Color.argb((0.12f * 255 * a).toInt().coerceIn(0, 255), 8, 8, 10) + canvas.drawRoundRect(dockHandleRect, r, r, glassFill) + glassBorder.color = Color.argb((0.20f * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + canvas.drawRoundRect(dockHandleRect, r, r, glassBorder) + val chevPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE; strokeWidth = 2f; strokeCap = Paint.Cap.ROUND + color = Color.argb((0.60f * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + } + val cy = dockHandleRect.centerY() + val cx = dockHandleRect.centerX() + canvas.drawLine(cx - 6f, cy - 3f, cx, cy + 3f, chevPaint) + canvas.drawLine(cx + 6f, cy - 3f, cx, cy + 3f, chevPaint) + } + return + } + if (handleRect.width() > 0) { + glassFill.color = Color.argb((0.16f * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + canvas.drawRoundRect(handleRect, handleRect.height() / 2f, handleRect.height() / 2f, glassFill) + } + if (dockHandleRect.width() > 0 && !landscapeKeys) { + glassFill.color = Color.argb((0.10f * 255 * a).toInt().coerceIn(0, 255), 8, 8, 10) + val r = dockHandleRect.height() * 0.5f + canvas.drawRoundRect(dockHandleRect, r, r, glassFill) + glassBorder.color = Color.argb((0.18f * 255 * a).toInt().coerceIn(0, 255), 200, 180, 140) + canvas.drawRoundRect(dockHandleRect, r, r, glassBorder) + } + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + val x = event.x + val y = event.y + when (event.actionMasked) { + MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN -> { + if (dockHandleRect.contains(x, y)) { + toggleDock() + return true + } + val hit = hitTest(x, y) + if (hit != null) { + activeKeys.add(hit.def.code) + onKeyDown?.invoke(hit.def.code) + invalidate() + startRepeat(hit.def.code) + return true + } + } + MotionEvent.ACTION_MOVE -> { + val pointIdx = event.actionIndex + val px = event.getX(pointIdx) + val py = event.getY(pointIdx) + val wasActive = activeKeys.toSet() + val newlyActive = mutableSetOf() + for (i in 0 until event.pointerCount) { + val hit = hitTest(event.getX(i), event.getY(i)) + if (hit != null) newlyActive.add(hit.def.code) + } + val released = wasActive - newlyActive + val pressed = newlyActive - wasActive + released.forEach { + activeKeys.remove(it) + onKeyUp?.invoke(it) + stopRepeat(it) + } + pressed.forEach { + activeKeys.add(it) + onKeyDown?.invoke(it) + startRepeat(it) + } + if (released.isNotEmpty() || pressed.isNotEmpty()) invalidate() + return true + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_POINTER_UP, MotionEvent.ACTION_CANCEL -> { + val upIdx = event.actionIndex + val wasActive = activeKeys.toSet() + val newlyActive = mutableSetOf() + for (i in 0 until event.pointerCount) { + if (event.actionMasked == MotionEvent.ACTION_POINTER_UP && i == upIdx) continue + val hit = hitTest(event.getX(i), event.getY(i)) + if (hit != null) newlyActive.add(hit.def.code) + } + if (event.actionMasked == MotionEvent.ACTION_UP || event.actionMasked == MotionEvent.ACTION_CANCEL) { + newlyActive.clear() + } + val released = wasActive - newlyActive + released.forEach { + activeKeys.remove(it) + onKeyUp?.invoke(it) + stopRepeat(it) + } + if (released.isNotEmpty()) invalidate() + return true + } + } + return false + } + + private fun hitTest(x: Float, y: Float): KeyRect? { + return allKeys.lastOrNull { it.rect.contains(x, y) } + } + + private fun toggleDock() { + dockMode = when (dockMode) { + DockMode.BOTTOM -> DockMode.TOP + DockMode.TOP -> DockMode.BOTTOM + DockMode.SPLIT -> DockMode.BOTTOM + } + onDockModeChanged?.invoke(dockMode) + requestLayout() + invalidate() + } + + private fun startRepeat(code: Int) { + stopRepeat(-1) + repeatCode = code + repeatStartMs = SystemClock.uptimeMillis() + val repeatableCodes = setOf(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN, + KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_FORWARD_DEL) + if (code !in repeatableCodes) return + repeatHandler.postDelayed(object : Runnable { + override fun run() { + if (repeatCode != code) return + val elapsed = SystemClock.uptimeMillis() - repeatStartMs + val delay = if (elapsed < 500) 120L else 50L + if (code in activeKeys) { + onKeyDown?.invoke(code) + } + repeatHandler.postDelayed(this, delay) + } + }, 400) + } + + private fun stopRepeat(code: Int) { + if (code == -1 || code == repeatCode) { + repeatHandler.removeCallbacksAndMessages(null) + repeatCode = -1 + } + } + + private fun dp(value: Int): Float = (value * resources.displayMetrics.density) +} diff --git a/app/src/main/java/com/runestone/app/navigation/OverlayNavigationController.kt b/app/src/main/java/com/runestone/app/navigation/OverlayNavigationController.kt new file mode 100644 index 0000000..57d42ad --- /dev/null +++ b/app/src/main/java/com/runestone/app/navigation/OverlayNavigationController.kt @@ -0,0 +1,1111 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.navigation + +import android.app.Activity +import android.app.AlertDialog +import android.content.Intent +import android.graphics.Color +import android.graphics.Typeface +import android.util.Log +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.LinearLayout +import android.widget.ProgressBar +import android.widget.TextView +import android.widget.Toast +import com.runestone.app.data.EngineType +import com.runestone.app.ui.AvailableGamesScreen +import com.runestone.app.ui.GameDetailOverlay +import com.runestone.app.ui.GameCardInfo +import com.runestone.app.ui.HomeCardLayout +import com.runestone.app.ui.HomeScreen +import com.runestone.app.ui.ImportProgressScreen +import com.runestone.app.ui.ManageFilesScreen +import com.runestone.app.ui.PerGameSettingsScreen +import com.runestone.app.ui.ProviderSettingsScreen +import com.runestone.app.ui.SettingsScreen +import com.runestone.app.ui.SettingsStore +import com.runestone.app.ui.Theme +import com.runestone.app.ui.SourcesScreen +import com.runestone.app.ui.SortMode +import com.runestone.app.data.db.GameSizeCacheEntity +import com.runestone.app.data.db.RunestoneDatabase +import com.runestone.app.session.GameSessionManager +import com.runestone.app.services.GameMetadataService +import com.runestone.app.provider.AvailableGame +import com.runestone.app.provider.DownloadManager +import com.runestone.app.workspace.WorkspaceManager +import com.runestone.app.workspace.WorkspaceStorage +import com.runestone.app.store.StoreCoordinator +import com.runestone.app.importer.ImportManager +import com.runestone.app.util.AppScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + +class OverlayNavigationController( + private val activity: Activity, + private val callbacks: Callbacks, + private val settingsStore: SettingsStore, + private val workspaceManager: WorkspaceManager, + private val metadataService: GameMetadataService, + private val downloadManager: DownloadManager, + private val sourcesManager: com.runestone.app.provider.SourcesManager, + private val saveManager: com.runestone.app.workspace.SaveManager, + private val storageReporter: com.runestone.app.workspace.WorkspaceStorageReporter, + private val installStateStore: com.runestone.app.workspace.InstallStateStore, + private val storeCoordinator: StoreCoordinator, + private val importManager: ImportManager, + private val sessionManager: GameSessionManager, +) { + private val gameSizeCacheDao = RunestoneDatabase.getInstance(activity).gameSizeCacheDao() + private val gameSizeCacheMem = mutableMapOf() + private val gameSizeInFlight = mutableSetOf() + interface Callbacks { + fun playGame(storageName: String) + fun performDeleteGame(storageName: String, gameTitle: String, keepSaves: Boolean) + fun refreshGames() + fun applyImmersiveMode(force: Boolean = false) + fun onSettingsChanged(newSettings: com.runestone.app.data.RunnerSettings) + } + + lateinit var rootContainer: FrameLayout + var activeOverlay: View? = null + var detailOverlay: GameDetailOverlay? = null + var homeContentView: View? = null + var persistentDock: View? = null + var manageFilesVisible = false + var storageCache: Map = emptyMap() + var games: List = emptyList() + var gameMetadataCache: MutableMap = mutableMapOf() + var activeEngineFilter: EngineType? = null + var currentSort: SortMode = SortMode.DATE_ADDED + var searchQuery: String = "" + var homeCardLayout: HomeCardLayout = HomeCardLayout.GRID_2 + var splashView: FrameLayout? = null + var controllerNavigationEnabled = false + var settings: com.runestone.app.data.RunnerSettings = com.runestone.app.data.RunnerSettings() + + var metadataWarmupInFlight = mutableSetOf() + + var rtpOverlayStatusText: TextView? = null + var rtpOverlayProgressBar: ProgressBar? = null + var activeRtpDialog: AlertDialog? = null + + companion object { + private const val TAG = "Runestone" + } + + fun dp(v: Int): Int = (v * activity.resources.displayMetrics.density).toInt() + + fun showOverlay(panel: View, dismissOnBgClick: Boolean = true) { + activeOverlay?.let { rootContainer.removeView(it); activeOverlay = null } + if (android.os.Build.VERSION.SDK_INT >= 31) { + homeContentView?.setRenderEffect(null) + } + + val wrapper = FrameLayout(activity).apply { + setBackgroundColor(Color.argb(218, 0, 0, 0)) + alpha = 0f + translationY = activity.resources.displayMetrics.heightPixels * 0.08f + animate().alpha(1f).translationY(0f).setDuration(250).start() + + val lp = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + lp.setMargins(dp(8), dp(20), dp(8), dp(74)) + addView(panel, lp) + + panel.isClickable = true + + if (dismissOnBgClick) { + setOnClickListener { dismissOverlay() } + } + } + rootContainer.addView(wrapper, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT) + persistentDock?.bringToFront() + activeOverlay = wrapper + if (controllerNavigationEnabled) { + rootContainer.post { enableControllerNavigation(wrapper) } + } + } + + fun dismissOverlay(onDismissed: () -> Unit = {}) { + activeOverlay?.let { overlay -> + overlay.animate().alpha(0f).translationY(activity.resources.displayMetrics.heightPixels * 0.08f).setDuration(200).withEndAction { + rootContainer.removeView(overlay) + activeOverlay = null + onDismissed() + }.start() + } + } + + fun showSplash() { + val splash = FrameLayout(activity).apply { + setBackgroundColor(Color.rgb(3, 3, 4)) + layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + + val titleText = TextView(activity).apply { + text = "RUNESTONE" + setTextColor(Theme.active.accent) + textSize = 32f + typeface = Typeface.create("serif", Typeface.BOLD) + letterSpacing = 0.3f + gravity = Gravity.CENTER + } + addView(titleText, FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER)) + + val sub = TextView(activity).apply { + text = "Multi-Engine Game Launcher" + setTextColor(Color.argb(140, 180, 160, 130)) + textSize = 13f + letterSpacing = 0.2f + gravity = Gravity.CENTER + } + val subLp = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER) + subLp.topMargin = dp(60) + addView(sub, subLp) + + alpha = 0f + } + rootContainer.addView(splash, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + splashView = splash + + splash.animate().alpha(1f).setDuration(300).start() + } + + fun dismissSplash() { + val splash = splashView ?: return + splashView = null + splash.post { + splash.animate().alpha(0f).setDuration(300).withEndAction { + rootContainer.removeView(splash) + showHome() + }.start() + } + } + + fun showHome( + uiMode: com.runestone.app.data.UIMode = com.runestone.app.data.UIMode.GRID, + showGameName: Boolean = true, + ) { + Log.i(TAG, "showHome") + manageFilesVisible = false + importManager.activeImportProgressView = null + + activeOverlay?.let { + rootContainer.removeView(it) + activeOverlay = null + } + if (android.os.Build.VERSION.SDK_INT >= 31) { + homeContentView?.setRenderEffect(null) + } + + homeContentView?.let { rootContainer.removeView(it) } + + var filtered = if (activeEngineFilter != null) { + games.filter { it.engineType == activeEngineFilter } + } else games + if (searchQuery.isNotEmpty()) { + filtered = filtered.filter { it.displayName.contains(searchQuery, ignoreCase = true) } + } + filtered = when (currentSort) { + SortMode.NAME_ASC -> filtered.sortedBy { it.displayName.lowercase() } + SortMode.NAME_DESC -> filtered.sortedByDescending { it.displayName.lowercase() } + SortMode.RECENT -> filtered + SortMode.DATE_ADDED -> filtered.sortedByDescending { File(it.originalPath).parentFile?.lastModified() ?: 0L } + } + val cards = filtered.map { toCardInfo(it) }.map { card -> + if (card.coverUrl != null) return@map card + val availableCoverUrl = storeCoordinator.availableGames.firstOrNull { + it.title.equals(card.displayName, ignoreCase = true) || + it.title.contains(card.displayName, ignoreCase = true) || + card.displayName.contains(it.title, ignoreCase = true) + }?.coverUrl + + var coverUrl = availableCoverUrl ?: gameMetadataCache[card.displayName]?.coverUrl + + if (coverUrl == null) { + val game = games.find { it.storageName == card.storageName } + if (game != null) { + val fallback = com.runestone.app.services.CoverExtractor.extractFallbackCover(activity, game.storageName, File(game.originalPath)) + if (fallback != null) coverUrl = "local:$fallback" + } + } + + card.copy(coverUrl = coverUrl) + } + + val pausedGame = cards.find { it.isPaused } + + val homeView = HomeScreen(activity).create( + games = cards, + onPlay = { callbacks.playGame(it) }, + onManage = { showPerGameSettings(it) }, + onAddGame = { importManager.startFolderImport() }, + onBrowse = { storeCoordinator.showAvailableGames() }, + onManageAll = { showManageFiles() }, + onSettings = { showSettings(settings) }, + onApplyFilters = { engine, search, sort -> + activeEngineFilter = engine + searchQuery = search + currentSort = sort + showHome(uiMode, showGameName) + }, + activeFilter = activeEngineFilter, + activeSearch = searchQuery, + currentSort = currentSort, + pausedGame = pausedGame, + uiMode = uiMode, + cardLayout = homeCardLayout, + showGameName = showGameName, + onLongPress = { game -> + HomeScreen(activity).showInspectOverlay(game, { callbacks.playGame(it) }, { showPerGameSettings(it) }) + }, + onCardLayoutChanged = { layout -> + homeCardLayout = layout + activity.getSharedPreferences("runestone-settings-v1", Activity.MODE_PRIVATE) + .edit() + .putString("homeCardLayout", layout.name) + .apply() + showHome(uiMode, showGameName) + }, + onResume = if (pausedGame != null) {{ callbacks.playGame(pausedGame.storageName) }} else null, + onStop = if (pausedGame != null) {{ storageName -> + val game = games.find { it.storageName == storageName } + if (game != null) { + Log.i(TAG, "STOP game: $storageName path=${game.originalPath}") + sessionManager.recordStop(storageName) + activity.getSharedPreferences("runestone", Activity.MODE_PRIVATE).edit() + .remove("paused_game") + .remove("active_game_storage") + .remove("active_game_path") + .remove("game_minimized") + .apply() + callbacks.refreshGames() + rootContainer.postDelayed({ + showHome(uiMode, showGameName) + }, 100) + } + }} else null, + ) + rootContainer.addView(homeView, 0, + ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)) + homeContentView = homeView + if (controllerNavigationEnabled) { + rootContainer.post { enableControllerNavigation(rootContainer) } + } + scheduleMetadataWarmup(cards) + } + + fun showSettings(settings: com.runestone.app.data.RunnerSettings = com.runestone.app.data.RunnerSettings()) { + manageFilesVisible = false + showOverlay( + SettingsScreen(activity).create( + settings = settings, + onSettingsChanged = { newSettings -> + callbacks.onSettingsChanged(newSettings) + }, + onBack = { dismissOverlay() }, + onResetDefaults = { + showSettings(settings) + }, + onClearRuntimeCache = { + clearRuntimeCache() + }, + ), + ) + } + + fun showManageFiles(storageName: String? = null) { + Log.i(TAG, "showManageFiles: focused=$storageName") + manageFilesVisible = true + val allGames = games.map { ManageFilesScreen.GameInfo(it.storageName, it.displayName, it.engineType, it.fileCount) } + val mgGames = if (storageName != null) { + allGames.filter { it.storageName == storageName } + } else allGames + showOverlay( + ManageFilesScreen(activity).create( + games = mgGames, + storageByGame = storageCache, + isStorageRefreshing = false, + importMessage = importManager.importMessage, + onImport = { sName -> importManager.startFolderImport(sName) }, + onDelete = { sName -> confirmRemoveGameData(sName) }, + onViewSaves = { sName -> viewSaves(sName) }, + onChangeEngine = { sName -> showEnginePicker(sName) }, + onPerGameSettings = { sName -> showPerGameSettings(sName) }, + onBack = { dismissOverlay() }, + ), + ) + if (storageName == null) refreshStorageReport() + } + + fun showPerGameSettings(storageName: String) { + manageFilesVisible = false + val game = games.find { it.storageName == storageName } ?: return + val configService = com.runestone.app.data.GameConfigService(activity, workspaceManager) + val config = configService.loadPerGame(storageName) + + showOverlay( + PerGameSettingsScreen(activity).create( + gameTitle = game.displayName, + config = config, + storageName = storageName, + onConfigChanged = { newConfig -> + configService.savePerGame(storageName, newConfig) + }, + onBack = { dismissOverlay() }, + onPickCover = { }, + onFetchMetadata = { }, + onInstallPatch = { }, + onDeleteGame = { + showDeleteGameConfirmDialog(storageName, game.displayName) + }, + ), + ) + } + + fun showDeleteGameConfirmDialog(storageName: String, gameTitle: String) { + val wrapper = FrameLayout(activity).apply { + setBackgroundColor(Color.argb(218, 0, 0, 0)) + isClickable = true + isFocusable = true + } + + val card = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + val pad = dp(20) + setPadding(pad, pad, pad, pad) + background = android.graphics.drawable.GradientDrawable().apply { + setColor(Color.argb(248, 18, 17, 22)) + cornerRadius = dp(18).toFloat() + setStroke(dp(1), Color.argb(80, 220, 80, 80)) + } + elevation = dp(8).toFloat() + } + val cardLp = FrameLayout.LayoutParams( + (activity.resources.displayMetrics.widthPixels * 0.86f).toInt(), + ViewGroup.LayoutParams.WRAP_CONTENT, + ) + cardLp.gravity = Gravity.CENTER + + card.addView(TextView(activity).apply { + text = "Delete $gameTitle?" + setTextColor(Color.rgb(232, 229, 220)) + textSize = 17f + typeface = Typeface.DEFAULT_BOLD + setPadding(0, 0, 0, dp(8)) + }) + + card.addView(TextView(activity).apply { + text = "This removes all installed game files. What about your save games?" + setTextColor(Color.rgb(170, 160, 145)) + textSize = 13f + setPadding(0, 0, 0, dp(20)) + }) + + fun makeButton(label: String, bg: Int, stroke: Int, fg: Int, onClick: () -> Unit) { + val btn = TextView(activity).apply { + text = label + setTextColor(fg) + textSize = 13f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + setPadding(dp(16), dp(11), dp(16), dp(11)) + background = android.graphics.drawable.GradientDrawable().apply { + setColor(bg) + cornerRadius = dp(10).toFloat() + setStroke(dp(1), stroke) + } + isClickable = true + isFocusable = true + setOnClickListener { + animate().scaleX(0.97f).scaleY(0.97f).setDuration(60).withEndAction { + animate().scaleX(1f).scaleY(1f).setDuration(100).start() + dismissOverlay { onClick() } + }.start() + } + } + val lp = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ) + lp.topMargin = dp(8) + card.addView(btn, lp) + } + + val redSoft = Color.argb(45, 220, 80, 80) + val redStroke = Color.argb(90, 220, 80, 80) + val greenSoft = Color.argb(40, 110, 180, 120) + val greenStroke = Color.argb(85, 110, 180, 120) + val neutralSoft = Color.argb(35, 140, 130, 112) + val neutralStroke = Color.argb(70, 140, 130, 112) + + makeButton("KEEP SAVES", greenSoft, greenStroke, Color.rgb(180, 230, 190)) { + callbacks.performDeleteGame(storageName, gameTitle, keepSaves = true) + } + makeButton("DELETE FULLY", redSoft, redStroke, Color.rgb(255, 200, 200)) { + callbacks.performDeleteGame(storageName, gameTitle, keepSaves = false) + } + makeButton("Cancel", neutralSoft, neutralStroke, Color.rgb(200, 195, 180)) { + } + + wrapper.addView(card, cardLp) + + card.alpha = 0f + card.translationY = dp(20).toFloat() + wrapper.alpha = 0f + card.animate().alpha(1f).translationY(0f).setDuration(200).start() + wrapper.animate().alpha(1f).setDuration(180).start() + + activeOverlay?.let { rootContainer.removeView(it); activeOverlay = null } + rootContainer.addView( + wrapper, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + persistentDock?.bringToFront() + activeOverlay = wrapper + } + + fun renderAvailableGamesScreen() { + val titles = installedStoreKeys() + showOverlay( + AvailableGamesScreen(activity).create( + games = storeCoordinator.availableGames, + isLoading = storeCoordinator.isLoadingGames, + isMetadataLoading = storeCoordinator.storeMetadataLoading || storeCoordinator.storeMetadataInFlight.isNotEmpty(), + errorMessage = storeCoordinator.gamesErrorMessage, + downloadStates = storeCoordinator.downloadProgressMap, + installStates = storeCoordinator.installProgressMap, + installedGameTitles = titles, + gridColumns = storeCoordinator.storeGridColumns, + initialScrollY = storeCoordinator.availableGamesScrollY, + onScrollYChanged = { storeCoordinator.availableGamesScrollY = it }, + onGridColumnsChanged = { columns -> + storeCoordinator.storeGridColumns = columns.coerceIn(1, 4) + renderAvailableGamesScreen() + }, + onRefresh = { storeCoordinator.showAvailableGames() }, + onManageSources = { showSources() }, + onProviderSettings = { showProviderSettings() }, + onDownload = { storeCoordinator.handleDownload(it) }, + onPauseDownload = { storeCoordinator.handlePauseDownload(it) }, + onBack = { dismissOverlay() }, + onOpenDetail = { game -> showGameDetail(game) }, + ), + ) + } + + fun showGameDetail(game: AvailableGame) { + val titles = installedStoreKeys() + detailOverlay = GameDetailOverlay.show( + context = activity, + game = game, + progress = storeCoordinator.downloadProgressMap[game.id], + installProgress = storeCoordinator.installProgressMap[game.id], + installedGameTitles = titles, + onDownload = { storeCoordinator.handleDownload(it) }, + onPauseDownload = { storeCoordinator.handlePauseDownload(it) }, + onClose = { _ -> + detailOverlay = null + callbacks.refreshGames() + }, + ) + } + + fun pushDetailOverlayUpdate(gameId: String) { + val overlay = detailOverlay ?: return + val game = storeCoordinator.availableGames.firstOrNull { it.id == gameId } ?: return + overlay.update( + game = game, + progress = storeCoordinator.downloadProgressMap[gameId], + installProgress = storeCoordinator.installProgressMap[gameId], + installedGameTitles = installedStoreKeys(), + ) + } + + fun showSources() { + manageFilesVisible = false + showOverlay( + SourcesScreen(activity).create( + sources = sourcesManager.getSources(), + onAddSource = { url -> + runCatching { sourcesManager.addSource(url) } + .onFailure { Toast.makeText(activity, it.message ?: "Invalid source URL", Toast.LENGTH_SHORT).show() } + showSources() + }, + onRemoveSource = { id -> + sourcesManager.removeSource(id) + showSources() + }, + onBack = { dismissOverlay() }, + ), + ) + } + + fun showProviderSettings() { + manageFilesVisible = false + showOverlay( + ProviderSettingsScreen(activity).create( + sources = sourcesManager.getSources(), + onBack = { dismissOverlay() }, + onUsePublicCatalogue = { + runCatching { sourcesManager.addPublicCatalogue() } + .onFailure { + Toast.makeText( + activity, + it.message ?: "Invalid catalogue URL", + Toast.LENGTH_SHORT, + ).show() + } + showProviderSettings() + }, + onManageSources = { showSources() }, + onClearAll = { + sourcesManager.clearSources() + showProviderSettings() + }, + ), + ) + } + + fun showImportProgress(message: String) { + Log.i(TAG, "showImportProgress: $message") + importManager.importMessage = message + val progressView = ImportProgressScreen(activity).create(title = message) + importManager.activeImportProgressView = progressView + showOverlay(progressView.root, dismissOnBgClick = false) + } + + fun showEnginePicker(storageName: String) { + val game = games.find { it.storageName == storageName } + val currentEngine = game?.engineType + val engines = EngineType.values().filter { it != EngineType.UNKNOWN } + val items = engines.map { "${it.label} (${it.name})" }.toTypedArray() + + AlertDialog.Builder(activity) + .setTitle("Change Engine - ${game?.displayName ?: storageName}") + .setSingleChoiceItems(items, engines.indexOf(currentEngine)) { dialog, which -> + val selected = engines[which] + Log.i(TAG, "Engine override: $storageName -> $selected") + val state = installStateStore.load(storageName) ?: com.runestone.app.workspace.GameInstallState( + storageName = storageName, + engineType = selected, + fileCount = game?.fileCount ?: 0, + importedAtMillis = System.currentTimeMillis(), + ) + installStateStore.save(state.copy(engineOverride = selected)) + importManager.importMessage = "Engine set to ${selected.label}. Relaunch to apply." + callbacks.refreshGames() + showManageFiles() + dialog.dismiss() + } + .setNegativeButton("Reset to Auto", null) + .show() + } + + fun viewSaves(storageName: String) { + val saves = saveManager.listSaves(storageName) + val gameTitle = games.find { it.storageName == storageName }?.displayName ?: storageName + val message = if (saves.isEmpty()) { + "No save files were detected yet." + } else { + saves.joinToString("\n") { "${it.name} (${formatBytes(it.length())})" } + } + AlertDialog.Builder(activity) + .setTitle("Save Files - $gameTitle") + .setMessage(message) + .setNegativeButton("Close", null) + .setPositiveButton("Actions") { _, _ -> + showSaveActions(storageName, gameTitle) + } + .show() + } + + fun showSaveActions(storageName: String, gameTitle: String) { + val actions = arrayOf( + "Sync protected copy", + "Backup now", + "Restore protected saves", + "Export ZIP", + "Import ZIP", + "View backups", + ) + AlertDialog.Builder(activity) + .setTitle("Save Actions - $gameTitle") + .setItems(actions) { _, which -> + when (which) { + 0 -> { + val count = saveManager.syncFromActive(storageName) + Toast.makeText(activity, "Synced $count save files into protected storage", Toast.LENGTH_SHORT).show() + } + 1 -> { + val result = saveManager.backupSaves(storageName, "manual") + val message = if (result.count > 0) { + "Backed up ${result.count} save files" + } else { + "No save files detected" + } + Toast.makeText(activity, message, Toast.LENGTH_SHORT).show() + } + 2 -> confirmRestoreSaves(storageName, gameTitle) + 3 -> showSaveExportPicker(storageName) + 4 -> showSaveImportPicker(storageName) + 5 -> showSaveBackups(storageName, gameTitle) + } + } + .setNegativeButton("Cancel", null) + .show() + } + + fun confirmRestoreSaves(storageName: String, gameTitle: String) { + AlertDialog.Builder(activity) + .setTitle("Restore saves to $gameTitle?") + .setMessage("Protected saves will be copied back into the installed game folder and may overwrite matching live save files.") + .setNegativeButton("Cancel", null) + .setPositiveButton("Restore") { _, _ -> + val count = saveManager.restoreToActive(storageName) + Toast.makeText(activity, "Restored $count save files", Toast.LENGTH_SHORT).show() + } + .show() + } + + fun showSaveExportPicker(storageName: String) { + importManager.pendingSaveExportStorage = storageName + val stamp = java.text.SimpleDateFormat("yyyyMMdd-HHmm", java.util.Locale.US) + .format(java.util.Date()) + val filename = "${storageName}-saves-$stamp.zip" + val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "application/zip" + putExtra(Intent.EXTRA_TITLE, filename) + } + activity.startActivityForResult(intent, ImportManager.REQUEST_SAVE_EXPORT_ZIP) + } + + fun showSaveImportPicker(storageName: String) { + importManager.pendingSaveImportStorage = storageName + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "application/zip" + putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false) + } + activity.startActivityForResult(intent, ImportManager.REQUEST_SAVE_IMPORT_ZIP) + } + + fun showSaveBackups(storageName: String, gameTitle: String) { + val backups = saveManager.listSaveBackups(storageName) + val message = if (backups.isEmpty()) { + "No save backups have been created yet." + } else { + backups.joinToString("\n") { + "${it.name}: ${it.fileCount} files (${formatBytes(it.bytes)})" + } + } + AlertDialog.Builder(activity) + .setTitle("Save Backups - $gameTitle") + .setMessage(message) + .setPositiveButton("OK", null) + .show() + } + + fun confirmRemoveGameData(storageName: String) { + val game = games.find { it.storageName == storageName } + val name = game?.displayName ?: storageName + AlertDialog.Builder(activity) + .setTitle("Remove $name data?") + .setMessage("This deletes the game files. Saves are kept in protected storage.") + .setNegativeButton("Cancel", null) + .setPositiveButton("Remove data") { _, _ -> + saveManager.syncFromActive(storageName) + workspaceManager.removeGame(storageName, keepSaves = true) + importManager.importMessage = "Removed $name game data. Saves were kept." + callbacks.refreshGames() + showManageFiles() + } + .show() + } + + // ═══════════════════════════════════════════════════════ + // RTP download overlay + // ═══════════════════════════════════════════════════════ + + fun showRtpDownloadDialog(storageName: String, missing: List) { + if (missing.isEmpty()) return + + val pack = missing.first() + val totalBytes = pack.approxBytes + val sizeMb = totalBytes / 1024 / 1024 + + val eulaMessage = buildString { + append("This game uses the ").append(pack.displayName).append(",\n") + append("which isn't installed on your device.\n\n") + append("Size: ~").append(sizeMb).append(" MB (downloaded once, shared with all games)\n\n") + append("By tapping DOWNLOAD, you confirm that you have read and agree to the ") + .append("Enterbrain/Kadokawa End User License Agreement for the ") + .append("RPG Maker Runtime Packages.\n\n") + append("Source: ").append(pack.sourceAttribution).append("\n") + append("URL: ").append(pack.sourceUrl) + } + + val dialog = AlertDialog.Builder(activity) + .setTitle("Runtime Package Required") + .setMessage(eulaMessage) + .setPositiveButton("DOWNLOAD") { _, _ -> + startRtpDownload(storageName, pack) + } + .setNegativeButton("LATER") { d, _ -> + d.dismiss() + showHome() + } + .setCancelable(true) + .create() + dialog.show() + } + + fun startRtpDownload(storageName: String, pack: com.runestone.app.rtp.RtpPack) { + Log.i(TAG, "Starting RTP download: ${pack.id} for game=$storageName") + val installer = com.runestone.app.rtp.RtpInstaller(activity) + showRtpDownloadProgressOverlay(pack) + installer.install(pack, object : com.runestone.app.rtp.RtpInstaller.Listener { + override fun onStatus(status: com.runestone.app.rtp.RtpInstaller.Status) { + activity.runOnUiThread { handleRtpStatus(pack, status) } + } + }) + } + + fun handleRtpStatus(pack: com.runestone.app.rtp.RtpPack, status: com.runestone.app.rtp.RtpInstaller.Status) { + when (status) { + is com.runestone.app.rtp.RtpInstaller.Status.Downloading -> { + val pct = if (status.total > 0) (status.bytes.toFloat() / status.total * 100).toInt() else 0 + rtpOverlayStatusText?.text = "Downloading ${pack.displayName}\n$pct% (${status.bytes / 1024 / 1024} MB / ${status.total / 1024 / 1024} MB)" + rtpOverlayProgressBar?.progress = pct + } + is com.runestone.app.rtp.RtpInstaller.Status.Extracting -> { + rtpOverlayStatusText?.text = "Extracting ${pack.displayName}..." + rtpOverlayProgressBar?.progress = 100 + } + is com.runestone.app.rtp.RtpInstaller.Status.Installed -> { + rtpOverlayStatusText?.text = "${pack.displayName} ready." + rtpOverlayProgressBar?.progress = 100 + Toast.makeText( + activity, + "RTP installed. You can now launch the game.", + Toast.LENGTH_LONG, + ).show() + dismissRtpDownloadOverlay() + } + is com.runestone.app.rtp.RtpInstaller.Status.Error -> { + rtpOverlayStatusText?.text = "RTP download failed:\n${status.message}" + rtpOverlayProgressBar?.progress = 0 + Toast.makeText( + activity, + "RTP download failed: ${status.message}", + Toast.LENGTH_LONG, + ).show() + } + else -> Unit + } + } + + fun showRtpDownloadProgressOverlay(pack: com.runestone.app.rtp.RtpPack) { + dismissRtpDownloadOverlay() + + val container = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + setPadding(40, 40, 40, 40) + } + val title = TextView(activity).apply { + text = "Runtime Package" + textSize = 18f + setTypeface(typeface, Typeface.BOLD) + } + val status = TextView(activity).apply { + text = "Downloading ${pack.displayName}..." + setPadding(0, 16, 0, 16) + } + val progress = ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal).apply { + isIndeterminate = false + max = 100 + } + container.addView(title) + container.addView(status) + container.addView(progress) + rtpOverlayStatusText = status + rtpOverlayProgressBar = progress + + val dialog = AlertDialog.Builder(activity) + .setView(container) + .setCancelable(false) + .setNegativeButton("HIDE") { d, _ -> d.dismiss() } + .create() + dialog.show() + activeRtpDialog = dialog + } + + fun dismissRtpDownloadOverlay() { + activeRtpDialog?.dismiss() + activeRtpDialog = null + rtpOverlayStatusText = null + rtpOverlayProgressBar = null + } + + // ═══════════════════════════════════════════════════════ + // Utility methods + // ═══════════════════════════════════════════════════════ + + fun clearRuntimeCache() { + val runtimeDir = File(activity.filesDir, "runtime") + if (runtimeDir.exists()) { + runtimeDir.deleteRecursively() + } + val cacheDir = File(activity.filesDir, "cache") + if (cacheDir.exists()) { + cacheDir.deleteRecursively() + } + } + + fun cycleSortMode() { + currentSort = when (currentSort) { + SortMode.DATE_ADDED -> SortMode.NAME_ASC + SortMode.NAME_ASC -> SortMode.NAME_DESC + SortMode.NAME_DESC -> SortMode.RECENT + SortMode.RECENT -> SortMode.DATE_ADDED + } + Toast.makeText(activity, "Sort: ${sortLabel(currentSort)}", Toast.LENGTH_SHORT).show() + showHome() + } + + fun cycleEngineFilter() { + val installedEngines = games.map { it.engineType } + .filter { it != EngineType.UNKNOWN } + .distinct() + .sortedBy { it.label } + activeEngineFilter = if (installedEngines.isEmpty()) { + null + } else { + val currentIndex = installedEngines.indexOf(activeEngineFilter) + if (currentIndex < 0) installedEngines.first() + else installedEngines.getOrNull(currentIndex + 1) + } + Toast.makeText(activity, "Filter: ${activeEngineFilter?.label ?: "All games"}", Toast.LENGTH_SHORT).show() + showHome() + } + + fun cycleCardLayout() { + homeCardLayout = homeCardLayout.next() + activity.getSharedPreferences("runestone-settings-v1", Activity.MODE_PRIVATE) + .edit() + .putString("homeCardLayout", homeCardLayout.name) + .apply() + Toast.makeText(activity, "Layout: ${homeCardLayout.name.lowercase().replace('_', ' ')}", Toast.LENGTH_SHORT).show() + showHome() + } + + fun sortLabel(sort: SortMode): String = when (sort) { + SortMode.NAME_ASC -> "Name A-Z" + SortMode.NAME_DESC -> "Name Z-A" + SortMode.RECENT -> "Recently played" + SortMode.DATE_ADDED -> "Date added" + } + + fun installedStoreKeys(): Set { + return games.flatMap { game -> + listOf(game.displayName, game.storageName) + }.toSet() + } + + fun formatBytes(bytes: Long): String { + val gb = 1024.0 * 1024.0 * 1024.0 + val mb = 1024.0 * 1024.0 + val kb = 1024.0 + return when { + bytes >= gb -> String.format("%.2f GB", bytes / gb) + bytes >= mb -> String.format("%.1f MB", bytes / mb) + bytes >= kb -> String.format("%.1f KB", bytes / kb) + else -> "$bytes B" + } + } + + // ═══════════════════════════════════════════════════════ + // Internal helpers + // ═══════════════════════════════════════════════════════ + + private fun toCardInfo(g: WorkspaceManager.GameInfo): GameCardInfo { + val perGame = runCatching { + com.runestone.app.data.GameConfigService(activity, workspaceManager).loadPerGame(g.storageName) + }.getOrNull() + val metadata = perGame?.metadata?.takeIf { + it.gameTitle.isBlank() || metadataTitleMatches(g.displayName, it.gameTitle) + } + + val customCoverPath = perGame?.game?.customCoverPath?.let { path -> + if (File(path).exists()) return@let "local:$path" + null + } + val metadataCoverPath = metadata?.localCoverPath?.takeIf { it.isNotEmpty() }?.let { path -> + if (File(path).exists()) return@let "local:$path" + null + } + val coverUrl = customCoverPath ?: metadataCoverPath + + val pausedStorage = activity.getSharedPreferences("runestone", Activity.MODE_PRIVATE) + .getString("paused_game", null) + val isPaused = pausedStorage != null && g.originalPath == pausedStorage + + return GameCardInfo( + storageName = g.storageName, + displayName = metadata?.gameTitle?.takeIf { it.isNotEmpty() } ?: g.displayName, + engineType = g.engineType, + fileCount = g.fileCount, + fileSize = cachedGameSize(g), + totalPlayTime = sessionManager.getPlayTime(g.storageName), + lastPlayedTimestamp = sessionManager.getLastPlayed(g.storageName), + isReady = true, + isPaused = isPaused, + coverUrl = coverUrl, + metadataDeveloper = metadata?.developer ?: "", + metadataGenres = metadata?.genres ?: "", + metadataYear = metadata?.releaseYear ?: "", + ) + } + + private fun metadataTitleMatches(installedTitle: String, metadataTitle: String): Boolean { + val installed = normalizedTitle(installedTitle) + val metadata = normalizedTitle(metadataTitle) + if (installed.isBlank() || metadata.isBlank()) return false + if (installed == metadata) return true + if (installed.length >= 6 && (installed.contains(metadata) || metadata.contains(installed))) return true + val installedTokens = installed.split(" ").filter { it.length > 1 }.toSet() + val metadataTokens = metadata.split(" ").filter { it.length > 1 }.toSet() + if (installedTokens.isEmpty()) return false + return installedTokens.intersect(metadataTokens).size >= minOf(2, installedTokens.size) + } + + private fun cachedGameSize(g: WorkspaceManager.GameInfo): Long = + gameSizeCacheMem[g.storageName] ?: run { warmGameSize(g); 0L } + + private fun warmGameSize(g: WorkspaceManager.GameInfo) { + if (!gameSizeInFlight.add(g.storageName)) return + com.runestone.app.util.AppScope.io.launch { + val size = runCatching { + File(g.originalPath).walkTopDown().filter { it.isFile }.sumOf { it.length() } + }.getOrDefault(0L) + gameSizeCacheMem[g.storageName] = size + gameSizeInFlight.remove(g.storageName) + gameSizeCacheDao.upsert(GameSizeCacheEntity(g.storageName, size)) + } + } + + private fun normalizedTitle(value: String): String = + value.lowercase() + .replace("&", " and ") + .replace(Regex("\\[[^]]*]"), " ") + .replace(Regex("\\([^)]*\\)"), " ") + .replace(Regex("[^a-z0-9]+"), " ") + .trim() + .replace(Regex("\\s+"), " ") + + private fun scheduleMetadataWarmup(cards: List) { + val targets = cards + .asSequence() + .filter { it.coverUrl == null } + .filter { !gameMetadataCache.containsKey(it.displayName) } + .filter { it.storageName !in metadataWarmupInFlight } + .take(3) + .toList() + if (targets.isEmpty()) return + targets.forEach { metadataWarmupInFlight.add(it.storageName) } + rootContainer.postDelayed({ + val configService = com.runestone.app.data.GameConfigService(activity, workspaceManager) + targets.forEach { card -> + metadataService.fetchAndApplyMetadata( + gameTitle = card.displayName, + storageName = card.storageName, + configService = configService, + ) { section -> + activity.runOnUiThread { + metadataWarmupInFlight.remove(card.storageName) + section?.let { + gameMetadataCache[card.displayName] = GameMetadataService.GameMetadata( + title = it.gameTitle, + description = it.description, + coverUrl = it.coverUrl, + localCoverPath = it.localCoverPath, + screenshots = emptyList(), + releaseDate = it.releaseYear, + developer = it.developer, + publisher = it.publisher, + genres = it.genres.split(",").map { genre -> genre.trim() }.filter { genre -> genre.isNotEmpty() }, + rating = null, + source = it.metadataSource, + ) + } + } + } + } + }, 750L) + } + + private fun refreshStorageReport() { + val snapshot = games.map { it.storageName } + AppScope.io.launch { + val report = snapshot.associateWith { storageReporter.collect(it) } + withContext(Dispatchers.Main) { + storageCache = report + if (manageFilesVisible) { + val mgGames = games.map { ManageFilesScreen.GameInfo(it.storageName, it.displayName, it.engineType, it.fileCount) } + showOverlay( + ManageFilesScreen(activity).create( + games = mgGames, + storageByGame = storageCache, + isStorageRefreshing = false, + importMessage = importManager.importMessage, + onImport = { sName -> importManager.startFolderImport(sName) }, + onDelete = { sName -> confirmRemoveGameData(sName) }, + onViewSaves = { sName -> viewSaves(sName) }, + onChangeEngine = { sName -> showEnginePicker(sName) }, + onPerGameSettings = { sName -> showPerGameSettings(sName) }, + onBack = { dismissOverlay() }, + ), + ) + } + } + } + } + + fun enableControllerNavigation(root: View) { + val clickables = mutableListOf() + fun visit(view: View) { + if (view.isClickable && view.visibility == View.VISIBLE) { + view.isFocusable = true + view.isFocusableInTouchMode = false + clickables += view + } + if (view is ViewGroup) { + for (i in 0 until view.childCount) visit(view.getChildAt(i)) + } + } + visit(root) + } +} + diff --git a/app/src/main/java/com/runestone/app/provider/ExtractionManager.kt b/app/src/main/java/com/runestone/app/provider/ExtractionManager.kt index c1ef2a8..bd5dbbe 100644 --- a/app/src/main/java/com/runestone/app/provider/ExtractionManager.kt +++ b/app/src/main/java/com/runestone/app/provider/ExtractionManager.kt @@ -14,6 +14,7 @@ import android.content.Context import android.util.Log import java.io.File import java.io.FileOutputStream +import java.nio.charset.Charset import java.util.zip.ZipEntry import java.util.zip.ZipInputStream @@ -68,14 +69,27 @@ class ExtractionManager(private val context: Context) { private fun doExtract(zipFile: File, outputDir: File, callback: ExtractionCallback) { ensureNoMedia(outputDir) - val entries = countEntries(zipFile) - require(entries > 0) { "Archive contains no files" } var extracted = 0 + var total = 0 var extractedBytes = 0L - ZipInputStream(zipFile.inputStream().buffered()).use { zis -> - var entry: ZipEntry? = zis.nextEntry + val charset = selectZipCharset(zipFile) + Log.i(TAG, "Using ZIP filename charset: ${charset.name()}") + + // Pass 1: count entries + ZipInputStream(zipFile.inputStream().buffered(), charset).use { zis -> + while (true) { + val entry = zis.nextEntry ?: break + total++ + require(total <= MAX_FILES) { "Archive contains more than $MAX_FILES entries" } + entry // touch + } + } + require(total > 0) { "Archive contains no files" } + // Pass 2: extract + ZipInputStream(zipFile.inputStream().buffered(), charset).use { zis -> + var entry: ZipEntry? = zis.nextEntry while (entry != null) { val name = entry.name @@ -113,7 +127,7 @@ class ExtractionManager(private val context: Context) { extracted++ callback.onProgress(ExtractionProgress( filesExtracted = extracted, - totalFiles = entries, + totalFiles = total, currentFile = name, )) @@ -133,18 +147,6 @@ class ExtractionManager(private val context: Context) { )) } - private fun countEntries(zipFile: File): Int { - var count = 0 - ZipInputStream(zipFile.inputStream().buffered()).use { zis -> - while (zis.nextEntry != null) { - count++ - require(count <= MAX_FILES) { "Archive contains more than $MAX_FILES entries" } - zis.closeEntry() - } - } - return count - } - private fun shouldSkip(name: String): Boolean { val base = name.substringBefore("/").substringBefore("\\") return SKIP_PREFIXES.any { base.equals(it, ignoreCase = true) } @@ -221,4 +223,64 @@ class ExtractionManager(private val context: Context) { } } } + + private fun selectZipCharset(zipFile: File): Charset { + val candidates = listOf( + Charsets.UTF_8, + Charset.forName("windows-31j"), + Charset.forName("Shift_JIS"), + Charset.forName("ISO-8859-1"), + ).distinctBy { it.name() } + + return candidates + .mapNotNull { charset -> + runCatching { + val names = readZipNames(zipFile, charset) + charset to scoreZipNames(names) + }.getOrNull() + } + .maxByOrNull { it.second } + ?.first + ?: Charsets.UTF_8 + } + + private fun readZipNames(zipFile: File, charset: Charset): List { + val names = mutableListOf() + ZipInputStream(zipFile.inputStream().buffered(), charset).use { zis -> + while (true) { + val entry = zis.nextEntry ?: break + names += entry.name + zis.closeEntry() + if (names.size >= 300) break + } + } + return names + } + + private fun scoreZipNames(names: List): Int { + var score = 0 + for (name in names) { + var hasJapanese = false + var badControls = 0 + for (char in name) { + when { + char.code in 0x80..0x9F -> badControls += 6 + char == '\uFFFD' -> badControls += 10 + isJapanese(char) -> hasJapanese = true + } + } + score -= badControls + if (hasJapanese) score += 8 + if (name.contains('/') || name.contains('\\')) score += 1 + if (name.any { it.isLetterOrDigit() }) score += 1 + } + return score + } + + private fun isJapanese(char: Char): Boolean { + return char in '\u3040'..'\u30FF' || + char in '\u3400'..'\u4DBF' || + char in '\u4E00'..'\u9FFF' || + char in '\uF900'..'\uFAFF' + } } diff --git a/app/src/main/java/com/runestone/app/provider/SourcesManager.kt b/app/src/main/java/com/runestone/app/provider/SourcesManager.kt index 6850851..c663fa8 100644 --- a/app/src/main/java/com/runestone/app/provider/SourcesManager.kt +++ b/app/src/main/java/com/runestone/app/provider/SourcesManager.kt @@ -12,6 +12,9 @@ package com.runestone.app.provider import android.content.Context import android.util.Log +import com.runestone.app.util.AppScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.json.JSONArray import org.json.JSONObject import java.io.BufferedReader @@ -84,7 +87,7 @@ class SourcesManager(private val context: Context) { fun fetchGamesFromSources(onResult: (List, String?) -> Unit) { val sources = getSources() - Thread { + AppScope.io.launch { try { val allGames = loadBundledCatalogue().toMutableList() var lastError: String? = null @@ -112,7 +115,7 @@ class SourcesManager(private val context: Context) { Log.e(TAG, "Fetch failed", e) onResult(emptyList(), e.message ?: "Network error") } - }.start() + } } private fun loadBundledCatalogue(): List { diff --git a/app/src/main/java/com/runestone/app/runtime/WebViewGameSession.kt b/app/src/main/java/com/runestone/app/runtime/WebViewGameSession.kt new file mode 100644 index 0000000..f008ef2 --- /dev/null +++ b/app/src/main/java/com/runestone/app/runtime/WebViewGameSession.kt @@ -0,0 +1,723 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.runtime + +import android.app.Activity +import android.content.Intent +import android.graphics.Color +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.os.SystemClock +import android.util.Log +import android.view.Gravity +import android.view.KeyEvent +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.ViewCompat +import com.runestone.app.R +import com.runestone.app.data.ControllerShortcut +import com.runestone.app.data.DisplayCutoutMode +import com.runestone.app.data.EngineType +import com.runestone.app.data.GameConfigService +import com.runestone.app.data.LayoutMode +import com.runestone.app.data.RunnerSettings +import com.runestone.app.engine.WebViewEngine +import com.runestone.app.engine.WebglConfigBuilder +import com.runestone.app.input.ControlButtonProfile +import com.runestone.app.input.ControlProfile +import com.runestone.app.input.ControlProfileScope +import com.runestone.app.input.ControlProfileStore +import com.runestone.app.input.InputDispatcher +import com.runestone.app.input.RunestoneKeyboardView +import com.runestone.app.input.TouchOverlayView +import com.runestone.app.input.VirtualKeyboardOverlay +import com.runestone.app.workspace.WorkspaceManager +import java.io.File + +class WebViewGameSession( + private val activity: Activity, + private val gameDir: File, + private val settings: RunnerSettings, + private val engineType: EngineType, + private val callbacks: Callbacks, +) { + interface Callbacks { + fun onGoHomePaused() + fun onOpenSettings() + fun onToggleKeyboard() + fun onPersistInputSettings(layoutMode: LayoutMode, hideGamepad: Boolean) + fun onPersistControlProfile(buttons: List) + } + + var webViewEngine: WebViewEngine? = null + var overlayView: TouchOverlayView? = null + var overlayContainer: ViewGroup? = null + var rootView: FrameLayout? = null + var keyboardView: RunestoneKeyboardView? = null + var virtualKeyboardView: VirtualKeyboardOverlay? = null + var keyboardVisible: Boolean = false + var runtimeActionsOverlay: View? = null + var menuBtn: TextView? = null + var recoveryBtn: View? = null + + private var inputDispatcher: InputDispatcher? = null + private var immersiveDecorConfigured = false + private var lastImmersiveApplyAt = 0L + private var lastAppliedCutoutMode: DisplayCutoutMode? = null + + private var storageName: String? = null + + fun launch() { + val root = FrameLayout(activity).apply { + id = View.generateViewId() + setBackgroundColor(Color.BLACK) + } + rootView = root + installSafeAreaInsets(root) + activity.setContentView(root) + + val engine = WebViewEngine(activity) + webViewEngine = engine + createInputDispatcher() + rebuildLayout() + engine.loadGame(gameDir.absolutePath, WebViewEngine.WebViewGameConfig( + title = gameDir.name, + addGamepad = false, + fakeGreenworks = true, + showFps = true, + forceAudioExt = settings.forceAudioExt, + smoothScaling = settings.smoothScaling, + integerScaling = settings.integerScaling, + textScale = settings.textScale, + webgl = settings.webgl, + useWebgl2 = settings.useWebgl2, + forceCanvas = settings.forceCanvas, + useHttpServer = settings.useHttpServer, + useAsmjsEffekseer = settings.useAsmjsEffekseer, + engineFamily = engineTypeToFamily(engineType), + desktopMode = settings.desktopMode, + allowExternalModules = settings.allowExternalModules, + dialogLogs = settings.dialogLogs, + )) + engine.isFocusable = true + engine.isFocusableInTouchMode = true + } + + fun rebuildLayout() { + val root = rootView ?: return + val engine = webViewEngine ?: return + (engine.parent as? ViewGroup)?.removeView(engine) + root.removeAllViews() + overlayView = null + overlayContainer = null + + val isLandscape = settings.layoutMode == LayoutMode.LANDSCAPE + val isPortraitConsole = settings.layoutMode == LayoutMode.PORTRAIT_CONSOLE + val hideOverlay = settings.hideVirtualGamepad + + if (isPortraitConsole && !hideOverlay) { + val splitLayout = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + } + root.addView(splitLayout) + + val gameArea = FrameLayout(activity).apply { + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + 0, + 0.52f, + ) + } + splitLayout.addView(gameArea) + + gameArea.addView(engine, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + + val controlPanel = FrameLayout(activity).apply { + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + 0, + 0.48f, + ) + setBackgroundColor(Color.rgb(10, 10, 12)) + } + splitLayout.addView(controlPanel) + + setupTouchOverlay(controlPanel, engine, 0f, 0f, 0f, 0f) + } else if (isPortraitConsole && hideOverlay) { + root.addView(engine, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + } else { + if (isLandscape) { + val targetGameRatio = 4f / 3f + val screenW = root.width.coerceAtLeast(1) + val screenH = root.height.coerceAtLeast(1) + val gameH = screenH + val gameW = minOf(screenW, (gameH * targetGameRatio).toInt()) + val marginLeft = (screenW - gameW) / 2 + val marginRight = marginLeft + + root.addView(engine, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ).apply { + leftMargin = marginLeft + rightMargin = marginRight + }) + + if (!hideOverlay) { + val overlayContainer = FrameLayout(activity).apply { + setBackgroundColor(Color.TRANSPARENT) + layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + } + root.addView(overlayContainer) + setupTouchOverlay(overlayContainer, engine, marginLeft.toFloat(), 0f, (screenW - marginRight).toFloat(), screenH.toFloat()) + } + } else { + root.addView(engine, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + + if (!hideOverlay) { + val overlayContainer = FrameLayout(activity).apply { + setBackgroundColor(Color.TRANSPARENT) + layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + } + root.addView(overlayContainer) + setupTouchOverlay(overlayContainer, engine, 0f, 0f, 0f, 0f) + } + } + } + + addChrome(root) + } + + fun addChrome(root: FrameLayout) { + addRecoveryButton(root) + } + + private fun addRecoveryButton(root: FrameLayout) { + val btn = TextView(activity).apply { + text = "\u2022\u2022\u2022" + textSize = 16f; gravity = Gravity.CENTER + setTextColor(Color.rgb(220, 210, 190)) + typeface = Typeface.DEFAULT_BOLD + background = GradientDrawable().apply { + setColor(Color.argb(200, 8, 8, 10)) + setStroke(dp(1), Color.argb(80, 160, 140, 110)) + cornerRadius = dp(22).toFloat() + } + minimumWidth = dp(44) + minimumHeight = dp(44) + setOnClickListener { showOverlayMenu() } + val p = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) + p.gravity = Gravity.TOP or Gravity.END + p.topMargin = dp(8); p.rightMargin = dp(8) + layoutParams = p + tag = "recovery_btn" + } + root.addView(btn) + recoveryBtn = btn + } + + fun setupTouchOverlay(container: ViewGroup, engine: WebViewEngine, gameLeft: Float, gameTop: Float, gameRight: Float, gameBottom: Float) { + val overlay = TouchOverlayView(activity).apply { + layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + alpha = settings.touchOpacity + scale = settings.touchScale + hapticsEnabled = settings.hapticsEnabled + hapticIntensity = settings.hapticIntensity + controllerPreset = runCatching { + TouchOverlayView.ControllerPreset.valueOf(settings.controllerPreset) + }.getOrDefault(TouchOverlayView.ControllerPreset.SIMPLIFIED) + diagonalMovement = settings.diagonalMovement + controlsOnly = (settings.layoutMode == LayoutMode.PORTRAIT_CONSOLE) + gameViewportLeft = gameLeft + gameViewportTop = gameTop + gameViewportRight = gameRight + gameViewportBottom = gameBottom + onToggleControls = { setVirtualControlsVisible(false) } + onRotateLayout = { rotateLayout() } + onProfileLayoutChanged = { buttons -> + persistControlProfile(buttons) + } + + onInput = inputHandler@{ zone, pressed -> + if (zone == TouchOverlayView.Zone.SETTINGS && pressed) { + callbacks.onOpenSettings() + return@inputHandler + } + if (zone == TouchOverlayView.Zone.HOME && pressed) { + callbacks.onGoHomePaused() + return@inputHandler + } + val keyCode = InputDispatcher.zoneToKeyCode(zone) + val action = if (pressed) KeyEvent.ACTION_DOWN else KeyEvent.ACTION_UP + engine.dispatchKeyEvent(KeyEvent(action, keyCode)) + + val js = when { + pressed && zone == TouchOverlayView.Zone.DPAD_UP -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('up');" + pressed && zone == TouchOverlayView.Zone.DPAD_DOWN -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('down');" + pressed && zone == TouchOverlayView.Zone.DPAD_LEFT -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('left');" + pressed && zone == TouchOverlayView.Zone.DPAD_RIGHT -> "if(TouchInput&&TouchInput._onDown)TouchInput._onDown('right');" + pressed && zone == TouchOverlayView.Zone.BTN_CONFIRM -> "if(TouchInput&&TouchInput._onOk)TouchInput._onOk();" + pressed && zone == TouchOverlayView.Zone.BTN_BACK -> "if(TouchInput&&TouchInput._onCancel)TouchInput._onCancel();" + pressed && zone == TouchOverlayView.Zone.BTN_DASH -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:16});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_A -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:65});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_S -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:83});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_D -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:68});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_Z -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:90});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_X -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:88});" + pressed && zone == TouchOverlayView.Zone.BTN_EXTRA_C -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:67});" + pressed && zone == TouchOverlayView.Zone.BTN_CTRL -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:17});" + pressed && zone == TouchOverlayView.Zone.BTN_ALT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:18});" + pressed && zone == TouchOverlayView.Zone.BTN_SHIFT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:16});" + pressed && zone == TouchOverlayView.Zone.SELECT -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:27});" + pressed && zone == TouchOverlayView.Zone.START -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:13});" + pressed && zone == TouchOverlayView.Zone.L1 -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:33});" + pressed && zone == TouchOverlayView.Zone.R1 -> "if(Input&&Input._onKeyDown)Input._onKeyDown({which:34});" + else -> "" + } + if (js.isNotEmpty()) { + engine.evaluateJavascript("(function(){try{$js}catch(e){}})();", null) + } + } + } + this@WebViewGameSession.overlayView = overlay + this@WebViewGameSession.overlayContainer = container + container.addView(overlay) + } + + fun showRuntimeActions() { + val root = rootView ?: return + runtimeActionsOverlay?.let { + root.removeView(it) + runtimeActionsOverlay = null + menuBtn?.rotation = 0f + return + } + menuBtn?.rotation = 180f + + val overlay = FrameLayout(activity).apply { + setBackgroundColor(Color.argb(95, 0, 0, 0)) + isClickable = true + isFocusable = true + setOnClickListener { dismissRuntimeActions() } + setOnKeyListener { _, keyCode, event -> + if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BUTTON_B) { + dismissRuntimeActions() + true + } else { + false + } + } + } + val panel = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(10), dp(8), dp(10), dp(10)) + background = GradientDrawable().apply { + setColor(Color.argb(222, 12, 11, 16)) + setStroke(dp(1), Color.argb(85, 200, 180, 140)) + cornerRadius = dp(12).toFloat() + } + isClickable = true + } + val topRow = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + } + topRow.addView(runtimeActionButton("RESUME", R.drawable.ic_runtime_resume) { dismissRuntimeActions() }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { rightMargin = dp(6) }) + topRow.addView(runtimeActionButton("HOME", R.drawable.ic_runtime_home) { + dismissRuntimeActions() + callbacks.onGoHomePaused() + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6) }) + panel.addView(topRow) + + panel.addView(runtimeToggleButton(!settings.hideVirtualGamepad) { + setVirtualControlsVisible(settings.hideVirtualGamepad) + dismissRuntimeActions() + }) + + val modeRow = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + } + val isFull = overlayView?.controllerPreset == TouchOverlayView.ControllerPreset.FULL + modeRow.addView(runtimeActionButton( + if (isFull) "BASIC" else "FULL", + R.drawable.ic_runtime_controls, + ) { + dismissRuntimeActions() + toggleControllerPreset() + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + rightMargin = dp(6) + }) + modeRow.addView(runtimeActionButton( + if (settings.layoutMode == LayoutMode.LANDSCAPE) "PORTRAIT" else "LANDSCAPE", + R.drawable.ic_runtime_rotate, + ) { + dismissRuntimeActions() + rotateLayout() + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6); rightMargin = dp(6) }) + modeRow.addView(runtimeActionButton("EDIT", R.drawable.ic_runtime_edit) { + dismissRuntimeActions() + openControlLayoutEditor() + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6); rightMargin = dp(6) }) + modeRow.addView(runtimeActionButton("KEYBOARD", R.drawable.ic_runtime_keyboard) { + dismissRuntimeActions() + callbacks.onToggleKeyboard() + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { leftMargin = dp(6) }) + panel.addView(modeRow) + + overlay.addView(panel, FrameLayout.LayoutParams( + (activity.resources.displayMetrics.widthPixels * 0.72f).toInt().coerceIn(dp(260), dp(480)), + ViewGroup.LayoutParams.WRAP_CONTENT, + Gravity.CENTER, + )) + root.addView(overlay, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + runtimeActionsOverlay = overlay + overlay.requestFocus() + } + + fun dismissRuntimeActions() { + val overlay = runtimeActionsOverlay ?: return + rootView?.removeView(overlay) + runtimeActionsOverlay = null + menuBtn?.rotation = 0f + } + + fun toggleControllerPreset() { + val overlay = overlayView + if (overlay == null) return + val next = if (overlay.controllerPreset == TouchOverlayView.ControllerPreset.SIMPLIFIED) + TouchOverlayView.ControllerPreset.FULL + else + TouchOverlayView.ControllerPreset.SIMPLIFIED + overlay.setPreset(next) + callbacks.onPersistInputSettings(settings.layoutMode, settings.hideVirtualGamepad) + Toast.makeText(activity, "Controller: ${next.name}", Toast.LENGTH_SHORT).show() + } + + fun setVirtualControlsVisible(visible: Boolean) { + val overlay = overlayView + if (overlay != null) { + overlay.visibility = if (visible) View.VISIBLE else View.INVISIBLE + callbacks.onPersistInputSettings(settings.layoutMode, !visible) + Toast.makeText(activity, if (visible) "Controls shown" else "Controls hidden", Toast.LENGTH_SHORT).show() + return + } + webViewEngine?.let { engine -> + rebuildLayout() + callbacks.onPersistInputSettings(settings.layoutMode, !visible) + Toast.makeText(activity, if (visible) "Controls shown" else "Controls hidden", Toast.LENGTH_SHORT).show() + return + } + callbacks.onPersistInputSettings(settings.layoutMode, !visible) + Toast.makeText(activity, "Controls will update next launch", Toast.LENGTH_SHORT).show() + } + + fun rotateLayout() { + val overlay = overlayView + webViewEngine?.let { engine -> + rootView?.post { rebuildLayout() } + } + callbacks.onPersistInputSettings(settings.layoutMode, settings.hideVirtualGamepad) + val note = if (webViewEngine != null) { + "Layout rotated" + } else { + "Saved. Native runtime applies it next launch." + } + Toast.makeText(activity, note, Toast.LENGTH_SHORT).show() + } + + fun openControlLayoutEditor() { + val overlay = overlayView + if (overlay != null) { + overlay.openLayoutEditor() + return + } + if (webViewEngine != null) { + setVirtualControlsVisible(true) + rootView?.post { + overlayView?.openLayoutEditor() + } + } else { + Toast.makeText(activity, "Control editor opens in WebView sessions for now", Toast.LENGTH_SHORT).show() + } + } + + fun persistInputSettings() { + val name = storageName ?: return + runCatching { + val service = GameConfigService(activity, WorkspaceManager(activity)) + val current = service.loadPerGame(name) + service.savePerGame( + name, + current.copy( + input = current.input.copy( + layoutMode = settings.layoutMode.name.lowercase(), + hideVirtualGamepad = settings.hideVirtualGamepad, + ), + ), + ) + }.onFailure { + Log.w("Runestone", "Failed to persist runtime input settings", it) + } + } + + fun persistControlProfile(buttons: List) { + if (buttons.isEmpty()) return + runCatching { + val store = ControlProfileStore(activity) + val existing = store.loadEffective(engineType, storageName, settings) + val editedLayout = buttons.first().layout + val mergedButtons = existing.buttons.filterNot { it.layout == editedLayout } + buttons + val name = storageName + val scope = if (name != null) ControlProfileScope.GAME else ControlProfileScope.ENGINE + store.save( + ControlProfile( + id = if (name != null) "custom-$name" else "custom-${engineType.name.lowercase()}", + name = "Custom Layout", + scope = scope, + engineType = engineType, + storageName = name, + buttons = mergedButtons, + ), + ) + Toast.makeText(activity, "Control layout saved", Toast.LENGTH_SHORT).show() + }.onFailure { + Log.w("Runestone", "Failed to persist control profile", it) + } + } + + private fun runtimeActionButton(label: String, iconRes: Int, action: () -> Unit): TextView = + TextView(activity).apply { + text = label + setTextColor(Color.rgb(230, 220, 200)) + textSize = 11f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + isClickable = true + isFocusable = true + setPadding(dp(8), dp(8), dp(8), dp(8)) + setCompoundDrawablesWithIntrinsicBounds(0, iconRes, 0, 0) + compoundDrawablePadding = dp(4) + background = GradientDrawable().apply { + setColor(Color.argb(70, 200, 170, 130)) + setStroke(dp(1), Color.argb(85, 210, 185, 145)) + cornerRadius = dp(10).toFloat() + } + setOnClickListener { action() } + } + + private fun runtimeToggleButton(enabled: Boolean, action: () -> Unit): TextView = + TextView(activity).apply { + text = if (enabled) "CONTROLS ON" else "CONTROLS OFF" + setTextColor(if (enabled) Color.rgb(245, 228, 190) else Color.rgb(170, 160, 145)) + textSize = 12f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + isClickable = true + isFocusable = true + setPadding(dp(12), dp(9), dp(12), dp(9)) + setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_runtime_controls, 0, 0) + compoundDrawablePadding = dp(4) + background = GradientDrawable().apply { + setColor(if (enabled) Color.argb(105, 120, 95, 62) else Color.argb(55, 80, 75, 70)) + setStroke(dp(1), if (enabled) Color.argb(120, 225, 195, 140) else Color.argb(70, 160, 150, 130)) + cornerRadius = dp(11).toFloat() + } + setOnClickListener { action() } + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { + setMargins(0, dp(10), 0, dp(10)) + } + } + + fun showOverlayMenu() { + val overlay = overlayView + if (overlay != null) { + overlay.toggleMenuOverlay() + return + } + showRuntimeActions() + } + + fun handleBack(): Boolean { + val engine = webViewEngine + if (engine != null) { + val shouldQuit = engine.handleBack() + if (shouldQuit) { + activity.getSharedPreferences("runestone", Activity.MODE_PRIVATE).edit() + .remove("paused_game") + .remove("game_minimized") + .apply() + return true + } + return false + } + activity.getSharedPreferences("runestone", Activity.MODE_PRIVATE).edit() + .remove("paused_game") + .remove("game_minimized") + .apply() + return true + } + + fun onPause() { + inputDispatcher?.releaseControllerAxes() + webViewEngine?.onPause() + } + + fun onResume() { + applyImmersiveMode() + webViewEngine?.resumeTimers() + webViewEngine?.onResume() + } + + fun onDestroy() { + webViewEngine?.destroy() + webViewEngine = null + } + + fun toggleKeyboard() { + val root = rootView ?: return + val existing = virtualKeyboardView + if (existing != null) { + root.removeView(existing) + virtualKeyboardView = null + keyboardVisible = false + return + } + + val kb = VirtualKeyboardOverlay(activity) + kb.kbOpacity = settings.touchOpacity + kb.kbScale = settings.touchScale + kb.landscapeKeys = (settings.layoutMode == LayoutMode.LANDSCAPE) + kb.dockMode = VirtualKeyboardOverlay.DockMode.BOTTOM + kb.onKeyDown = { code -> inputDispatcher?.sendKeyboardKey(code) } + kb.onKeyUp = { code -> inputDispatcher?.sendKeyboardKeyUp(code) } + kb.onDockModeChanged = { mode -> + toggleKeyboard() + toggleKeyboard() + } + val lp = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + root.addView(kb, lp) + virtualKeyboardView = kb + keyboardVisible = true + } + + private fun createInputDispatcher(): InputDispatcher { + val dispatcher = InputDispatcher(webViewEngine) + inputDispatcher = dispatcher + return dispatcher + } + + private fun applyImmersiveMode(force: Boolean = false) { + val now = SystemClock.uptimeMillis() + val cutoutChanged = lastAppliedCutoutMode != settings.displayCutoutMode + if (!force && !cutoutChanged && now - lastImmersiveApplyAt < 350L) return + lastImmersiveApplyAt = now + + if (!immersiveDecorConfigured) { + WindowCompat.setDecorFitsSystemWindows(activity.window, false) + WindowCompat.getInsetsController(activity.window, activity.window.decorView).systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + immersiveDecorConfigured = true + } + WindowCompat.getInsetsController(activity.window, activity.window.decorView) + .hide(WindowInsetsCompat.Type.systemBars()) + + if (android.os.Build.VERSION.SDK_INT >= 28 && cutoutChanged) { + activity.window.attributes = activity.window.attributes.apply { + layoutInDisplayCutoutMode = if (settings.displayCutoutMode == DisplayCutoutMode.EDGE_TO_EDGE) { + android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES + } else { + android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT + } + } + } + lastAppliedCutoutMode = settings.displayCutoutMode + } + + private fun installSafeAreaInsets(root: View) { + ViewCompat.setOnApplyWindowInsetsListener(root) { view, insets -> + if (settings.displayCutoutMode == DisplayCutoutMode.SAFE_AREA) { + val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + val cutout = insets.getInsets(WindowInsetsCompat.Type.displayCutout()) + val left = maxOf(bars.left, cutout.left) + val top = maxOf(bars.top, cutout.top) + val right = maxOf(bars.right, cutout.right) + val bottom = maxOf(0, cutout.bottom) + if ( + view.paddingLeft != left || + view.paddingTop != top || + view.paddingRight != right || + view.paddingBottom != bottom + ) { + view.setPadding(left, top, right, bottom) + } + } else { + if ( + view.paddingLeft != 0 || + view.paddingTop != 0 || + view.paddingRight != 0 || + view.paddingBottom != 0 + ) { + view.setPadding(0, 0, 0, 0) + } + } + insets + } + ViewCompat.requestApplyInsets(root) + } + + private fun engineTypeToFamily(type: EngineType): WebglConfigBuilder.EngineFamily = when (type) { + EngineType.MV -> WebglConfigBuilder.EngineFamily.MV + EngineType.MZ -> WebglConfigBuilder.EngineFamily.MZ + else -> WebglConfigBuilder.EngineFamily.HTML + } + + private fun dp(value: Int): Int = (value * activity.resources.displayMetrics.density).toInt() +} diff --git a/app/src/main/java/com/runestone/app/services/CoverExtractor.kt b/app/src/main/java/com/runestone/app/services/CoverExtractor.kt new file mode 100644 index 0000000..88ed870 --- /dev/null +++ b/app/src/main/java/com/runestone/app/services/CoverExtractor.kt @@ -0,0 +1,102 @@ +package com.runestone.app.services + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.util.Log +import java.io.File + +object CoverExtractor { + private const val TAG = "CoverExtractor" + private const val COVERS_DIR = "game_covers" + + fun extractFallbackCover(context: Context, storageName: String, gameDir: File): String? { + val coverDir = File(context.filesDir, COVERS_DIR).apply { mkdirs() } + val fallbackFile = File(coverDir, "${storageName}_fallback.jpg") + if (fallbackFile.exists()) return fallbackFile.absolutePath + + val bitmap = extractFromGameFiles(gameDir) ?: return null + + try { + fallbackFile.outputStream().use { out -> + bitmap.compress(Bitmap.CompressFormat.JPEG, 85, out) + } + bitmap.recycle() + Log.i(TAG, "Fallback cover saved: ${fallbackFile.absolutePath}") + return fallbackFile.absolutePath + } catch (e: Exception) { + Log.w(TAG, "Failed to save fallback cover", e) + bitmap.recycle() + return null + } + } + + private fun extractFromGameFiles(gameDir: File): Bitmap? { + val wwwDir = File(gameDir, "www") + + // MV/MZ: www/img/titles1/ or www/img/titles2/ + if (wwwDir.isDirectory) { + val titlesDirs = listOf( + File(wwwDir, "img/titles1"), + File(wwwDir, "img/titles2"), + File(wwwDir, "img/titles"), + File(wwwDir, "img/system"), + ) + for (dir in titlesDirs) { + if (!dir.isDirectory) continue + val files = dir.listFiles { f -> f.extension in listOf("png", "jpg", "jpeg", "rpgmvp") } + ?: continue + val best = files.minByOrNull { it.name.length } ?: continue + if (best.extension == "rpgmvp") { + val decoded = decodeRpgmvp(best) ?: continue + return scaleToThumbnail(decoded) + } + val bmp = BitmapFactory.decodeFile(best.absolutePath) ?: continue + return scaleToThumbnail(bmp) + } + } + + // RGSS (XP/VX/VX Ace): look for titles in Game.ini or common file names + val rgssCandidates = listOf( + File(gameDir, "Title.png"), + File(gameDir, "title.png"), + File(gameDir, "Title.jpg"), + File(gameDir, "title.jpg"), + File(gameDir, "GameOver.png"), + ) + for (f in rgssCandidates) { + if (f.isFile) { + val bmp = BitmapFactory.decodeFile(f.absolutePath) ?: continue + return scaleToThumbnail(bmp) + } + } + + return null + } + + private fun decodeRpgmvp(file: File): Bitmap? { + return try { + val data = file.readBytes() + val header = "RPGMV\u0000".toByteArray() + val headerOffset = data.indexOfFirst { it == header[0] } + if (headerOffset < 0) return null + val imgStart = headerOffset + header.size + 8 + if (imgStart >= data.size) return null + BitmapFactory.decodeByteArray(data, imgStart, data.size - imgStart) + } catch (e: Exception) { + Log.w(TAG, "Failed to decode RPGMVP: ${file.name}", e) + null + } + } + + private fun scaleToThumbnail(bitmap: Bitmap): Bitmap { + val maxSize = 480 + val w = bitmap.width + val h = bitmap.height + if (w <= maxSize && h <= maxSize) return bitmap + val scale = maxOf(w, h).toFloat() / maxSize + val newW = (w / scale).toInt().coerceAtLeast(1) + val newH = (h / scale).toInt().coerceAtLeast(1) + return Bitmap.createScaledBitmap(bitmap, newW, newH, true) + } +} diff --git a/app/src/main/java/com/runestone/app/session/GameSessionManager.kt b/app/src/main/java/com/runestone/app/session/GameSessionManager.kt new file mode 100644 index 0000000..59e6120 --- /dev/null +++ b/app/src/main/java/com/runestone/app/session/GameSessionManager.kt @@ -0,0 +1,127 @@ +package com.runestone.app.session + +import android.content.Context +import android.util.Log +import com.runestone.app.data.db.PlayStatsEntity +import com.runestone.app.data.db.RunestoneDatabase +import com.runestone.app.util.AppScope +import kotlinx.coroutines.launch + +class GameSessionManager(private val context: Context) { + + companion object { + private const val TAG = "GameSession" + private const val PREFS_RUNESTONE = "runestone" + } + + private val db = RunestoneDatabase.getInstance(context) + private val playStatsDao = db.playStatsDao() + private val playTimeCache = mutableMapOf() + private val lastPlayedCache = mutableMapOf() + + data class SessionState( + val storageName: String?, + val gamePath: String?, + val startedAt: Long, + val isMinimized: Boolean, + val isPaused: Boolean, + val killRequest: String?, + ) + + fun getState(): SessionState { + val prefs = context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE) + return SessionState( + storageName = prefs.getString("active_game_storage", null), + gamePath = prefs.getString("active_game_path", null), + startedAt = prefs.getLong("active_game_started_at", 0L), + isMinimized = prefs.getBoolean("game_minimized", false), + isPaused = prefs.getString("paused_game", null) != null, + killRequest = prefs.getString("kill_game", null), + ) + } + + fun start(storageName: String, gamePath: String) { + val now = System.currentTimeMillis() + context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE).edit() + .putString("active_game_storage", storageName) + .putString("active_game_path", gamePath) + .putLong("active_game_started_at", now) + .putLong("active_game_last_seen_at", now) + .remove("paused_game").remove("game_minimized") + .apply() + AppScope.io.launch { playStatsDao.startSession(storageName, now) } + } + + fun finalize(reason: String): Boolean { + val prefs = context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE) + val storageName = prefs.getString("active_game_storage", null) ?: return false + val startedAt = prefs.getLong("active_game_started_at", 0L) + if (startedAt <= 0L) return false + + val elapsedSeconds = ((System.currentTimeMillis() - startedAt) / 1000L).coerceIn(0L, 14400L) + if (elapsedSeconds > 0L) { + playTimeCache[storageName] = (playTimeCache[storageName] ?: 0L) + elapsedSeconds + lastPlayedCache[storageName] = System.currentTimeMillis() + AppScope.io.launch { + playStatsDao.addPlayTime(storageName, elapsedSeconds) + playStatsDao.touchLastPlayed(storageName) + } + Log.i(TAG, "Play session finalized: $storageName +${elapsedSeconds}s ($reason)") + } + + prefs.edit() + .remove("active_game_storage").remove("active_game_path") + .remove("active_game_started_at").remove("active_game_last_seen_at") + .remove("paused_game").remove("game_minimized").remove("kill_game") + .apply() + return true + } + + fun clearResumeState(reason: String) { + finalize(reason) + context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE).edit() + .remove("paused_game").remove("game_minimized").remove("kill_game").apply() + } + + fun pause(gamePath: String) { + context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE).edit() + .putBoolean("game_minimized", true).putString("paused_game", gamePath).apply() + } + + fun requestKill(storageName: String) { + context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE).edit() + .putString("kill_game", storageName).apply() + } + + fun clearKillSignal() { + context.getSharedPreferences(PREFS_RUNESTONE, Context.MODE_PRIVATE).edit() + .remove("kill_game").apply() + } + + fun recordStop(storageName: String) { + val now = System.currentTimeMillis() + AppScope.io.launch { + val entity = playStatsDao.get(storageName) + val sessionStart = entity?.sessionStartedAt ?: 0L + if (sessionStart > 0L) { + val elapsed = (now - sessionStart) / 1000 + playStatsDao.addPlayTime(storageName, elapsed) + playTimeCache[storageName] = (playTimeCache[storageName] ?: 0L) + elapsed + } + } + } + + fun getPlayTime(storageName: String): Long = playTimeCache[storageName] ?: 0L + + fun getLastPlayed(storageName: String): Long = lastPlayedCache[storageName] ?: 0L + + /** Load all play stats from Room into memory cache. Call once at startup. */ + fun warmCache() { + AppScope.io.launch { + playStatsDao.getAll().forEach { e -> + playTimeCache[e.storageName] = e.totalSeconds + lastPlayedCache[e.storageName] = e.lastPlayedAt + } + } + } +} diff --git a/app/src/main/java/com/runestone/app/store/StoreCoordinator.kt b/app/src/main/java/com/runestone/app/store/StoreCoordinator.kt new file mode 100644 index 0000000..210cc5a --- /dev/null +++ b/app/src/main/java/com/runestone/app/store/StoreCoordinator.kt @@ -0,0 +1,508 @@ +package com.runestone.app.store + +import android.app.Activity +import android.app.Notification +import android.app.NotificationManager +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Build +import android.util.Log +import com.runestone.app.provider.AvailableGame +import com.runestone.app.provider.DownloadManager +import com.runestone.app.provider.ExtractionManager +import com.runestone.app.provider.SourcesManager +import com.runestone.app.services.GameMetadataService +import com.runestone.app.services.StoreDownloadService +import com.runestone.app.workspace.WorkspaceManager +import com.runestone.app.util.AppScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.json.JSONObject +import java.io.File +import java.security.MessageDigest +import java.util.zip.ZipFile + +class StoreCoordinator( + private val activity: Activity, + private val workspaceManager: WorkspaceManager, + private val downloadManager: DownloadManager, + private val extractionManager: ExtractionManager, + private val sourcesManager: SourcesManager, + private val metadataService: GameMetadataService, + private val callbacks: Callbacks, +) { + companion object { + private const val TAG = "StoreCoordinator" + private const val NOTIFICATION_CHANNEL = "runestone_downloads" + private const val NOTIFICATION_ID_DOWNLOAD = 2001 + } + + interface Callbacks { + fun refreshGames() + fun refreshStoreUI() + fun pushDetailOverlayUpdate(gameId: String) + fun installedStoreKeys(): Set + fun getAvailableGames(): List + fun getGames(): List + fun getDetailOverlay(): Any? + } + + data class InstallProgress( + val filesExtracted: Int, + val totalFiles: Int, + val currentFile: String, + ) + + var downloadProgressMap = mutableMapOf() + var installProgressMap = mutableMapOf() + var availableGames: List = emptyList() + var storeMetadataInFlight = mutableSetOf() + var storeMetadataLoading = false + var storeMetadataRenderScheduled = false + var availableGamesScrollY = 0 + var storeGridColumns = 2 + var isLoadingGames = false + var gamesErrorMessage: String? = null + + private val lastStoreProgressRenderAt = mutableMapOf() + private val lastStoreProgressPercent = mutableMapOf() + private var downloadReceiverRegistered = false + + private val downloadReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val gameId = intent.getStringExtra(StoreDownloadService.EXTRA_GAME_ID) ?: return + val stateName = intent.getStringExtra(StoreDownloadService.EXTRA_STATE) ?: DownloadManager.DownloadState.IDLE.name + val state = runCatching { DownloadManager.DownloadState.valueOf(stateName) }.getOrDefault(DownloadManager.DownloadState.IDLE) + val progress = DownloadManager.DownloadProgress( + bytesDownloaded = intent.getLongExtra(StoreDownloadService.EXTRA_BYTES, downloadManager.getDownloadedBytes(gameId)), + totalBytes = intent.getLongExtra(StoreDownloadService.EXTRA_TOTAL, downloadManager.getTotalBytes(gameId)), + speed = intent.getFloatExtra(StoreDownloadService.EXTRA_SPEED, 0f), + state = state, + error = intent.getStringExtra(StoreDownloadService.EXTRA_ERROR), + ) + downloadProgressMap[gameId] = progress + when (intent.action) { + StoreDownloadService.ACTION_COMPLETE -> { + val path = intent.getStringExtra(StoreDownloadService.EXTRA_FILE_PATH) + if (path != null) startExtraction(gameId, path) + } + StoreDownloadService.ACTION_ERROR -> showErrorNotification(gameId, progress.error ?: "Download failed") + } + renderAvailableGamesProgress("download:$gameId", progressPercent(progress.bytesDownloaded, progress.totalBytes), force = state != DownloadManager.DownloadState.DOWNLOADING) + callbacks.pushDetailOverlayUpdate(gameId) + } + } + + fun registerDownloadReceiver() { + if (downloadReceiverRegistered) return + val filter = IntentFilter().apply { + addAction(StoreDownloadService.ACTION_PROGRESS) + addAction(StoreDownloadService.ACTION_COMPLETE) + addAction(StoreDownloadService.ACTION_ERROR) + } + if (Build.VERSION.SDK_INT >= 33) { + activity.registerReceiver(downloadReceiver, filter, Context.RECEIVER_NOT_EXPORTED) + } else { + activity.registerReceiver(downloadReceiver, filter) + } + downloadReceiverRegistered = true + } + + fun unregisterDownloadReceiver() { + if (downloadReceiverRegistered) { + activity.unregisterReceiver(downloadReceiver) + downloadReceiverRegistered = false + } + } + + fun setupDownloadCallbacks() { + downloadManager.setCallback(object : DownloadManager.DownloadCallback { + override fun onProgress(gameId: String, progress: DownloadManager.DownloadProgress) { + activity.runOnUiThread { + downloadProgressMap[gameId] = progress + showDownloadNotification(gameId, progress) + renderAvailableGamesProgress( + key = "download:$gameId", + percent = progressPercent(progress.bytesDownloaded, progress.totalBytes), + ) + } + } + + override fun onComplete(gameId: String, filePath: String) { + activity.runOnUiThread { + downloadProgressMap[gameId] = DownloadManager.DownloadProgress( + bytesDownloaded = 0, totalBytes = 0, speed = 0f, + state = DownloadManager.DownloadState.COMPLETED + ) + renderAvailableGamesProgress("download:$gameId", 100, force = true) + showInstallNotification(gameId) + startExtraction(gameId, filePath) + } + } + + override fun onError(gameId: String, message: String) { + activity.runOnUiThread { + downloadProgressMap[gameId] = DownloadManager.DownloadProgress( + bytesDownloaded = 0, totalBytes = 0, speed = 0f, + state = DownloadManager.DownloadState.FAILED, error = message + ) + showErrorNotification(gameId, message) + renderAvailableGamesProgress("download:$gameId", 0, force = true) + } + } + }) + } + + fun showAvailableGames() { + availableGamesScrollY = 0 + isLoadingGames = true + gamesErrorMessage = null + callbacks.refreshStoreUI() + + sourcesManager.fetchGamesFromSources { games, error -> + activity.runOnUiThread { + availableGames = games + hydrateStoreDownloadStates() + isLoadingGames = false + gamesErrorMessage = error + callbacks.refreshStoreUI() + enrichStoreMetadata() + } + } + } + + fun handleDownload(game: AvailableGame) { + val url = game.downloadUrl ?: return + val fileName = "${sha256(game.id).take(32)}.zip" + downloadManager.setFileName(game.id, fileName) + val cachedFile = File(downloadManager.getDownloadDir(), fileName) + if (isReadableZip(cachedFile)) { + downloadProgressMap[game.id] = DownloadManager.DownloadProgress( + bytesDownloaded = cachedFile.length(), + totalBytes = cachedFile.length(), + speed = 0f, + state = DownloadManager.DownloadState.COMPLETED, + ) + startExtraction(game.id, cachedFile.absolutePath) + renderAvailableGamesProgress("download:${game.id}", 100, force = true) + return + } + val state = downloadManager.getState(game.id) + val action = if (state == DownloadManager.DownloadState.PAUSED) { + StoreDownloadService.ACTION_RESUME + } else { + StoreDownloadService.ACTION_START + } + activity.startForegroundService(Intent(activity, StoreDownloadService::class.java).apply { + this.action = action + putExtra(StoreDownloadService.EXTRA_GAME_ID, game.id) + putExtra(StoreDownloadService.EXTRA_TITLE, game.title) + putExtra(StoreDownloadService.EXTRA_URL, url) + putExtra(StoreDownloadService.EXTRA_FILE_NAME, fileName) + }) + downloadProgressMap[game.id] = DownloadManager.DownloadProgress( + bytesDownloaded = downloadManager.getDownloadedBytes(game.id), + totalBytes = downloadManager.getTotalBytes(game.id), + speed = 0f, + state = DownloadManager.DownloadState.DOWNLOADING + ) + renderAvailableGamesProgress("download:${game.id}", 0, force = true) + callbacks.pushDetailOverlayUpdate(game.id) + } + + fun handlePauseDownload(gameId: String) { + activity.startService(Intent(activity, StoreDownloadService::class.java).apply { + action = StoreDownloadService.ACTION_PAUSE + putExtra(StoreDownloadService.EXTRA_GAME_ID, gameId) + putExtra(StoreDownloadService.EXTRA_TITLE, availableGames.find { it.id == gameId }?.title ?: gameId) + }) + downloadProgressMap[gameId] = DownloadManager.DownloadProgress( + bytesDownloaded = downloadManager.getDownloadedBytes(gameId), + totalBytes = downloadManager.getTotalBytes(gameId), + speed = 0f, + state = DownloadManager.DownloadState.PAUSED + ) + callbacks.refreshStoreUI() + } + + private fun startExtraction(gameId: String, zipPath: String) { + val game = availableGames.find { it.id == gameId } ?: return + val outputDir = workspaceManager.allocateGameDir(game.title) + installProgressMap[gameId] = InstallProgress(0, 0, "Preparing archive") + renderAvailableGamesProgress("install:$gameId", 0, force = true) + callbacks.pushDetailOverlayUpdate(gameId) + + extractionManager.extract(zipPath, outputDir, object : ExtractionManager.ExtractionCallback { + override fun onProgress(progress: ExtractionManager.ExtractionProgress) { + Log.d(TAG, "Extracting: ${progress.currentFile} (${progress.filesExtracted}/${progress.totalFiles})") + activity.runOnUiThread { + installProgressMap[gameId] = InstallProgress( + filesExtracted = progress.filesExtracted, + totalFiles = progress.totalFiles, + currentFile = progress.currentFile, + ) + renderAvailableGamesProgress( + key = "install:$gameId", + percent = progressPercent(progress.filesExtracted.toLong(), progress.totalFiles.toLong()), + ) + callbacks.pushDetailOverlayUpdate(gameId) + val notification = Notification.Builder(activity, NOTIFICATION_CHANNEL) + .setSmallIcon(android.R.drawable.stat_sys_download) + .setContentTitle("Extracting ${game.title}") + .setContentText("${progress.filesExtracted}/${progress.totalFiles} files") + .setOngoing(true) + .build() + val nm = activity.getSystemService(NotificationManager::class.java) + nm.notify(NOTIFICATION_ID_DOWNLOAD, notification) + } + } + + override fun onComplete(result: ExtractionManager.ExtractionResult) { + activity.runOnUiThread { + try { + val gameDir = finalizeDownloadedGame(result, game) + val zipFile = File(zipPath) + if (zipFile.delete()) { + Log.i(TAG, "Deleted ZIP: $zipPath") + } + downloadManager.cleanup(gameId) + downloadProgressMap.remove(gameId) + installProgressMap.remove(gameId) + clearStoreProgress(gameId) + workspaceManager.invalidateGameScanCache() + callbacks.refreshGames() + callbacks.refreshStoreUI() + } catch (e: Exception) { + Log.e(TAG, "Installation failed", e) + discardFailedInstall(gameId, zipPath, result.outputDir, e.message ?: "Installation failed") + } + } + } + + override fun onError(message: String) { + activity.runOnUiThread { + Log.e(TAG, "Extraction failed: $message") + discardFailedInstall(gameId, zipPath, outputDir, "Extraction failed: $message") + } + } + }) + } + + private fun finalizeDownloadedGame(result: ExtractionManager.ExtractionResult, sourceGame: AvailableGame): File { + val engine = com.runestone.app.engine.EngineRegistry.detect(result.gameRoot) + val detectedType = engine?.let { com.runestone.app.data.EngineType.fromEngineId(it.id) } ?: com.runestone.app.data.EngineType.UNKNOWN + val declaredType = sourceGame.engine?.let { com.runestone.app.data.EngineType.fromEngineId(it) } ?: com.runestone.app.data.EngineType.UNKNOWN + val engineType = when { + detectedType != com.runestone.app.data.EngineType.UNKNOWN -> detectedType + declaredType != com.runestone.app.data.EngineType.UNKNOWN -> declaredType + else -> com.runestone.app.data.EngineType.UNKNOWN + } + require(engineType != com.runestone.app.data.EngineType.UNKNOWN) { "Could not detect a supported game engine" } + + val gameDir = result.outputDir + val originalDir = File(gameDir, "original") + require(!originalDir.exists()) { "Install workspace already contains original files" } + + if (result.gameRoot.canonicalFile == gameDir.canonicalFile) { + val extractedFiles = gameDir.listFiles()?.toList().orEmpty() + originalDir.mkdirs() + extractedFiles.forEach { file -> + require(file.renameTo(File(originalDir, file.name))) { + "Could not move ${file.name} into the installed game" + } + } + } else { + require(result.gameRoot.renameTo(originalDir)) { + "Could not move extracted game files into the install workspace" + } + } + + val fileCount = originalDir.walkTopDown().count { it.isFile } + require(fileCount > 0) { "Archive did not contain game files" } + + workspaceManager.ensureWorkspace(gameDir.name) + workspaceManager.ensureNoMedia(gameDir.name) + + File(gameDir, "manifest.json").writeText(JSONObject().apply { + put("storageName", gameDir.name) + put("engineType", engineType.name) + put("engineLabel", engineType.label) + put("fileCount", fileCount) + put("importedAt", System.currentTimeMillis()) + }.toString(2)) + + return gameDir + } + + private fun discardFailedInstall(gameId: String, zipPath: String, outputDir: File, message: String) { + outputDir.deleteRecursively() + File(zipPath).delete() + installProgressMap.remove(gameId) + clearStoreProgress(gameId) + downloadManager.cleanup(gameId) + downloadProgressMap[gameId] = DownloadManager.DownloadProgress( + bytesDownloaded = 0, totalBytes = 0, speed = 0f, + state = DownloadManager.DownloadState.FAILED, error = message, + ) + renderAvailableGamesProgress("download:$gameId", 0, force = true) + } + + private fun showDownloadNotification(gameId: String, progress: DownloadManager.DownloadProgress) { + val percent = if (progress.totalBytes > 0) { + (progress.bytesDownloaded * 100 / progress.totalBytes).toInt() + } else 0 + val game = availableGames.find { it.id == gameId } + val title = game?.title ?: gameId + val notification = Notification.Builder(activity, NOTIFICATION_CHANNEL) + .setSmallIcon(android.R.drawable.stat_sys_download) + .setContentTitle("Downloading $title") + .setContentText("$percent%") + .setOngoing(true) + .build() + val nm = activity.getSystemService(NotificationManager::class.java) + nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) + } + + private fun showInstallNotification(gameId: String) { + val game = availableGames.find { it.id == gameId } + val title = game?.title ?: gameId + val notification = Notification.Builder(activity, NOTIFICATION_CHANNEL) + .setSmallIcon(android.R.drawable.stat_sys_download_done) + .setContentTitle("Download complete") + .setContentText("$title — extracting...") + .setAutoCancel(true) + .build() + val nm = activity.getSystemService(NotificationManager::class.java) + nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) + } + + private fun showErrorNotification(gameId: String, error: String) { + val game = availableGames.find { it.id == gameId } + val title = game?.title ?: gameId + val notification = Notification.Builder(activity, NOTIFICATION_CHANNEL) + .setSmallIcon(android.R.drawable.stat_notify_error) + .setContentTitle("Download failed") + .setContentText("$title: $error") + .setAutoCancel(true) + .build() + val nm = activity.getSystemService(NotificationManager::class.java) + nm.notify(NOTIFICATION_ID_DOWNLOAD + gameId.hashCode() % 100, notification) + } + + private fun renderAvailableGamesProgress(key: String, percent: Int, force: Boolean = false) { + val now = System.currentTimeMillis() + val lastAt = lastStoreProgressRenderAt[key] ?: 0L + val lastPercent = lastStoreProgressPercent[key] + val shouldRender = force || + lastPercent == null || + percent >= 100 || + percent != lastPercent || + now - lastAt >= 10_000L + if (!shouldRender) return + lastStoreProgressRenderAt[key] = now + lastStoreProgressPercent[key] = percent + callbacks.refreshStoreUI() + } + + private fun clearStoreProgress(gameId: String) { + listOf("download:$gameId", "install:$gameId").forEach { key -> + lastStoreProgressRenderAt.remove(key) + lastStoreProgressPercent.remove(key) + } + } + + private fun progressPercent(done: Long, total: Long): Int { + if (total <= 0L) return 0 + return ((done * 100L) / total).coerceIn(0L, 100L).toInt() + } + + private fun sha256(value: String): String = + MessageDigest.getInstance("SHA-256") + .digest(value.toByteArray()) + .joinToString("") { "%02x".format(it) } + + private fun isReadableZip(file: File): Boolean { + if (!file.isFile || file.length() < 16L * 1024L) return false + return runCatching { + ZipFile(file).use { zip -> zip.entries().hasMoreElements() } + }.getOrDefault(false) + } + + fun enrichStoreMetadata() { + val targets = availableGames + .filter { it.coverUrl == null && it.title.isNotBlank() && it.id !in storeMetadataInFlight } + .take(6) + if (targets.isEmpty()) { + storeMetadataLoading = false + return + } + storeMetadataLoading = true + callbacks.refreshStoreUI() + targets.forEach { game -> + storeMetadataInFlight.add(game.id) + metadataService.fetchMetadataAsync(game.rawgQuery ?: game.title, game.engine) { metadata -> + activity.runOnUiThread { + storeMetadataInFlight.remove(game.id) + if (storeMetadataInFlight.isEmpty()) { + storeMetadataLoading = false + scheduleStoreMetadataRender() + } + } + if (metadata == null) return@fetchMetadataAsync + val cover = metadata.localCoverPath?.let { "local:$it" } ?: metadata.coverUrl + if (cover.isNullOrBlank()) return@fetchMetadataAsync + activity.runOnUiThread { + availableGames = availableGames.map { + if (it.id == game.id) it.copy( + coverUrl = cover, + description = it.description ?: metadata.description, + tags = if (it.tags.isNotEmpty()) it.tags else metadata.genres, + ) else it + } + scheduleStoreMetadataRender() + } + } + } + } + + private fun hydrateStoreDownloadStates() { + availableGames.forEach { game -> + val state = downloadManager.getState(game.id) + when (state) { + DownloadManager.DownloadState.IDLE -> Unit + DownloadManager.DownloadState.COMPLETED -> { + val outputFile = downloadManager.getOutputFile(game.id) + if (outputFile.isFile && game.id !in installProgressMap) { + downloadProgressMap[game.id] = DownloadManager.DownloadProgress( + bytesDownloaded = outputFile.length(), + totalBytes = outputFile.length(), + speed = 0f, + state = state, + ) + startExtraction(game.id, outputFile.absolutePath) + } + } + else -> downloadProgressMap[game.id] = DownloadManager.DownloadProgress( + bytesDownloaded = downloadManager.getDownloadedBytes(game.id), + totalBytes = downloadManager.getTotalBytes(game.id), + speed = 0f, + state = state, + ) + } + } + } + + private fun scheduleStoreMetadataRender() { + if (storeMetadataRenderScheduled) return + storeMetadataRenderScheduled = true + (activity as? android.os.Handler)?.let { handler -> + handler.postDelayed({ + storeMetadataRenderScheduled = false + callbacks.refreshStoreUI() + }, 250L) + } + } +} diff --git a/app/src/main/java/com/runestone/app/ui/AvailableGamesScreen.kt b/app/src/main/java/com/runestone/app/ui/AvailableGamesScreen.kt index 55a07fc..23de77f 100644 --- a/app/src/main/java/com/runestone/app/ui/AvailableGamesScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/AvailableGamesScreen.kt @@ -12,17 +12,22 @@ package com.runestone.app.ui import android.content.Context import android.content.Intent +import android.graphics.Canvas import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF import android.graphics.Typeface import android.graphics.drawable.GradientDrawable import android.net.Uri import android.text.Editable import android.text.InputType +import android.text.TextUtils import android.text.TextWatcher import android.view.Gravity import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.view.ViewOutlineProvider import android.view.animation.OvershootInterpolator import android.widget.EditText import android.widget.FrameLayout @@ -31,7 +36,7 @@ import android.widget.ImageView import android.widget.LinearLayout import android.widget.ScrollView import android.widget.TextView -import com.runestone.app.MainActivity +import com.runestone.app.store.StoreCoordinator import com.runestone.app.provider.AvailableGame import com.runestone.app.provider.DownloadManager import com.runestone.app.provider.DownloadOption @@ -46,19 +51,24 @@ class AvailableGamesScreen(private val context: Context) { isMetadataLoading: Boolean = false, errorMessage: String?, downloadStates: Map = emptyMap(), - installStates: Map = emptyMap(), + installStates: Map = emptyMap(), installedGameTitles: Set = emptySet(), + gridColumns: Int = 2, initialScrollY: Int = 0, onScrollYChanged: (Int) -> Unit = {}, + onGridColumnsChanged: (Int) -> Unit = {}, onRefresh: () -> Unit, onManageSources: () -> Unit, onProviderSettings: () -> Unit, onDownload: (AvailableGame) -> Unit, onPauseDownload: (String) -> Unit, onBack: () -> Unit, + onOpenDetail: (AvailableGame) -> Unit = {}, ): FrameLayout { val root = FrameLayout(context).apply { - setBackgroundColor(Color.argb(220, 8, 8, 10)) + setBackgroundColor(Color.argb(252, 3, 3, 4)) + isClickable = true + isFocusable = true layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, @@ -67,6 +77,9 @@ class AvailableGamesScreen(private val context: Context) { val mainLayout = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL + setBackgroundColor(Color.argb(248, 3, 3, 4)) + isClickable = true + isFocusable = true layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, @@ -74,11 +87,14 @@ class AvailableGamesScreen(private val context: Context) { } root.addView(mainLayout) - mainLayout.addView(makeTopBar(onBack, onManageSources, onProviderSettings)) + mainLayout.addView(makeTopBar(onBack, onManageSources, onProviderSettings, gridColumns, onGridColumnsChanged)) val scroll = ScrollView(context).apply { isFillViewport = false overScrollMode = ScrollView.OVER_SCROLL_NEVER + isVerticalScrollBarEnabled = false + clipToPadding = false + setPadding(0, 0, 0, dp(18)) layoutParams = LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f, ) @@ -91,7 +107,7 @@ class AvailableGamesScreen(private val context: Context) { val content = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL gravity = Gravity.CENTER_HORIZONTAL - setPadding(dp(12), dp(12), dp(12), dp(18)) + setPadding(dp(12), dp(4), dp(12), dp(34)) } scroll.addView(content, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, @@ -150,7 +166,7 @@ class AvailableGamesScreen(private val context: Context) { ) && (engineFilter == null || game.engine.equals(engineFilter, ignoreCase = true)) } - renderGameList(gamesContainer, filtered, downloadStates, installStates, onDownload, onPauseDownload, installedGameTitles) + renderGameList(gamesContainer, filtered, downloadStates, installStates, onDownload, onPauseDownload, installedGameTitles, onOpenDetail, gridColumns) } val searchRow = makeSearchBar { query -> @@ -167,7 +183,7 @@ class AvailableGamesScreen(private val context: Context) { content.addView(spacer(dp(8))) content.addView(metadataLoadingStrip()) } - content.addView(spacer(dp(8))) + content.addView(spacer(dp(10))) content.addView(gamesContainer, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) @@ -185,58 +201,86 @@ class AvailableGamesScreen(private val context: Context) { onBack: () -> Unit, onManageSources: () -> Unit, onProviderSettings: () -> Unit, + gridColumns: Int, + onGridColumnsChanged: (Int) -> Unit, ): LinearLayout = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(dp(12), dp(12), dp(12), dp(10)) - setBackgroundColor(Color.rgb(3, 3, 4)) + setPadding(dp(14), dp(10), dp(14), dp(8)) + setBackgroundColor(Color.TRANSPARENT) + + addView(TextView(context).apply { + text = "Store" + setTextColor(TEXT); textSize = 22f + letterSpacing = 0f; gravity = Gravity.CENTER_VERTICAL + typeface = Typeface.DEFAULT_BOLD + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) addView(TextView(context).apply { - text = "Back" - setTextColor(TEXT); textSize = 13f + text = "\u2699" + contentDescription = "Provider settings" + setTextColor(TEXT); textSize = 21f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(16), dp(10), dp(16), dp(10)) - background = glassBg(dp(12), alpha = 120, accent = true) - setOnClickListener { onBack() } + background = glassBg(dp(22), alpha = 55) + setOnClickListener { onProviderSettings() } makeLiquid(this) - }, LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + }, LinearLayout.LayoutParams(dp(46), dp(46)).apply { + marginEnd = dp(8) + }) - addView(TextView(context).apply { - text = "Available Games" - setTextColor(TEXT); textSize = 17f - letterSpacing = 0.08f; gravity = Gravity.CENTER - typeface = Typeface.create("serif", Typeface.BOLD) - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(GridDensityIcon(context, gridColumns).apply { + contentDescription = "Store grid density" + background = glassBg(dp(22), alpha = 55) + setOnClickListener { + animTap(this) + onGridColumnsChanged(if (gridColumns >= 4) 1 else gridColumns + 1) + } + makeLiquid(this) + }, LinearLayout.LayoutParams(dp(46), dp(46)).apply { + marginEnd = dp(8) + }) addView(TextView(context).apply { - text = "\u2699 OPTIONS" - setTextColor(TEXT); textSize = 13f + text = "SOURCES" + setTextColor(MUTED); textSize = 13f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(16), dp(10), dp(16), dp(10)) - background = glassBg(dp(12), alpha = 120, accent = true) - setOnClickListener { onProviderSettings() } + setPadding(dp(18), 0, dp(18), 0) + background = glassBg(dp(22), alpha = 55) + setOnClickListener { onManageSources() } makeLiquid(this) - }, LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + }, LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dp(46))) } private fun renderGameList( container: LinearLayout, games: List, downloadStates: Map, - installStates: Map, + installStates: Map, onDownload: (AvailableGame) -> Unit, onPauseDownload: (String) -> Unit, installedGameTitles: Set = emptySet(), + onOpenDetail: (AvailableGame) -> Unit = {}, + gridColumns: Int = 2, ) { container.removeAllViews() val screenW = context.resources.displayMetrics.widthPixels - val cardW = ((screenW - dp(44)) / 2).coerceAtLeast(dp(144)) - games.chunked(2).forEach { rowGames -> + val columns = gridColumns.coerceIn(1, 4) + val horizontalPadding = dp(58) + val gap = dp(if (columns >= 3) 8 else 10) + val cardW = ((screenW - horizontalPadding - gap * (columns - 1)) / columns) + .coerceAtLeast(dp(if (columns >= 4) 74 else 100)) + val cardH = when (columns) { + 1 -> dp(244) + 2 -> dp(186) + 3 -> dp(152) + else -> dp(132) + } + games.chunked(columns).forEach { rowGames -> val row = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER } - rowGames.forEach { game -> + rowGames.forEachIndexed { index, game -> row.addView( gameCard( game, @@ -245,20 +289,26 @@ class AvailableGamesScreen(private val context: Context) { onDownload, onPauseDownload, installedGameTitles, + onOpenDetail, cardW, + columns, ), - LinearLayout.LayoutParams(cardW, ViewGroup.LayoutParams.WRAP_CONTENT).apply { - setMargins(dp(4), 0, dp(4), dp(10)) + LinearLayout.LayoutParams(cardW, cardH).apply { + if (index < columns - 1) marginEnd = gap }, ) } - if (rowGames.size == 1) { - row.addView(spacer(cardW + dp(8))) + repeat(columns - rowGames.size) { emptyIndex -> + row.addView(View(context), LinearLayout.LayoutParams(cardW, 1).apply { + if (rowGames.size + emptyIndex < columns - 1) marginEnd = gap + }) } container.addView(row, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, - )) + ).apply { + bottomMargin = gap + }) } } @@ -267,25 +317,25 @@ class AvailableGamesScreen(private val context: Context) { ): LinearLayout { val searchRow = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL; gravity = Gravity.CENTER_VERTICAL - setPadding(dp(10), dp(2), dp(4), dp(2)) + setPadding(dp(18), dp(4), dp(6), dp(4)) background = GradientDrawable().apply { - setColor(Color.argb(30, 255, 255, 255)); cornerRadius = dp(10).toFloat() - setStroke(dp(1), Color.argb(30, 200, 180, 150)) + setColor(Color.argb(225, 5, 5, 7)); cornerRadius = dp(25).toFloat() + setStroke(dp(1), Color.argb(70, 150, 140, 125)) } } val searchInput = EditText(context).apply { - hint = "Search games..."; setHintTextColor(Color.argb(120, 200, 180, 130)) - setTextColor(TEXT); textSize = 13f + hint = "Search games..."; setHintTextColor(Color.argb(155, 204, 186, 148)) + setTextColor(TEXT); textSize = 16f inputType = InputType.TYPE_CLASS_TEXT; maxLines = 1; background = null - setPadding(0, dp(6), 0, dp(6)) + setPadding(0, dp(7), 0, dp(7)) } searchRow.addView(searchInput, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) val clearBtn = TextView(context).apply { - text = "X"; setTextColor(MUTED_DIM); textSize = 12f + text = "X"; setTextColor(MUTED_DIM); textSize = 13f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER setPadding(dp(8), dp(4), dp(8), dp(4)) - minimumWidth = dp(48); minimumHeight = dp(48) + minimumWidth = dp(44); minimumHeight = dp(44) visibility = View.INVISIBLE setOnClickListener { searchInput.setText("") } makeLiquid(this) @@ -320,8 +370,8 @@ class AvailableGamesScreen(private val context: Context) { fun updateSelection(selected: String?) { buttons.forEach { (engine, button) -> val isSelected = engine == selected - button.setTextColor(if (isSelected) Color.rgb(238, 207, 158) else MUTED) - button.background = glassBg(dp(8), alpha = if (isSelected) 120 else 60, accent = isSelected) + button.setTextColor(if (isSelected) Color.rgb(18, 17, 14) else MUTED) + button.background = glassBg(dp(20), alpha = if (isSelected) 210 else 42, accent = isSelected) } onFilterChanged(selected) } @@ -329,11 +379,11 @@ class AvailableGamesScreen(private val context: Context) { listOf(null).plus(engines).forEach { engine -> val button = TextView(context).apply { text = engine?.let(::engineLabel) ?: "ALL" - textSize = 11f + textSize = 13f typeface = Typeface.DEFAULT_BOLD gravity = Gravity.CENTER - setPadding(dp(12), dp(10), dp(12), dp(10)) - minimumHeight = dp(48) + setPadding(dp(15), dp(9), dp(15), dp(9)) + minimumHeight = dp(42) setOnClickListener { animTap(this) updateSelection(engine) @@ -344,7 +394,7 @@ class AvailableGamesScreen(private val context: Context) { row.addView(button, LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, ).apply { - marginEnd = dp(6) + marginEnd = dp(7) }) } @@ -389,38 +439,60 @@ class AvailableGamesScreen(private val context: Context) { private fun gameCard( game: AvailableGame, progress: DownloadManager.DownloadProgress?, - installProgress: MainActivity.InstallProgress?, + installProgress: StoreCoordinator.InstallProgress?, onDownload: (AvailableGame) -> Unit, onPauseDownload: (String) -> Unit, installedGameTitles: Set = emptySet(), + onOpenDetail: (AvailableGame) -> Unit = {}, forcedCardWidth: Int? = null, + gridColumns: Int = 2, ): LinearLayout { val screenW = context.resources.displayMetrics.widthPixels val cardW = forcedCardWidth ?: (screenW * 0.92f).toInt() + val columns = gridColumns.coerceIn(1, 4) + val cardH = when (columns) { + 1 -> dp(244) + 2 -> dp(186) + 3 -> dp(152) + else -> dp(132) + } val card = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL - layoutParams = LinearLayout.LayoutParams(cardW, ViewGroup.LayoutParams.WRAP_CONTENT) + layoutParams = LinearLayout.LayoutParams(cardW, cardH) background = GradientDrawable().apply { - setColor(Color.argb(220, 12, 11, 16)) - cornerRadius = dp(if (forcedCardWidth != null) 10 else 18).toFloat() - setStroke(dp(1), Color.argb(60, 207, 174, 126)) + setColor(Color.argb(245, 12, 11, 16)) + cornerRadius = dp(8).toFloat() + setStroke(dp(1), Color.argb(70, 145, 124, 100)) } gravity = Gravity.CENTER_HORIZONTAL + isClickable = true + isFocusable = true + clipToOutline = true + outlineProvider = ViewOutlineProvider.BACKGROUND + setOnClickListener { onOpenDetail(game) } } + val coverHeight = when (columns) { + 1 -> dp(154) + 2 -> dp(98) + 3 -> dp(76) + else -> dp(58) + } if (game.coverUrl != null) { val cover = ImageView(context).apply { scaleType = ImageView.ScaleType.CENTER_CROP background = GradientDrawable().apply { - setColor(Color.argb(60, 255, 255, 255)) - cornerRadius = dp(12).toFloat() + setColor(Color.argb(50, 255, 255, 255)) + cornerRadius = dp(8).toFloat() } + clipToOutline = true + outlineProvider = ViewOutlineProvider.BACKGROUND contentDescription = game.title } card.addView(cover, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, - if (forcedCardWidth != null) dp(64) else dp(140), + coverHeight, )) Thread { runCatching { @@ -432,53 +504,63 @@ class AvailableGamesScreen(private val context: Context) { cover.post { cover.setImageBitmap(bitmap) } } }.start() + } else { + card.addView(TextView(context).apply { + text = engineLabel(game.engine).take(2) + setTextColor(Color.rgb(238, 207, 158)); textSize = when (columns) { + 1 -> 40f + 2 -> 34f + 3 -> 25f + else -> 20f + } + letterSpacing = 0.12f + typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER + background = GradientDrawable().apply { + setColor(Color.argb(120, 38, 32, 28)) + } + }, LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, coverHeight)) } - // ── Top section: title + engine badge ── val topSection = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL setPadding( - dp(if (forcedCardWidth != null) 10 else 18), - dp(if (forcedCardWidth != null) 10 else 16), - dp(if (forcedCardWidth != null) 10 else 18), - dp(if (forcedCardWidth != null) 8 else 12), + dp(if (columns >= 3) 7 else 10), + dp(if (columns >= 3) 6 else 8), + dp(if (columns >= 3) 7 else 10), + dp(if (columns >= 3) 5 else 7), ) } topSection.addView(TextView(context).apply { - text = game.title; setTextColor(TEXT); textSize = if (forcedCardWidth != null) 12.5f else 19f - typeface = Typeface.create("serif", Typeface.BOLD); maxLines = 2 + text = game.title + setTextColor(TEXT); textSize = when (columns) { + 1 -> 18f + 2 -> 15f + 3 -> 12.5f + else -> 10.5f + } + typeface = Typeface.DEFAULT_BOLD + maxLines = if (columns >= 4) 1 else 2 + ellipsize = TextUtils.TruncateAt.END + includeFontPadding = false }) - val metaRow = LinearLayout(context).apply { - orientation = LinearLayout.HORIZONTAL; gravity = Gravity.CENTER_VERTICAL - setPadding(0, dp(if (forcedCardWidth != null) 6 else 8), 0, 0) - } - metaRow.addView(TextView(context).apply { - text = engineLabel(game.engine) - setTextColor(Color.rgb(238, 207, 158)); textSize = if (forcedCardWidth != null) 9f else 10f; typeface = Typeface.DEFAULT_BOLD - setPadding(dp(8), dp(3), dp(8), dp(3)) - background = GradientDrawable().apply { - setColor(Color.argb(60, 200, 170, 130)); cornerRadius = dp(6).toFloat() - setStroke(dp(1), Color.argb(70, 200, 170, 130)) + topSection.addView(TextView(context).apply { + text = cardMeta(game) + setTextColor(MUTED); textSize = when (columns) { + 1 -> 12.5f + 2 -> 12f + 3 -> 9.5f + else -> 8.5f } - }) - metaRow.addView(spacer(dp(10))) - metaRow.addView(TextView(context).apply { - text = game.sourceName; setTextColor(MUTED); textSize = 11f maxLines = 1 + ellipsize = TextUtils.TruncateAt.END + includeFontPadding = false + setPadding(0, dp(if (columns >= 3) 4 else 6), 0, 0) }) - if (game.fileSize != null) { - metaRow.addView(spacer(dp(10))) - metaRow.addView(TextView(context).apply { - text = formatBytes(game.fileSize) - setTextColor(MUTED); textSize = 11f - }) - } - topSection.addView(metaRow) card.addView(topSection, LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f)) // ── Progress bar (if downloading/installing) ── if (installProgress != null) { @@ -544,70 +626,90 @@ class AvailableGamesScreen(private val context: Context) { }) } - // ── Bottom action bar ── - val actionBar = LinearLayout(context).apply { - orientation = LinearLayout.HORIZONTAL; gravity = Gravity.CENTER - setPadding(dp(2), dp(2), dp(2), dp(2)) - background = GradientDrawable().apply { - setColor(Color.argb(60, 12, 11, 16)) - cornerRadii = floatArrayOf( - 0f, 0f, 0f, 0f, - dp(if (forcedCardWidth != null) 9 else 14).toFloat(), dp(if (forcedCardWidth != null) 9 else 14).toFloat(), - dp(if (forcedCardWidth != null) 9 else 14).toFloat(), dp(if (forcedCardWidth != null) 9 else 14).toFloat() - ) - } - } - val state = progress?.state when { installProgress != null -> { - actionBar.addView(makeActionBtn("INSTALLING", Color.rgb(170, 210, 230), Color.argb(40, 80, 120, 160)) {}) + card.addView(compactStatus("INSTALLING", Color.rgb(170, 210, 230))) } state == DownloadManager.DownloadState.DOWNLOADING -> { - actionBar.addView(makeActionBtn("PAUSE", Color.rgb(220, 200, 160), Color.argb(40, 200, 170, 130)) { - animTap(it); onPauseDownload(game.id) + card.addView(compactStatus("DOWNLOADING", Color.rgb(220, 200, 160)).apply { + setOnClickListener { animTap(this); onPauseDownload(game.id) } + makeLiquid(this) }) } state == DownloadManager.DownloadState.PAUSED -> { - actionBar.addView(makeActionBtn("RESUME", Color.rgb(200, 200, 160), Color.argb(40, 200, 170, 80)) { - animTap(it); onDownload(game) + card.addView(compactStatus("PAUSED", Color.rgb(200, 200, 160)).apply { + setOnClickListener { animTap(this); onDownload(game) } + makeLiquid(this) }) } state == DownloadManager.DownloadState.COMPLETED -> { - actionBar.addView(makeActionBtn("INSTALLING", Color.rgb(170, 210, 230), Color.argb(40, 80, 120, 160)) {}) + card.addView(compactStatus("INSTALLING", Color.rgb(170, 210, 230))) } state == DownloadManager.DownloadState.FAILED -> { - actionBar.addView(makeActionBtn("RETRY", Color.rgb(220, 160, 140), Color.argb(40, 200, 100, 80)) { - animTap(it); onDownload(game) - }) - } - isInstalled(game, installedGameTitles) -> { - actionBar.addView(makeActionBtn("INSTALLED", Color.rgb(140, 220, 140), Color.argb(40, 80, 160, 80)) {}) - } - game.downloadOptions.size > 1 -> { - actionBar.addView(makeActionBtn("GET (${game.downloadOptions.size})", Color.rgb(140, 220, 140), Color.argb(40, 80, 160, 80)) { - animTap(it); showDownloadOptionsDialog(game, onDownload) - }) - } - game.downloadOptions.isNotEmpty() -> { - actionBar.addView(makeActionBtn("GET", Color.rgb(140, 220, 140), Color.argb(40, 80, 160, 80)) { - animTap(it); onDownload(game) - }) - } - game.pageUrl != null -> { - actionBar.addView(makeActionBtn("OPEN PAGE", Color.rgb(190, 210, 230), Color.argb(40, 80, 120, 160)) { - animTap(it); openPage(game.pageUrl) + card.addView(compactStatus("FAILED", Color.rgb(220, 160, 140)).apply { + setOnClickListener { animTap(this); onDownload(game) } + makeLiquid(this) }) } - else -> { - actionBar.addView(makeActionBtn("NO DOWNLOADS", Color.rgb(160, 150, 130), Color.argb(40, 120, 110, 90)) {}) + } + + return card + } + + private fun compactStatus(label: String, textColor: Int): TextView = + TextView(context).apply { + text = label; setTextColor(textColor); textSize = 10f + typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER + setPadding(dp(8), dp(3), dp(8), dp(3)) + background = GradientDrawable().apply { + setColor(Color.argb(80, 12, 11, 16)) + setStroke(dp(1), Color.argb(45, 160, 140, 110)) } + layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(22)) } - card.addView(actionBar, LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, if (forcedCardWidth != null) dp(34) else dp(44))) + private fun cardMeta(game: AvailableGame): String { + val engine = engineLabel(game.engine) + val size = game.fileSize?.let(::formatBytes) + return listOf(engine, size).filterNotNull().joinToString(" | ") + } - return card + private class GridDensityIcon(context: Context, private val columns: Int) : View(context) { + private val stroke = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = context.resources.displayMetrics.density * 1.6f + color = Color.rgb(232, 229, 220) + } + private val fill = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.FILL + color = Color.argb(55, 232, 229, 220) + } + private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.rgb(232, 229, 220) + textAlign = Paint.Align.CENTER + typeface = Typeface.DEFAULT_BOLD + textSize = context.resources.displayMetrics.density * 10f + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val density = resources.displayMetrics.density + val count = columns.coerceIn(1, 4) + val left = width * 0.24f + val top = height * 0.28f + val right = width * 0.76f + val bottom = height * 0.66f + val gap = density * 2.4f + val cellW = (right - left - gap * (count - 1)) / count + repeat(count) { index -> + val x = left + index * (cellW + gap) + val rect = RectF(x, top, x + cellW, bottom) + canvas.drawRoundRect(rect, density * 2f, density * 2f, fill) + canvas.drawRoundRect(rect, density * 2f, density * 2f, stroke) + } + canvas.drawText(count.toString(), width / 2f, height * 0.86f, textPaint) + } } private fun makeActionBtn(label: String, textColor: Int, bgColor: Int, onClick: (View) -> Unit): TextView = @@ -795,46 +897,13 @@ class AvailableGamesScreen(private val context: Context) { } private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) 50 else 22, if (accent) 40 else 20, if (accent) 30 else 26)) - cornerRadius = dp(radius).toFloat() - setStroke(dp(1), Color.argb(if (accent) 80 else 45, - if (accent) 180 else 100, if (accent) 140 else 90, if (accent) 100 else 80)) - } - - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - v.animate().cancel() - v.animate().scaleX(1.04f).scaleY(1.04f).setDuration(120).start() - } - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f; val cy = v.height / 2f - v.translationX = (event.x - cx) * 0.04f - v.translationY = (event.y - cy) * 0.04f - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().scaleX(1f).scaleY(1f).translationX(0f).translationY(0f) - .setDuration(250).setInterpolator(OvershootInterpolator(1.6f)).start() - } - } - false - } - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) - private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } - private fun spacer(h: Int): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, if (h > 0) h else 1) - } + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } + + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) // ── Loading skeleton ── @@ -937,12 +1006,12 @@ class AvailableGamesScreen(private val context: Context) { .trim('-') } - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) private companion object { - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED + val MUTED_DIM: Int get() = Theme.MUTED_DIM val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/GameDetailOverlay.kt b/app/src/main/java/com/runestone/app/ui/GameDetailOverlay.kt new file mode 100644 index 0000000..cdbe043 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/GameDetailOverlay.kt @@ -0,0 +1,786 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.ui + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.net.Uri +import android.text.TextUtils +import android.view.Gravity +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.view.animation.OvershootInterpolator +import android.widget.FrameLayout +import android.widget.HorizontalScrollView +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.TextView +import com.runestone.app.store.StoreCoordinator +import com.runestone.app.provider.AvailableGame +import com.runestone.app.provider.DownloadManager +import com.runestone.app.provider.DownloadOption +import com.runestone.app.provider.HosterResolver + +class GameDetailOverlay( + context: Context, + initialGame: AvailableGame, + initialProgress: DownloadManager.DownloadProgress?, + initialInstallProgress: StoreCoordinator.InstallProgress?, + initialInstalledGameTitles: Set, + private val onDownload: (AvailableGame) -> Unit, + private val onPauseDownload: (String) -> Unit, + private val onClose: (AvailableGame) -> Unit, +) { + + enum class State { INFO, SOURCES, PROGRESS } + + private val context: Context = context.applicationContext + private val root: FrameLayout + private val panel: LinearLayout + private val contentHost: LinearLayout + private val actionBar: LinearLayout + + private var game: AvailableGame = initialGame + private var progress: DownloadManager.DownloadProgress? = initialProgress + private var installProgress: StoreCoordinator.InstallProgress? = initialInstallProgress + private var installedGameTitles: Set = initialInstalledGameTitles + private var currentState: State = State.INFO + + init { + root = FrameLayout(context).apply { + layoutParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + setBackgroundColor(Color.argb(220, 4, 4, 6)) + alpha = 0f + animate().alpha(1f).setDuration(220).start() + } + root.setOnClickListener { dismiss() } + + val screenW = context.resources.displayMetrics.widthPixels + val screenH = context.resources.displayMetrics.heightPixels + val panelW = (screenW * 0.94f).toInt() + val panelMaxH = (screenH * 0.86f).toInt() + + panel = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + layoutParams = FrameLayout.LayoutParams( + panelW, panelMaxH, Gravity.CENTER, + ).apply { setMargins(0, dp(20), 0, dp(20)) } + background = GradientDrawable().apply { + setColor(Color.argb(235, 14, 13, 18)) + cornerRadius = dp(18).toFloat() + setStroke(dp(1), Color.argb(80, 207, 174, 126)) + } + translationY = 40f + alpha = 0f + animate().translationY(0f).alpha(1f).setDuration(320) + .setInterpolator(OvershootInterpolator(1.1f)).start() + clipChildren = true + } + panel.setOnClickListener { /* swallow */ } + root.addView(panel) + + val scroll = ScrollView(context).apply { + isFillViewport = false + overScrollMode = ScrollView.OVER_SCROLL_NEVER + } + contentHost = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(18), dp(16), dp(18), dp(16)) + } + scroll.addView(contentHost) + panel.addView(scroll, LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f, + )) + + actionBar = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + setPadding(dp(18), dp(12), dp(18), dp(16)) + background = GradientDrawable().apply { + setColor(Color.argb(140, 8, 7, 12)) + cornerRadii = floatArrayOf( + 0f, 0f, 0f, 0f, + dp(18).toFloat(), dp(18).toFloat(), + dp(18).toFloat(), dp(18).toFloat(), + ) + } + } + panel.addView(actionBar, LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + )) + + render() + } + + fun view(): View = root + + fun update( + game: AvailableGame, + progress: DownloadManager.DownloadProgress?, + installProgress: StoreCoordinator.InstallProgress?, + installedGameTitles: Set, + ) { + val stateChanged = this.game.id != game.id + val wasComplete = this.progress?.state == DownloadManager.DownloadState.COMPLETED + this.game = game + this.progress = progress + this.installProgress = installProgress + this.installedGameTitles = installedGameTitles + + if (stateChanged) { + currentState = State.INFO + } else if (currentState == State.PROGRESS) { + val isNowDone = installProgress == null && + progress?.state == DownloadManager.DownloadState.COMPLETED + if (isNowDone && !wasComplete) { + currentState = State.INFO + } + } + render() + } + + private fun dismiss() { + root.animate().alpha(0f).setDuration(180).withEndAction { + (root.parent as? ViewGroup)?.removeView(root) + onClose(game) + }.start() + } + + private fun render() { + contentHost.removeAllViews() + actionBar.removeAllViews() + when (currentState) { + State.INFO -> renderInfo() + State.SOURCES -> renderSources() + State.PROGRESS -> renderProgress() + } + } + + // ──────────────────── INFO state ──────────────────── + + private fun renderInfo() { + // Cover art block + val coverFrame = FrameLayout(context).apply { + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, dp(180), + ) + background = GradientDrawable().apply { + setColor(Color.argb(180, 35, 28, 22)) + cornerRadius = dp(14).toFloat() + setStroke(dp(1), Color.argb(60, 207, 174, 126)) + } + } + if (game.coverUrl != null) { + val cover = ImageView(context).apply { + scaleType = ImageView.ScaleType.CENTER_CROP + contentDescription = game.title + } + coverFrame.addView(cover, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, + )) + game.coverUrl?.let { com.runestone.app.util.ImageLoader.load(it, cover, maxWidthPx = 720) } + } else { + val monogram = engineLabel(game.engine).take(3) + coverFrame.addView(TextView(context).apply { + text = monogram + setTextColor(Color.rgb(207, 174, 126)) + textSize = 56f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.1f + gravity = Gravity.CENTER + }, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, + )) + } + + contentHost.addView(coverFrame) + contentHost.addView(spacer(dp(14))) + + // Title + contentHost.addView(TextView(context).apply { + text = game.title + setTextColor(TEXT); textSize = 22f + typeface = Typeface.create("serif", Typeface.BOLD) + letterSpacing = 0.02f + }) + contentHost.addView(spacer(dp(10))) + + // Metadata grid (2 columns) + val grid = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + } + val left = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL } + val right = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL } + addMetaRow(left, "Engine", engineLabel(game.engine)) + addMetaRow(left, "Size", game.fileSize?.let(::formatBytes) ?: "Unknown") + addMetaRow(left, "Language", game.language ?: "Unknown") + addMetaRow(left, "License", game.license ?: "Unknown") + addMetaRow(right, "Source", game.sourceName) + addMetaRow(right, "ID", game.id) + addMetaRow(right, "Options", "${game.downloadOptions.size} available") + addMetaRow(right, "Status", if (isInstalled(game)) "INSTALLED" else "Available") + grid.addView(left, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + setMargins(0, 0, dp(8), 0) + }) + grid.addView(right, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { + setMargins(dp(8), 0, 0, 0) + }) + contentHost.addView(grid) + contentHost.addView(spacer(dp(14))) + + // Description + if (!game.description.isNullOrBlank()) { + contentHost.addView(TextView(context).apply { + text = game.description + setTextColor(TEXT); textSize = 13f + maxLines = 4 + ellipsize = TextUtils.TruncateAt.END + setLineSpacing(0f, 1.2f) + }) + contentHost.addView(spacer(dp(14))) + } + + // Screenshots placeholder (horizontal carousel of gradient placeholders) + val screenshotsLabel = TextView(context).apply { + text = "SCREENSHOTS" + setTextColor(MUTED); textSize = 10f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.1f + } + contentHost.addView(screenshotsLabel) + contentHost.addView(spacer(dp(8))) + + val ssScroll = HorizontalScrollView(context).apply { + isHorizontalScrollBarEnabled = false + overScrollMode = HorizontalScrollView.OVER_SCROLL_NEVER + } + val ssRow = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL } + repeat(4) { i -> + val ss = View(context).apply { + layoutParams = LinearLayout.LayoutParams(dp(140), dp(80)).apply { + setMargins(if (i == 0) 0 else dp(8), 0, 0, 0) + } + background = GradientDrawable().apply { + setColor(Color.argb(30 + i * 15, 207, 174, 126)) + cornerRadius = dp(8).toFloat() + } + } + ssRow.addView(ss) + } + ssScroll.addView(ssRow) + contentHost.addView(ssScroll) + + // Action bar + renderInfoActionBar() + } + + private fun renderInfoActionBar() { + val installed = isInstalled(game) + val state = progress?.state + + val (label, enabled, click) = when { + installProgress != null -> Triple("INSTALLING…", false, null as (() -> Unit)?) + state == DownloadManager.DownloadState.DOWNLOADING -> Triple("DOWNLOADING…", false, null as (() -> Unit)?) + state == DownloadManager.DownloadState.PAUSED -> Triple("RESUME", true, ({ onDownload(game) })) + state == DownloadManager.DownloadState.FAILED -> Triple("RETRY", true, ({ onDownload(game) })) + installed -> Triple("INSTALLED", false, null as (() -> Unit)?) + game.downloadOptions.isNotEmpty() -> Triple( + if (game.downloadOptions.size > 1) "CHOOSE SOURCE (${game.downloadOptions.size})" else "GET", + true, + if (game.downloadOptions.size > 1) ({ currentState = State.SOURCES; render() }) else ({ onDownload(game) }), + ) + game.pageUrl != null -> Triple("OPEN PAGE", true, ({ openPage(game.pageUrl!!) })) + else -> Triple("NO SOURCES", false, null as (() -> Unit)?) + } + + val primaryBg: Int + val primaryFg: Int + if (!enabled) { + primaryBg = Color.argb(60, 80, 70, 55) + primaryFg = Color.rgb(160, 150, 130) + } else when { + installed -> { primaryBg = Color.argb(80, 60, 130, 60); primaryFg = Color.rgb(140, 220, 140) } + state == DownloadManager.DownloadState.PAUSED || state == DownloadManager.DownloadState.FAILED -> { + primaryBg = Color.argb(200, 207, 174, 126); primaryFg = Color.rgb(20, 18, 14) + } + game.pageUrl != null && game.downloadOptions.isEmpty() -> { + primaryBg = Color.argb(120, 60, 90, 140); primaryFg = Color.rgb(190, 210, 230) + } + else -> { primaryBg = Color.argb(200, 207, 174, 126); primaryFg = Color.rgb(20, 18, 14) } + } + + val primary = TextView(context).apply { + text = label + setTextColor(primaryFg); textSize = 14f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(20), dp(14), dp(20), dp(14)) + background = GradientDrawable().apply { + setColor(primaryBg) + cornerRadius = dp(12).toFloat() + val r = Color.red(primaryFg); val g = Color.green(primaryFg); val b = Color.blue(primaryFg) + setStroke(dp(1), Color.argb(80, r, g, b)) + } + } + if (click != null) { + primary.isClickable = true + primary.isFocusable = true + primary.setOnClickListener { animTap(it); click() } + makeLiquid(primary) + } + actionBar.addView(primary, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + + val cancel = TextView(context).apply { + text = "CLOSE" + setTextColor(MUTED); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(14), dp(14), dp(14), dp(14)) + background = GradientDrawable().apply { + setColor(Color.argb(40, 207, 174, 126)) + cornerRadius = dp(12).toFloat() + setStroke(dp(1), Color.argb(45, 207, 174, 126)) + } + isClickable = true + isFocusable = true + setOnClickListener { animTap(it); dismiss() } + makeLiquid(this) + } + actionBar.addView(cancel, LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { setMargins(dp(10), 0, 0, 0) }) + } + + // ──────────────────── SOURCES state ──────────────────── + + private fun renderSources() { + contentHost.addView(TextView(context).apply { + text = "CHOOSE SOURCE" + setTextColor(ACCENT); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.1f + }) + contentHost.addView(spacer(dp(2))) + contentHost.addView(TextView(context).apply { + text = game.title + setTextColor(TEXT); textSize = 16f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + contentHost.addView(spacer(dp(10))) + + if (game.downloadOptions.isEmpty()) { + contentHost.addView(TextView(context).apply { + text = "No direct sources available." + setTextColor(MUTED); textSize = 12f + }) + } + + game.downloadOptions.forEach { option -> + val hostStatus = HosterResolver.isSupported(option.url) + val isSupported = hostStatus.supported + + val row = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(dp(12), dp(9), dp(12), dp(9)) + alpha = if (isSupported) 1f else 0.5f + background = GradientDrawable().apply { + setColor(Color.argb(if (isSupported) 50 else 22, 207, 174, 126)) + cornerRadius = dp(8).toFloat() + setStroke(dp(1), Color.argb(if (isSupported) 70 else 25, 207, 174, 126)) + } + if (isSupported) { + isClickable = true + isFocusable = true + setOnClickListener { + animTap(it) + val singleOptionGame = game.copy(downloadOptions = listOf(option)) + onDownload(singleOptionGame) + currentState = State.PROGRESS + render() + } + makeLiquid(this) + } + } + + val infoCol = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL } + infoCol.addView(TextView(context).apply { + text = option.name + setTextColor(TEXT); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + }) + if (!isSupported) { + infoCol.addView(TextView(context).apply { + text = "Not available on Android" + setTextColor(Color.rgb(200, 120, 100)); textSize = 9f + setPadding(0, dp(1), 0, 0) + }) + } + row.addView(infoCol, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + + row.addView(TextView(context).apply { + text = option.host + setTextColor(if (isSupported) ACCENT else Color.rgb(140, 100, 90)) + textSize = 9f + typeface = Typeface.DEFAULT_BOLD + setPadding(dp(6), dp(2), dp(6), dp(2)) + background = GradientDrawable().apply { + setColor(Color.argb(if (isSupported) 40 else 15, 200, 170, 130)) + cornerRadius = dp(4).toFloat() + setStroke(dp(1), Color.argb(if (isSupported) 50 else 15, 200, 170, 130)) + } + }) + + if (option.fileSize != null) { + row.addView(spacer(dp(6))) + row.addView(TextView(context).apply { + text = formatBytes(option.fileSize) + setTextColor(MUTED_DIM); textSize = 10f + }) + } + + contentHost.addView(row) + contentHost.addView(spacer(dp(4))) + } + + // Cancel/back + val back = TextView(context).apply { + text = "BACK" + setTextColor(MUTED); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(24), dp(10), dp(24), dp(10)) + background = GradientDrawable().apply { + setColor(Color.argb(40, 207, 174, 126)) + cornerRadius = dp(10).toFloat() + } + isClickable = true + isFocusable = true + setOnClickListener { + animTap(it) + currentState = State.INFO + render() + } + makeLiquid(this) + } + contentHost.addView(spacer(dp(8))) + contentHost.addView(back, LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { gravity = Gravity.CENTER_HORIZONTAL }) + } + + // ──────────────────── PROGRESS state ──────────────────── + + private fun renderProgress() { + contentHost.addView(TextView(context).apply { + text = "INSTALLING" + setTextColor(ACCENT); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.1f + }) + contentHost.addView(spacer(dp(4))) + contentHost.addView(TextView(context).apply { + text = game.title + setTextColor(TEXT); textSize = 20f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + contentHost.addView(spacer(dp(20))) + + val phase = computePhase() + contentHost.addView(TextView(context).apply { + text = phase.headline + setTextColor(TEXT); textSize = 16f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + }) + contentHost.addView(spacer(dp(8))) + contentHost.addView(TextView(context).apply { + text = phase.detail + setTextColor(MUTED); textSize = 12f + gravity = Gravity.CENTER + }) + contentHost.addView(spacer(dp(18))) + + // Progress bar + val percent = phase.percent.coerceIn(0, 100) + val trackW = (context.resources.displayMetrics.widthPixels * 0.94f - dp(36)).toInt() + val barTrack = FrameLayout(context).apply { + background = GradientDrawable().apply { + setColor(Color.argb(40, 255, 255, 255)) + cornerRadius = dp(4).toFloat() + } + layoutParams = LinearLayout.LayoutParams(trackW, dp(10)) + } + val barFill = View(context).apply { + background = GradientDrawable().apply { + setColor(phase.barColor) + cornerRadius = dp(4).toFloat() + } + } + barTrack.addView(barFill, FrameLayout.LayoutParams( + (trackW * percent / 100f).toInt().coerceAtLeast(dp(2)), dp(10), + )) + contentHost.addView(barTrack, LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, + ).apply { gravity = Gravity.CENTER_HORIZONTAL }) + + contentHost.addView(spacer(dp(8))) + contentHost.addView(TextView(context).apply { + text = "$percent%" + setTextColor(MUTED); textSize = 11f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + }) + + contentHost.addView(spacer(dp(20))) + + // Action bar + val cancel = TextView(context).apply { + text = "MINIMIZE" + setTextColor(MUTED); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(20), dp(12), dp(20), dp(12)) + background = GradientDrawable().apply { + setColor(Color.argb(40, 207, 174, 126)) + cornerRadius = dp(12).toFloat() + setStroke(dp(1), Color.argb(45, 207, 174, 126)) + } + isClickable = true + isFocusable = true + setOnClickListener { animTap(it); dismiss() } + makeLiquid(this) + } + actionBar.addView(cancel, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + + val secondary = when { + progress?.state == DownloadManager.DownloadState.DOWNLOADING -> TextView(context).apply { + text = "PAUSE" + setTextColor(Color.rgb(220, 200, 160)); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(20), dp(12), dp(20), dp(12)) + background = GradientDrawable().apply { + setColor(Color.argb(80, 200, 170, 130)) + cornerRadius = dp(12).toFloat() + setStroke(dp(1), Color.argb(120, 220, 200, 160)) + } + isClickable = true + isFocusable = true + setOnClickListener { animTap(it); onPauseDownload(game.id) } + makeLiquid(this) + } + progress?.state == DownloadManager.DownloadState.PAUSED -> TextView(context).apply { + text = "RESUME" + setTextColor(Color.rgb(200, 200, 160)); textSize = 12f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + gravity = Gravity.CENTER + setPadding(dp(20), dp(12), dp(20), dp(12)) + background = GradientDrawable().apply { + setColor(Color.argb(80, 200, 170, 80)) + cornerRadius = dp(12).toFloat() + } + isClickable = true + isFocusable = true + setOnClickListener { animTap(it); onDownload(game) } + makeLiquid(this) + } + else -> null + } + if (secondary != null) { + actionBar.addView(secondary, LinearLayout.LayoutParams( + 0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f, + ).apply { setMargins(dp(10), 0, 0, 0) }) + } + } + + private data class Phase( + val headline: String, + val detail: String, + val percent: Int, + val barColor: Int, + ) + + private fun computePhase(): Phase { + val p = progress + val ip = installProgress + val state = p?.state + return when { + ip != null -> { + val pct = if (ip.totalFiles > 0) + (ip.filesExtracted * 100 / ip.totalFiles).coerceIn(0, 100) + else 0 + Phase( + headline = "Installing…", + detail = "${ip.filesExtracted} / ${ip.totalFiles} files", + percent = pct, + barColor = Color.argb(200, 126, 190, 207), + ) + } + state == DownloadManager.DownloadState.DOWNLOADING && p != null -> { + val pct = if (p.totalBytes > 0) + (p.bytesDownloaded * 100 / p.totalBytes).toInt() + else 0 + Phase( + headline = "Downloading…", + detail = "${formatBytes(p.bytesDownloaded)} / ${formatBytes(p.totalBytes)} · ${formatBytes(p.speed.toLong())}/s", + percent = pct, + barColor = Color.argb(200, 207, 174, 126), + ) + } + state == DownloadManager.DownloadState.PAUSED && p != null -> { + val pct = if (p.totalBytes > 0) (p.bytesDownloaded * 100 / p.totalBytes).toInt() else 0 + Phase( + headline = "Paused", + detail = "Tap RESUME to continue", + percent = pct, + barColor = Color.argb(140, 200, 170, 80), + ) + } + state == DownloadManager.DownloadState.FAILED -> Phase( + headline = "Download failed", + detail = p?.error ?: "Unknown error", + percent = 0, + barColor = Color.argb(180, 200, 100, 80), + ) + state == DownloadManager.DownloadState.COMPLETED -> Phase( + headline = "Finalizing…", + detail = "Starting install", + percent = 100, + barColor = Color.argb(200, 126, 190, 207), + ) + else -> Phase("Preparing…", "", 0, Color.argb(120, 207, 174, 126)) + } + } + + private fun engineLabel(engine: String?): String = when (engine?.lowercase()) { + "mv", "rpgmaker_mv" -> "MV" + "mz", "rpgmaker_mz" -> "MZ" + "vx", "rgss_vx" -> "VX" + "vxace", "rgss_vx_ace", "rgss3" -> "VX ACE" + "xp", "rgss", "rgss_xp" -> "XP" + "2000", "2003", "easyrpg" -> "2K" + "renpy" -> "REN'PY" + "wolf", "wolfrpg", "wolf_rpg", "wolf_rpg_editor" -> "WOLF" + "kirikiri", "kirikiri2", "kirikiri_z", "kag", "xp3" -> "KAG" + "unity", "unity3d" -> "UNITY" + "unreal", "ue4", "ue5", "unreal_engine" -> "UNREAL" + "gamemaker", "game_maker", "gms", "gms2" -> "GMS" + "ags", "adventure_game_studio" -> "AGS" + "nscripter", "onscripter" -> "ONS" + "rpgmaker" -> "RPGM" + "html", "html5" -> "HTML" + null, "" -> "OTHER" + else -> engine.orEmpty().take(8).uppercase() + } + + private fun formatBytes(bytes: Long): String { + val gb = 1024.0 * 1024.0 * 1024.0; val mb = 1024.0 * 1024.0 + return if (bytes >= gb) String.format("%.2f GB", bytes / gb) else String.format("%.1f MB", bytes / mb) + } + + // ──────────────────── helpers ──────────────────── + + private fun addMetaRow(parent: LinearLayout, label: String, value: String) { + val row = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(4), 0, dp(4)) + } + row.addView(TextView(context).apply { + text = label + setTextColor(MUTED); textSize = 10f + typeface = Typeface.DEFAULT_BOLD + letterSpacing = 0.05f + }, LinearLayout.LayoutParams(dp(72), ViewGroup.LayoutParams.WRAP_CONTENT)) + row.addView(TextView(context).apply { + text = value + setTextColor(TEXT); textSize = 12f + maxLines = 1 + ellipsize = TextUtils.TruncateAt.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + parent.addView(row) + } + + private fun isInstalled(game: AvailableGame): Boolean { + val keys = installedGameTitles.map { normalizeKey(it) }.toSet() + return normalizeKey(game.title) in keys || + normalizeKey(game.id) in keys || + game.title in installedGameTitles || + game.id in installedGameTitles + } + + private fun openPage(url: String) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + context.startActivity(intent) + } + + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) + + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) + + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } + + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } + + private fun normalizeKey(value: String): String = + value.lowercase() + .replace(Regex("[^a-z0-9\\-]"), "-") + .replace(Regex("-+"), "-") + .trim('-') + + companion object { + private val TEXT: Int get() = Theme.TEXT + private val MUTED: Int get() = Theme.MUTED + private val MUTED_DIM: Int get() = Theme.MUTED_DIM + private val ACCENT: Int get() = Theme.active.accent + + fun show( + context: Context, + game: AvailableGame, + progress: DownloadManager.DownloadProgress?, + installProgress: StoreCoordinator.InstallProgress?, + installedGameTitles: Set, + onDownload: (AvailableGame) -> Unit, + onPauseDownload: (String) -> Unit, + onClose: (AvailableGame) -> Unit, + ): GameDetailOverlay { + val overlay = GameDetailOverlay( + context, game, progress, installProgress, installedGameTitles, + onDownload, onPauseDownload, onClose, + ) + val rootView = (context as? android.app.Activity)?.window?.decorView + ?.findViewById(android.R.id.content) + rootView?.addView(overlay.view(), FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + return overlay + } + } +} diff --git a/app/src/main/java/com/runestone/app/ui/GameFolderBrowserScreen.kt b/app/src/main/java/com/runestone/app/ui/GameFolderBrowserScreen.kt index ecf8d54..07aef0e 100644 --- a/app/src/main/java/com/runestone/app/ui/GameFolderBrowserScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/GameFolderBrowserScreen.kt @@ -291,31 +291,12 @@ class GameFolderBrowserScreen(private val context: Context) { setPadding(dp(8), dp(24), dp(8), dp(24)) } - private fun makeLiquid(view: View) { - if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> v.animate().scaleX(1.015f).scaleY(1.015f).setDuration(80).start() - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> - v.animate().scaleX(1f).scaleY(1f).setDuration(160).setInterpolator(OvershootInterpolator(1.2f)).start() - } - false - } - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } - private fun animTap(view: View) { - if (Theme.isReducedMotion(context)) return - view.animate().scaleX(0.98f).scaleY(0.98f).setDuration(45).withEndAction { - view.animate().scaleX(1f).scaleY(1f).setDuration(120).setInterpolator(OvershootInterpolator(1.2f)).start() - }.start() - } + private fun animTap(view: View) { com.runestone.app.ui.UiKit.animTap(view) } private fun glassBg(radius: Int, alpha: Int = 180, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(if (accent) Theme.active.accentBg else withAlpha(Theme.PANEL_BG, alpha)) - cornerRadius = radius.toFloat() - setStroke(dp(1), if (accent) Theme.active.accentStroke else Theme.active.panelStroke) - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) private fun separator(): View = View(context).apply { setBackgroundColor(Theme.active.panelStroke) @@ -561,11 +542,9 @@ class GameFolderBrowserScreen(private val context: Context) { } } - private fun spacer(height: Int = 0, width: Int = 0): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(dp(width), dp(height)) - } + private fun spacer(height: Int = 0, width: Int = 0): View = com.runestone.app.ui.UiKit.spacer(context, height) - private fun dp(value: Int): Int = (value * context.resources.displayMetrics.density).toInt() + private fun dp(value: Int): Int = com.runestone.app.ui.UiKit.dp(context, value) private fun dp(value: Float): Float = value * context.resources.displayMetrics.density private companion object { diff --git a/app/src/main/java/com/runestone/app/ui/GameListViewModel.kt b/app/src/main/java/com/runestone/app/ui/GameListViewModel.kt new file mode 100644 index 0000000..2d3c6c2 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/GameListViewModel.kt @@ -0,0 +1,145 @@ +package com.runestone.app.ui + +import android.app.Application +import android.content.Context +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewModelScope +import com.runestone.app.data.EngineType +import com.runestone.app.data.GameConfigService +import com.runestone.app.provider.AvailableGame +import com.runestone.app.session.GameSessionManager +import com.runestone.app.services.CoverExtractor +import com.runestone.app.services.GameMetadataService +import com.runestone.app.workspace.WorkspaceManager +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + +data class HomeUiState( + val cards: List = emptyList(), + val isLoading: Boolean = true, + val activeFilter: EngineType? = null, + val searchQuery: String = "", + val currentSort: SortMode = SortMode.DATE_ADDED, + val cardLayout: HomeCardLayout = HomeCardLayout.GRID_2, + val pausedGame: GameCardInfo? = null, +) + +class GameListViewModel( + application: Application, + private val workspaceManager: WorkspaceManager, + private val sessionManager: GameSessionManager, + private val metadataService: GameMetadataService, +) : AndroidViewModel(application) { + private val context = application + private val gameSizeCache = mutableMapOf() + private val gameSizeInFlight = mutableSetOf() + private val metadataWarmupInFlight = mutableSetOf() + var gameMetadataCache = mutableMapOf() + var availableGames: List = emptyList() + + private val _uiState = MutableStateFlow(HomeUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + + private val _games = MutableStateFlow>(emptyList()) + val games: StateFlow> = _games.asStateFlow() + + init { refreshGames() } + + fun refreshGames() { + viewModelScope.launch { + _uiState.value = _uiState.value.copy(isLoading = true) + val scanned = withContext(Dispatchers.IO) { workspaceManager.scanInstalledGames() } + _games.value = scanned + val cards = buildCards(scanned) + _uiState.value = _uiState.value.copy(cards = cards, isLoading = false) + } + } + + fun setFilter(engine: EngineType?) { _uiState.value = _uiState.value.copy(activeFilter = engine); applyFilters() } + fun setSearch(query: String) { _uiState.value = _uiState.value.copy(searchQuery = query); applyFilters() } + fun setSort(sort: SortMode) { _uiState.value = _uiState.value.copy(currentSort = sort); applyFilters() } + fun setLayout(layout: HomeCardLayout) { _uiState.value = _uiState.value.copy(cardLayout = layout) } + + fun applyFilters() { + val state = _uiState.value + var filtered = _games.value + if (state.activeFilter != null) filtered = filtered.filter { it.engineType == state.activeFilter } + if (state.searchQuery.isNotEmpty()) filtered = filtered.filter { it.displayName.contains(state.searchQuery, ignoreCase = true) } + filtered = when (state.currentSort) { + SortMode.NAME_ASC -> filtered.sortedBy { it.displayName.lowercase() } + SortMode.NAME_DESC -> filtered.sortedByDescending { it.displayName.lowercase() } + SortMode.RECENT -> filtered.sortedByDescending { sessionManager.getLastPlayed(it.storageName) } + SortMode.DATE_ADDED -> filtered.sortedByDescending { File(it.originalPath).parentFile?.lastModified() ?: 0L } + } + val cards = buildCards(filtered) + _uiState.value = state.copy(cards = cards, pausedGame = cards.find { it.isPaused }) + } + + private fun buildCards(games: List): List { + val state = _uiState.value + return games.map { g -> + val card = toCardInfo(g) + if (card.coverUrl != null) return@map card + val coverUrl = availableGames.firstOrNull { + it.title.equals(card.displayName, ignoreCase = true) || + it.title.contains(card.displayName, ignoreCase = true) || + card.displayName.contains(it.title, ignoreCase = true) + }?.coverUrl ?: gameMetadataCache[card.displayName]?.coverUrl + card.copy(coverUrl = coverUrl ?: extractFallbackCover(g)) + } + } + + private fun extractFallbackCover(g: WorkspaceManager.GameInfo): String? { + val path = CoverExtractor.extractFallbackCover(context, g.storageName, File(g.originalPath)) + return path?.let { "local:$it" } + } + + private fun toCardInfo(g: WorkspaceManager.GameInfo): GameCardInfo { + val perGame = runCatching { GameConfigService(context, workspaceManager).loadPerGame(g.storageName) }.getOrNull() + val metadata = perGame?.metadata?.takeIf { + it.gameTitle.isBlank() || metadataTitleMatches(g.displayName, it.gameTitle) + } + val coverUrl = perGame?.game?.customCoverPath?.let { if (File(it).exists()) "local:$it" else null } + ?: metadata?.localCoverPath?.takeIf { it.isNotEmpty() }?.let { if (File(it).exists()) "local:$it" else null } + val pausedPath = context.getSharedPreferences("runestone", Context.MODE_PRIVATE) + .getString("paused_game", null) + val isPaused = pausedPath != null && g.originalPath == pausedPath + return GameCardInfo( + storageName = g.storageName, displayName = metadata?.gameTitle?.takeIf { it.isNotEmpty() } ?: g.displayName, + engineType = g.engineType, fileCount = g.fileCount, fileSize = cachedGameSize(g), + totalPlayTime = sessionManager.getPlayTime(g.storageName), lastPlayedTimestamp = sessionManager.getLastPlayed(g.storageName), + isReady = true, coverUrl = coverUrl, isPaused = isPaused, + metadataDeveloper = metadata?.developer ?: "", metadataGenres = metadata?.genres ?: "", metadataYear = metadata?.releaseYear ?: "", + ) + } + + private fun cachedGameSize(g: WorkspaceManager.GameInfo): Long = gameSizeCache[g.storageName] ?: 0L + + private fun metadataTitleMatches(a: String, b: String): Boolean { + fun norm(v: String) = v.lowercase().replace("&", " and ").replace(Regex("[^a-z0-9]+"), " ").trim() + val i = norm(a); val m = norm(b) + if (i.isBlank() || m.isBlank()) return false + if (i == m || (i.length >= 6 && (i.contains(m) || m.contains(i)))) return true + val iT = i.split(" ").filter { it.length > 1 }.toSet() + val mT = m.split(" ").filter { it.length > 1 }.toSet() + return iT.isNotEmpty() && iT.intersect(mT).size >= minOf(2, iT.size) + } + + class Factory( + private val application: Application, + private val workspaceManager: WorkspaceManager, + private val sessionManager: GameSessionManager, + private val metadataService: GameMetadataService, + ) : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T = + GameListViewModel(application, workspaceManager, sessionManager, metadataService) as T + } +} diff --git a/app/src/main/java/com/runestone/app/ui/HomeScreen.kt b/app/src/main/java/com/runestone/app/ui/HomeScreen.kt index 6f09ede..3aa728e 100644 --- a/app/src/main/java/com/runestone/app/ui/HomeScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/HomeScreen.kt @@ -573,7 +573,7 @@ class HomeScreen(private val context: Context) { SortMode.NAME_ASC -> "A-Z" SortMode.NAME_DESC -> "Z-A" SortMode.RECENT -> "REC" - SortMode.DATE_ADDED -> "NEW" + SortMode.DATE_ADDED -> "ADDED" } val filterBtn = TextView(context).apply { text = " \u25A4 $filterLabel$searchBadge | $sortLabel "; setTextColor(ACCENT); textSize = 13f @@ -667,13 +667,7 @@ class HomeScreen(private val context: Context) { val screenW = displayMetrics.widthPixels // ── Helpers (defined first so all code below can reference them) ── - fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } fun dismissOverlay(v: FrameLayout, root: ViewGroup?) { v.animate().alpha(0f).translationY(120f).setDuration(200).withEndAction { root?.removeView(v) @@ -951,7 +945,7 @@ class HomeScreen(private val context: Context) { val columns = if (layout == HomeCardLayout.GRID_3) 3 else 2 val gap = dp(8) - val available = screenW - dp(20) - gap * (columns - 1) + val available = screenW - dp(28) - gap * (columns - 1) val cardW = available / columns return GridLayout(context).apply { columnCount = columns @@ -1196,65 +1190,13 @@ class HomeScreen(private val context: Context) { // ============================================================ private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) Color.red(Theme.active.accent) / 4 else 22, - if (accent) Color.green(Theme.active.accent) / 4 else 20, - if (accent) Color.blue(Theme.active.accent) / 4 else 26)) - cornerRadius = dp(radius).toFloat() - if (accent) { - setStroke(dp(1), Color.argb(80, - Color.red(Theme.active.accent), - Color.green(Theme.active.accent), - Color.blue(Theme.active.accent))) - } else { - setStroke(dp(1), Color.argb(45, 100, 90, 80)) - } - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) // ============================================================ // Liquid Glass touch — zoom + parallax on press-and-move // ============================================================ - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - v.animate().cancel() - v.scaleX = 1.35f - v.scaleY = 1.35f - v.elevation = dp(12).toFloat() - } - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f - val cy = v.height / 2f - val dx = (event.x - cx) * 0.25f - val dy = (event.y - cy) * 0.25f - v.translationX = dx - v.translationY = dy - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().cancel() - ObjectAnimator.ofFloat(v, "elevation", 0f).apply { - duration = 250 - interpolator = OvershootInterpolator(1.6f) - }.start() - v.animate() - .scaleX(1f).scaleY(1f) - .translationX(0f).translationY(0f) - .setDuration(250) - .setInterpolator(OvershootInterpolator(1.6f)) - .withEndAction { - v.scaleX = 1f; v.scaleY = 1f - v.translationX = 0f; v.translationY = 0f - v.elevation = 0f - } - .start() - } - } - false // let click through - } - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } // ============================================================ // Spin animation for gear icon @@ -1566,10 +1508,8 @@ class HomeScreen(private val context: Context) { // Helpers // ============================================================ - private fun spacer(h: Int): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(MATCH, if (h > 0) h else 1) - } - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) // ============================================================ // Inspect Overlay — long press hero card @@ -1788,9 +1728,9 @@ class HomeScreen(private val context: Context) { val MATCH = ViewGroup.LayoutParams.MATCH_PARENT val WRAP = ViewGroup.LayoutParams.WRAP_CONTENT val VERT = LinearLayout.VERTICAL - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED + val MUTED_DIM: Int get() = Theme.MUTED_DIM val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/ImportProgressScreen.kt b/app/src/main/java/com/runestone/app/ui/ImportProgressScreen.kt index 5e83a19..d38931e 100644 --- a/app/src/main/java/com/runestone/app/ui/ImportProgressScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/ImportProgressScreen.kt @@ -115,9 +115,7 @@ class ImportProgressScreen(private val context: Context) { return ImportProgressView(root, phaseView, fileView, countView) } - private fun spacer(h: Int): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, h) - } + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) } diff --git a/app/src/main/java/com/runestone/app/ui/ManageFilesScreen.kt b/app/src/main/java/com/runestone/app/ui/ManageFilesScreen.kt index ee4a16a..612bea5 100644 --- a/app/src/main/java/com/runestone/app/ui/ManageFilesScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/ManageFilesScreen.kt @@ -403,49 +403,12 @@ class ManageFilesScreen(private val context: Context) { // Glass touch helpers — ported from HomeScreen // ============================================================ - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - v.animate().cancel() - v.animate().scaleX(1.08f).scaleY(1.08f).setDuration(120).start() - } - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f - val cy = v.height / 2f - val dx = (event.x - cx) * 0.06f - val dy = (event.y - cy) * 0.06f - v.translationX = dx - v.translationY = dy - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().scaleX(1f).scaleY(1f) - .translationX(0f).translationY(0f) - .setDuration(250) - .setInterpolator(OvershootInterpolator(1.6f)) - .start() - } - } - false - } - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } - private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) 50 else 22, if (accent) 40 else 20, if (accent) 30 else 26)) - cornerRadius = dp(radius).toFloat() - setStroke(dp(1), Color.argb(if (accent) 80 else 45, - if (accent) 180 else 100, if (accent) 140 else 90, if (accent) 100 else 80)) - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) // ============================================================ // Base helpers @@ -457,24 +420,22 @@ class ManageFilesScreen(private val context: Context) { if (stroke != Color.TRANSPARENT) setStroke(dp(1), stroke) } - private fun spacer(height: Int = 0, width: Int = 0): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(dp(width), dp(height)) - } + private fun spacer(height: Int = 0, width: Int = 0): View = com.runestone.app.ui.UiKit.spacer(context, height) private fun formatBytes(bytes: Long): String { val gb = 1024.0 * 1024.0 * 1024.0; val mb = 1024.0 * 1024.0 return if (bytes >= gb) String.format("%.2f GB", bytes / gb) else String.format("%.1f MB", bytes / mb) } - private fun dp(value: Int): Int = (value * context.resources.displayMetrics.density).toInt() + private fun dp(value: Int): Int = com.runestone.app.ui.UiKit.dp(context, value) private companion object { val MATCH = ViewGroup.LayoutParams.MATCH_PARENT val WRAP = ViewGroup.LayoutParams.WRAP_CONTENT val PANEL = Color.argb(190, 12, 11, 16) - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED + val MUTED_DIM: Int get() = Theme.MUTED_DIM val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/OnboardingScreen.kt b/app/src/main/java/com/runestone/app/ui/OnboardingScreen.kt new file mode 100644 index 0000000..aaf7047 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/OnboardingScreen.kt @@ -0,0 +1,440 @@ +package com.runestone.app.ui + +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.net.Uri +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.view.animation.OvershootInterpolator +import android.widget.EditText +import android.widget.FrameLayout +import android.widget.LinearLayout +import android.widget.Switch +import android.widget.TextView +import android.widget.Toast +import java.util.Locale + +class OnboardingScreen(private val context: Context) { + + data class OnboardingResult( + val locale: String, + val selectedEngines: Set, + val rawgApiKey: String, + val installRtp: Boolean, + ) + + fun create(onComplete: (OnboardingResult) -> Unit): FrameLayout { + val root = FrameLayout(context).apply { + setBackgroundColor(BACKGROUND) + } + + val pageContainer = FrameLayout(context) + root.addView(pageContainer, FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)) + + val systemLocale = detectSystemLocale() + var currentLocale = systemLocale + var selectedEngines = mutableSetOf("mkxp-z", "onscripter") + var rawgApiKey = "" + var installRtp = false + + fun localizedText(key: String): String { + val config = context.resources.configuration + val localeObj = Locale(currentLocale) + val localizedConfig = android.content.res.Configuration(config).apply { setLocale(localeObj) } + val localizedRes = context.createConfigurationContext(localizedConfig).resources + val id = localizedRes.getIdentifier(key, "string", context.packageName) + return if (id != 0) localizedRes.getString(id) else key + } + + fun showPage(page: View) { + pageContainer.removeAllViews() + page.alpha = 0f + page.translationX = context.resources.displayMetrics.widthPixels.toFloat() + pageContainer.addView(page, FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)) + page.animate() + .alpha(1f) + .translationX(0f) + .setDuration(350) + .setInterpolator(OvershootInterpolator(0.8f)) + .start() + } + + fun nextButton(label: String, onClick: () -> Unit): TextView = TextView(context).apply { + text = label + setTextColor(Color.rgb(3, 3, 4)) + textSize = 15f + gravity = Gravity.CENTER + typeface = Typeface.DEFAULT_BOLD + setPadding(UiKit.dp(context, 20), UiKit.dp(context, 12), UiKit.dp(context, 20), UiKit.dp(context, 12)) + background = GradientDrawable().apply { + setColor(Theme.active.accent) + cornerRadius = UiKit.dp(context, 10).toFloat() + } + setOnClickListener { + UiKit.animTap(this) + onClick() + } + } + + lateinit var step2: () -> View + lateinit var step2a: () -> View + lateinit var step3: () -> View + lateinit var step4: () -> View + + step2 = { + val step = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(UiKit.dp(context, 28), UiKit.dp(context, 60), UiKit.dp(context, 28), UiKit.dp(context, 28)) + } + + step.addView(TextView(context).apply { + text = localizedText("onboarding_engines_title") + setTextColor(Theme.active.accent) + textSize = 24f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + step.addView(UiKit.spacer(context, 10)) + step.addView(TextView(context).apply { + text = localizedText("onboarding_engines_desc") + setTextColor(Theme.MUTED) + textSize = 13f + }) + step.addView(UiKit.spacer(context, 20)) + + val engines = listOf( + "mkxp-z" to localizedText("onboarding_engine_mkxpz"), + "easyrpg" to localizedText("onboarding_engine_easyrpg"), + "onscripter" to localizedText("onboarding_engine_onscripter"), + "renpy" to localizedText("onboarding_engine_renpy"), + "godot" to localizedText("onboarding_engine_godot"), + ) + for ((id, label) in engines) { + val row = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(UiKit.dp(context, 4), UiKit.dp(context, 6), UiKit.dp(context, 4), UiKit.dp(context, 6)) + } + val toggle = Switch(context).apply { + isChecked = id in selectedEngines + setOnCheckedChangeListener { _, checked -> + if (checked) selectedEngines.add(id) else selectedEngines.remove(id) + } + } + row.addView(toggle, LinearLayout.LayoutParams(WRAP, WRAP).apply { rightMargin = UiKit.dp(context, 10) }) + row.addView(TextView(context).apply { + text = label + setTextColor(Theme.TEXT) + textSize = 13f + }, LinearLayout.LayoutParams(0, WRAP, 1f)) + step.addView(row) + } + + val spacer = View(context) + step.addView(spacer, LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f)) + + val navRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.END + } + navRow.addView(nextButton(localizedText("onboarding_next")) { + showPage(if (selectedEngines.contains("mkxp-z")) step2a() else step3()) + }) + step.addView(navRow) + step + } + + step2a = { + val step = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(UiKit.dp(context, 28), UiKit.dp(context, 60), UiKit.dp(context, 28), UiKit.dp(context, 28)) + } + + step.addView(TextView(context).apply { + text = localizedText("onboarding_rtp_title") + setTextColor(Theme.active.accent) + textSize = 24f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + step.addView(UiKit.spacer(context, 10)) + step.addView(TextView(context).apply { + text = localizedText("onboarding_rtp_desc") + setTextColor(Theme.MUTED) + textSize = 13f + setLineSpacing(0f, 1.4f) + }) + step.addView(UiKit.spacer(context, 20)) + + val rtpRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(UiKit.dp(context, 4), UiKit.dp(context, 6), UiKit.dp(context, 4), UiKit.dp(context, 6)) + } + val rtpToggle = Switch(context).apply { + isChecked = false + setOnCheckedChangeListener { _, checked -> installRtp = checked } + } + rtpRow.addView(rtpToggle, LinearLayout.LayoutParams(WRAP, WRAP).apply { rightMargin = UiKit.dp(context, 10) }) + rtpRow.addView(TextView(context).apply { + text = localizedText("onboarding_rtp_toggle") + setTextColor(Theme.TEXT) + textSize = 13f + }, LinearLayout.LayoutParams(0, WRAP, 1f)) + step.addView(rtpRow) + + val spacer = View(context) + step.addView(spacer, LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f)) + val navRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.END + } + navRow.addView(nextButton(localizedText("onboarding_next")) { showPage(step3()) }) + step.addView(navRow) + step + } + + step3 = { + val step = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(UiKit.dp(context, 28), UiKit.dp(context, 60), UiKit.dp(context, 28), UiKit.dp(context, 28)) + } + + step.addView(TextView(context).apply { + text = localizedText("onboarding_scraping_title") + setTextColor(Theme.active.accent) + textSize = 24f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + step.addView(UiKit.spacer(context, 10)) + step.addView(TextView(context).apply { + text = localizedText("onboarding_scraping_desc") + setTextColor(Theme.MUTED) + textSize = 13f + setLineSpacing(0f, 1.4f) + }) + step.addView(UiKit.spacer(context, 8)) + + val rawgLink = TextView(context).apply { + text = "https://rawg.io/register" + setTextColor(Theme.active.accentBright) + textSize = 13f + paint.isUnderlineText = true + setOnClickListener { + context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://rawg.io/register"))) + } + } + step.addView(rawgLink) + step.addView(UiKit.spacer(context, 12)) + + step.addView(TextView(context).apply { + text = localizedText("onboarding_scraping_input_label") + setTextColor(Theme.MUTED) + textSize = 12f + }) + step.addView(UiKit.spacer(context, 6)) + + val inputRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + + val apiInput = EditText(context).apply { + hint = localizedText("onboarding_scraping_hint") + setHintTextColor(Theme.MUTED_DIM) + setTextColor(Theme.TEXT) + textSize = 14f + setPadding(UiKit.dp(context, 12), UiKit.dp(context, 10), UiKit.dp(context, 12), UiKit.dp(context, 10)) + background = GradientDrawable().apply { + setColor(Color.argb(40, 255, 255, 255)) + cornerRadius = UiKit.dp(context, 8).toFloat() + setStroke(UiKit.dp(context, 1), Theme.MUTED_DIM) + } + } + inputRow.addView(apiInput, LinearLayout.LayoutParams(0, WRAP, 1f)) + + val pasteBtn = TextView(context).apply { + text = localizedText("onboarding_paste") + setTextColor(Color.rgb(3, 3, 4)) + textSize = 13f + gravity = Gravity.CENTER + typeface = Typeface.DEFAULT_BOLD + setPadding(UiKit.dp(context, 14), UiKit.dp(context, 10), UiKit.dp(context, 14), UiKit.dp(context, 10)) + background = GradientDrawable().apply { + setColor(Theme.active.accent) + cornerRadius = UiKit.dp(context, 8).toFloat() + } + setOnClickListener { + val clip = (context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager)?.primaryClip + val text = clip?.getItemAt(0)?.text?.toString() + if (text != null && text.isNotBlank()) { + apiInput.setText(text) + apiInput.setSelection(text.length) + Toast.makeText(context, localizedText("onboarding_pasted"), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(context, localizedText("onboarding_clipboard_empty"), Toast.LENGTH_SHORT).show() + } + } + } + inputRow.addView(pasteBtn, LinearLayout.LayoutParams(WRAP, WRAP).apply { + leftMargin = UiKit.dp(context, 8) + }) + step.addView(inputRow) + + val spacer = View(context) + step.addView(spacer, LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f)) + + val navRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.END + } + navRow.addView(nextButton(localizedText("onboarding_next")) { + rawgApiKey = apiInput.text.toString().trim() + showPage(step4()) + }) + step.addView(navRow) + step + } + + step4 = { + val step = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.CENTER + setPadding(UiKit.dp(context, 28), UiKit.dp(context, 60), UiKit.dp(context, 28), UiKit.dp(context, 28)) + } + + step.addView(TextView(context).apply { + text = localizedText("onboarding_ready_title") + setTextColor(Theme.active.accent) + textSize = 28f + typeface = Typeface.create("serif", Typeface.BOLD) + gravity = Gravity.CENTER + }) + step.addView(UiKit.spacer(context, 12)) + step.addView(TextView(context).apply { + text = localizedText("onboarding_ready_desc") + setTextColor(Theme.MUTED) + textSize = 14f + gravity = Gravity.CENTER + setLineSpacing(0f, 1.4f) + }) + + val spacer = View(context) + step.addView(spacer, LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f)) + + val navRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + } + navRow.addView(nextButton(localizedText("onboarding_start")) { + onComplete(OnboardingResult( + locale = currentLocale, + selectedEngines = selectedEngines.toSet(), + rawgApiKey = rawgApiKey, + installRtp = installRtp, + )) + }) + step.addView(navRow) + step + } + + // ── Build Step 1 ── + val step1 = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(UiKit.dp(context, 28), UiKit.dp(context, 60), UiKit.dp(context, 28), UiKit.dp(context, 28)) + } + + step1.addView(TextView(context).apply { + text = localizedText("onboarding_welcome_title") + setTextColor(Theme.active.accent) + textSize = 28f + typeface = Typeface.create("serif", Typeface.BOLD) + }) + step1.addView(UiKit.spacer(context, 12)) + + step1.addView(TextView(context).apply { + text = localizedText("onboarding_welcome_desc") + setTextColor(Theme.MUTED) + textSize = 14f + setLineSpacing(0f, 1.4f) + }) + step1.addView(UiKit.spacer(context, 36)) + + step1.addView(TextView(context).apply { + text = localizedText("onboarding_language") + setTextColor(Theme.TEXT) + textSize = 14f + typeface = Typeface.DEFAULT_BOLD + }) + step1.addView(UiKit.spacer(context, 10)) + + val langRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + } + val langCodes = listOf("en" to "English", "es" to "Español", "pt" to "Português") + for ((code, label) in langCodes) { + val btn = TextView(context).apply { + text = label + textSize = 14f + gravity = Gravity.CENTER + typeface = Typeface.DEFAULT_BOLD + setPadding(UiKit.dp(context, 16), UiKit.dp(context, 10), UiKit.dp(context, 16), UiKit.dp(context, 10)) + setTextColor(Theme.active.accent) + val bgColor = Color.argb(30, Color.red(Theme.active.accent), Color.green(Theme.active.accent), Color.blue(Theme.active.accent)) + background = GradientDrawable().apply { + setColor(bgColor) + cornerRadius = UiKit.dp(context, 10).toFloat() + setStroke(UiKit.dp(context, 1), Color.argb(60, Color.red(Theme.active.accent), Color.green(Theme.active.accent), Color.blue(Theme.active.accent))) + } + if (code == currentLocale) alpha = 1f else alpha = 0.5f + setOnClickListener { + currentLocale = code + val children = langRow.getChildren() + children.forEach { it.alpha = 0.5f } + alpha = 1f + UiKit.animTap(this) + } + } + langRow.addView(btn, LinearLayout.LayoutParams(0, WRAP, 1f).apply { + leftMargin = UiKit.dp(context, 4) + rightMargin = UiKit.dp(context, 4) + }) + } + step1.addView(langRow) + + val spacer = View(context) + step1.addView(spacer, LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f)) + + val navRow = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.END + } + navRow.addView(nextButton(localizedText("onboarding_next")) { showPage(step2()) }) + step1.addView(navRow) + + showPage(step1) + return root + } + + private fun detectSystemLocale(): String { + val lang = Locale.getDefault().language + return when { + lang.startsWith("es") -> "es" + lang.startsWith("pt") -> "pt" + else -> "en" + } + } + + private fun ViewGroup.getChildren(): List = (0 until childCount).map { getChildAt(it) } + + private companion object { + val MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT + val WRAP = ViewGroup.LayoutParams.WRAP_CONTENT + val BACKGROUND = Color.rgb(3, 3, 4) + val Theme = com.runestone.app.ui.Theme + } +} diff --git a/app/src/main/java/com/runestone/app/ui/PerGameSettingsScreen.kt b/app/src/main/java/com/runestone/app/ui/PerGameSettingsScreen.kt index 1dbd321..7215106 100644 --- a/app/src/main/java/com/runestone/app/ui/PerGameSettingsScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/PerGameSettingsScreen.kt @@ -38,6 +38,7 @@ class PerGameSettingsScreen(private val context: Context) { onPickCover: ((pathCallback: (String) -> Unit) -> Unit) = {}, onFetchMetadata: ((Boolean) -> Unit) -> Unit = {}, onInstallPatch: ((zipCallback: (String) -> Unit) -> Unit) = {}, + onDeleteGame: (() -> Unit)? = null, ): LinearLayout { var current = config @@ -211,6 +212,32 @@ class PerGameSettingsScreen(private val context: Context) { }) content.addView(spacer(14)) + // ── Controller Profile ── + content.addView(sectionTitle("Controller Profile", "Button layout preset for this game")) + content.addView(compactDropdown("Preset", current.input.controllerPreset, + listOf("auto", "simplified", "full")) { v -> + current = current.copy(input = current.input.copy(controllerPreset = v)) + onConfigChanged(current) + }) + content.addView(spacer(6)) + content.addView(TextView(context).apply { + text = "Edit button positions in-game via the runtime menu (\u2022\u2022\u2022 button)." + setTextColor(MUTED); textSize = 11f; setPadding(dp(4), 0, dp(4), 0) + }) + content.addView(spacer(10)) + content.addView(switchPanel("Show L1/R1", "Display shoulder buttons on the touch overlay", + current.input.showL1R1) { checked -> + current = current.copy(input = current.input.copy(showL1R1 = checked)) + onConfigChanged(current) + }) + content.addView(spacer(10)) + content.addView(switchPanel("Show L2/R2", "Display trigger buttons on the touch overlay", + current.input.showL2R2) { checked -> + current = current.copy(input = current.input.copy(showL2R2 = checked)) + onConfigChanged(current) + }) + content.addView(spacer(14)) + // ── Video Section ── content.addView(sectionTitle("Video", "Display and rendering")) @@ -260,6 +287,43 @@ class PerGameSettingsScreen(private val context: Context) { onConfigChanged(current) } }) + content.addView(spacer(10)) + + // ── Visual Filter Preset ── + content.addView(filterPresetPanel(current.video.screenFilter) { presetId -> + current = current.copy(video = current.video.copy(screenFilter = presetId)) + onConfigChanged(current) + }) + content.addView(spacer(10)) + + content.addView(sliderPanel("Gamma", + "${(current.video.gamma * 100).toInt()}%") { label -> + slider(200, (current.video.gamma * 100).toInt().coerceIn(0, 200)) { progress -> + current = current.copy(video = current.video.copy(gamma = progress / 100f)) + label.text = "${(current.video.gamma * 100).toInt()}%" + onConfigChanged(current) + } + }) + content.addView(spacer(10)) + + content.addView(sliderPanel("Saturation", + "${(current.video.saturation * 100).toInt()}%") { label -> + slider(200, (current.video.saturation * 100).toInt().coerceIn(0, 200)) { progress -> + current = current.copy(video = current.video.copy(saturation = progress / 100f)) + label.text = "${(current.video.saturation * 100).toInt()}%" + onConfigChanged(current) + } + }) + content.addView(spacer(10)) + + content.addView(sliderPanel("Sharpness", + "${(current.video.sharpness * 100).toInt()}%") { label -> + slider(200, (current.video.sharpness * 100).toInt().coerceIn(0, 200)) { progress -> + current = current.copy(video = current.video.copy(sharpness = progress / 100f)) + label.text = "${(current.video.sharpness * 100).toInt()}%" + onConfigChanged(current) + } + }) content.addView(spacer(14)) // ── Audio Section ── @@ -678,6 +742,14 @@ class PerGameSettingsScreen(private val context: Context) { refreshPatchList = { buildPatchList() } content.addView(spacer(h = 14)) + // ── Danger Zone ── + if (onDeleteGame != null) { + content.addView(sectionTitle("Danger Zone", "Irreversible actions for this game")) + content.addView(deleteGamePanel(gameTitle) { + onDeleteGame() + }) + } + content.animate().alpha(1f).setDuration(300).setInterpolator(OvershootInterpolator(1.1f)).start() return root } @@ -749,6 +821,30 @@ class PerGameSettingsScreen(private val context: Context) { ) } + private fun compactDropdown(title: String, currentValue: String, options: List, onSelect: (String) -> Unit): LinearLayout = + LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(3), 0, dp(3)) + addView(TextView(context).apply { + text = title; setTextColor(TEXT); textSize = 13f; typeface = Typeface.DEFAULT_BOLD + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(TextView(context).apply { + text = currentValue; setTextColor(ACCENT); textSize = 12f + typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.END + setPadding(dp(8), dp(3), dp(8), dp(3)) + background = glassBg(6, alpha = 80) + makeLiquid(this) + setOnClickListener { + val idx = options.indexOf(text) + val nextIdx = (idx + 1) % options.size + text = options[nextIdx] + onSelect(options[nextIdx]) + animTap(this) + } + }) + } + private fun settingsPanel(build: LinearLayout.() -> Unit): LinearLayout = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL @@ -819,6 +915,61 @@ class PerGameSettingsScreen(private val context: Context) { addView(row) } + private fun filterPresetPanel(currentId: String, onChange: (String) -> Unit): LinearLayout = + settingsPanel { + val row = LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + row.addView( + TextView(context).apply { + text = "Filter Preset" + setTextColor(TEXT) + textSize = 15f + typeface = Typeface.DEFAULT_BOLD + }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f), + ) + + // Simple tap-to-cycle for Phase 1: Off <-> Clean Sharp + // Build list of available presets + val presets = com.runestone.app.filters.FilterManager.getAllPresets() + val currentIndex = presets.indexOfFirst { it.id == currentId } + .coerceAtLeast(0) + + val valueLabel = TextView(context).apply { + text = presets.getOrNull(currentIndex)?.displayName ?: "Off" + setTextColor(ACCENT) + textSize = 13f + gravity = Gravity.END + } + row.addView(valueLabel) + + addView(row) + + // Tap label to cycle + setOnClickListener { + val idx = presets.indexOfFirst { it.id == currentId } + val next = if (idx < 0 || idx >= presets.size - 1) 0 else idx + 1 + val nextPreset = presets[next] + valueLabel.text = nextPreset.displayName + onChange(nextPreset.id) + } + + // Show description + val desc = presets.getOrNull(currentIndex)?.description ?: "" + if (desc.isNotEmpty()) { + addView( + TextView(context).apply { + text = desc + setTextColor(MUTED) + textSize = 11f + setPadding(0, dp(4), 0, 0) + }, + ) + } + } + private fun resetRuntimePanel(onReset: () -> Unit): LinearLayout = settingsPanel { addView(TextView(context).apply { @@ -852,6 +1003,46 @@ class PerGameSettingsScreen(private val context: Context) { }) } + private fun deleteGamePanel(gameTitle: String, onRequestDelete: () -> Unit): LinearLayout = + settingsPanel { + addView(TextView(context).apply { + text = "Delete Game" + setTextColor(Color.rgb(220, 160, 160)) + textSize = 15f + typeface = Typeface.DEFAULT_BOLD + }) + addView(TextView(context).apply { + text = "Removes all installed files for $gameTitle from your device. You'll be asked whether to keep your save games." + setTextColor(MUTED) + textSize = 11f + setPadding(0, dp(3), 0, dp(10)) + }) + addView(TextView(context).apply { + text = "DELETE GAME" + setTextColor(Color.rgb(255, 200, 200)) + textSize = 12f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + setPadding(dp(16), dp(9), dp(16), dp(9)) + background = GradientDrawable().apply { + setColor(Color.argb(60, 200, 60, 60)) + cornerRadius = dp(8).toFloat() + setStroke(dp(1), Color.argb(90, 220, 80, 80)) + } + makeLiquid(this) + setOnClickListener { v -> + if (Theme.isReducedMotion(context)) { + v.performClick() + } else { + v.animate().scaleX(0.97f).scaleY(0.97f).setDuration(80).withEndAction { + v.animate().scaleX(1f).scaleY(1f).setInterpolator(OvershootInterpolator(2f)).setDuration(140).start() + onRequestDelete() + }.start() + } + } + }) + } + private fun layoutModePanel(selectedValue: String, onChange: (LayoutMode) -> Unit): LinearLayout = settingsPanel { addView(TextView(context).apply { @@ -1160,15 +1351,9 @@ class PerGameSettingsScreen(private val context: Context) { } } - private fun spacer(h: Int = 0, w: Int = 0): View { - val lp = LinearLayout.LayoutParams( - if (w > 0) dp(w) else ViewGroup.LayoutParams.MATCH_PARENT, - if (h > 0) dp(h) else ViewGroup.LayoutParams.WRAP_CONTENT, - ) - return View(context).apply { layoutParams = lp } - } + private fun spacer(h: Int = 0, w: Int = 0): View = com.runestone.app.ui.UiKit.spacer(context, if (h > 0) h else 0) - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return view.setOnTouchListener { v, event -> @@ -1195,15 +1380,14 @@ class PerGameSettingsScreen(private val context: Context) { } } + private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return + v.animate().scaleX(0.92f).scaleY(0.92f).setDuration(60).withEndAction { + v.animate().scaleX(1f).scaleY(1f).setDuration(100).setInterpolator(OvershootInterpolator()).start() + }.start() + } + private fun glassBg(radius: Int, alpha: Int = 200): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, 18, 18, 24)) - cornerRadius = dp(radius).toFloat() - setStroke(dp(1), Color.argb(40, - Color.red(Theme.active.accent), - Color.green(Theme.active.accent), - Color.blue(Theme.active.accent))) - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha) private inner class GlassSlider( context: Context, @@ -1316,8 +1500,8 @@ class PerGameSettingsScreen(private val context: Context) { } companion object { - private val TEXT = Color.rgb(232, 229, 220) - private val MUTED = Color.rgb(140, 130, 112) + private val TEXT: Int get() = Theme.TEXT + private val MUTED: Int get() = Theme.MUTED private val ACCENT: Int get() = Theme.active.accent private val MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT private val WRAP = ViewGroup.LayoutParams.WRAP_CONTENT diff --git a/app/src/main/java/com/runestone/app/ui/ProviderSettingsScreen.kt b/app/src/main/java/com/runestone/app/ui/ProviderSettingsScreen.kt index e2660ab..f5a45e1 100644 --- a/app/src/main/java/com/runestone/app/ui/ProviderSettingsScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/ProviderSettingsScreen.kt @@ -298,53 +298,20 @@ Example: } private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) 50 else 22, if (accent) 40 else 20, if (accent) 30 else 26)) - cornerRadius = dp(radius).toFloat() - setStroke(dp(1), Color.argb(if (accent) 80 else 45, - if (accent) 180 else 100, if (accent) 140 else 90, if (accent) 100 else 80)) - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - v.animate().cancel() - v.animate().scaleX(1.08f).scaleY(1.08f).setDuration(120).start() - } - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f; val cy = v.height / 2f - v.translationX = (event.x - cx) * 0.06f - v.translationY = (event.y - cy) * 0.06f - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().scaleX(1f).scaleY(1f).translationX(0f).translationY(0f) - .setDuration(250).setInterpolator(OvershootInterpolator(1.6f)).start() - } - } - false - } - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } - private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } - private fun spacer(h: Int): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, if (h > 0) h else 1) - } + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) private companion object { - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED + val MUTED_DIM: Int get() = Theme.MUTED_DIM val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/SettingsScreen.kt b/app/src/main/java/com/runestone/app/ui/SettingsScreen.kt index 6c1f1f5..3bf17c3 100644 --- a/app/src/main/java/com/runestone/app/ui/SettingsScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/SettingsScreen.kt @@ -286,10 +286,14 @@ class SettingsScreen(private val context: Context) { // 5. RPG MAKER — MV/MZ (WebView) // ──────────────────────────────────────────────── accordion(content, "RPG MAKER (MV/MZ)", "WebView settings for MV/MZ games.") { panel -> - panel.addView(switchPanel("Use WebGL2", "Enable WebGL2 rendering context.", current.useWebgl2) { + panel.addView(switchPanel("Use WebGL2", "Enable WebGL2 rendering context. (MZ only — ignored on MV.)", current.useWebgl2) { upd { copy(useWebgl2 = it) } }) panel.addView(spacerAfter(6)) + panel.addView(switchPanel("Force Canvas Renderer", "Emergency fallback: skip WebGL entirely and use 2D canvas. Use if a specific game breaks under WebGL.", current.forceCanvas) { + upd { copy(forceCanvas = it) } + }) + panel.addView(spacerAfter(6)) panel.addView(switchPanel("Decrypter & Readfiles", "Support encrypted RPG Maker assets.", current.decrypterAndReadfiles) { upd { copy(decrypterAndReadfiles = it) } }) @@ -348,10 +352,14 @@ class SettingsScreen(private val context: Context) { // 7. HTML GAMES (WebView) // ──────────────────────────────────────────────── accordion(content, "HTML GAMES", "WebView settings for HTML5/Tyrano/Construct games.") { panel -> - panel.addView(stubSwitchPanel("Use HTTP Server", "Serve games via local HTTP instead of file://.", current.useHttpServer) { + panel.addView(switchPanel("Use HTTP Server", "Serve games via local HTTP instead of file://. Required for Effekseer-based MZ games (Look Outside, Haven) to boot, and for any WASM that uses shared memory.", current.useHttpServer) { upd { copy(useHttpServer = it) } }) panel.addView(spacerAfter(6)) + panel.addView(switchPanel("Asm.js Effekseer", "Replace js/libs/effekseer.min.js with the asm.js runtime (no WASM, no particle effects). Required for any game whose main.js calls effekseer.initRuntime() on Android WebView.", current.useAsmjsEffekseer) { + upd { copy(useAsmjsEffekseer = it) } + }) + panel.addView(spacerAfter(6)) panel.addView(stubSwitchPanel("Preload", "Preload HTML resources for faster startup.", current.preload) { upd { copy(preload = it) } }) @@ -402,9 +410,12 @@ class SettingsScreen(private val context: Context) { // 9. APPLICATION // ──────────────────────────────────────────────── accordion(content, "APPLICATION", "App-wide preferences and features.") { panel -> - val themeOptions = listOf("Dark", "Light", "Wallpaper") val animFrameOptions = listOf("None", "Low", "Medium", "High") - panel.addView(compactDropdown("Theme", current.theme, themeOptions) { upd { copy(theme = it) } }) + panel.addView(themeSelector(context, current.theme) { mode -> + upd { copy(theme = mode) } + val tp = com.runestone.app.ui.theme.ThemeProvider.getInstance(context) + tp.setMode(runCatching { com.runestone.app.ui.theme.ThemeMode.valueOf(mode.uppercase()) }.getOrDefault(com.runestone.app.ui.theme.ThemeMode.DARK)) + }) panel.addView(spacerAfter(6)) panel.addView(compactDropdown("Animation Frames", current.animationFrames, animFrameOptions) { upd { copy(animationFrames = it) } }) panel.addView(spacerAfter(6)) @@ -1069,6 +1080,33 @@ Core runtimes: SDL2, mkxp-z, EasyRPG, Ruby, OpenAL, WebView }) } + private fun themeSelector(context: Context, currentValue: String, onSelect: (String) -> Unit): LinearLayout = + LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(3), 0, dp(3)) + addView(TextView(context).apply { + text = "Theme"; setTextColor(TEXT); textSize = 13f; typeface = Typeface.DEFAULT_BOLD + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + val modes = listOf("Dark", "Light", "System") + val label = TextView(context).apply { + val mode = currentValue.lowercase().replaceFirstChar { it.uppercase() } + text = if (mode in modes) mode else "Dark" + setTextColor(ACCENT); textSize = 12f; typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.END + setPadding(dp(8), dp(3), dp(8), dp(3)) + background = glassBg(6, alpha = 80) + makeLiquid(this) + setOnClickListener { + animTap(this) + val idx = modes.indexOf(text) + val nextIdx = (idx + 1) % modes.size + text = modes[nextIdx] + onSelect(modes[nextIdx].lowercase()) + } + } + addView(label) + } + private fun dropdownRow(title: String, currentValue: String, options: List, onSelect: (String) -> Unit): LinearLayout = settingsPanel { val row = LinearLayout(context).apply { @@ -1182,9 +1220,7 @@ Core runtimes: SDL2, mkxp-z, EasyRPG, Ruby, OpenAL, WebView } private fun spacer(height: Int = 0, width: Int = 0): View = - View(context).apply { - layoutParams = LinearLayout.LayoutParams(dp(width), dp(height)) - } + com.runestone.app.ui.UiKit.spacer(context, height) private fun spacerAfter(height: Int): View { val v = View(context) @@ -1192,52 +1228,14 @@ Core runtimes: SDL2, mkxp-z, EasyRPG, Ruby, OpenAL, WebView return v } - private fun dp(value: Int): Int = - (value * context.resources.displayMetrics.density).toInt() + private fun dp(value: Int): Int = com.runestone.app.ui.UiKit.dp(context, value) - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f; val cy = v.height / 2f - v.translationX = (event.x - cx) * 0.06f - v.translationY = (event.y - cy) * 0.06f - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().cancel() - v.animate().translationX(0f).translationY(0f) - .setDuration(200).setInterpolator(OvershootInterpolator(1.4f)).start() - } - else -> {} - } - false - } - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } - private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) Color.red(Theme.active.accent) / 4 else 22, - if (accent) Color.green(Theme.active.accent) / 4 else 20, - if (accent) Color.blue(Theme.active.accent) / 4 else 26)) - cornerRadius = dp(radius).toFloat() - if (accent) { - setStroke(dp(1), Color.argb(80, - Color.red(Theme.active.accent), - Color.green(Theme.active.accent), - Color.blue(Theme.active.accent))) - } else { - setStroke(dp(1), Color.argb(45, 100, 90, 80)) - } - } + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) // ============================================================ // Layout Preview @@ -1403,8 +1401,8 @@ Core runtimes: SDL2, mkxp-z, EasyRPG, Ruby, OpenAL, WebView private companion object { val MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT val WRAP = ViewGroup.LayoutParams.WRAP_CONTENT - val TEXT: Int = Color.rgb(232, 229, 220) - val MUTED: Int = Color.rgb(140, 130, 112) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/SettingsStore.kt b/app/src/main/java/com/runestone/app/ui/SettingsStore.kt index 0d34f9a..10b01a8 100644 --- a/app/src/main/java/com/runestone/app/ui/SettingsStore.kt +++ b/app/src/main/java/com/runestone/app/ui/SettingsStore.kt @@ -76,9 +76,11 @@ class SettingsStore(context: Context) { pixelFormatSpeed = prefs.getString("pixelFormatSpeed", defaults.pixelFormatSpeed) ?: defaults.pixelFormatSpeed, cropLeftY = prefs.getBoolean("cropLeftY", defaults.cropLeftY), useWebgl2 = prefs.getBoolean("useWebgl2", defaults.useWebgl2), + forceCanvas = prefs.getBoolean("forceCanvas", defaults.forceCanvas), decrypterAndReadfiles = prefs.getBoolean("decrypterAndReadfiles", defaults.decrypterAndReadfiles), usePreloadJs = prefs.getBoolean("usePreloadJs", defaults.usePreloadJs), - useHttpServer = prefs.getBoolean("useHttpServer", defaults.useHttpServer), + useHttpServer = prefs.getBoolean("useHttpServer_v2", defaults.useHttpServer), + useAsmjsEffekseer = prefs.getBoolean("useAsmjsEffekseer", defaults.useAsmjsEffekseer), preload = prefs.getBoolean("preload", defaults.preload), webgl = prefs.getBoolean("webgl", defaults.webgl), desktopMode = prefs.getBoolean("desktopMode", defaults.desktopMode), @@ -163,9 +165,11 @@ class SettingsStore(context: Context) { .putString("pixelFormatSpeed", settings.pixelFormatSpeed) .putBoolean("cropLeftY", settings.cropLeftY) .putBoolean("useWebgl2", settings.useWebgl2) + .putBoolean("forceCanvas", settings.forceCanvas) .putBoolean("decrypterAndReadfiles", settings.decrypterAndReadfiles) .putBoolean("usePreloadJs", settings.usePreloadJs) - .putBoolean("useHttpServer", settings.useHttpServer) + .putBoolean("useHttpServer_v2", settings.useHttpServer) + .putBoolean("useAsmjsEffekseer", settings.useAsmjsEffekseer) .putBoolean("preload", settings.preload) .putBoolean("webgl", settings.webgl) .putBoolean("desktopMode", settings.desktopMode) diff --git a/app/src/main/java/com/runestone/app/ui/SourcesScreen.kt b/app/src/main/java/com/runestone/app/ui/SourcesScreen.kt index 74c6563..1dd3eb3 100644 --- a/app/src/main/java/com/runestone/app/ui/SourcesScreen.kt +++ b/app/src/main/java/com/runestone/app/ui/SourcesScreen.kt @@ -14,7 +14,9 @@ import android.content.Context import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.GradientDrawable +import android.net.Uri import android.text.InputType +import android.text.TextUtils import android.view.Gravity import android.view.MotionEvent import android.view.View @@ -39,6 +41,7 @@ class SourcesScreen(private val context: Context) { ): LinearLayout { val root = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL + setBackgroundColor(Color.argb(252, 3, 3, 4)) layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, @@ -50,6 +53,9 @@ class SourcesScreen(private val context: Context) { val scroll = ScrollView(context).apply { isFillViewport = false overScrollMode = ScrollView.OVER_SCROLL_NEVER + isVerticalScrollBarEnabled = false + clipToPadding = false + setPadding(0, 0, 0, dp(26)) layoutParams = LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f, ) @@ -58,9 +64,12 @@ class SourcesScreen(private val context: Context) { val content = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL - setPadding(dp(16), dp(16), dp(16), dp(28)) + setPadding(dp(14), dp(10), dp(14), dp(34)) } - scroll.addView(content) + scroll.addView(content, ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + )) if (sources.isEmpty()) { content.addView(spacer(dp(36))) @@ -116,39 +125,37 @@ class SourcesScreen(private val context: Context) { LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(dp(16), dp(14), dp(16), dp(14)) - setBackgroundColor(Color.rgb(15, 14, 18)) + setPadding(dp(14), dp(10), dp(14), dp(8)) + setBackgroundColor(Color.TRANSPARENT) addView(TextView(context).apply { text = "Back" setTextColor(ACCENT); textSize = 15f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(8), dp(6), dp(8), dp(6)) - background = GradientDrawable().apply { - setColor(Color.argb(40, 207, 174, 126)) - cornerRadius = dp(8).toFloat() - setStroke(dp(1), Color.argb(60, 207, 174, 126)) - } + setPadding(dp(16), 0, dp(16), 0) + background = glassBg(dp(22), alpha = 55) setOnClickListener { onBack() } makeLiquid(this) - }, LinearLayout.LayoutParams(dp(84), ViewGroup.LayoutParams.WRAP_CONTENT)) + }, LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dp(46))) addView(TextView(context).apply { - text = "Game Sources" - setTextColor(TEXT); textSize = 21f - letterSpacing = 0.5f; gravity = Gravity.CENTER - typeface = Typeface.create("serif", Typeface.BOLD) + text = "Sources" + setTextColor(TEXT); textSize = 22f + letterSpacing = 0f; gravity = Gravity.CENTER + typeface = Typeface.DEFAULT_BOLD }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) - - addView(View(context), LinearLayout.LayoutParams(dp(84), 1)) } private fun sourceRow(source: ProviderSource, onRemove: (String) -> Unit): LinearLayout { val row = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(dp(14), dp(12), dp(14), dp(12)) - background = glassBg(dp(12)) + setPadding(dp(14), dp(12), dp(12), dp(12)) + background = glassBg(dp(14), alpha = 205) + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ) } // Status indicator @@ -158,8 +165,8 @@ class SourcesScreen(private val context: Context) { SourceStatus.PENDING -> Color.rgb(200, 180, 100) } val statusDot = TextView(context).apply { - text = "\u25CF"; setTextColor(statusColor); textSize = 10f - setPadding(0, 0, dp(8), 0) + text = "\u25CF"; setTextColor(statusColor); textSize = 11f + setPadding(0, 0, dp(10), 0) } row.addView(statusDot) @@ -168,25 +175,30 @@ class SourcesScreen(private val context: Context) { orientation = LinearLayout.VERTICAL } info.addView(TextView(context).apply { - text = source.name; setTextColor(TEXT); textSize = 14f - typeface = Typeface.DEFAULT_BOLD; maxLines = 1 + text = sourceDisplayName(source) + setTextColor(TEXT); textSize = 15f + typeface = Typeface.DEFAULT_BOLD + maxLines = 1 + ellipsize = TextUtils.TruncateAt.END }) - val displayUrl = if (source.url.length > 40) source.url.take(40) + "..." else source.url info.addView(TextView(context).apply { - text = displayUrl; setTextColor(MUTED_DIM); textSize = 11f - maxLines = 1; setPadding(0, dp(2), 0, 0) + text = source.url + setTextColor(MUTED_DIM); textSize = 11.5f + maxLines = 1 + ellipsize = TextUtils.TruncateAt.MIDDLE + setPadding(0, dp(3), 0, 0) }) row.addView(info, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) // Status badge row.addView(TextView(context).apply { - text = source.status.name + text = source.status.name.lowercase().replaceFirstChar { it.uppercase() } setTextColor(statusColor); textSize = 9f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(6), dp(3), dp(6), dp(3)) + setPadding(dp(8), dp(4), dp(8), dp(4)) background = GradientDrawable().apply { setColor(Color.argb(30, Color.red(statusColor), Color.green(statusColor), Color.blue(statusColor))) - cornerRadius = dp(4).toFloat() + cornerRadius = dp(7).toFloat() } }) @@ -195,7 +207,7 @@ class SourcesScreen(private val context: Context) { row.addView(TextView(context).apply { text = "X"; setTextColor(Color.rgb(200, 120, 120)); textSize = 14f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(8), dp(4), dp(8), dp(4)) + setPadding(dp(10), dp(6), dp(10), dp(6)) background = GradientDrawable().apply { setColor(Color.argb(30, 200, 80, 80)); cornerRadius = dp(6).toFloat() } @@ -212,19 +224,23 @@ class SourcesScreen(private val context: Context) { private fun addSourceButton(onAdd: (String) -> Unit): LinearLayout { val container = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL + layoutParams = LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ) } // Add Source dialog (hidden initially) val addDialog = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL setPadding(dp(16), dp(14), dp(16), dp(14)) - background = glassBg(dp(14), accent = true) + background = glassBg(dp(14), alpha = 215, accent = true) visibility = View.GONE } val urlInput = EditText(context).apply { hint = "Source URL (e.g. https://example.com/games.json)" - setHintTextColor(Color.argb(80, 200, 180, 130)) + setHintTextColor(Color.argb(130, 200, 180, 130)) setTextColor(TEXT); textSize = 13f inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI maxLines = 1; background = null @@ -274,8 +290,8 @@ class SourcesScreen(private val context: Context) { val toggleBtn = TextView(context).apply { text = "+ ADD SOURCE"; setTextColor(Color.rgb(220, 200, 160)); textSize = 13f typeface = Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER - setPadding(dp(16), dp(12), dp(16), dp(12)) - background = glassBg(dp(10), alpha = 120, accent = true) + setPadding(dp(16), 0, dp(16), 0) + background = glassBg(dp(22), alpha = 55) setOnClickListener { animTap(this) addDialog.visibility = if (addDialog.visibility == View.GONE) View.VISIBLE else View.GONE @@ -283,60 +299,39 @@ class SourcesScreen(private val context: Context) { makeLiquid(this) } container.addView(toggleBtn, LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + ViewGroup.LayoutParams.MATCH_PARENT, dp(46))) return container } - private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = - GradientDrawable().apply { - setColor(Color.argb(alpha, - if (accent) 50 else 22, if (accent) 40 else 20, if (accent) 30 else 26)) - cornerRadius = dp(radius).toFloat() - setStroke(dp(1), Color.argb(if (accent) 80 else 45, - if (accent) 180 else 100, if (accent) 140 else 90, if (accent) 100 else 80)) - } - - private fun makeLiquid(view: View) { if (Theme.isReducedMotion(context)) return - view.setOnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - v.animate().cancel() - v.animate().scaleX(1.08f).scaleY(1.08f).setDuration(120).start() - } - MotionEvent.ACTION_MOVE -> { - val cx = v.width / 2f; val cy = v.height / 2f - v.translationX = (event.x - cx) * 0.06f - v.translationY = (event.y - cy) * 0.06f - } - MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - v.animate().scaleX(1f).scaleY(1f).translationX(0f).translationY(0f) - .setDuration(250).setInterpolator(OvershootInterpolator(1.6f)).start() - } - } - false + private fun sourceDisplayName(source: ProviderSource): String { + val trimmed = source.name.trim() + if (trimmed.isNotBlank()) return trimmed + val host = runCatching { Uri.parse(source.url).host.orEmpty() }.getOrDefault("") + .removePrefix("www.") + return when { + host.isNotBlank() -> host + source.url.isNotBlank() -> source.url + else -> "Catalogue source" } } - private fun animTap(v: View) { if (Theme.isReducedMotion(context)) return - v.animate().scaleX(0.88f).scaleY(0.88f).setDuration(60) - .withEndAction { - v.animate().scaleX(1f).scaleY(1f).setDuration(180) - .setInterpolator(OvershootInterpolator(1.5f)).start() - }.start() - } + private fun glassBg(radius: Int, alpha: Int = 200, accent: Boolean = false): GradientDrawable = + com.runestone.app.ui.theme.ThemeProvider.getInstance(context).glassBg(radius, alpha, accent) - private fun spacer(h: Int): View = View(context).apply { - layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, if (h > 0) h else 1) - } + private fun makeLiquid(view: View) { com.runestone.app.ui.UiKit.makeLiquid(view) } + + private fun animTap(v: View) { com.runestone.app.ui.UiKit.animTap(v) } + + private fun spacer(h: Int): View = com.runestone.app.ui.UiKit.spacer(context, h) - private fun dp(v: Int): Int = (v * context.resources.displayMetrics.density).toInt() + private fun dp(v: Int): Int = com.runestone.app.ui.UiKit.dp(context, v) private companion object { const val DEFAULT_CATALOGUE_URL = SourcesManager.DEFAULT_PUBLIC_CATALOGUE_URL - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) + val TEXT: Int get() = Theme.TEXT + val MUTED: Int get() = Theme.MUTED + val MUTED_DIM: Int get() = Theme.MUTED_DIM val ACCENT: Int get() = Theme.active.accent } } diff --git a/app/src/main/java/com/runestone/app/ui/Theme.kt b/app/src/main/java/com/runestone/app/ui/Theme.kt index e186717..6e0dcb9 100644 --- a/app/src/main/java/com/runestone/app/ui/Theme.kt +++ b/app/src/main/java/com/runestone/app/ui/Theme.kt @@ -1,43 +1,36 @@ -/* - * Runestone - Multi-engine RPG Maker game launcher for Android - * Copyright (C) 2026 Gerson (KleirRampage45) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - package com.runestone.app.ui import android.content.Context import android.graphics.Color import android.provider.Settings -/** - * Shared UI theme constants and color palette system. - * Use these instead of duplicating color values across screens. - */ +import com.runestone.app.ui.theme.ThemeColors +import com.runestone.app.ui.theme.ThemeProvider data class ColorPalette( val name: String, val accent: Int, val accentBright: Int, val accentDim: Int, - val accentBg: Int, // background highlight (panels, cards) - val accentStroke: Int, // border for selected/active elements - val panelStroke: Int, // default panel border - val accentRed: Int, // destructive actions - val accentGreen: Int, // success states + val accentBg: Int, + val accentStroke: Int, + val panelStroke: Int, + val accentRed: Int, + val accentGreen: Int, ) object Theme { - // Text colors — consistent across all palettes - val TEXT = Color.rgb(232, 229, 220) - val MUTED = Color.rgb(140, 130, 112) - val MUTED_DIM = Color.rgb(120, 112, 104) // #787068 — 4.5:1 AA on #0F0E10 - val PANEL_BG = Color.argb(190, 12, 11, 16) + val TEXT: Int get() = tp()?.text ?: Color.rgb(232, 229, 220) + val MUTED: Int get() = tp()?.muted ?: Color.rgb(140, 130, 112) + val MUTED_DIM: Int get() = tp()?.mutedDim ?: Color.rgb(120, 112, 104) + val PANEL_BG: Int get() = tp()?.let { c -> + Color.argb(190, Color.red(c.surface), Color.green(c.surface), Color.blue(c.surface)) + } ?: Color.argb(190, 12, 11, 16) + val BACKGROUND: Int get() = tp()?.background ?: Color.rgb(3, 3, 4) + val SURFACE: Int get() = tp()?.surface ?: Color.rgb(12, 11, 16) + val CARD_BG: Int get() = tp()?.cardBackground ?: Color.rgb(22, 20, 26) + val ERROR: Int get() = tp()?.error ?: Color.rgb(240, 120, 120) + val SUCCESS: Int get() = tp()?.success ?: Color.rgb(140, 220, 140) - // ── Palette Definitions ── val Amber = ColorPalette( name = "Amber", accent = Color.rgb(207, 174, 126), @@ -105,16 +98,10 @@ object Theme { accentGreen = Color.rgb(140, 220, 140), ) - // Palette registry - val palettes = listOf( - Amber, Emerald, Royal, Crimson, Ocean, Monochrome, - ) - - // Current active palette (updated at runtime) + val palettes = listOf(Amber, Emerald, Royal, Crimson, Ocean, Monochrome) var active: ColorPalette = Amber - fun byName(name: String): ColorPalette = - palettes.find { it.name == name } ?: Amber + fun byName(name: String): ColorPalette = palettes.find { it.name == name } ?: Amber fun isReducedMotion(context: Context): Boolean { val appPrefs = context.getSharedPreferences("runestone-settings-v1", Context.MODE_PRIVATE) @@ -122,4 +109,12 @@ object Theme { val systemScale = Settings.Global.getFloat(context.contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1f) return appSetting || systemScale == 0f } + + private var tpInstance: ThemeProvider? = null + private fun tp(): ThemeColors? { + if (tpInstance == null) return null + return tpInstance!!.colors + } + + fun bind(provider: ThemeProvider) { tpInstance = provider } } diff --git a/app/src/main/java/com/runestone/app/ui/UiKit.kt b/app/src/main/java/com/runestone/app/ui/UiKit.kt index ec39527..f75a868 100644 --- a/app/src/main/java/com/runestone/app/ui/UiKit.kt +++ b/app/src/main/java/com/runestone/app/ui/UiKit.kt @@ -1,75 +1,56 @@ -/* - * Runestone - Multi-engine RPG Maker game launcher for Android - * Copyright (C) 2026 Gerson (KleirRampage45) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - package com.runestone.app.ui import android.content.Context -import android.graphics.Color -import android.graphics.Typeface import android.view.View import android.view.ViewGroup +import android.view.animation.OvershootInterpolator import android.widget.Button import android.widget.LinearLayout import android.widget.TextView object UiKit { - val bgColor = Color.rgb(15, 14, 16) - val panel = Color.rgb(34, 32, 36) - val panelAlt = Color.rgb(44, 39, 43) - val textColor = Color.rgb(237, 233, 224) - val mutedTextColor = Color.rgb(170, 164, 154) - val accent = Color.rgb(145, 31, 43) - - val homeBg = Color.rgb(3, 3, 4) - val homeText = Color.rgb(232, 229, 220) - val homeMuted = Color.rgb(151, 143, 132) + val homeBg: Int get() = Theme.BACKGROUND + val homeText: Int get() = Theme.TEXT + val homeMuted: Int get() = Theme.MUTED val homeAccent: Int get() = Theme.active.accent - fun vertical(context: Context): LinearLayout = - LinearLayout(context).apply { - orientation = LinearLayout.VERTICAL - setPadding(28, 28, 28, 28) - setBackgroundColor(bgColor) - } - - fun title(context: Context, value: String): TextView = - TextView(context).apply { - text = value - setTextColor(textColor) - textSize = 26f - typeface = Typeface.DEFAULT_BOLD - } - - fun label(context: Context, value: String): TextView = - TextView(context).apply { - text = value - setTextColor(mutedTextColor) - textSize = 15f - } - - fun button(context: Context, value: String, onClick: () -> Unit): Button = - Button(context).apply { - text = value - setTextColor(textColor) - setBackgroundColor(accent) - setOnClickListener { onClick() } - } - - fun spacer(context: Context, height: Int = 18): View = - View(context).apply { - layoutParams = ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - height, - ) - } - - fun dp(context: Context, value: Int): Int = - (value * context.resources.displayMetrics.density).toInt() + fun vertical(context: Context): LinearLayout = LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + setPadding(28, 28, 28, 28) + setBackgroundColor(Theme.SURFACE) + } + + fun title(context: Context, value: String): TextView = TextView(context).apply { + text = value; setTextColor(Theme.TEXT); textSize = 26f + } + + fun label(context: Context, value: String): TextView = TextView(context).apply { + text = value; setTextColor(Theme.MUTED); textSize = 15f + } + + fun button(context: Context, value: String, onClick: () -> Unit): Button = Button(context).apply { + text = value; setTextColor(Theme.TEXT) + setBackgroundColor(Theme.active.accent) + setOnClickListener { onClick() } + } + + fun spacer(context: Context, height: Int = 18): View = View(context).apply { + layoutParams = ViewGroup.LayoutParams(MATCH, height) + } + + fun dp(context: Context, value: Int): Int = (value * context.resources.displayMetrics.density).toInt() + + fun makeLiquid(v: View) { + v.animate().scaleX(0.95f).scaleY(0.95f).setDuration(80).withEndAction { + v.animate().scaleX(1f).scaleY(1f).setDuration(120).setInterpolator(OvershootInterpolator()).start() + }.start() + } + + fun animTap(v: View) { + v.animate().scaleX(0.92f).scaleY(0.92f).setDuration(60).withEndAction { + v.animate().scaleX(1f).scaleY(1f).setDuration(100).setInterpolator(OvershootInterpolator()).start() + }.start() + } + + private const val MATCH = ViewGroup.LayoutParams.MATCH_PARENT } diff --git a/app/src/main/java/com/runestone/app/ui/theme/ThemeColors.kt b/app/src/main/java/com/runestone/app/ui/theme/ThemeColors.kt new file mode 100644 index 0000000..feeffe5 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/theme/ThemeColors.kt @@ -0,0 +1,53 @@ +package com.runestone.app.ui.theme + +import android.graphics.Color + +data class ThemeColors( + val name: String, + val background: Int, + val surface: Int, + val cardBackground: Int, + val text: Int, + val textSecondary: Int, + val accent: Int, + val accentMuted: Int, + val muted: Int, + val mutedDim: Int, + val overlayDim: Int, + val error: Int, + val success: Int, +) { + companion object { + val DARK = ThemeColors( + name = "Dark", + background = Color.rgb(3, 3, 4), + surface = Color.rgb(12, 11, 16), + cardBackground = Color.rgb(22, 20, 26), + text = Color.rgb(232, 229, 220), + textSecondary = Color.rgb(180, 160, 140), + accent = Color.rgb(207, 174, 126), + accentMuted = Color.argb(60, 207, 174, 126), + muted = Color.rgb(140, 130, 112), + mutedDim = Color.rgb(100, 95, 85), + overlayDim = Color.argb(180, 0, 0, 0), + error = Color.rgb(240, 120, 120), + success = Color.rgb(140, 220, 140), + ) + + val LIGHT = ThemeColors( + name = "Light", + background = Color.rgb(245, 243, 240), + surface = Color.rgb(255, 255, 255), + cardBackground = Color.rgb(240, 238, 235), + text = Color.rgb(30, 28, 26), + textSecondary = Color.rgb(100, 95, 90), + accent = Color.rgb(170, 130, 80), + accentMuted = Color.argb(60, 170, 130, 80), + muted = Color.rgb(140, 135, 130), + mutedDim = Color.rgb(180, 175, 170), + overlayDim = Color.argb(160, 40, 38, 35), + error = Color.rgb(200, 60, 60), + success = Color.rgb(80, 170, 80), + ) + } +} diff --git a/app/src/main/java/com/runestone/app/ui/theme/ThemeMode.kt b/app/src/main/java/com/runestone/app/ui/theme/ThemeMode.kt new file mode 100644 index 0000000..50708a7 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/theme/ThemeMode.kt @@ -0,0 +1,5 @@ +package com.runestone.app.ui.theme + +enum class ThemeMode { + DARK, LIGHT, SYSTEM +} diff --git a/app/src/main/java/com/runestone/app/ui/theme/ThemeProvider.kt b/app/src/main/java/com/runestone/app/ui/theme/ThemeProvider.kt new file mode 100644 index 0000000..4970960 --- /dev/null +++ b/app/src/main/java/com/runestone/app/ui/theme/ThemeProvider.kt @@ -0,0 +1,91 @@ +package com.runestone.app.ui.theme + +import android.content.Context +import android.content.res.Configuration +import android.graphics.Color +import android.graphics.drawable.GradientDrawable +import android.view.View +import android.view.ViewGroup + +class ThemeProvider private constructor(appContext: Context) { + + private val prefs = appContext.getSharedPreferences("runestone-settings-v1", Context.MODE_PRIVATE) + + var currentMode: ThemeMode = parseMode(prefs.getString("theme_mode", ThemeMode.DARK.name) ?: ThemeMode.DARK.name) + private set + + val colors: ThemeColors + get() = when (resolveMode()) { + ThemeMode.LIGHT -> ThemeColors.LIGHT + else -> ThemeColors.DARK + } + + val background: Int get() = colors.background + val surface: Int get() = colors.surface + val cardBackground: Int get() = colors.cardBackground + val text: Int get() = colors.text + val textSecondary: Int get() = colors.textSecondary + val accent: Int get() = colors.accent + val accentMuted: Int get() = colors.accentMuted + val muted: Int get() = colors.muted + val mutedDim: Int get() = colors.mutedDim + val overlayDim: Int get() = colors.overlayDim + val error: Int get() = colors.error + val success: Int get() = colors.success + + fun setMode(mode: ThemeMode) { + currentMode = mode + prefs.edit().putString("theme_mode", mode.name).apply() + } + + fun toggle(): ThemeMode { + val next = if (resolveMode() == ThemeMode.DARK) ThemeMode.LIGHT else ThemeMode.DARK + setMode(next) + return next + } + + fun resolveMode(): ThemeMode { + if (currentMode != ThemeMode.SYSTEM) return currentMode + return if (isSystemDark()) ThemeMode.DARK else ThemeMode.LIGHT + } + + fun isDark(): Boolean = resolveMode() == ThemeMode.DARK + + fun glassBg(radiusDp: Int, alpha: Int = 200, useAccent: Boolean = false): GradientDrawable { + val base = if (useAccent) accent else surface + return GradientDrawable().apply { + setColor(Color.argb(alpha.coerceIn(0, 255), Color.red(base), Color.green(base), Color.blue(base))) + cornerRadius = dp(radiusDp).toFloat() + val stroke = if (useAccent) accent else mutedDim + setStroke(dpInt(1), Color.argb((alpha / 2).coerceIn(0, 255), Color.red(stroke), Color.green(stroke), Color.blue(stroke))) + } + } + + private fun isSystemDark(): Boolean { + val uiMode = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q + return uiMode + } + + companion object { + @Volatile + private var instance: ThemeProvider? = null + + fun getInstance(context: Context): ThemeProvider { + return instance ?: synchronized(this) { + instance ?: ThemeProvider(context.applicationContext).also { instance = it } + } + } + + private var displayDensity = 1f + + fun init(context: Context) { + displayDensity = context.resources.displayMetrics.density + getInstance(context) + } + + fun dp(value: Int): Int = (value * displayDensity).toInt() + private fun dpInt(value: Int): Int = (value * displayDensity).toInt() + } + + private fun parseMode(name: String): ThemeMode = runCatching { ThemeMode.valueOf(name) }.getOrDefault(ThemeMode.DARK) +} diff --git a/app/src/main/java/com/runestone/app/util/CoroutineScope.kt b/app/src/main/java/com/runestone/app/util/CoroutineScope.kt new file mode 100644 index 0000000..dcc4c8d --- /dev/null +++ b/app/src/main/java/com/runestone/app/util/CoroutineScope.kt @@ -0,0 +1,11 @@ +package com.runestone.app.util + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob + +object AppScope { + val io: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) + val main: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + val default: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) +} diff --git a/app/src/main/java/com/runestone/app/util/I18n.kt b/app/src/main/java/com/runestone/app/util/I18n.kt new file mode 100644 index 0000000..fa333e0 --- /dev/null +++ b/app/src/main/java/com/runestone/app/util/I18n.kt @@ -0,0 +1,56 @@ +package com.runestone.app.util + +import android.content.Context +import android.content.res.Configuration +import android.content.res.Resources +import java.util.Locale + +object I18n { + private const val PREFS = "runestone-settings-v1" + private const val KEY_LOCALE = "locale" + + val supportedLocales = listOf("en", "es", "pt") + + fun get(context: Context, key: String): String { + val localeCode = getLocale(context) + val res = localizedResources(context, localeCode) + val id = res.getIdentifier(key, "string", context.packageName) + return if (id != 0) res.getString(id) else key + } + + fun get(context: Context, key: String, vararg args: Any?): String { + val localeCode = getLocale(context) + val res = localizedResources(context, localeCode) + val id = res.getIdentifier(key, "string", context.packageName) + return if (id != 0) res.getString(id, *args) else key + } + + fun getLocale(context: Context): String { + val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + return prefs.getString(KEY_LOCALE, "en") ?: "en" + } + + fun setLocale(context: Context, localeCode: String) { + if (localeCode !in supportedLocales) return + context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) + .edit() + .putString(KEY_LOCALE, localeCode) + .apply() + } + + fun applyToContext(context: Context): Context { + val localeCode = getLocale(context) + val locale = Locale(localeCode) + Locale.setDefault(locale) + val config = Configuration(context.resources.configuration) + config.setLocale(locale) + return context.createConfigurationContext(config) + } + + private fun localizedResources(context: Context, localeCode: String): Resources { + val locale = Locale(localeCode) + val config = Configuration(context.resources.configuration) + config.setLocale(locale) + return context.createConfigurationContext(config).resources + } +} diff --git a/app/src/main/java/com/runestone/app/util/ImageLoader.kt b/app/src/main/java/com/runestone/app/util/ImageLoader.kt new file mode 100644 index 0000000..cdfe401 --- /dev/null +++ b/app/src/main/java/com/runestone/app/util/ImageLoader.kt @@ -0,0 +1,116 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.util + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.util.LruCache +import android.widget.ImageView +import java.io.File +import java.net.URL +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.ThreadFactory +import java.util.concurrent.ThreadPoolExecutor +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger + +object ImageLoader { + + private const val TAG = "ImageLoader" + private const val MAX_CACHE_BYTES = 32L * 1024 * 1024 + + private val executor: ThreadPoolExecutor = ThreadPoolExecutor( + 2, 2, 30L, TimeUnit.SECONDS, + LinkedBlockingQueue(), + ThreadFactory { r -> + Thread(r, "img-loader-${threadCounter.incrementAndGet()}").apply { isDaemon = true } + }, + ).also { it.allowCoreThreadTimeOut(true) } + + private val threadCounter = AtomicInteger(0) + private val inFlight = ConcurrentHashMap.newKeySet() + private val mainHandler = Handler(Looper.getMainLooper()) + private val cache = object : LruCache(MAX_CACHE_BYTES.toInt()) { + override fun sizeOf(key: String, value: Bitmap): Int = value.byteCount + override fun entryRemoved(evicted: Boolean, key: String, oldValue: Bitmap, newValue: Bitmap?) { + if (evicted && !oldValue.isRecycled) { + oldValue.recycle() + } + } + } + + fun load( + source: String, + target: ImageView, + maxWidthPx: Int = 720, + ) { + val key = "${maxWidthPx}|$source" + val tag = System.identityHashCode(target) + target.setTag(tag) + + cache.get(key)?.let { cached -> + target.setImageBitmap(cached) + return + } + + if (!inFlight.add(key)) { + return + } + executor.execute { + try { + val bitmap = decodeSampled(source, maxWidthPx) + if (bitmap != null) { + cache.put(key, bitmap) + } + mainHandler.post { + if (target.getTag() == tag && bitmap != null) { + target.setImageBitmap(bitmap) + } + } + } catch (e: Exception) { + Log.w(TAG, "Failed to decode $source: ${e.message}") + } finally { + inFlight.remove(key) + } + } + } + + fun clear() { + cache.evictAll() + } + + fun decodeSampled(source: String, maxWidthPx: Int): Bitmap? { + val bounds = BitmapFactory.Options().apply { inJustDecodeBounds = true } + openStream(source).use { stream -> + BitmapFactory.decodeStream(stream, null, bounds) + } + if (bounds.outWidth <= 0 || bounds.outHeight <= 0) return null + + var sample = 1 + while (bounds.outWidth / (sample * 2) >= maxWidthPx) { + sample *= 2 + } + + val opts = BitmapFactory.Options().apply { inSampleSize = sample } + return openStream(source).use { stream -> + BitmapFactory.decodeStream(stream, null, opts) + } + } + + private fun openStream(source: String) = when { + source.startsWith("local:") -> File(source.removePrefix("local:")).inputStream() + else -> URL(source).openStream() + } +} diff --git a/app/src/main/java/com/runestone/app/workspace/WorkspaceManager.kt b/app/src/main/java/com/runestone/app/workspace/WorkspaceManager.kt index c3ffad5..9f40d99 100644 --- a/app/src/main/java/com/runestone/app/workspace/WorkspaceManager.kt +++ b/app/src/main/java/com/runestone/app/workspace/WorkspaceManager.kt @@ -11,8 +11,9 @@ package com.runestone.app.workspace import android.content.Context +import android.util.Log import com.runestone.app.data.EngineType -import com.runestone.app.engine.EngineDetector +import com.runestone.app.engine.EngineRegistry import org.json.JSONArray import org.json.JSONObject import java.io.File @@ -39,6 +40,11 @@ import java.io.File */ class WorkspaceManager(private val context: Context) { + private companion object { + private const val TAG = "WSMGR" + } + + data class GameInfo( val storageName: String, val displayName: String, @@ -80,7 +86,7 @@ class WorkspaceManager(private val context: Context) { } else null }.getOrNull() - val engineType = override ?: EngineDetector.detect(originalDir) + val engineType = override ?: (EngineRegistry.detect(originalDir)?.let { EngineType.fromEngineId(it.id) } ?: EngineType.UNKNOWN) val fileCount = originalDir.walkTopDown().count { it.isFile } val displayName = readGameTitle(originalDir, engineType) ?: formatDisplayName(gameDir.name) @@ -212,7 +218,7 @@ class WorkspaceManager(private val context: Context) { val gamePayload = children.filter { it.name !in ignoredNames } if (gamePayload.isEmpty()) return - val engineType = EngineDetector.detect(gameDir) + val engineType = EngineRegistry.detect(gameDir)?.let { EngineType.fromEngineId(it.id) } ?: EngineType.UNKNOWN if (engineType == EngineType.UNKNOWN) return val repairDir = File(gameDir, "original_repair") @@ -254,17 +260,45 @@ class WorkspaceManager(private val context: Context) { } fun allocateGameDir(baseName: String): File { - var dirName = sanitizeName(baseName) + val sanitized = sanitizeName(baseName) + cleanupOrphanInstalls(sanitized) + var dirName = sanitized var dir = File(gamesBaseDir, dirName) var counter = 1 while (dir.exists()) { - dirName = "${sanitizeName(baseName)}-$counter" + dirName = "$sanitized-$counter" dir = File(gamesBaseDir, dirName) counter++ } return dir } + /** + * Remove any directory matching `` or `-N` that is not + * a complete install (i.e. has no `manifest.json`). These are leftovers from installs + * killed before discardFailedInstall could wipe them — most commonly because the + * extraction thread was still running when the app was force-stopped. + * + * Directories whose name starts with `` but contains a real + * `manifest.json` are kept (they're real installs, possibly older copies of the + * same game the user wants to keep). + */ + private fun cleanupOrphanInstalls(sanitizedBase: String) { + val baseDir = gamesBaseDir + if (!baseDir.isDirectory) return + val prefix = "$sanitizedBase" + val matcher = Regex("^" + Regex.escape(prefix) + "(?:-\\d+)?$") + baseDir.listFiles()?.forEach { child -> + if (!child.isDirectory) return@forEach + if (!matcher.matches(child.name)) return@forEach + val manifest = File(child, "manifest.json") + if (!manifest.isFile) { + Log.w(TAG, "Removing orphan install dir: ${child.name} (no manifest.json)") + child.deleteRecursively() + } + } + } + fun gameDir(storageName: String): File = File(gamesBaseDir, storageName) fun originalDir(storageName: String): File = File(gameDir(storageName), "original") fun activeDir(storageName: String): File = File(gameDir(storageName), "active") @@ -304,7 +338,12 @@ class WorkspaceManager(private val context: Context) { fun removeGame(storageName: String, keepSaves: Boolean = false) { val dir = gameDir(storageName) - if (!dir.exists()) return + android.util.Log.i("Runestone", "removeGame: storageName=$storageName dir=${dir.absolutePath} exists=${dir.exists()} keepSaves=$keepSaves") + if (!dir.exists()) { + android.util.Log.w("Runestone", "removeGame: dir does not exist, nothing to do") + invalidateGameScanCache() + return + } if (keepSaves) { val saves = savesDir(storageName) @@ -312,14 +351,16 @@ class WorkspaceManager(private val context: Context) { if (saves.exists()) { saves.copyRecursively(preservedSaves, overwrite = true) } - dir.deleteRecursively() + val deleted = dir.deleteRecursively() + android.util.Log.i("Runestone", "removeGame: keepSaves deleteRecursively=$deleted") dir.mkdirs() if (preservedSaves.exists()) { preservedSaves.copyRecursively(File(dir, "saves"), overwrite = true) preservedSaves.deleteRecursively() } } else { - dir.deleteRecursively() + val deleted = dir.deleteRecursively() + android.util.Log.i("Runestone", "removeGame: full delete deleteRecursively=$deleted, existsAfter=${dir.exists()}") } invalidateGameScanCache() } diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 0000000..1456790 --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,244 @@ + + + Runestone + + Buscar juegos… + No hay juegos instalados. Toca + para añadir uno. + REANUDAR + DETENER + Nombre A-Z + Nombre Z-A + Jugado recientemente + Fecha de añadido + Todos los juegos + 2 + 3 + = + + Inicio + Añadir + Explorar + Gestionar + Ajustes + + Ajustes + Pantalla y Diseño + Modo de pantalla, escalado y opciones de interfaz. + Controles + Controles táctiles, hápticos y mando. + Audio + Ajustes de sonido y música. + Rendimiento + Optimización y renderizado. + Almacenamiento + Gestionar datos del juego y caché. + Complementos + Motores y funciones opcionales. + Acerca de + Información de versión y licencia. + Restablecer valores + Limpiar caché de ejecución + Instalar VX Ace RTP + Escalado Suave + Filtro bilineal para sprites escalados. + Escalado Entero + Escalado píxel-perfecto (sin desenfoque). + Escala de Texto + Mantener Pantalla Encendida + Evitar que la pantalla se apague. + Ocultar Gamepad Virtual + Usar solo mando físico. + Movimiento Diagonal + Permite entrada diagonal en el D-pad. + Vibración Háptica + Vibrar al pulsar controles. + Opacidad de Botones + Escala de Botones + Mostrar FPS + VSync + Brillo + Contraste + Gamma + Saturación + Nitidez + Silenciar Música + Silenciar Efectos + Silenciar Video + Volumen General + Volumen Música + Volumen Efectos + Renderizado Multihilo + Carga en Segundo Plano + Reducir Sombras + Reducir Partículas + Saltar Fotogramas + Tamaño Caché Texturas + Usar Fuentes del Juego + Texto Negrita + Texto Cursiva + Escala de Fuente + Espaciado de Líneas + Paleta de Colores + Modo de Interfaz + Recorte de Pantalla + Clave API RAWG + Para carátulas y metadatos de juegos. + Reducir Animaciones + Desactivar animaciones y transiciones. + + Gestionar Juegos + Importar + Eliminar + Guardados + Motor + Ajustes por juego + No se detectaron archivos de guardado. + Acciones de Guardado + Sincronizar copia protegida + Respaldar ahora + Restaurar guardados + Exportar ZIP + Importar ZIP + Ver respaldos + No se han creado respaldos aún. + Eliminar datos + Esto elimina los archivos del juego. Los guardados se conservan. + ¿Eliminar %s? + Esto eliminará todos los archivos del juego. ¿Qué quieres hacer con tus partidas guardadas? + CONSERVAR GUARDADOS + ELIMINAR TODO + Cancelar + Cambiar Motor — %s + Restablecer a Automático + + Juegos Disponibles + Actualizar + Fuentes + Ajustes de Proveedor + Descargar + Pausar + Reanudar + Instalado + Cargando juegos… + Añade una URL de catálogo para explorar juegos. + Error: %s + Detalles + Añadir Fuente + URL del Catálogo + Añadir + Eliminar + Ajustes de Proveedor + Usar Catálogo Público + Gestionar Fuentes + Limpiar Todo + + Importar Juego + Importando juego… + Importación fallida: %s + Seleccionar carpeta del juego + Conceder acceso + + Ajustes de %s + Tarjeta Principal + Imagen de portada personalizada. + Metadatos + Info del juego desde RAWG. + Obtener de RAWG + Reobtener de RAWG + Obteniendo… + Completado + Reintentar + Controles + Video + Audio + Rendimiento + Fuentes + ¡Portada establecida! + Error al establecer portada. + Error al leer archivo de parche. + + REANUDAR + INICIO + CONTROLES ON + CONTROLES OFF + BÁSICO + COMPLETO + RETRATO + PAISAJE + EDITAR + TECLADO + Diseño de controles guardado. + Controles visibles + Controles ocultos + Diseño rotado + + Bienvenido a Runestone + Runestone es un lanzador multijuego para Android. Juega a RPG Maker, Ren\'Py, NScripter, Flash y más — todo desde una sola app. Gratuito y de código abierto. + Idioma + Siguiente → + Seleccionar Motores + Elige qué motores de juego instalar. Los que usan el WebView del sistema están siempre disponibles y no necesitan instalación. + RPG Maker XP/VX/VX Ace (~8 MB) + RPG Maker 2000/2003 (~6 MB) + NScripter (~2 MB) + Ren\'Py (~55 MB) + Godot Engine (~142 MB, opcional) + Paquete RTP + Algunos juegos de VX Ace necesitan el Paquete de Ejecución de RPG Maker (RTP) para funcionar correctamente. Contiene gráficos, sonidos y fuentes predeterminados.\n\nPuedes descargarlo e instalarlo ahora, u omitir esto e instalarlo después desde Ajustes. + Instalar VX Ace RTP (~100 MB) + Arte y Metadatos del Juego + Runestone puede extraer carátulas y metadatos directamente de tus archivos de juego de forma predeterminada.\n\nPara obtener resultados más completos con carátulas de alta calidad y descripciones, consigue una clave API gratuita de RAWG: + Pega tu clave API de RAWG (opcional): + Clave API RAWG + Pegar + Clave API pegada + El portapapeles está vacío + Listo para Jugar + Puedes importar juegos cuando quieras desde el botón + en la pantalla principal.\n\n¡Diviértete! + COMENZAR A JUGAR + + Atrás + Cerrar + Aceptar + Después + Descargar + Ocultar + Buscar + Limpiar + Error + Cargando… + Desconocido + Instalado + No instalado + + RUNESTONE + Lanzador Multi-Motor + + Paquete de Ejecución Requerido + Este juego usa %1$s, que no está instalado en tu dispositivo.\n\nTamaño: ~%2$d MB (descargado una vez, compartido con todos los juegos)\n\nAl tocar DESCARGAR, confirmas que has leído y aceptas el Acuerdo de Licencia de Enterbrain/Kadokawa para los Paquetes de Ejecución de RPG Maker. + Descargando %s + Extrayendo %s + %s listo. + RTP instalado. Ya puedes iniciar el juego. + Error al descargar RTP:\n%s + + RPG Maker XP/VX/VX Ace + RPG Maker 2000/2003 + NScripter + Ren\'Py + RPG Maker MV + RPG Maker MZ + TyranoBuilder + HTML5 Genérico + Flash/SWF + Godot + Motor desconocido + + ~8 MB + ~6 MB + ~2 MB + ~55 MB + ~142 MB + ~0 MB (WebView) + ~0 MB (CDN) + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml new file mode 100644 index 0000000..5b95d9f --- /dev/null +++ b/app/src/main/res/values-pt/strings.xml @@ -0,0 +1,244 @@ + + + Runestone + + Pesquisar jogos… + Nenhum jogo instalado. Toque em + para adicionar. + RETOMAR + PARAR + Nome A-Z + Nome Z-A + Jogado recentemente + Data de adição + Todos os jogos + 2 + 3 + = + + Início + Adicionar + Navegar + Gerenciar + Configurações + + Configurações + Tela e Layout + Modo de tela, escala e opções de interface. + Controles + Controles táteis, hápticos e gamepad. + Áudio + Configurações de som e música. + Desempenho + Otimização e renderização. + Armazenamento + Gerenciar dados do jogo e cache. + Complementos + Motores e recursos opcionais. + Sobre + Informações de versão e licença. + Restaurar padrões + Limpar cache de execução + Instalar VX Ace RTP + Escala Suave + Filtro bilinear para sprites escalados. + Escala Inteira + Escala pixel-perfeita (sem desfoque). + Escala do Texto + Manter Tela Ligada + Evitar que a tela desligue. + Ocultar Gamepad Virtual + Usar apenas controle físico. + Movimento Diagonal + Permite entrada diagonal no D-pad. + Feedback Háptico + Vibrar ao pressionar controles. + Opacidade dos Botões + Escala dos Botões + Mostrar FPS + VSync + Brilho + Contraste + Gama + Saturação + Nitidez + Silenciar Música + Silenciar Efeitos + Silenciar Vídeo + Volume Geral + Volume Música + Volume Efeitos + Renderização Multithread + Carregamento em Segundo Plano + Reduzir Sombras + Reduzir Partículas + Pular Quadros + Tamanho Cache de Texturas + Usar Fontes do Jogo + Texto Negrito + Texto Itálico + Escala da Fonte + Espaçamento de Linhas + Paleta de Cores + Modo de Interface + Recorte de Tela + Chave API RAWG + Para capas e metadados de jogos. + Reduzir Animação + Desativar animações e transições. + + Gerenciar Jogos + Importar + Excluir + Salvos + Motor + Configurações por jogo + Nenhum arquivo salvo detectado. + Ações de Salvamento + Sincronizar cópia protegida + Fazer backup agora + Restaurar salvos + Exportar ZIP + Importar ZIP + Ver backups + Nenhum backup foi criado ainda. + Remover dados + Isso exclui os arquivos do jogo. Os salvos são mantidos. + Excluir %s? + Isso removerá todos os arquivos do jogo. O que fazer com seus saves? + MANTER SALVOS + EXCLUIR TUDO + Cancelar + Alterar Motor — %s + Restaurar para Automático + + Jogos Disponíveis + Atualizar + Fontes + Configurações do Provedor + Baixar + Pausar + Retomar + Instalado + Carregando jogos… + Adicione uma URL de catálogo para navegar. + Erro: %s + Detalhes + Adicionar Fonte + URL do Catálogo + Adicionar + Remover + Configurações do Provedor + Usar Catálogo Público + Gerenciar Fontes + Limpar Tudo + + Importar Jogo + Importando jogo… + Falha na importação: %s + Selecionar pasta do jogo + Conceder acesso + + Configurações de %s + Cartão Principal + Imagem de capa personalizada. + Metadados + Informações do jogo via RAWG. + Buscar do RAWG + Rebuscar do RAWG + Buscando… + Concluído + Tentar novamente + Controles + Vídeo + Áudio + Desempenho + Fontes + Capa definida! + Falha ao definir capa. + Falha ao ler arquivo de patch. + + RETOMAR + INÍCIO + CONTROLES ON + CONTROLES OFF + BÁSICO + COMPLETO + RETRATO + PAISAGEM + EDITAR + TECLADO + Layout de controles salvo. + Controles visíveis + Controles ocultos + Layout rotacionado + + Bem-vindo ao Runestone + Runestone é um lançador multijogos para Android. Jogue RPG Maker, Ren\'Py, NScripter, Flash e mais — tudo em um único app. Gratuito e de código aberto. + Idioma + Próximo → + Selecionar Motores + Escolha quais motores de jogo instalar. Os que usam o WebView do sistema estão sempre disponíveis e não precisam de instalação. + RPG Maker XP/VX/VX Ace (~8 MB) + RPG Maker 2000/2003 (~6 MB) + NScripter (~2 MB) + Ren\'Py (~55 MB) + Godot Engine (~142 MB, opcional) + Pacote RTP + Alguns jogos do VX Ace precisam do Pacote de Execução do RPG Maker (RTP) para funcionar corretamente. Ele contém gráficos, sons e fontes padrão.\n\nVocê pode baixá-lo e instalá-lo agora, ou pular e instalar depois pelas Configurações. + Instalar VX Ace RTP (~100 MB) + Arte e Metadados do Jogo + Runestone pode extrair capas e metadados diretamente dos seus arquivos de jogo por padrão.\n\nPara resultados mais ricos com capas de alta qualidade e descrições, obtenha uma chave API gratuita do RAWG: + Cole sua chave API RAWG abaixo (opcional): + Chave API RAWG + Colar + Chave API colada + A área de transferência está vazia + Pronto para Jogar! + Você pode importar jogos quando quiser pelo botão + na tela inicial.\n\nDivirta-se! + COMEÇAR A JOGAR + + Voltar + Fechar + OK + Depois + Baixar + Ocultar + Pesquisar + Limpar + Erro + Carregando… + Desconhecido + Instalado + Não instalado + + RUNESTONE + Lançador Multi-Motor + + Pacote de Execução Necessário + Este jogo usa %1$s, que não está instalado no seu dispositivo.\n\nTamanho: ~%2$d MB (baixado uma vez, compartilhado com todos os jogos)\n\nAo tocar em BAIXAR, você confirma que leu e concorda com o Contrato de Licença da Enterbrain/Kadokawa para os Pacotes de Execução do RPG Maker. + Baixando %s + Extraindo %s + %s pronto. + RTP instalado. Você já pode iniciar o jogo. + Falha ao baixar RTP:\n%s + + RPG Maker XP/VX/VX Ace + RPG Maker 2000/2003 + NScripter + Ren\'Py + RPG Maker MV + RPG Maker MZ + TyranoBuilder + HTML5 Genérico + Flash/SWF + Godot + Motor desconhecido + + ~8 MB + ~6 MB + ~2 MB + ~55 MB + ~142 MB + ~0 MB (WebView) + ~0 MB (CDN) + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 22e74f5..32ed925 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,244 @@ Runestone + + Search games… + No games installed yet. Tap + to add one. + RESUME + STOP + Name A-Z + Name Z-A + Recently played + Date added + All games + 2 + 3 + = + + Home + Add + Browse + Manage + Settings + + Settings + Display & Layout + Screen mode, scaling, and UI options. + Input + Touch controls, haptics, and controller. + Audio + Sound and music settings. + Performance + Optimization and rendering. + Storage + Manage game data and cache. + Addons + Optional engines and features. + About + Version and license information. + Reset to defaults + Clear runtime cache + Install VX Ace RTP + Smooth Scaling + Bilinear filtering for scaled sprites. + Integer Scaling + Pixel-perfect scaling (no blur). + Text Scale + Keep Screen On + Prevent device sleep while playing. + Hide Virtual Gamepad + Use a physical controller only. + Diagonal Movement + Allow simultaneous corner input. + Haptic Feedback + Vibrate when controls are pressed. + Button Opacity + Button Scale + Show FPS + VSync + Brightness + Contrast + Gamma + Saturation + Sharpness + Mute Music + Mute Sound Effects + Mute Video Audio + Master Volume + Music Volume + SFX Volume + Threaded Rendering + Background Loading + Reduce Shadows + Reduce Particles + Frame Skip + Texture Cache Size + Use Game Fonts + Bold Text + Italic Text + Font Scale + Line Spacing + Color Palette + UI Mode + Display Cutout + RAWG API Key + Used for game cover art and metadata. + Reduce Motion + Disable animations and transitions. + + Manage Games + Import + Delete + Saves + Engine + Per-game settings + No save files detected yet. + Save Actions + Sync protected copy + Backup now + Restore protected saves + Export ZIP + Import ZIP + View backups + No save backups have been created yet. + Remove data + This deletes the game files. Saves are kept in protected storage. + Delete %s? + This removes all installed game files. What about your save games? + KEEP SAVES + DELETE FULLY + Cancel + Change Engine — %s + Reset to Auto + + Available Games + Refresh + Sources + Provider Settings + Download + Pause + Resume + Installed + Loading games… + Add a source URL to browse available games. + Error: %s + Details + Add Source + Catalogue URL + Add + Remove + Provider Settings + Use Public Catalogue + Manage Sources + Clear All + + Import Game + Importing game… + Import failed: %s + Select game folder + Grant storage access + + %s Settings + Hero Card + Custom cover image for game card. + Metadata + Game info from RAWG. + Fetch from RAWG + Refetch from RAWG + Fetching… + Done + Retry + Input + Video + Audio + Performance + Fonts + Cover image set! + Failed to set cover image. + Failed to read patch file. + + RESUME + HOME + CONTROLS ON + CONTROLS OFF + BASIC + FULL + PORTRAIT + LANDSCAPE + EDIT + KEYBOARD + Control layout saved. + Controls shown + Controls hidden + Layout rotated + + Back + Close + OK + Later + Download + Hide + Search + Clear + Error + Loading… + Unknown + Installed + Not installed + + RUNESTONE + Multi-Engine Game Launcher + + Runtime Package Required + This game uses the %1$s, which isn\'t installed on your device.\n\nSize: ~%2$d MB (downloaded once, shared with all games)\n\nBy tapping DOWNLOAD, you confirm that you have read and agree to the Enterbrain/Kadokawa End User License Agreement for the RPG Maker Runtime Packages. + Downloading %s + Extracting %s + %s ready. + RTP installed. You can now launch the game. + RTP download failed:\n%s + + RPG Maker XP/VX/VX Ace + RPG Maker 2000/2003 + NScripter + Ren\'Py + RPG Maker MV + RPG Maker MZ + TyranoBuilder + Generic HTML5 + Flash/SWF + Godot + Unknown engine + + ~8 MB + ~6 MB + ~2 MB + ~55 MB + ~142 MB + ~0 MB (WebView) + ~0 MB (CDN) + + Welcome to Runestone + Runestone is a multi-engine game launcher for Android. Play RPG Maker, Ren\'Py, NScripter, Flash games and more — all from one app. Free and open source. + Language + Next → + Select Engines + Choose which game engines to install. Engines that use your system WebView are always available and don\'t need installation. + RPG Maker XP/VX/VX Ace (~8 MB) + RPG Maker 2000/2003 (~6 MB) + NScripter (~2 MB) + Ren\'Py (~55 MB) + Godot Engine (~142 MB, optional) + RTP Package + Some VX Ace games need the RPG Maker Runtime Package (RTP) to run properly. It contains the default graphics, sounds, and fonts.\n\nYou can download and install it now, or skip this and install it later from Settings. + Install VX Ace RTP (~100 MB) + Game Art & Metadata + Runestone can scrape cover art and metadata directly from your game files by default.\n\nFor richer results with high-quality covers and descriptions, get a free API key from RAWG: + Paste your RAWG API key below (optional): + RAWG API Key + Paste + API key pasted + Clipboard is empty + Ready to Play! + You can import games anytime from the + button on the home screen.\n\nHave fun! + START PLAYING diff --git a/app/src/test/java/com/runestone/app/engine/EngineRegistryTest.kt b/app/src/test/java/com/runestone/app/engine/EngineRegistryTest.kt new file mode 100644 index 0000000..a49ae39 --- /dev/null +++ b/app/src/test/java/com/runestone/app/engine/EngineRegistryTest.kt @@ -0,0 +1,230 @@ +package com.runestone.app.engine + +import android.content.Context +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.File + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class EngineRegistryTest { + + /** Base class for test engines to avoid repeating launch() override. */ + private abstract class TestEngine : GameEngine { + override fun launch(context: Context, gameFolder: File, config: GameConfig) {} + } + + private lateinit var mockMvEngine: GameEngine + private lateinit var mockMkxpEngine: GameEngine + private lateinit var mockHtmlEngine: GameEngine + + @Before + fun setUp() { + val field = EngineRegistry::class.java.getDeclaredField("engines") + field.isAccessible = true + @Suppress("UNCHECKED_CAST") + val map = field.get(EngineRegistry) as MutableMap + map.clear() + + mockMvEngine = object : TestEngine() { + override val id = "webview-mv" + override val name = "RPG Maker MV" + override val version = "1.0" + override val priority = 30 + + override fun canRun(gameFolder: File): Boolean = + File(gameFolder, "www/index.html").exists() && + File(gameFolder, "www/data/System.json").exists() + } + + mockMkxpEngine = object : TestEngine() { + override val id = "mkxp-z" + override val name = "RPG Maker XP/VX/VX Ace" + override val version = "1.0" + override val priority = 10 + + override fun canRun(gameFolder: File): Boolean = + File(gameFolder, "Game.ini").exists() && + (File(gameFolder, "Game.rxproj").exists() || + File(gameFolder, "Game.rvproj").exists() || + File(gameFolder, "Game.rvproj2").exists()) + } + + mockHtmlEngine = object : TestEngine() { + override val id = "html" + override val name = "Generic HTML5" + override val version = "1.0" + override val priority = 50 + + override fun canRun(gameFolder: File): Boolean = + File(gameFolder, "index.html").exists() + } + } + + @Test + fun `register adds engine and get returns it`() { + EngineRegistry.register(mockMvEngine) + val result = EngineRegistry.get("webview-mv") + assertNotNull(result) + assertEquals("RPG Maker MV", result?.name) + } + + @Test + fun `get returns null for unregistered engine`() { + assertNull(EngineRegistry.get("nonexistent")) + } + + @Test + fun `all returns all registered engines`() { + EngineRegistry.register(mockMvEngine) + EngineRegistry.register(mockMkxpEngine) + assertEquals(2, EngineRegistry.all().size) + } + + @Test + fun `all returns empty list when nothing registered`() { + assertEquals(0, EngineRegistry.all().size) + } + + @Test + fun `detect returns highest-priority matching engine`() { + EngineRegistry.register(mockMvEngine) + EngineRegistry.register(mockMkxpEngine) + EngineRegistry.register(mockHtmlEngine) + + val dir = createTempDir("mv-game") + File(dir, "www").mkdirs() + File(dir, "www/index.html").writeText("") + File(dir, "www/data").mkdirs() + File(dir, "www/data/System.json").writeText("{}") + + val result = EngineRegistry.detect(dir) + assertNotNull(result) + assertEquals("webview-mv", result?.id) + + dir.deleteRecursively() + } + + @Test + fun `detect respects priority ordering`() { + EngineRegistry.register(mockMvEngine) + EngineRegistry.register(mockMkxpEngine) + + val dir = createTempDir("dual-game") + File(dir, "Game.ini").writeText("[Game]\nTitle=Test") + File(dir, "Game.rvproj2").writeText("") + File(dir, "www").mkdirs() + File(dir, "www/index.html").writeText("") + File(dir, "www/data").mkdirs() + File(dir, "www/data/System.json").writeText("{}") + + val result = EngineRegistry.detect(dir) + assertNotNull(result) + assertEquals("mkxp-z", result?.id) + + dir.deleteRecursively() + } + + @Test + fun `detect returns null when no engine matches`() { + EngineRegistry.register(mockMvEngine) + EngineRegistry.register(mockMkxpEngine) + + val dir = createTempDir("unknown-game") + File(dir, "some_random_file.bin").writeText("") + + assertNull(EngineRegistry.detect(dir)) + + dir.deleteRecursively() + } + + @Test + fun `detect handles engine exception gracefully`() { + val crashingEngine = object : TestEngine() { + override val id = "crash" + override val name = "Crash Engine" + override val version = "1.0" + override val priority = 5 + override fun canRun(gameFolder: File): Boolean = throw RuntimeException("BOOM") + } + + EngineRegistry.register(crashingEngine) + EngineRegistry.register(mockHtmlEngine) + + val dir = createTempDir("html-game") + File(dir, "index.html").writeText("") + + val result = EngineRegistry.detect(dir) + assertNotNull(result) + assertEquals("html", result?.id) + + dir.deleteRecursively() + } + + @Test + fun `detect returns first matching engine sorted by priority`() { + val engines = listOf( + object : TestEngine() { + override val id = "p10" + override val name = "Priority 10" + override val version = "1.0" + override val priority = 10 + override fun canRun(gameFolder: File) = true + }, + object : TestEngine() { + override val id = "p30" + override val name = "Priority 30" + override val version = "1.0" + override val priority = 30 + override fun canRun(gameFolder: File) = true + }, + object : TestEngine() { + override val id = "p50" + override val name = "Priority 50" + override val version = "1.0" + override val priority = 50 + override fun canRun(gameFolder: File) = true + }, + ) + engines.forEach { EngineRegistry.register(it) } + + val dir = createTempDir("any-game") + val result = EngineRegistry.detect(dir) + assertEquals("p10", result?.id) + + dir.deleteRecursively() + } + + @Test + fun `detectMetadata returns metadata from matching engine`() { + EngineRegistry.register(mockMvEngine) + + val dir = createTempDir("mv-game") + File(dir, "www").mkdirs() + File(dir, "www/index.html").writeText("") + File(dir, "www/data").mkdirs() + File(dir, "www/data/System.json").writeText("{}") + + val metadata = EngineRegistry.detectMetadata(dir) + assertNotNull(metadata) + assertEquals("webview-mv", metadata?.engine) + + dir.deleteRecursively() + } + + @Test + fun `detectMetadata returns null when no engine matches`() { + EngineRegistry.register(mockMvEngine) + + val dir = createTempDir("empty") + assertNull(EngineRegistry.detectMetadata(dir)) + + dir.deleteRecursively() + } +} diff --git a/app/src/test/java/com/runestone/app/engine/LocalServerTest.kt b/app/src/test/java/com/runestone/app/engine/LocalServerTest.kt new file mode 100644 index 0000000..b72fb47 --- /dev/null +++ b/app/src/test/java/com/runestone/app/engine/LocalServerTest.kt @@ -0,0 +1,143 @@ +package com.runestone.app.engine + +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import java.io.File +import java.io.FileOutputStream +import java.io.InputStream +import java.net.HttpURLConnection +import java.net.URL + +class LocalServerTest { + + private lateinit var tmpDir: File + private lateinit var server: LocalServer + + @Before + fun setUp() { + tmpDir = createTempDir(prefix = "runestone-local-server-test-") + File(tmpDir, "index.html").writeText("hello") + File(tmpDir, "game.js").writeText("console.log('hi');") + File(tmpDir, "data.bin").writeBytes(byteArrayOf(0, 1, 2, 3, 4)) + server = LocalServer(tmpDir) + server.start() + } + + @After + fun tearDown() { + server.stop() + tmpDir.deleteRecursively() + } + + @Test + fun binds_to_localhost_only() { + val url = URL("http://127.0.0.1:${server.port}/index.html") + val conn = url.openConnection() as HttpURLConnection + assertEquals(200, conn.responseCode) + conn.disconnect() + } + + @Test + fun serves_index_html_with_coop_and_coep_headers() { + val conn = open("/index.html") + assertEquals(200, conn.responseCode) + assertEquals("text/html", conn.contentType?.substringBefore(";")) + assertEquals("same-origin-allow-popups", conn.getHeaderField("Cross-Origin-Opener-Policy")) + assertEquals("require-corp", conn.getHeaderField("Cross-Origin-Embedder-Policy")) + assertEquals("cross-origin", conn.getHeaderField("Cross-Origin-Resource-Policy")) + val body = conn.inputStream.readBytes().toString(Charsets.UTF_8) + assertTrue("body should contain hello", body.contains("hello")) + } + + @Test + fun serves_js_with_correct_mime() { + val conn = open("/game.js") + assertEquals(200, conn.responseCode) + assertEquals("application/javascript", conn.contentType?.substringBefore(";")) + } + + @Test + fun serves_binary_files() { + val conn = open("/data.bin") + assertEquals(200, conn.responseCode) + val bytes = conn.inputStream.readBytes() + assertEquals(5, bytes.size) + assertEquals(0, bytes[0].toInt()) + assertEquals(4, bytes[4].toInt()) + } + + @Test + fun returns_404_for_missing_files() { + val conn = open("/nope.html") + assertEquals(404, conn.responseCode) + } + + @Test + fun rejects_path_traversal_with_dotdot() { + val conn = open("/../etc/passwd") + // The URL class normalizes this client-side so the + // server might receive "/etc/passwd" instead. Either way + // we should NOT see a 200. + assertTrue( + "expected 4xx, got ${conn.responseCode}", + conn.responseCode in 400..499, + ) + } + + @Test + fun rejects_path_traversal_via_embedded_segments() { + val conn = open("/foo/../../etc/passwd") + // The URL class may also normalize this. The important thing + // is that we don't serve a file outside tmpDir. + assertTrue(conn.responseCode in 400..599) + } + + @Test + fun resolveFile_returns_file_for_simple_path() { + val f = server.resolveFile("/index.html") + assertNotNull(f) + assertTrue(f!!.exists()) + } + + @Test + fun resolveFile_rejects_dotdot() { + assertNull(server.resolveFile("/../etc/passwd")) + } + + @Test + fun resolveFile_handles_query_and_fragment() { + val f = server.resolveFile("/index.html?renderer=webgl2#section") + assertNotNull(f) + assertTrue(f!!.exists()) + } + + @Test + fun head_request_returns_headers_only() { + val conn = URL("http://127.0.0.1:${server.port}/index.html").openConnection() as HttpURLConnection + conn.requestMethod = "HEAD" + assertEquals(200, conn.responseCode) + val body = try { conn.inputStream.readBytes() } catch (_: Exception) { ByteArray(0) } + assertEquals("HEAD should have no body", 0, body.size) + } + + @Test + fun rejects_post_method() { + val conn = URL("http://127.0.0.1:${server.port}/index.html").openConnection() as HttpURLConnection + conn.requestMethod = "POST" + conn.doOutput = true + try { conn.outputStream.write("x".toByteArray()) } catch (_: Exception) {} + assertEquals(405, conn.responseCode) + } + + private fun open(path: String): HttpURLConnection { + val conn = URL("http://127.0.0.1:${server.port}$path").openConnection() as HttpURLConnection + conn.connectTimeout = 2000 + conn.readTimeout = 2000 + return conn + } +} diff --git a/app/src/test/java/com/runestone/app/engine/WebglConfigBuilderTest.kt b/app/src/test/java/com/runestone/app/engine/WebglConfigBuilderTest.kt new file mode 100644 index 0000000..4d2c7a0 --- /dev/null +++ b/app/src/test/java/com/runestone/app/engine/WebglConfigBuilderTest.kt @@ -0,0 +1,127 @@ +/* + * Runestone - Multi-engine RPG Maker game launcher for Android + * Copyright (C) 2026 Gerson (KleirRampage45) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +package com.runestone.app.engine + +import com.runestone.app.engine.WebglConfigBuilder.EngineFamily +import com.runestone.app.engine.WebglConfigBuilder.WebglVersion +import org.junit.Assert.assertEquals +import org.junit.Test + +class WebglConfigBuilderTest { + + // ── pick() decision table ────────────────────────────────────── + + @Test + fun `MV is always WEBGL1 regardless of useWebgl2`() { + assertEquals(WebglVersion.WEBGL1, WebglConfigBuilder.pick(EngineFamily.MV, useWebgl2 = true, forceCanvas = false)) + assertEquals(WebglVersion.WEBGL1, WebglConfigBuilder.pick(EngineFamily.MV, useWebgl2 = false, forceCanvas = false)) + } + + @Test + fun `MZ with useWebgl2 picks WEBGL2`() { + assertEquals(WebglVersion.WEBGL2, WebglConfigBuilder.pick(EngineFamily.MZ, useWebgl2 = true, forceCanvas = false)) + } + + @Test + fun `MZ with useWebgl2 false picks WEBGL1`() { + assertEquals(WebglVersion.WEBGL1, WebglConfigBuilder.pick(EngineFamily.MZ, useWebgl2 = false, forceCanvas = false)) + } + + @Test + fun `HTML defaults to WEBGL1 and respects useWebgl2`() { + assertEquals(WebglVersion.WEBGL1, WebglConfigBuilder.pick(EngineFamily.HTML, useWebgl2 = false, forceCanvas = false)) + // HTML has no PIXI; the JS bootstrap probes the WebView directly. The + // query string still advertises the intent when useWebgl2 is on, but + // the pick() decision is conservative WEBGL1. + assertEquals(WebglVersion.WEBGL1, WebglConfigBuilder.pick(EngineFamily.HTML, useWebgl2 = true, forceCanvas = false)) + } + + @Test + fun `forceCanvas wins for every engine family`() { + assertEquals(WebglVersion.CANVAS, WebglConfigBuilder.pick(EngineFamily.MV, useWebgl2 = true, forceCanvas = true)) + assertEquals(WebglVersion.CANVAS, WebglConfigBuilder.pick(EngineFamily.MZ, useWebgl2 = true, forceCanvas = true)) + assertEquals(WebglVersion.CANVAS, WebglConfigBuilder.pick(EngineFamily.HTML, useWebgl2 = true, forceCanvas = true)) + assertEquals(WebglVersion.CANVAS, WebglConfigBuilder.pick(EngineFamily.MV, useWebgl2 = false, forceCanvas = true)) + } + + // ── queryParams() string format ──────────────────────────────── + + @Test + fun `webglEnabled false returns empty query string`() { + assertEquals("", WebglConfigBuilder.queryParams(WebglVersion.WEBGL1, webglEnabled = false)) + assertEquals("", WebglConfigBuilder.queryParams(WebglVersion.WEBGL2, webglEnabled = false)) + assertEquals("", WebglConfigBuilder.queryParams(WebglVersion.CANVAS, webglEnabled = false)) + } + + @Test + fun `WEBGL1 query string`() { + assertEquals("?webgl=1&renderer=webgl", WebglConfigBuilder.queryParams(WebglVersion.WEBGL1, webglEnabled = true)) + } + + @Test + fun `WEBGL2 query string has the discriminator but does NOT advertise webgl2=1 to the game`() { + // We intentionally do not emit &webgl2=1. Some MZ games built + // against pre-5.2 PIXI honour that flag and try a WebGL2 path + // their bundled PIXI does not support, producing a black screen. + // The Kotlin-side decision tells the JS bootstrap what we want; + // the URL hint stays minimal. + assertEquals("?webgl=1&renderer=webgl2", WebglConfigBuilder.queryParams(WebglVersion.WEBGL2, webglEnabled = true)) + } + + @Test + fun `CANVAS query string explicitly disables webgl`() { + assertEquals("?webgl=0&renderer=canvas", WebglConfigBuilder.queryParams(WebglVersion.CANVAS, webglEnabled = true)) + } + + // ── buildQuery() combined entry point ───────────────────────── + + @Test + fun `buildQuery MV default keeps legacy behavior`() { + // MV + useWebgl2(true or false) + forceCanvas(false) → ?webgl=1&renderer=webgl + // This matches the prior shipped behavior on the restore/store-work branch. + assertEquals( + "?webgl=1&renderer=webgl", + WebglConfigBuilder.buildQuery(EngineFamily.MV, useWebgl2 = true, forceCanvas = false, webglEnabled = true), + ) + assertEquals( + "?webgl=1&renderer=webgl", + WebglConfigBuilder.buildQuery(EngineFamily.MV, useWebgl2 = false, forceCanvas = false, webglEnabled = true), + ) + } + + @Test + fun `buildQuery MZ useWebgl2 on produces webgl2 hint without leaking webgl2=1 to the URL`() { + assertEquals( + "?webgl=1&renderer=webgl2", + WebglConfigBuilder.buildQuery(EngineFamily.MZ, useWebgl2 = true, forceCanvas = false, webglEnabled = true), + ) + } + + @Test + fun `buildQuery forceCanvas produces canvas hint`() { + assertEquals( + "?webgl=0&renderer=canvas", + WebglConfigBuilder.buildQuery(EngineFamily.MZ, useWebgl2 = true, forceCanvas = true, webglEnabled = true), + ) + } + + @Test + fun `buildQuery webglEnabled false produces empty string for any engine`() { + assertEquals( + "", + WebglConfigBuilder.buildQuery(EngineFamily.MV, useWebgl2 = true, forceCanvas = false, webglEnabled = false), + ) + assertEquals( + "", + WebglConfigBuilder.buildQuery(EngineFamily.MZ, useWebgl2 = true, forceCanvas = false, webglEnabled = false), + ) + } +} diff --git a/app/src/test/java/com/runestone/app/services/CoverExtractorTest.kt b/app/src/test/java/com/runestone/app/services/CoverExtractorTest.kt new file mode 100644 index 0000000..5917a39 --- /dev/null +++ b/app/src/test/java/com/runestone/app/services/CoverExtractorTest.kt @@ -0,0 +1,103 @@ +package com.runestone.app.services + +import android.graphics.Bitmap +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config +import java.io.File + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class CoverExtractorTest { + + private lateinit var context: android.content.Context + + @Before + fun setUp() { + context = RuntimeEnvironment.getApplication() + } + + @Test + fun `extractFallbackCover returns null for empty directory`() { + val dir = createTempDir("empty-game") + val result = CoverExtractor.extractFallbackCover(context, "test-game", dir) + assertNull("No cover for empty dir", result) + dir.deleteRecursively() + } + + @Test + fun `extractFallbackCover finds Title png in RGSS dir`() { + val dir = createTempDir("rgss-game") + // Create a small valid PNG + val pngFile = File(dir, "Title.png") + createMinimalPng(pngFile) + + val result = CoverExtractor.extractFallbackCover(context, "test-game", dir) + assertNotNull("Should find Title.png", result) + assertTrue("Should be an absolute path", File(result ?: "").exists()) + dir.deleteRecursively() + } + + @Test + fun `extractFallbackCover finds titles1 in MV dir`() { + val dir = createTempDir("mv-game") + val www = File(dir, "www") + val titles1 = File(www, "img/titles1") + titles1.mkdirs() + val pngFile = File(titles1, "Title.png") + createMinimalPng(pngFile) + + val result = CoverExtractor.extractFallbackCover(context, "test-game", dir) + assertNotNull("Should find titles1/Title.png", result) + dir.deleteRecursively() + } + + @Test + fun `extractFallbackCover prefers short named files`() { + val dir = createTempDir("mv-game") + val www = File(dir, "www") + val titles1 = File(www, "img/titles1") + titles1.mkdirs() + // Create a short-named file (should be preferred) + createMinimalPng(File(titles1, "t1.png")) + // Create a longer-named file + createMinimalPng(File(titles1, "very_long_title_screen_name.png")) + + val result = CoverExtractor.extractFallbackCover(context, "test-game", dir) + assertNotNull("Should find a title image", result) + dir.deleteRecursively() + } + + @Test + fun `extractFallbackCover caches result`() { + val dir = createTempDir("rgss-game") + val pngFile = File(dir, "Title.png") + createMinimalPng(pngFile) + + val first = CoverExtractor.extractFallbackCover(context, "test-cache", dir) + assertNotNull("First call should extract", first) + + // Second call should return cached file + val second = CoverExtractor.extractFallbackCover(context, "test-cache", dir) + assertNotNull("Second call should use cache", second) + assertTrue("Cached file should exist", File(second?.removePrefix("local:") ?: "").exists()) + + dir.deleteRecursively() + } + + private fun createMinimalPng(file: File) { + // Create a 1x1 red PNG + val bmp = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) + bmp.setPixel(0, 0, android.graphics.Color.RED) + file.outputStream().use { out -> + bmp.compress(Bitmap.CompressFormat.PNG, 100, out) + } + bmp.recycle() + } +} diff --git a/app/src/test/java/com/runestone/app/workspace/WorkspaceManagerTest.kt b/app/src/test/java/com/runestone/app/workspace/WorkspaceManagerTest.kt new file mode 100644 index 0000000..e544178 --- /dev/null +++ b/app/src/test/java/com/runestone/app/workspace/WorkspaceManagerTest.kt @@ -0,0 +1,123 @@ +package com.runestone.app.workspace + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import java.io.File + +@RunWith(RobolectricTestRunner::class) +class WorkspaceManagerTest { + + private lateinit var workspaceManager: WorkspaceManager + + @Before + fun setUp() { + workspaceManager = WorkspaceManager(RuntimeEnvironment.getApplication()) + } + + @Test + fun `scanInstalledGames returns empty list when no games dir`() { + assertTrue(workspaceManager.scanInstalledGames().isEmpty()) + } + + @Test + fun `scanInstalledGames returns empty when games dir is empty`() { + workspaceManager.gamesBaseDir.mkdirs() + assertTrue(workspaceManager.scanInstalledGames().isEmpty()) + } + + @Test + fun `allocateGameDir returns same path for same name`() { + val dir1 = workspaceManager.allocateGameDir("test-game") + val dir2 = workspaceManager.allocateGameDir("test-game") + assertEquals(dir1.absolutePath, dir2.absolutePath) + } + + @Test + fun `allocateGameDir returns different path when first dir has manifest`() { + val dir1 = workspaceManager.allocateGameDir("test-game") + dir1.mkdirs() + File(dir1, "manifest.json").writeText("{}") + val dir2 = workspaceManager.allocateGameDir("test-game") + assertTrue("dir1=$dir1 dir2=$dir2", dir1.absolutePath != dir2.absolutePath) + } + + @Test + fun `isInstalled returns false for non-existent game`() { + assertFalse(workspaceManager.isInstalled("nonexistent")) + } + + @Test + fun `isInstalled returns true when game has original dir`() { + val gameDir = workspaceManager.allocateGameDir("test-game").apply { mkdirs() } + File(gameDir, "original").mkdirs() + File(gameDir, "manifest.json").writeText("{}") + assertTrue(workspaceManager.isInstalled(gameDir.name)) + } + + @Test + fun `removeGame deletes game directory`() { + val gameDir = workspaceManager.allocateGameDir("test-game").apply { mkdirs() } + File(gameDir, "original").mkdirs() + workspaceManager.removeGame(gameDir.name) + assertFalse(gameDir.exists()) + } + + @Test + fun `removeGame with keepSaves preserves saves`() { + val gameDir = workspaceManager.allocateGameDir("test-game").apply { mkdirs() } + File(gameDir, "original").mkdirs() + File(gameDir, "saves").mkdirs() + File(gameDir, "saves/Save1.lsd").writeText("data") + workspaceManager.removeGame(gameDir.name, keepSaves = true) + assertTrue(gameDir.exists()) + assertTrue(File(gameDir, "saves").exists()) + } + + @Test + fun `ensureWorkspace creates all subdirectories`() { + val gameDir = workspaceManager.allocateGameDir("test-game") + workspaceManager.ensureWorkspace(gameDir.name) + assertTrue(File(gameDir, "original").exists()) + assertTrue(File(gameDir, "incoming").exists()) + assertTrue(File(gameDir, "saves").exists()) + assertTrue(File(gameDir, "save_backups").exists()) + assertTrue(File(gameDir, "patches").exists()) + } + + @Test + fun `ensureWorkspace creates nomedia files`() { + val gameDir = workspaceManager.allocateGameDir("test-game") + workspaceManager.ensureWorkspace(gameDir.name) + assertTrue(File(gameDir, ".nomedia").exists()) + assertTrue(File(gameDir, "original/.nomedia").exists()) + } + + @Test + fun `path helpers return correct paths`() { + assertTrue(workspaceManager.gameDir("g").absolutePath.endsWith("games/g")) + assertTrue(workspaceManager.originalDir("g").absolutePath.endsWith("games/g/original")) + assertTrue(workspaceManager.savesDir("g").absolutePath.endsWith("games/g/saves")) + assertTrue(workspaceManager.incomingDir("g").absolutePath.endsWith("games/g/incoming")) + } + + @Test + fun `removeGame on non-existent dir does not throw`() { + workspaceManager.removeGame("nonexistent") + } + + @Test + fun `removeGame invalidates scan cache`() { + val gameDir = workspaceManager.allocateGameDir("test-game").apply { mkdirs() } + File(gameDir, "original").mkdirs() + File(gameDir, "manifest.json").writeText("{}") + workspaceManager.scanInstalledGames() + workspaceManager.removeGame(gameDir.name) + assertTrue(workspaceManager.scanInstalledGames().none { it.storageName == gameDir.name }) + } +} diff --git a/build.gradle.kts b/build.gradle.kts index bdb83e8..0080e63 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ plugins { id("com.android.application") version "8.13.2" apply false id("org.jetbrains.kotlin.android") version "2.2.10" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.2.10" apply false } diff --git a/docs/BUGS.md b/docs/BUGS.md new file mode 100644 index 0000000..aea7fd8 --- /dev/null +++ b/docs/BUGS.md @@ -0,0 +1,93 @@ +# Runestone — Bug & Feature Inventory + +## Fixed + +### 1. Resume banner never appears ✅ FIXED +`isPaused` reads `paused_game` from SharedPreferences in both `OverlayNavigationController.toCardInfo()` and `GameListViewModel.toCardInfo()`. +**Files:** `OverlayNavigationController.kt`, `GameListViewModel.kt` + +### 2. Playtime accumulator never stops ✅ FIXED +`GameSessionManager.finalize()` caps elapsed seconds to 14400 (4 hours max per session). +**Files:** `GameSessionManager.kt` + +### 3. STOP button creates separate GameSessionManager instance ✅ FIXED +`showHome()` STOP callback now uses the shared `sessionManager` from the navController instead of creating a new instance. +**Files:** `OverlayNavigationController.kt` + +### 1. Resume banner never appears +`isPaused` is hardcoded to `false` in both `OverlayNavigationController.toCardInfo()` (line 980) and `GameListViewModel.toCardInfo()` (line 111). The resume bar at the top of the home screen only renders when `pausedGame != null`, which never happens. + +**Files:** `OverlayNavigationController.kt:980`, `GameListViewModel.kt:111` +**Fix:** Read `paused_game` from SharedPreferences and set `isPaused = true` when the game matches. + +### 2. Resume works only once; second resume kills the game +`playGame()` at `MainActivity.kt:393` calls `finish()` to dismiss MainActivity when resuming a minimized game. This destroys the activity. On the *second* minimize → resume cycle, a new `MainActivity` is created via `onCreate()`, and the game list loads asynchronously via `rootContainer.post { refreshGames() }`. If the user taps RESUME before the coroutine populates `games`, `playGame()` returns silently because the game is not found. + +**Files:** `MainActivity.kt:382-404`, `OverlayNavigationController.kt:273-305` (resume callback chain) + +### 3. Playtime accumulator never stops +`GameSessionManager.finalize("fresh_on_create")` is called in `onCreate` (line 142). It calculates `elapsed = now - startedAt`. If the phone was off for 48h between game launch and app restart, it adds all 48h as play time. No sanity cap exists. The in-memory cache at `GameSessionManager.kt:114` never resets (`playTimeCache` is never cleared), so hours accumulate across sessions within the same process lifetime. + +**Files:** `GameSessionManager.kt:55-78` (cap elapsed at `last_seen_at` or 24h), `MainActivity.kt:142` (clearResumeState → finalize call chain) + +### 4. STOP button creates separate GameSessionManager instance +`OverlayNavigationController.kt:293` calls `GameSessionManager(activity).recordStop(storageName)` — a *new* instance that shares no cache with the main `sessionManager`. The `warmCache()` call on the main instance populated `playTimeCache`, but this new instance has an empty cache. `recordStop` reads from its own empty cache and adds elapsed to a separate, unread copy. The main instance's cache is never updated, so play time from the STOP button is lost. + +**Files:** `OverlayNavigationController.kt:289-304` (onStop lambda), `MainActivity.kt:107-111` (navCallbacks should expose sessionManager) + +## UX Bugs + +### 5. Filter/sort not remembered across restarts +`activeEngineFilter`, `currentSort`, `searchQuery` live in memory in `OverlayNavigationController` (lines 91-94) and `HomeUiState.data class` (`GameListViewModel.kt:28-30`). On process death or `recreate()`, all filter state resets to default. + +**Files:** `OverlayNavigationController.kt:91-94`, `GameListViewModel.kt:25-33`, `MainActivity.kt` (load/save) + +### 6. Grid display off-center in 3-column mode +The game grid renders with more empty space on the right side. Likely a `GridLayout` column weight calculation in `HomeScreen.kt`. + +**Files:** `HomeScreen.kt` — grid layout measure phase + +### 7. UI content slightly shifted right +`MainActivity.kt:167-184` applies `ViewCompat.setOnApplyWindowInsetsListener` with `SAFE_AREA` mode. On devices with a left-side camera cutout, the `displayCutout.left` padding shifts the root FrameLayout right, creating a visible gap on the right side. The dock bar inherits this shift. + +**Files:** `MainActivity.kt` (insets listener), possibly `HomeScreen.kt` grid centering + +### 8. Add Game file browser lacks file operations +The SAF folder/file list shows folders and files but has no: Move, Delete, "More" icon (Copy, Cut, Extract, Rename), Details dialog (full name, date modified, size, full path). + +**Files:** `GameFolderBrowserScreen.kt` + +### 9. Import progress bar shows no percentage +The import overlay shows "Importing game…" text with no progress percentage or progress bar. + +**Files:** `ImportManager.kt`, import UI in `OverlayNavigationController.kt` + +## Feature Gaps + +### 10. Import wording +When no file copy occurs (e.g., SAF reference), use "Adding" or "Installing" instead of "Importing". + +**Files:** `ImportManager.kt`, string resources (`values/strings.xml`) + +### 11. Guided import flow +The SAF browser should offer: explicit path input, or prompt to select the game's launcher file (Game.exe, Game.ini, RGSS*.dll, index.html, 0.txt) to auto-detect engine + strip non-game files. Currently only shows a folder tree with no intelligence. + +**Files:** `GameFolderBrowserScreen.kt`, `ImportManager.kt`, `EngineRegistry.kt` + +### 12. UI sounds / haptic feedback +No `HapticFeedbackConstants` or button-click sounds anywhere. Every `setOnClickListener` should trigger haptic feedback. + +**Files:** Every screen file + a global utility class + +### 13. Filter UI — type-ahead label +The filter/sort row shows "ALL | NEW" but the label should reflect the current active sort mode ("RECENT", "NAME A-Z", etc.) so the user knows what they're looking at. + +**Files:** `HomeScreen.kt` filter header + +## Observations (defer) + +- Onboarding engine toggles (`OnboardingScreen.kt`) don't actually control engine availability — only `godot` and `renpy` have meaningfully togglable registration. The other three toggles (`mkxp-z`, `easyrpg`, `onscripter`) are always bundled and registered. +- The `EngineRegistry.setOptionalEnabled` only handles `godot` — `renpy` is always registered in `registerEngines()`. +- After `recreate()` from onboarding completion, the second `onCreate` runs the normal flow. `persistentDock` is created and assigned to `navController.persistentDock`, but the dock's `onSettings` callback captures the *initial* `settings` reference (the lambda at `MainActivity.kt:229` captures `settings` by value at lambda creation, not by property reference). Any runtime settings changes are invisible until the next `showHome()` rebuild. + +**Files:** `OnboardingScreen.kt`, `EngineRegistry.kt`, `MainActivity.kt:229` diff --git a/docs/known-webview-issues.md b/docs/known-webview-issues.md new file mode 100644 index 0000000..a2336d2 --- /dev/null +++ b/docs/known-webview-issues.md @@ -0,0 +1,91 @@ +# Known WebView Compatibility Issues + +This document records games and code paths that are known to misbehave on the Android WebView runtime used by `WebViewEngine`. Future debugging should start here before re-discovering the same root causes. + +All issues were observed on a real Android 14 device with system WebView version reported by `adb shell dumpsys package com.google.android.webview` (capture in each new investigation). The same issues may or may not reproduce on other devices. + +--- + +## 1. MV games on WebGL — Fear & Hunger works, others may not + +**Symptom:** Game renders correctly under WebGL on most MV exports. Some MZ exports black-screen even when `useWebgl2 = true` and `forceCanvas = false`. + +**Root cause:** Unconfirmed. The PIXI deprecation warning "PIXI.WebGLRenderer class has moved to PIXI.Renderer" appears in PIXI v5.0.0 but is non-fatal. The page stays alive (FPS overlay ticks) but the canvas stays black. + +**Workaround:** Per-game `forceCanvas = true` override in `runestone.json`. See `docs/webgl-perf-testing.md` for how to write the override. Canvas renderer is slower but works for most games. + +--- + +## 2. Effekseer-based MZ games — Look Outside, Haven + +**Symptom:** MZ games that ship `js/libs/effekseer.min.js` and `js/libs/effekseer.wasm` (e.g. Look Outside, Haven) hang on first launch. The loading spinner shows but the title screen never appears. `RunestoneBridge.boot(...)` is never called from the game, indicating `Scene_Boot` never runs. + +**Diagnostic signal:** `effekseer.initRuntime(...)` is called from the game's `main.js` but the `onLoad` callback never fires. No errors are logged. The WASM file is delivered successfully via the `shouldInterceptRequest` interceptor. + +**Root cause (likely):** Effekseer's WASM runtime requires `WebAssembly.Memory` with shared array buffer support, which requires `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp` HTTP response headers. Android WebView does not expose these headers for `file://` requests and cannot be configured to set them on the main document without serving the page over `http://` (a separate feature, see `RunnerSettings.useHttpServer` — not yet implemented for MV/MZ). + +**Workaround:** +- **Haven:** works in canvas mode. Set `forceCanvas = true` in the per-game `runestone.json` under `performance`. Slow but functional. +- **Look Outside:** does not work in canvas mode either. The canvas renderer initialises but no frames are drawn even after several minutes. No known workaround at this time. Skip on this WebView build. + +**Future fix (not done):** Implement an `http://` server mode for MV/MZ games so the page can be served with the required COOP/COEP headers. This is a larger change and out of scope for the WebGL optimisation work. + +--- + +## 3. WebView tile memory exhaustion on hi-DPI phones — FIXED + +**Symptom:** `[ERROR:cc/tiles/tile_manager.cc:1012] WARNING: tile memory limits exceeded, some content may not draw` in logcat. Some pages render to a black canvas while the FPS overlay (rendered outside the page) keeps ticking. + +**Root cause:** `WebSettings.setOffscreenPreRaster(true)` pre-rasterises the entire viewport at the device's native pixel density. On phones with DPR 2-3, this is enough to exhaust the WebView's GPU tile memory pool for any page that also allocates a WebGL canvas. + +**Fix:** `WebViewEngine.configure()` now sets `setOffscreenPreRaster(false)`. Pages render lazily as they scroll, which uses far less memory. This change is safe for all WebView engines; the upstream Android team recommends `false` for non-trivial pages. + +**Commit:** see `fix(webgl): disable setOffscreenPreRaster to stop WebView tile memory exhaustion` on the `perf/webgl-optimization` branch. + +--- + +## 4. WebView fetch() against `file://` .wasm — FIXED + +**Symptom:** Games that call `fetch("js/libs/something.wasm")` from their main.js hang silently. The page reaches `initRuntime(...)` and never returns. No console error is logged. + +**Root cause:** Modern Chromium restricts `fetch()` against `file://` URLs. Older Android WebView versions also block `XMLHttpRequest` for `.wasm` files in some configurations. + +**Fix:** `WebViewEngine.WebViewClient.shouldInterceptRequest` now also intercepts any URL ending in `.wasm` (with optional `?...` or `#...`) and serves the file from disk with `application/wasm` MIME. This works around the fetch policy because the WebView's own resource pipeline delivers the response. + +**Commit:** see `fix(webgl): serve .wasm assets via shouldInterceptRequest; mirror page console` on the `perf/webgl-optimization` branch. + +--- + +## 5. Page-side console not visible in logcat — FIXED + +**Symptom:** When a game's page throws an unhandled error or logs via `console.log/error/warn`, the message is not visible in `adb logcat` even with `chromium:V` filter. Debugging requires chrome://inspect over USB, which is slow and not always possible. + +**Root cause:** The pre-existing `WebChromeClient.onConsoleMessage` swallowed the "Scripts may close only the windows that were opened by it" warning and forwarded everything else to `super.onConsoleMessage(msg)`, which goes to the `chromium` tag at the default level (often suppressed on production WebView builds). + +**Fix:** The handler now mirrors every page-side console message to the `Runestone` logcat tag with format `page-console[LEVEL] LINE: MESSAGE`. The pre-existing filter for the close-window warning is preserved. + +**Commit:** see `fix(webgl): serve .wasm assets via shouldInterceptRequest; mirror page console` on the `perf/webgl-optimization` branch. + +--- + +## 6. WebViewEngine.classify `?webgl2=1` hint to pre-5.2 PIXI — FIXED + +**Symptom:** Some MZ games built against PIXI v5.0/5.1 (which do not ship `PIXI.WebGL2Renderer`) read the `webgl2=1` query param via `Utils.isOptionValid('webgl2')` and try a WebGL2 path the bundled PIXI does not support, producing a black screen. + +**Root cause:** `WebglConfigBuilder.queryParams(WebglVersion.WEBGL2)` was emitting `&webgl2=1`. The Kotlin-side decision is what the JS bootstrap should honour; the URL hint was leaking the WebGL2 intent to games that can't act on it. + +**Fix:** `?webgl=1&renderer=webgl2` (no `&webgl2=1`). The JS bootstrap still attempts the WebGL2 upgrade when it makes sense. + +**Commit:** see `fix(webgl): stop emitting webgl2=1 in the game URL hint` on the `perf/webgl-optimization` branch. + +--- + +## 7. WebViewMzEngine only matches `www/` layout — FIXED + +**Symptom:** Some MZ games (e.g. Look Outside) ship `index.html` at the root with `js/rmmz_*.js` at the root, no `www/` directory. The detector returned false and the game fell through to the generic HTML engine, getting the wrong renderer hint and the wrong save path. + +**Root cause:** `WebViewMzEngine.canRun` only checked the standard `www/` layout. + +**Fix:** Detection now also matches `js/rmmz_*.js` at the root. `launch()` picks the right entry point (`www/index.html` or `index.html`). `getSaves()` checks both save/ directory layouts. + +**Commit:** see `fix(detector): recognise MZ games with index.html at the root` on the `perf/webgl-optimization` branch. diff --git a/docs/webgl-perf-testing.md b/docs/webgl-perf-testing.md new file mode 100644 index 0000000..e9e07f5 --- /dev/null +++ b/docs/webgl-perf-testing.md @@ -0,0 +1,98 @@ +# WebGL Performance & Testing — Manual Matrix + +Branch: `perf/webgl-optimization` +Scope: WebView-based RPG Maker MV / MZ, plus generic HTML5 engines (Tyrano, Construct, Twine, Ruffle, VN Maker) that share the same `WebViewEngine` path. + +## Why this doc exists + +The change makes the `WebViewEngine` prefer WebGL2 → WebGL1 → canvas, and forwards a previously dead `useWebgl2` setting end-to-end. PIXI v4 (MV) and PIXI v5 (MZ) react differently. WebView version varies wildly across Android OEMs and Chrome updates. There are no instrumentation tests in the repo, so this is the only way to know "does it actually work" before merging. + +## Automated coverage (already on the branch) + +`./gradlew :app:testDebugUnitTest` runs `WebglConfigBuilderTest`, which covers the pure-Kotlin decision table: + +- MV → always WEBGL1 +- MZ + `useWebgl2` → WEBGL2 hint +- MZ + no `useWebgl2` → WEBGL1 +- `forceCanvas` wins for every engine family +- `webgl=false` → empty query string +- Query string composition per version + +This is *not* a substitute for on-device testing — it only proves the Kotlin side makes the right decision. The actual renderer choice is made inside PIXI / the game's own `Graphics._createRenderer`, which the JS bootstrap can influence but not control. + +## What the runtime actually does + +`WebViewEngine.loadGame` builds a query string via `WebglConfigBuilder.buildQuery(...)`: + +| Engine | useWebgl2 | forceCanvas | webgl | Query string (appended to `index.html`) | +|---|---|---|---|---| +| MV | any | false | true | `?webgl=1&renderer=webgl` | +| MZ | true | false | true | `?webgl=1&webgl2=1&renderer=webgl2` | +| MZ | false | false | true | `?webgl=1&renderer=webgl` | +| any | any | true | true | `?webgl=0&renderer=canvas` | +| any | any | any | false | *(empty)* | + +The query string is a **hint**. After the page loads, `webgl-bootstrap.js` (injected in `onPageFinished`) probes the actual context, patches PIXI to use the picked renderer, and posts back via `RunestoneBridge.bootDetailed(...)`. + +## How to read the logcat line + +When the game finishes booting, the Kotlin `Bootstrapper` logs one of: + +- `Game booted: WebGL=true WebAudio=true renderer=webgl2 webglVersion=2` — WebGL2 won +- `Game booted: WebGL=true WebAudio=true renderer=webgl webglVersion=1` — WebGL1 +- `Game booted: WebGL=true WebAudio=true renderer=canvas webglVersion=0` — fell back to canvas +- `Game booted: WebGL=true WebAudio=true` — old two-arg form (legacy game didn't use new bootstrap) + +If you see `Failed to create WebGL context` in the page console, capture it; that's a real failure we need to defend against. + +## Devices to test + +Minimum: one device with Android 10+, one with Android 6/7/8 (older WebView), one emulator on API 26. The full matrix below is the ideal; if you have time for two devices only, pick the oldest one and the newest one. + +## Test matrix (fill in per build) + +| # | Game | Engine | Device model | Android ver | WebView ver | useWebgl2 | forceCanvas | integerScaling | FPS avg (gameplay) | FPS avg (battle/menu) | Boot OK | Pixel-art crisp? | Console clean? | Logcat renderer= | Notes / regressions | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| 1 | Fear & Hunger | MV | … | … | … | on | off | off | | | ✓/✗ | ✓/✗ | ✓/✗ | | | +| 2 | Fear & Hunger | MV | … | … | … | on | off | **on** | | | ✓/✗ | ✓/✗ | ✓/✗ | | tile size, aliasing | +| 3 | Fear & Hunger | MV | … | … | … | n/a | **on** | off | | | ✓/✗ | n/a | ✓/✗ | | force-canvas fallback | +| 4 | (any MZ title) | MZ | … | … | … | **on** | off | off | | | ✓/✗ | n/a | ✓/✗ | | confirm `webglVersion=2` | +| 5 | (any MZ title) | MZ | … | … | … | **off** | off | off | | | ✓/✗ | n/a | ✓/✗ | | confirm `webglVersion=1` | +| 6 | (pixel-art MZ) | MZ | … | … | … | on | off | **on** | | | ✓/✗ | ✓/✗ | ✓/✗ | | no blur, no antialias | +| 7 | TyranoBuilder game | HTML | … | … | … | on | off | off | | | ✓/✗ | n/a | ✓/✗ | | | +| 8 | (broken game) | any | … | … | … | on | **on** | off | | | ✓/✗ | n/a | ✓/✗ | | emergency escape hatch | + +## Procedure + +For each row: + +1. Build: `./gradlew :app:assembleDebug` +2. Install on the device, `adb logcat -c && adb logcat | grep -E 'Runestone|chromium|WebGL'` running. +3. Launch the game from the home screen. +4. Wait until the title screen is visible. Note FPS overlay (top-right, monospace, green). +5. Play 5 minutes in the heaviest area (battle / large map / animation). +6. Watch logcat for `Game booted: …` line and capture the `renderer=` value. +7. Open Chrome `chrome://inspect` (or `adb logcat | grep -i 'console'` for in-page errors). Note any `WebGL` errors. +8. For pixel-art rows, take a screenshot and zoom to a sprite edge — verify no blur, no sub-pixel shimmer. +9. Hit Home button, return to the game. Note whether WebGL context is lost (should be — `onResume` re-injects; verify by FPS dropping to 0 and recovering within 1 second). +10. Fill the row in the matrix above. For "✗", capture the failure mode (black screen, blank sprites, FPS < 30, etc.). + +## Known regressions to watch for + +- **PIXI v4 + WebGL2 forcing**: MV games must not be force-promoted to WebGL2. The decision table hard-codes MV → WEBGL1; verify row 1 in the matrix still picks `webglVersion=1`. +- **`forceCanvas` regression**: when forced, the game should boot to a working 2D canvas. Some MV games crash without WebGL; if you find one, document the game in this doc and we'll consider a per-game `forceCanvas` default override. +- **WebGL context loss on resume**: the `onResume` path calls `webViewEngine?.resumeTimers()` and `onResume()` but does **not** re-inject `webgl-bootstrap.js`. If a game loses context, it may render to a black canvas until the next scene change. Watch row 9. +- **Hi-DPI resolution clamp**: phones with DPR 3 (Samsung Galaxy S-line) should now cap at resolution 2. Watch for "everything is blurry" reports — that's the clamp too aggressive, fix is to bump to 3. +- **Audio regression**: `webgl-bootstrap.js` runs in `onPageFinished`, *after* `forceAudioExt` and `localStorage` shims. None of its code touches WebAudio, so audio should be unaffected. If audio breaks, bisect by disabling the new injection. + +## Out of scope (don't test here) + +- mkxp-z (RGSS) — separate native engine, has its own filter chain in `feature/visual-filters`. +- EasyRPG — different renderer entirely. +- Ren'Py / Godot — bundled native wrappers, not WebView. +- Store, downloads, RTP, save sync. +- Phase 6 PixiJS filter bridge from `docs/visual-filters-roadmap.md` — that's a future, larger change. + +## When you're done + +Commit the filled-in matrix to the branch as `docs/webgl-perf-testing-results.md` and reference it from the PR description. If any row fails, do **not** revert the change blindly — open a sub-task and document the failure mode in the matrix notes; the safest rollback is to flip the per-game `useWebgl2` override to off. diff --git a/godot-plugin/build.gradle.kts b/godot-plugin/build.gradle.kts new file mode 100644 index 0000000..22ace95 --- /dev/null +++ b/godot-plugin/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "com.runestone.plugin.godot" + compileSdk = 35 + + defaultConfig { + applicationId = "com.runestone.plugin.godot" + minSdk = 26 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } +} + +kotlin { + jvmToolchain(17) +} diff --git a/godot-plugin/src/main/AndroidManifest.xml b/godot-plugin/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9a64732 --- /dev/null +++ b/godot-plugin/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/godot-plugin/src/main/java/com/runestone/plugin/godot/GodotPluginActivity.kt b/godot-plugin/src/main/java/com/runestone/plugin/godot/GodotPluginActivity.kt new file mode 100644 index 0000000..6a91911 --- /dev/null +++ b/godot-plugin/src/main/java/com/runestone/plugin/godot/GodotPluginActivity.kt @@ -0,0 +1,32 @@ +package com.runestone.plugin.godot + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.widget.Toast + +class GodotPluginActivity : Activity() { + + companion object { + private const val TAG = "GodotPlugin" + private const val EXTRA_GAME_PATH = "game_path" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + Log.i(TAG, "Godot plugin activity started") + + val gamePath = intent.getStringExtra(EXTRA_GAME_PATH) + ?: intent.data?.getQueryParameter("path") + ?: run { + Toast.makeText(this, "No game path provided", Toast.LENGTH_SHORT).show() + finish() + return + } + + Toast.makeText(this, "Godot engine: $gamePath", Toast.LENGTH_LONG).show() + // TODO: Launch Godot native activity with game path + finish() + } +} diff --git a/scripts/adb-connect.sh b/scripts/adb-connect.sh new file mode 100755 index 0000000..5769916 --- /dev/null +++ b/scripts/adb-connect.sh @@ -0,0 +1,149 @@ +#!/usr/bin/env bash +# adb-connect.sh — bring up a persistent wireless adb session for a USB device. +# +# Usage: +# ./scripts/adb-connect.sh # use the cached IP +# ./scripts/adb-connect.sh 192.168.1.42 # explicit IP +# ./scripts/adb-connect.sh --usb # tear down TCP, go back to USB-only +# ./scripts/adb-connect.sh --status # report current state +# +# The script is idempotent. Running it when TCP is already enabled just +# reconnects. It also caches the last successful IP at +# .runestone/.last-adb-ip so subsequent runs don't need to re-derive it. +set -euo pipefail + +STATE_DIR=".runestone" +STATE_FILE="$STATE_DIR/.last-adb-ip" +PORT="${ADB_PORT:-38775}" + +mkdir -p "$STATE_DIR" + +usage() { + cat < "$STATE_FILE" +} + +# --usb: tell the device to drop TCP listening. +if [[ "${1:-}" == "--usb" ]]; then + if ! adb devices | grep -qE "device$"; then + echo "No device connected over USB or TCP." >&2 + exit 1 + fi + adb usb + rm -f "$STATE_FILE" + echo "Switched to USB-only. Reconnect the cable if it isn't already." + exit 0 +fi + +# --status: report state. +if [[ "${1:-}" == "--status" ]]; then + echo "=== adb devices ===" + adb devices + echo + echo "=== TCP listen status (per device) ===" + adb devices | awk '/device$/{print $1}' | while read -r d; do + props=$(adb -s "$d" shell getprop service.adb.tcp.port 2>/dev/null | tr -d '\r') + echo " $d: service.adb.tcp.port = ${props:-}" + done + if [[ -f "$STATE_FILE" ]]; then + echo + echo "=== Cached IP ===" + echo " $(cat "$STATE_FILE"):$PORT" + fi + exit 0 +fi + +# Help +if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then + usage + exit 0 +fi + +# Main: ensure a USB device is connected, then enable TCP. +if ! adb devices | awk '$2=="device"{exit 0} {exit 1}'; then + echo "No adb device is connected. Plug in the USB cable and try again." >&2 + exit 1 +fi + +# Enable TCP on the device. The USB device shows up as a transport, not an +# IP:port, so we use plain `adb` (no -s) to target the only USB device. +echo "Enabling TCP listening on port $PORT on the USB device..." +adb tcpip "$PORT" + +# Find the device's wlan0 IP. This requires the device to be on Wi-Fi. +# We try `wlan0` first, then `wlan1`, then the route's source IP. +device_ip() { + adb shell ip -4 addr show wlan0 2>/dev/null \ + | awk '/inet /{print $2}' | head -1 | cut -d/ -f1 +} + +EXPLICIT_IP="${1:-}" +if [[ -n "$EXPLICIT_IP" ]]; then + TARGET_IP="$EXPLICIT_IP" +else + TARGET_IP="$(cached_ip)" + if [[ -z "$TARGET_IP" ]]; then + echo + echo "No cached IP. Discovering the device's Wi-Fi address..." + TARGET_IP="$(device_ip)" + fi +fi + +if [[ -z "$TARGET_IP" ]]; then + cat <&2 + +Couldn't find the device's Wi-Fi IP automatically. Make sure: + - The device is connected to Wi-Fi (not just cellular) + - The device is awake (some devices sleep the network stack) + +Then either: + - Re-run with the IP explicitly: $0 192.168.1.42 + - Or run \`adb shell ip addr show wlan0\` and look for the inet line. +EOF + exit 2 +fi + +# Try to connect. If it fails, fall back to a quick re-scan. +echo +echo "Connecting to $TARGET_IP:$PORT ..." +if ! adb connect "$TARGET_IP:$PORT"; then + echo "Connect failed. Discovered IP may be stale. Re-scanning..." + TARGET_IP="$(device_ip)" + if [[ -n "$TARGET_IP" ]]; then + echo "Retrying with $TARGET_IP:$PORT ..." + adb connect "$TARGET_IP:$PORT" + else + echo "Could not re-discover IP. Plug the cable back in and try again." >&2 + exit 3 + fi +fi + +if adb -s "$TARGET_IP:$PORT" shell echo ok >/dev/null 2>&1; then + save_ip "$TARGET_IP" + echo + echo "Connected: $TARGET_IP:$PORT" + echo "Run: adb -s $TARGET_IP:$PORT logcat -c && adb -s $TARGET_IP:$PORT logcat" + echo "Or: DEVICE=$TARGET_IP:$PORT ./scripts/adb-smoke-test.sh home" +else + echo "Connect reported success but the device is not responding." >&2 + echo "Try: adb kill-server && adb start-server && $0" >&2 + exit 4 +fi diff --git a/scripts/next-test.sh b/scripts/next-test.sh new file mode 100755 index 0000000..7faa877 --- /dev/null +++ b/scripts/next-test.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# next-test.sh — install the latest debug APK and stream logcat. +# +# Assumes ./scripts/adb-connect.sh has been run at least once and a +# wireless adb session is up. The script auto-runs adb-connect.sh if +# it isn't, so the first call after a fresh boot also works. +set -euo pipefail + +DEVICE="${DEVICE:-}" +APK="${APK:-app/build/outputs/apk/debug/app-debug.apk}" + +# If DEVICE wasn't passed, try the cached IP, then run the connector. +if [[ -z "$DEVICE" && -f .runestone/.last-adb-ip ]]; then + DEVICE="$(cat .runestone/.last-adb-ip):5555" +fi + +if [[ -z "$DEVICE" ]]; then + echo "No device IP cached. Running adb-connect.sh..." + ./scripts/adb-connect.sh + DEVICE="$(cat .runestone/.last-adb-ip):5555" +fi + +echo "Using device: $DEVICE" +echo + +# Sanity check +if ! adb -s "$DEVICE" shell echo ok >/dev/null 2>&1; then + echo "Device $DEVICE is not reachable. Trying to reconnect..." + ./scripts/adb-connect.sh + DEVICE="$(cat .runestone/.last-adb-ip):5555" +fi + +# Build + install +./gradlew :app:assembleDebug +adb -s "$DEVICE" install -r "$APK" + +# Clear and stream +adb -s "$DEVICE" logcat -c +echo +echo "=== Streaming Runestone + chromium logs. Press Ctrl+C to stop. ===" +echo +adb -s "$DEVICE" logcat Runestone:V chromium:V '*:S' diff --git a/settings.gradle.kts b/settings.gradle.kts index b1c1dc7..2238cbb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,3 +16,4 @@ dependencyResolutionManagement { rootProject.name = "Runestone" include(":app") +include(":godot-plugin")